summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-13 17:46:14 +0000
committerKarl Berry <karl@freefriends.org>2021-02-13 17:46:14 +0000
commite10da232612cffe84bd4104d6e49a4b3eb5408f1 (patch)
tree2557cc3a01b6cfadfa75efc0e213062ec648990c /Build
parent29a53021f09a33510bfc86395b70476368e85b7f (diff)
icu-68.2
git-svn-id: svn://tug.org/texlive/trunk@57727 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
-rw-r--r--Build/source/libs/README2
-rw-r--r--Build/source/libs/icu/ChangeLog4
-rw-r--r--Build/source/libs/icu/TLpatches/TL-Changes15
-rw-r--r--Build/source/libs/icu/TLpatches/patch-01-configure-gcc12
-rw-r--r--Build/source/libs/icu/TLpatches/patch-02-configure-solaris6
-rw-r--r--Build/source/libs/icu/TLpatches/patch-04-data-makefile15
-rw-r--r--Build/source/libs/icu/TLpatches/patch-10-ES8
-rw-r--r--Build/source/libs/icu/TLpatches/patch-12-mingw6
-rw-r--r--Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX8
-rw-r--r--Build/source/libs/icu/TLpatches/patch-14-xopen4
-rw-r--r--Build/source/libs/icu/TLpatches/patch-19-netbsd6
-rw-r--r--Build/source/libs/icu/TLpatches/patch-20-private12
-rw-r--r--Build/source/libs/icu/TLpatches/patch-22-max_align_t51
-rwxr-xr-xBuild/source/libs/icu/configure20
-rw-r--r--Build/source/libs/icu/icu-src/APIChangeReport.html2816
-rw-r--r--Build/source/libs/icu/icu-src/APIChangeReport.md1373
-rw-r--r--Build/source/libs/icu/icu-src/LICENSE8
-rw-r--r--Build/source/libs/icu/icu-src/readme.html40
-rw-r--r--Build/source/libs/icu/icu-src/source/.clang-format11
-rw-r--r--Build/source/libs/icu/icu-src/source/Doxyfile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props47
-rw-r--r--Build/source/libs/icu/icu-src/source/allinone/Build.Windows.ProjectConfiguration.props8
-rw-r--r--Build/source/libs/icu/icu-src/source/allinone/Build.Windows.UWP.ProjectConfiguration.props14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/Makefile.in47
-rw-r--r--Build/source/libs/icu/icu-src/source/common/bmpset.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/brkeng.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/brkiter.cpp35
-rw-r--r--Build/source/libs/icu/icu-src/source/common/bytesinkutil.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/charstr.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/charstr.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/common/charstrmap.h55
-rw-r--r--Build/source/libs/icu/icu-src/source/common/cmemory.h185
-rw-r--r--Build/source/libs/icu/icu-src/source/common/common.vcxproj22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/cstring.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/dictbe.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/dictbe.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/icuplug.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/icuplugimp.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/localematcher.cpp360
-rw-r--r--Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/localeprioritylist.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locdispnames.cpp57
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locdistance.cpp97
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locdistance.h56
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locid.cpp1307
-rw-r--r--Build/source/libs/icu/icu-src/source/common/loclikely.cpp112
-rw-r--r--Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp208
-rw-r--r--Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h54
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locmap.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/lsr.cpp31
-rw-r--r--Build/source/libs/icu/icu-src/source/common/lsr.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/messageimpl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h1577
-rw-r--r--Build/source/libs/icu/icu-src/source/common/norm2allmodes.h34
-rw-r--r--Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/normalizer2impl.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/patternprops.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/pluralmap.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/propname_data.h1791
-rw-r--r--Build/source/libs/icu/icu-src/source/common/punycode.cpp87
-rw-r--r--Build/source/libs/icu/icu-src/source/common/punycode.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/putil.cpp130
-rw-r--r--Build/source/libs/icu/icu-src/source/common/putilimp.h82
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbi.cpp217
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbi_cache.h6
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/common/rbbicst.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbidata.cpp109
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbidata.h101
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbinode.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbirb.cpp49
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbirpt.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbiscan.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp218
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbisetb.h48
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp265
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbitblb.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/common/resource.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ruleiter.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/serv.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/servnotf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/sharedobject.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/sources.txt196
-rw-r--r--Build/source/libs/icu/icu-src/source/common/stringpiece.cpp41
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uarrsort.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uassert.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h832
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidiimp.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucase.cpp36
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucase.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucase_props_data.h887
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucasemap.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uchar.cpp35
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uchar_props_data.h6828
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucln_cmn.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucln_imp.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_bld.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucol_swp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucurr.cpp31
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uelement.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uinvchar.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uinvchar.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uloc.cpp997
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp164
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ulocimp.h86
-rw-r--r--Build/source/libs/icu/icu-src/source/common/umutex.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unames.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/appendable.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/caniter.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/chariter.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/docmain.h15
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/edits.h34
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h34
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/idna.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h54
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h217
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/locid.h70
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h32
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/platform.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/putil.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/resbund.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/strenum.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h116
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h107
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h47
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h31
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucat.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uchar.h209
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uclean.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h165
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h15
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h62
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/udata.h29
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uenum.h21
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uidna.h30
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uiter.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h33
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uloc.h303
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/umachine.h68
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h43
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uniset.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unistr.h94
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unorm.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h57
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/urename.h33
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ures.h91
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uscript.h47
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uset.h149
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ushape.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/usprep.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ustring.h134
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utext.h132
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utf.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utf16.h21
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utf8.h31
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utrace.h93
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utypes.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uversion.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unifiedcache.h30
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uniquecharstr.h98
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unisetspan.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unistr.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unormimp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uposixdefs.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uprops.cpp7
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uprops.h31
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresbund.cpp22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresdata.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresdata.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresimp.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uscript.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uscript_props.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustr_imp.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustring.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utext.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/util.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utrie.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utrie2.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utrie_swap.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uts46.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utypes.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvector.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvectr32.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvectr64.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/wintz.cpp301
-rw-r--r--Build/source/libs/icu/icu-src/source/common/wintz.h2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/config/dist-data.sh106
-rw-r--r--Build/source/libs/icu/icu-src/source/config/dist.mk2
-rw-r--r--Build/source/libs/icu/icu-src/source/config/icu-config-bottom10
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-cygwin2
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-cygwin642
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-mingw12
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-mingw6412
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/configure35
-rw-r--r--Build/source/libs/icu/icu-src/source/configure.ac99
-rw-r--r--Build/source/libs/icu/icu-src/source/data/BUILDRULES.py144
-rw-r--r--Build/source/libs/icu/icu-src/source/data/Makefile.in16
-rw-r--r--Build/source/libs/icu/icu-src/source/data/build.xml397
-rw-r--r--Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt171
-rw-r--r--Build/source/libs/icu/icu-src/source/data/icu-coll-deprecates.xml43
-rw-r--r--Build/source/libs/icu/icu-src/source/data/icu-config.xml809
-rw-r--r--Build/source/libs/icu/icu-src/source/data/icu-locale-deprecates.xml60
-rw-r--r--Build/source/libs/icu/icu-src/source/data/icu-rbnf-deprecates.xml34
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icubin182144 -> 185274 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icubin522900 -> 546334 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/icudt68l.dat (renamed from Build/source/libs/icu/icu-src/source/data/in/icudt65l.dat)bin19002384 -> 19163040 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/nfc.nrmbin34904 -> 35124 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/nfkc.nrmbin53852 -> 54136 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrmbin51236 -> 51472 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/pnames.icubin41998 -> 42682 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/ubidi.icubin26204 -> 26636 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/ucase.icubin28682 -> 28898 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/ulayout.icubin13376 -> 13488 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/unames.icubin274568 -> 283932 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/uprops.icubin133040 -> 135656 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/uts46.nrmbin58416 -> 58404 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/makedata.mak32
-rw-r--r--Build/source/libs/icu/icu-src/source/data/makedata.vcxproj7
-rw-r--r--Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj4
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt7
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt421
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt52
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt22861
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt265
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt492
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt962
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/changes.txt321
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt34
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt9
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt13
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt16
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt173
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt1521
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/scrptrun/Makefile.in12
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/scrptrun/sources.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/uconv/sources.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp50
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c3
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/Makefile.in59
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/buddhcal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/calendar.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/cecal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/cecal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/chnsecal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collation.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp60
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationfcd.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationiterator.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationkeys.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationweights.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrecog.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/currunit.cpp33
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp96
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decContext.h32
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decNumber.h122
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp64
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-ieee.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp387
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp118
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp161
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/format.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.h95
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h37
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp147
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/gender.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/gregoimp.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp9
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj38
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters56
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj40
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp57
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/indiancal.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/islamcal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/japancal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp615
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp32
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measunit.cpp629
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp929
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h241
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measure.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrs.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrule.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nounit.cpp42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_asformat.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp25
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp44
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_compact.h15
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp101
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h50
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decnum.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp258
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp292
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp342
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_longnames.h194
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_mapper.h68
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_microprops.h99
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp48
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_output.cpp53
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp84
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h35
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp94
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp59
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp15
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_scientific.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp443
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h69
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_symbolswrapper.cpp131
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_types.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp208
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h125
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_utils.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_utypes.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp64
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp25
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_types.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp193
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp97
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numsys.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp90
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/olsontz.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/persncal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/persncal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/pluralranges.cpp144
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/pluralranges.h67
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp231
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h33
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/quant.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_set.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexcmp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexcst.h200
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/i18n/regexcst.pl7
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexst.cpp245
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexst.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regextxt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/region.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rematch.cpp290
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp67
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/scriptset.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp177
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/sources.txt240
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/strmatch.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/taiwncal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/timezone.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/translit.cpp31
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/transreg.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tridpars.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucal.cpp29
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucln_in.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp130
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/udat.cpp23
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp48
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ulistformatter.cpp15
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h23
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h93
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h97
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h17
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h31
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/formattedvalue.h66
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h68
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h1466
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h89
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h317
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h255
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h72
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h58
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h36
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/search.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h27
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h25
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h127
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h127
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h52
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h39
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h76
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h95
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h72
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h89
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ulistformatter.h116
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h25
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h45
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h117
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h107
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h477
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h21
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h40
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h175
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h55
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h254
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h89
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h43
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp253
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h93
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp546
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_converter.h173
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_data.cpp428
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_data.h229
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_router.cpp132
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_router.h162
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unum.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uregex.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp119
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/usrchimp.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp284
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/vzone.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/zonemeta.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/icudefs.mk.in4
-rw-r--r--Build/source/libs/icu/icu-src/source/io/Makefile.in11
-rw-r--r--Build/source/libs/icu/icu-src/source/io/io.vcxproj20
-rw-r--r--Build/source/libs/icu/icu-src/source/io/sources.txt12
-rw-r--r--Build/source/libs/icu/icu-src/source/io/ucln_io.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/io/ufile.cpp46
-rw-r--r--Build/source/libs/icu/icu-src/source/io/ufile.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h109
-rw-r--r--Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp19
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/Makefile.in13
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h56
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h54
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj24
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/sources.txt5
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/__main__.py41
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py155
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration_schema.json43
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/renderers/common_exec.py19
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/filtration_test.py96
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/brkitr/LOCALE_DEPS.json10
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/locales/LOCALE_DEPS.json (renamed from Build/source/libs/icu/icu-src/source/python/icutools/databuilder/locale_dependencies.py)269
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/rbnf/LOCALE_DEPS.json36
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/utils.py13
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/runConfigureICU28
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/Makefile.in2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/samples/all/samplecheck.bat4
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/break/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/break/break.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/break/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/break/ubreak.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/cal/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/cal/cal.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/cal/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/cal/uprint.c5
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/cal/uprint.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/case/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/case/case.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/case/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/case/ucase.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/citer/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/citer/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/coll/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp40
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/coll/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/csdet/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/csdet/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/date/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/date/date.c7
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/date/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/date/uprint.c5
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/date/uprint.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datecal/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/README.TXT2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/datefmt/util.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/defs.mk2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontMap.GDI2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontMap.Gnome2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/LayoutSample.rc4
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/Surface.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/clayout.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/pflow.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/pflow.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/readme.html2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/resource.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/legacy/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/legacy/README2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/numfmt/util.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/props/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/props/props.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/props/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/rules.mk2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/strsrch/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/strsrch/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp60
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/README.TXT2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/main.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/util.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/util.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uciter8/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uciter8/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c18
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c12
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/data06.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c6
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/reader.c6
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/writer.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/fortunedefs.mk2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/resources/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/resources/es.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/resources/fortune_resources.mak2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/resources/root.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c14
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj106
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ugrep/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ugrep/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj34
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/en.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/resources.mak2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/resources.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/root.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/sr.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c12
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ustring/Makefile2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ustring/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/stubdata/Makefile.in9
-rw-r--r--Build/source/libs/icu/icu-src/source/stubdata/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj18
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c203
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c46
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj17
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj.filters3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c63
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c440
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c57
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c20
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c37
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c63
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c70
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c40
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c120
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c195
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt96
-rw-r--r--Build/source/libs/icu/icu-src/source/test/fuzzer/Makefile.in4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp50
-rw-r--r--Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in29
-rw-r--r--Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh35
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/hdrtst/testtagsguards.sh22
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp56
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/caltest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp61
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp76
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/convtest.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp44
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp172
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp390
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp103
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp73
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp303
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h25
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp57
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.h52
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj19
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters9
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itformat.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp51
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp497
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp94
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp2475
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/loctest.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp982
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numberformat2test.cpp3090
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h61
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp1574
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp193
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp22
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_parse.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp36
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_permutation.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp43
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp210
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp404
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp439
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/plurults.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp1328
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h27
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp111
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regextst.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp112
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp33
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp168
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/strtest.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp79
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transtst.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp41
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp153
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp33
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp887
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp62
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp123
-rw-r--r--Build/source/libs/icu/icu-src/source/test/iotest/filetst.c42
-rw-r--r--Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp51
-rw-r--r--Build/source/libs/icu/icu-src/source/test/iotest/iotest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/ReadMe.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/Makefile.in4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/README2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/charperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collationperf/CollPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collationperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp108
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collationperf/readme.html2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf2/CollPerf2_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf2/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/convperf/ConvPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/convperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj16
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/convperf/convperf_ansi.pl2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/convperf/convperf_iml.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/icuperf2report.xsl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/localecanperf/Makefile.in79
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/localecanperf/localecanperf.cpp94
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/localecanperf/runTest.sh22
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/Makefile.in2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/simplenormperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/Common.pl.template2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/Format.pm2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/PerfFramework.pm2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/StrSrchPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/unisetperf/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.bat2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.sh2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.bat2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.sh2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.bat2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.sh2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/usetperf/Makefile.in2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/usetperf/UsetPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ustrperf/Makefile.in2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utfperf/Makefile.in2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/utfperf/UtfPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/Makefile.in2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.bat2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.sh2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py22
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt2461
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt2901
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt25
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt118
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt1996
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/README.md4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt32
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt32
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt26
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt31
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt34
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt34
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/sentence.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/calendar.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/_readme.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt454
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt203
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/collationtest.txt43
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/encoded.utf16bebin2382 -> 2366 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt1648
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt97
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt402
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt30
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt24
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/root.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt480
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/Makefile.in9
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj20
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/sources.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genbrk/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genbrk/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genccode/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c10
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genccode/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencfu/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencfu/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencmn/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencmn/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencnval/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencnval/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gendict/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gendict/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/sources.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in7
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/read.c1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/rle.c7
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/sources.txt12
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genren/Makefile15
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gensprep/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gensprep/sources.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gensprep/store.c144
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gentest/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gentest/sources.txt2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/tools/icu-file-utf8-check.py106
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/Makefile.in6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/plugin_sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icupkg/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icupkg/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuswap/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuswap/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/makeconv/sources.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in3
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp131
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c5
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/sources.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in14
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/package.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp35
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/sources.txt24
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp17
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj32
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp54
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp24
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in29
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones19
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp13
-rw-r--r--Build/source/libs/icu/version.ac5
1143 files changed, 66805 insertions, 38978 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README
index 9ff8e71cf5c..db1ea04591b 100644
--- a/Build/source/libs/README
+++ b/Build/source/libs/README
@@ -28,7 +28,7 @@ graphite2 1.3.14 - checked 10apr20
harfbuzz 2.7.4 - checked 27dec20
https://github.com/harfbuzz/harfbuzz/releases/download/2.7.4/
-icu 63.1 - checked 8jan19
+icu 68.2 - checked 13feb21
http://download.icu-project.org/files/icu4c/
libpaper 1.1.24+nmu2 - checked 24oct13
diff --git a/Build/source/libs/icu/ChangeLog b/Build/source/libs/icu/ChangeLog
index 850544e7075..d18eed3eff1 100644
--- a/Build/source/libs/icu/ChangeLog
+++ b/Build/source/libs/icu/ChangeLog
@@ -1,3 +1,7 @@
+2021-02-13 Karl Berry <karl@freefriends.org>
+
+ * Import icu-68.2, with new pain for max_align_t.
+
2019-12-12 Karl Berry <karl@freefriends.org>
* Import icu-65.1, now requiring -lpthread, at least by upmendex.
diff --git a/Build/source/libs/icu/TLpatches/TL-Changes b/Build/source/libs/icu/TLpatches/TL-Changes
index 239bde3de62..adf53a6443b 100644
--- a/Build/source/libs/icu/TLpatches/TL-Changes
+++ b/Build/source/libs/icu/TLpatches/TL-Changes
@@ -1,10 +1,10 @@
Changes applied to the icu tree as obtained from:
- https://github.com/unicode-org/icu/releases/download/release-65-1/icu4c-65_1-src.tgz
- and icu4c-65_1-data.zip
+ https://github.com/unicode-org/icu/releases/download/release-68-2/icu4c-68_2-src.tgz
+ and icu4c-68_2-data.zip
cd $Build/source/libs/icu # for whatever $Build directory
# update version.ac
-tar xf /tmp/icu4c-*-src.tgz # should unpack into icu/*
+tar xf /tmp/icu4c-*-src.tgz # check that unpacks into icu/*
mv icu-src icu-prev
mv icu icu-src
cd icu-src
@@ -24,8 +24,9 @@ svn status | sed -n 's/^\!//p' # rerun, should be empty now
aux=$Build/source/build-aux
cp -p $aux/config.guess $aux/config.sub $aux/install-sh source
-# patch -p0 for all ../TLpatches/patch-* files, as needed.
-# Save original and diff after each, update patch-* file.
+# patch --backup -p0 for all ../TLpatches/patch-* files.
+# Save original (since not committed yet)
+# and diff after each to update patch-* file.
# Don't lose our leading comments.
# autoreconf in the TL directory (Build/source/libs/icu); don't run
@@ -35,12 +36,12 @@ cp -p $aux/config.guess $aux/config.sub $aux/install-sh source
#
# rebuild; must rerun configure (not just config.status),
# so easiest is to just do a whole new build.
-# That will also test use of the new icu version by our programs.
+# Besides, that also tests use of the new icu version by our programs.
# Assuming all seems ok, reduce size of source/data/in/icudt*.dat
# to decrease data segment size, e.g., for old BSD. First, check
# that we successfully built the full .dat:
-ver=65
+ver=68
srcdat=$Build/source/libs/icu/icu-src/source/data/in/icudt${ver}l.dat
cd $Work/libs/icu/icu-build/data/out/build/icudt${ver}l
indat=../../tmp/icudt${ver}l.dat
diff --git a/Build/source/libs/icu/TLpatches/patch-01-configure-gcc b/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
index 4a7a8b9b667..8799cc7feee 100644
--- a/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
+++ b/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
@@ -1,30 +1,30 @@
For TL, we do not want to prefer clang(++) for ICU
when the whole rest of the tree prefers gcc.
---- source/configure~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/configure 2019-12-11 15:28:59.429357803 -0800
-@@ -2911,5 +2911,5 @@
+--- source/configure~ 2020-12-17 11:34:38.000000000 -0800
++++ source/configure 2021-02-13 08:16:36.271761526 -0800
+@@ -2913,5 +2913,5 @@
ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
- for ac_prog in clang gcc cc c99 c89 xlc_r xlc cl.exe icc
+ for ac_prog in gcc cc clang c99 c89 xlc_r xlc cl.exe icc
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-@@ -2955,5 +2955,5 @@
+@@ -2957,5 +2957,5 @@
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in clang gcc cc c99 c89 xlc_r xlc cl.exe icc
+ for ac_prog in gcc cc clang c99 c89 xlc_r xlc cl.exe icc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
-@@ -3514,5 +3514,5 @@
+@@ -3516,5 +3516,5 @@
else
if test -n "$ac_tool_prefix"; then
- for ac_prog in clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC
+ for ac_prog in g++ c++ clang++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-@@ -3558,5 +3558,5 @@
+@@ -3560,5 +3560,5 @@
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC
diff --git a/Build/source/libs/icu/TLpatches/patch-02-configure-solaris b/Build/source/libs/icu/TLpatches/patch-02-configure-solaris
index 8d76a8bc66e..add9412f2df 100644
--- a/Build/source/libs/icu/TLpatches/patch-02-configure-solaris
+++ b/Build/source/libs/icu/TLpatches/patch-02-configure-solaris
@@ -1,8 +1,8 @@
Do not disable C++11 on Solaris, since we don't use the Sun compiler.
---- source/configure~ 2019-12-11 15:28:59.429357803 -0800
-+++ source/configure 2019-12-11 15:30:37.229105055 -0800
-@@ -6147,9 +6147,10 @@
+--- source/configure~ 2021-02-13 08:16:36.271761526 -0800
++++ source/configure 2021-02-13 08:18:10.826136078 -0800
+@@ -6149,9 +6149,10 @@
CXXFLAGS="$OLD_CXXFLAGS"
fi
- case "${host}" in
diff --git a/Build/source/libs/icu/TLpatches/patch-04-data-makefile b/Build/source/libs/icu/TLpatches/patch-04-data-makefile
deleted file mode 100644
index f54ad82f937..00000000000
--- a/Build/source/libs/icu/TLpatches/patch-04-data-makefile
+++ /dev/null
@@ -1,15 +0,0 @@
- This is needed on Solaris.
- https://unicode-org.atlassian.net/browse/ICU-20852
-
---- source/data/Makefile.in (revision 53392)
-+++ source/data/Makefile.in (working copy)
-@@ -148,7 +148,8 @@ ICUDATA_ARCHIVE = $(firstword $(wildcard $(srcdir)
- # and convert it to the current type.
- ifneq ($(ICUDATA_ARCHIVE),)
- ICUDATA_SOURCE_ARCHIVE = $(OUTDIR)/$(ICUDATA_PLATFORM_NAME).dat
--$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE) $(OUTDIR)
-+$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE)
-+ $(MKINSTALLDIRS) $(OUTDIR)
- $(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $(ICUDATA_ARCHIVE) $(ICUDATA_SOURCE_ARCHIVE)
- endif
- else
diff --git a/Build/source/libs/icu/TLpatches/patch-10-ES b/Build/source/libs/icu/TLpatches/patch-10-ES
index d129579be58..eff82c545a2 100644
--- a/Build/source/libs/icu/TLpatches/patch-10-ES
+++ b/Build/source/libs/icu/TLpatches/patch-10-ES
@@ -3,14 +3,12 @@
https://tug.org/pipermail/tlbuild/2020q1/004599.html
https://tug.org/pipermail/tlbuild/2020q1/004599.html
---- ubidiimp.h (revision 53315)
-+++ ubidiimp.h (working copy)
-@@ -33,6 +33,8 @@ typedef uint32_t Flags;
- is easier with the same names for the BiDi types in the code as there.
+--- source/common/ubidiimp.h~ 2020-12-17 11:34:38.000000000 -0800
++++ source/common/ubidiimp.h 2021-02-13 08:20:09.076105678 -0800
+@@ -42,4 +42,6 @@
See UCharDirection in uchar.h .
*/
+#undef ES
+#undef CS
enum {
L= U_LEFT_TO_RIGHT, /* 0 */
- R= U_RIGHT_TO_LEFT, /* 1 */
diff --git a/Build/source/libs/icu/TLpatches/patch-12-mingw b/Build/source/libs/icu/TLpatches/patch-12-mingw
index 7b4ff04f429..59b9ecb87f4 100644
--- a/Build/source/libs/icu/TLpatches/patch-12-mingw
+++ b/Build/source/libs/icu/TLpatches/patch-12-mingw
@@ -1,8 +1,8 @@
We don't want this for TeX Live cross compilation.
---- source/config/mh-mingw~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/config/mh-mingw 2019-12-11 15:34:02.831473103 -0800
-@@ -71,25 +71,7 @@
+--- source/config/mh-mingw~ 2020-12-17 11:34:38.000000000 -0800
++++ source/config/mh-mingw 2021-02-13 08:20:54.167330952 -0800
+@@ -76,25 +76,7 @@
STATIC_O = ao
-ifeq ($(ENABLE_SHARED),YES)
diff --git a/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX b/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
index 97031f24d3c..9949c1f7287 100644
--- a/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
+++ b/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
@@ -1,7 +1,7 @@
No `s' for STATIC_PREFIX.
---- source/config/Makefile.inc.in~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/config/Makefile.inc.in 2019-12-11 15:36:12.724809309 -0800
+--- source/config/Makefile.inc.in~ 2020-12-17 11:34:38.000000000 -0800
++++ source/config/Makefile.inc.in 2021-02-13 08:22:35.895582151 -0800
@@ -47,5 +47,5 @@
# Static library prefix and file extension
@@ -9,8 +9,8 @@
+STATIC_PREFIX =
LIBSICU = lib$(STATIC_PREFIX)$(ICUPREFIX)
A = a
---- source/icudefs.mk.in~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/icudefs.mk.in 2019-12-11 15:36:12.725809296 -0800
+--- source/icudefs.mk.in~ 2020-12-17 11:34:38.000000000 -0800
++++ source/icudefs.mk.in 2021-02-13 08:22:35.895582151 -0800
@@ -214,5 +214,5 @@
## If we can't use the shared libraries, use the static libraries
ifneq ($(ENABLE_SHARED),YES)
diff --git a/Build/source/libs/icu/TLpatches/patch-14-xopen b/Build/source/libs/icu/TLpatches/patch-14-xopen
index 704f8cea520..6d510df9b60 100644
--- a/Build/source/libs/icu/TLpatches/patch-14-xopen
+++ b/Build/source/libs/icu/TLpatches/patch-14-xopen
@@ -1,8 +1,8 @@
Do not define _XOPEN_SOURCE_EXTENDED on Solaris,
notwithstanding comments in icu source.
---- source/common/uposixdefs.h~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/common/uposixdefs.h 2019-12-11 15:37:42.741655847 -0800
+--- source/common/uposixdefs.h~ 2020-12-17 11:34:38.000000000 -0800
++++ source/common/uposixdefs.h 2021-02-13 08:29:38.779298547 -0800
@@ -52,8 +52,11 @@
* Poorly upgraded Solaris machines can't have this defined.
* Cleanly installed Solaris can use this #define.
diff --git a/Build/source/libs/icu/TLpatches/patch-19-netbsd b/Build/source/libs/icu/TLpatches/patch-19-netbsd
index 8bae72a5494..635e6214fbb 100644
--- a/Build/source/libs/icu/TLpatches/patch-19-netbsd
+++ b/Build/source/libs/icu/TLpatches/patch-19-netbsd
@@ -2,9 +2,9 @@
From: Marc Baudoin <babafou@babafou.eu.org>
tlbuild
---- source/common/uposixdefs.h~ 2019-12-11 15:37:42.741655847 -0800
-+++ source/common/uposixdefs.h 2019-12-11 15:38:16.991216886 -0800
-@@ -72,3 +72,7 @@
+--- source/common/uposixdefs.h~ 2021-02-13 08:29:38.779298547 -0800
++++ source/common/uposixdefs.h 2021-02-13 08:30:06.076827650 -0800
+@@ -78,3 +78,7 @@
#endif
+#if defined(__cplusplus) && defined(__NetBSD__)
diff --git a/Build/source/libs/icu/TLpatches/patch-20-private b/Build/source/libs/icu/TLpatches/patch-20-private
index 5cea1c18349..8ebf2a2c091 100644
--- a/Build/source/libs/icu/TLpatches/patch-20-private
+++ b/Build/source/libs/icu/TLpatches/patch-20-private
@@ -5,8 +5,8 @@
http://tug.org/pipermail/tlbuild/2016q1/003438.html
(and starting at http://tug.org/pipermail/tlbuild/2016q1/003433.html)
---- source/i18n/dayperiodrules.h~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/i18n/dayperiodrules.h 2019-12-11 15:38:52.103766812 -0800
+--- source/i18n/dayperiodrules.h~ 2020-12-17 11:34:38.000000000 -0800
++++ source/i18n/dayperiodrules.h 2021-02-13 08:30:53.116015999 -0800
@@ -56,5 +56,5 @@
double getMidPointForDayPeriod(DayPeriod dayPeriod, UErrorCode &errorCode) const;
@@ -14,8 +14,8 @@
+/* nothing private to placate old compilers --karl/koch private: */
DayPeriodRules();
---- source/i18n/unicode/dtitvinf.h~ 2019-10-03 04:16:41.000000000 -0700
-+++ source/i18n/unicode/dtitvinf.h 2019-12-11 15:38:52.103766812 -0800
+--- source/i18n/unicode/dtitvinf.h~ 2020-12-17 11:34:38.000000000 -0800
++++ source/i18n/unicode/dtitvinf.h 2021-02-13 08:30:53.116015999 -0800
@@ -330,5 +330,5 @@
@@ -23,7 +23,7 @@
+/* nothing private to placate old compilers --karl/koch private: */
/**
* DateIntervalFormat will need access to
-@@ -364,5 +364,6 @@
+@@ -365,5 +365,6 @@
};
public:
-#ifndef U_HIDE_INTERNAL_API
@@ -31,7 +31,7 @@
+/* ifndef U_HIDE_INTERNAL_API */
/**
* Max index for stored interval patterns
-@@ -372,6 +373,6 @@
+@@ -373,6 +374,6 @@
kMaxIntervalPatternIndex = kIPI_MAX_INDEX
};
-#endif /* U_HIDE_INTERNAL_API */
diff --git a/Build/source/libs/icu/TLpatches/patch-22-max_align_t b/Build/source/libs/icu/TLpatches/patch-22-max_align_t
new file mode 100644
index 00000000000..e321bd35331
--- /dev/null
+++ b/Build/source/libs/icu/TLpatches/patch-22-max_align_t
@@ -0,0 +1,51 @@
+ As of ICU 68.2, they required max_align_t to be in the std::
+ namespace, which it isn't with the CentOS 7 g++.
+
+--- icu/source/tools/toolutil/toolutil.cpp 2020-12-17 11:34:38.000000000 -0800
++++ icu-src/source/tools/toolutil/toolutil.cpp 2021-02-13 09:21:20.320506318 -0800
+@@ -243,5 +243,5 @@
+ int32_t capacity, maxCapacity, size, idx;
+ void *array;
+- alignas(std::max_align_t) char staticArray[1];
++ alignas(max_align_t) char staticArray[1];
+ };
+
+--- icu/source/common/utext.cpp 2020-12-17 11:34:38.000000000 -0800
++++ icu-src/source/common/utext.cpp 2021-02-13 09:15:58.637913024 -0800
+@@ -570,5 +570,5 @@
+ struct ExtendedUText {
+ UText ut;
+- std::max_align_t extension;
++ max_align_t extension;
+ };
+
+@@ -585,5 +585,5 @@
+ int32_t spaceRequired = sizeof(UText);
+ if (extraSpace > 0) {
+- spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(std::max_align_t);
++ spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(max_align_t);
+ }
+ ut = (UText *)uprv_malloc(spaceRequired);
+--- icu/source/common/uarrsort.cpp 2020-12-17 11:34:38.000000000 -0800
++++ icu-src/source/common/uarrsort.cpp 2021-02-13 09:14:58.120928533 -0800
+@@ -38,5 +38,5 @@
+
+ static constexpr int32_t sizeInMaxAlignTs(int32_t sizeInBytes) {
+- return (sizeInBytes + sizeof(std::max_align_t) - 1) / sizeof(std::max_align_t);
++ return (sizeInBytes + sizeof(max_align_t) - 1) / sizeof(max_align_t);
+ }
+
+@@ -142,5 +142,5 @@
+ UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
+
+- icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
++ icu::MaybeStackArray<max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
+ if (sizeInMaxAlignTs(itemSize) > v.getCapacity() &&
+ v.resize(sizeInMaxAlignTs(itemSize)) == nullptr) {
+@@ -236,5 +236,5 @@
+ UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
+ /* allocate two intermediate item variables (x and w) */
+- icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
++ icu::MaybeStackArray<max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
+ if(sizeInMaxAlignTs(itemSize)*2 > xw.getCapacity() &&
+ xw.resize(sizeInMaxAlignTs(itemSize) * 2) == nullptr) {
diff --git a/Build/source/libs/icu/configure b/Build/source/libs/icu/configure
index 725525aa0bd..5aeda719966 100755
--- a/Build/source/libs/icu/configure
+++ b/Build/source/libs/icu/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for icu (TeX Live) 65.1.
+# Generated by GNU Autoconf 2.69 for icu (TeX Live) 68.2.
#
# Report bugs to <tex-k@tug.org>.
#
@@ -579,8 +579,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='icu (TeX Live)'
PACKAGE_TARNAME='icu--tex-live-'
-PACKAGE_VERSION='65.1'
-PACKAGE_STRING='icu (TeX Live) 65.1'
+PACKAGE_VERSION='68.2'
+PACKAGE_STRING='icu (TeX Live) 68.2'
PACKAGE_BUGREPORT='tex-k@tug.org'
PACKAGE_URL=''
@@ -1258,7 +1258,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures icu (TeX Live) 65.1 to adapt to many kinds of systems.
+\`configure' configures icu (TeX Live) 68.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1328,7 +1328,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of icu (TeX Live) 65.1:";;
+ short | recursive ) echo "Configuration of icu (TeX Live) 68.2:";;
esac
cat <<\_ACEOF
@@ -1426,7 +1426,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-icu (TeX Live) configure 65.1
+icu (TeX Live) configure 68.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1565,7 +1565,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by icu (TeX Live) $as_me 65.1, which was
+It was created by icu (TeX Live) $as_me 68.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3484,7 +3484,7 @@ fi
# Define the identity of the package.
PACKAGE='icu--tex-live-'
- VERSION='65.1'
+ VERSION='68.2'
cat >>confdefs.h <<_ACEOF
@@ -4862,7 +4862,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by icu (TeX Live) $as_me 65.1, which was
+This file was extended by icu (TeX Live) $as_me 68.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4919,7 +4919,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-icu (TeX Live) config.status 65.1
+icu (TeX Live) config.status 68.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/libs/icu/icu-src/APIChangeReport.html b/Build/source/libs/icu/icu-src/APIChangeReport.html
index 6d22e94ee21..53919cdfcf4 100644
--- a/Build/source/libs/icu/icu-src/APIChangeReport.html
+++ b/Build/source/libs/icu/icu-src/APIChangeReport.html
@@ -5,31 +5,31 @@
-->
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>ICU4C API Comparison: ICU 64 (update #1: 64.2) with ICU 65</title>
+<title>ICU4C API Comparison: ICU 67 with ICU 68</title>
<link type="text/css" href="icu4c.css" rel="stylesheet">
</head>
<body>
<a name="#_top"></a>
-<h1>ICU4C API Comparison: ICU 64 (update #1: 64.2) with ICU 65</h1>
+<h1>ICU4C API Comparison: ICU 67 with ICU 68</h1>
<div id="toc">
<ul>
<li>
-<a href="#removed">Removed from ICU 64</a>
+<a href="#removed">Removed from ICU 67</a>
</li>
<li>
-<a href="#deprecated">Deprecated or Obsoleted in ICU 65</a>
+<a href="#deprecated">Deprecated or Obsoleted in ICU 68</a>
</li>
<li>
-<a href="#changed">Changed in ICU 65</a>
+<a href="#changed">Changed in ICU 68</a>
</li>
<li>
-<a href="#promoted">Promoted to stable in ICU 65</a>
+<a href="#promoted">Promoted to stable in ICU 68</a>
</li>
<li>
-<a href="#added">Added in ICU 65</a>
+<a href="#added">Added in ICU 68</a>
</li>
<li>
-<a href="#other">Other existing drafts in ICU 65</a>
+<a href="#other">Other existing drafts in ICU 68</a>
</li>
<li>
<a href="#simplifications">Signature Simplifications</a>
@@ -38,63 +38,71 @@
<hr>
</div>
<a name="removed"></a>
-<h2>Removed from ICU 64</h2>
+<h2>Removed from ICU 67</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 64</th><th>ICU 65</th>
+<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">const number::LocalizedNumberFormatter&amp; icu::DecimalFormat::toNumberFormatter() const</td><td class="">Deprecated<br>ICU 64</td><td>(missing)<br>
+<td class="file">fmtable.h</td><td class="proto">const UFormattable* icu::Formattable::toUFormattable()</td><td class="stabchange">Stable<br>ICU 52</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">edits.h</td><td class="proto">UBool icu::Edits::copyErrorTo(UErrorCode&amp;)</td><td class="stabchange">Stable<br>ICU 59</td><td>(missing)<br>
+<td class="file">measunit.h</td><td class="proto">LocalArray&lt;MeasureUnit&gt; icu::MeasureUnit::splitToSingleUnits(int32_t&amp;, UErrorCode&amp;) const</td><td class="">Internal<br>ICU 67</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_attribute</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">measunit.h</td><td class="proto">int32_t icu::MeasureUnit::getIndex() const</td><td class="">Internal</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_builtin</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::resolveUnitPerUnit(const MeasureUnit&amp;, const MeasureUnit&amp;, bool*)</td><td class="">Internal</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_cpp_attribute</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> int32_t icu::MeasureUnit::getIndexCount()</td><td class="">Internal</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_declspec_attribute</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> int32_t icu::MeasureUnit::internalGetIndexForTypeAndSubtype(const char*, const char*)</td><td class="">Internal</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_extension</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto">UClassID icu::NoUnit::getDynamicClassID() const</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_feature</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto">icu::NoUnit::NoUnit(const NoUnit&amp;)</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> __has_warning</td><td class="">Internal</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto">icu::NoUnit::~NoUnit()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">uversion.h</td><td class="proto"><tt>#define</tt> U_NAMESPACE_BEGIN</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::base()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">uversion.h</td><td class="proto"><tt>#define</tt> U_NAMESPACE_END</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::percent()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">uversion.h</td><td class="proto"><tt>#define</tt> U_NAMESPACE_QUALIFIER</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::permille()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">uversion.h</td><td class="proto"><tt>#define</tt> U_NAMESPACE_USE</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(missing)<br>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> UClassID icu::NoUnit::getStaticClassID()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">nounit.h</td><td class="proto">void* icu::NoUnit::clone() const</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uniset.h</td><td class="proto">const USet* icu::UnicodeSet::toUSet()</td><td class="stabchange">Stable<br>ICU 4.2</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
</table>
@@ -102,2884 +110,1057 @@
<a href="#_top">(jump back to top)</a>
<hr>
<a name="deprecated"></a>
-<h2>Deprecated or Obsoleted in ICU 65</h2>
+<h2>Deprecated or Obsoleted in ICU 68</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 64</th><th>ICU 65</th>
+<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
</tr>
</THEAD>
+<tr class="row1">
+<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> FALSE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> TRUE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
+</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="changed"></a>
-<h2>Changed in ICU 65 (old, new)</h2>
+<h2>Changed in ICU 68 (old, new)</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 64</th><th>ICU 65</th>
+<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">int32_t icu::DecimalFormat::getMultiplierScale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setMultiplierScale(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">Locale&amp; icu::Locale::operator=(Locale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">StringClass icu::Locale::getKeywordValue(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">StringClass icu::Locale::getUnicodeKeywordValue(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">StringClass icu::Locale::toLanguageTag(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">StringEnumeration* icu::Locale::createUnicodeKeywords(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">icu::Locale::Locale(Locale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto"><tt>static</tt> Locale icu::Locale::forLanguageTag(StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::addLikelySubtags(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getKeywords(OutputIterator, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getUnicodeKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getUnicodeKeywords(OutputIterator, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::minimizeSubtags(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::setKeywordValue(StringPiece, StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::setUnicodeKeywordValue(StringPiece, StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::toLanguageTag(ByteSink&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createAtmosphere(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPercent(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPermille(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPetabyte(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Appendable&amp; icu::number::FormattedNumber::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Format* icu::number::LocalizedNumberFormatter::toFormat(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDecimal(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatInt(int64_t, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber&amp; icu::number::FormattedNumber::operator=(FormattedNumber&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">IntegerWidth icu::number::IntegerWidth::truncateAt(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(LocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(const LocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::CurrencyPrecision::withCurrency(const CurrencyUnit&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::FractionPrecision::withMaxDigits(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::FractionPrecision::withMinDigits(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::IncrementPrecision::withMinFraction(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Scale&amp; icu::number::Scale::operator=(Scale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Scale&amp; icu::number::Scale::operator=(const Scale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withMinExponentDigits(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::NumberFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumber::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::NumberFormatterSettings&lt; Derived &gt;::toSkeleton(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(UnlocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(const UnlocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::FormattedNumber(FormattedNumber&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::~FormattedNumber()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(const LocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::~LocalizedNumberFormatter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::Scale::Scale(Scale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::Scale::Scale(const Scale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::Scale::~Scale()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(UnlocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactLong()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactShort()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CurrencyPrecision icu::number::Precision::currency(UCurrencyUsage)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::fixedFraction(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::integer()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::maxFraction(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::minFraction(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::minMaxFraction(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IncrementPrecision icu::number::Precision::increment(double)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IntegerWidth icu::number::IntegerWidth::zeroFillTo(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> LocalizedNumberFormatter icu::number::NumberFormatter::withLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Precision icu::number::Precision::unlimited()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::byDecimal(StringPiece)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::byDouble(double)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::byDoubleAndPowerOfTen(double, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::none()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::powerOfTen(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::engineering()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::scientific()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::fixedSignificantDigits(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::maxSignificantDigits(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minMaxSignificantDigits(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minSignificantDigits(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SimpleNotation icu::number::Notation::simple()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::forSkeleton(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::with()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Appendable&amp; icu::number::FormattedNumberRange::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">bytestrie.h</td><td class="proto">BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">bytestrie.h</td><td class="proto">uint64_t icu::BytesTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localebuilder.h</td><td class="proto">UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">FormattedNumberRange icu::number::LocalizedNumberRangeFormatter::formatFormattableRange(const Formattable&amp;, const Formattable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">FormattedNumberRange&amp; icu::number::FormattedNumberRange::operator=(FormattedNumberRange&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(LocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(const LocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UBool icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UNumberRangeIdentityResult icu::number::FormattedNumberRange::getIdentityResult(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(UnlocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(const UnlocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_ALL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_NONE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_UNIT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::~Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_RANGE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_SINGLE_VALUE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::Result(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::~Result()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::~LocaleMatcher()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_NOT_EQUAL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getDesiredIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::FormattedNumberRange(FormattedNumberRange&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getSupportedIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::~FormattedNumberRange()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">UBool icu::Locale::Iterator::hasNext() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(LocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(const LocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::~LocalizedNumberRangeFormatter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::Iterator::next()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(UnlocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(const UnlocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">icu::Locale::Iterator::~Iterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>static</tt> LocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::withLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::with()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBar()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_QUARTER</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto">const UCPMap* u_getIntPropertyMap(UProperty, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto">const USet* u_getBinaryPropertySet(UProperty, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucpmap.h</td><td class="proto">UChar32 ucpmap_getRange(const UCPMap*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEm()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucpmap.h</td><td class="proto"><tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_ALL_SURROGATES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucpmap.h</td><td class="proto"><tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_LEAD_SURROGATES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucpmap.h</td><td class="proto"><tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_NORMAL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucpmap.h</td><td class="proto">uint32_t ucpmap_get(const UCPMap*, UChar32)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_16</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_32</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_8</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_ASCII_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_BMP_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_SUPP_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U16_NEXT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U16_PREV</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U8_NEXT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U8_PREV</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_SMALL_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto">UCPTrie* ucptrie_openFromBinary(UCPTrieType, UCPTrieValueWidth, const void*, int32_t, int32_t*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">UCPTrieType ucptrie_getType(const UCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">numberformatter.h</td><td class="proto">StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto">UCPTrieValueWidth ucptrie_getValueWidth(const UCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">UChar32 ucptrie_getRange(const UCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_ANY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_FAST</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_SMALL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(T)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_16</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ucal.h</td><td class="proto">int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_32</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ucharstrie.h</td><td class="proto">UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_8</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ucharstrie.h</td><td class="proto">uint64_t icu::UCharsTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_ANY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto">UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">int32_t ucptrie_toBinary(const UCPTrie*, void*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto">uint32_t ucptrie_get(const UCPTrie*, UChar32)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">void ucptrie_close(UCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">UCPTrie* umutablecptrie_buildImmutable(UMutableCPTrie*, UCPTrieType, UCPTrieValueWidth, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_clone(const UMutableCPTrie*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_fromUCPMap(const UCPMap*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_fromUCPTrie(const UCPTrie*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">uloc.h</td><td class="proto">UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_open(uint32_t, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">UChar32 umutablecptrie_getRange(const UMutableCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">uint32_t umutablecptrie_get(const UMutableCPTrie*, UChar32)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">void umutablecptrie_close(UMutableCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> FALSE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">void umutablecptrie_set(UMutableCPTrie*, UChar32, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> TRUE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">void umutablecptrie_setRange(UMutableCPTrie*, UChar32, UChar32, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_MIN2</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_OFF</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_ON_ALIGNED</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_THOUSANDS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ALWAYS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEVER</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_HIDDEN_OVERLAY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">utf_old.h</td><td class="proto"><tt>#define</tt> U_HIDE_OBSOLETE_UTF_OLD_H</td><td class="">Deprecated<br>ICU 2.4</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="promoted"></a>
-<h2>Promoted to stable in ICU 65</h2>
+<h2>Promoted to stable in ICU 68</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 64</th><th>ICU 65</th>
+<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">basictz.h</td><td class="proto">void* icu::BasicTimeZone::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 3.8</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">datefmt.h</td><td class="proto">void* icu::DateFormat::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">int32_t icu::DecimalFormat::getMultiplierScale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setMultiplierScale(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">edits.h</td><td class="proto">UBool icu::Edits::copyErrorTo(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 59</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">Locale&amp; icu::Locale::operator=(Locale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">StringClass icu::Locale::getKeywordValue(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">StringClass icu::Locale::getUnicodeKeywordValue(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">StringClass icu::Locale::toLanguageTag(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">StringEnumeration* icu::Locale::createUnicodeKeywords(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">icu::Locale::Locale(Locale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto"><tt>static</tt> Locale icu::Locale::forLanguageTag(StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::addLikelySubtags(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getKeywords(OutputIterator, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getUnicodeKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::getUnicodeKeywords(OutputIterator, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::minimizeSubtags(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::setKeywordValue(StringPiece, StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::setUnicodeKeywordValue(StringPiece, StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::toLanguageTag(ByteSink&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createAtmosphere(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPercent(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPermille(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPetabyte(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Appendable&amp; icu::number::FormattedNumber::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Format* icu::number::LocalizedNumberFormatter::toFormat(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDecimal(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatInt(int64_t, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">FormattedNumber&amp; icu::number::FormattedNumber::operator=(FormattedNumber&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">IntegerWidth icu::number::IntegerWidth::truncateAt(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(LocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(const LocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::CurrencyPrecision::withCurrency(const CurrencyUnit&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::FractionPrecision::withMaxDigits(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::FractionPrecision::withMinDigits(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::IncrementPrecision::withMinFraction(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Scale&amp; icu::number::Scale::operator=(Scale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Scale&amp; icu::number::Scale::operator=(const Scale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withMinExponentDigits(int32_t) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::NumberFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumber::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::NumberFormatterSettings&lt; Derived &gt;::toSkeleton(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(UnlocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(const UnlocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::FormattedNumber(FormattedNumber&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::~FormattedNumber()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(const LocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::~LocalizedNumberFormatter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::Scale::Scale(Scale&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::Scale::Scale(const Scale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::Scale::~Scale()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(UnlocalizedNumberFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactLong()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactShort()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CurrencyPrecision icu::number::Precision::currency(UCurrencyUsage)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::fixedFraction(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::integer()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::maxFraction(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::minFraction(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionPrecision icu::number::Precision::minMaxFraction(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IncrementPrecision icu::number::Precision::increment(double)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IntegerWidth icu::number::IntegerWidth::zeroFillTo(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> LocalizedNumberFormatter icu::number::NumberFormatter::withLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Precision icu::number::Precision::unlimited()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::byDecimal(StringPiece)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::byDouble(double)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::byDoubleAndPowerOfTen(double, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::none()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Scale icu::number::Scale::powerOfTen(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::engineering()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::scientific()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::fixedSignificantDigits(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::maxSignificantDigits(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minMaxSignificantDigits(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minSignificantDigits(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SimpleNotation icu::number::Notation::simple()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::forSkeleton(const UnicodeString&amp;, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::with()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Appendable&amp; icu::number::FormattedNumberRange::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">bytestrie.h</td><td class="proto">BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">bytestrie.h</td><td class="proto">uint64_t icu::BytesTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">fmtable.h</td><td class="proto">UFormattable* icu::Formattable::toUFormattable()</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 52</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localebuilder.h</td><td class="proto">UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">FormattedNumberRange icu::number::LocalizedNumberRangeFormatter::formatFormattableRange(const Formattable&amp;, const Formattable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">FormattedNumberRange&amp; icu::number::FormattedNumberRange::operator=(FormattedNumberRange&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(LocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(const LocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UBool icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UNumberRangeIdentityResult icu::number::FormattedNumberRange::getIdentityResult(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(UnlocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(const UnlocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_ALL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_NONE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_UNIT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_RANGE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_SINGLE_VALUE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_NOT_EQUAL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::FormattedNumberRange(FormattedNumberRange&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::~FormattedNumberRange()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(LocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(const LocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::~Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::LocalizedNumberRangeFormatter::~LocalizedNumberRangeFormatter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter()=default</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::Result(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(UnlocalizedNumberRangeFormatter&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::~Result()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(const UnlocalizedNumberRangeFormatter&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::~LocaleMatcher()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>static</tt> LocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::withLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getDesiredIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::with()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getSupportedIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">void* icu::NumberFormat::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
+<td class="file">locid.h</td><td class="proto">UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_QUARTER</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">UBool icu::Locale::Iterator::hasNext() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto">const UCPMap* u_getIntPropertyMap(UProperty, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto">const USet* u_getBinaryPropertySet(UProperty, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucpmap.h</td><td class="proto">UChar32 ucpmap_getRange(const UCPMap*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::Iterator::next()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucpmap.h</td><td class="proto"><tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_ALL_SURROGATES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucpmap.h</td><td class="proto"><tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_LEAD_SURROGATES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucpmap.h</td><td class="proto"><tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_NORMAL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">icu::Locale::Iterator::~Iterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucpmap.h</td><td class="proto">uint32_t ucpmap_get(const UCPMap*, UChar32)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">locid.h</td><td class="proto">icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_16</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBar()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_32</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_8</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_ASCII_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_BMP_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEm()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_SUPP_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U16_NEXT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U16_PREV</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U8_NEXT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_FAST_U8_PREV</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>#define</tt> UCPTRIE_SMALL_GET</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto">UCPTrie* ucptrie_openFromBinary(UCPTrieType, UCPTrieValueWidth, const void*, int32_t, int32_t*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">UCPTrieType ucptrie_getType(const UCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto">UCPTrieValueWidth ucptrie_getValueWidth(const UCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">UChar32 ucptrie_getRange(const UCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_ANY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_FAST</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_SMALL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_16</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_32</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_8</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto"><tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_ANY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">numberformatter.h</td><td class="proto">StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">int32_t ucptrie_toBinary(const UCPTrie*, void*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">ucptrie.h</td><td class="proto">uint32_t ucptrie_get(const UCPTrie*, UChar32)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">ucptrie.h</td><td class="proto">void ucptrie_close(UCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(T)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">UCPTrie* umutablecptrie_buildImmutable(UMutableCPTrie*, UCPTrieType, UCPTrieValueWidth, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ucal.h</td><td class="proto">int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_clone(const UMutableCPTrie*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ucharstrie.h</td><td class="proto">UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_fromUCPMap(const UCPMap*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ucharstrie.h</td><td class="proto">uint64_t icu::UCharsTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_fromUCPTrie(const UCPTrie*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto">UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">UMutableCPTrie* umutablecptrie_open(uint32_t, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">UChar32 umutablecptrie_getRange(const UMutableCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">uint32_t umutablecptrie_get(const UMutableCPTrie*, UChar32)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">void umutablecptrie_close(UMutableCPTrie*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">umutablecptrie.h</td><td class="proto">void umutablecptrie_set(UMutableCPTrie*, UChar32, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">umutablecptrie.h</td><td class="proto">void umutablecptrie_setRange(UMutableCPTrie*, UChar32, UChar32, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 63</td>
+<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">unifilt.h</td><td class="proto">void* icu::UnicodeFilter::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 2.4</span></span></td>
+<td class="file">uloc.h</td><td class="proto">UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
+<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
+<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
+<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_MIN2</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
+<td class="file">uniset.h</td><td class="proto">USet* icu::UnicodeSet::toUSet()</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 4.2</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_OFF</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_ON_ALIGNED</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_THOUSANDS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ALWAYS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 61</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEVER</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_HIDDEN_OVERLAY</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 62</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="added"></a>
-<h2>Added in ICU 65</h2>
+<h2>Added in ICU 68</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 64</th><th>ICU 65</th>
+<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">basictz.h</td><td class="proto">void* icu::BasicTimeZone::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 3.8</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">bytestrie.h</td><td class="proto">BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">uint64_t icu::BytesTrie::getState64() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">datefmt.h</td><td class="proto">void* icu::DateFormat::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">edits.h</td><td class="proto">UBool icu::Edits::copyErrorTo(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 59</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">dtitvfmt.h</td><td class="proto">UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">dtitvfmt.h</td><td class="proto">void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">double icu::LocaleMatcher::internalMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> DateTimePatternGenerator* icu::DateTimePatternGenerator::createInstanceNoStdPat(const Locale&amp;, UErrorCode&amp;)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">fmtable.h</td><td class="proto">UFormattable* icu::Formattable::toUFormattable()</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 52</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::~Builder()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::Result(Result&amp;&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::~Result()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::~LocaleMatcher()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getDesiredIndex() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto">int32_t icu::MeasureUnit::getOffset() const</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getSupportedIndex() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::Iterator::hasNext() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDot()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDram()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::Iterator::next()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">icu::Locale::Iterator::~Iterator()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBar()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEm()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">measunit.h</td><td class="proto">std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp;</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp;</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Usage&amp; icu::number::impl::Usage::operator=(Usage&amp;&amp;)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Usage&amp; icu::number::impl::Usage::operator=(const Usage&amp;)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">bool icu::number::impl::Usage::isSet() const</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Usage::Usage(Usage&amp;&amp;)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Usage::Usage(const Usage&amp;)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">void* icu::NumberFormat::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Usage::~Usage()</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_ATTRIBUTE</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">numberformatter.h</td><td class="proto">int16_t icu::number::impl::Usage::length() const</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_BUILTIN</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::impl::Usage::set(StringPiece)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_CPP_ATTRIBUTE</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">numberrangeformatter.h</td><td class="proto">std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_DECLSPEC_ATTRIBUTE</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_EXTENSION</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::impl::UFormattedNumberRangeData*, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_FEATURE</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">plurrule.h</td><td class="proto">int32_t icu::PluralRules::getSamples(const UnicodeString&amp;, FixedDecimal*, int32_t, UErrorCode&amp;)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> UPRV_HAS_WARNING</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> TimeZone* icu::TimeZone::forLocaleOrDefault(const Locale&amp;)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_PF_EMSCRIPTEN</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">udateintervalformat.h</td><td class="proto">UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(T)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ucal.h</td><td class="proto">int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> U_DEFINE_FALSE_AND_TRUE</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucharstrie.h</td><td class="proto">UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">uniset.h</td><td class="proto">USet* icu::UnicodeSet::toUSet()</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 4.2</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ucharstrie.h</td><td class="proto">uint64_t icu::UCharsTrie::getState64() const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uloc.h</td><td class="proto">UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_COUNT</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberformatter.h</td><td class="proto">int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UFormattedNumberRange* unumrf_openResult(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> UPRV_BLOCK_MACRO_BEGIN</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> UPRV_BLOCK_MACRO_END</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unifilt.h</td><td class="proto">void* icu::UnicodeFilter::clone() const</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 2.4</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_RES_DATA_LIMIT</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_close(UNumberRangeFormatter*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RESOURCE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_closeResult(UFormattedNumberRange*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 65</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">upluralrules.h</td><td class="proto">int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="other"></a>
-<h2>Other existing drafts in ICU 65</h2>
+<h2>Other existing drafts in ICU 68</h2>
<div class="other">
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 64</th><th>ICU 65</th>
+<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">currunit.h</td><td class="proto">icu::CurrencyUnit::CurrencyUnit(StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UBool icu::DecimalFormat::isFormatFailIfMoreThanMaxDigits() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UBool icu::DecimalFormat::isParseCaseSensitive() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UBool icu::DecimalFormat::isParseNoExponent() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UBool icu::DecimalFormat::isSignAlwaysShown() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">bytestream.h</td><td class="proto">void icu::ByteSink::AppendU8(const char*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">const number::LocalizedNumberFormatter* icu::DecimalFormat::toNumberFormatter(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">bytestream.h</td><td class="proto">void icu::ByteSink::AppendU8(const char8_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">int32_t icu::DecimalFormat::getMinimumGroupingDigits() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">dtptngen.h</td><td class="proto">UDateFormatHourCycle icu::DateTimePatternGenerator::getDefaultHourCycle(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setFormatFailIfMoreThanMaxDigits(UBool)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDirection(ULocMatchDirection)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setMinimumGroupingDigits(int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_ONLY_TWO_WAY</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setParseCaseSensitive(UBool)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_WITH_ONE_WAY</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setParseNoExponent(UBool)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">void icu::DecimalFormat::setSignAlwaysShown(UBool)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">dtitvfmt.h</td><td class="proto">Appendable&amp; icu::FormattedDateInterval::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">dtitvfmt.h</td><td class="proto">FormattedDateInterval icu::DateIntervalFormat::formatToValue(Calendar&amp;, Calendar&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">dtitvfmt.h</td><td class="proto">FormattedDateInterval icu::DateIntervalFormat::formatToValue(const DateInterval&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">dtitvfmt.h</td><td class="proto">FormattedDateInterval&amp; icu::FormattedDateInterval::operator=(FormattedDateInterval&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">dtitvfmt.h</td><td class="proto">UBool icu::FormattedDateInterval::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString icu::FormattedDateInterval::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString icu::FormattedDateInterval::toTempString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">dtitvfmt.h</td><td class="proto">icu::FormattedDateInterval::FormattedDateInterval()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">dtitvfmt.h</td><td class="proto">icu::FormattedDateInterval::FormattedDateInterval(FormattedDateInterval&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">dtitvfmt.h</td><td class="proto">icu::FormattedDateInterval::~FormattedDateInterval()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">Appendable&amp; icu::FormattedValue::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">UBool icu::ConstrainedFieldPosition::matchesField(int32_t, int32_t) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">UBool icu::FormattedValue::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">UnicodeString icu::FormattedValue::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">UnicodeString icu::FormattedValue::toTempString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">icu::ConstrainedFieldPosition::ConstrainedFieldPosition()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">icu::ConstrainedFieldPosition::~ConstrainedFieldPosition()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">icu::FormattedValue::~FormattedValue()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">int32_t icu::ConstrainedFieldPosition::getCategory() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">int32_t icu::ConstrainedFieldPosition::getField() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">int32_t icu::ConstrainedFieldPosition::getLimit() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">int32_t icu::ConstrainedFieldPosition::getStart() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">int64_t icu::ConstrainedFieldPosition::getInt64IterationContext() const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">void icu::ConstrainedFieldPosition::constrainCategory(int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">void icu::ConstrainedFieldPosition::constrainField(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">void icu::ConstrainedFieldPosition::reset()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">formattedvalue.h</td><td class="proto">void icu::ConstrainedFieldPosition::setInt64IterationContext(int64_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">formattedvalue.h</td><td class="proto">void icu::ConstrainedFieldPosition::setState(int32_t, int32_t, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto">Appendable&amp; icu::FormattedList::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">FormattedList icu::ListFormatter::formatStringsToValue(const UnicodeString items[], int32_t, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto">FormattedList&amp; icu::FormattedList::operator=(FormattedList&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">UBool icu::FormattedList::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto">UnicodeString icu::FormattedList::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">UnicodeString icu::FormattedList::toTempString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto">UnicodeString&amp; icu::ListFormatter::format(const UnicodeString items[], int32_t, UnicodeString&amp;, FieldPositionIterator*, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">icu::FormattedList::FormattedList()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto">icu::FormattedList::FormattedList(FormattedList&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto">icu::FormattedList::~FormattedList()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">Locale icu::LocaleBuilder::build(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::addUnicodeLocaleAttribute(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::clear()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::clearExtensions()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::removeUnicodeLocaleAttribute(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setExtension(char, StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setLanguage(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setLanguageTag(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setRegion(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setScript(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setUnicodeLocaleKeyword(StringPiece, StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">LocaleBuilder&amp; icu::LocaleBuilder::setVariant(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">icu::LocaleBuilder::LocaleBuilder()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">icu::LocaleBuilder::~LocaleBuilder()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">LocalArray&lt;T&gt;&amp; icu::LocalArray&lt; T &gt;::operator=(std::unique_ptr&lt; T[]&gt;&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">LocalPointer&lt;T&gt;&amp; icu::LocalPointer&lt; T &gt;::operator=(std::unique_ptr&lt; T &gt;&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalArray&lt; T &gt;::LocalArray(std::unique_ptr&lt; T[]&gt;&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalArray&lt; T &gt;::operator std::unique_ptr&lt; T[]&gt;() &amp;&amp;</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalPointer&lt; T &gt;::LocalPointer(std::unique_ptr&lt; T &gt;&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalPointer&lt; T &gt;::operator std::unique_ptr&lt; T &gt;() &amp;&amp;</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">locid.h</td><td class="proto">void icu::Locale::canonicalize(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
<td class="file">measfmt.h</td><td class="proto">void icu::MeasureFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 53</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getAcre()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getAcreFoot()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getAmpere()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getArcMinute()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getArcSecond()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getAstronomicalUnit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getAtmosphere()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBarrel()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBritishThermalUnit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBushel()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getByte()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCalorie()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCarat()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCelsius()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCentiliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCentimeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCentury()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicCentimeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicFoot()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicInch()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicKilometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicMeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicMile()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicYard()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCup()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCupMetric()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDalton()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDay()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDayPerson()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDeciliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDecimeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDegree()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDunam()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthMass()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getElectronvolt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFahrenheit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFathom()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFluidOunce()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFluidOunceImperial()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFoodcalorie()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFoot()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getFurlong()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGForce()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGallon()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGallonImperial()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGenericTemperature()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGigabit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGigabyte()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGigahertz()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGigawatt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGram()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getHectare()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getHectoliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getHectopascal()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getHertz()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getHorsepower()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getHour()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getInch()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getInchHg()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getJoule()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKarat()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKelvin()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilobit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilobyte()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilocalorie()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilogram()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilohertz()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilojoule()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilometerPerHour()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilopascal()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowatt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHour()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKnot()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLightYear()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLiter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLiterPer100Kilometers()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLiterPerKilometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLux()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegabit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegabyte()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegahertz()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegaliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapascal()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegawatt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::product(const MeasureUnit&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMeterPerSecond()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::reciprocal(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMeterPerSecondSquared()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::withDimensionality(int32_t, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMetricTon()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::withSIPrefix(UMeasureSIPrefix, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMicrogram()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">MeasureUnit&amp; icu::MeasureUnit::operator=(MeasureUnit&amp;&amp;) noexcept</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMicrometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">UMeasureSIPrefix icu::MeasureUnit::getSIPrefix(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMicrosecond()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">UMeasureUnitComplexity icu::MeasureUnit::getComplexity(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMile()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">const char* icu::MeasureUnit::getIdentifier() const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilePerGallon()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">icu::MeasureUnit::MeasureUnit(MeasureUnit&amp;&amp;) noexcept</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilePerGallonImperial()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto">int32_t icu::MeasureUnit::getDimensionality(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilePerHour()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::forIdentifier(StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMileScandinavian()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(const char8_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilliampere()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(const char8_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMillibar()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(const std::u8string&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilligram()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilligramPerDeciliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">int32_t icu::StringPiece::compare(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilliliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">int32_t icu::StringPiece::find(StringPiece, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMillimeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">void icu::StringPiece::set(const char8_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMillimeterOfMercury()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">stringpiece.h</td><td class="proto">void icu::StringPiece::set(const char8_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMillimolePerLiter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_11</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMillisecond()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_12</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilliwatt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_23</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMinute()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_24</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMole()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_formatCalendarToResult(const UDateIntervalFormat*, UCalendar*, UCalendar*, UFormattedDateInterval*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMonth()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_formatToResult(const UDateIntervalFormat*, UDate, UDate, UFormattedDateInterval*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMonthPerson()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">udatpg.h</td><td class="proto">UDateFormatHourCycle udatpg_getDefaultHourCycle(const UDateTimePatternGenerator*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getNanometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getNanosecond()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getNauticalMile()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getNewton()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getNewtonMeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getOhm()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getOunce()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getOunceTroy()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getParsec()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPartPerMillion()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPercent()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPermille()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPermyriad()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPetabyte()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPicometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPint()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPintMetric()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPoint()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPound()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPoundFoot()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPoundForce()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPoundPerSquareInch()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuart()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getRadian()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getRevolutionAngle()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSecond()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSolarLuminosity()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSolarMass()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSolarRadius()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareCentimeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareFoot()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareInch()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareKilometer()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareMeter()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareMile()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareYard()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getStone()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTablespoon()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTeaspoon()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTerabit()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTerabyte()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getTon()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getVolt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getWatt()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getWeek()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getWeekPerson()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getYard()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getYear()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getYearPerson()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBarrel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBritishThermalUnit(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDalton(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDayPerson(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDunam(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthMass(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createElectronvolt(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createFluidOunceImperial(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilopascal(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapascal(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMole(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMonthPerson(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createNewton(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createNewtonMeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPermyriad(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoundFoot(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoundForce(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createSolarLuminosity(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createSolarMass(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createSolarRadius(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createWeekPerson(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createYearPerson(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto">UClassID icu::NoUnit::getDynamicClassID() const</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto">icu::NoUnit::NoUnit(const NoUnit&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto">icu::NoUnit::~NoUnit()</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::base()</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::percent()</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::permille()</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> UClassID icu::NoUnit::getStaticClassID()</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto">void* icu::NoUnit::clone() const</td><td class="" colspan="2" align="center">Draft<br>ICU 60</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">LocalPointer&lt;Derived&gt; icu::number::NumberFormatterSettings&lt; Derived &gt;::clone() &amp;&amp;</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">LocalPointer&lt;Derived&gt; icu::number::NumberFormatterSettings&lt; Derived &gt;::clone() const &amp;</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::FormattedNumber::nextFieldPosition(FieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 62</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::FormattedNumber::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumber::toTempString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::FormattedNumber()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::forSkeleton(const UnicodeString&amp;, UParseError&amp;, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">void icu::number::FormattedNumber::getAllFieldPositions(FieldPositionIterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 62</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalPointer&lt;Derived&gt; icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::clone() &amp;&amp;</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">LocalPointer&lt;Derived&gt; icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::clone() const &amp;</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UBool icu::number::FormattedNumberRange::nextFieldPosition(FieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UBool icu::number::FormattedNumberRange::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::toTempString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">void icu::number::FormattedNumberRange::getAllFieldPositions(FieldPositionIterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> icu::NumberFormat::EAlignmentFields::kCompactField</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> icu::NumberFormat::EAlignmentFields::kMeasureUnitField</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::FormattedNumber&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">Appendable&amp; icu::FormattedRelativeDateTime::appendTo(Appendable&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatNumericToValue(double, URelativeDateTimeUnit, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatToValue(UDateDirection, UDateAbsoluteUnit, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatToValue(double, UDateDirection, UDateRelativeUnit, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatToValue(double, URelativeDateTimeUnit, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">FormattedRelativeDateTime&amp; icu::FormattedRelativeDateTime::operator=(FormattedRelativeDateTime&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">UBool icu::FormattedRelativeDateTime::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">UnicodeString icu::FormattedRelativeDateTime::toString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">UnicodeString icu::FormattedRelativeDateTime::toTempString(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">icu::FormattedRelativeDateTime::FormattedRelativeDateTime()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">icu::FormattedRelativeDateTime::FormattedRelativeDateTime(FormattedRelativeDateTime&amp;&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">icu::FormattedRelativeDateTime::~FormattedRelativeDateTime()</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">udateintervalformat.h</td><td class="proto">UFormattedDateInterval* udtitvfmt_openResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">udateintervalformat.h</td><td class="proto">const UFormattedValue* udtitvfmt_resultAsValue(const UFormattedDateInterval*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_closeResult(UFormattedDateInterval*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_formatToResult(const UDateIntervalFormat*, UFormattedDateInterval*, UDate, UDate, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">UBool ucfpos_matchesField(const UConstrainedFieldPosition*, int32_t, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">UBool ufmtval_nextPosition(const UFormattedValue*, UConstrainedFieldPosition*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">UConstrainedFieldPosition* ucfpos_open(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">const UChar* ufmtval_getString(const UFormattedValue*, int32_t*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_DATE_INTERVAL_SPAN</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_DATE</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_LIST_SPAN</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_LIST</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_NUMBER</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_RELATIVE_DATETIME</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_UNDEFINED</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">int32_t ucfpos_getCategory(const UConstrainedFieldPosition*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">int32_t ucfpos_getField(const UConstrainedFieldPosition*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">int64_t ucfpos_getInt64IterationContext(const UConstrainedFieldPosition*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_close(UConstrainedFieldPosition*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_constrainCategory(UConstrainedFieldPosition*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_constrainField(UConstrainedFieldPosition*, int32_t, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_getIndexes(const UConstrainedFieldPosition*, int32_t*, int32_t*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_reset(UConstrainedFieldPosition*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_setInt64IterationContext(UConstrainedFieldPosition*, int64_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">uformattedvalue.h</td><td class="proto">void ucfpos_setState(UConstrainedFieldPosition*, int32_t, int32_t, int32_t, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto">UFormattedList* ulistfmt_openResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto">const UFormattedValue* ulistfmt_resultAsValue(const UFormattedList*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterField::ULISTFMT_ELEMENT_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterField::ULISTFMT_LITERAL_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 63</td>
-</tr>
-<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto">void ulistfmt_closeResult(UFormattedList*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto">void ulistfmt_formatStringsToResult(const UListFormatter*, const UChar* const strings[], const int32_t*, int32_t, UFormattedList*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_MINIMUM_GROUPING_DIGITS</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_PARSE_CASE_SENSITIVE</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatAttribute::UNUM_SIGN_ALWAYS_SHOWN</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_COMPACT_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_MEASURE_UNIT_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto">UNumberFormatter* unumf_openForSkeletonAndLocaleWithError(const UChar*, int32_t, const char*, UParseError*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto">const UFormattedValue* unumf_resultAsValue(const UFormattedNumber*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto">int32_t uplrules_selectFormatted(const UPluralRules*, const struct UFormattedNumber*, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">uregex.h</td><td class="proto"><tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ</td><td class="" colspan="2" align="center">Draft<br>ICU 2.4</td>
</tr>
<tr class="row0">
-<td class="file">uregex.h</td><td class="proto"><tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ</td><td class="" colspan="2" align="center">Draft<br>ICU 2.4</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_BREAK_ENGINE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">UFormattedRelativeDateTime* ureldatefmt_openResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_CHARACTER</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto">const UFormattedValue* ureldatefmt_resultAsValue(const UFormattedRelativeDateTime*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_LINE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeFormatterField::UDAT_REL_LITERAL_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_SENTENCE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeFormatterField::UDAT_REL_NUMERIC_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_TITLE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">void ureldatefmt_closeResult(UFormattedRelativeDateTime*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_WORD</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto">void ureldatefmt_formatNumericToResult(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UFormattedRelativeDateTime*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">void ureldatefmt_formatToResult(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UFormattedRelativeDateTime*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 64</td>
+<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_START</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
</tr>
</table>
</div>
@@ -2991,146 +1172,13 @@
<i>This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
all possible variations in "original" form.</i>
<div class="other">
-<ul>
-<li>
-<b>void* icu::ChoiceFormat::clone() const</b>
-<br>ChoiceFormat* icu::ChoiceFormat::clone() const<br>Format* icu::ChoiceFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::CompactDecimalFormat::clone() const</b>
-<br>CompactDecimalFormat* icu::CompactDecimalFormat::clone() const U_OVERRIDE<br>Format* icu::CompactDecimalFormat::clone() const U_OVERRIDE<br>
-</li>
-<li>
-<b>void* icu::CurrencyAmount::clone() const</b>
-<br>CurrencyAmount* icu::CurrencyAmount::clone() const<br>UObject* icu::CurrencyAmount::clone() const<br>
-</li>
-<li>
-<b>void* icu::CurrencyUnit::clone() const</b>
-<br>CurrencyUnit* icu::CurrencyUnit::clone() const<br>UObject* icu::CurrencyUnit::clone() const<br>
-</li>
-<li>
-<b>void* icu::DateIntervalFormat::clone() const</b>
-<br>DateIntervalFormat* icu::DateIntervalFormat::clone() const<br>Format* icu::DateIntervalFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::DecimalFormat::clone() const</b>
-<br>DecimalFormat* icu::DecimalFormat::clone() const U_OVERRIDE<br>Format* icu::DecimalFormat::clone() const U_OVERRIDE<br>
-</li>
-<li>
-<b>void* icu::GregorianCalendar::clone() const</b>
-<br>Calendar* icu::GregorianCalendar::clone() const<br>GregorianCalendar* icu::GregorianCalendar::clone() const<br>
-</li>
-<li>
-<b>void* icu::Measure::clone() const</b>
-<br>Measure* icu::Measure::clone() const<br>UObject* icu::Measure::clone() const<br>
-</li>
-<li>
-<b>void* icu::MeasureFormat::clone() const</b>
-<br>Format* icu::MeasureFormat::clone() const<br>MeasureFormat* icu::MeasureFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::MeasureUnit::clone() const</b>
-<br>MeasureUnit* icu::MeasureUnit::clone() const<br>UObject* icu::MeasureUnit::clone() const<br>
-</li>
-<li>
-<b>void* icu::MessageFormat::clone() const</b>
-<br>Format* icu::MessageFormat::clone() const<br>MessageFormat* icu::MessageFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::NoUnit::clone() const</b>
-<br>NoUnit* icu::NoUnit::clone() const<br>UObject* icu::NoUnit::clone() const<br>
-</li>
-<li>
-<b>void* icu::PluralFormat::clone() const</b>
-<br>Format* icu::PluralFormat::clone() const<br>PluralFormat* icu::PluralFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::RuleBasedBreakIterator::clone() const</b>
-<br>BreakIterator* icu::RuleBasedBreakIterator::clone() const<br>RuleBasedBreakIterator* icu::RuleBasedBreakIterator::clone() const<br>
-</li>
-<li>
-<b>void* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&amp;, UErrorCode&amp;)</b>
-<br>BreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&amp;, UErrorCode&amp;)<br>RuleBasedBreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&amp;, UErrorCode&amp;)<br>
-</li>
-<li>
-<b>void* icu::RuleBasedCollator::clone() const</b>
-<br>Collator* icu::RuleBasedCollator::clone() const<br>RuleBasedCollator* icu::RuleBasedCollator::clone() const<br>
-</li>
-<li>
-<b>void* icu::RuleBasedNumberFormat::clone() const</b>
-<br>Format* icu::RuleBasedNumberFormat::clone() const<br>RuleBasedNumberFormat* icu::RuleBasedNumberFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::RuleBasedTimeZone::clone() const</b>
-<br>RuleBasedTimeZone* icu::RuleBasedTimeZone::clone() const<br>TimeZone* icu::RuleBasedTimeZone::clone() const<br>
-</li>
-<li>
-<b>void* icu::SelectFormat::clone() const</b>
-<br>Format* icu::SelectFormat::clone() const<br>SelectFormat* icu::SelectFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::SimpleDateFormat::clone() const</b>
-<br>Format* icu::SimpleDateFormat::clone() const<br>SimpleDateFormat* icu::SimpleDateFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::SimpleTimeZone::clone() const</b>
-<br>SimpleTimeZone* icu::SimpleTimeZone::clone() const<br>TimeZone* icu::SimpleTimeZone::clone() const<br>
-</li>
-<li>
-<b>void* icu::StringCharacterIterator::clone() const</b>
-<br>CharacterIterator* icu::StringCharacterIterator::clone() const<br>StringCharacterIterator* icu::StringCharacterIterator::clone() const<br>
-</li>
-<li>
-<b>void* icu::StringSearch::safeClone() const</b>
-<br>SearchIterator* icu::StringSearch::safeClone() const<br>StringSearch* icu::StringSearch::safeClone() const<br>
-</li>
-<li>
-<b>void* icu::TimeUnit::clone() const</b>
-<br>TimeUnit* icu::TimeUnit::clone() const<br>UObject* icu::TimeUnit::clone() const<br>
-</li>
-<li>
-<b>void* icu::TimeUnitAmount::clone() const</b>
-<br>TimeUnitAmount* icu::TimeUnitAmount::clone() const<br>UObject* icu::TimeUnitAmount::clone() const<br>
-</li>
-<li>
-<b>void* icu::TimeUnitFormat::clone() const</b>
-<br>Format* icu::TimeUnitFormat::clone() const<br>TimeUnitFormat* icu::TimeUnitFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::TimeZoneFormat::clone() const</b>
-<br>Format* icu::TimeZoneFormat::clone() const<br>TimeZoneFormat* icu::TimeZoneFormat::clone() const<br>
-</li>
-<li>
-<b>void* icu::UCharCharacterIterator::clone() const</b>
-<br>CharacterIterator* icu::UCharCharacterIterator::clone() const<br>UCharCharacterIterator* icu::UCharCharacterIterator::clone() const<br>
-</li>
-<li>
-<b>void* icu::UnicodeSet::clone() const</b>
-<br>UnicodeFunctor* icu::UnicodeSet::clone() const<br>UnicodeSet* icu::UnicodeSet::clone() const<br>
-</li>
-<li>
-<b>void* icu::UnicodeSet::cloneAsThawed() const</b>
-<br>UnicodeFunctor* icu::UnicodeSet::cloneAsThawed() const<br>UnicodeSet* icu::UnicodeSet::cloneAsThawed() const<br>
-</li>
-<li>
-<b>void* icu::UnicodeSet::freeze()</b>
-<br>UnicodeFunctor* icu::UnicodeSet::freeze()<br>UnicodeSet* icu::UnicodeSet::freeze()<br>
-</li>
-<li>
-<b>void* icu::UnicodeString::clone() const</b>
-<br>Replaceable* icu::UnicodeString::clone() const<br>UnicodeString* icu::UnicodeString::clone() const<br>
-</li>
-<li>
-<b>void* icu::VTimeZone::clone() const</b>
-<br>TimeZone* icu::VTimeZone::clone() const<br>VTimeZone* icu::VTimeZone::clone() const<br>
-</li>
-</ul>
+<ul></ul>
</div>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<p>
-<i><font size="-1">Contents generated by StableAPI tool on Wed Oct 02 10:22:29 PDT 2019<br>
+<i><font size="-1">Contents generated by StableAPI tool on Fri Oct 23 11:35:16 PDT 2020<br>
Copyright &copy; 2017 and later: Unicode, Inc. and others.<br>
License &amp; terms of use: http://www.unicode.org/copyright.html
</font></i>
diff --git a/Build/source/libs/icu/icu-src/APIChangeReport.md b/Build/source/libs/icu/icu-src/APIChangeReport.md
index 6a8ffd07bb5..5385904fd10 100644
--- a/Build/source/libs/icu/icu-src/APIChangeReport.md
+++ b/Build/source/libs/icu/icu-src/APIChangeReport.md
@@ -5,1088 +5,391 @@
License & terms of use: http://www.unicode.org/copyright.html
-->
-# ICU4C API Comparison: ICU 64 (update #1: 64.2) with ICU 65
+# ICU4C API Comparison: ICU 67 with ICU 68
> _Note_ Markdown format of this document is new for ICU 65.
-- [Removed from ICU 64](#removed)
-- [Deprecated or Obsoleted in ICU 65](#deprecated)
-- [Changed in ICU 65](#changed)
-- [Promoted to stable in ICU 65](#promoted)
-- [Added in ICU 65](#added)
-- [Other existing drafts in ICU 65](#other)
+- [Removed from ICU 67](#removed)
+- [Deprecated or Obsoleted in ICU 68](#deprecated)
+- [Changed in ICU 68](#changed)
+- [Promoted to stable in ICU 68](#promoted)
+- [Added in ICU 68](#added)
+- [Other existing drafts in ICU 68](#other)
- [Signature Simplifications](#simplifications)
## Removed
-Removed from ICU 64
+Removed from ICU 67
-| File | API | ICU 64 | ICU 65 |
+| File | API | ICU 67 | ICU 68 |
|---|---|---|---|
-| decimfmt.h | const number::LocalizedNumberFormatter&amp; icu::DecimalFormat::toNumberFormatter() const | DeprecatedICU 64 | (missing)
-| edits.h | UBool icu::Edits::copyErrorTo(UErrorCode&amp;) | StableICU 59 | (missing)
-| platform.h | <tt>#define</tt> __has_attribute | Internal | (missing)
-| platform.h | <tt>#define</tt> __has_builtin | Internal | (missing)
-| platform.h | <tt>#define</tt> __has_cpp_attribute | Internal | (missing)
-| platform.h | <tt>#define</tt> __has_declspec_attribute | Internal | (missing)
-| platform.h | <tt>#define</tt> __has_extension | Internal | (missing)
-| platform.h | <tt>#define</tt> __has_feature | Internal | (missing)
-| platform.h | <tt>#define</tt> __has_warning | Internal | (missing)
-| uversion.h | <tt>#define</tt> U_NAMESPACE_BEGIN | StableICU 2.4 | (missing)
-| uversion.h | <tt>#define</tt> U_NAMESPACE_END | StableICU 2.4 | (missing)
-| uversion.h | <tt>#define</tt> U_NAMESPACE_QUALIFIER | StableICU 2.4 | (missing)
-| uversion.h | <tt>#define</tt> U_NAMESPACE_USE | StableICU 2.4 | (missing)
+| fmtable.h | const UFormattable* icu::Formattable::toUFormattable() | StableICU 52 | (missing)
+| measunit.h | LocalArray&lt;MeasureUnit&gt; icu::MeasureUnit::splitToSingleUnits(int32_t&amp;, UErrorCode&amp;) const | InternalICU 67 | (missing)
+| measunit.h | int32_t icu::MeasureUnit::getIndex() const | Internal | (missing)
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::resolveUnitPerUnit(const MeasureUnit&amp;, const MeasureUnit&amp;, bool*) | Internal | (missing)
+| measunit.h | <tt>static</tt> int32_t icu::MeasureUnit::getIndexCount() | Internal | (missing)
+| measunit.h | <tt>static</tt> int32_t icu::MeasureUnit::internalGetIndexForTypeAndSubtype(const char*, const char*) | Internal | (missing)
+| nounit.h | UClassID icu::NoUnit::getDynamicClassID() const | DraftICU 60 | (missing)
+| nounit.h | icu::NoUnit::NoUnit(const NoUnit&amp;) | DraftICU 60 | (missing)
+| nounit.h | icu::NoUnit::~NoUnit() | DraftICU 60 | (missing)
+| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::base() | DraftICU 60 | (missing)
+| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::percent() | DraftICU 60 | (missing)
+| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::permille() | DraftICU 60 | (missing)
+| nounit.h | <tt>static</tt> UClassID icu::NoUnit::getStaticClassID() | DraftICU 60 | (missing)
+| nounit.h | void* icu::NoUnit::clone() const | DraftICU 60 | (missing)
+| uniset.h | const USet* icu::UnicodeSet::toUSet() | StableICU 4.2 | (missing)
## Deprecated
-Deprecated or Obsoleted in ICU 65
+Deprecated or Obsoleted in ICU 68
-| File | API | ICU 64 | ICU 65 |
+| File | API | ICU 67 | ICU 68 |
|---|---|---|---|
+| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
+| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
+| umachine.h | <tt>#define</tt> FALSE | StableICU 2.0 | DeprecatedICU 68
+| umachine.h | <tt>#define</tt> TRUE | StableICU 2.0 | DeprecatedICU 68
## Changed
-Changed in ICU 65 (old, new)
+Changed in ICU 68 (old, new)
-| File | API | ICU 64 | ICU 65 |
+| File | API | ICU 67 | ICU 68 |
|---|---|---|---|
-| decimfmt.h | int32_t icu::DecimalFormat::getMultiplierScale() const | Draft→StableICU 62
-| decimfmt.h | void icu::DecimalFormat::setMultiplierScale(int32_t) | Draft→StableICU 62
-| locid.h | Locale&amp; icu::Locale::operator=(Locale&amp;&amp;) | Draft→StableICU 63
-| locid.h | StringClass icu::Locale::getKeywordValue(StringPiece, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | StringClass icu::Locale::getUnicodeKeywordValue(StringPiece, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | StringClass icu::Locale::toLanguageTag(UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | StringEnumeration* icu::Locale::createUnicodeKeywords(UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | icu::Locale::Locale(Locale&amp;&amp;) | Draft→StableICU 63
-| locid.h | <tt>static</tt> Locale icu::Locale::forLanguageTag(StringPiece, UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::addLikelySubtags(UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::getKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::getKeywords(OutputIterator, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::getUnicodeKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::getUnicodeKeywords(OutputIterator, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::minimizeSubtags(UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::setKeywordValue(StringPiece, StringPiece, UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::setUnicodeKeywordValue(StringPiece, StringPiece, UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::toLanguageTag(ByteSink&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createAtmosphere(UErrorCode&amp;) | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPercent(UErrorCode&amp;) | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPermille(UErrorCode&amp;) | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPetabyte(UErrorCode&amp;) | Draft→StableICU 63
-| numberformatter.h | Appendable&amp; icu::number::FormattedNumber::appendTo(Appendable&amp;, UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*) const&amp; | Draft→StableICU 61
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy) const&amp; | Draft→StableICU 61
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;) const&amp; | Draft→StableICU 61
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;) const&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode) const&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;) const&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Format* icu::number::LocalizedNumberFormatter::toFormat(UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | FormattedNumber icu::number::LocalizedNumberFormatter::formatDecimal(StringPiece, UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | FormattedNumber icu::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | FormattedNumber icu::number::LocalizedNumberFormatter::formatInt(int64_t, UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | FormattedNumber&amp; icu::number::FormattedNumber::operator=(FormattedNumber&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | IntegerWidth icu::number::IntegerWidth::truncateAt(int32_t) | Draft→StableICU 60
-| numberformatter.h | LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(LocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(const LocalizedNumberFormatter&amp;) | Draft→StableICU 62
-| numberformatter.h | Precision icu::number::CurrencyPrecision::withCurrency(const CurrencyUnit&amp;) const | Draft→StableICU 60
-| numberformatter.h | Precision icu::number::FractionPrecision::withMaxDigits(int32_t) const | Draft→StableICU 60
-| numberformatter.h | Precision icu::number::FractionPrecision::withMinDigits(int32_t) const | Draft→StableICU 60
-| numberformatter.h | Precision icu::number::IncrementPrecision::withMinFraction(int32_t) const | Draft→StableICU 60
-| numberformatter.h | Scale&amp; icu::number::Scale::operator=(Scale&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | Scale&amp; icu::number::Scale::operator=(const Scale&amp;) | Draft→StableICU 62
-| numberformatter.h | ScientificNotation icu::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay) const | Draft→StableICU 60
-| numberformatter.h | ScientificNotation icu::number::ScientificNotation::withMinExponentDigits(int32_t) const | Draft→StableICU 60
-| numberformatter.h | UBool icu::number::NumberFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | UnicodeString icu::number::FormattedNumber::toString(UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | UnicodeString icu::number::NumberFormatterSettings&lt; Derived &gt;::toSkeleton(UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(UnlocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(const UnlocalizedNumberFormatter&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::FormattedNumber::FormattedNumber(FormattedNumber&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::FormattedNumber::~FormattedNumber() | Draft→StableICU 60
-| numberformatter.h | icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter()=default | Draft→StableICU 62
-| numberformatter.h | icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(const LocalizedNumberFormatter&amp;) | Draft→StableICU 60
-| numberformatter.h | icu::number::LocalizedNumberFormatter::~LocalizedNumberFormatter() | Draft→StableICU 60
-| numberformatter.h | icu::number::Scale::Scale(Scale&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::Scale::Scale(const Scale&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::Scale::~Scale() | Draft→StableICU 62
-| numberformatter.h | icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter()=default | Draft→StableICU 62
-| numberformatter.h | icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(UnlocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter&amp;) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> CompactNotation icu::number::Notation::compactLong() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> CompactNotation icu::number::Notation::compactShort() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> CurrencyPrecision icu::number::Precision::currency(UCurrencyUsage) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::fixedFraction(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::integer() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::maxFraction(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::minFraction(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::minMaxFraction(int32_t, int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> IncrementPrecision icu::number::Precision::increment(double) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> IntegerWidth icu::number::IntegerWidth::zeroFillTo(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> LocalizedNumberFormatter icu::number::NumberFormatter::withLocale(const Locale&amp;) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> Precision icu::number::Precision::unlimited() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::byDecimal(StringPiece) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::byDouble(double) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::byDoubleAndPowerOfTen(double, int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::none() | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::powerOfTen(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> ScientificNotation icu::number::Notation::engineering() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> ScientificNotation icu::number::Notation::scientific() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::fixedSignificantDigits(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::maxSignificantDigits(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minMaxSignificantDigits(int32_t, int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minSignificantDigits(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SimpleNotation icu::number::Notation::simple() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::forSkeleton(const UnicodeString&amp;, UErrorCode&amp;) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::with() | Draft→StableICU 60
-| numberrangeformatter.h | Appendable&amp; icu::number::FormattedNumberRange::appendTo(Appendable&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | FormattedNumberRange icu::number::LocalizedNumberRangeFormatter::formatFormattableRange(const Formattable&amp;, const Formattable&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | FormattedNumberRange&amp; icu::number::FormattedNumberRange::operator=(FormattedNumberRange&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(LocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(const LocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | UBool icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | UNumberRangeIdentityResult icu::number::FormattedNumberRange::getIdentityResult(UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::toString(UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(UnlocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(const UnlocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_ALL | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_AUTO | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_NONE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_UNIT | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_RANGE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_SINGLE_VALUE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_NOT_EQUAL | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::FormattedNumberRange::FormattedNumberRange(FormattedNumberRange&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::FormattedNumberRange::~FormattedNumberRange() | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter()=default | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(LocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(const LocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::~LocalizedNumberRangeFormatter() | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter()=default | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(UnlocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(const UnlocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | <tt>static</tt> LocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::withLocale(const Locale&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | <tt>static</tt> UnlocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::with() | Draft→StableICU 63
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_QUARTER | Draft→StableICU 63
-| uchar.h | const UCPMap* u_getIntPropertyMap(UProperty, UErrorCode*) | Draft→StableICU 63
-| uchar.h | const USet* u_getBinaryPropertySet(UProperty, UErrorCode*) | Draft→StableICU 63
-| ucpmap.h | UChar32 ucpmap_getRange(const UCPMap*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*) | Draft→StableICU 63
-| ucpmap.h | <tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_ALL_SURROGATES | Draft→StableICU 63
-| ucpmap.h | <tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_LEAD_SURROGATES | Draft→StableICU 63
-| ucpmap.h | <tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_NORMAL | Draft→StableICU 63
-| ucpmap.h | uint32_t ucpmap_get(const UCPMap*, UChar32) | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_16 | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_32 | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_8 | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_ASCII_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_BMP_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_SUPP_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U16_NEXT | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U16_PREV | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U8_NEXT | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U8_PREV | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_SMALL_GET | Draft→StableICU 63
-| ucptrie.h | UCPTrie* ucptrie_openFromBinary(UCPTrieType, UCPTrieValueWidth, const void*, int32_t, int32_t*, UErrorCode*) | Draft→StableICU 63
-| ucptrie.h | UCPTrieType ucptrie_getType(const UCPTrie*) | Draft→StableICU 63
-| ucptrie.h | UCPTrieValueWidth ucptrie_getValueWidth(const UCPTrie*) | Draft→StableICU 63
-| ucptrie.h | UChar32 ucptrie_getRange(const UCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*) | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_ANY | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_FAST | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_SMALL | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_16 | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_32 | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_8 | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_ANY | Draft→StableICU 63
-| ucptrie.h | int32_t ucptrie_toBinary(const UCPTrie*, void*, int32_t, UErrorCode*) | Draft→StableICU 63
-| ucptrie.h | uint32_t ucptrie_get(const UCPTrie*, UChar32) | Draft→StableICU 63
-| ucptrie.h | void ucptrie_close(UCPTrie*) | Draft→StableICU 63
-| umutablecptrie.h | UCPTrie* umutablecptrie_buildImmutable(UMutableCPTrie*, UCPTrieType, UCPTrieValueWidth, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_clone(const UMutableCPTrie*, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_fromUCPMap(const UCPMap*, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_fromUCPTrie(const UCPTrie*, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_open(uint32_t, uint32_t, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UChar32 umutablecptrie_getRange(const UMutableCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*) | Draft→StableICU 63
-| umutablecptrie.h | uint32_t umutablecptrie_get(const UMutableCPTrie*, UChar32) | Draft→StableICU 63
-| umutablecptrie.h | void umutablecptrie_close(UMutableCPTrie*) | Draft→StableICU 63
-| umutablecptrie.h | void umutablecptrie_set(UMutableCPTrie*, UChar32, uint32_t, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | void umutablecptrie_setRange(UMutableCPTrie*, UChar32, UChar32, uint32_t, UErrorCode*) | Draft→StableICU 63
-| unumberformatter.h | <tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_AUTO | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_MIN2 | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_OFF | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_ON_ALIGNED | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_THOUSANDS | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ALWAYS | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_AUTO | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEVER | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT | Draft→StableICU 60
-| uspoof.h | <tt>enum</tt> USpoofChecks::USPOOF_HIDDEN_OVERLAY | Draft→StableICU 62
-| utf_old.h | <tt>#define</tt> U_HIDE_OBSOLETE_UTF_OLD_H | DeprecatedICU 2.4 | Internal
+| bytestrie.h | BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t) | Draft→StableICU 65
+| bytestrie.h | uint64_t icu::BytesTrie::getState64() const | Draft→StableICU 65
+| listformatter.h | <tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;) | Draft→StableICU 67
+| localebuilder.h | UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv) | Draft→StableICU 65
+| localematcher.h | Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Builder::Builder() | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Builder::~Builder() | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Result::Result(Result&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Result::~Result() | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::~LocaleMatcher() | Draft→StableICU 65
+| localematcher.h | int32_t icu::LocaleMatcher::Result::getDesiredIndex() const | Draft→StableICU 65
+| localematcher.h | int32_t icu::LocaleMatcher::Result::getSupportedIndex() const | Draft→StableICU 65
+| locid.h | UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override | Draft→StableICU 65
+| locid.h | UBool icu::Locale::Iterator::hasNext() const | Draft→StableICU 65
+| locid.h | UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override | Draft→StableICU 65
+| locid.h | const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override | Draft→StableICU 65
+| locid.h | const Locale&amp; icu::Locale::Iterator::next() | Draft→StableICU 65
+| locid.h | const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override | Draft→StableICU 65
+| locid.h | icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv) | Draft→StableICU 65
+| locid.h | icu::Locale::Iterator::~Iterator() | Draft→StableICU 65
+| locid.h | icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBar() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEm() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;) | Draft→StableICU 65
+| numberformatter.h | StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const | Draft→StableICU 65
+| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
+| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
+| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR | Draft→StableICU 65
+| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE | Draft→StableICU 65
+| stringpiece.h | icu::StringPiece::StringPiece(T) | Draft→StableICU 65
+| ucal.h | int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*) | Draft→StableICU 65
+| ucharstrie.h | UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t) | Draft→StableICU 65
+| ucharstrie.h | uint64_t icu::UCharsTrie::getState64() const | Draft→StableICU 65
+| ulistformatter.h | UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*) | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE | Draft→StableICU 67
+| uloc.h | UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*) | Draft→StableICU 65
+| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT | Draft→StableICU 65
+| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES | Draft→StableICU 65
+| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES | Draft→StableICU 65
+| umachine.h | <tt>#define</tt> FALSE | StableICU 2.0 | DeprecatedICU 68
+| umachine.h | <tt>#define</tt> TRUE | StableICU 2.0 | DeprecatedICU 68
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE | Draft→StableICU 65
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE | Draft→StableICU 65
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE | Draft→StableICU 65
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START | Draft→StableICU 65
## Promoted
-Promoted to stable in ICU 65
+Promoted to stable in ICU 68
-| File | API | ICU 64 | ICU 65 |
+| File | API | ICU 67 | ICU 68 |
|---|---|---|---|
-| basictz.h | void* icu::BasicTimeZone::clone() const | (missing) | StableICU 3.8
-| datefmt.h | void* icu::DateFormat::clone() const | (missing) | StableICU 2.0
-| decimfmt.h | int32_t icu::DecimalFormat::getMultiplierScale() const | Draft→StableICU 62
-| decimfmt.h | void icu::DecimalFormat::setMultiplierScale(int32_t) | Draft→StableICU 62
-| edits.h | UBool icu::Edits::copyErrorTo(UErrorCode&amp;) const | (missing) | StableICU 59
-| locid.h | Locale&amp; icu::Locale::operator=(Locale&amp;&amp;) | Draft→StableICU 63
-| locid.h | StringClass icu::Locale::getKeywordValue(StringPiece, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | StringClass icu::Locale::getUnicodeKeywordValue(StringPiece, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | StringClass icu::Locale::toLanguageTag(UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | StringEnumeration* icu::Locale::createUnicodeKeywords(UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | icu::Locale::Locale(Locale&amp;&amp;) | Draft→StableICU 63
-| locid.h | <tt>static</tt> Locale icu::Locale::forLanguageTag(StringPiece, UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::addLikelySubtags(UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::getKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::getKeywords(OutputIterator, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::getUnicodeKeywordValue(StringPiece, ByteSink&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::getUnicodeKeywords(OutputIterator, UErrorCode&amp;) const | Draft→StableICU 63
-| locid.h | void icu::Locale::minimizeSubtags(UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::setKeywordValue(StringPiece, StringPiece, UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::setUnicodeKeywordValue(StringPiece, StringPiece, UErrorCode&amp;) | Draft→StableICU 63
-| locid.h | void icu::Locale::toLanguageTag(ByteSink&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createAtmosphere(UErrorCode&amp;) | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPercent(UErrorCode&amp;) | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPermille(UErrorCode&amp;) | Draft→StableICU 63
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPetabyte(UErrorCode&amp;) | Draft→StableICU 63
-| numberformatter.h | Appendable&amp; icu::number::FormattedNumber::appendTo(Appendable&amp;, UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*) const&amp; | Draft→StableICU 61
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::decimal(UNumberDecimalSeparatorDisplay)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy) const&amp; | Draft→StableICU 61
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(UNumberGroupingStrategy)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::integerWidth(const IntegerWidth&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::notation(const Notation&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;) const&amp; | Draft→StableICU 61
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;) const&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::precision(const Precision&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode) const&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::roundingMode(UNumberFormatRoundingMode)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;) const&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::scale(const Scale&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::sign(UNumberSignDisplay)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::symbols(const DecimalFormatSymbols&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unit(const icu::MeasureUnit&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth) const&amp; | Draft→StableICU 60
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::unitWidth(UNumberUnitWidth)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | Format* icu::number::LocalizedNumberFormatter::toFormat(UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | FormattedNumber icu::number::LocalizedNumberFormatter::formatDecimal(StringPiece, UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | FormattedNumber icu::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | FormattedNumber icu::number::LocalizedNumberFormatter::formatInt(int64_t, UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | FormattedNumber&amp; icu::number::FormattedNumber::operator=(FormattedNumber&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | IntegerWidth icu::number::IntegerWidth::truncateAt(int32_t) | Draft→StableICU 60
-| numberformatter.h | LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;) const&amp; | Draft→StableICU 60
-| numberformatter.h | LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&amp;)&amp;&amp; | Draft→StableICU 62
-| numberformatter.h | LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(LocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | LocalizedNumberFormatter&amp; icu::number::LocalizedNumberFormatter::operator=(const LocalizedNumberFormatter&amp;) | Draft→StableICU 62
-| numberformatter.h | Precision icu::number::CurrencyPrecision::withCurrency(const CurrencyUnit&amp;) const | Draft→StableICU 60
-| numberformatter.h | Precision icu::number::FractionPrecision::withMaxDigits(int32_t) const | Draft→StableICU 60
-| numberformatter.h | Precision icu::number::FractionPrecision::withMinDigits(int32_t) const | Draft→StableICU 60
-| numberformatter.h | Precision icu::number::IncrementPrecision::withMinFraction(int32_t) const | Draft→StableICU 60
-| numberformatter.h | Scale&amp; icu::number::Scale::operator=(Scale&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | Scale&amp; icu::number::Scale::operator=(const Scale&amp;) | Draft→StableICU 62
-| numberformatter.h | ScientificNotation icu::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay) const | Draft→StableICU 60
-| numberformatter.h | ScientificNotation icu::number::ScientificNotation::withMinExponentDigits(int32_t) const | Draft→StableICU 60
-| numberformatter.h | UBool icu::number::NumberFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 60
-| numberformatter.h | UnicodeString icu::number::FormattedNumber::toString(UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | UnicodeString icu::number::NumberFormatterSettings&lt; Derived &gt;::toSkeleton(UErrorCode&amp;) const | Draft→StableICU 62
-| numberformatter.h | UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(UnlocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | UnlocalizedNumberFormatter&amp; icu::number::UnlocalizedNumberFormatter::operator=(const UnlocalizedNumberFormatter&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::FormattedNumber::FormattedNumber(FormattedNumber&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::FormattedNumber::~FormattedNumber() | Draft→StableICU 60
-| numberformatter.h | icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter()=default | Draft→StableICU 62
-| numberformatter.h | icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(const LocalizedNumberFormatter&amp;) | Draft→StableICU 60
-| numberformatter.h | icu::number::LocalizedNumberFormatter::~LocalizedNumberFormatter() | Draft→StableICU 60
-| numberformatter.h | icu::number::Scale::Scale(Scale&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::Scale::Scale(const Scale&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::Scale::~Scale() | Draft→StableICU 62
-| numberformatter.h | icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter()=default | Draft→StableICU 62
-| numberformatter.h | icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(UnlocalizedNumberFormatter&amp;&amp;) | Draft→StableICU 62
-| numberformatter.h | icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter&amp;) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> CompactNotation icu::number::Notation::compactLong() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> CompactNotation icu::number::Notation::compactShort() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> CurrencyPrecision icu::number::Precision::currency(UCurrencyUsage) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::fixedFraction(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::integer() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::maxFraction(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::minFraction(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> FractionPrecision icu::number::Precision::minMaxFraction(int32_t, int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> IncrementPrecision icu::number::Precision::increment(double) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> IntegerWidth icu::number::IntegerWidth::zeroFillTo(int32_t) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> LocalizedNumberFormatter icu::number::NumberFormatter::withLocale(const Locale&amp;) | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> Precision icu::number::Precision::unlimited() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::byDecimal(StringPiece) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::byDouble(double) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::byDoubleAndPowerOfTen(double, int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::none() | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> Scale icu::number::Scale::powerOfTen(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> ScientificNotation icu::number::Notation::engineering() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> ScientificNotation icu::number::Notation::scientific() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::fixedSignificantDigits(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::maxSignificantDigits(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minMaxSignificantDigits(int32_t, int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SignificantDigitsPrecision icu::number::Precision::minSignificantDigits(int32_t) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> SimpleNotation icu::number::Notation::simple() | Draft→StableICU 60
-| numberformatter.h | <tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::forSkeleton(const UnicodeString&amp;, UErrorCode&amp;) | Draft→StableICU 62
-| numberformatter.h | <tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::with() | Draft→StableICU 60
-| numberrangeformatter.h | Appendable&amp; icu::number::FormattedNumberRange::appendTo(Appendable&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::collapse(UNumberRangeCollapse)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::identityFallback(UNumberRangeIdentityFallback)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterBoth(const UnlocalizedNumberFormatter&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterFirst(const UnlocalizedNumberFormatter&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(UnlocalizedNumberFormatter&amp;&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | Derived icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::numberFormatterSecond(const UnlocalizedNumberFormatter&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | FormattedNumberRange icu::number::LocalizedNumberRangeFormatter::formatFormattableRange(const Formattable&amp;, const Formattable&amp;, UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | FormattedNumberRange&amp; icu::number::FormattedNumberRange::operator=(FormattedNumberRange&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;) const&amp; | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter icu::number::UnlocalizedNumberRangeFormatter::locale(const icu::Locale&amp;)&amp;&amp; | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(LocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | LocalizedNumberRangeFormatter&amp; icu::number::LocalizedNumberRangeFormatter::operator=(const LocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | UBool icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | UNumberRangeIdentityResult icu::number::FormattedNumberRange::getIdentityResult(UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::toString(UErrorCode&amp;) const | Draft→StableICU 63
-| numberrangeformatter.h | UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(UnlocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | UnlocalizedNumberRangeFormatter&amp; icu::number::UnlocalizedNumberRangeFormatter::operator=(const UnlocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_ALL | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_AUTO | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_NONE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeCollapse::UNUM_RANGE_COLLAPSE_UNIT | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_APPROXIMATELY | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_RANGE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityFallback::UNUM_IDENTITY_FALLBACK_SINGLE_VALUE | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING | Draft→StableICU 63
-| numberrangeformatter.h | <tt>enum</tt> UNumberRangeIdentityResult::UNUM_IDENTITY_RESULT_NOT_EQUAL | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::FormattedNumberRange::FormattedNumberRange(FormattedNumberRange&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::FormattedNumberRange::~FormattedNumberRange() | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter()=default | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(LocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(const LocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::LocalizedNumberRangeFormatter::~LocalizedNumberRangeFormatter() | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter()=default | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(UnlocalizedNumberRangeFormatter&amp;&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | icu::number::UnlocalizedNumberRangeFormatter::UnlocalizedNumberRangeFormatter(const UnlocalizedNumberRangeFormatter&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | <tt>static</tt> LocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::withLocale(const Locale&amp;) | Draft→StableICU 63
-| numberrangeformatter.h | <tt>static</tt> UnlocalizedNumberRangeFormatter icu::number::NumberRangeFormatter::with() | Draft→StableICU 63
-| numfmt.h | void* icu::NumberFormat::clone() const | (missing) | StableICU 2.0
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_QUARTER | Draft→StableICU 63
-| uchar.h | const UCPMap* u_getIntPropertyMap(UProperty, UErrorCode*) | Draft→StableICU 63
-| uchar.h | const USet* u_getBinaryPropertySet(UProperty, UErrorCode*) | Draft→StableICU 63
-| ucpmap.h | UChar32 ucpmap_getRange(const UCPMap*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*) | Draft→StableICU 63
-| ucpmap.h | <tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_ALL_SURROGATES | Draft→StableICU 63
-| ucpmap.h | <tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_FIXED_LEAD_SURROGATES | Draft→StableICU 63
-| ucpmap.h | <tt>enum</tt> UCPMapRangeOption::UCPMAP_RANGE_NORMAL | Draft→StableICU 63
-| ucpmap.h | uint32_t ucpmap_get(const UCPMap*, UChar32) | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_16 | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_32 | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_8 | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_ASCII_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_BMP_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_SUPP_GET | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U16_NEXT | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U16_PREV | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U8_NEXT | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_FAST_U8_PREV | Draft→StableICU 63
-| ucptrie.h | <tt>#define</tt> UCPTRIE_SMALL_GET | Draft→StableICU 63
-| ucptrie.h | UCPTrie* ucptrie_openFromBinary(UCPTrieType, UCPTrieValueWidth, const void*, int32_t, int32_t*, UErrorCode*) | Draft→StableICU 63
-| ucptrie.h | UCPTrieType ucptrie_getType(const UCPTrie*) | Draft→StableICU 63
-| ucptrie.h | UCPTrieValueWidth ucptrie_getValueWidth(const UCPTrie*) | Draft→StableICU 63
-| ucptrie.h | UChar32 ucptrie_getRange(const UCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*) | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_ANY | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_FAST | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieType::UCPTRIE_TYPE_SMALL | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_16 | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_32 | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_8 | Draft→StableICU 63
-| ucptrie.h | <tt>enum</tt> UCPTrieValueWidth::UCPTRIE_VALUE_BITS_ANY | Draft→StableICU 63
-| ucptrie.h | int32_t ucptrie_toBinary(const UCPTrie*, void*, int32_t, UErrorCode*) | Draft→StableICU 63
-| ucptrie.h | uint32_t ucptrie_get(const UCPTrie*, UChar32) | Draft→StableICU 63
-| ucptrie.h | void ucptrie_close(UCPTrie*) | Draft→StableICU 63
-| umutablecptrie.h | UCPTrie* umutablecptrie_buildImmutable(UMutableCPTrie*, UCPTrieType, UCPTrieValueWidth, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_clone(const UMutableCPTrie*, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_fromUCPMap(const UCPMap*, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_fromUCPTrie(const UCPTrie*, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UMutableCPTrie* umutablecptrie_open(uint32_t, uint32_t, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | UChar32 umutablecptrie_getRange(const UMutableCPTrie*, UChar32, UCPMapRangeOption, uint32_t, UCPMapValueFilter*, const void*, uint32_t*) | Draft→StableICU 63
-| umutablecptrie.h | uint32_t umutablecptrie_get(const UMutableCPTrie*, UChar32) | Draft→StableICU 63
-| umutablecptrie.h | void umutablecptrie_close(UMutableCPTrie*) | Draft→StableICU 63
-| umutablecptrie.h | void umutablecptrie_set(UMutableCPTrie*, UChar32, uint32_t, UErrorCode*) | Draft→StableICU 63
-| umutablecptrie.h | void umutablecptrie_setRange(UMutableCPTrie*, UChar32, UChar32, uint32_t, UErrorCode*) | Draft→StableICU 63
-| unifilt.h | void* icu::UnicodeFilter::clone() const | (missing) | StableICU 2.4
-| unumberformatter.h | <tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_AUTO | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_MIN2 | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_OFF | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_ON_ALIGNED | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberGroupingStrategy::UNUM_GROUPING_THOUSANDS | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ALWAYS | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_AUTO | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO | Draft→StableICU 61
-| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEVER | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW | Draft→StableICU 60
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT | Draft→StableICU 60
-| uspoof.h | <tt>enum</tt> USpoofChecks::USPOOF_HIDDEN_OVERLAY | Draft→StableICU 62
+| bytestrie.h | BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t) | Draft→StableICU 65
+| bytestrie.h | uint64_t icu::BytesTrie::getState64() const | Draft→StableICU 65
+| fmtable.h | UFormattable* icu::Formattable::toUFormattable() | (missing) | StableICU 52
+| listformatter.h | <tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;) | Draft→StableICU 67
+| localebuilder.h | UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece) | Draft→StableICU 65
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv) | Draft→StableICU 65
+| localematcher.h | Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE | Draft→StableICU 65
+| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Builder::Builder() | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Builder::~Builder() | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Result::Result(Result&amp;&amp;) | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::Result::~Result() | Draft→StableICU 65
+| localematcher.h | icu::LocaleMatcher::~LocaleMatcher() | Draft→StableICU 65
+| localematcher.h | int32_t icu::LocaleMatcher::Result::getDesiredIndex() const | Draft→StableICU 65
+| localematcher.h | int32_t icu::LocaleMatcher::Result::getSupportedIndex() const | Draft→StableICU 65
+| locid.h | UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override | Draft→StableICU 65
+| locid.h | UBool icu::Locale::Iterator::hasNext() const | Draft→StableICU 65
+| locid.h | UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override | Draft→StableICU 65
+| locid.h | const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override | Draft→StableICU 65
+| locid.h | const Locale&amp; icu::Locale::Iterator::next() | Draft→StableICU 65
+| locid.h | const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override | Draft→StableICU 65
+| locid.h | icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv) | Draft→StableICU 65
+| locid.h | icu::Locale::Iterator::~Iterator() | Draft→StableICU 65
+| locid.h | icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBar() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEm() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs() | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;) | Draft→StableICU 65
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;) | Draft→StableICU 65
+| numberformatter.h | StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const | Draft→StableICU 65
+| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR | Draft→StableICU 65
+| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE | Draft→StableICU 65
+| stringpiece.h | icu::StringPiece::StringPiece(T) | Draft→StableICU 65
+| ucal.h | int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*) | Draft→StableICU 65
+| ucharstrie.h | UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t) | Draft→StableICU 65
+| ucharstrie.h | uint64_t icu::UCharsTrie::getState64() const | Draft→StableICU 65
+| ulistformatter.h | UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*) | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT | Draft→StableICU 67
+| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE | Draft→StableICU 67
+| uloc.h | UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*) | Draft→StableICU 65
+| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT | Draft→StableICU 65
+| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES | Draft→StableICU 65
+| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES | Draft→StableICU 65
+| uniset.h | USet* icu::UnicodeSet::toUSet() | (missing) | StableICU 4.2
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE | Draft→StableICU 65
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE | Draft→StableICU 65
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE | Draft→StableICU 65
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START | Draft→StableICU 65
## Added
-Added in ICU 65
+Added in ICU 68
-| File | API | ICU 64 | ICU 65 |
+| File | API | ICU 67 | ICU 68 |
|---|---|---|---|
-| basictz.h | void* icu::BasicTimeZone::clone() const | (missing) | StableICU 3.8
-| bytestrie.h | BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t) | (missing) | DraftICU 65
-| bytestrie.h | uint64_t icu::BytesTrie::getState64() const | (missing) | DraftICU 65
-| datefmt.h | void* icu::DateFormat::clone() const | (missing) | StableICU 2.0
-| edits.h | UBool icu::Edits::copyErrorTo(UErrorCode&amp;) const | (missing) | StableICU 59
-| localebuilder.h | UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece) | (missing) | DraftICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv) | (missing) | DraftICU 65
-| localematcher.h | Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;) | (missing) | DraftICU 65
-| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;) | (missing) | DraftICU 65
-| localematcher.h | UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const | (missing) | DraftICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const | (missing) | DraftICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const | (missing) | DraftICU 65
-| localematcher.h | double icu::LocaleMatcher::internalMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const | (missing) | Internal
-| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE | (missing) | DraftICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION | (missing) | DraftICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE | (missing) | DraftICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::Builder() | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;) | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::~Builder() | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;) | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::Result::Result(Result&amp;&amp;) | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::Result::~Result() | (missing) | DraftICU 65
-| localematcher.h | icu::LocaleMatcher::~LocaleMatcher() | (missing) | DraftICU 65
-| localematcher.h | int32_t icu::LocaleMatcher::Result::getDesiredIndex() const | (missing) | DraftICU 65
-| localematcher.h | int32_t icu::LocaleMatcher::Result::getSupportedIndex() const | (missing) | DraftICU 65
-| locid.h | UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override | (missing) | DraftICU 65
-| locid.h | UBool icu::Locale::Iterator::hasNext() const | (missing) | DraftICU 65
-| locid.h | UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override | (missing) | DraftICU 65
-| locid.h | const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override | (missing) | DraftICU 65
-| locid.h | const Locale&amp; icu::Locale::Iterator::next() | (missing) | DraftICU 65
-| locid.h | const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override | (missing) | DraftICU 65
-| locid.h | icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv) | (missing) | DraftICU 65
-| locid.h | icu::Locale::Iterator::~Iterator() | (missing) | DraftICU 65
-| locid.h | icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBar() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEm() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs() | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;) | (missing) | DraftICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;) | (missing) | DraftICU 65
-| numberformatter.h | StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const | (missing) | DraftICU 65
-| numfmt.h | void* icu::NumberFormat::clone() const | (missing) | StableICU 2.0
-| platform.h | <tt>#define</tt> UPRV_HAS_ATTRIBUTE | (missing) | Internal
-| platform.h | <tt>#define</tt> UPRV_HAS_BUILTIN | (missing) | Internal
-| platform.h | <tt>#define</tt> UPRV_HAS_CPP_ATTRIBUTE | (missing) | Internal
-| platform.h | <tt>#define</tt> UPRV_HAS_DECLSPEC_ATTRIBUTE | (missing) | Internal
-| platform.h | <tt>#define</tt> UPRV_HAS_EXTENSION | (missing) | Internal
-| platform.h | <tt>#define</tt> UPRV_HAS_FEATURE | (missing) | Internal
-| platform.h | <tt>#define</tt> UPRV_HAS_WARNING | (missing) | Internal
-| platform.h | <tt>#define</tt> U_PF_EMSCRIPTEN | (missing) | Internal
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR | (missing) | DraftICU 65
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE | (missing) | DraftICU 65
-| stringpiece.h | icu::StringPiece::StringPiece(T) | (missing) | DraftICU 65
-| ucal.h | int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*) | (missing) | DraftICU 65
-| ucharstrie.h | UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t) | (missing) | DraftICU 65
-| ucharstrie.h | uint64_t icu::UCharsTrie::getState64() const | (missing) | DraftICU 65
-| uloc.h | UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*) | (missing) | DraftICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_COUNT | (missing) | Internal
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT | (missing) | DraftICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES | (missing) | DraftICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES | (missing) | DraftICU 65
-| umachine.h | <tt>#define</tt> UPRV_BLOCK_MACRO_BEGIN | (missing) | Internal
-| umachine.h | <tt>#define</tt> UPRV_BLOCK_MACRO_END | (missing) | Internal
-| unifilt.h | void* icu::UnicodeFilter::clone() const | (missing) | StableICU 2.4
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_RES_DATA_LIMIT | (missing) | Internal
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE | (missing) | DraftICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE | (missing) | DraftICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RESOURCE | (missing) | DraftICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE | (missing) | DraftICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START | (missing) | DraftICU 65
+| dtitvfmt.h | UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const | (missing) | DraftICU 68
+| dtitvfmt.h | void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;) | (missing) | DraftICU 68
+| dtptngen.h | <tt>static</tt> DateTimePatternGenerator* icu::DateTimePatternGenerator::createInstanceNoStdPat(const Locale&amp;, UErrorCode&amp;) | (missing) | Internal
+| fmtable.h | UFormattable* icu::Formattable::toUFormattable() | (missing) | StableICU 52
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;) | (missing) | DraftICU 68
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale() | (missing) | DraftICU 68
+| localematcher.h | UBool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const | (missing) | DraftICU 68
+| measunit.h | int32_t icu::MeasureUnit::getOffset() const | (missing) | Internal
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDot() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDram() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial() | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;) | (missing) | DraftICU 68
+| measunit.h | std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const | (missing) | DraftICU 68
+| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp; | (missing) | DraftICU 68
+| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp; | (missing) | DraftICU 68
+| numberformatter.h | MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const | (missing) | DraftICU 68
+| numberformatter.h | Usage&amp; icu::number::impl::Usage::operator=(Usage&amp;&amp;) | (missing) | Internal
+| numberformatter.h | Usage&amp; icu::number::impl::Usage::operator=(const Usage&amp;) | (missing) | Internal
+| numberformatter.h | bool icu::number::impl::Usage::isSet() const | (missing) | Internal
+| numberformatter.h | icu::number::impl::Usage::Usage(Usage&amp;&amp;) | (missing) | Internal
+| numberformatter.h | icu::number::impl::Usage::Usage(const Usage&amp;) | (missing) | Internal
+| numberformatter.h | icu::number::impl::Usage::~Usage() | (missing) | Internal
+| numberformatter.h | int16_t icu::number::impl::Usage::length() const | (missing) | Internal
+| numberformatter.h | void icu::number::impl::Usage::set(StringPiece) | (missing) | Internal
+| numberrangeformatter.h | std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const | (missing) | DraftICU 68
+| plurrule.h | UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const | (missing) | DraftICU 68
+| plurrule.h | UnicodeString icu::PluralRules::select(const number::impl::UFormattedNumberRangeData*, UErrorCode&amp;) const | (missing) | Internal
+| plurrule.h | int32_t icu::PluralRules::getSamples(const UnicodeString&amp;, FixedDecimal*, int32_t, UErrorCode&amp;) | (missing) | Internal
+| timezone.h | <tt>static</tt> TimeZone* icu::TimeZone::forLocaleOrDefault(const Locale&amp;) | (missing) | Internal
+| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME | (missing) | DraftICU 68
+| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME | (missing) | DraftICU 68
+| udateintervalformat.h | UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*) | (missing) | DraftICU 68
+| udateintervalformat.h | void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*) | (missing) | DraftICU 68
+| umachine.h | <tt>#define</tt> U_DEFINE_FALSE_AND_TRUE | (missing) | InternalICU 68
+| uniset.h | USet* icu::UnicodeSet::toUSet() | (missing) | StableICU 4.2
+| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO | (missing) | DraftICU 68
+| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2 | (missing) | DraftICU 68
+| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL | (missing) | DraftICU 68
+| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT | (missing) | DraftICU 68
+| unumberformatter.h | int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | UFormattedNumberRange* unumrf_openResult(UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | void unumrf_close(UNumberRangeFormatter*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | void unumrf_closeResult(UFormattedNumberRange*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
+| unumberrangeformatter.h | void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
+| upluralrules.h | int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*) | (missing) | DraftICU 68
## Other
-Other existing drafts in ICU 65
+Other existing drafts in ICU 68
-| File | API | ICU 64 | ICU 65 |
+| File | API | ICU 67 | ICU 68 |
|---|---|---|---|
-| currunit.h | icu::CurrencyUnit::CurrencyUnit(StringPiece, UErrorCode&amp;) | DraftICU 64 |
-| decimfmt.h | UBool icu::DecimalFormat::isFormatFailIfMoreThanMaxDigits() const | DraftICU 64 |
-| decimfmt.h | UBool icu::DecimalFormat::isParseCaseSensitive() const | DraftICU 64 |
-| decimfmt.h | UBool icu::DecimalFormat::isParseNoExponent() const | DraftICU 64 |
-| decimfmt.h | UBool icu::DecimalFormat::isSignAlwaysShown() const | DraftICU 64 |
-| decimfmt.h | const number::LocalizedNumberFormatter* icu::DecimalFormat::toNumberFormatter(UErrorCode&amp;) const | DraftICU 64 |
-| decimfmt.h | int32_t icu::DecimalFormat::getMinimumGroupingDigits() const | DraftICU 64 |
-| decimfmt.h | void icu::DecimalFormat::setFormatFailIfMoreThanMaxDigits(UBool) | DraftICU 64 |
-| decimfmt.h | void icu::DecimalFormat::setMinimumGroupingDigits(int32_t) | DraftICU 64 |
-| decimfmt.h | void icu::DecimalFormat::setParseCaseSensitive(UBool) | DraftICU 64 |
-| decimfmt.h | void icu::DecimalFormat::setParseNoExponent(UBool) | DraftICU 64 |
-| decimfmt.h | void icu::DecimalFormat::setSignAlwaysShown(UBool) | DraftICU 64 |
-| dtitvfmt.h | Appendable&amp; icu::FormattedDateInterval::appendTo(Appendable&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| dtitvfmt.h | FormattedDateInterval icu::DateIntervalFormat::formatToValue(Calendar&amp;, Calendar&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| dtitvfmt.h | FormattedDateInterval icu::DateIntervalFormat::formatToValue(const DateInterval&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| dtitvfmt.h | FormattedDateInterval&amp; icu::FormattedDateInterval::operator=(FormattedDateInterval&amp;&amp;) | DraftICU 64 |
-| dtitvfmt.h | UBool icu::FormattedDateInterval::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| dtitvfmt.h | UnicodeString icu::FormattedDateInterval::toString(UErrorCode&amp;) const | DraftICU 64 |
-| dtitvfmt.h | UnicodeString icu::FormattedDateInterval::toTempString(UErrorCode&amp;) const | DraftICU 64 |
-| dtitvfmt.h | icu::FormattedDateInterval::FormattedDateInterval() | DraftICU 64 |
-| dtitvfmt.h | icu::FormattedDateInterval::FormattedDateInterval(FormattedDateInterval&amp;&amp;) | DraftICU 64 |
-| dtitvfmt.h | icu::FormattedDateInterval::~FormattedDateInterval() | DraftICU 64 |
-| formattedvalue.h | Appendable&amp; icu::FormattedValue::appendTo(Appendable&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| formattedvalue.h | UBool icu::ConstrainedFieldPosition::matchesField(int32_t, int32_t) const | DraftICU 64 |
-| formattedvalue.h | UBool icu::FormattedValue::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| formattedvalue.h | UnicodeString icu::FormattedValue::toString(UErrorCode&amp;) const | DraftICU 64 |
-| formattedvalue.h | UnicodeString icu::FormattedValue::toTempString(UErrorCode&amp;) const | DraftICU 64 |
-| formattedvalue.h | icu::ConstrainedFieldPosition::ConstrainedFieldPosition() | DraftICU 64 |
-| formattedvalue.h | icu::ConstrainedFieldPosition::~ConstrainedFieldPosition() | DraftICU 64 |
-| formattedvalue.h | icu::FormattedValue::~FormattedValue() | DraftICU 64 |
-| formattedvalue.h | int32_t icu::ConstrainedFieldPosition::getCategory() const | DraftICU 64 |
-| formattedvalue.h | int32_t icu::ConstrainedFieldPosition::getField() const | DraftICU 64 |
-| formattedvalue.h | int32_t icu::ConstrainedFieldPosition::getLimit() const | DraftICU 64 |
-| formattedvalue.h | int32_t icu::ConstrainedFieldPosition::getStart() const | DraftICU 64 |
-| formattedvalue.h | int64_t icu::ConstrainedFieldPosition::getInt64IterationContext() const | DraftICU 64 |
-| formattedvalue.h | void icu::ConstrainedFieldPosition::constrainCategory(int32_t) | DraftICU 64 |
-| formattedvalue.h | void icu::ConstrainedFieldPosition::constrainField(int32_t, int32_t) | DraftICU 64 |
-| formattedvalue.h | void icu::ConstrainedFieldPosition::reset() | DraftICU 64 |
-| formattedvalue.h | void icu::ConstrainedFieldPosition::setInt64IterationContext(int64_t) | DraftICU 64 |
-| formattedvalue.h | void icu::ConstrainedFieldPosition::setState(int32_t, int32_t, int32_t, int32_t) | DraftICU 64 |
-| listformatter.h | Appendable&amp; icu::FormattedList::appendTo(Appendable&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| listformatter.h | FormattedList icu::ListFormatter::formatStringsToValue(const UnicodeString items[], int32_t, UErrorCode&amp;) const | DraftICU 64 |
-| listformatter.h | FormattedList&amp; icu::FormattedList::operator=(FormattedList&amp;&amp;) | DraftICU 64 |
-| listformatter.h | UBool icu::FormattedList::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| listformatter.h | UnicodeString icu::FormattedList::toString(UErrorCode&amp;) const | DraftICU 64 |
-| listformatter.h | UnicodeString icu::FormattedList::toTempString(UErrorCode&amp;) const | DraftICU 64 |
-| listformatter.h | UnicodeString&amp; icu::ListFormatter::format(const UnicodeString items[], int32_t, UnicodeString&amp;, FieldPositionIterator*, UErrorCode&amp;) const | DraftICU 63 |
-| listformatter.h | icu::FormattedList::FormattedList() | DraftICU 64 |
-| listformatter.h | icu::FormattedList::FormattedList(FormattedList&amp;&amp;) | DraftICU 64 |
-| listformatter.h | icu::FormattedList::~FormattedList() | DraftICU 64 |
-| localebuilder.h | Locale icu::LocaleBuilder::build(UErrorCode&amp;) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::addUnicodeLocaleAttribute(StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::clear() | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::clearExtensions() | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::removeUnicodeLocaleAttribute(StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setExtension(char, StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setLanguage(StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setLanguageTag(StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setLocale(const Locale&amp;) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setRegion(StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setScript(StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setUnicodeLocaleKeyword(StringPiece, StringPiece) | DraftICU 64 |
-| localebuilder.h | LocaleBuilder&amp; icu::LocaleBuilder::setVariant(StringPiece) | DraftICU 64 |
-| localebuilder.h | icu::LocaleBuilder::LocaleBuilder() | DraftICU 64 |
-| localebuilder.h | icu::LocaleBuilder::~LocaleBuilder() | DraftICU 64 |
-| localpointer.h | LocalArray&lt;T&gt;&amp; icu::LocalArray&lt; T &gt;::operator=(std::unique_ptr&lt; T[]&gt;&amp;&amp;) | DraftICU 64 |
-| localpointer.h | LocalPointer&lt;T&gt;&amp; icu::LocalPointer&lt; T &gt;::operator=(std::unique_ptr&lt; T &gt;&amp;&amp;) | DraftICU 64 |
-| localpointer.h | icu::LocalArray&lt; T &gt;::LocalArray(std::unique_ptr&lt; T[]&gt;&amp;&amp;) | DraftICU 64 |
-| localpointer.h | icu::LocalArray&lt; T &gt;::operator std::unique_ptr&lt; T[]&gt;() &amp;&amp; | DraftICU 64 |
-| localpointer.h | icu::LocalPointer&lt; T &gt;::LocalPointer(std::unique_ptr&lt; T &gt;&amp;&amp;) | DraftICU 64 |
-| localpointer.h | icu::LocalPointer&lt; T &gt;::operator std::unique_ptr&lt; T &gt;() &amp;&amp; | DraftICU 64 |
+| bytestream.h | void icu::ByteSink::AppendU8(const char*, int32_t) | DraftICU 67 |
+| bytestream.h | void icu::ByteSink::AppendU8(const char8_t*, int32_t) | DraftICU 67 |
+| dtptngen.h | UDateFormatHourCycle icu::DateTimePatternGenerator::getDefaultHourCycle(UErrorCode&amp;) const | DraftICU 67 |
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDirection(ULocMatchDirection) | DraftICU 67 |
+| localematcher.h | <tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_ONLY_TWO_WAY | DraftICU 67 |
+| localematcher.h | <tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_WITH_ONE_WAY | DraftICU 67 |
+| locid.h | void icu::Locale::canonicalize(UErrorCode&amp;) | DraftICU 67 |
| measfmt.h | void icu::MeasureFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;) const | DraftICU 53 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getAcre() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getAcreFoot() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getAmpere() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getArcMinute() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getArcSecond() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getAstronomicalUnit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getAtmosphere() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBarrel() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBritishThermalUnit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBushel() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getByte() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCalorie() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCarat() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCelsius() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCentiliter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCentimeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCentury() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicCentimeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicFoot() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicInch() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicKilometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicMeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicMile() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCubicYard() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCup() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCupMetric() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDalton() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDay() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDayPerson() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDeciliter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDecimeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDegree() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDunam() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthMass() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getElectronvolt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFahrenheit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFathom() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFluidOunce() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFluidOunceImperial() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFoodcalorie() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFoot() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getFurlong() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGForce() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGallon() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGallonImperial() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGenericTemperature() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGigabit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGigabyte() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGigahertz() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGigawatt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGram() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getHectare() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getHectoliter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getHectopascal() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getHertz() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getHorsepower() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getHour() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getInch() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getInchHg() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getJoule() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKarat() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKelvin() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilobit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilobyte() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilocalorie() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilogram() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilohertz() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilojoule() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilometerPerHour() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilopascal() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowatt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHour() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKnot() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLightYear() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLiter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLiterPer100Kilometers() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLiterPerKilometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLux() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegabit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegabyte() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegahertz() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegaliter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapascal() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegawatt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMeterPerSecond() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMeterPerSecondSquared() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMetricTon() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMicrogram() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMicrometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMicrosecond() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMile() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilePerGallon() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilePerGallonImperial() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilePerHour() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMileScandinavian() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilliampere() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMillibar() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilligram() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilligramPerDeciliter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilliliter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMillimeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMillimeterOfMercury() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMillimolePerLiter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMillisecond() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilliwatt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMinute() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMole() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMonth() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMonthPerson() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getNanometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getNanosecond() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getNauticalMile() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getNewton() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getNewtonMeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getOhm() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getOunce() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getOunceTroy() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getParsec() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPartPerMillion() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPercent() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPermille() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPermyriad() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPetabyte() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPicometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPint() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPintMetric() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPoint() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPound() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPoundFoot() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPoundForce() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPoundPerSquareInch() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuart() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getRadian() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getRevolutionAngle() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSecond() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSolarLuminosity() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSolarMass() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSolarRadius() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareCentimeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareFoot() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareInch() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareKilometer() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareMeter() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareMile() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getSquareYard() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getStone() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTablespoon() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTeaspoon() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTerabit() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTerabyte() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getTon() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getVolt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getWatt() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getWeek() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getWeekPerson() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getYard() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getYear() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getYearPerson() | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBarrel(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBritishThermalUnit(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDalton(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDayPerson(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDunam(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthMass(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createElectronvolt(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createFluidOunceImperial(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilopascal(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapascal(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMole(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMonthPerson(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createNewton(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createNewtonMeter(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPermyriad(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoundFoot(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoundForce(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createSolarLuminosity(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createSolarMass(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createSolarRadius(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createWeekPerson(UErrorCode&amp;) | DraftICU 64 |
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createYearPerson(UErrorCode&amp;) | DraftICU 64 |
-| nounit.h | UClassID icu::NoUnit::getDynamicClassID() const | DraftICU 60 |
-| nounit.h | icu::NoUnit::NoUnit(const NoUnit&amp;) | DraftICU 60 |
-| nounit.h | icu::NoUnit::~NoUnit() | DraftICU 60 |
-| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::base() | DraftICU 60 |
-| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::percent() | DraftICU 60 |
-| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::permille() | DraftICU 60 |
-| nounit.h | <tt>static</tt> UClassID icu::NoUnit::getStaticClassID() | DraftICU 60 |
-| nounit.h | void* icu::NoUnit::clone() const | DraftICU 60 |
-| numberformatter.h | LocalPointer&lt;Derived&gt; icu::number::NumberFormatterSettings&lt; Derived &gt;::clone() &amp;&amp; | DraftICU 64 |
-| numberformatter.h | LocalPointer&lt;Derived&gt; icu::number::NumberFormatterSettings&lt; Derived &gt;::clone() const &amp; | DraftICU 64 |
-| numberformatter.h | UBool icu::number::FormattedNumber::nextFieldPosition(FieldPosition&amp;, UErrorCode&amp;) const | DraftICU 62 |
-| numberformatter.h | UBool icu::number::FormattedNumber::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| numberformatter.h | UnicodeString icu::number::FormattedNumber::toTempString(UErrorCode&amp;) const | DraftICU 64 |
-| numberformatter.h | icu::number::FormattedNumber::FormattedNumber() | DraftICU 64 |
-| numberformatter.h | <tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::forSkeleton(const UnicodeString&amp;, UParseError&amp;, UErrorCode&amp;) | DraftICU 64 |
-| numberformatter.h | void icu::number::FormattedNumber::getAllFieldPositions(FieldPositionIterator&amp;, UErrorCode&amp;) const | DraftICU 62 |
-| numberrangeformatter.h | LocalPointer&lt;Derived&gt; icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::clone() &amp;&amp; | DraftICU 64 |
-| numberrangeformatter.h | LocalPointer&lt;Derived&gt; icu::number::NumberRangeFormatterSettings&lt; Derived &gt;::clone() const &amp; | DraftICU 64 |
-| numberrangeformatter.h | UBool icu::number::FormattedNumberRange::nextFieldPosition(FieldPosition&amp;, UErrorCode&amp;) const | DraftICU 63 |
-| numberrangeformatter.h | UBool icu::number::FormattedNumberRange::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const | DraftICU 63 |
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const | DraftICU 63 |
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::toTempString(UErrorCode&amp;) const | DraftICU 64 |
-| numberrangeformatter.h | void icu::number::FormattedNumberRange::getAllFieldPositions(FieldPositionIterator&amp;, UErrorCode&amp;) const | DraftICU 63 |
-| numfmt.h | <tt>enum</tt> icu::NumberFormat::EAlignmentFields::kCompactField | DraftICU 64 |
-| numfmt.h | <tt>enum</tt> icu::NumberFormat::EAlignmentFields::kMeasureUnitField | DraftICU 64 |
-| plurrule.h | UnicodeString icu::PluralRules::select(const number::FormattedNumber&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | Appendable&amp; icu::FormattedRelativeDateTime::appendTo(Appendable&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatNumericToValue(double, URelativeDateTimeUnit, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatToValue(UDateDirection, UDateAbsoluteUnit, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatToValue(double, UDateDirection, UDateRelativeUnit, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | FormattedRelativeDateTime icu::RelativeDateTimeFormatter::formatToValue(double, URelativeDateTimeUnit, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | FormattedRelativeDateTime&amp; icu::FormattedRelativeDateTime::operator=(FormattedRelativeDateTime&amp;&amp;) | DraftICU 64 |
-| reldatefmt.h | UBool icu::FormattedRelativeDateTime::nextPosition(ConstrainedFieldPosition&amp;, UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | UnicodeString icu::FormattedRelativeDateTime::toString(UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | UnicodeString icu::FormattedRelativeDateTime::toTempString(UErrorCode&amp;) const | DraftICU 64 |
-| reldatefmt.h | icu::FormattedRelativeDateTime::FormattedRelativeDateTime() | DraftICU 64 |
-| reldatefmt.h | icu::FormattedRelativeDateTime::FormattedRelativeDateTime(FormattedRelativeDateTime&amp;&amp;) | DraftICU 64 |
-| reldatefmt.h | icu::FormattedRelativeDateTime::~FormattedRelativeDateTime() | DraftICU 64 |
-| udateintervalformat.h | UFormattedDateInterval* udtitvfmt_openResult(UErrorCode*) | DraftICU 64 |
-| udateintervalformat.h | const UFormattedValue* udtitvfmt_resultAsValue(const UFormattedDateInterval*, UErrorCode*) | DraftICU 64 |
-| udateintervalformat.h | void udtitvfmt_closeResult(UFormattedDateInterval*) | DraftICU 64 |
-| udateintervalformat.h | void udtitvfmt_formatToResult(const UDateIntervalFormat*, UFormattedDateInterval*, UDate, UDate, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | UBool ucfpos_matchesField(const UConstrainedFieldPosition*, int32_t, int32_t, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | UBool ufmtval_nextPosition(const UFormattedValue*, UConstrainedFieldPosition*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | UConstrainedFieldPosition* ucfpos_open(UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | const UChar* ufmtval_getString(const UFormattedValue*, int32_t*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_DATE_INTERVAL_SPAN | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_DATE | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_LIST_SPAN | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_LIST | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_NUMBER | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_RELATIVE_DATETIME | DraftICU 64 |
-| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_UNDEFINED | DraftICU 64 |
-| uformattedvalue.h | int32_t ucfpos_getCategory(const UConstrainedFieldPosition*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | int32_t ucfpos_getField(const UConstrainedFieldPosition*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | int64_t ucfpos_getInt64IterationContext(const UConstrainedFieldPosition*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_close(UConstrainedFieldPosition*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_constrainCategory(UConstrainedFieldPosition*, int32_t, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_constrainField(UConstrainedFieldPosition*, int32_t, int32_t, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_getIndexes(const UConstrainedFieldPosition*, int32_t*, int32_t*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_reset(UConstrainedFieldPosition*, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_setInt64IterationContext(UConstrainedFieldPosition*, int64_t, UErrorCode*) | DraftICU 64 |
-| uformattedvalue.h | void ucfpos_setState(UConstrainedFieldPosition*, int32_t, int32_t, int32_t, int32_t, UErrorCode*) | DraftICU 64 |
-| ulistformatter.h | UFormattedList* ulistfmt_openResult(UErrorCode*) | DraftICU 64 |
-| ulistformatter.h | const UFormattedValue* ulistfmt_resultAsValue(const UFormattedList*, UErrorCode*) | DraftICU 64 |
-| ulistformatter.h | <tt>enum</tt> UListFormatterField::ULISTFMT_ELEMENT_FIELD | DraftICU 63 |
-| ulistformatter.h | <tt>enum</tt> UListFormatterField::ULISTFMT_LITERAL_FIELD | DraftICU 63 |
-| ulistformatter.h | void ulistfmt_closeResult(UFormattedList*) | DraftICU 64 |
-| ulistformatter.h | void ulistfmt_formatStringsToResult(const UListFormatter*, const UChar* const strings[], const int32_t*, int32_t, UFormattedList*, UErrorCode*) | DraftICU 64 |
-| unum.h | <tt>enum</tt> UNumberFormatAttribute::UNUM_MINIMUM_GROUPING_DIGITS | DraftICU 64 |
-| unum.h | <tt>enum</tt> UNumberFormatAttribute::UNUM_PARSE_CASE_SENSITIVE | DraftICU 64 |
-| unum.h | <tt>enum</tt> UNumberFormatAttribute::UNUM_SIGN_ALWAYS_SHOWN | DraftICU 64 |
-| unum.h | <tt>enum</tt> UNumberFormatFields::UNUM_COMPACT_FIELD | DraftICU 64 |
-| unum.h | <tt>enum</tt> UNumberFormatFields::UNUM_MEASURE_UNIT_FIELD | DraftICU 64 |
-| unumberformatter.h | UNumberFormatter* unumf_openForSkeletonAndLocaleWithError(const UChar*, int32_t, const char*, UParseError*, UErrorCode*) | DraftICU 64 |
-| unumberformatter.h | const UFormattedValue* unumf_resultAsValue(const UFormattedNumber*, UErrorCode*) | DraftICU 64 |
-| upluralrules.h | int32_t uplrules_selectFormatted(const UPluralRules*, const struct UFormattedNumber*, UChar*, int32_t, UErrorCode*) | DraftICU 64 |
+| measunit.h | MeasureUnit icu::MeasureUnit::product(const MeasureUnit&amp;, UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | MeasureUnit icu::MeasureUnit::reciprocal(UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | MeasureUnit icu::MeasureUnit::withDimensionality(int32_t, UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | MeasureUnit icu::MeasureUnit::withSIPrefix(UMeasureSIPrefix, UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | MeasureUnit&amp; icu::MeasureUnit::operator=(MeasureUnit&amp;&amp;) noexcept | DraftICU 67 |
+| measunit.h | UMeasureSIPrefix icu::MeasureUnit::getSIPrefix(UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | UMeasureUnitComplexity icu::MeasureUnit::getComplexity(UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | const char* icu::MeasureUnit::getIdentifier() const | DraftICU 67 |
+| measunit.h | icu::MeasureUnit::MeasureUnit(MeasureUnit&amp;&amp;) noexcept | DraftICU 67 |
+| measunit.h | int32_t icu::MeasureUnit::getDimensionality(UErrorCode&amp;) const | DraftICU 67 |
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::forIdentifier(StringPiece, UErrorCode&amp;) | DraftICU 67 |
+| stringpiece.h | icu::StringPiece::StringPiece(const char8_t*) | DraftICU 67 |
+| stringpiece.h | icu::StringPiece::StringPiece(const char8_t*, int32_t) | DraftICU 67 |
+| stringpiece.h | icu::StringPiece::StringPiece(const std::u8string&amp;) | DraftICU 67 |
+| stringpiece.h | icu::StringPiece::StringPiece(std::nullptr_t) | DraftICU 67 |
+| stringpiece.h | int32_t icu::StringPiece::compare(StringPiece) | DraftICU 67 |
+| stringpiece.h | int32_t icu::StringPiece::find(StringPiece, int32_t) | DraftICU 67 |
+| stringpiece.h | void icu::StringPiece::set(const char8_t*) | DraftICU 67 |
+| stringpiece.h | void icu::StringPiece::set(const char8_t*, int32_t) | DraftICU 67 |
+| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_11 | DraftICU 67 |
+| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_12 | DraftICU 67 |
+| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_23 | DraftICU 67 |
+| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_24 | DraftICU 67 |
+| udateintervalformat.h | void udtitvfmt_formatCalendarToResult(const UDateIntervalFormat*, UCalendar*, UCalendar*, UFormattedDateInterval*, UErrorCode*) | DraftICU 67 |
+| udateintervalformat.h | void udtitvfmt_formatToResult(const UDateIntervalFormat*, UDate, UDate, UFormattedDateInterval*, UErrorCode*) | DraftICU 67 |
+| udatpg.h | UDateFormatHourCycle udatpg_getDefaultHourCycle(const UDateTimePatternGenerator*, UErrorCode*) | DraftICU 67 |
| uregex.h | <tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ | DraftICU 2.4 |
-| ureldatefmt.h | UFormattedRelativeDateTime* ureldatefmt_openResult(UErrorCode*) | DraftICU 64 |
-| ureldatefmt.h | const UFormattedValue* ureldatefmt_resultAsValue(const UFormattedRelativeDateTime*, UErrorCode*) | DraftICU 64 |
-| ureldatefmt.h | <tt>enum</tt> URelativeDateTimeFormatterField::UDAT_REL_LITERAL_FIELD | DraftICU 64 |
-| ureldatefmt.h | <tt>enum</tt> URelativeDateTimeFormatterField::UDAT_REL_NUMERIC_FIELD | DraftICU 64 |
-| ureldatefmt.h | void ureldatefmt_closeResult(UFormattedRelativeDateTime*) | DraftICU 64 |
-| ureldatefmt.h | void ureldatefmt_formatNumericToResult(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UFormattedRelativeDateTime*, UErrorCode*) | DraftICU 64 |
-| ureldatefmt.h | void ureldatefmt_formatToResult(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UFormattedRelativeDateTime*, UErrorCode*) | DraftICU 64 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_BREAK_ENGINE | DraftICU 67 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_CHARACTER | DraftICU 67 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_LINE | DraftICU 67 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_SENTENCE | DraftICU 67 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_TITLE | DraftICU 67 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_WORD | DraftICU 67 |
+| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_START | DraftICU 67 |
## Simplifications
This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
all possible variations in "original" form.
-- **`void* icu::ChoiceFormat::clone() const`**
- - `ChoiceFormat* icu::ChoiceFormat::clone() const`
- - `Format* icu::ChoiceFormat::clone() const`
-- **`void* icu::CompactDecimalFormat::clone() const`**
- - `CompactDecimalFormat* icu::CompactDecimalFormat::clone() const U_OVERRIDE`
- - `Format* icu::CompactDecimalFormat::clone() const U_OVERRIDE`
-- **`void* icu::CurrencyAmount::clone() const`**
- - `CurrencyAmount* icu::CurrencyAmount::clone() const`
- - `UObject* icu::CurrencyAmount::clone() const`
-- **`void* icu::CurrencyUnit::clone() const`**
- - `CurrencyUnit* icu::CurrencyUnit::clone() const`
- - `UObject* icu::CurrencyUnit::clone() const`
-- **`void* icu::DateIntervalFormat::clone() const`**
- - `DateIntervalFormat* icu::DateIntervalFormat::clone() const`
- - `Format* icu::DateIntervalFormat::clone() const`
-- **`void* icu::DecimalFormat::clone() const`**
- - `DecimalFormat* icu::DecimalFormat::clone() const U_OVERRIDE`
- - `Format* icu::DecimalFormat::clone() const U_OVERRIDE`
-- **`void* icu::GregorianCalendar::clone() const`**
- - `Calendar* icu::GregorianCalendar::clone() const`
- - `GregorianCalendar* icu::GregorianCalendar::clone() const`
-- **`void* icu::Measure::clone() const`**
- - `Measure* icu::Measure::clone() const`
- - `UObject* icu::Measure::clone() const`
-- **`void* icu::MeasureFormat::clone() const`**
- - `Format* icu::MeasureFormat::clone() const`
- - `MeasureFormat* icu::MeasureFormat::clone() const`
-- **`void* icu::MeasureUnit::clone() const`**
- - `MeasureUnit* icu::MeasureUnit::clone() const`
- - `UObject* icu::MeasureUnit::clone() const`
-- **`void* icu::MessageFormat::clone() const`**
- - `Format* icu::MessageFormat::clone() const`
- - `MessageFormat* icu::MessageFormat::clone() const`
-- **`void* icu::NoUnit::clone() const`**
- - `NoUnit* icu::NoUnit::clone() const`
- - `UObject* icu::NoUnit::clone() const`
-- **`void* icu::PluralFormat::clone() const`**
- - `Format* icu::PluralFormat::clone() const`
- - `PluralFormat* icu::PluralFormat::clone() const`
-- **`void* icu::RuleBasedBreakIterator::clone() const`**
- - `BreakIterator* icu::RuleBasedBreakIterator::clone() const`
- - `RuleBasedBreakIterator* icu::RuleBasedBreakIterator::clone() const`
-- **`void* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&, UErrorCode&)`**
- - `BreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&, UErrorCode&)`
- - `RuleBasedBreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&, UErrorCode&)`
-- **`void* icu::RuleBasedCollator::clone() const`**
- - `Collator* icu::RuleBasedCollator::clone() const`
- - `RuleBasedCollator* icu::RuleBasedCollator::clone() const`
-- **`void* icu::RuleBasedNumberFormat::clone() const`**
- - `Format* icu::RuleBasedNumberFormat::clone() const`
- - `RuleBasedNumberFormat* icu::RuleBasedNumberFormat::clone() const`
-- **`void* icu::RuleBasedTimeZone::clone() const`**
- - `RuleBasedTimeZone* icu::RuleBasedTimeZone::clone() const`
- - `TimeZone* icu::RuleBasedTimeZone::clone() const`
-- **`void* icu::SelectFormat::clone() const`**
- - `Format* icu::SelectFormat::clone() const`
- - `SelectFormat* icu::SelectFormat::clone() const`
-- **`void* icu::SimpleDateFormat::clone() const`**
- - `Format* icu::SimpleDateFormat::clone() const`
- - `SimpleDateFormat* icu::SimpleDateFormat::clone() const`
-- **`void* icu::SimpleTimeZone::clone() const`**
- - `SimpleTimeZone* icu::SimpleTimeZone::clone() const`
- - `TimeZone* icu::SimpleTimeZone::clone() const`
-- **`void* icu::StringCharacterIterator::clone() const`**
- - `CharacterIterator* icu::StringCharacterIterator::clone() const`
- - `StringCharacterIterator* icu::StringCharacterIterator::clone() const`
-- **`void* icu::StringSearch::safeClone() const`**
- - `SearchIterator* icu::StringSearch::safeClone() const`
- - `StringSearch* icu::StringSearch::safeClone() const`
-- **`void* icu::TimeUnit::clone() const`**
- - `TimeUnit* icu::TimeUnit::clone() const`
- - `UObject* icu::TimeUnit::clone() const`
-- **`void* icu::TimeUnitAmount::clone() const`**
- - `TimeUnitAmount* icu::TimeUnitAmount::clone() const`
- - `UObject* icu::TimeUnitAmount::clone() const`
-- **`void* icu::TimeUnitFormat::clone() const`**
- - `Format* icu::TimeUnitFormat::clone() const`
- - `TimeUnitFormat* icu::TimeUnitFormat::clone() const`
-- **`void* icu::TimeZoneFormat::clone() const`**
- - `Format* icu::TimeZoneFormat::clone() const`
- - `TimeZoneFormat* icu::TimeZoneFormat::clone() const`
-- **`void* icu::UCharCharacterIterator::clone() const`**
- - `CharacterIterator* icu::UCharCharacterIterator::clone() const`
- - `UCharCharacterIterator* icu::UCharCharacterIterator::clone() const`
-- **`void* icu::UnicodeSet::clone() const`**
- - `UnicodeFunctor* icu::UnicodeSet::clone() const`
- - `UnicodeSet* icu::UnicodeSet::clone() const`
-- **`void* icu::UnicodeSet::cloneAsThawed() const`**
- - `UnicodeFunctor* icu::UnicodeSet::cloneAsThawed() const`
- - `UnicodeSet* icu::UnicodeSet::cloneAsThawed() const`
-- **`void* icu::UnicodeSet::freeze()`**
- - `UnicodeFunctor* icu::UnicodeSet::freeze()`
- - `UnicodeSet* icu::UnicodeSet::freeze()`
-- **`void* icu::UnicodeString::clone() const`**
- - `Replaceable* icu::UnicodeString::clone() const`
- - `UnicodeString* icu::UnicodeString::clone() const`
-- **`void* icu::VTimeZone::clone() const`**
- - `TimeZone* icu::VTimeZone::clone() const`
- - `VTimeZone* icu::VTimeZone::clone() const`
## Colophon
-Contents generated by StableAPI tool on Wed Oct 02 10:22:36 PDT 2019
+Contents generated by StableAPI tool on Fri Oct 23 11:32:42 PDT 2020
Copyright © 2019 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
diff --git a/Build/source/libs/icu/icu-src/LICENSE b/Build/source/libs/icu/icu-src/LICENSE
index 2e01e368768..5d664a083b9 100644
--- a/Build/source/libs/icu/icu-src/LICENSE
+++ b/Build/source/libs/icu/icu-src/LICENSE
@@ -1,6 +1,6 @@
COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
-Copyright © 1991-2019 Unicode, Inc. All rights reserved.
+Copyright © 1991-2020 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining
@@ -284,9 +284,9 @@ property of their respective owners.
# Copyright (c) 2013 International Business Machines Corporation
# and others. All Rights Reserved.
#
- # Project: http://code.google.com/p/lao-dictionary/
- # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
- # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
+ # Project: https://github.com/veer66/lao-dictionary
+ # Dictionary: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary.txt
+ # License: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary-LICENSE.txt
# (copied below)
#
# This file is derived from the above dictionary, with slight
diff --git a/Build/source/libs/icu/icu-src/readme.html b/Build/source/libs/icu/icu-src/readme.html
index e991f145cb4..06381c55c25 100644
--- a/Build/source/libs/icu/icu-src/readme.html
+++ b/Build/source/libs/icu/icu-src/readme.html
@@ -3,7 +3,7 @@
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
- <title>ReadMe for ICU 65.1</title>
+ <title>ReadMe for ICU 68.2</title>
<meta name="COPYRIGHT" content=
"Copyright (C) 2016 and later: Unicode, Inc. and others. License &amp; terms of use: http://www.unicode.org/copyright.html"/>
<!-- meta name="COPYRIGHT" content=
@@ -31,20 +31,23 @@
<span class="only-draft">DRAFT</span>
International Components for Unicode<br/>
<span class="only-rc">Release Candidate</span>
- <span class="only-milestone">(Milestone Release)</span>
- <abbr title="International Components for Unicode">ICU</abbr> 65.1 ReadMe
+ <!-- <span class="only-milestone">(Milestone Release)</span> -->
+ <span class="only-milestone">(Preview Release)</span>
+ <abbr title="International Components for Unicode">ICU</abbr> 68.2 ReadMe
</h1>
- <!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
- <p class="note only-milestone">This is a development milestone release of ICU
+ <!-- Most of the time we shouldn't need to comment/uncomment this paragraph, just change the body class -->
+ <!-- <p class="note only-milestone">This is a development milestone release of ICU
This milestone is intended for those wishing to get an early look at new features and API changes.
+ It is not recommended for production use.</p> -->
+ <p class="note only-milestone">This is a preview release of ICU.
It is not recommended for production use.</p>
<!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
<p class="note only-rc">This is a release candidate version of ICU4C.
It is not recommended for production use.</p>
- <p>Last updated: 2019-Sept-16<br/>
+ <p>Last updated: 2020-Dec-02<br/>
Copyright &copy; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
Copyright &copy; 1997-2016 International Business Machines Corporation and others.
@@ -182,20 +185,21 @@
<td>FAQ - Frequently Asked Questions about ICU</td>
<td><a href=
- "http://userguide.icu-project.org/icufaq">http://userguide.icu-project.org/icufaq</a></td>
+ "https://unicode-org.github.io/icu/userguide/icufaq">https://unicode-org.github.io/icu/userguide/icufaq</a></td>
</tr>
<tr>
<td>ICU User's Guide</td>
<td><a href=
- "http://userguide.icu-project.org/">http://userguide.icu-project.org/</a></td>
+ "https://unicode-org.github.io/icu/userguide/">https://unicode-org.github.io/icu/userguide/</a></td>
</tr>
<tr>
<td>How To Use ICU</td>
- <td><a href="http://userguide.icu-project.org/howtouseicu">http://userguide.icu-project.org/howtouseicu</a></td>
+ <td><a href=
+ "https://unicode-org.github.io/icu/userguide/howtouseicu">https://unicode-org.github.io/icu/userguide/howtouseicu</a></td>
</tr>
<tr>
@@ -233,8 +237,8 @@
<h2><a name="News" href="#News" id="News">What Is New In This Release?</a></h2>
- <p>See the <a href="http://site.icu-project.org/download/65">ICU 65 download page</a>
- for an overview of this release, important changes, new features, bug fixes, known issues,
+ <p>See the <a href="http://site.icu-project.org/download/68">ICU 68 download page</a>
+ for more information on this release, including any other changes, bug fixes, known issues,
changes to supported platforms and build environments,
and migration issues for existing applications migrating from previous ICU releases.</p>
@@ -281,7 +285,7 @@
<p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the full
path name of the ICU directory (the top level directory from the distribution
archives) in your file system. You can also view the <a href=
- "http://userguide.icu-project.org/design">ICU Architectural
+ "https://unicode-org.github.io/icu/userguide/design">ICU Architectural
Design</a> section of the User's Guide to see which libraries you need for
your software product. You need at least the data (<code>[lib]icudt</code>)
and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>
@@ -440,7 +444,7 @@
environment variable to the out/ or the out/build/ directories, but
this is generally discouraged because most people set it incorrectly.
You can view the <a href=
- "http://userguide.icu-project.org/icudata">ICU Data
+ "https://unicode-org.github.io/icu/userguide/icudata">ICU Data
Management</a> section of the ICU User's Guide for details.</p>
</td>
</tr>
@@ -684,7 +688,7 @@
It may be hard if ICU is shipped with
another shared library (such as the Xerces-C++ XML parser)
which does not control <code>main()</code>.<br />
- See the <a href="http://userguide.icu-project.org/icudata">User Guide ICU Data</a>
+ See the <a href="https://unicode-org.github.io/icu/userguide/icudata">User Guide ICU Data</a>
chapter for more details.<br />
If possible, we recommend building the .dat package.
Specify <code>--with-data-packaging=archive</code>
@@ -720,7 +724,7 @@
<p>If ICU is installed as a system-level library, there are further
opportunities and restrictions to consider.
For details, see the <em>Using ICU as an Operating System Level Library</em>
- section of the <a href="http://userguide.icu-project.org/design">User Guide ICU Architectural Design</a> chapter.</p>
+ section of the <a href="https://unicode-org.github.io/icu/userguide/design">User Guide ICU Architectural Design</a> chapter.</p>
<ul>
<li><b>Data path:</b> For a system-level library, it is best to load
ICU data from the .dat package file because the file system path
@@ -1504,7 +1508,7 @@ gnumake</pre>
operating systems that do not have a standard C++ ABI (name mangling) for
compilers, it is recommended to do this special packaging anyway. More
details on customizing ICU are available in the <a href=
- "http://userguide.icu-project.org/">User's Guide</a>. The <a href=
+ "https://unicode-org.github.io/icu/userguide/">User's Guide</a>. The <a href=
"#SourceCode">ICU Source Code Organization</a> section of this readme.html
gives a more complete description of the libraries.</p>
@@ -1533,7 +1537,7 @@ gnumake</pre>
<td>Data required by the Common and I18n libraries. There are many ways
to package and <a href=
- "http://userguide.icu-project.org/icudata">customize this
+ "https://unicode-org.github.io/icu/userguide/icudata">customize this
data</a>, but by default this is all you need.</td>
</tr>
@@ -1787,7 +1791,7 @@ gnumake</pre>
<p>Data files can be built on a different platform when both platforms share
the same endianness and the same charset family. This assertion does not
include platform dependent DLLs/shared/static libraries. For details see the
- User Guide <a href="http://userguide.icu-project.org/icudata">ICU
+ User Guide <a href="https://unicode-org.github.io/icu/userguide/icudata">ICU
Data</a> chapter.</p>
<p>ICU 3.6 removes the requirement that ICU be completely built in the native
diff --git a/Build/source/libs/icu/icu-src/source/.clang-format b/Build/source/libs/icu/icu-src/source/.clang-format
new file mode 100644
index 00000000000..83cbf646a43
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/.clang-format
@@ -0,0 +1,11 @@
+# © 2020 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+---
+Language: Cpp
+BasedOnStyle: LLVM
+IndentWidth: 4
+ColumnLimit: 105
+AllowShortBlocksOnASingleLine: false
+AllowShortIfStatementsOnASingleLine: true
+...
diff --git a/Build/source/libs/icu/icu-src/source/Doxyfile.in b/Build/source/libs/icu/icu-src/source/Doxyfile.in
index 25b535cc7ac..7ced104ce80 100644
--- a/Build/source/libs/icu/icu-src/source/Doxyfile.in
+++ b/Build/source/libs/icu/icu-src/source/Doxyfile.in
@@ -1310,7 +1310,7 @@ CHM_FILE =
HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the master .chm file (NO).
+# (YES) or that it should be included in the primary .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
diff --git a/Build/source/libs/icu/icu-src/source/Makefile.in b/Build/source/libs/icu/icu-src/source/Makefile.in
index be9435ba95f..79a0a3423ab 100644
--- a/Build/source/libs/icu/icu-src/source/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/Makefile.in
@@ -38,7 +38,7 @@ subdir = .
@TOOLS_TRUE@@TESTS_TRUE@TEST = test
@SAMPLES_TRUE@SAMPLE = samples
@TOOLS_TRUE@TOOLS = tools
-@TOOLS_TRUE@DATASUBDIR = data
+@DATA_TRUE@DATASUBDIR = data
## pkgconfig setup. Always have uc and i18n. Others are optional.
ALL_PKGCONFIG_SUFFIX=uc i18n
diff --git a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props
index b4777679b80..adee8f67191 100644
--- a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props
+++ b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props
@@ -1,16 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html -->
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!-- This file is used to set the PlatformToolset configuration option for all UWP projects. -->
-
+ <!-- This file is used to set configuration option for all projects. -->
+
<!-- Automatic PlatformToolset version selection. -->
- <!-- If there is no DefaultPlatformToolset set, we will detect the version based on version of the build tools. -->
+ <!-- If there is no DefaultPlatformToolset set, we will try to detect the version based on version of the build tools. -->
<PropertyGroup>
<BuildToolVersion>$(VisualStudioVersion)</BuildToolVersion>
- <BuildToolVersion Condition="'$(BuildToolVersion)'==''">$(MSBuildToolsVersion)</BuildToolVersion>
- <!-- Note: v140 is the Visual Studio 2015 toolset. v141 is the Visual Studio 2017 toolset. -->
+ <!-- Only use the MSBuildToolsVersion if we don't have the VisualStudioVersion and MSBuildToolsVersion is set to something other than Current. -->
+ <BuildToolVersion Condition="'$(BuildToolVersion)'=='' and '$(MSBuildToolsVersion)' != 'Current'">$(MSBuildToolsVersion)</BuildToolVersion>
+ <!-- Note:
+ v140 is the Visual Studio 2015 toolset. (14.0)
+ v141 is the Visual Studio 2017 toolset. (15.0)
+ v142 is the Visual Studio 2019 toolset. (16.0)
+ -->
<AutoDetectedPlatformToolset Condition="'$(BuildToolVersion)'=='14.0'">v140</AutoDetectedPlatformToolset>
<AutoDetectedPlatformToolset Condition="'$(BuildToolVersion)'=='15.0'">v141</AutoDetectedPlatformToolset>
+ <AutoDetectedPlatformToolset Condition="'$(BuildToolVersion)'=='16.0'">v142</AutoDetectedPlatformToolset>
</PropertyGroup>
<PropertyGroup Label="EmptyDefaultPlatformToolset">
<DefaultPlatformToolset Condition=" '$(DefaultPlatformToolset)' == '' ">$(AutoDetectedPlatformToolset)</DefaultPlatformToolset>
@@ -18,9 +24,36 @@
<PropertyGroup Label="PlatformToolset">
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
+
+ <!-- This is the default SDK target. -->
+ <!--
+ If not already set, use the latest installed version of the Windows 10 SDK.
+ The Windows 10 SDK is backwards compatible to Windows 7, as long as WINVER and _WIN32_WINNT are set before compiling.
+ Note:
+ - With VS2019, using a value of "10.0" means that it will use the latest installed version.
+ - With VS2017, we need to manually detect the latest SDK version from the registry.
+ - With VS2015, use the Windows 8.1 SDK.
+ -->
+ <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' and '$(PlatformToolset)'=='v142'">
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' and ('$(PlatformToolset)'=='v141' or '$(AutodetectWin10SDK)'=='true')">
+ <!-- Detect the SDK version. -->
+ <WindowsSdkInstallFolder_10 Condition="'$(WindowsSdkInstallFolder_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0@InstallationFolder)</WindowsSdkInstallFolder_10>
+ <WindowsSdkInstallFolder_10 Condition="'$(WindowsSdkInstallFolder_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0@InstallationFolder)</WindowsSdkInstallFolder_10>
+ <WindowsTargetPlatformVersion_10 Condition="'$(WindowsTargetPlatformVersion_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion)</WindowsTargetPlatformVersion_10>
+ <WindowsTargetPlatformVersion_10 Condition="'$(WindowsTargetPlatformVersion_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion)</WindowsTargetPlatformVersion_10>
+ <!-- Sometimes the version in the registry has the '.0' suffix, and sometimes it doesn't. Check and add it. -->
+ <WindowsTargetPlatformVersion_10 Condition="'$(WindowsTargetPlatformVersion_10)' != '' and !$(WindowsTargetPlatformVersion_10.EndsWith('.0'))">$(WindowsTargetPlatformVersion_10).0</WindowsTargetPlatformVersion_10>
+ <!-- Set the default. -->
+ <WindowsTargetPlatformVersion>$(WindowsTargetPlatformVersion_10)</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'=='' and '$(PlatformToolset)'=='v140'">
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <!-- Disable MSBuild warning about Linker OutputFile. -->
<PropertyGroup>
- <!-- Disable MSBuild warning about Linker OutputFile. -->
- <!-- Ex: MSBuild complains that the common project creates "icuuc62.dll" rather than "common.dll". However, this is intentional. -->
+ <!-- For example: MSBuild complains that the common project creates "icuuc62.dll" rather than "common.dll". However, this is intentional. -->
<MSBuildWarningsAsMessages>MSB8012</MSBuildWarningsAsMessages>
</PropertyGroup>
</Project>
diff --git a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.ProjectConfiguration.props b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.ProjectConfiguration.props
index ab535881c79..147689b910a 100644
--- a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.ProjectConfiguration.props
+++ b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.ProjectConfiguration.props
@@ -56,13 +56,7 @@
<IcuBinOutputDir>binARM64</IcuBinOutputDir>
<IcuLibOutputDir>libARM64</IcuLibOutputDir>
</PropertyGroup>
- <!-- This is the default SDK target. -->
- <PropertyGroup>
- <!-- Note that the Windows 8.1 SDK is backwards compatible down-level to Windows 7, so
- setting this to 8.1 does not actually imply targeting Windows 8.1. -->
- <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <!-- Desktop ARM/ARM64 support requires a newer version of the Windows SDK than 8.1 -->
+ <!-- Desktop ARM/ARM64 support requires a different version of the Windows SDK -->
<!--
Note: This version must match the version below in the ARM64 section for AdditionalLibraryDirectories
-->
diff --git a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.UWP.ProjectConfiguration.props b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.UWP.ProjectConfiguration.props
index 359d2c2de43..89d528a7791 100644
--- a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.UWP.ProjectConfiguration.props
+++ b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.UWP.ProjectConfiguration.props
@@ -8,18 +8,8 @@
<ApplicationType>Windows Store</ApplicationType>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
</PropertyGroup>
- <!-- If not already set, then we will default to using the latest installed Windows 10 SDK version. -->
- <PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'==''">
- <!-- Detect the SDK version. -->
- <WindowsSdkInstallFolder_10 Condition="'$(WindowsSdkInstallFolder_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0@InstallationFolder)</WindowsSdkInstallFolder_10>
- <WindowsSdkInstallFolder_10 Condition="'$(WindowsSdkInstallFolder_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0@InstallationFolder)</WindowsSdkInstallFolder_10>
- <WindowsTargetPlatformVersion_10 Condition="'$(WindowsTargetPlatformVersion_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion)</WindowsTargetPlatformVersion_10>
- <WindowsTargetPlatformVersion_10 Condition="'$(WindowsTargetPlatformVersion_10)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion)</WindowsTargetPlatformVersion_10>
- <!-- Sometimes the version in the registry has the '.0' suffix, and sometimes it doesn't. Check and add it. -->
- <WindowsTargetPlatformVersion_10 Condition="'$(WindowsTargetPlatformVersion_10)' != '' and !$(WindowsTargetPlatformVersion_10.EndsWith('.0'))">$(WindowsTargetPlatformVersion_10).0</WindowsTargetPlatformVersion_10>
- <!-- Set the default. -->
- <WindowsTargetPlatformVersion>$(WindowsTargetPlatformVersion_10)</WindowsTargetPlatformVersion>
- <!-- Set the minimum Win10 SDK version to TH1/RTM. -->
+ <PropertyGroup>
+ <!-- Set the minimum Windows 10 SDK version to TH1/RTM. -->
<WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
</PropertyGroup>
<!-- The following import will set the PlatformToolset configuration. -->
diff --git a/Build/source/libs/icu/icu-src/source/common/Makefile.in b/Build/source/libs/icu/icu-src/source/common/Makefile.in
index d21f5d06b12..67bcf00349f 100644
--- a/Build/source/libs/icu/icu-src/source/common/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/common/Makefile.in
@@ -79,45 +79,8 @@ endif
# $(LIBICUDT) is either stub data or the real DLL common data.
LIBS = $(LIBICUDT) $(DEFAULT_LIBS)
-OBJECTS = errorcode.o putil.o umath.o utypes.o uinvchar.o umutex.o ucln_cmn.o \
-uinit.o uobject.o cmemory.o charstr.o cstr.o \
-udata.o ucmndata.o udatamem.o umapfile.o udataswp.o utrie_swap.o ucol_swp.o utrace.o \
-uhash.o uhash_us.o uenum.o ustrenum.o uvector.o ustack.o uvectr32.o uvectr64.o \
-ucnv.o ucnv_bld.o ucnv_cnv.o ucnv_io.o ucnv_cb.o ucnv_err.o ucnvlat1.o \
-ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o ucnvscsu.o ucnvbocu.o \
-ucnv_ext.o ucnvmbcs.o ucnv2022.o ucnvhz.o ucnv_lmb.o ucnvisci.o ucnvdisp.o ucnv_set.o ucnv_ct.o \
-resource.o uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \
-ucurr.o \
-localebuilder.o localeprioritylist.o \
-messagepattern.o ucat.o locmap.o uloc.o locid.o locutil.o locavailable.o locdispnames.o locdspnm.o loclikely.o locresdata.o \
-lsr.o loclikelysubtags.o locdistance.o localematcher.o \
-bytestream.o stringpiece.o bytesinkutil.o \
-stringtriebuilder.o bytestriebuilder.o \
-bytestrie.o bytestrieiterator.o \
-ucharstrie.o ucharstriebuilder.o ucharstrieiterator.o \
-dictionarydata.o \
-edits.o \
-appendable.o ustr_cnv.o unistr_cnv.o unistr.o unistr_case.o unistr_props.o \
-utf_impl.o ustring.o ustrcase.o ucasemap.o ucasemap_titlecase_brkiter.o cstring.o ustrfmt.o ustrtrns.o ustr_wcs.o utext.o \
-unistr_case_locale.o ustrcase_locale.o unistr_titlecase_brkiter.o ustr_titlecase_brkiter.o \
-normalizer2impl.o normalizer2.o filterednormalizer2.o normlzr.o unorm.o unormcmp.o loadednormalizer2impl.o \
-chariter.o schriter.o uchriter.o uiter.o \
-patternprops.o uchar.o uprops.o ucase.o propname.o ubidi_props.o characterproperties.o \
-ubidi.o ubidiwrt.o ubidiln.o ushape.o \
-uscript.o uscript_props.o usc_impl.o unames.o \
-utrie.o utrie2.o utrie2_builder.o ucptrie.o umutablecptrie.o \
-bmpset.o unisetspan.o uset_props.o uniset_props.o uniset_closure.o uset.o uniset.o usetiter.o ruleiter.o caniter.o unifilt.o unifunct.o \
-uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o filteredbrk.o \
-rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o rbbi_cache.o \
-serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \
-uidna.o usprep.o uts46.o punycode.o \
-util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o dtintrv.o ucnvsel.o propsvec.o \
-ulist.o uloc_tag.o icudataver.o icuplug.o \
-sharedobject.o simpleformatter.o unifiedcache.o uloc_keytype.o \
-ubiditransform.o \
-pluralmap.o \
-static_unicode_sets.o \
-restrace.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
## Header files to install
HEADERS = $(srcdir)/unicode/*.h
@@ -159,6 +122,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -166,6 +134,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/common/bmpset.h b/Build/source/libs/icu/icu-src/source/common/bmpset.h
index 018aeb7f95b..e1982ac669d 100644
--- a/Build/source/libs/icu/icu-src/source/common/bmpset.h
+++ b/Build/source/libs/icu/icu-src/source/common/bmpset.h
@@ -101,7 +101,7 @@ private:
*/
UBool latin1Contains[0x100];
- /* TRUE if contains(U+FFFD). */
+ /* true if contains(U+FFFD). */
UBool containsFFFD;
/*
diff --git a/Build/source/libs/icu/icu-src/source/common/brkeng.h b/Build/source/libs/icu/icu-src/source/common/brkeng.h
index e40fce13f64..155433b89a8 100644
--- a/Build/source/libs/icu/icu-src/source/common/brkeng.h
+++ b/Build/source/libs/icu/icu-src/source/common/brkeng.h
@@ -54,7 +54,7 @@ class LanguageBreakEngine : public UMemory {
* a particular kind of break.</p>
*
* @param c A character which begins a run that the engine might handle
- * @return TRUE if this engine handles the particular character and break
+ * @return true if this engine handles the particular character and break
* type.
*/
virtual UBool handles(UChar32 c) const = 0;
@@ -171,7 +171,7 @@ class UnhandledEngine : public LanguageBreakEngine {
* a particular kind of break.</p>
*
* @param c A character which begins a run that the engine might handle
- * @return TRUE if this engine handles the particular character and break
+ * @return true if this engine handles the particular character and break
* type.
*/
virtual UBool handles(UChar32 c) const;
diff --git a/Build/source/libs/icu/icu-src/source/common/brkiter.cpp b/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
index 3d1366a6688..b9b6ca65cd4 100644
--- a/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
@@ -38,6 +38,7 @@
#include "uresimp.h"
#include "uassert.h"
#include "ubrkimpl.h"
+#include "utracimp.h"
#include "charstr.h"
// *****************************************************************************
@@ -412,14 +413,23 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
BreakIterator *result = NULL;
switch (kind) {
case UBRK_CHARACTER:
- result = BreakIterator::buildInstance(loc, "grapheme", status);
+ {
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_CHARACTER);
+ result = BreakIterator::buildInstance(loc, "grapheme", status);
+ UTRACE_EXIT_STATUS(status);
+ }
break;
case UBRK_WORD:
- result = BreakIterator::buildInstance(loc, "word", status);
+ {
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_WORD);
+ result = BreakIterator::buildInstance(loc, "word", status);
+ UTRACE_EXIT_STATUS(status);
+ }
break;
case UBRK_LINE:
- uprv_strcpy(lbType, "line");
{
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_LINE);
+ uprv_strcpy(lbType, "line");
char lbKeyValue[kKeyValueLenMax] = {0};
UErrorCode kvStatus = U_ZERO_ERROR;
int32_t kLen = loc.getKeywordValue("lb", lbKeyValue, kKeyValueLenMax, kvStatus);
@@ -427,13 +437,17 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
uprv_strcat(lbType, "_");
uprv_strcat(lbType, lbKeyValue);
}
+ result = BreakIterator::buildInstance(loc, lbType, status);
+
+ UTRACE_DATA1(UTRACE_INFO, "lb=%s", lbKeyValue);
+ UTRACE_EXIT_STATUS(status);
}
- result = BreakIterator::buildInstance(loc, lbType, status);
break;
case UBRK_SENTENCE:
- result = BreakIterator::buildInstance(loc, "sentence", status);
-#if !UCONFIG_NO_FILTERED_BREAK_ITERATION
{
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_SENTENCE);
+ result = BreakIterator::buildInstance(loc, "sentence", status);
+#if !UCONFIG_NO_FILTERED_BREAK_ITERATION
char ssKeyValue[kKeyValueLenMax] = {0};
UErrorCode kvStatus = U_ZERO_ERROR;
int32_t kLen = loc.getKeywordValue("ss", ssKeyValue, kKeyValueLenMax, kvStatus);
@@ -444,11 +458,16 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
delete fbiBuilder;
}
}
- }
#endif
+ UTRACE_EXIT_STATUS(status);
+ }
break;
case UBRK_TITLE:
- result = BreakIterator::buildInstance(loc, "title", status);
+ {
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_TITLE);
+ result = BreakIterator::buildInstance(loc, "title", status);
+ UTRACE_EXIT_STATUS(status);
+ }
break;
default:
status = U_ILLEGAL_ARGUMENT_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h b/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
index 6808fbe6777..ab2516432d3 100644
--- a/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
+++ b/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
@@ -45,9 +45,9 @@ public:
static UBool appendUnchanged(const uint8_t *s, int32_t length,
ByteSink &sink, uint32_t options, Edits *edits,
UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) { return FALSE; }
+ if (U_FAILURE(errorCode)) { return false; }
if (length > 0) { appendNonEmptyUnchanged(s, length, sink, options, edits); }
- return TRUE;
+ return true;
}
static UBool appendUnchanged(const uint8_t *s, const uint8_t *limit,
diff --git a/Build/source/libs/icu/icu-src/source/common/charstr.cpp b/Build/source/libs/icu/icu-src/source/common/charstr.cpp
index dda29dac632..318a185b3f1 100644
--- a/Build/source/libs/icu/icu-src/source/common/charstr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/charstr.cpp
@@ -20,6 +20,7 @@
#include "cmemory.h"
#include "cstring.h"
#include "uinvchar.h"
+#include "ustr_imp.h"
U_NAMESPACE_BEGIN
@@ -46,6 +47,19 @@ char *CharString::cloneData(UErrorCode &errorCode) const {
return p;
}
+int32_t CharString::extract(char *dest, int32_t capacity, UErrorCode &errorCode) const {
+ if (U_FAILURE(errorCode)) { return len; }
+ if (capacity < 0 || (capacity > 0 && dest == nullptr)) {
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+ return len;
+ }
+ const char *src = buffer.getAlias();
+ if (0 < len && len <= capacity && src != dest) {
+ uprv_memcpy(dest, src, len);
+ }
+ return u_terminateChars(dest, capacity, len, &errorCode);
+}
+
CharString &CharString::copyFrom(const CharString &s, UErrorCode &errorCode) {
if(U_SUCCESS(errorCode) && this!=&s && ensureCapacity(s.len+1, 0, errorCode)) {
len=s.len;
@@ -197,7 +211,7 @@ CharString &CharString::appendPathPart(StringPiece s, UErrorCode &errorCode) {
}
char c;
if(len>0 && (c=buffer[len-1])!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) {
- append(U_FILE_SEP_CHAR, errorCode);
+ append(getDirSepChar(), errorCode);
}
append(s, errorCode);
return *this;
@@ -207,9 +221,19 @@ CharString &CharString::ensureEndsWithFileSeparator(UErrorCode &errorCode) {
char c;
if(U_SUCCESS(errorCode) && len>0 &&
(c=buffer[len-1])!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) {
- append(U_FILE_SEP_CHAR, errorCode);
+ append(getDirSepChar(), errorCode);
}
return *this;
}
+char CharString::getDirSepChar() const {
+ char dirSepChar = U_FILE_SEP_CHAR;
+#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
+ // We may need to return a different directory separator when building for Cygwin or MSYS2.
+ if(len>0 && !uprv_strchr(data(), U_FILE_SEP_CHAR) && uprv_strchr(data(), U_FILE_ALT_SEP_CHAR))
+ dirSepChar = U_FILE_ALT_SEP_CHAR;
+#endif
+ return dirSepChar;
+}
+
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/common/charstr.h b/Build/source/libs/icu/icu-src/source/common/charstr.h
index 23b950ed6ec..6619faac618 100644
--- a/Build/source/libs/icu/icu-src/source/common/charstr.h
+++ b/Build/source/libs/icu/icu-src/source/common/charstr.h
@@ -87,6 +87,22 @@ public:
* The caller must uprv_free() the result.
*/
char *cloneData(UErrorCode &errorCode) const;
+ /**
+ * Copies the contents of the string into dest.
+ * Checks if there is enough space in dest, extracts the entire string if possible,
+ * and NUL-terminates dest if possible.
+ *
+ * If the string fits into dest but cannot be NUL-terminated (length()==capacity),
+ * then the error code is set to U_STRING_NOT_TERMINATED_WARNING.
+ * If the string itself does not fit into dest (length()>capacity),
+ * then the error code is set to U_BUFFER_OVERFLOW_ERROR.
+ *
+ * @param dest Destination string buffer.
+ * @param capacity Size of the dest buffer (number of chars).
+ * @param errorCode ICU error code.
+ * @return length()
+ */
+ int32_t extract(char *dest, int32_t capacity, UErrorCode &errorCode) const;
bool operator==(StringPiece other) const {
return len == other.length() && (len == 0 || uprv_memcmp(data(), other.data(), len) == 0);
@@ -141,13 +157,13 @@ public:
/**
* Appends a filename/path part, e.g., a directory name.
- * First appends a U_FILE_SEP_CHAR if necessary.
+ * First appends a U_FILE_SEP_CHAR or U_FILE_ALT_SEP_CHAR if necessary.
* Does nothing if s is empty.
*/
CharString &appendPathPart(StringPiece s, UErrorCode &errorCode);
/**
- * Appends a U_FILE_SEP_CHAR if this string is not empty
+ * Appends a U_FILE_SEP_CHAR or U_FILE_ALT_SEP_CHAR if this string is not empty
* and does not already end with a U_FILE_SEP_CHAR or U_FILE_ALT_SEP_CHAR.
*/
CharString &ensureEndsWithFileSeparator(UErrorCode &errorCode);
@@ -160,6 +176,12 @@ private:
CharString(const CharString &other); // forbid copying of this class
CharString &operator=(const CharString &other); // forbid copying of this class
+
+ /**
+ * Returns U_FILE_ALT_SEP_CHAR if found in string, and U_FILE_SEP_CHAR is not found.
+ * Otherwise returns U_FILE_SEP_CHAR.
+ */
+ char getDirSepChar() const;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/common/charstrmap.h b/Build/source/libs/icu/icu-src/source/common/charstrmap.h
new file mode 100644
index 00000000000..3320a462085
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/charstrmap.h
@@ -0,0 +1,55 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// charstrmap.h
+// created: 2020sep01 Frank Yung-Fong Tang
+
+#ifndef __CHARSTRMAP_H__
+#define __CHARSTRMAP_H__
+
+#include <utility>
+#include "unicode/utypes.h"
+#include "unicode/uobject.h"
+#include "uhash.h"
+
+U_NAMESPACE_BEGIN
+
+/**
+ * Map of const char * keys & values.
+ * Stores pointers as is: Does not own/copy/adopt/release strings.
+ */
+class CharStringMap final : public UMemory {
+public:
+ /** Constructs an unusable non-map. */
+ CharStringMap() : map(nullptr) {}
+ CharStringMap(int32_t size, UErrorCode &errorCode) {
+ map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
+ size, &errorCode);
+ }
+ CharStringMap(CharStringMap &&other) U_NOEXCEPT : map(other.map) {
+ other.map = nullptr;
+ }
+ CharStringMap(const CharStringMap &other) = delete;
+ ~CharStringMap() {
+ uhash_close(map);
+ }
+
+ CharStringMap &operator=(CharStringMap &&other) U_NOEXCEPT {
+ map = other.map;
+ other.map = nullptr;
+ return *this;
+ }
+ CharStringMap &operator=(const CharStringMap &other) = delete;
+
+ const char *get(const char *key) const { return static_cast<const char *>(uhash_get(map, key)); }
+ void put(const char *key, const char *value, UErrorCode &errorCode) {
+ uhash_put(map, const_cast<char *>(key), const_cast<char *>(value), &errorCode);
+ }
+
+private:
+ UHashtable *map;
+};
+
+U_NAMESPACE_END
+
+#endif // __CHARSTRMAP_H__
diff --git a/Build/source/libs/icu/icu-src/source/common/cmemory.h b/Build/source/libs/icu/icu-src/source/common/cmemory.h
index 7f7fd8d0864..a9d9424b4e2 100644
--- a/Build/source/libs/icu/icu-src/source/common/cmemory.h
+++ b/Build/source/libs/icu/icu-src/source/common/cmemory.h
@@ -274,7 +274,10 @@ inline T *LocalMemory<T>::allocateInsteadAndCopy(int32_t newCapacity, int32_t le
*
* WARNING: MaybeStackArray only works with primitive (plain-old data) types.
* It does NOT know how to call a destructor! If you work with classes with
- * destructors, consider LocalArray in localpointer.h or MemoryPool.
+ * destructors, consider:
+ *
+ * - LocalArray in localpointer.h if you know the length ahead of time
+ * - MaybeStackVector if you know the length at runtime
*/
template<typename T, int32_t stackCapacity>
class MaybeStackArray {
@@ -289,14 +292,21 @@ public:
/**
* Default constructor initializes with internal T[stackCapacity] buffer.
*/
- MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(FALSE) {}
+ MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(false) {}
/**
* Automatically allocates the heap array if the argument is larger than the stack capacity.
* Intended for use when an approximate capacity is known at compile time but the true
* capacity is not known until runtime.
*/
- MaybeStackArray(int32_t newCapacity) : MaybeStackArray() {
- if (capacity < newCapacity) { resize(newCapacity); }
+ MaybeStackArray(int32_t newCapacity, UErrorCode status) : MaybeStackArray() {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (capacity < newCapacity) {
+ if (resize(newCapacity) == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ }
}
/**
* Destructor deletes the array (if owned).
@@ -352,7 +362,7 @@ public:
releaseArray();
ptr=otherArray;
capacity=otherCapacity;
- needToRelease=FALSE;
+ needToRelease=false;
}
}
/**
@@ -377,6 +387,20 @@ public:
* caller becomes responsible for deleting the array
*/
inline T *orphanOrClone(int32_t length, int32_t &resultCapacity);
+
+protected:
+ // Resizes the array to the size of src, then copies the contents of src.
+ void copyFrom(const MaybeStackArray &src, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (this->resize(src.capacity, 0) == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memcpy(this->ptr, src.ptr, (size_t)capacity * sizeof(T));
+ }
+
private:
T *ptr;
int32_t capacity;
@@ -390,14 +414,14 @@ private:
void resetToStackArray() {
ptr=stackArray;
capacity=stackCapacity;
- needToRelease=FALSE;
+ needToRelease=false;
}
/* No comparison operators with other MaybeStackArray's. */
- bool operator==(const MaybeStackArray & /*other*/) {return FALSE;}
- bool operator!=(const MaybeStackArray & /*other*/) {return TRUE;}
+ bool operator==(const MaybeStackArray & /*other*/) = delete;
+ bool operator!=(const MaybeStackArray & /*other*/) = delete;
/* No ownership transfer: No copy constructor, no assignment operator. */
- MaybeStackArray(const MaybeStackArray & /*other*/) {}
- void operator=(const MaybeStackArray & /*other*/) {}
+ MaybeStackArray(const MaybeStackArray & /*other*/) = delete;
+ void operator=(const MaybeStackArray & /*other*/) = delete;
};
template<typename T, int32_t stackCapacity>
@@ -432,7 +456,7 @@ template<typename T, int32_t stackCapacity>
inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t length) {
if(newCapacity>0) {
#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
- ::fprintf(::stderr,"MaybeStacArray (resize) alloc %d * %lu\n", newCapacity,sizeof(T));
+ ::fprintf(::stderr, "MaybeStackArray (resize) alloc %d * %lu\n", newCapacity, sizeof(T));
#endif
T *p=(T *)uprv_malloc(newCapacity*sizeof(T));
if(p!=NULL) {
@@ -448,7 +472,7 @@ inline T *MaybeStackArray<T, stackCapacity>::resize(int32_t newCapacity, int32_t
releaseArray();
ptr=p;
capacity=newCapacity;
- needToRelease=TRUE;
+ needToRelease=true;
}
return p;
} else {
@@ -504,7 +528,7 @@ public:
/**
* Default constructor initializes with internal H+T[stackCapacity] buffer.
*/
- MaybeStackHeaderAndArray() : ptr(&stackHeader), capacity(stackCapacity), needToRelease(FALSE) {}
+ MaybeStackHeaderAndArray() : ptr(&stackHeader), capacity(stackCapacity), needToRelease(false) {}
/**
* Destructor deletes the memory (if owned).
*/
@@ -553,7 +577,7 @@ public:
releaseMemory();
ptr=otherMemory;
capacity=otherCapacity;
- needToRelease=FALSE;
+ needToRelease=false;
}
}
/**
@@ -592,8 +616,8 @@ private:
}
}
/* No comparison operators with other MaybeStackHeaderAndArray's. */
- bool operator==(const MaybeStackHeaderAndArray & /*other*/) {return FALSE;}
- bool operator!=(const MaybeStackHeaderAndArray & /*other*/) {return TRUE;}
+ bool operator==(const MaybeStackHeaderAndArray & /*other*/) {return false;}
+ bool operator!=(const MaybeStackHeaderAndArray & /*other*/) {return true;}
/* No ownership transfer: No copy constructor, no assignment operator. */
MaybeStackHeaderAndArray(const MaybeStackHeaderAndArray & /*other*/) {}
void operator=(const MaybeStackHeaderAndArray & /*other*/) {}
@@ -622,7 +646,7 @@ inline H *MaybeStackHeaderAndArray<H, T, stackCapacity>::resize(int32_t newCapac
releaseMemory();
ptr=p;
capacity=newCapacity;
- needToRelease=TRUE;
+ needToRelease=true;
}
return p;
} else {
@@ -654,7 +678,7 @@ inline H *MaybeStackHeaderAndArray<H, T, stackCapacity>::orphanOrClone(int32_t l
resultCapacity=length;
ptr=&stackHeader;
capacity=stackCapacity;
- needToRelease=FALSE;
+ needToRelease=false;
return p;
}
@@ -684,26 +708,31 @@ inline H *MaybeStackHeaderAndArray<H, T, stackCapacity>::orphanOrClone(int32_t l
template<typename T, int32_t stackCapacity = 8>
class MemoryPool : public UMemory {
public:
- MemoryPool() : count(0), pool() {}
+ MemoryPool() : fCount(0), fPool() {}
~MemoryPool() {
- for (int32_t i = 0; i < count; ++i) {
- delete pool[i];
+ for (int32_t i = 0; i < fCount; ++i) {
+ delete fPool[i];
}
}
MemoryPool(const MemoryPool&) = delete;
MemoryPool& operator=(const MemoryPool&) = delete;
- MemoryPool(MemoryPool&& other) U_NOEXCEPT : count(other.count),
- pool(std::move(other.pool)) {
- other.count = 0;
+ MemoryPool(MemoryPool&& other) U_NOEXCEPT : fCount(other.fCount),
+ fPool(std::move(other.fPool)) {
+ other.fCount = 0;
}
MemoryPool& operator=(MemoryPool&& other) U_NOEXCEPT {
- count = other.count;
- pool = std::move(other.pool);
- other.count = 0;
+ // Since `this` may contain instances that need to be deleted, we can't
+ // just throw them away and replace them with `other`. The normal way of
+ // dealing with this in C++ is to swap `this` and `other`, rather than
+ // simply overwrite: the destruction of `other` can then take care of
+ // running MemoryPool::~MemoryPool() over the still-to-be-deallocated
+ // instances.
+ std::swap(fCount, other.fCount);
+ std::swap(fPool, other.fPool);
return *this;
}
@@ -716,20 +745,106 @@ public:
*/
template<typename... Args>
T* create(Args&&... args) {
- int32_t capacity = pool.getCapacity();
- if (count == capacity &&
- pool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
- capacity) == nullptr) {
+ int32_t capacity = fPool.getCapacity();
+ if (fCount == capacity &&
+ fPool.resize(capacity == stackCapacity ? 4 * capacity : 2 * capacity,
+ capacity) == nullptr) {
return nullptr;
}
- return pool[count++] = new T(std::forward<Args>(args)...);
+ return fPool[fCount++] = new T(std::forward<Args>(args)...);
}
-private:
- int32_t count;
- MaybeStackArray<T*, stackCapacity> pool;
+ template <typename... Args>
+ T* createAndCheckErrorCode(UErrorCode &status, Args &&... args) {
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ T *pointer = this->create(args...);
+ if (U_SUCCESS(status) && pointer == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ return pointer;
+ }
+
+ /**
+ * @return Number of elements that have been allocated.
+ */
+ int32_t count() const {
+ return fCount;
+ }
+
+protected:
+ int32_t fCount;
+ MaybeStackArray<T*, stackCapacity> fPool;
+};
+
+/**
+ * An internal Vector-like implementation based on MemoryPool.
+ *
+ * Heap-allocates each element and stores pointers.
+ *
+ * To append an item to the vector, use emplaceBack.
+ *
+ * MaybeStackVector<MyType> vector;
+ * MyType* element = vector.emplaceBack();
+ * if (!element) {
+ * status = U_MEMORY_ALLOCATION_ERROR;
+ * }
+ * // do stuff with element
+ *
+ * To loop over the vector, use a for loop with indices:
+ *
+ * for (int32_t i = 0; i < vector.length(); i++) {
+ * MyType* element = vector[i];
+ * }
+ */
+template<typename T, int32_t stackCapacity = 8>
+class MaybeStackVector : protected MemoryPool<T, stackCapacity> {
+public:
+ template<typename... Args>
+ T* emplaceBack(Args&&... args) {
+ return this->create(args...);
+ }
+
+ template <typename... Args>
+ T *emplaceBackAndCheckErrorCode(UErrorCode &status, Args &&... args) {
+ return this->createAndCheckErrorCode(status, args...);
+ }
+
+ int32_t length() const {
+ return this->fCount;
+ }
+
+ T** getAlias() {
+ return this->fPool.getAlias();
+ }
+
+ const T *const *getAlias() const {
+ return this->fPool.getAlias();
+ }
+
+ /**
+ * Array item access (read-only).
+ * No index bounds check.
+ * @param i array index
+ * @return reference to the array item
+ */
+ const T* operator[](ptrdiff_t i) const {
+ return this->fPool[i];
+ }
+
+ /**
+ * Array item access (writable).
+ * No index bounds check.
+ * @param i array index
+ * @return reference to the array item
+ */
+ T* operator[](ptrdiff_t i) {
+ return this->fPool[i];
+ }
};
+
U_NAMESPACE_END
#endif /* __cplusplus */
diff --git a/Build/source/libs/icu/icu-src/source/common/common.vcxproj b/Build/source/libs/icu/icu-src/source/common/common.vcxproj
index 54eb011a647..d7f668ea9d8 100644
--- a/Build/source/libs/icu/icu-src/source/common/common.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/common/common.vcxproj
@@ -16,22 +16,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -74,7 +58,7 @@
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
<Link>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc65d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary>
</Link>
@@ -86,7 +70,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile>
<Link>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc65.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary>
</Link>
@@ -357,7 +341,9 @@
<ClInclude Include="localeprioritylist.h" />
<ClInclude Include="locbased.h" />
<ClInclude Include="locdistance.h" />
+ <ClInclude Include="charstrmap.h" />
<ClInclude Include="loclikelysubtags.h" />
+ <ClInclude Include="uniquecharstr.h" />
<ClInclude Include="locutil.h" />
<ClInclude Include="lsr.h" />
<ClInclude Include="sharedobject.h" />
diff --git a/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters b/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
index 5fabc6f4619..f1ba90109ce 100644
--- a/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
+++ b/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
@@ -840,6 +840,12 @@
<ClInclude Include="locdistance.h">
<Filter>locales &amp; resources</Filter>
</ClInclude>
+ <ClInclude Include="charstrmap.h">
+ <Filter>locales &amp; resources</Filter>
+ </ClInclude>
+ <ClInclude Include="uniquecharstr.h">
+ <Filter>locales &amp; resources</Filter>
+ </ClInclude>
<ClInclude Include="loclikelysubtags.h">
<Filter>locales &amp; resources</Filter>
</ClInclude>
diff --git a/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj b/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
index 8469178d096..a57917292a7 100644
--- a/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
@@ -52,10 +52,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -129,7 +125,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<AdditionalDependencies>vccorlib.lib;msvcrt.lib;vcruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc65.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary>
</Link>
@@ -152,7 +148,7 @@
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;vcruntimed.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc65d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary>
</Link>
@@ -480,6 +476,8 @@
<ClInclude Include="localeprioritylist.h" />
<ClInclude Include="locbased.h" />
<ClInclude Include="locdistance.h" />
+ <ClInclude Include="charstrmap.h" />
+ <ClInclude Include="uniquecharstr.h" />
<ClInclude Include="loclikelysubtags.h" />
<ClInclude Include="locutil.h" />
<ClInclude Include="lsr.h" />
@@ -532,4 +530,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" Condition="'$(SkipUWP)'!='true'" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/Build/source/libs/icu/icu-src/source/common/cstring.h b/Build/source/libs/icu/icu-src/source/common/cstring.h
index ed0b1a7c8b0..3a14e4216c8 100644
--- a/Build/source/libs/icu/icu-src/source/common/cstring.h
+++ b/Build/source/libs/icu/icu-src/source/common/cstring.h
@@ -52,6 +52,8 @@
U_CAPI UBool U_EXPORT2
uprv_isASCIILetter(char c);
+// NOTE: For u_asciiToUpper that takes a UChar, see ustr_imp.h
+
U_CAPI char U_EXPORT2
uprv_toupper(char c);
diff --git a/Build/source/libs/icu/icu-src/source/common/dictbe.cpp b/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
index c769138ae4b..b42cdf03fae 100644
--- a/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
@@ -18,6 +18,7 @@
#include "unicode/uniset.h"
#include "unicode/chariter.h"
#include "unicode/ubrk.h"
+#include "utracimp.h"
#include "uvectr32.h"
#include "uvector.h"
#include "uassert.h"
@@ -194,6 +195,8 @@ ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode
: DictionaryBreakEngine(),
fDictionary(adoptDictionary)
{
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
+ UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Thai");
fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status);
if (U_SUCCESS(status)) {
setCharacters(fThaiWordSet);
@@ -213,6 +216,7 @@ ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode
fEndWordSet.compact();
fBeginWordSet.compact();
fSuffixSet.compact();
+ UTRACE_EXIT_STATUS(status);
}
ThaiBreakEngine::~ThaiBreakEngine() {
@@ -436,6 +440,8 @@ LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &s
: DictionaryBreakEngine(),
fDictionary(adoptDictionary)
{
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
+ UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Laoo");
fLaoWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Laoo:]&[:LineBreak=SA:]]"), status);
if (U_SUCCESS(status)) {
setCharacters(fLaoWordSet);
@@ -452,6 +458,7 @@ LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &s
fMarkSet.compact();
fEndWordSet.compact();
fBeginWordSet.compact();
+ UTRACE_EXIT_STATUS(status);
}
LaoBreakEngine::~LaoBreakEngine() {
@@ -632,6 +639,8 @@ BurmeseBreakEngine::BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErro
: DictionaryBreakEngine(),
fDictionary(adoptDictionary)
{
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
+ UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Mymr");
fBurmeseWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Mymr:]&[:LineBreak=SA:]]"), status);
if (U_SUCCESS(status)) {
setCharacters(fBurmeseWordSet);
@@ -645,6 +654,7 @@ BurmeseBreakEngine::BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErro
fMarkSet.compact();
fEndWordSet.compact();
fBeginWordSet.compact();
+ UTRACE_EXIT_STATUS(status);
}
BurmeseBreakEngine::~BurmeseBreakEngine() {
@@ -825,6 +835,8 @@ KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCod
: DictionaryBreakEngine(),
fDictionary(adoptDictionary)
{
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
+ UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Khmr");
fKhmerWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]]"), status);
if (U_SUCCESS(status)) {
setCharacters(fKhmerWordSet);
@@ -850,6 +862,7 @@ KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCod
fEndWordSet.compact();
fBeginWordSet.compact();
// fSuffixSet.compact();
+ UTRACE_EXIT_STATUS(status);
}
KhmerBreakEngine::~KhmerBreakEngine() {
@@ -1045,6 +1058,8 @@ foundBest:
static const uint32_t kuint32max = 0xFFFFFFFF;
CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType type, UErrorCode &status)
: DictionaryBreakEngine(), fDictionary(adoptDictionary) {
+ UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
+ UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Hani");
// Korean dictionary only includes Hangul syllables
fHangulWordSet.applyPattern(UNICODE_STRING_SIMPLE("[\\uac00-\\ud7a3]"), status);
fHanWordSet.applyPattern(UNICODE_STRING_SIMPLE("[:Han:]"), status);
@@ -1066,6 +1081,7 @@ CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType
setCharacters(cjSet);
}
}
+ UTRACE_EXIT_STATUS(status);
}
CjkBreakEngine::~CjkBreakEngine(){
diff --git a/Build/source/libs/icu/icu-src/source/common/dictbe.h b/Build/source/libs/icu/icu-src/source/common/dictbe.h
index 731bfdff9f2..4ea676fc716 100644
--- a/Build/source/libs/icu/icu-src/source/common/dictbe.h
+++ b/Build/source/libs/icu/icu-src/source/common/dictbe.h
@@ -59,7 +59,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
* a particular kind of break.</p>
*
* @param c A character which begins a run that the engine might handle
- * @return TRUE if this engine handles the particular character and break
+ * @return true if this engine handles the particular character and break
* type.
*/
virtual UBool handles(UChar32 c) const;
diff --git a/Build/source/libs/icu/icu-src/source/common/icuplug.cpp b/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
index c6439cc819a..4ab8c66ebe3 100644
--- a/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
@@ -145,7 +145,7 @@ static int32_t searchForLibrary(void *lib) {
return -1;
}
-U_INTERNAL char * U_EXPORT2
+U_CAPI char * U_EXPORT2
uplug_findLibrary(void *lib, UErrorCode *status) {
int32_t libEnt;
char *ret = NULL;
@@ -161,7 +161,7 @@ uplug_findLibrary(void *lib, UErrorCode *status) {
return ret;
}
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uplug_openLibrary(const char *libName, UErrorCode *status) {
int32_t libEntry = -1;
void *lib = NULL;
@@ -209,7 +209,7 @@ uplug_openLibrary(const char *libName, UErrorCode *status) {
return lib;
}
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_closeLibrary(void *lib, UErrorCode *status) {
int32_t i;
@@ -507,7 +507,7 @@ uplug_getConfiguration(UPlugData *data) {
return data->config;
}
-U_INTERNAL UPlugData* U_EXPORT2
+U_CAPI UPlugData* U_EXPORT2
uplug_getPlugInternal(int32_t n) {
if(n <0 || n >= pluginCount) {
return NULL;
@@ -707,7 +707,7 @@ static void uplug_loadWaitingPlugs(UErrorCode *status) {
static char plugin_file[2048] = "";
#endif
-U_INTERNAL const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uplug_getPluginFile() {
#if U_ENABLE_DYLOAD && !UCONFIG_NO_FILE_IO
return plugin_file;
@@ -782,8 +782,8 @@ uplug_init(UErrorCode *status) {
/* plugin_file is not used for processing - it is only used
so that uplug_getPluginFile() works (i.e. icuinfo)
*/
- uprv_strncpy(plugin_file, pluginFile.data(), sizeof(plugin_file));
-
+ pluginFile.extract(plugin_file, sizeof(plugin_file), *status);
+
#if UPLUG_TRACE
DBG((stderr, "pluginfile= %s len %d/%d\n", plugin_file, (int)strlen(plugin_file), (int)sizeof(plugin_file)));
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/icuplugimp.h b/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
index 3cad8f87f18..9df309204e7 100644
--- a/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
@@ -36,7 +36,7 @@
* @return the library pointer, or NULL
* @internal internal use only
*/
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uplug_openLibrary(const char *libName, UErrorCode *status);
/**
@@ -45,7 +45,7 @@ uplug_openLibrary(const char *libName, UErrorCode *status);
* @param status error code
* @internal internal use only
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_closeLibrary(void *lib, UErrorCode *status);
/**
@@ -55,7 +55,7 @@ uplug_closeLibrary(void *lib, UErrorCode *status);
* @return the library name, or NULL if not found.
* @internal internal use only
*/
-U_INTERNAL char * U_EXPORT2
+U_CAPI char * U_EXPORT2
uplug_findLibrary(void *lib, UErrorCode *status);
/** @} */
@@ -69,21 +69,21 @@ uplug_findLibrary(void *lib, UErrorCode *status);
* @param status error result
* @internal - Internal use only.
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_init(UErrorCode *status);
/**
* Get raw plug N
* @internal - Internal use only
*/
-U_INTERNAL UPlugData* U_EXPORT2
+U_CAPI UPlugData* U_EXPORT2
uplug_getPlugInternal(int32_t n);
/**
* Get the name of the plugin file.
* @internal - Internal use only.
*/
-U_INTERNAL const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uplug_getPluginFile(void);
/** @} */
diff --git a/Build/source/libs/icu/icu-src/source/common/localematcher.cpp b/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
index d975fe759b4..5795cbf87e6 100644
--- a/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
@@ -1,17 +1,15 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// localematcher.cpp
// created: 2019may08 Markus W. Scherer
-#ifndef __LOCMATCHER_H__
-#define __LOCMATCHER_H__
-
#include "unicode/utypes.h"
#include "unicode/localebuilder.h"
#include "unicode/localematcher.h"
#include "unicode/locid.h"
#include "unicode/stringpiece.h"
+#include "unicode/uloc.h"
#include "unicode/uobject.h"
#include "cstring.h"
#include "localeprioritylist.h"
@@ -20,9 +18,10 @@
#include "lsr.h"
#include "uassert.h"
#include "uhash.h"
+#include "ustr_imp.h"
#include "uvector.h"
-#define UND_LSR LSR("und", "", "")
+#define UND_LSR LSR("und", "", "", LSR::EXPLICIT_LSR)
/**
* Indicator for the lifetime of desired-locale objects passed into the LocaleMatcher.
@@ -129,7 +128,9 @@ LocaleMatcher::Builder::Builder(LocaleMatcher::Builder &&src) U_NOEXCEPT :
thresholdDistance_(src.thresholdDistance_),
demotion_(src.demotion_),
defaultLocale_(src.defaultLocale_),
- favor_(src.favor_) {
+ withDefault_(src.withDefault_),
+ favor_(src.favor_),
+ direction_(src.direction_) {
src.supportedLocales_ = nullptr;
src.defaultLocale_ = nullptr;
}
@@ -137,6 +138,8 @@ LocaleMatcher::Builder::Builder(LocaleMatcher::Builder &&src) U_NOEXCEPT :
LocaleMatcher::Builder::~Builder() {
delete supportedLocales_;
delete defaultLocale_;
+ delete maxDistanceDesired_;
+ delete maxDistanceSupported_;
}
LocaleMatcher::Builder &LocaleMatcher::Builder::operator=(LocaleMatcher::Builder &&src) U_NOEXCEPT {
@@ -147,7 +150,9 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::operator=(LocaleMatcher::Builder
thresholdDistance_ = src.thresholdDistance_;
demotion_ = src.demotion_;
defaultLocale_ = src.defaultLocale_;
+ withDefault_ = src.withDefault_,
favor_ = src.favor_;
+ direction_ = src.direction_;
src.supportedLocales_ = nullptr;
src.defaultLocale_ = nullptr;
@@ -225,6 +230,14 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::addSupportedLocale(const Locale
return *this;
}
+LocaleMatcher::Builder &LocaleMatcher::Builder::setNoDefaultLocale() {
+ if (U_FAILURE(errorCode_)) { return *this; }
+ delete defaultLocale_;
+ defaultLocale_ = nullptr;
+ withDefault_ = false;
+ return *this;
+}
+
LocaleMatcher::Builder &LocaleMatcher::Builder::setDefaultLocale(const Locale *defaultLocale) {
if (U_FAILURE(errorCode_)) { return *this; }
Locale *clone = nullptr;
@@ -237,6 +250,7 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setDefaultLocale(const Locale *d
}
delete defaultLocale_;
defaultLocale_ = clone;
+ withDefault_ = true;
return *this;
}
@@ -252,6 +266,24 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULoc
return *this;
}
+LocaleMatcher::Builder &LocaleMatcher::Builder::setMaxDistance(const Locale &desired,
+ const Locale &supported) {
+ if (U_FAILURE(errorCode_)) { return *this; }
+ Locale *desiredClone = desired.clone();
+ Locale *supportedClone = supported.clone();
+ if (desiredClone == nullptr || supportedClone == nullptr) {
+ delete desiredClone; // in case only one could not be allocated
+ delete supportedClone;
+ errorCode_ = U_MEMORY_ALLOCATION_ERROR;
+ return *this;
+ }
+ delete maxDistanceDesired_;
+ delete maxDistanceSupported_;
+ maxDistanceDesired_ = desiredClone;
+ maxDistanceSupported_ = supportedClone;
+ return *this;
+}
+
#if 0
/**
* <i>Internal only!</i>
@@ -308,38 +340,50 @@ UBool compareLSRs(const UHashTok t1, const UHashTok t2) {
return *lsr1 == *lsr2;
}
-bool putIfAbsent(UHashtable *lsrToIndex, const LSR &lsr, int32_t i, UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) { return false; }
- U_ASSERT(i > 0);
- int32_t index = uhash_geti(lsrToIndex, &lsr);
- if (index != 0) {
- return false;
- } else {
- uhash_puti(lsrToIndex, const_cast<LSR *>(&lsr), i, &errorCode);
- return U_SUCCESS(errorCode);
+} // namespace
+
+int32_t LocaleMatcher::putIfAbsent(const LSR &lsr, int32_t i, int32_t suppLength,
+ UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return suppLength; }
+ int32_t index = uhash_geti(supportedLsrToIndex, &lsr);
+ if (index == 0) {
+ uhash_puti(supportedLsrToIndex, const_cast<LSR *>(&lsr), i + 1, &errorCode);
+ if (U_SUCCESS(errorCode)) {
+ supportedLSRs[suppLength] = &lsr;
+ supportedIndexes[suppLength++] = i;
+ }
}
+ return suppLength;
}
-} // namespace
-
LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
likelySubtags(*XLikelySubtags::getSingleton(errorCode)),
localeDistance(*LocaleDistance::getSingleton(errorCode)),
thresholdDistance(builder.thresholdDistance_),
demotionPerDesiredLocale(0),
favorSubtag(builder.favor_),
+ direction(builder.direction_),
supportedLocales(nullptr), lsrs(nullptr), supportedLocalesLength(0),
supportedLsrToIndex(nullptr),
supportedLSRs(nullptr), supportedIndexes(nullptr), supportedLSRsLength(0),
- ownedDefaultLocale(nullptr), defaultLocale(nullptr), defaultLocaleIndex(-1) {
+ ownedDefaultLocale(nullptr), defaultLocale(nullptr) {
if (U_FAILURE(errorCode)) { return; }
- if (thresholdDistance < 0) {
- thresholdDistance = localeDistance.getDefaultScriptDistance();
+ const Locale *def = builder.defaultLocale_;
+ LSR builderDefaultLSR;
+ const LSR *defLSR = nullptr;
+ if (def != nullptr) {
+ ownedDefaultLocale = def->clone();
+ if (ownedDefaultLocale == nullptr) {
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ def = ownedDefaultLocale;
+ builderDefaultLSR = getMaximalLsrOrUnd(likelySubtags, *def, errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ defLSR = &builderDefaultLSR;
}
supportedLocalesLength = builder.supportedLocales_ != nullptr ?
builder.supportedLocales_->size() : 0;
- const Locale *def = builder.defaultLocale_;
- int32_t idef = -1;
if (supportedLocalesLength > 0) {
// Store the supported locales in input order,
// so that when different types are used (e.g., language tag strings)
@@ -356,15 +400,6 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
}
// If the constructor fails partway, we need null pointers for destructibility.
uprv_memset(supportedLocales, 0, supportedLocalesLength * sizeof(const Locale *));
- // Also find the first supported locale whose LSR is
- // the same as that for the default locale.
- LSR builderDefaultLSR;
- const LSR *defLSR = nullptr;
- if (def != nullptr) {
- builderDefaultLSR = getMaximalLsrOrUnd(likelySubtags, *def, errorCode);
- if (U_FAILURE(errorCode)) { return; }
- defLSR = &builderDefaultLSR;
- }
for (int32_t i = 0; i < supportedLocalesLength; ++i) {
const Locale &locale = *static_cast<Locale *>(builder.supportedLocales_->elementAt(i));
supportedLocales[i] = locale.clone();
@@ -376,107 +411,95 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
LSR &lsr = lsrs[i] = getMaximalLsrOrUnd(likelySubtags, supportedLocale, errorCode);
lsr.setHashCode();
if (U_FAILURE(errorCode)) { return; }
- if (idef < 0 && defLSR != nullptr && lsr == *defLSR) {
- idef = i;
- defLSR = &lsr; // owned pointer to put into supportedLsrToIndex
- if (*def == supportedLocale) {
- def = &supportedLocale; // owned pointer to keep
- }
- }
}
// We need an unordered map from LSR to first supported locale with that LSR,
- // and an ordered list of (LSR, supported index).
- // We insert the supported locales in the following order:
+ // and an ordered list of (LSR, supported index) for
+ // the supported locales in the following order:
// 1. Default locale, if it is supported.
// 2. Priority locales (aka "paradigm locales") in builder order.
// 3. Remaining locales in builder order.
- // In Java, we use a LinkedHashMap for both map & ordered lists.
- // In C++, we use separate structures.
- // We over-allocate arrays of LSRs and indexes for simplicity.
- // We reserve slots at the array starts for the default and paradigm locales,
- // plus enough for all supported locales.
- // If there are few paradigm locales and few duplicate supported LSRs,
- // then the amount of wasted space is small.
supportedLsrToIndex = uhash_openSize(hashLSR, compareLSRs, uhash_compareLong,
supportedLocalesLength, &errorCode);
if (U_FAILURE(errorCode)) { return; }
- int32_t paradigmLimit = 1 + localeDistance.getParadigmLSRsLength();
- int32_t suppLSRsCapacity = paradigmLimit + supportedLocalesLength;
supportedLSRs = static_cast<const LSR **>(
- uprv_malloc(suppLSRsCapacity * sizeof(const LSR *)));
+ uprv_malloc(supportedLocalesLength * sizeof(const LSR *)));
supportedIndexes = static_cast<int32_t *>(
- uprv_malloc(suppLSRsCapacity * sizeof(int32_t)));
+ uprv_malloc(supportedLocalesLength * sizeof(int32_t)));
if (supportedLSRs == nullptr || supportedIndexes == nullptr) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return;
}
- int32_t paradigmIndex = 0;
- int32_t otherIndex = paradigmLimit;
- if (idef >= 0) {
- uhash_puti(supportedLsrToIndex, const_cast<LSR *>(defLSR), idef + 1, &errorCode);
- supportedLSRs[0] = defLSR;
- supportedIndexes[0] = idef;
- paradigmIndex = 1;
- }
+ int32_t suppLength = 0;
+ // Determine insertion order.
+ // Add locales immediately that are equivalent to the default.
+ MaybeStackArray<int8_t, 100> order(supportedLocalesLength, errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ int32_t numParadigms = 0;
for (int32_t i = 0; i < supportedLocalesLength; ++i) {
- if (i == idef) { continue; }
const Locale &locale = *supportedLocales[i];
const LSR &lsr = lsrs[i];
- if (defLSR == nullptr) {
+ if (defLSR == nullptr && builder.withDefault_) {
+ // Implicit default locale = first supported locale, if not turned off.
U_ASSERT(i == 0);
def = &locale;
defLSR = &lsr;
- idef = 0;
- uhash_puti(supportedLsrToIndex, const_cast<LSR *>(&lsr), 0 + 1, &errorCode);
- supportedLSRs[0] = &lsr;
- supportedIndexes[0] = 0;
- paradigmIndex = 1;
- } else if (idef >= 0 && lsr == *defLSR) {
- // lsr == *defLSR means that this supported locale is
- // a duplicate of the default locale.
- // Either an explicit default locale is supported, and we added it before the loop,
- // or there is no explicit default locale, and this is
- // a duplicate of the first supported locale.
- // In both cases, idef >= 0 now, so otherwise we can skip the comparison.
- // For a duplicate, putIfAbsent() is a no-op, so nothing to do.
+ order[i] = 1;
+ suppLength = putIfAbsent(lsr, 0, suppLength, errorCode);
+ } else if (defLSR != nullptr && lsr.isEquivalentTo(*defLSR)) {
+ order[i] = 1;
+ suppLength = putIfAbsent(lsr, i, suppLength, errorCode);
+ } else if (localeDistance.isParadigmLSR(lsr)) {
+ order[i] = 2;
+ ++numParadigms;
} else {
- if (putIfAbsent(supportedLsrToIndex, lsr, i + 1, errorCode)) {
- if (localeDistance.isParadigmLSR(lsr)) {
- supportedLSRs[paradigmIndex] = &lsr;
- supportedIndexes[paradigmIndex++] = i;
- } else {
- supportedLSRs[otherIndex] = &lsr;
- supportedIndexes[otherIndex++] = i;
- }
- }
+ order[i] = 3;
}
if (U_FAILURE(errorCode)) { return; }
}
- // Squeeze out unused array slots.
- if (paradigmIndex < paradigmLimit && paradigmLimit < otherIndex) {
- uprv_memmove(supportedLSRs + paradigmIndex, supportedLSRs + paradigmLimit,
- (otherIndex - paradigmLimit) * sizeof(const LSR *));
- uprv_memmove(supportedIndexes + paradigmIndex, supportedIndexes + paradigmLimit,
- (otherIndex - paradigmLimit) * sizeof(int32_t));
+ // Add supported paradigm locales.
+ int32_t paradigmLimit = suppLength + numParadigms;
+ for (int32_t i = 0; i < supportedLocalesLength && suppLength < paradigmLimit; ++i) {
+ if (order[i] == 2) {
+ suppLength = putIfAbsent(lsrs[i], i, suppLength, errorCode);
+ }
}
- supportedLSRsLength = otherIndex - (paradigmLimit - paradigmIndex);
- }
-
- if (def != nullptr && (idef < 0 || def != supportedLocales[idef])) {
- ownedDefaultLocale = def->clone();
- if (ownedDefaultLocale == nullptr) {
- errorCode = U_MEMORY_ALLOCATION_ERROR;
- return;
+ // Add remaining supported locales.
+ for (int32_t i = 0; i < supportedLocalesLength; ++i) {
+ if (order[i] == 3) {
+ suppLength = putIfAbsent(lsrs[i], i, suppLength, errorCode);
+ }
}
- def = ownedDefaultLocale;
+ supportedLSRsLength = suppLength;
+ // If supportedLSRsLength < supportedLocalesLength then
+ // we waste as many array slots as there are duplicate supported LSRs,
+ // but the amount of wasted space is small as long as there are few duplicates.
}
+
defaultLocale = def;
- defaultLocaleIndex = idef;
if (builder.demotion_ == ULOCMATCH_DEMOTION_REGION) {
demotionPerDesiredLocale = localeDistance.getDefaultDemotionPerDesiredLocale();
}
+
+ if (thresholdDistance >= 0) {
+ // already copied
+ } else if (builder.maxDistanceDesired_ != nullptr) {
+ LSR suppLSR = getMaximalLsrOrUnd(likelySubtags, *builder.maxDistanceSupported_, errorCode);
+ const LSR *pSuppLSR = &suppLSR;
+ int32_t indexAndDistance = localeDistance.getBestIndexAndDistance(
+ getMaximalLsrOrUnd(likelySubtags, *builder.maxDistanceDesired_, errorCode),
+ &pSuppLSR, 1,
+ LocaleDistance::shiftDistance(100), favorSubtag, direction);
+ if (U_SUCCESS(errorCode)) {
+ // +1 for an exclusive threshold from an inclusive max.
+ thresholdDistance = LocaleDistance::getDistanceFloor(indexAndDistance) + 1;
+ } else {
+ thresholdDistance = 0;
+ }
+ } else {
+ thresholdDistance = localeDistance.getDefaultScriptDistance();
+ }
}
LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT :
@@ -485,14 +508,14 @@ LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT :
thresholdDistance(src.thresholdDistance),
demotionPerDesiredLocale(src.demotionPerDesiredLocale),
favorSubtag(src.favorSubtag),
+ direction(src.direction),
supportedLocales(src.supportedLocales), lsrs(src.lsrs),
supportedLocalesLength(src.supportedLocalesLength),
supportedLsrToIndex(src.supportedLsrToIndex),
supportedLSRs(src.supportedLSRs),
supportedIndexes(src.supportedIndexes),
supportedLSRsLength(src.supportedLSRsLength),
- ownedDefaultLocale(src.ownedDefaultLocale), defaultLocale(src.defaultLocale),
- defaultLocaleIndex(src.defaultLocaleIndex) {
+ ownedDefaultLocale(src.ownedDefaultLocale), defaultLocale(src.defaultLocale) {
src.supportedLocales = nullptr;
src.lsrs = nullptr;
src.supportedLocalesLength = 0;
@@ -502,7 +525,6 @@ LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT :
src.supportedLSRsLength = 0;
src.ownedDefaultLocale = nullptr;
src.defaultLocale = nullptr;
- src.defaultLocaleIndex = -1;
}
LocaleMatcher::~LocaleMatcher() {
@@ -523,6 +545,7 @@ LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) U_NOEXCEPT {
thresholdDistance = src.thresholdDistance;
demotionPerDesiredLocale = src.demotionPerDesiredLocale;
favorSubtag = src.favorSubtag;
+ direction = src.direction;
supportedLocales = src.supportedLocales;
lsrs = src.lsrs;
supportedLocalesLength = src.supportedLocalesLength;
@@ -532,7 +555,6 @@ LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) U_NOEXCEPT {
supportedLSRsLength = src.supportedLSRsLength;
ownedDefaultLocale = src.ownedDefaultLocale;
defaultLocale = src.defaultLocale;
- defaultLocaleIndex = src.defaultLocaleIndex;
src.supportedLocales = nullptr;
src.lsrs = nullptr;
@@ -543,7 +565,6 @@ LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) U_NOEXCEPT {
src.supportedLSRsLength = 0;
src.ownedDefaultLocale = nullptr;
src.defaultLocale = nullptr;
- src.defaultLocaleIndex = -1;
return *this;
}
@@ -630,13 +651,13 @@ const Locale *LocaleMatcher::getBestMatchForListString(
LocaleMatcher::Result LocaleMatcher::getBestMatchResult(
const Locale &desiredLocale, UErrorCode &errorCode) const {
if (U_FAILURE(errorCode)) {
- return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
+ return Result(nullptr, defaultLocale, -1, -1, FALSE);
}
int32_t suppIndex = getBestSuppIndex(
getMaximalLsrOrUnd(likelySubtags, desiredLocale, errorCode),
nullptr, errorCode);
if (U_FAILURE(errorCode) || suppIndex < 0) {
- return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
+ return Result(nullptr, defaultLocale, -1, -1, FALSE);
} else {
return Result(&desiredLocale, supportedLocales[suppIndex], 0, suppIndex, FALSE);
}
@@ -645,12 +666,12 @@ LocaleMatcher::Result LocaleMatcher::getBestMatchResult(
LocaleMatcher::Result LocaleMatcher::getBestMatchResult(
Locale::Iterator &desiredLocales, UErrorCode &errorCode) const {
if (U_FAILURE(errorCode) || !desiredLocales.hasNext()) {
- return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
+ return Result(nullptr, defaultLocale, -1, -1, FALSE);
}
LocaleLsrIterator lsrIter(likelySubtags, desiredLocales, ULOCMATCH_TEMPORARY_LOCALES);
int32_t suppIndex = getBestSuppIndex(lsrIter.next(errorCode), &lsrIter, errorCode);
if (U_FAILURE(errorCode) || suppIndex < 0) {
- return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
+ return Result(nullptr, defaultLocale, -1, -1, FALSE);
} else {
return Result(lsrIter.orphanRemembered(), supportedLocales[suppIndex],
lsrIter.getBestDesiredIndex(), suppIndex, TRUE);
@@ -662,7 +683,7 @@ int32_t LocaleMatcher::getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remai
if (U_FAILURE(errorCode)) { return -1; }
int32_t desiredIndex = 0;
int32_t bestSupportedLsrIndex = -1;
- for (int32_t bestDistance = thresholdDistance;;) {
+ for (int32_t bestShiftedDistance = LocaleDistance::shiftDistance(thresholdDistance);;) {
// Quick check for exact maximized LSR.
// Returns suppIndex+1 where 0 means not found.
if (supportedLsrToIndex != nullptr) {
@@ -677,16 +698,17 @@ int32_t LocaleMatcher::getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remai
}
}
int32_t bestIndexAndDistance = localeDistance.getBestIndexAndDistance(
- desiredLSR, supportedLSRs, supportedLSRsLength, bestDistance, favorSubtag);
+ desiredLSR, supportedLSRs, supportedLSRsLength,
+ bestShiftedDistance, favorSubtag, direction);
if (bestIndexAndDistance >= 0) {
- bestDistance = bestIndexAndDistance & 0xff;
+ bestShiftedDistance = LocaleDistance::getShiftedDistance(bestIndexAndDistance);
if (remainingIter != nullptr) {
remainingIter->rememberCurrent(desiredIndex, errorCode);
if (U_FAILURE(errorCode)) { return -1; }
}
- bestSupportedLsrIndex = bestIndexAndDistance >= 0 ? bestIndexAndDistance >> 8 : -1;
+ bestSupportedLsrIndex = LocaleDistance::getIndex(bestIndexAndDistance);
}
- if ((bestDistance -= demotionPerDesiredLocale) <= 0) {
+ if ((bestShiftedDistance -= LocaleDistance::shiftDistance(demotionPerDesiredLocale)) <= 0) {
break;
}
if (remainingIter == nullptr || !remainingIter->hasNext()) {
@@ -703,18 +725,122 @@ int32_t LocaleMatcher::getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remai
return supportedIndexes[bestSupportedLsrIndex];
}
+UBool LocaleMatcher::isMatch(const Locale &desired, const Locale &supported,
+ UErrorCode &errorCode) const {
+ LSR suppLSR = getMaximalLsrOrUnd(likelySubtags, supported, errorCode);
+ if (U_FAILURE(errorCode)) { return 0; }
+ const LSR *pSuppLSR = &suppLSR;
+ int32_t indexAndDistance = localeDistance.getBestIndexAndDistance(
+ getMaximalLsrOrUnd(likelySubtags, desired, errorCode),
+ &pSuppLSR, 1,
+ LocaleDistance::shiftDistance(thresholdDistance), favorSubtag, direction);
+ return indexAndDistance >= 0;
+}
+
double LocaleMatcher::internalMatch(const Locale &desired, const Locale &supported, UErrorCode &errorCode) const {
// Returns the inverse of the distance: That is, 1-distance(desired, supported).
LSR suppLSR = getMaximalLsrOrUnd(likelySubtags, supported, errorCode);
if (U_FAILURE(errorCode)) { return 0; }
const LSR *pSuppLSR = &suppLSR;
- int32_t distance = localeDistance.getBestIndexAndDistance(
+ int32_t indexAndDistance = localeDistance.getBestIndexAndDistance(
getMaximalLsrOrUnd(likelySubtags, desired, errorCode),
&pSuppLSR, 1,
- thresholdDistance, favorSubtag) & 0xff;
- return (100 - distance) / 100.0;
+ LocaleDistance::shiftDistance(thresholdDistance), favorSubtag, direction);
+ double distance = LocaleDistance::getDistanceDouble(indexAndDistance);
+ return (100.0 - distance) / 100.0;
}
U_NAMESPACE_END
-#endif // __LOCMATCHER_H__
+// uloc_acceptLanguage() --------------------------------------------------- ***
+
+U_NAMESPACE_USE
+
+namespace {
+
+class LocaleFromTag {
+public:
+ LocaleFromTag() : locale(Locale::getRoot()) {}
+ const Locale &operator()(const char *tag) { return locale = Locale(tag); }
+
+private:
+ // Store the locale in the converter, rather than return a reference to a temporary,
+ // or a value which could go out of scope with the caller's reference to it.
+ Locale locale;
+};
+
+int32_t acceptLanguage(UEnumeration &supportedLocales, Locale::Iterator &desiredLocales,
+ char *dest, int32_t capacity, UAcceptResult *acceptResult,
+ UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return 0; }
+ LocaleMatcher::Builder builder;
+ const char *locString;
+ while ((locString = uenum_next(&supportedLocales, nullptr, &errorCode)) != nullptr) {
+ Locale loc(locString);
+ if (loc.isBogus()) {
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+ builder.addSupportedLocale(loc);
+ }
+ LocaleMatcher matcher = builder.build(errorCode);
+ LocaleMatcher::Result result = matcher.getBestMatchResult(desiredLocales, errorCode);
+ if (U_FAILURE(errorCode)) { return 0; }
+ if (result.getDesiredIndex() >= 0) {
+ if (acceptResult != nullptr) {
+ *acceptResult = *result.getDesiredLocale() == *result.getSupportedLocale() ?
+ ULOC_ACCEPT_VALID : ULOC_ACCEPT_FALLBACK;
+ }
+ const char *bestStr = result.getSupportedLocale()->getName();
+ int32_t bestLength = (int32_t)uprv_strlen(bestStr);
+ if (bestLength <= capacity) {
+ uprv_memcpy(dest, bestStr, bestLength);
+ }
+ return u_terminateChars(dest, capacity, bestLength, &errorCode);
+ } else {
+ if (acceptResult != nullptr) {
+ *acceptResult = ULOC_ACCEPT_FAILED;
+ }
+ return u_terminateChars(dest, capacity, 0, &errorCode);
+ }
+}
+
+} // namespace
+
+U_CAPI int32_t U_EXPORT2
+uloc_acceptLanguage(char *result, int32_t resultAvailable,
+ UAcceptResult *outResult,
+ const char **acceptList, int32_t acceptListCount,
+ UEnumeration *availableLocales,
+ UErrorCode *status) {
+ if (U_FAILURE(*status)) { return 0; }
+ if ((result == nullptr ? resultAvailable != 0 : resultAvailable < 0) ||
+ (acceptList == nullptr ? acceptListCount != 0 : acceptListCount < 0) ||
+ availableLocales == nullptr) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+ LocaleFromTag converter;
+ Locale::ConvertingIterator<const char **, LocaleFromTag> desiredLocales(
+ acceptList, acceptList + acceptListCount, converter);
+ return acceptLanguage(*availableLocales, desiredLocales,
+ result, resultAvailable, outResult, *status);
+}
+
+U_CAPI int32_t U_EXPORT2
+uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable,
+ UAcceptResult *outResult,
+ const char *httpAcceptLanguage,
+ UEnumeration *availableLocales,
+ UErrorCode *status) {
+ if (U_FAILURE(*status)) { return 0; }
+ if ((result == nullptr ? resultAvailable != 0 : resultAvailable < 0) ||
+ httpAcceptLanguage == nullptr || availableLocales == nullptr) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+ LocalePriorityList list(httpAcceptLanguage, *status);
+ LocalePriorityList::Iterator desiredLocales = list.iterator();
+ return acceptLanguage(*availableLocales, desiredLocales,
+ result, resultAvailable, outResult, *status);
+}
diff --git a/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp b/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp
index 06442fb46a8..8916b121be3 100644
--- a/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// localeprioritylist.cpp
// created: 2019jul11 Markus W. Scherer
@@ -133,7 +133,7 @@ LocalePriorityList::LocalePriorityList(StringPiece s, UErrorCode &errorCode) {
if (U_FAILURE(errorCode)) { return; }
Locale locale = Locale(tag.data());
if (locale.isBogus()) {
- errorCode = U_MEMORY_ALLOCATION_ERROR;
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
int32_t weight = WEIGHT_ONE;
diff --git a/Build/source/libs/icu/icu-src/source/common/localeprioritylist.h b/Build/source/libs/icu/icu-src/source/common/localeprioritylist.h
index 80ca38a7b52..41e9d3ea081 100644
--- a/Build/source/libs/icu/icu-src/source/common/localeprioritylist.h
+++ b/Build/source/libs/icu/icu-src/source/common/localeprioritylist.h
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// localeprioritylist.h
// created: 2019jul11 Markus W. Scherer
diff --git a/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp b/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
index d92348e31c8..47c0667417c 100644
--- a/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
@@ -26,6 +26,8 @@
#include "unicode/uloc.h"
#include "unicode/ures.h"
#include "unicode/ustring.h"
+#include "bytesinkutil.h"
+#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
#include "putilimp.h"
@@ -406,20 +408,26 @@ uloc_getDisplayScript(const char* locale,
UChar *dest, int32_t destCapacity,
UErrorCode *pErrorCode)
{
- UErrorCode err = U_ZERO_ERROR;
- int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
+ UErrorCode err = U_ZERO_ERROR;
+ int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
uloc_getScript, _kScriptsStandAlone, &err);
-
- if ( err == U_USING_DEFAULT_WARNING ) {
+
+ if (destCapacity == 0 && err == U_BUFFER_OVERFLOW_ERROR) {
+ // For preflight, return the max of the value and the fallback.
+ int32_t fallback_res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
+ uloc_getScript, _kScripts, pErrorCode);
+ return (fallback_res > res) ? fallback_res : res;
+ }
+ if ( err == U_USING_DEFAULT_WARNING ) {
return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- uloc_getScript, _kScripts, pErrorCode);
- } else {
- *pErrorCode = err;
- return res;
- }
+ uloc_getScript, _kScripts, pErrorCode);
+ } else {
+ *pErrorCode = err;
+ return res;
+ }
}
-U_INTERNAL int32_t U_EXPORT2
+static int32_t
uloc_getDisplayScriptInContext(const char* locale,
const char* displayLocale,
UChar *dest, int32_t destCapacity,
@@ -727,7 +735,7 @@ uloc_getDisplayName(const char *locale,
int32_t padLen;
patPos+=subLen;
padLen=(subi==0 ? sub1Pos : patLen)-patPos;
- if(length+padLen < destCapacity) {
+ if(length+padLen <= destCapacity) {
p=dest+length;
for(int32_t i=0;i<padLen;++i) {
*p++=pattern[patPos++];
@@ -805,10 +813,6 @@ uloc_getDisplayKeywordValue( const char* locale,
UErrorCode* status){
- char keywordValue[ULOC_FULLNAME_CAPACITY*4];
- int32_t capacity = ULOC_FULLNAME_CAPACITY*4;
- int32_t keywordValueLen =0;
-
/* argument checking */
if(status==NULL || U_FAILURE(*status)) {
return 0;
@@ -820,10 +824,11 @@ uloc_getDisplayKeywordValue( const char* locale,
}
/* get the keyword value */
- keywordValue[0]=0;
- keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status);
- if (*status == U_STRING_NOT_TERMINATED_WARNING)
- *status = U_BUFFER_OVERFLOW_ERROR;
+ CharString keywordValue;
+ {
+ CharStringByteSink sink(&keywordValue);
+ ulocimp_getKeywordValue(locale, keyword, sink, status);
+ }
/*
* if the keyword is equal to currency .. then to get the display name
@@ -839,7 +844,7 @@ uloc_getDisplayKeywordValue( const char* locale,
icu::LocalUResourceBundlePointer currencies(
ures_getByKey(bundle.getAlias(), _kCurrencies, NULL, status));
icu::LocalUResourceBundlePointer currency(
- ures_getByKeyWithFallback(currencies.getAlias(), keywordValue, NULL, status));
+ ures_getByKeyWithFallback(currencies.getAlias(), keywordValue.data(), NULL, status));
dispName = ures_getStringByIndex(currency.getAlias(), UCURRENCY_DISPLAY_NAME_INDEX, &dispNameLen, status);
@@ -863,12 +868,12 @@ uloc_getDisplayKeywordValue( const char* locale,
}
}else{
/* we have not found the display name for the value .. just copy over */
- if(keywordValueLen <= destCapacity){
- u_charsToUChars(keywordValue, dest, keywordValueLen);
- return u_terminateUChars(dest, destCapacity, keywordValueLen, status);
+ if(keywordValue.length() <= destCapacity){
+ u_charsToUChars(keywordValue.data(), dest, keywordValue.length());
+ return u_terminateUChars(dest, destCapacity, keywordValue.length(), status);
}else{
*status = U_BUFFER_OVERFLOW_ERROR;
- return keywordValueLen;
+ return keywordValue.length();
}
}
@@ -877,8 +882,8 @@ uloc_getDisplayKeywordValue( const char* locale,
return _getStringOrCopyKey(U_ICUDATA_LANG, displayLocale,
_kTypes, keyword,
- keywordValue,
- keywordValue,
+ keywordValue.data(),
+ keywordValue.data(),
dest, destCapacity,
status);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/locdistance.cpp b/Build/source/libs/icu/icu-src/source/common/locdistance.cpp
index 800d0eacf2b..ff8892791b2 100644
--- a/Build/source/libs/icu/icu-src/source/common/locdistance.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locdistance.cpp
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// locdistance.cpp
// created: 2019may08 Markus W. Scherer
@@ -69,7 +69,7 @@ void U_CALLCONV LocaleDistance::initLocaleDistance(UErrorCode &errorCode) {
errorCode = U_MISSING_RESOURCE_ERROR;
return;
}
- gLocaleDistance = new LocaleDistance(data);
+ gLocaleDistance = new LocaleDistance(data, likely);
if (gLocaleDistance == nullptr) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return;
@@ -83,7 +83,8 @@ const LocaleDistance *LocaleDistance::getSingleton(UErrorCode &errorCode) {
return gLocaleDistance;
}
-LocaleDistance::LocaleDistance(const LocaleDistanceData &data) :
+LocaleDistance::LocaleDistance(const LocaleDistanceData &data, const XLikelySubtags &likely) :
+ likelySubtags(likely),
trie(data.distanceTrieBytes),
regionToPartitionsIndex(data.regionToPartitions), partitionArrays(data.partitions),
paradigmLSRs(data.paradigms), paradigmLSRsLength(data.paradigmsLength),
@@ -97,17 +98,19 @@ LocaleDistance::LocaleDistance(const LocaleDistanceData &data) :
// a mere region difference for one desired locale
// is as good as a perfect match for the next following desired locale.
// As of CLDR 36, we have <languageMatch desired="en_*_*" supported="en_*_*" distance="5"/>.
- LSR en("en", "Latn", "US");
- LSR enGB("en", "Latn", "GB");
+ LSR en("en", "Latn", "US", LSR::EXPLICIT_LSR);
+ LSR enGB("en", "Latn", "GB", LSR::EXPLICIT_LSR);
const LSR *p_enGB = &enGB;
- defaultDemotionPerDesiredLocale = getBestIndexAndDistance(en, &p_enGB, 1,
- 50, ULOCMATCH_FAVOR_LANGUAGE) & 0xff;
+ int32_t indexAndDistance = getBestIndexAndDistance(en, &p_enGB, 1,
+ shiftDistance(50), ULOCMATCH_FAVOR_LANGUAGE, ULOCMATCH_DIRECTION_WITH_ONE_WAY);
+ defaultDemotionPerDesiredLocale = getDistanceFloor(indexAndDistance);
}
int32_t LocaleDistance::getBestIndexAndDistance(
const LSR &desired,
const LSR **supportedLSRs, int32_t supportedLSRsLength,
- int32_t threshold, ULocMatchFavorSubtag favorSubtag) const {
+ int32_t shiftedThreshold,
+ ULocMatchFavorSubtag favorSubtag, ULocMatchDirection direction) const {
BytesTrie iter(trie);
// Look up the desired language only once for all supported LSRs.
// Its "distance" is either a match point value of 0, or a non-match negative value.
@@ -116,6 +119,8 @@ int32_t LocaleDistance::getBestIndexAndDistance(
uint64_t desLangState = desLangDistance >= 0 && supportedLSRsLength > 1 ? iter.getState64() : 0;
// Index of the supported LSR with the lowest distance.
int32_t bestIndex = -1;
+ // Cached lookup info from XLikelySubtags.compareLikely().
+ int32_t bestLikelyInfo = -1;
for (int32_t slIndex = 0; slIndex < supportedLSRsLength; ++slIndex) {
const LSR &supported = *supportedLSRs[slIndex];
bool star = false;
@@ -145,6 +150,11 @@ int32_t LocaleDistance::getBestIndexAndDistance(
star = true;
}
U_ASSERT(0 <= distance && distance <= 100);
+ // Round up the shifted threshold (if fraction bits are not 0)
+ // for comparison with un-shifted distances until we need fraction bits.
+ // (If we simply shifted non-zero fraction bits away, then we might ignore a language
+ // when it's really still a micro distance below the threshold.)
+ int32_t roundedThreshold = (shiftedThreshold + DISTANCE_FRACTION_MASK) >> DISTANCE_SHIFT;
// We implement "favor subtag" by reducing the language subtag distance
// (unscientifically reducing it to a quarter of the normal value),
// so that the script distance is relatively more important.
@@ -153,7 +163,9 @@ int32_t LocaleDistance::getBestIndexAndDistance(
if (favorSubtag == ULOCMATCH_FAVOR_SCRIPT) {
distance >>= 2;
}
- if (distance >= threshold) {
+ // Let distance == roundedThreshold pass until the tie-breaker logic
+ // at the end of the loop.
+ if (distance > roundedThreshold) {
continue;
}
@@ -171,7 +183,7 @@ int32_t LocaleDistance::getBestIndexAndDistance(
scriptDistance &= ~DISTANCE_IS_FINAL;
}
distance += scriptDistance;
- if (distance >= threshold) {
+ if (distance > roundedThreshold) {
continue;
}
@@ -180,8 +192,8 @@ int32_t LocaleDistance::getBestIndexAndDistance(
} else if (star || (flags & DISTANCE_IS_FINAL) != 0) {
distance += defaultRegionDistance;
} else {
- int32_t remainingThreshold = threshold - distance;
- if (minRegionDistance >= remainingThreshold) {
+ int32_t remainingThreshold = roundedThreshold - distance;
+ if (minRegionDistance > remainingThreshold) {
continue;
}
@@ -196,15 +208,51 @@ int32_t LocaleDistance::getBestIndexAndDistance(
partitionsForRegion(supported),
remainingThreshold);
}
- if (distance < threshold) {
- if (distance == 0) {
- return slIndex << 8;
+ int32_t shiftedDistance = shiftDistance(distance);
+ if (shiftedDistance == 0) {
+ // Distinguish between equivalent but originally unequal locales via an
+ // additional micro distance.
+ shiftedDistance |= (desired.flags ^ supported.flags);
+ if (shiftedDistance < shiftedThreshold) {
+ if (direction != ULOCMATCH_DIRECTION_ONLY_TWO_WAY ||
+ // Is there also a match when we swap desired/supported?
+ isMatch(supported, desired, shiftedThreshold, favorSubtag)) {
+ if (shiftedDistance == 0) {
+ return slIndex << INDEX_SHIFT;
+ }
+ bestIndex = slIndex;
+ shiftedThreshold = shiftedDistance;
+ bestLikelyInfo = -1;
+ }
+ }
+ } else {
+ if (shiftedDistance < shiftedThreshold) {
+ if (direction != ULOCMATCH_DIRECTION_ONLY_TWO_WAY ||
+ // Is there also a match when we swap desired/supported?
+ isMatch(supported, desired, shiftedThreshold, favorSubtag)) {
+ bestIndex = slIndex;
+ shiftedThreshold = shiftedDistance;
+ bestLikelyInfo = -1;
+ }
+ } else if (shiftedDistance == shiftedThreshold && bestIndex >= 0) {
+ if (direction != ULOCMATCH_DIRECTION_ONLY_TWO_WAY ||
+ // Is there also a match when we swap desired/supported?
+ isMatch(supported, desired, shiftedThreshold, favorSubtag)) {
+ bestLikelyInfo = likelySubtags.compareLikely(
+ supported, *supportedLSRs[bestIndex], bestLikelyInfo);
+ if ((bestLikelyInfo & 1) != 0) {
+ // This supported locale matches as well as the previous best match,
+ // and neither matches perfectly,
+ // but this one is "more likely" (has more-default subtags).
+ bestIndex = slIndex;
+ }
+ }
}
- bestIndex = slIndex;
- threshold = distance;
}
}
- return bestIndex >= 0 ? (bestIndex << 8) | threshold : 0xffffff00 | ABOVE_THRESHOLD;
+ return bestIndex >= 0 ?
+ (bestIndex << INDEX_SHIFT) | shiftedThreshold :
+ INDEX_NEG_1 | shiftDistance(ABOVE_THRESHOLD);
}
int32_t LocaleDistance::getDesSuppScriptDistance(
@@ -273,7 +321,7 @@ int32_t LocaleDistance::getRegionPartitionsDistance(
d = getFallbackRegionDistance(iter, startState);
star = true;
}
- if (d >= threshold) {
+ if (d > threshold) {
return d;
} else if (regionDistance < d) {
regionDistance = d;
@@ -286,7 +334,7 @@ int32_t LocaleDistance::getRegionPartitionsDistance(
}
} else if (!star) {
int32_t d = getFallbackRegionDistance(iter, startState);
- if (d >= threshold) {
+ if (d > threshold) {
return d;
} else if (regionDistance < d) {
regionDistance = d;
@@ -352,11 +400,14 @@ int32_t LocaleDistance::trieNext(BytesTrie &iter, const char *s, bool wantValue)
}
UBool LocaleDistance::isParadigmLSR(const LSR &lsr) const {
- // Linear search for a very short list (length 6 as of 2019).
- // If there are many paradigm LSRs we should use a hash set.
+ // Linear search for a very short list (length 6 as of 2019),
+ // because we look for equivalence not equality, and
+ // because it's easy.
+ // If there are many paradigm LSRs we should use a hash set
+ // with custom comparator and hasher.
U_ASSERT(paradigmLSRsLength <= 15);
for (int32_t i = 0; i < paradigmLSRsLength; ++i) {
- if (lsr == paradigmLSRs[i]) { return true; }
+ if (lsr.isEquivalentTo(paradigmLSRs[i])) { return true; }
}
return false;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/locdistance.h b/Build/source/libs/icu/icu-src/source/common/locdistance.h
index 7439f51c56b..51b777e6272 100644
--- a/Build/source/libs/icu/icu-src/source/common/locdistance.h
+++ b/Build/source/libs/icu/icu-src/source/common/locdistance.h
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// locdistance.h
// created: 2019may08 Markus W. Scherer
@@ -26,19 +26,41 @@ class LocaleDistance final : public UMemory {
public:
static const LocaleDistance *getSingleton(UErrorCode &errorCode);
+ static int32_t shiftDistance(int32_t distance) {
+ return distance << DISTANCE_SHIFT;
+ }
+
+ static int32_t getShiftedDistance(int32_t indexAndDistance) {
+ return indexAndDistance & DISTANCE_MASK;
+ }
+
+ static double getDistanceDouble(int32_t indexAndDistance) {
+ double shiftedDistance = getShiftedDistance(indexAndDistance);
+ return shiftedDistance / (1 << DISTANCE_SHIFT);
+ }
+
+ static int32_t getDistanceFloor(int32_t indexAndDistance) {
+ return (indexAndDistance & DISTANCE_MASK) >> DISTANCE_SHIFT;
+ }
+
+ static int32_t getIndex(int32_t indexAndDistance) {
+ // assert indexAndDistance >= 0;
+ return indexAndDistance >> INDEX_SHIFT;
+ }
+
/**
* Finds the supported LSR with the smallest distance from the desired one.
* Equivalent LSR subtags must be normalized into a canonical form.
*
- * <p>Returns the index of the lowest-distance supported LSR in bits 31..8
+ * <p>Returns the index of the lowest-distance supported LSR in the high bits
* (negative if none has a distance below the threshold),
- * and its distance (0..ABOVE_THRESHOLD) in bits 7..0.
+ * and its distance (0..ABOVE_THRESHOLD) in the low bits.
*/
int32_t getBestIndexAndDistance(const LSR &desired,
const LSR **supportedLSRs, int32_t supportedLSRsLength,
- int32_t threshold, ULocMatchFavorSubtag favorSubtag) const;
-
- int32_t getParadigmLSRsLength() const { return paradigmLSRsLength; }
+ int32_t shiftedThreshold,
+ ULocMatchFavorSubtag favorSubtag,
+ ULocMatchDirection direction) const;
UBool isParadigmLSR(const LSR &lsr) const;
@@ -51,12 +73,30 @@ public:
}
private:
- LocaleDistance(const LocaleDistanceData &data);
+ // The distance is shifted left to gain some fraction bits.
+ static constexpr int32_t DISTANCE_SHIFT = 3;
+ static constexpr int32_t DISTANCE_FRACTION_MASK = 7;
+ // 7 bits for 0..100
+ static constexpr int32_t DISTANCE_INT_SHIFT = 7;
+ static constexpr int32_t INDEX_SHIFT = DISTANCE_INT_SHIFT + DISTANCE_SHIFT;
+ static constexpr int32_t DISTANCE_MASK = 0x3ff;
+ // tic constexpr int32_t MAX_INDEX = 0x1fffff; // avoids sign bit
+ static constexpr int32_t INDEX_NEG_1 = 0xfffffc00;
+
+ LocaleDistance(const LocaleDistanceData &data, const XLikelySubtags &likely);
LocaleDistance(const LocaleDistance &other) = delete;
LocaleDistance &operator=(const LocaleDistance &other) = delete;
static void initLocaleDistance(UErrorCode &errorCode);
+ UBool isMatch(const LSR &desired, const LSR &supported,
+ int32_t shiftedThreshold, ULocMatchFavorSubtag favorSubtag) const {
+ const LSR *pSupp = &supported;
+ return getBestIndexAndDistance(
+ desired, &pSupp, 1,
+ shiftedThreshold, favorSubtag, ULOCMATCH_DIRECTION_WITH_ONE_WAY) >= 0;
+ }
+
static int32_t getDesSuppScriptDistance(BytesTrie &iter, uint64_t startState,
const char *desired, const char *supported);
@@ -79,6 +119,8 @@ private:
return defaultRegionDistance;
}
+ const XLikelySubtags &likelySubtags;
+
// The trie maps each dlang+slang+dscript+sscript+dregion+sregion
// (encoded in ASCII with bit 7 set on the last character of each subtag) to a distance.
// There is also a trie value for each subsequence of whole subtags.
diff --git a/Build/source/libs/icu/icu-src/source/common/locid.cpp b/Build/source/libs/icu/icu-src/source/common/locid.cpp
index c6d3f88fc3b..874e4a70556 100644
--- a/Build/source/libs/icu/icu-src/source/common/locid.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locid.cpp
@@ -35,12 +35,15 @@
#include "unicode/bytestream.h"
#include "unicode/locid.h"
+#include "unicode/localebuilder.h"
#include "unicode/strenum.h"
#include "unicode/stringpiece.h"
#include "unicode/uloc.h"
+#include "unicode/ures.h"
#include "bytesinkutil.h"
#include "charstr.h"
+#include "charstrmap.h"
#include "cmemory.h"
#include "cstring.h"
#include "mutex.h"
@@ -50,7 +53,9 @@
#include "uhash.h"
#include "ulocimp.h"
#include "umutex.h"
+#include "uniquecharstr.h"
#include "ustr_imp.h"
+#include "uvector.h"
U_CDECL_BEGIN
static UBool U_CALLCONV locale_cleanup(void);
@@ -101,13 +106,6 @@ typedef enum ELocalePos {
eMAX_LOCALES
} ELocalePos;
-U_CFUNC int32_t locale_getKeywords(const char *localeID,
- char prev,
- char *keywords, int32_t keywordCapacity,
- char *values, int32_t valuesCapacity, int32_t *valLen,
- UBool valuesToo,
- UErrorCode *status);
-
U_CDECL_BEGIN
//
// Deleter function for Locales owned by the default Locale hash table/
@@ -184,17 +182,16 @@ Locale *locale_set_default_internal(const char *id, UErrorCode& status) {
canonicalize = TRUE; // always canonicalize host ID
}
- char localeNameBuf[512];
-
- if (canonicalize) {
- uloc_canonicalize(id, localeNameBuf, sizeof(localeNameBuf)-1, &status);
- } else {
- uloc_getName(id, localeNameBuf, sizeof(localeNameBuf)-1, &status);
+ CharString localeNameBuf;
+ {
+ CharStringByteSink sink(&localeNameBuf);
+ if (canonicalize) {
+ ulocimp_canonicalize(id, sink, &status);
+ } else {
+ ulocimp_getName(id, sink, &status);
+ }
}
- localeNameBuf[sizeof(localeNameBuf)-1] = 0; // Force null termination in event of
- // a long name filling the buffer.
- // (long names are truncated.)
- //
+
if (U_FAILURE(status)) {
return gDefaultLocale;
}
@@ -208,14 +205,14 @@ Locale *locale_set_default_internal(const char *id, UErrorCode& status) {
ucln_common_registerCleanup(UCLN_COMMON_LOCALE, locale_cleanup);
}
- Locale *newDefault = (Locale *)uhash_get(gDefaultLocalesHashT, localeNameBuf);
+ Locale *newDefault = (Locale *)uhash_get(gDefaultLocalesHashT, localeNameBuf.data());
if (newDefault == NULL) {
newDefault = new Locale(Locale::eBOGUS);
if (newDefault == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
return gDefaultLocale;
}
- newDefault->init(localeNameBuf, FALSE);
+ newDefault->init(localeNameBuf.data(), FALSE);
uhash_put(gDefaultLocalesHashT, (char*) newDefault->getName(), newDefault, &status);
if (U_FAILURE(status)) {
return gDefaultLocale;
@@ -253,6 +250,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Locale)
// '_'
// In the platform codepage.
#define SEP_CHAR '_'
+#define NULL_CHAR '\0'
Locale::~Locale()
{
@@ -507,7 +505,1131 @@ Locale::operator==( const Locale& other) const
return (uprv_strcmp(other.fullName, fullName) == 0);
}
-#define ISASCIIALPHA(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z'))
+namespace {
+
+UInitOnce gKnownCanonicalizedInitOnce = U_INITONCE_INITIALIZER;
+UHashtable *gKnownCanonicalized = nullptr;
+
+static const char* const KNOWN_CANONICALIZED[] = {
+ "c",
+ // Commonly used locales known are already canonicalized
+ "af", "af_ZA", "am", "am_ET", "ar", "ar_001", "as", "as_IN", "az", "az_AZ",
+ "be", "be_BY", "bg", "bg_BG", "bn", "bn_IN", "bs", "bs_BA", "ca", "ca_ES",
+ "cs", "cs_CZ", "cy", "cy_GB", "da", "da_DK", "de", "de_DE", "el", "el_GR",
+ "en", "en_GB", "en_US", "es", "es_419", "es_ES", "et", "et_EE", "eu",
+ "eu_ES", "fa", "fa_IR", "fi", "fi_FI", "fil", "fil_PH", "fr", "fr_FR",
+ "ga", "ga_IE", "gl", "gl_ES", "gu", "gu_IN", "he", "he_IL", "hi", "hi_IN",
+ "hr", "hr_HR", "hu", "hu_HU", "hy", "hy_AM", "id", "id_ID", "is", "is_IS",
+ "it", "it_IT", "ja", "ja_JP", "jv", "jv_ID", "ka", "ka_GE", "kk", "kk_KZ",
+ "km", "km_KH", "kn", "kn_IN", "ko", "ko_KR", "ky", "ky_KG", "lo", "lo_LA",
+ "lt", "lt_LT", "lv", "lv_LV", "mk", "mk_MK", "ml", "ml_IN", "mn", "mn_MN",
+ "mr", "mr_IN", "ms", "ms_MY", "my", "my_MM", "nb", "nb_NO", "ne", "ne_NP",
+ "nl", "nl_NL", "or", "or_IN", "pa", "pa_IN", "pl", "pl_PL", "ps", "ps_AF",
+ "pt", "pt_BR", "pt_PT", "ro", "ro_RO", "ru", "ru_RU", "sd", "sd_IN", "si",
+ "si_LK", "sk", "sk_SK", "sl", "sl_SI", "so", "so_SO", "sq", "sq_AL", "sr",
+ "sr_Cyrl_RS", "sr_Latn", "sr_RS", "sv", "sv_SE", "sw", "sw_TZ", "ta",
+ "ta_IN", "te", "te_IN", "th", "th_TH", "tk", "tk_TM", "tr", "tr_TR", "uk",
+ "uk_UA", "ur", "ur_PK", "uz", "uz_UZ", "vi", "vi_VN", "yue", "yue_Hant",
+ "yue_Hant_HK", "yue_HK", "zh", "zh_CN", "zh_Hans", "zh_Hans_CN", "zh_Hant",
+ "zh_Hant_TW", "zh_TW", "zu", "zu_ZA"
+};
+
+static UBool U_CALLCONV cleanupKnownCanonicalized() {
+ gKnownCanonicalizedInitOnce.reset();
+ if (gKnownCanonicalized) { uhash_close(gKnownCanonicalized); }
+ return TRUE;
+}
+
+static void U_CALLCONV loadKnownCanonicalized(UErrorCode &status) {
+ ucln_common_registerCleanup(UCLN_COMMON_LOCALE_KNOWN_CANONICALIZED,
+ cleanupKnownCanonicalized);
+ LocalUHashtablePointer newKnownCanonicalizedMap(
+ uhash_open(uhash_hashChars, uhash_compareChars, nullptr, &status));
+ for (int32_t i = 0;
+ U_SUCCESS(status) && i < UPRV_LENGTHOF(KNOWN_CANONICALIZED);
+ i++) {
+ uhash_puti(newKnownCanonicalizedMap.getAlias(),
+ (void*)KNOWN_CANONICALIZED[i],
+ 1, &status);
+ }
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ gKnownCanonicalized = newKnownCanonicalizedMap.orphan();
+}
+
+class AliasData;
+
+/**
+ * A Builder class to build the alias data.
+ */
+class AliasDataBuilder {
+public:
+ AliasDataBuilder() {
+ }
+
+ // Build the AliasData from resource.
+ AliasData* build(UErrorCode &status);
+
+private:
+ void readAlias(UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ void (*checkType)(const char* type),
+ void (*checkReplacement)(const UnicodeString& replacement),
+ UErrorCode &status);
+
+ // Read the languageAlias data from alias to
+ // strings+types+replacementIndexes
+ // The number of record will be stored into length.
+ // Allocate length items for types, to store the type field.
+ // Allocate length items for replacementIndexes,
+ // to store the index in the strings for the replacement script.
+ void readLanguageAlias(UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ UErrorCode &status);
+
+ // Read the scriptAlias data from alias to
+ // strings+types+replacementIndexes
+ // Allocate length items for types, to store the type field.
+ // Allocate length items for replacementIndexes,
+ // to store the index in the strings for the replacement script.
+ void readScriptAlias(UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length, UErrorCode &status);
+
+ // Read the territoryAlias data from alias to
+ // strings+types+replacementIndexes
+ // Allocate length items for types, to store the type field.
+ // Allocate length items for replacementIndexes,
+ // to store the index in the strings for the replacement script.
+ void readTerritoryAlias(UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length, UErrorCode &status);
+
+ // Read the variantAlias data from alias to
+ // strings+types+replacementIndexes
+ // Allocate length items for types, to store the type field.
+ // Allocate length items for replacementIndexes,
+ // to store the index in the strings for the replacement variant.
+ void readVariantAlias(UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length, UErrorCode &status);
+};
+
+/**
+ * A class to hold the Alias Data.
+ */
+class AliasData : public UMemory {
+public:
+ static const AliasData* singleton(UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ // Do not get into loadData if the status already has error.
+ return nullptr;
+ }
+ umtx_initOnce(AliasData::gInitOnce, &AliasData::loadData, status);
+ return gSingleton;
+ }
+
+ const CharStringMap& languageMap() const { return language; }
+ const CharStringMap& scriptMap() const { return script; }
+ const CharStringMap& territoryMap() const { return territory; }
+ const CharStringMap& variantMap() const { return variant; }
+
+ static void U_CALLCONV loadData(UErrorCode &status);
+ static UBool U_CALLCONV cleanup();
+
+ static UInitOnce gInitOnce;
+
+private:
+ AliasData(CharStringMap languageMap,
+ CharStringMap scriptMap,
+ CharStringMap territoryMap,
+ CharStringMap variantMap,
+ CharString* strings)
+ : language(std::move(languageMap)),
+ script(std::move(scriptMap)),
+ territory(std::move(territoryMap)),
+ variant(std::move(variantMap)),
+ strings(strings) {
+ }
+
+ ~AliasData() {
+ delete strings;
+ }
+
+ static const AliasData* gSingleton;
+
+ CharStringMap language;
+ CharStringMap script;
+ CharStringMap territory;
+ CharStringMap variant;
+ CharString* strings;
+
+ friend class AliasDataBuilder;
+};
+
+
+const AliasData* AliasData::gSingleton = nullptr;
+UInitOnce AliasData::gInitOnce = U_INITONCE_INITIALIZER;
+
+UBool U_CALLCONV
+AliasData::cleanup()
+{
+ gInitOnce.reset();
+ delete gSingleton;
+ return TRUE;
+}
+
+void
+AliasDataBuilder::readAlias(
+ UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ void (*checkType)(const char* type),
+ void (*checkReplacement)(const UnicodeString& replacement),
+ UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ length = ures_getSize(alias);
+ const char** rawTypes = types.allocateInsteadAndCopy(length);
+ if (rawTypes == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ int32_t* rawIndexes = replacementIndexes.allocateInsteadAndCopy(length);
+ if (rawIndexes == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ int i = 0;
+ while (ures_hasNext(alias)) {
+ LocalUResourceBundlePointer res(
+ ures_getNextResource(alias, nullptr, &status));
+ const char* aliasFrom = ures_getKey(res.getAlias());
+ UnicodeString aliasTo =
+ ures_getUnicodeStringByKey(res.getAlias(), "replacement", &status);
+
+ checkType(aliasFrom);
+ checkReplacement(aliasTo);
+
+ rawTypes[i] = aliasFrom;
+ rawIndexes[i] = strings->add(aliasTo, status);
+ i++;
+ }
+}
+
+/**
+ * Read the languageAlias data from alias to strings+types+replacementIndexes.
+ * Allocate length items for types, to store the type field. Allocate length
+ * items for replacementIndexes, to store the index in the strings for the
+ * replacement language.
+ */
+void
+AliasDataBuilder::readLanguageAlias(
+ UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ UErrorCode &status)
+{
+ return readAlias(
+ alias, strings, types, replacementIndexes, length,
+#if U_DEBUG
+ [](const char* type) {
+ // Assert the aliasFrom only contains the following possibilties
+ // language_REGION_variant
+ // language_REGION
+ // language_variant
+ // language
+ // und_variant
+ Locale test(type);
+ // Assert no script in aliasFrom
+ U_ASSERT(test.getScript()[0] == '\0');
+ // Assert when language is und, no REGION in aliasFrom.
+ U_ASSERT(test.getLanguage()[0] != '\0' || test.getCountry()[0] == '\0');
+ },
+#else
+ [](const char*) {},
+#endif
+ [](const UnicodeString&) {}, status);
+}
+
+/**
+ * Read the scriptAlias data from alias to strings+types+replacementIndexes.
+ * Allocate length items for types, to store the type field. Allocate length
+ * items for replacementIndexes, to store the index in the strings for the
+ * replacement script.
+ */
+void
+AliasDataBuilder::readScriptAlias(
+ UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ UErrorCode &status)
+{
+ return readAlias(
+ alias, strings, types, replacementIndexes, length,
+#if U_DEBUG
+ [](const char* type) {
+ U_ASSERT(uprv_strlen(type) == 4);
+ },
+ [](const UnicodeString& replacement) {
+ U_ASSERT(replacement.length() == 4);
+ },
+#else
+ [](const char*) {},
+ [](const UnicodeString&) { },
+#endif
+ status);
+}
+
+/**
+ * Read the territoryAlias data from alias to strings+types+replacementIndexes.
+ * Allocate length items for types, to store the type field. Allocate length
+ * items for replacementIndexes, to store the index in the strings for the
+ * replacement regions.
+ */
+void
+AliasDataBuilder::readTerritoryAlias(
+ UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ UErrorCode &status)
+{
+ return readAlias(
+ alias, strings, types, replacementIndexes, length,
+#if U_DEBUG
+ [](const char* type) {
+ U_ASSERT(uprv_strlen(type) == 2 || uprv_strlen(type) == 3);
+ },
+#else
+ [](const char*) {},
+#endif
+ [](const UnicodeString&) { },
+ status);
+}
+
+/**
+ * Read the variantAlias data from alias to strings+types+replacementIndexes.
+ * Allocate length items for types, to store the type field. Allocate length
+ * items for replacementIndexes, to store the index in the strings for the
+ * replacement variant.
+ */
+void
+AliasDataBuilder::readVariantAlias(
+ UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ UErrorCode &status)
+{
+ return readAlias(
+ alias, strings, types, replacementIndexes, length,
+#if U_DEBUG
+ [](const char* type) {
+ U_ASSERT(uprv_strlen(type) >= 4 && uprv_strlen(type) <= 8);
+ U_ASSERT(uprv_strlen(type) != 4 ||
+ (type[0] >= '0' && type[0] <= '9'));
+ },
+ [](const UnicodeString& replacement) {
+ U_ASSERT(replacement.length() >= 4 && replacement.length() <= 8);
+ U_ASSERT(replacement.length() != 4 ||
+ (replacement.charAt(0) >= u'0' &&
+ replacement.charAt(0) <= u'9'));
+ },
+#else
+ [](const char*) {},
+ [](const UnicodeString&) { },
+#endif
+ status);
+}
+
+/**
+ * Initializes the alias data from the ICU resource bundles. The alias data
+ * contains alias of language, country, script and variants.
+ *
+ * If the alias data has already loaded, then this method simply returns without
+ * doing anything meaningful.
+ */
+void U_CALLCONV
+AliasData::loadData(UErrorCode &status)
+{
+#ifdef LOCALE_CANONICALIZATION_DEBUG
+ UDate start = uprv_getRawUTCtime();
+#endif // LOCALE_CANONICALIZATION_DEBUG
+ ucln_common_registerCleanup(UCLN_COMMON_LOCALE_ALIAS, cleanup);
+ AliasDataBuilder builder;
+ gSingleton = builder.build(status);
+#ifdef LOCALE_CANONICALIZATION_DEBUG
+ UDate end = uprv_getRawUTCtime();
+ printf("AliasData::loadData took total %f ms\n", end - start);
+#endif // LOCALE_CANONICALIZATION_DEBUG
+}
+
+/**
+ * Build the alias data from resources.
+ */
+AliasData*
+AliasDataBuilder::build(UErrorCode &status) {
+ LocalUResourceBundlePointer metadata(
+ ures_openDirect(nullptr, "metadata", &status));
+ LocalUResourceBundlePointer metadataAlias(
+ ures_getByKey(metadata.getAlias(), "alias", nullptr, &status));
+ LocalUResourceBundlePointer languageAlias(
+ ures_getByKey(metadataAlias.getAlias(), "language", nullptr, &status));
+ LocalUResourceBundlePointer scriptAlias(
+ ures_getByKey(metadataAlias.getAlias(), "script", nullptr, &status));
+ LocalUResourceBundlePointer territoryAlias(
+ ures_getByKey(metadataAlias.getAlias(), "territory", nullptr, &status));
+ LocalUResourceBundlePointer variantAlias(
+ ures_getByKey(metadataAlias.getAlias(), "variant", nullptr, &status));
+
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ int32_t languagesLength = 0, scriptLength = 0, territoryLength = 0,
+ variantLength = 0;
+
+ // Read the languageAlias into languageTypes, languageReplacementIndexes
+ // and strings
+ UniqueCharStrings strings(status);
+ LocalMemory<const char*> languageTypes;
+ LocalMemory<int32_t> languageReplacementIndexes;
+ readLanguageAlias(languageAlias.getAlias(),
+ &strings,
+ languageTypes,
+ languageReplacementIndexes,
+ languagesLength,
+ status);
+
+ // Read the scriptAlias into scriptTypes, scriptReplacementIndexes
+ // and strings
+ LocalMemory<const char*> scriptTypes;
+ LocalMemory<int32_t> scriptReplacementIndexes;
+ readScriptAlias(scriptAlias.getAlias(),
+ &strings,
+ scriptTypes,
+ scriptReplacementIndexes,
+ scriptLength,
+ status);
+
+ // Read the territoryAlias into territoryTypes, territoryReplacementIndexes
+ // and strings
+ LocalMemory<const char*> territoryTypes;
+ LocalMemory<int32_t> territoryReplacementIndexes;
+ readTerritoryAlias(territoryAlias.getAlias(),
+ &strings,
+ territoryTypes,
+ territoryReplacementIndexes,
+ territoryLength, status);
+
+ // Read the variantAlias into variantTypes, variantReplacementIndexes
+ // and strings
+ LocalMemory<const char*> variantTypes;
+ LocalMemory<int32_t> variantReplacementIndexes;
+ readVariantAlias(variantAlias.getAlias(),
+ &strings,
+ variantTypes,
+ variantReplacementIndexes,
+ variantLength, status);
+
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+
+ // We can only use strings after freeze it.
+ strings.freeze();
+
+ // Build the languageMap from languageTypes & languageReplacementIndexes
+ CharStringMap languageMap(490, status);
+ for (int32_t i = 0; U_SUCCESS(status) && i < languagesLength; i++) {
+ languageMap.put(languageTypes[i],
+ strings.get(languageReplacementIndexes[i]),
+ status);
+ }
+
+ // Build the scriptMap from scriptTypes & scriptReplacementIndexes
+ CharStringMap scriptMap(1, status);
+ for (int32_t i = 0; U_SUCCESS(status) && i < scriptLength; i++) {
+ scriptMap.put(scriptTypes[i],
+ strings.get(scriptReplacementIndexes[i]),
+ status);
+ }
+
+ // Build the territoryMap from territoryTypes & territoryReplacementIndexes
+ CharStringMap territoryMap(650, status);
+ for (int32_t i = 0; U_SUCCESS(status) && i < territoryLength; i++) {
+ territoryMap.put(territoryTypes[i],
+ strings.get(territoryReplacementIndexes[i]),
+ status);
+ }
+
+ // Build the variantMap from variantTypes & variantReplacementIndexes.
+ CharStringMap variantMap(2, status);
+ for (int32_t i = 0; U_SUCCESS(status) && i < variantLength; i++) {
+ variantMap.put(variantTypes[i],
+ strings.get(variantReplacementIndexes[i]),
+ status);
+ }
+
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+
+ // copy hashtables
+ auto *data = new AliasData(
+ std::move(languageMap),
+ std::move(scriptMap),
+ std::move(territoryMap),
+ std::move(variantMap),
+ strings.orphanCharStrings());
+
+ if (data == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ return data;
+}
+
+/**
+ * A class that find the replacement values of locale fields by using AliasData.
+ */
+class AliasReplacer {
+public:
+ AliasReplacer(UErrorCode status) :
+ language(nullptr), script(nullptr), region(nullptr),
+ extensions(nullptr), variants(status),
+ data(nullptr) {
+ }
+ ~AliasReplacer() {
+ }
+
+ // Check the fields inside locale, if need to replace fields,
+ // place the the replaced locale ID in out and return true.
+ // Otherwise return false for no replacement or error.
+ bool replace(
+ const Locale& locale, CharString& out, UErrorCode& status);
+
+private:
+ const char* language;
+ const char* script;
+ const char* region;
+ const char* extensions;
+ UVector variants;
+
+ const AliasData* data;
+
+ inline bool notEmpty(const char* str) {
+ return str && str[0] != NULL_CHAR;
+ }
+
+ /**
+ * If replacement is neither null nor empty and input is either null or empty,
+ * return replacement.
+ * If replacement is neither null nor empty but input is not empty, return input.
+ * If replacement is either null or empty and type is either null or empty,
+ * return input.
+ * Otherwise return null.
+ * replacement input type return
+ * AAA nullptr * AAA
+ * AAA BBB * BBB
+ * nullptr || "" CCC nullptr CCC
+ * nullptr || "" * DDD nullptr
+ */
+ inline const char* deleteOrReplace(
+ const char* input, const char* type, const char* replacement) {
+ return notEmpty(replacement) ?
+ ((input == nullptr) ? replacement : input) :
+ ((type == nullptr) ? input : nullptr);
+ }
+
+ inline bool same(const char* a, const char* b) {
+ if (a == nullptr && b == nullptr) {
+ return true;
+ }
+ if ((a == nullptr && b != nullptr) ||
+ (a != nullptr && b == nullptr)) {
+ return false;
+ }
+ return uprv_strcmp(a, b) == 0;
+ }
+
+ // Gather fields and generate locale ID into out.
+ CharString& outputToString(CharString& out, UErrorCode status);
+
+ // Generate the lookup key.
+ CharString& generateKey(const char* language, const char* region,
+ const char* variant, CharString& out,
+ UErrorCode status);
+
+ void parseLanguageReplacement(const char* replacement,
+ const char*& replaceLanguage,
+ const char*& replaceScript,
+ const char*& replaceRegion,
+ const char*& replaceVariant,
+ const char*& replaceExtensions,
+ UVector& toBeFreed,
+ UErrorCode& status);
+
+ // Replace by using languageAlias.
+ bool replaceLanguage(bool checkLanguage, bool checkRegion,
+ bool checkVariants, UVector& toBeFreed,
+ UErrorCode& status);
+
+ // Replace by using territoryAlias.
+ bool replaceTerritory(UVector& toBeFreed, UErrorCode& status);
+
+ // Replace by using scriptAlias.
+ bool replaceScript(UErrorCode& status);
+
+ // Replace by using variantAlias.
+ bool replaceVariant(UErrorCode& status);
+};
+
+CharString&
+AliasReplacer::generateKey(
+ const char* language, const char* region, const char* variant,
+ CharString& out, UErrorCode status)
+{
+ out.append(language, status);
+ if (notEmpty(region)) {
+ out.append(SEP_CHAR, status)
+ .append(region, status);
+ }
+ if (notEmpty(variant)) {
+ out.append(SEP_CHAR, status)
+ .append(variant, status);
+ }
+ return out;
+}
+
+void
+AliasReplacer::parseLanguageReplacement(
+ const char* replacement,
+ const char*& replacedLanguage,
+ const char*& replacedScript,
+ const char*& replacedRegion,
+ const char*& replacedVariant,
+ const char*& replacedExtensions,
+ UVector& toBeFreed,
+ UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return;
+ }
+ replacedScript = replacedRegion = replacedVariant
+ = replacedExtensions = nullptr;
+ if (uprv_strchr(replacement, '_') == nullptr) {
+ replacedLanguage = replacement;
+ // reach the end, just return it.
+ return;
+ }
+ // We have multiple field so we have to allocate and parse
+ CharString* str = new CharString(
+ replacement, (int32_t)uprv_strlen(replacement), status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (str == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ toBeFreed.addElement(str, status);
+ char* data = str->data();
+ replacedLanguage = (const char*) data;
+ char* endOfField = uprv_strchr(data, '_');
+ *endOfField = '\0'; // null terminiate it.
+ endOfField++;
+ const char* start = endOfField;
+ endOfField = (char*) uprv_strchr(start, '_');
+ size_t len = 0;
+ if (endOfField == nullptr) {
+ len = uprv_strlen(start);
+ } else {
+ len = endOfField - start;
+ *endOfField = '\0'; // null terminiate it.
+ }
+ if (len == 4 && uprv_isASCIILetter(*start)) {
+ // Got a script
+ replacedScript = start;
+ if (endOfField == nullptr) {
+ return;
+ }
+ start = endOfField++;
+ endOfField = (char*)uprv_strchr(start, '_');
+ if (endOfField == nullptr) {
+ len = uprv_strlen(start);
+ } else {
+ len = endOfField - start;
+ *endOfField = '\0'; // null terminiate it.
+ }
+ }
+ if (len >= 2 && len <= 3) {
+ // Got a region
+ replacedRegion = start;
+ if (endOfField == nullptr) {
+ return;
+ }
+ start = endOfField++;
+ endOfField = (char*)uprv_strchr(start, '_');
+ if (endOfField == nullptr) {
+ len = uprv_strlen(start);
+ } else {
+ len = endOfField - start;
+ *endOfField = '\0'; // null terminiate it.
+ }
+ }
+ if (len >= 4) {
+ // Got a variant
+ replacedVariant = start;
+ if (endOfField == nullptr) {
+ return;
+ }
+ start = endOfField++;
+ }
+ replacedExtensions = start;
+}
+
+bool
+AliasReplacer::replaceLanguage(
+ bool checkLanguage, bool checkRegion,
+ bool checkVariants, UVector& toBeFreed, UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ if ( (checkRegion && region == nullptr) ||
+ (checkVariants && variants.size() == 0)) {
+ // Nothing to search.
+ return false;
+ }
+ int32_t variant_size = checkVariants ? variants.size() : 1;
+ // Since we may have more than one variant, we need to loop through them.
+ const char* searchLanguage = checkLanguage ? language : "und";
+ const char* searchRegion = checkRegion ? region : nullptr;
+ const char* searchVariant = nullptr;
+ for (int32_t variant_index = 0;
+ variant_index < variant_size;
+ variant_index++) {
+ if (checkVariants) {
+ U_ASSERT(variant_index < variant_size);
+ searchVariant = (const char*)(variants.elementAt(variant_index));
+ }
+
+ if (searchVariant != nullptr && uprv_strlen(searchVariant) < 4) {
+ // Do not consider ill-formed variant subtag.
+ searchVariant = nullptr;
+ }
+ CharString typeKey;
+ generateKey(searchLanguage, searchRegion, searchVariant, typeKey,
+ status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ const char *replacement = data->languageMap().get(typeKey.data());
+ if (replacement == nullptr) {
+ // Found no replacement data.
+ continue;
+ }
+
+ const char* replacedLanguage = nullptr;
+ const char* replacedScript = nullptr;
+ const char* replacedRegion = nullptr;
+ const char* replacedVariant = nullptr;
+ const char* replacedExtensions = nullptr;
+ parseLanguageReplacement(replacement,
+ replacedLanguage,
+ replacedScript,
+ replacedRegion,
+ replacedVariant,
+ replacedExtensions,
+ toBeFreed,
+ status);
+ replacedLanguage =
+ (replacedLanguage != nullptr && uprv_strcmp(replacedLanguage, "und") == 0) ?
+ language : replacedLanguage;
+ replacedScript = deleteOrReplace(script, nullptr, replacedScript);
+ replacedRegion = deleteOrReplace(region, searchRegion, replacedRegion);
+ replacedVariant = deleteOrReplace(
+ searchVariant, searchVariant, replacedVariant);
+
+ if ( same(language, replacedLanguage) &&
+ same(script, replacedScript) &&
+ same(region, replacedRegion) &&
+ same(searchVariant, replacedVariant) &&
+ replacedExtensions == nullptr) {
+ // Replacement produce no changes.
+ continue;
+ }
+
+ language = replacedLanguage;
+ region = replacedRegion;
+ script = replacedScript;
+ if (searchVariant != nullptr) {
+ if (notEmpty(replacedVariant)) {
+ variants.setElementAt((void*)replacedVariant, variant_index);
+ } else {
+ variants.removeElementAt(variant_index);
+ }
+ }
+ if (replacedExtensions != nullptr) {
+ // TODO(ICU-21292)
+ // DO NOTHING
+ // UTS35 does not specifiy what should we do if we have extensions in the
+ // replacement. Currently we know only the following 4 "BCP47 LegacyRules" have
+ // extensions in them languageAlias:
+ // i_default => en_x_i_default
+ // i_enochian => und_x_i_enochian
+ // i_mingo => see_x_i_mingo
+ // zh_min => nan_x_zh_min
+ // But all of them are already changed by code inside ultag_parse() before
+ // hitting this code.
+ }
+
+ // Something changed by language alias data.
+ return true;
+ }
+ // Nothing changed by language alias data.
+ return false;
+}
+
+bool
+AliasReplacer::replaceTerritory(UVector& toBeFreed, UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ if (region == nullptr) {
+ // No region to search.
+ return false;
+ }
+ const char *replacement = data->territoryMap().get(region);
+ if (replacement == nullptr) {
+ // Found no replacement data for this region.
+ return false;
+ }
+ const char* replacedRegion = replacement;
+ const char* firstSpace = uprv_strchr(replacement, ' ');
+ if (firstSpace != nullptr) {
+ // If there are are more than one region in the replacement.
+ // We need to check which one match based on the language.
+ // Cannot use nullptr for language because that will construct
+ // the default locale, in that case, use "und" to get the correct
+ // locale.
+ Locale l = LocaleBuilder()
+ .setLanguage(language == nullptr ? "und" : language)
+ .setScript(script)
+ .build(status);
+ l.addLikelySubtags(status);
+ const char* likelyRegion = l.getCountry();
+ LocalPointer<CharString> item;
+ if (likelyRegion != nullptr && uprv_strlen(likelyRegion) > 0) {
+ size_t len = uprv_strlen(likelyRegion);
+ const char* foundInReplacement = uprv_strstr(replacement,
+ likelyRegion);
+ if (foundInReplacement != nullptr) {
+ // Assuming the case there are no three letter region code in
+ // the replacement of territoryAlias
+ U_ASSERT(foundInReplacement == replacement ||
+ *(foundInReplacement-1) == ' ');
+ U_ASSERT(foundInReplacement[len] == ' ' ||
+ foundInReplacement[len] == '\0');
+ item.adoptInsteadAndCheckErrorCode(
+ new CharString(foundInReplacement, (int32_t)len, status), status);
+ }
+ }
+ if (item.isNull() && U_SUCCESS(status)) {
+ item.adoptInsteadAndCheckErrorCode(
+ new CharString(replacement,
+ (int32_t)(firstSpace - replacement), status), status);
+ }
+ if (U_FAILURE(status)) { return false; }
+ if (item.isNull()) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return false;
+ }
+ replacedRegion = item->data();
+ toBeFreed.addElement(item.orphan(), status);
+ }
+ U_ASSERT(!same(region, replacedRegion));
+ region = replacedRegion;
+ // The region is changed by data in territory alias.
+ return true;
+}
+
+bool
+AliasReplacer::replaceScript(UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ if (script == nullptr) {
+ // No script to search.
+ return false;
+ }
+ const char *replacement = data->scriptMap().get(script);
+ if (replacement == nullptr) {
+ // Found no replacement data for this script.
+ return false;
+ }
+ U_ASSERT(!same(script, replacement));
+ script = replacement;
+ // The script is changed by data in script alias.
+ return true;
+}
+
+bool
+AliasReplacer::replaceVariant(UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ // Since we may have more than one variant, we need to loop through them.
+ for (int32_t i = 0; i < variants.size(); i++) {
+ const char *variant = (const char*)(variants.elementAt(i));
+ const char *replacement = data->variantMap().get(variant);
+ if (replacement == nullptr) {
+ // Found no replacement data for this variant.
+ continue;
+ }
+ U_ASSERT((uprv_strlen(replacement) >= 5 &&
+ uprv_strlen(replacement) <= 8) ||
+ (uprv_strlen(replacement) == 4 &&
+ replacement[0] >= '0' &&
+ replacement[0] <= '9'));
+ if (!same(variant, replacement)) {
+ variants.setElementAt((void*)replacement, i);
+ // Special hack to handle hepburn-heploc => alalc97
+ if (uprv_strcmp(variant, "heploc") == 0) {
+ for (int32_t j = 0; j < variants.size(); j++) {
+ if (uprv_strcmp((const char*)(variants.elementAt(j)),
+ "hepburn") == 0) {
+ variants.removeElementAt(j);
+ }
+ }
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+CharString&
+AliasReplacer::outputToString(
+ CharString& out, UErrorCode status)
+{
+ out.append(language, status);
+ if (notEmpty(script)) {
+ out.append(SEP_CHAR, status)
+ .append(script, status);
+ }
+ if (notEmpty(region)) {
+ out.append(SEP_CHAR, status)
+ .append(region, status);
+ }
+ if (variants.size() > 0) {
+ if (!notEmpty(script) && !notEmpty(region)) {
+ out.append(SEP_CHAR, status);
+ }
+ variants.sort([](UElement e1, UElement e2) -> int8_t {
+ return uprv_strcmp(
+ (const char*)e1.pointer, (const char*)e2.pointer);
+ }, status);
+ int32_t variantsStart = out.length();
+ for (int32_t i = 0; i < variants.size(); i++) {
+ out.append(SEP_CHAR, status)
+ .append((const char*)(variants.elementAt(i)),
+ status);
+ }
+ T_CString_toUpperCase(out.data() + variantsStart);
+ }
+ if (notEmpty(extensions)) {
+ CharString tmp("und_", status);
+ tmp.append(extensions, status);
+ Locale tmpLocale(tmp.data());
+ // only support x extension inside CLDR for now.
+ U_ASSERT(extensions[0] == 'x');
+ out.append(tmpLocale.getName() + 1, status);
+ }
+ return out;
+}
+
+bool
+AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status)
+{
+ data = AliasData::singleton(status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ U_ASSERT(data != nullptr);
+ out.clear();
+ language = locale.getLanguage();
+ if (!notEmpty(language)) {
+ language = nullptr;
+ }
+ script = locale.getScript();
+ if (!notEmpty(script)) {
+ script = nullptr;
+ }
+ region = locale.getCountry();
+ if (!notEmpty(region)) {
+ region = nullptr;
+ }
+ const char* variantsStr = locale.getVariant();
+ const char* extensionsStr = locale_getKeywordsStart(locale.getName());
+ CharString variantsBuff(variantsStr, -1, status);
+ if (!variantsBuff.isEmpty()) {
+ if (U_FAILURE(status)) { return false; }
+ char* start = variantsBuff.data();
+ T_CString_toLowerCase(start);
+ char* end;
+ while ((end = uprv_strchr(start, SEP_CHAR)) != nullptr &&
+ U_SUCCESS(status)) {
+ *end = NULL_CHAR; // null terminate inside variantsBuff
+ variants.addElement(start, status);
+ start = end + 1;
+ }
+ variants.addElement(start, status);
+ }
+ if (U_FAILURE(status)) { return false; }
+
+ // Sort the variants
+ variants.sort([](UElement e1, UElement e2) -> int8_t {
+ return uprv_strcmp(
+ (const char*)e1.pointer, (const char*)e2.pointer);
+ }, status);
+
+ // A changed count to assert when loop too many times.
+ int changed = 0;
+ // A UVector to to hold CharString allocated by the replace* method
+ // and freed when out of scope from his function.
+ UVector stringsToBeFreed([](void *obj){ delete ((CharString*) obj); },
+ nullptr, 10, status);
+ while (U_SUCCESS(status)) {
+ // Something wrong with the data cause looping here more than 10 times
+ // already.
+ U_ASSERT(changed < 5);
+ // From observation of key in data/misc/metadata.txt
+ // we know currently we only need to search in the following combination
+ // of fields for type in languageAlias:
+ // * lang_region_variant
+ // * lang_region
+ // * lang_variant
+ // * lang
+ // * und_variant
+ // This assumption is ensured by the U_ASSERT in readLanguageAlias
+ //
+ // lang REGION variant
+ if ( replaceLanguage(true, true, true, stringsToBeFreed, status) ||
+ replaceLanguage(true, true, false, stringsToBeFreed, status) ||
+ replaceLanguage(true, false, true, stringsToBeFreed, status) ||
+ replaceLanguage(true, false, false, stringsToBeFreed, status) ||
+ replaceLanguage(false,false, true, stringsToBeFreed, status) ||
+ replaceTerritory(stringsToBeFreed, status) ||
+ replaceScript(status) ||
+ replaceVariant(status)) {
+ // Some values in data is changed, try to match from the beginning
+ // again.
+ changed++;
+ continue;
+ }
+ // Nothing changed. Break out.
+ break;
+ } // while(1)
+
+ if (U_FAILURE(status)) { return false; }
+ // Nothing changed and we know the order of the vaiants are not change
+ // because we have no variant or only one.
+ if (changed == 0 && variants.size() <= 1) {
+ return false;
+ }
+ outputToString(out, status);
+ if (extensionsStr != nullptr) {
+ out.append(extensionsStr, status);
+ }
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ // If the tag is not changed, return.
+ if (uprv_strcmp(out.data(), locale.getName()) == 0) {
+ U_ASSERT(changed == 0);
+ U_ASSERT(variants.size() > 1);
+ out.clear();
+ return false;
+ }
+ return true;
+}
+
+// Return true if the locale is changed during canonicalization.
+// The replaced value then will be put into out.
+bool
+canonicalizeLocale(const Locale& locale, CharString& out, UErrorCode& status)
+{
+ AliasReplacer replacer(status);
+ return replacer.replace(locale, out, status);
+}
+
+// Function to optimize for known cases without so we can skip the loading
+// of resources in the startup time until we really need it.
+bool
+isKnownCanonicalizedLocale(const char* locale, UErrorCode& status)
+{
+ if ( uprv_strcmp(locale, "c") == 0 ||
+ uprv_strcmp(locale, "en") == 0 ||
+ uprv_strcmp(locale, "en_US") == 0) {
+ return true;
+ }
+
+ // common well-known Canonicalized.
+ umtx_initOnce(gKnownCanonicalizedInitOnce,
+ &loadKnownCanonicalized, status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ U_ASSERT(gKnownCanonicalized != nullptr);
+ return uhash_geti(gKnownCanonicalized, locale) != 0;
+}
+
+} // namespace
+
+// Function for testing.
+U_CAPI const char* const*
+ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* length)
+{
+ *length = UPRV_LENGTHOF(KNOWN_CANONICALIZED);
+ return KNOWN_CANONICALIZED;
+}
+
+// Function for testing.
+U_CAPI bool
+ulocimp_isCanonicalizedLocaleForTest(const char* localeName)
+{
+ Locale l(localeName);
+ UErrorCode status = U_ZERO_ERROR;
+ CharString temp;
+ return !canonicalizeLocale(l, temp, status) && U_SUCCESS(status);
+}
/*This function initializes a Locale from a C locale ID*/
Locale& Locale::init(const char* localeID, UBool canonicalize)
@@ -603,9 +1725,9 @@ Locale& Locale::init(const char* localeID, UBool canonicalize)
uprv_memcpy(language, fullName, fieldLen[0]);
language[fieldLen[0]] = 0;
}
- if (fieldLen[1] == 4 && ISASCIIALPHA(field[1][0]) &&
- ISASCIIALPHA(field[1][1]) && ISASCIIALPHA(field[1][2]) &&
- ISASCIIALPHA(field[1][3])) {
+ if (fieldLen[1] == 4 && uprv_isASCIILetter(field[1][0]) &&
+ uprv_isASCIILetter(field[1][1]) && uprv_isASCIILetter(field[1][2]) &&
+ uprv_isASCIILetter(field[1][3])) {
/* We have at least a script */
uprv_memcpy(script, field[1], fieldLen[1]);
script[fieldLen[1]] = 0;
@@ -632,6 +1754,21 @@ Locale& Locale::init(const char* localeID, UBool canonicalize)
break;
}
+ if (canonicalize) {
+ if (!isKnownCanonicalizedLocale(fullName, err)) {
+ CharString replaced;
+ // Not sure it is already canonicalized
+ if (canonicalizeLocale(*this, replaced, err)) {
+ U_ASSERT(U_SUCCESS(err));
+ // If need replacement, call init again.
+ init(replaced.data(), false);
+ }
+ if (U_FAILURE(err)) {
+ break;
+ }
+ }
+ } // if (canonicalize) {
+
// successful end of init()
return *this;
} while(0); /*loop doesn't iterate*/
@@ -778,6 +1915,25 @@ Locale::minimizeSubtags(UErrorCode& status) {
}
}
+void
+Locale::canonicalize(UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (isBogus()) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ CharString uncanonicalized(fullName, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ init(uncanonicalized.data(), /*canonicalize=*/TRUE);
+ if (isBogus()) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+}
+
Locale U_EXPORT2
Locale::forLanguageTag(StringPiece tag, UErrorCode& status)
{
@@ -787,13 +1943,14 @@ Locale::forLanguageTag(StringPiece tag, UErrorCode& status)
return result;
}
- // If a BCP-47 language tag is passed as the language parameter to the
+ // If a BCP 47 language tag is passed as the language parameter to the
// normal Locale constructor, it will actually fall back to invoking
// uloc_forLanguageTag() to parse it if it somehow is able to detect that
- // the string actually is BCP-47. This works well for things like strings
- // using BCP-47 extensions, but it does not at all work for things like
- // BCP-47 grandfathered tags (eg. "en-GB-oed") which are possible to also
- // interpret as ICU locale IDs and because of that won't trigger the BCP-47
+ // the string actually is BCP 47. This works well for things like strings
+ // using BCP 47 extensions, but it does not at all work for things like
+ // legacy language tags (marked as “Type: grandfathered†in BCP 47,
+ // e.g., "en-GB-oed") which are possible to also
+ // interpret as ICU locale IDs and because of that won't trigger the BCP 47
// parsing. Therefore the code here explicitly calls uloc_forLanguageTag()
// and then Locale::init(), instead of just calling the normal constructor.
@@ -1177,8 +2334,6 @@ UnicodeKeywordEnumeration::~UnicodeKeywordEnumeration() = default;
StringEnumeration *
Locale::createKeywords(UErrorCode &status) const
{
- char keywords[256];
- int32_t keywordCapacity = sizeof keywords;
StringEnumeration *result = NULL;
if (U_FAILURE(status)) {
@@ -1189,9 +2344,11 @@ Locale::createKeywords(UErrorCode &status) const
const char* assignment = uprv_strchr(fullName, '=');
if(variantStart) {
if(assignment > variantStart) {
- int32_t keyLen = locale_getKeywords(variantStart+1, '@', keywords, keywordCapacity, NULL, 0, NULL, FALSE, &status);
- if(U_SUCCESS(status) && keyLen) {
- result = new KeywordEnumeration(keywords, keyLen, 0, status);
+ CharString keywords;
+ CharStringByteSink sink(&keywords);
+ ulocimp_getKeywords(variantStart+1, '@', sink, FALSE, &status);
+ if (U_SUCCESS(status) && !keywords.isEmpty()) {
+ result = new KeywordEnumeration(keywords.data(), keywords.length(), 0, status);
if (!result) {
status = U_MEMORY_ALLOCATION_ERROR;
}
@@ -1206,8 +2363,6 @@ Locale::createKeywords(UErrorCode &status) const
StringEnumeration *
Locale::createUnicodeKeywords(UErrorCode &status) const
{
- char keywords[256];
- int32_t keywordCapacity = sizeof keywords;
StringEnumeration *result = NULL;
if (U_FAILURE(status)) {
@@ -1218,9 +2373,11 @@ Locale::createUnicodeKeywords(UErrorCode &status) const
const char* assignment = uprv_strchr(fullName, '=');
if(variantStart) {
if(assignment > variantStart) {
- int32_t keyLen = locale_getKeywords(variantStart+1, '@', keywords, keywordCapacity, NULL, 0, NULL, FALSE, &status);
- if(U_SUCCESS(status) && keyLen) {
- result = new UnicodeKeywordEnumeration(keywords, keyLen, 0, status);
+ CharString keywords;
+ CharStringByteSink sink(&keywords);
+ ulocimp_getKeywords(variantStart+1, '@', sink, FALSE, &status);
+ if (U_SUCCESS(status) && !keywords.isEmpty()) {
+ result = new UnicodeKeywordEnumeration(keywords.data(), keywords.length(), 0, status);
if (!result) {
status = U_MEMORY_ALLOCATION_ERROR;
}
@@ -1255,48 +2412,7 @@ Locale::getKeywordValue(StringPiece keywordName, ByteSink& sink, UErrorCode& sta
return;
}
- LocalMemory<char> scratch;
- int32_t scratch_capacity = 16; // Arbitrarily chosen default size.
-
- char* buffer;
- int32_t result_capacity, reslen;
-
- for (;;) {
- if (scratch.allocateInsteadAndReset(scratch_capacity) == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return;
- }
-
- buffer = sink.GetAppendBuffer(
- /*min_capacity=*/scratch_capacity,
- /*desired_capacity_hint=*/scratch_capacity,
- scratch.getAlias(),
- scratch_capacity,
- &result_capacity);
-
- reslen = uloc_getKeywordValue(
- fullName,
- keywordName_nul.data(),
- buffer,
- result_capacity,
- &status);
-
- if (status != U_BUFFER_OVERFLOW_ERROR) {
- break;
- }
-
- scratch_capacity = reslen;
- status = U_ZERO_ERROR;
- }
-
- if (U_FAILURE(status)) {
- return;
- }
-
- sink.Append(buffer, reslen);
- if (status == U_STRING_NOT_TERMINATED_WARNING) {
- status = U_ZERO_ERROR; // Terminators not used.
- }
+ ulocimp_getKeywordValue(fullName, keywordName_nul.data(), sink, &status);
}
void
@@ -1340,7 +2456,36 @@ Locale::getUnicodeKeywordValue(StringPiece keywordName,
void
Locale::setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status)
{
- uloc_setKeywordValue(keywordName, keywordValue, fullName, ULOC_FULLNAME_CAPACITY, &status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (status == U_STRING_NOT_TERMINATED_WARNING) {
+ status = U_ZERO_ERROR;
+ }
+ int32_t bufferLength = uprv_max((int32_t)(uprv_strlen(fullName) + 1), ULOC_FULLNAME_CAPACITY);
+ int32_t newLength = uloc_setKeywordValue(keywordName, keywordValue, fullName,
+ bufferLength, &status) + 1;
+ U_ASSERT(status != U_STRING_NOT_TERMINATED_WARNING);
+ /* Handle the case the current buffer is not enough to hold the new id */
+ if (status == U_BUFFER_OVERFLOW_ERROR) {
+ U_ASSERT(newLength > bufferLength);
+ char* newFullName = (char *)uprv_malloc(newLength);
+ if (newFullName == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_strcpy(newFullName, fullName);
+ if (fullName != fullNameBuffer) {
+ // if full Name is already on the heap, need to free it.
+ uprv_free(fullName);
+ }
+ fullName = newFullName;
+ status = U_ZERO_ERROR;
+ uloc_setKeywordValue(keywordName, keywordValue, fullName, newLength, &status);
+ U_ASSERT(status != U_STRING_NOT_TERMINATED_WARNING);
+ } else {
+ U_ASSERT(newLength <= bufferLength);
+ }
if (U_SUCCESS(status) && baseName == fullName) {
// May have added the first keyword, meaning that the fullName is no longer also the baseName.
initBaseName(status);
diff --git a/Build/source/libs/icu/icu-src/source/common/loclikely.cpp b/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
index a4a4181cb13..94a60aba3e0 100644
--- a/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
@@ -464,8 +464,7 @@ parseTagString(
goto error;
}
- subtagLength = ulocimp_getLanguage(position, lang, *langLength, &position);
- u_terminateChars(lang, *langLength, subtagLength, err);
+ subtagLength = ulocimp_getLanguage(position, &position, *err).extract(lang, *langLength, *err);
/*
* Note that we explicit consider U_STRING_NOT_TERMINATED_WARNING
@@ -486,8 +485,7 @@ parseTagString(
++position;
}
- subtagLength = ulocimp_getScript(position, script, *scriptLength, &position);
- u_terminateChars(script, *scriptLength, subtagLength, err);
+ subtagLength = ulocimp_getScript(position, &position, *err).extract(script, *scriptLength, *err);
if(U_FAILURE(*err)) {
goto error;
@@ -511,8 +509,7 @@ parseTagString(
}
}
- subtagLength = ulocimp_getCountry(position, region, *regionLength, &position);
- u_terminateChars(region, *regionLength, subtagLength, err);
+ subtagLength = ulocimp_getCountry(position, &position, *err).extract(region, *regionLength, *err);
if(U_FAILURE(*err)) {
goto error;
@@ -826,7 +823,7 @@ error:
} \
} UPRV_BLOCK_MACRO_END
-static void
+static UBool
_uloc_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
UErrorCode* err) {
@@ -897,15 +894,22 @@ _uloc_addLikelySubtags(const char* localeID,
sink.Append(localeID, localIDLength);
}
- return;
+ return success;
error:
if (!U_FAILURE(*err)) {
*err = U_ILLEGAL_ARGUMENT_ERROR;
}
+ return FALSE;
}
+// Add likely subtags to the sink
+// return true if the value in the sink is produced by a match during the lookup
+// return false if the value in the sink is the same as input because there are
+// no match after the lookup.
+static UBool _ulocimp_addLikelySubtags(const char*, icu::ByteSink&, UErrorCode*);
+
static void
_uloc_minimizeSubtags(const char* localeID,
icu::ByteSink& sink,
@@ -921,6 +925,7 @@ _uloc_minimizeSubtags(const char* localeID,
const char* trailing = "";
int32_t trailingLength = 0;
int32_t trailingIndex = 0;
+ UBool successGetMax = FALSE;
if(U_FAILURE(*err)) {
goto error;
@@ -961,7 +966,7 @@ _uloc_minimizeSubtags(const char* localeID,
{
icu::CharString base;
{
- icu::CharStringByteSink sink(&base);
+ icu::CharStringByteSink baseSink(&base);
createTagString(
lang,
langLength,
@@ -971,7 +976,7 @@ _uloc_minimizeSubtags(const char* localeID,
regionLength,
NULL,
0,
- sink,
+ baseSink,
err);
}
@@ -980,8 +985,8 @@ _uloc_minimizeSubtags(const char* localeID,
* from AddLikelySubtags.
**/
{
- icu::CharStringByteSink sink(&maximizedTagBuffer);
- ulocimp_addLikelySubtags(base.data(), sink, err);
+ icu::CharStringByteSink maxSink(&maximizedTagBuffer);
+ successGetMax = _ulocimp_addLikelySubtags(base.data(), maxSink, err);
}
}
@@ -989,13 +994,40 @@ _uloc_minimizeSubtags(const char* localeID,
goto error;
}
+ if (!successGetMax) {
+ /**
+ * If we got here, return the locale ID parameter unchanged.
+ **/
+ const int32_t localeIDLength = (int32_t)uprv_strlen(localeID);
+ sink.Append(localeID, localeIDLength);
+ return;
+ }
+
+ // In the following, the lang, script, region are referring to those in
+ // the maximizedTagBuffer, not the one in the localeID.
+ langLength = sizeof(lang);
+ scriptLength = sizeof(script);
+ regionLength = sizeof(region);
+ parseTagString(
+ maximizedTagBuffer.data(),
+ lang,
+ &langLength,
+ script,
+ &scriptLength,
+ region,
+ &regionLength,
+ err);
+ if(U_FAILURE(*err)) {
+ goto error;
+ }
+
/**
* Start first with just the language.
**/
{
icu::CharString tagBuffer;
{
- icu::CharStringByteSink sink(&tagBuffer);
+ icu::CharStringByteSink tagSink(&tagBuffer);
createLikelySubtagsString(
lang,
langLength,
@@ -1005,14 +1037,15 @@ _uloc_minimizeSubtags(const char* localeID,
0,
NULL,
0,
- sink,
+ tagSink,
err);
}
if(U_FAILURE(*err)) {
goto error;
}
- else if (!tagBuffer.isEmpty() && uprv_strnicmp(
+ else if (!tagBuffer.isEmpty() &&
+ uprv_strnicmp(
maximizedTagBuffer.data(),
tagBuffer.data(),
tagBuffer.length()) == 0) {
@@ -1039,7 +1072,7 @@ _uloc_minimizeSubtags(const char* localeID,
icu::CharString tagBuffer;
{
- icu::CharStringByteSink sink(&tagBuffer);
+ icu::CharStringByteSink tagSink(&tagBuffer);
createLikelySubtagsString(
lang,
langLength,
@@ -1049,14 +1082,15 @@ _uloc_minimizeSubtags(const char* localeID,
regionLength,
NULL,
0,
- sink,
+ tagSink,
err);
}
if(U_FAILURE(*err)) {
goto error;
}
- else if (uprv_strnicmp(
+ else if (!tagBuffer.isEmpty() &&
+ uprv_strnicmp(
maximizedTagBuffer.data(),
tagBuffer.data(),
tagBuffer.length()) == 0) {
@@ -1081,10 +1115,10 @@ _uloc_minimizeSubtags(const char* localeID,
* since trying with all three subtags would only yield the
* maximal version that we already have.
**/
- if (scriptLength > 0 && regionLength > 0) {
+ if (scriptLength > 0) {
icu::CharString tagBuffer;
{
- icu::CharStringByteSink sink(&tagBuffer);
+ icu::CharStringByteSink tagSink(&tagBuffer);
createLikelySubtagsString(
lang,
langLength,
@@ -1094,14 +1128,15 @@ _uloc_minimizeSubtags(const char* localeID,
0,
NULL,
0,
- sink,
+ tagSink,
err);
}
if(U_FAILURE(*err)) {
goto error;
}
- else if (uprv_strnicmp(
+ else if (!tagBuffer.isEmpty() &&
+ uprv_strnicmp(
maximizedTagBuffer.data(),
tagBuffer.data(),
tagBuffer.length()) == 0) {
@@ -1123,10 +1158,19 @@ _uloc_minimizeSubtags(const char* localeID,
{
/**
- * If we got here, return the locale ID parameter.
+ * If we got here, return the max + trail.
**/
- const int32_t localeIDLength = (int32_t)uprv_strlen(localeID);
- sink.Append(localeID, localeIDLength);
+ createTagString(
+ lang,
+ langLength,
+ script,
+ scriptLength,
+ region,
+ regionLength,
+ trailing,
+ trailingLength,
+ sink,
+ err);
return;
}
@@ -1193,15 +1237,23 @@ uloc_addLikelySubtags(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
-ulocimp_addLikelySubtags(const char* localeID,
- icu::ByteSink& sink,
- UErrorCode* status) {
+static UBool
+_ulocimp_addLikelySubtags(const char* localeID,
+ icu::ByteSink& sink,
+ UErrorCode* status) {
char localeBuffer[ULOC_FULLNAME_CAPACITY];
if (do_canonicalize(localeID, localeBuffer, sizeof localeBuffer, status)) {
- _uloc_addLikelySubtags(localeBuffer, sink, status);
+ return _uloc_addLikelySubtags(localeBuffer, sink, status);
}
+ return FALSE;
+}
+
+U_CAPI void U_EXPORT2
+ulocimp_addLikelySubtags(const char* localeID,
+ icu::ByteSink& sink,
+ UErrorCode* status) {
+ _ulocimp_addLikelySubtags(localeID, sink, status);
}
U_CAPI int32_t U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp b/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
index d7f5e124c2c..a031bfa5872 100644
--- a/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// loclikelysubtags.cpp
// created: 2019may08 Markus W. Scherer
@@ -20,6 +20,7 @@
#include "uhash.h"
#include "uinvchar.h"
#include "umutex.h"
+#include "uniquecharstr.h"
#include "uresdata.h"
#include "uresimp.h"
@@ -31,71 +32,6 @@ constexpr char PSEUDO_ACCENTS_PREFIX = '\''; // -XA, -PSACCENT
constexpr char PSEUDO_BIDI_PREFIX = '+'; // -XB, -PSBIDI
constexpr char PSEUDO_CRACKED_PREFIX = ','; // -XC, -PSCRACK
-/**
- * Stores NUL-terminated strings with duplicate elimination.
- * Checks for unique UTF-16 string pointers and converts to invariant characters.
- */
-class UniqueCharStrings {
-public:
- UniqueCharStrings(UErrorCode &errorCode) : strings(nullptr) {
- uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
- if (U_FAILURE(errorCode)) { return; }
- strings = new CharString();
- if (strings == nullptr) {
- errorCode = U_MEMORY_ALLOCATION_ERROR;
- }
- }
- ~UniqueCharStrings() {
- uhash_close(&map);
- delete strings;
- }
-
- /** Returns/orphans the CharString that contains all strings. */
- CharString *orphanCharStrings() {
- CharString *result = strings;
- strings = nullptr;
- return result;
- }
-
- /** Adds a string and returns a unique number for it. */
- int32_t add(const UnicodeString &s, UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) { return 0; }
- if (isFrozen) {
- errorCode = U_NO_WRITE_PERMISSION;
- return 0;
- }
- // The string points into the resource bundle.
- const char16_t *p = s.getBuffer();
- int32_t oldIndex = uhash_geti(&map, p);
- if (oldIndex != 0) { // found duplicate
- return oldIndex;
- }
- // Explicit NUL terminator for the previous string.
- // The strings object is also terminated with one implicit NUL.
- strings->append(0, errorCode);
- int32_t newIndex = strings->length();
- strings->appendInvariantChars(s, errorCode);
- uhash_puti(&map, const_cast<char16_t *>(p), newIndex, &errorCode);
- return newIndex;
- }
-
- void freeze() { isFrozen = true; }
-
- /**
- * Returns a string pointer for its unique number, if this object is frozen.
- * Otherwise nullptr.
- */
- const char *get(int32_t i) const {
- U_ASSERT(isFrozen);
- return isFrozen && i > 0 ? strings->data() + i : nullptr;
- }
-
-private:
- UHashtable map;
- CharString *strings;
- bool isFrozen = false;
-};
-
} // namespace
LocaleDistanceData::LocaleDistanceData(LocaleDistanceData &&data) :
@@ -250,7 +186,8 @@ struct XLikelySubtagsData {
for (int32_t i = 0, j = 0; i < lsrSubtagsLength; i += 3, ++j) {
lsrs[j] = LSR(strings.get(lsrSubtagIndexes[i]),
strings.get(lsrSubtagIndexes[i + 1]),
- strings.get(lsrSubtagIndexes[i + 2]));
+ strings.get(lsrSubtagIndexes[i + 2]),
+ LSR::IMPLICIT_LSR);
}
if (partitionsLength > 0) {
@@ -275,7 +212,8 @@ struct XLikelySubtagsData {
for (int32_t i = 0, j = 0; i < paradigmSubtagsLength; i += 3, ++j) {
paradigms[j] = LSR(strings.get(paradigmSubtagIndexes[i]),
strings.get(paradigmSubtagIndexes[i + 1]),
- strings.get(paradigmSubtagIndexes[i + 2]));
+ strings.get(paradigmSubtagIndexes[i + 2]),
+ LSR::DONT_CARE_FLAGS);
}
distanceData.paradigms = paradigms;
}
@@ -383,7 +321,7 @@ LSR XLikelySubtags::makeMaximizedLsrFrom(const Locale &locale, UErrorCode &error
const char *name = locale.getName();
if (uprv_isAtSign(name[0]) && name[1] == 'x' && name[2] == '=') { // name.startsWith("@x=")
// Private use language tag x-subtag-subtag...
- return LSR(name, "", "");
+ return LSR(name, "", "", LSR::EXPLICIT_LSR);
}
return makeMaximizedLsr(locale.getLanguage(), locale.getScript(), locale.getCountry(),
locale.getVariant(), errorCode);
@@ -407,26 +345,31 @@ LSR XLikelySubtags::makeMaximizedLsr(const char *language, const char *script, c
if (region[0] == 'X' && (c1 = region[1]) != 0 && region[2] == 0) {
switch (c1) {
case 'A':
- return LSR(PSEUDO_ACCENTS_PREFIX, language, script, region, errorCode);
+ return LSR(PSEUDO_ACCENTS_PREFIX, language, script, region,
+ LSR::EXPLICIT_LSR, errorCode);
case 'B':
- return LSR(PSEUDO_BIDI_PREFIX, language, script, region, errorCode);
+ return LSR(PSEUDO_BIDI_PREFIX, language, script, region,
+ LSR::EXPLICIT_LSR, errorCode);
case 'C':
- return LSR(PSEUDO_CRACKED_PREFIX, language, script, region, errorCode);
+ return LSR(PSEUDO_CRACKED_PREFIX, language, script, region,
+ LSR::EXPLICIT_LSR, errorCode);
default: // normal locale
break;
}
}
if (variant[0] == 'P' && variant[1] == 'S') {
+ int32_t lsrFlags = *region == 0 ?
+ LSR::EXPLICIT_LANGUAGE | LSR::EXPLICIT_SCRIPT : LSR::EXPLICIT_LSR;
if (uprv_strcmp(variant, "PSACCENT") == 0) {
return LSR(PSEUDO_ACCENTS_PREFIX, language, script,
- *region == 0 ? "XA" : region, errorCode);
+ *region == 0 ? "XA" : region, lsrFlags, errorCode);
} else if (uprv_strcmp(variant, "PSBIDI") == 0) {
return LSR(PSEUDO_BIDI_PREFIX, language, script,
- *region == 0 ? "XB" : region, errorCode);
+ *region == 0 ? "XB" : region, lsrFlags, errorCode);
} else if (uprv_strcmp(variant, "PSCRACK") == 0) {
return LSR(PSEUDO_CRACKED_PREFIX, language, script,
- *region == 0 ? "XC" : region, errorCode);
+ *region == 0 ? "XC" : region, lsrFlags, errorCode);
}
// else normal locale
}
@@ -448,7 +391,7 @@ LSR XLikelySubtags::maximize(const char *language, const char *script, const cha
region = "";
}
if (*script != 0 && *region != 0 && *language != 0) {
- return LSR(language, script, region); // already maximized
+ return LSR(language, script, region, LSR::EXPLICIT_LSR); // already maximized
}
uint32_t retainOldMask = 0;
@@ -535,7 +478,7 @@ LSR XLikelySubtags::maximize(const char *language, const char *script, const cha
if (retainOldMask == 0) {
// Quickly return a copy of the lookup-result LSR
// without new allocation of the subtags.
- return LSR(result.language, result.script, result.region);
+ return LSR(result.language, result.script, result.region, result.flags);
}
if ((retainOldMask & 4) == 0) {
language = result.language;
@@ -546,7 +489,108 @@ LSR XLikelySubtags::maximize(const char *language, const char *script, const cha
if ((retainOldMask & 1) == 0) {
region = result.region;
}
- return LSR(language, script, region);
+ // retainOldMask flags = LSR explicit-subtag flags
+ return LSR(language, script, region, retainOldMask);
+}
+
+int32_t XLikelySubtags::compareLikely(const LSR &lsr, const LSR &other, int32_t likelyInfo) const {
+ // If likelyInfo >= 0:
+ // likelyInfo bit 1 is set if the previous comparison with lsr
+ // was for equal language and script.
+ // Otherwise the scripts differed.
+ if (uprv_strcmp(lsr.language, other.language) != 0) {
+ return 0xfffffffc; // negative, lsr not better than other
+ }
+ if (uprv_strcmp(lsr.script, other.script) != 0) {
+ int32_t index;
+ if (likelyInfo >= 0 && (likelyInfo & 2) == 0) {
+ index = likelyInfo >> 2;
+ } else {
+ index = getLikelyIndex(lsr.language, "");
+ likelyInfo = index << 2;
+ }
+ const LSR &likely = lsrs[index];
+ if (uprv_strcmp(lsr.script, likely.script) == 0) {
+ return likelyInfo | 1;
+ } else {
+ return likelyInfo & ~1;
+ }
+ }
+ if (uprv_strcmp(lsr.region, other.region) != 0) {
+ int32_t index;
+ if (likelyInfo >= 0 && (likelyInfo & 2) != 0) {
+ index = likelyInfo >> 2;
+ } else {
+ index = getLikelyIndex(lsr.language, lsr.region);
+ likelyInfo = (index << 2) | 2;
+ }
+ const LSR &likely = lsrs[index];
+ if (uprv_strcmp(lsr.region, likely.region) == 0) {
+ return likelyInfo | 1;
+ } else {
+ return likelyInfo & ~1;
+ }
+ }
+ return likelyInfo & ~1; // lsr not better than other
+}
+
+// Subset of maximize().
+int32_t XLikelySubtags::getLikelyIndex(const char *language, const char *script) const {
+ if (uprv_strcmp(language, "und") == 0) {
+ language = "";
+ }
+ if (uprv_strcmp(script, "Zzzz") == 0) {
+ script = "";
+ }
+
+ BytesTrie iter(trie);
+ uint64_t state;
+ int32_t value;
+ // Small optimization: Array lookup for first language letter.
+ int32_t c0;
+ if (0 <= (c0 = uprv_lowerOrdinal(language[0])) && c0 <= 25 &&
+ language[1] != 0 && // language.length() >= 2
+ (state = trieFirstLetterStates[c0]) != 0) {
+ value = trieNext(iter.resetToState64(state), language, 1);
+ } else {
+ value = trieNext(iter, language, 0);
+ }
+ if (value >= 0) {
+ state = iter.getState64();
+ } else {
+ iter.resetToState64(trieUndState); // "und" ("*")
+ state = 0;
+ }
+
+ if (value > 0) {
+ // Intermediate or final value from just language.
+ if (value == SKIP_SCRIPT) {
+ value = 0;
+ }
+ } else {
+ value = trieNext(iter, script, 0);
+ if (value >= 0) {
+ state = iter.getState64();
+ } else {
+ if (state == 0) {
+ iter.resetToState64(trieUndZzzzState); // "und-Zzzz" ("**")
+ } else {
+ iter.resetToState64(state);
+ value = trieNext(iter, "", 0);
+ U_ASSERT(value >= 0);
+ state = iter.getState64();
+ }
+ }
+ }
+
+ if (value > 0) {
+ // Final value from just language or language+script.
+ } else {
+ value = trieNext(iter, "", 0);
+ U_ASSERT(value > 0);
+ }
+ U_ASSERT(value < lsrsLength);
+ return value;
}
int32_t XLikelySubtags::trieNext(BytesTrie &iter, const char *s, int32_t i) {
@@ -615,9 +659,9 @@ LSR XLikelySubtags::minimizeSubtags(const char *languageIn, const char *scriptIn
boolean favorRegionOk = false;
if (result.script.equals(value00.script)) { //script is default
if (result.region.equals(value00.region)) {
- return new LSR(result.language, "", "");
+ return new LSR(result.language, "", "", LSR.DONT_CARE_FLAGS);
} else if (fieldToFavor == ULocale.Minimize.FAVOR_REGION) {
- return new LSR(result.language, "", result.region);
+ return new LSR(result.language, "", result.region, LSR.DONT_CARE_FLAGS);
} else {
favorRegionOk = true;
}
@@ -627,9 +671,9 @@ LSR XLikelySubtags::minimizeSubtags(const char *languageIn, const char *scriptIn
// Maybe do later, but for now use the straightforward code.
LSR result2 = maximize(languageIn, scriptIn, "");
if (result2.equals(result)) {
- return new LSR(result.language, result.script, "");
+ return new LSR(result.language, result.script, "", LSR.DONT_CARE_FLAGS);
} else if (favorRegionOk) {
- return new LSR(result.language, "", result.region);
+ return new LSR(result.language, "", result.region, LSR.DONT_CARE_FLAGS);
}
return result;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h b/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h
index 8c8a08ac5e3..14a01a5eac7 100644
--- a/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h
+++ b/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.h
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// loclikelysubtags.h
// created: 2019may08 Markus W. Scherer
@@ -13,49 +13,13 @@
#include "unicode/locid.h"
#include "unicode/uobject.h"
#include "unicode/ures.h"
+#include "charstrmap.h"
#include "lsr.h"
-#include "uhash.h"
U_NAMESPACE_BEGIN
struct XLikelySubtagsData;
-/**
- * Map of const char * keys & values.
- * Stores pointers as is: Does not own/copy/adopt/release strings.
- */
-class CharStringMap final : public UMemory {
-public:
- /** Constructs an unusable non-map. */
- CharStringMap() : map(nullptr) {}
- CharStringMap(int32_t size, UErrorCode &errorCode) {
- map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars,
- size, &errorCode);
- }
- CharStringMap(CharStringMap &&other) U_NOEXCEPT : map(other.map) {
- other.map = nullptr;
- }
- CharStringMap(const CharStringMap &other) = delete;
- ~CharStringMap() {
- uhash_close(map);
- }
-
- CharStringMap &operator=(CharStringMap &&other) U_NOEXCEPT {
- map = other.map;
- other.map = nullptr;
- return *this;
- }
- CharStringMap &operator=(const CharStringMap &other) = delete;
-
- const char *get(const char *key) const { return static_cast<const char *>(uhash_get(map, key)); }
- void put(const char *key, const char *value, UErrorCode &errorCode) {
- uhash_put(map, const_cast<char *>(key), const_cast<char *>(value), &errorCode);
- }
-
-private:
- UHashtable *map;
-};
-
struct LocaleDistanceData {
LocaleDistanceData() = default;
LocaleDistanceData(LocaleDistanceData &&data);
@@ -85,6 +49,18 @@ public:
// VisibleForTesting
LSR makeMaximizedLsrFrom(const Locale &locale, UErrorCode &errorCode) const;
+ /**
+ * Tests whether lsr is "more likely" than other.
+ * For example, fr-Latn-FR is more likely than fr-Latn-CH because
+ * FR is the default region for fr-Latn.
+ *
+ * The likelyInfo caches lookup information between calls.
+ * The return value is an updated likelyInfo value,
+ * with bit 0 set if lsr is "more likely".
+ * The initial value of likelyInfo must be negative.
+ */
+ int32_t compareLikely(const LSR &lsr, const LSR &other, int32_t likelyInfo) const;
+
// TODO(ICU-20777): Switch Locale/uloc_ likely-subtags API from the old code
// in loclikely.cpp to this new code, including activating this
// minimizeSubtags() function. The LocaleMatcher does not minimize.
@@ -111,6 +87,8 @@ private:
*/
LSR maximize(const char *language, const char *script, const char *region) const;
+ int32_t getLikelyIndex(const char *language, const char *script) const;
+
static int32_t trieNext(BytesTrie &iter, const char *s, int32_t i);
UResourceBundle *langInfoBundle;
diff --git a/Build/source/libs/icu/icu-src/source/common/locmap.cpp b/Build/source/libs/icu/icu-src/source/common/locmap.cpp
index a6311343551..29a5646385e 100644
--- a/Build/source/libs/icu/icu-src/source/common/locmap.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locmap.cpp
@@ -28,8 +28,11 @@
*/
#include "locmap.h"
+#include "bytesinkutil.h"
+#include "charstr.h"
#include "cstring.h"
#include "cmemory.h"
+#include "ulocimp.h"
#include "unicode/uloc.h"
#if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API
@@ -1167,15 +1170,18 @@ uprv_convertToLCIDPlatform(const char* localeID, UErrorCode* status)
// conversion functionality when available.
#if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API
int32_t len;
- char collVal[ULOC_KEYWORDS_CAPACITY] = {};
char baseName[ULOC_FULLNAME_CAPACITY] = {};
const char * mylocaleID = localeID;
// Check any for keywords.
if (uprv_strchr(localeID, '@'))
{
- len = uloc_getKeywordValue(localeID, "collation", collVal, UPRV_LENGTHOF(collVal) - 1, status);
- if (U_SUCCESS(*status) && len > 0)
+ icu::CharString collVal;
+ {
+ icu::CharStringByteSink sink(&collVal);
+ ulocimp_getKeywordValue(localeID, "collation", sink, status);
+ }
+ if (U_SUCCESS(*status) && !collVal.isEmpty())
{
// If it contains the keyword collation, return 0 so that the LCID lookup table will be used.
return 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/lsr.cpp b/Build/source/libs/icu/icu-src/source/common/lsr.cpp
index 0c28eeda1bc..b81808f2c4a 100644
--- a/Build/source/libs/icu/icu-src/source/common/lsr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/lsr.cpp
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// lsr.cpp
// created: 2019may08 Markus W. Scherer
@@ -14,9 +14,10 @@
U_NAMESPACE_BEGIN
-LSR::LSR(char prefix, const char *lang, const char *scr, const char *r, UErrorCode &errorCode) :
+LSR::LSR(char prefix, const char *lang, const char *scr, const char *r, int32_t f,
+ UErrorCode &errorCode) :
language(nullptr), script(nullptr), region(r),
- regionIndex(indexForRegion(region)) {
+ regionIndex(indexForRegion(region)), flags(f) {
if (U_SUCCESS(errorCode)) {
CharString langScript;
langScript.append(prefix, errorCode).append(lang, errorCode).append('\0', errorCode);
@@ -32,7 +33,8 @@ LSR::LSR(char prefix, const char *lang, const char *scr, const char *r, UErrorCo
LSR::LSR(LSR &&other) U_NOEXCEPT :
language(other.language), script(other.script), region(other.region), owned(other.owned),
- regionIndex(other.regionIndex), hashCode(other.hashCode) {
+ regionIndex(other.regionIndex), flags(other.flags),
+ hashCode(other.hashCode) {
if (owned != nullptr) {
other.language = other.script = "";
other.owned = nullptr;
@@ -50,6 +52,7 @@ LSR &LSR::operator=(LSR &&other) U_NOEXCEPT {
script = other.script;
region = other.region;
regionIndex = other.regionIndex;
+ flags = other.flags;
owned = other.owned;
hashCode = other.hashCode;
if (owned != nullptr) {
@@ -60,7 +63,7 @@ LSR &LSR::operator=(LSR &&other) U_NOEXCEPT {
return *this;
}
-UBool LSR::operator==(const LSR &other) const {
+UBool LSR::isEquivalentTo(const LSR &other) const {
return
uprv_strcmp(language, other.language) == 0 &&
uprv_strcmp(script, other.script) == 0 &&
@@ -69,6 +72,16 @@ UBool LSR::operator==(const LSR &other) const {
(regionIndex > 0 || uprv_strcmp(region, other.region) == 0);
}
+UBool LSR::operator==(const LSR &other) const {
+ return
+ uprv_strcmp(language, other.language) == 0 &&
+ uprv_strcmp(script, other.script) == 0 &&
+ regionIndex == other.regionIndex &&
+ // Compare regions if both are ill-formed (and their indexes are 0).
+ (regionIndex > 0 || uprv_strcmp(region, other.region) == 0) &&
+ flags == other.flags;
+}
+
int32_t LSR::indexForRegion(const char *region) {
int32_t c = region[0];
int32_t a = c - '0';
@@ -90,10 +103,10 @@ int32_t LSR::indexForRegion(const char *region) {
LSR &LSR::setHashCode() {
if (hashCode == 0) {
- hashCode =
- (ustr_hashCharsN(language, static_cast<int32_t>(uprv_strlen(language))) * 37 +
- ustr_hashCharsN(script, static_cast<int32_t>(uprv_strlen(script)))) * 37 +
- regionIndex;
+ uint32_t h = ustr_hashCharsN(language, static_cast<int32_t>(uprv_strlen(language)));
+ h = h * 37 + ustr_hashCharsN(script, static_cast<int32_t>(uprv_strlen(script)));
+ h = h * 37 + regionIndex;
+ hashCode = h * 37 + flags;
}
return *this;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/lsr.h b/Build/source/libs/icu/icu-src/source/common/lsr.h
index db6cf938f47..a33f8552453 100644
--- a/Build/source/libs/icu/icu-src/source/common/lsr.h
+++ b/Build/source/libs/icu/icu-src/source/common/lsr.h
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// lsr.h
// created: 2019may08 Markus W. Scherer
@@ -16,26 +16,35 @@ U_NAMESPACE_BEGIN
struct LSR final : public UMemory {
static constexpr int32_t REGION_INDEX_LIMIT = 1001 + 26 * 26;
+ static constexpr int32_t EXPLICIT_LSR = 7;
+ static constexpr int32_t EXPLICIT_LANGUAGE = 4;
+ static constexpr int32_t EXPLICIT_SCRIPT = 2;
+ static constexpr int32_t EXPLICIT_REGION = 1;
+ static constexpr int32_t IMPLICIT_LSR = 0;
+ static constexpr int32_t DONT_CARE_FLAGS = 0;
+
const char *language;
const char *script;
const char *region;
char *owned = nullptr;
/** Index for region, 0 if ill-formed. @see indexForRegion */
int32_t regionIndex = 0;
+ int32_t flags = 0;
/** Only set for LSRs that will be used in a hash table. */
int32_t hashCode = 0;
LSR() : language("und"), script(""), region("") {}
/** Constructor which aliases all subtag pointers. */
- LSR(const char *lang, const char *scr, const char *r) :
+ LSR(const char *lang, const char *scr, const char *r, int32_t f) :
language(lang), script(scr), region(r),
- regionIndex(indexForRegion(region)) {}
+ regionIndex(indexForRegion(region)), flags(f) {}
/**
* Constructor which prepends the prefix to the language and script,
* copies those into owned memory, and aliases the region.
*/
- LSR(char prefix, const char *lang, const char *scr, const char *r, UErrorCode &errorCode);
+ LSR(char prefix, const char *lang, const char *scr, const char *r, int32_t f,
+ UErrorCode &errorCode);
LSR(LSR &&other) U_NOEXCEPT;
LSR(const LSR &other) = delete;
inline ~LSR() {
@@ -55,6 +64,7 @@ struct LSR final : public UMemory {
*/
static int32_t indexForRegion(const char *region);
+ UBool isEquivalentTo(const LSR &other) const;
UBool operator==(const LSR &other) const;
inline UBool operator!=(const LSR &other) const {
diff --git a/Build/source/libs/icu/icu-src/source/common/messageimpl.h b/Build/source/libs/icu/icu-src/source/common/messageimpl.h
index dc7a6edd6c0..a56479066bc 100644
--- a/Build/source/libs/icu/icu-src/source/common/messageimpl.h
+++ b/Build/source/libs/icu/icu-src/source/common/messageimpl.h
@@ -33,7 +33,7 @@ U_NAMESPACE_BEGIN
class U_COMMON_API MessageImpl {
public:
/**
- * @return TRUE if getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED
+ * @return true if getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED
*/
static UBool jdkAposMode(const MessagePattern &msgPattern) {
return msgPattern.getApostropheMode()==UMSGPAT_APOS_DOUBLE_REQUIRED;
diff --git a/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h b/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
index c04bdac5ead..455cc0c4285 100644
--- a/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
@@ -12,27 +12,27 @@
#ifdef INCLUDED_FROM_NORMALIZER2_CPP
static const UVersionInfo norm2_nfc_data_formatVersion={4,0,0,0};
-static const UVersionInfo norm2_nfc_data_dataVersion={0xc,1,0,0};
+static const UVersionInfo norm2_nfc_data_dataVersion={0xd,0,0,0};
static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={
-0x50,0x4ae0,0x8738,0x8838,0x8838,0x8838,0x8838,0x8838,0xc0,0x300,0xadc,0x29d0,0x3c56,0xfc00,0x1282,0x3b8c,
-0x3c24,0x3c56,0x300,0
+0x50,0x4bac,0x8814,0x8914,0x8914,0x8914,0x8914,0x8914,0xc0,0x300,0xae2,0x29e0,0x3c66,0xfc00,0x1288,0x3b9c,
+0x3c34,0x3c66,0x300,0
};
-static const uint16_t norm2_nfc_data_trieIndex[1712]={
+static const uint16_t norm2_nfc_data_trieIndex[1746]={
0,0x40,0x7b,0xbb,0xfb,0x13a,0x17a,0x1b2,0x1f2,0x226,0x254,0x226,0x294,0x2d4,0x313,0x353,
0x393,0x3d2,0x40f,0x44e,0x226,0x226,0x488,0x4c8,0x4f8,0x530,0x226,0x570,0x59f,0x5de,0x226,0x5f3,
0x631,0x65f,0x226,0x68c,0x6cc,0x709,0x729,0x768,0x7a7,0x7e4,0x803,0x840,0x729,0x879,0x8a7,0x8e6,
0x226,0x920,0x937,0x977,0x98e,0x9cd,0x226,0xa03,0xa23,0xa5e,0xa6a,0xaa5,0xacd,0xb0a,0xb4a,0xb84,
0xb9f,0x226,0xbda,0x226,0xc1a,0xc39,0xc6f,0xcac,0x226,0x226,0x226,0x226,0x226,0xccf,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xcfb,0x226,0x226,0xd30,
-0x226,0x226,0xd4e,0x226,0xd78,0x226,0x226,0x226,0xdb4,0xdd4,0xe14,0x226,0xe52,0xe92,0xec6,0xef2,
-0x808,0x226,0x226,0xf26,0x226,0x226,0x226,0xf66,0xfa6,0xfe6,0x1026,0x1066,0x10a6,0x10e6,0x1126,0x1166,
-0x11a6,0x226,0x226,0x11d6,0x1207,0x226,0x1237,0x126a,0x12a7,0x12e6,0x1326,0x135c,0x138a,0x226,0x226,0x226,
+0x226,0x226,0xd4e,0x226,0xd78,0x226,0x226,0x226,0xdb4,0xdd4,0xe14,0xe53,0xe8e,0xece,0xf02,0xf2e,
+0x808,0x226,0x226,0xf62,0x226,0x226,0x226,0xfa2,0xfe2,0x1022,0x1062,0x10a2,0x10e2,0x1122,0x1162,0x11a2,
+0x11e2,0x226,0x226,0x1212,0x1243,0x226,0x1273,0x12a6,0x12e3,0x1322,0x1362,0x1398,0x13c6,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x13b5,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0xcbd,0x226,0x13d2,0x226,0x1412,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x1452,0x148c,0x14ca,0x150a,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x13f1,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0xcbd,0x226,0x140e,0x226,0x144e,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x148e,0x14c8,0x1506,0x1546,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
@@ -61,20 +61,20 @@ static const uint16_t norm2_nfc_data_trieIndex[1712]={
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1549,0x1587,0x15a7,0x226,0x226,0x226,0x226,
-0x15e1,0x226,0x226,0x161d,0x164f,0x167d,0x80c,0x1690,0x226,0x226,0x16a0,0x16e0,0x226,0x226,0x226,0x13e4,
-0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,
-0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,
-0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,
-0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,
-0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,
-0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,
-0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,
-0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,
-0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,
-0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,
-0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x1734,0x1720,0x1728,0x1730,0x1738,0x1724,0x172c,0x176c,0x226,
-0x17ac,0x17e7,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1585,0x15c3,0x15e3,0x226,0x226,0x226,0x226,
+0x161d,0x226,0x226,0x1645,0x1677,0x16a5,0x80c,0x16b8,0x226,0x226,0x16c8,0x1708,0x226,0x226,0x226,0x1420,
+0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,
+0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,
+0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,
+0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,
+0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,
+0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,
+0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,
+0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,
+0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,
+0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,
+0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x1794,0x226,
+0x17d4,0x180f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
@@ -82,54 +82,57 @@ static const uint16_t norm2_nfc_data_trieIndex[1712]={
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x1827,0x1867,0x18a7,0x18e7,0x1927,0x1967,0x19a7,0x19e7,0x1a0a,0x1a4a,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1a6a,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x635,0x644,0x65a,0x679,0x68e,0x68e,0x68e,0x692,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x184f,0x188f,0x18cf,0x190f,0x194f,0x198f,0x19cf,0x1a0f,0x1a32,0x1a72,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1a92,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x655,0x664,0x67c,0x69b,0x6b0,0x6b0,0x6b0,0x6b4,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xbda,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x54f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x40c,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1a9d,0x226,0x226,0x1aad,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ac5,0x226,0x226,0x1ad5,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0xdc6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1abd,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ac7,0x54f,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x7eb,0x226,0x226,0x9ba,0x226,0x1ad7,
-0x1ae4,0x1af0,0x226,0x226,0x226,0x226,0x414,0x226,0x1afb,0x1b0b,0x226,0x226,0x226,0x7e0,0x226,0x226,
-0x226,0x226,0x1b1b,0x226,0x226,0x226,0x1b26,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x1b2d,0x226,0x226,0x226,0x226,0x1b38,0x1b47,0x8f6,0x1b55,0x412,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x1b63,0x798,0x226,0x226,0x226,0x226,0x226,0x1b73,0x1b82,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x8d6,0x1b8a,0x1b9a,0x226,0x226,0x226,0x9ba,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ba4,0x226,0x226,0x226,0x226,0x226,0x226,0x7e6,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ba1,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ae5,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x15d6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x1aef,0x54f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x7eb,0x226,0x226,
+0x9ba,0x226,0x1aff,0x1b0c,0x1b18,0x226,0x226,0x226,0x226,0x414,0x226,0x1b23,0x1b33,0x226,0x226,0x226,
+0x7e0,0x226,0x226,0x226,0x226,0x1b43,0x226,0x226,0x226,0x1b4e,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x1b55,0x226,0x226,0x226,0x226,0x1b60,0x1b6f,0x8f6,0x1b7d,0x412,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x1b8b,0x798,0x226,0x226,0x226,0x226,0x226,0x1b9b,0x1baa,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x8d6,0x1bb2,0x1bc2,0x226,
+0x226,0x226,0x9ba,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bcc,0x226,0x226,0x226,0x226,0x226,
+0x226,0x7e6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bc9,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bdc,
+0x7e0,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x84d,0x226,0x226,0x226,0x7ed,0x7ea,
+0x226,0x226,0x226,0x226,0x7e8,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x9ba,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xbd4,0x226,0x226,0x226,
+0x226,0x7ea,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x1bec,0x226,0x226,0x226,0xefb,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x84d,0x226,0x226,0x226,0x7ed,0x7ea,0x226,0x226,0x226,
-0x226,0x7e8,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x9ba,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xbd4,0x226,0x226,0x226,0x226,0x7ea,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bb4,0x226,
-0x226,0x226,0xebf,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bb9,
+0x226,0x226,0x226,0x226,0x226,0x1bfc,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bfe,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x1bc8,0x1bd8,0x1be6,0x1bf3,0x226,0x1bff,0x1c0d,0x1c1d,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x1c0d,0x1c1d,0x1c2b,0x1c38,0x226,0x1c44,0x1c52,0x1c62,0x226,0x226,
0x226,0x226,0xcea,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c2d,0x1c35,
-0x1c43,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0xebf,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c72,0x1c7a,
+0x1c88,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0xefb,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x4fc,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x1c53,0x226,0x226,0x226,0x226,0x226,0x226,0x1c5f,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x1c6f,0x1c7f,0x1c8f,0x1c9f,0x1caf,0x1cbf,0x1ccf,0x1cdf,0x1cef,0x1cff,0x1d0f,
-0x1d1f,0x1d2f,0x1d3f,0x1d4f,0x1d5f,0x1d6f,0x1d7f,0x1d8f,0x1d9f,0x1daf,0x1dbf,0x1dcf,0x1ddf,0x1def,0x1dff,0x1e0f,
-0x1e1f,0x1e2f,0x1e3f,0x1e4f,0x1e5f,0x1e6f,0x1e7f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x1c98,0x226,0x226,0x226,0x226,0x226,0x226,0x1ca4,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x1cb4,0x1cc4,0x1cd4,0x1ce4,0x1cf4,0x1d04,0x1d14,0x1d24,0x1d34,0x1d44,0x1d54,
+0x1d64,0x1d74,0x1d84,0x1d94,0x1da4,0x1db4,0x1dc4,0x1dd4,0x1de4,0x1df4,0x1e04,0x1e14,0x1e24,0x1e34,0x1e44,0x1e54,
+0x1e64,0x1e74,0x1e84,0x1e94,0x1ea4,0x1eb4,0x1ec4,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x408,0x428,0xc4,0xc4,0xc4,0x448,0x457,0x46a,0x486,0x4a3,0x4bf,
-0x4dc,0x4f9,0x518,0x535,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x54f,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
+0x226,0x226,0x226,0x226,0x226,0x408,0x428,0xc4,0xc4,0xc4,0x448,0x457,0x46d,0x489,0x4a6,0x4c2,
+0x4df,0x4fc,0x51b,0x538,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
+0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x552,0xc4,0x566,0xc4,0xc4,0xc4,0xc4,
0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x566,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0x571,0x58e,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x5ae,0x5c2,0xc4,0xc4,0x5d5,0xc4,0xc4,
+0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x586,0xc4,0xc4,0xc4,0xc4,0xc4,
+0xc4,0xc4,0xc4,0x591,0x5ae,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x5ce,0x5e2,0xc4,0xc4,0x5f5,
0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x5f5,0x615
+0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
+0x615,0x635
};
-static const uint16_t norm2_nfc_data_trieData[7824]={
+static const uint16_t norm2_nfc_data_trieData[7892]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -141,30 +144,30 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0x5e8,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x1284,0x128a,0xade,0x1290,0xaf4,
-0xafe,0x5f4,0xb08,0x1296,0x129c,0xb12,0x12a2,0x12a8,0x12ae,0x12b4,0xb28,1,0x12ba,0x12c0,0x12c6,0xb32,
-0xb48,0xb5a,1,0x5fc,0x12cc,0x12d2,0x12d8,0xb64,0x12de,1,1,0x12e4,0x12ea,0xb7a,0x12f0,0xb90,
-0xb9a,0x600,0xba4,0x12f6,0x12fc,0xbae,0x1302,0x1308,0x130e,0x1314,0xbc4,1,0x131a,0x1320,0x1326,0xbce,
-0xbe4,0xbf6,1,0x608,0x132c,0x1332,0x1338,0xc00,0x133e,1,0x1344,0x134a,0x1350,0xc16,0xc2c,0x1357,
-0x135d,0x1362,0x1368,0x136e,0x1374,0x137a,0x1380,0x1386,0x138c,0x1392,0x1398,1,1,0xc42,0xc50,0x139e,
-0x13a4,0x13aa,0x13b0,0x13b7,0x13bd,0x13c2,0x13c8,0x13ce,0x13d4,0x13da,0x13e0,0x13e6,0x13ec,0x13f3,0x13f9,0x13fe,
-0x1404,1,1,0x140a,0x1410,0x1416,0x141c,0x1422,0x1428,0x142f,0x1435,0x143a,1,1,1,0x1441,
-0x1447,0x144d,0x1453,1,0x1458,0x145e,0x1465,0x146b,0x1470,0x1476,1,1,1,0x147c,0x1482,0x1489,
-0x148f,0x1494,0x149a,1,1,1,0xc5e,0xc6c,0x14a0,0x14a6,0x14ac,0x14b2,1,1,0x14b8,0x14be,
-0x14c5,0x14cb,0x14d0,0x14d6,0xc7a,0xc84,0x14dc,0x14e2,0x14e9,0x14ef,0xc8e,0xc98,0x14f5,0x14fb,0x1500,0x1506,
-1,1,0xca2,0xcac,0xcb6,0xcc0,0x150c,0x1512,0x1518,0x151e,0x1524,0x152a,0x1531,0x1537,0x153c,0x1542,
-0x1548,0x154e,0x1554,0x155a,0x1560,0x1566,0x156c,0x1572,0x1578,0x60c,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0xcca,0xce4,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xcfe,0xd18,1,1,1,1,1,
-1,0x610,1,1,1,1,1,1,1,1,1,1,1,1,1,0x157e,
-0x1584,0x158a,0x1590,0x1596,0x159c,0x15a2,0x15a8,0x15b0,0x15ba,0x15c4,0x15ce,0x15d8,0x15e2,0x15ec,0x15f6,1,
-0x1600,0x160a,0x1614,0x161e,0x1627,0x162d,1,1,0x1632,0x1638,0x163e,0x1644,0xd32,0xd3c,0x164d,0x1657,
-0x165f,0x1665,0x166b,1,1,1,0x1670,0x1676,1,1,0x167c,0x1682,0x168a,0x1694,0x169d,0x16a3,
-0x16a9,0x16af,0x16b4,0x16ba,0x16c0,0x16c6,0x16cc,0x16d2,0x16d8,0x16de,0x16e4,0x16ea,0x16f0,0x16f6,0x16fc,0x1702,
-0x1708,0x170e,0x1714,0x171a,0x1720,0x1726,0x172c,0x1732,0x1738,0x173e,0x1744,0x174a,0x1750,0x1756,1,1,
-0x175c,0x1762,1,1,1,1,1,1,0xd46,0xd50,0xd5a,0xd64,0x176a,0x1774,0x177e,0x1788,
-0xd6e,0xd78,0x1792,0x179c,0x17a4,0x17aa,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x128a,0x1290,0xae4,0x1296,0xafa,
+0xb04,0x5f4,0xb0e,0x129c,0x12a2,0xb18,0x12a8,0x12ae,0x12b4,0x12ba,0xb2e,1,0x12c0,0x12c6,0x12cc,0xb38,
+0xb4e,0xb60,1,0x5fc,0x12d2,0x12d8,0x12de,0xb6a,0x12e4,1,1,0x12ea,0x12f0,0xb80,0x12f6,0xb96,
+0xba0,0x600,0xbaa,0x12fc,0x1302,0xbb4,0x1308,0x130e,0x1314,0x131a,0xbca,1,0x1320,0x1326,0x132c,0xbd4,
+0xbea,0xbfc,1,0x608,0x1332,0x1338,0x133e,0xc06,0x1344,1,0x134a,0x1350,0x1356,0xc1c,0xc32,0x135d,
+0x1363,0x1368,0x136e,0x1374,0x137a,0x1380,0x1386,0x138c,0x1392,0x1398,0x139e,1,1,0xc48,0xc56,0x13a4,
+0x13aa,0x13b0,0x13b6,0x13bd,0x13c3,0x13c8,0x13ce,0x13d4,0x13da,0x13e0,0x13e6,0x13ec,0x13f2,0x13f9,0x13ff,0x1404,
+0x140a,1,1,0x1410,0x1416,0x141c,0x1422,0x1428,0x142e,0x1435,0x143b,0x1440,1,1,1,0x1447,
+0x144d,0x1453,0x1459,1,0x145e,0x1464,0x146b,0x1471,0x1476,0x147c,1,1,1,0x1482,0x1488,0x148f,
+0x1495,0x149a,0x14a0,1,1,1,0xc64,0xc72,0x14a6,0x14ac,0x14b2,0x14b8,1,1,0x14be,0x14c4,
+0x14cb,0x14d1,0x14d6,0x14dc,0xc80,0xc8a,0x14e2,0x14e8,0x14ef,0x14f5,0xc94,0xc9e,0x14fb,0x1501,0x1506,0x150c,
+1,1,0xca8,0xcb2,0xcbc,0xcc6,0x1512,0x1518,0x151e,0x1524,0x152a,0x1530,0x1537,0x153d,0x1542,0x1548,
+0x154e,0x1554,0x155a,0x1560,0x1566,0x156c,0x1572,0x1578,0x157e,0x60c,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xcd0,0xcea,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xd04,0xd1e,1,1,1,1,1,
+1,0x610,1,1,1,1,1,1,1,1,1,1,1,1,1,0x1584,
+0x158a,0x1590,0x1596,0x159c,0x15a2,0x15a8,0x15ae,0x15b6,0x15c0,0x15ca,0x15d4,0x15de,0x15e8,0x15f2,0x15fc,1,
+0x1606,0x1610,0x161a,0x1624,0x162d,0x1633,1,1,0x1638,0x163e,0x1644,0x164a,0xd38,0xd42,0x1653,0x165d,
+0x1665,0x166b,0x1671,1,1,1,0x1676,0x167c,1,1,0x1682,0x1688,0x1690,0x169a,0x16a3,0x16a9,
+0x16af,0x16b5,0x16ba,0x16c0,0x16c6,0x16cc,0x16d2,0x16d8,0x16de,0x16e4,0x16ea,0x16f0,0x16f6,0x16fc,0x1702,0x1708,
+0x170e,0x1714,0x171a,0x1720,0x1726,0x172c,0x1732,0x1738,0x173e,0x1744,0x174a,0x1750,0x1756,0x175c,1,1,
+0x1762,0x1768,1,1,1,1,1,1,0xd4c,0xd56,0xd60,0xd6a,0x1770,0x177a,0x1784,0x178e,
+0xd74,0xd7e,0x1798,0x17a2,0x17aa,0x17b0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -175,34 +178,34 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
0xfdcc,0xffcc,0xffcc,0xfdcc,0xffcc,0xfdcc,0xffcc,0xfdcc,0xfdcc,0xffd0,0xffb8,0xffb8,0xffb8,0xffb8,0xffd0,0xfdb0,
0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xff94,0xff94,0xfdb8,0xfdb8,0xfdb8,0xfdb8,0xfd94,0xfd94,0xffb8,0xffb8,0xffb8,
0xffb8,0xfdb8,0xfdb8,0xffb8,0xfdb8,0xfdb8,0xffb8,0xffb8,0xfe02,0xfe02,0xfe02,0xfe02,0xfc02,0xffb8,0xffb8,0xffb8,
-0xffb8,0xffcc,0xffcc,0xffcc,0x3c26,0x3c2c,0xfdcc,0x3c32,0x3c38,0xfde0,0xffcc,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,
+0xffb8,0xffcc,0xffcc,0xffcc,0x3c36,0x3c3c,0xfdcc,0x3c42,0x3c48,0xfde0,0xffcc,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,
0xffcc,0xffb8,0xffb8,1,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffd0,0xffb8,0xffb8,0xffcc,
0xffd2,0xffd4,0xffd4,0xffd2,0xffd4,0xffd4,0xffd2,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,0x29d1,1,1,1,1,1,1,1,
-1,1,0x29d5,1,1,1,1,1,0x17b1,0x17b7,0x29d9,0x17bd,0x17c3,0x17c9,1,0x17cf,
-1,0x17d5,0x17db,0x17e3,0x618,1,1,1,0x634,1,0x644,1,0x658,1,1,1,
-1,1,0x674,1,0x684,1,1,1,0x688,1,1,1,0x6a0,0x17eb,0x17f1,0xd82,
-0x17f7,0xd8c,0x17fd,0x1805,0x6b4,1,1,1,0x6d4,1,0x6e4,1,0x6fc,1,1,1,
-1,1,0x71c,1,0x72c,1,1,1,0x734,1,1,1,0x754,0xd96,0xda8,0x180d,
-0x1813,0xdba,1,1,1,0x76c,0x1819,0x181f,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,0x29e1,1,1,1,1,1,1,1,
+1,1,0x29e5,1,1,1,1,1,0x17b7,0x17bd,0x29e9,0x17c3,0x17c9,0x17cf,1,0x17d5,
+1,0x17db,0x17e1,0x17e9,0x618,1,1,1,0x634,1,0x644,1,0x658,1,1,1,
+1,1,0x674,1,0x684,1,1,1,0x688,1,1,1,0x6a0,0x17f1,0x17f7,0xd88,
+0x17fd,0xd92,0x1803,0x180b,0x6b4,1,1,1,0x6d4,1,0x6e4,1,0x6fc,1,1,1,
+1,1,0x71c,1,0x72c,1,1,1,0x734,1,1,1,0x754,0xd9c,0xdae,0x1813,
+0x1819,0xdc0,1,1,1,0x76c,0x181f,0x1825,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x1825,0x182b,1,0x1831,1,1,0x774,0x1837,1,1,1,1,0x183d,
-0x1843,0x1849,1,0x778,1,1,0x780,1,0x784,0x790,0x798,0x79c,0x184f,0x7ac,1,1,
+1,1,1,0x182b,0x1831,1,0x1837,1,1,0x774,0x183d,1,1,1,1,0x1843,
+0x1849,0x184f,1,0x778,1,1,0x780,1,0x784,0x790,0x798,0x79c,0x1855,0x7ac,1,1,
1,0x7b0,1,1,1,1,0x7b4,1,1,1,0x7c4,1,1,1,0x7c8,1,
-0x7cc,1,1,0x7d0,1,1,0x7d8,1,0x7dc,0x7e8,0x7f0,0x7f4,0x1855,0x804,1,1,
+0x7cc,1,1,0x7d0,1,1,0x7d8,1,0x7dc,0x7e8,0x7f0,0x7f4,0x185b,0x804,1,1,
1,0x808,1,1,1,0x80c,1,1,1,0x81c,1,1,1,0x820,1,0x824,
-1,1,0x185b,0x1861,1,0x1867,1,1,0x828,0x186d,1,1,1,1,0x1873,0x1879,
-0x187f,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x82c,0x830,0x1885,0x188b,1,1,1,1,1,1,
+1,1,0x1861,0x1867,1,0x186d,1,1,0x828,0x1873,1,1,1,1,0x1879,0x187f,
+0x1885,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0x82c,0x830,0x188b,0x1891,1,1,1,1,1,1,
1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x1891,
-0x1897,1,1,1,1,1,1,1,1,1,1,1,1,1,0x189d,0x18a3,
-0x18a9,0x18af,1,1,0x18b5,0x18bb,0x834,0x838,0x18c1,0x18c7,0x18cd,0x18d3,0x18d9,0x18df,1,1,
-0x18e5,0x18eb,0x18f1,0x18f7,0x18fd,0x1903,0x83c,0x840,0x1909,0x190f,0x1915,0x191b,0x1921,0x1927,0x192d,0x1933,
-0x1939,0x193f,0x1945,0x194b,1,1,0x1951,0x1957,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x1897,
+0x189d,1,1,1,1,1,1,1,1,1,1,1,1,1,0x18a3,0x18a9,
+0x18af,0x18b5,1,1,0x18bb,0x18c1,0x834,0x838,0x18c7,0x18cd,0x18d3,0x18d9,0x18df,0x18e5,1,1,
+0x18eb,0x18f1,0x18f7,0x18fd,0x1903,0x1909,0x83c,0x840,0x190f,0x1915,0x191b,0x1921,0x1927,0x192d,0x1933,0x1939,
+0x193f,0x1945,0x194b,0x1951,1,1,0x1957,0x195d,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,
0xffcc,0xffcc,0xffbc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffbc,0xffc8,0xffcc,0xfe14,0xfe16,0xfe18,0xfe1a,0xfe1c,0xfe1e,0xfe20,0xfe22,
@@ -211,14 +214,14 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xfe3c,0xfe3e,0xfe40,1,1,1,1,1,1,1,0x195c,0x1962,0x1969,0x196f,0x1975,0x844,
+0xfe3c,0xfe3e,0xfe40,1,1,1,1,1,1,1,0x1962,0x1968,0x196f,0x1975,0x197b,0x844,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0x850,1,0x854,0xfe36,0xfe38,0xfe3a,0xfe3c,0xfe3e,
0xfe40,0xfe42,0xfe44,0xfdcc,0xfdcc,0xfdb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0xfe46,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0x197b,0x858,0x1981,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0x85c,0x1987,1,0x860,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc,
+0x1981,0x858,0x1987,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0x85c,0x198d,1,0x860,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc,
0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,1,1,0xffcc,0xffcc,1,0xffb8,0xffcc,0xffcc,0xffb8,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0xfe48,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -241,24 +244,24 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x864,0x198d,1,1,1,1,1,1,0x868,0x1993,1,0x86c,
-0x1999,1,1,1,1,1,1,1,0xfc0e,1,1,1,1,1,1,1,
+1,1,1,1,0x864,0x1993,1,1,1,1,1,1,0x868,0x1999,1,0x86c,
+0x199f,1,1,1,1,1,1,1,0xfc0e,1,1,1,1,1,1,1,
1,1,1,1,1,1,0xfe12,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,1,1,
-1,0x29dc,0x29e2,0x29e8,0x29ee,0x29f4,0x29fa,0x2a00,0x2a06,1,1,1,1,1,1,1,
+1,0x29ec,0x29f2,0x29f8,0x29fe,0x2a04,0x2a0a,0x2a10,0x2a16,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,0xfe0e,1,0xfc00,1,1,1,1,1,1,1,0x870,
-1,1,1,0x199f,0x19a5,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,
-1,1,1,1,0x2a0c,0x2a12,1,0x2a18,1,1,1,1,1,1,1,1,
+1,1,1,0x19a5,0x19ab,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,
+1,1,1,1,0x2a1c,0x2a22,1,0x2a28,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,0xffcc,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0x2a1e,1,1,0x2a24,1,1,
+1,1,1,1,1,1,1,1,1,1,0x2a2e,1,1,0x2a34,1,1,
1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,0x2a2a,0x2a30,0x2a36,
-1,1,0x2a3c,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,0x2a3a,0x2a40,0x2a46,
+1,1,0x2a4c,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,
@@ -266,33 +269,33 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0x878,0x19ab,1,1,0x19b1,0x19b7,0xfe12,1,1,1,1,1,1,1,1,0xfc00,
-0xfc00,1,1,1,1,0x2a42,0x2a48,1,1,1,1,1,1,1,1,1,
+0x878,0x19b1,1,1,0x19b7,0x19bd,0xfe12,1,1,1,1,1,1,1,1,0xfc00,
+0xfc00,1,1,1,1,0x2a52,0x2a58,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0x884,1,0x19bd,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0x884,1,0x19c3,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,0xfc00,1,1,1,1,1,1,0x888,0x890,1,1,
-0x19c3,0x19c9,0x19cf,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,1,1,
+0x19c9,0x19cf,0x19d5,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x894,1,0x19d5,1,1,1,1,0xfe12,1,1,
+1,1,1,1,1,1,0x894,1,0x19db,1,1,1,1,0xfe12,1,1,
1,1,1,1,1,0xfea8,0xfcb6,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0xfe0e,1,1,0x898,0x19db,1,0xfc00,1,1,1,0x89c,0x19e1,0x19e7,
-1,0xdc4,0x19ef,1,0xfe12,1,1,1,1,1,1,1,0xfc00,0xfc00,1,1,
+1,1,1,0xfe0e,1,1,0x898,0x19e1,1,0xfc00,1,1,1,0x89c,0x19e7,0x19ed,
+1,0xdca,0x19f5,1,0xfe12,1,1,1,1,1,1,1,0xfc00,0xfc00,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,0xfc00,1,1,1,
-1,1,1,0x8a8,0x8b0,1,1,0x19f7,0x19fd,0x1a03,0xfe12,1,1,1,1,1,
+1,1,1,0x8a8,0x8b0,1,1,0x19fd,0x1a03,0x1a09,0xfe12,1,1,1,1,1,
1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,0xfc12,1,1,
-1,1,0xfc00,1,1,1,1,1,1,1,1,1,0x8b4,0x1a09,1,0xdce,
-0x1a11,0x1a19,0xfc00,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xfc00,1,1,1,1,1,1,1,1,1,0x8b4,0x1a0f,1,0xdd4,
+0x1a17,0x1a1f,0xfc00,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,0xfece,0xfece,0xfe12,1,1,
@@ -306,19 +309,19 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffb8,1,0xffb8,1,0xffb0,1,1,1,1,1,1,0x2a4f,1,1,
-1,1,1,1,1,1,1,0x2a55,1,1,1,1,0x2a5b,1,1,1,
-1,0x2a61,1,1,1,1,0x2a67,1,1,1,1,1,1,1,1,1,
-1,1,1,0x2a6d,1,1,1,1,1,1,1,0xff02,0xff04,0x3c40,0xff08,0x3c48,
-0x2a72,1,0x2a78,1,0xff04,0xff04,0xff04,0xff04,1,1,0xff04,0x3c50,0xffcc,0xffcc,0xfe12,1,
-0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x2a7f,1,1,
-1,1,1,1,1,1,1,0x2a85,1,1,1,1,0x2a8b,1,1,1,
-1,0x2a91,1,1,1,1,0x2a97,1,1,1,1,1,1,1,1,1,
-1,1,1,0x2a9d,1,1,1,1,1,1,0xffb8,1,1,1,1,1,
+1,1,0xffb8,1,0xffb8,1,0xffb0,1,1,1,1,1,1,0x2a5f,1,1,
+1,1,1,1,1,1,1,0x2a65,1,1,1,1,0x2a6b,1,1,1,
+1,0x2a71,1,1,1,1,0x2a77,1,1,1,1,1,1,1,1,1,
+1,1,1,0x2a7d,1,1,1,1,1,1,1,0xff02,0xff04,0x3c50,0xff08,0x3c58,
+0x2a82,1,0x2a88,1,0xff04,0xff04,0xff04,0xff04,1,1,0xff04,0x3c60,0xffcc,0xffcc,0xfe12,1,
+0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x2a8f,1,1,
+1,1,1,1,1,1,1,0x2a95,1,1,1,1,0x2a9b,1,1,1,
+1,0x2aa1,1,1,1,1,0x2aa7,1,1,1,1,1,1,1,1,1,
+1,1,1,0x2aad,1,1,1,1,1,1,0xffb8,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x8c0,0x1a1f,1,1,1,1,1,1,1,0xfc00,1,1,
+1,1,1,1,0x8c0,0x1a25,1,1,1,1,1,1,1,0xfc00,1,1,
1,1,1,1,1,1,0xfe0e,1,0xfe12,0xfe12,1,1,1,1,1,1,
1,1,1,1,1,1,1,0xffb8,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -359,272 +362,277 @@ static const uint16_t norm2_nfc_data_trieData[7824]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,
-0xffcc,0xffb8,1,1,1,1,1,0x8c4,0x1a25,0x8c8,0x1a2b,0x8cc,0x1a31,0x8d0,0x1a37,0x8d4,
-0x1a3d,1,1,0x8d8,0x1a43,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffb8,1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0xfe0e,0xfc00,1,1,1,1,0x8dc,0x1a49,0x8e0,0x1a4f,
-0x8e4,0x8e8,0x1a55,0x1a5b,0x8ec,0x1a61,0xfe12,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x8c4,0x1a2b,0x8c8,0x1a31,0x8cc,0x1a37,0x8d0,0x1a3d,0x8d4,0x1a43,1,1,0x8d8,
+0x1a49,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xfe0e,0xfc00,1,1,1,1,0x8dc,0x1a4f,0x8e0,0x1a55,0x8e4,0x8e8,0x1a5b,0x1a61,
+0x8ec,0x1a67,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xfe0e,1,1,1,1,1,1,1,
-1,1,1,1,0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,1,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
-0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,
-1,1,1,0xffb8,1,1,1,1,1,1,0xffcc,1,1,1,0xffcc,0xffcc,
-1,1,1,1,1,1,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffb8,0xffcc,0xffcc,0xffd4,0xffac,0xffb8,0xff94,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+1,1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,
+0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,0xffcc,1,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,
+0xffb8,0xffb8,0xffcc,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,1,0xffb8,
+1,1,1,1,1,1,0xffcc,1,1,1,0xffcc,0xffcc,1,1,1,1,
+1,1,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffd4,
+0xffac,0xffb8,0xff94,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffd0,0xffc8,0xffc8,0xffb8,
-1,0xffcc,0xffd2,0xffb8,0xffcc,0xffb8,0x1a66,0x1a6c,0x1a72,0x1a78,0x1a7f,0x1a85,0x1a8b,0x1a91,0x1a99,0x1aa3,
-0x1aaa,0x1ab0,0x1ab6,0x1abc,0x1ac2,0x1ac8,0x1acf,0x1ad5,0x1ada,0x1ae0,0x1ae8,0x1af2,0x1afc,0x1b06,0x1b0e,0x1b14,
-0x1b1a,0x1b20,0x1b29,0x1b33,0x1b3b,0x1b41,0x1b46,0x1b4c,0x1b52,0x1b58,0x1b5e,0x1b64,0x1b6a,0x1b70,0x1b77,0x1b7d,
-0x1b82,0x1b88,0x1b8e,0x1b94,0x1b9c,0x1ba6,0x1bae,0x1bb4,0x1bba,0x1bc0,0x1bc6,0x1bcc,0xdd8,0xde2,0x1bd4,0x1bde,
-0x1be6,0x1bec,0x1bf2,0x1bf8,0x1bfe,0x1c04,0x1c0a,0x1c10,0x1c17,0x1c1d,0x1c22,0x1c28,0x1c2e,0x1c34,0x1c3a,0x1c40,
-0x1c46,0x1c4c,0x1c54,0x1c5e,0x1c68,0x1c72,0x1c7c,0x1c86,0x1c90,0x1c9a,0x1ca3,0x1ca9,0x1caf,0x1cb5,0x1cba,0x1cc0,
-0xdec,0xdf6,0x1cc8,0x1cd2,0x1cda,0x1ce0,0x1ce6,0x1cec,0xe00,0xe0a,0x1cf4,0x1cfe,0x1d08,0x1d12,0x1d1c,0x1d26,
-0x1d2e,0x1d34,0x1d3a,0x1d40,0x1d46,0x1d4c,0x1d52,0x1d58,0x1d5e,0x1d64,0x1d6a,0x1d70,0x1d76,0x1d7c,0x1d84,0x1d8e,
-0x1d98,0x1da2,0x1daa,0x1db0,0x1db7,0x1dbd,0x1dc2,0x1dc8,0x1dce,0x1dd4,0x1dda,0x1de0,0x1de6,0x1dec,0x1df3,0x1df9,
-0x1dff,0x1e05,0x1e0b,0x1e11,0x1e16,0x1e1c,0x1e22,0x1e28,0x1e2f,0x1e35,0x1e3b,0x1e41,0x1e46,0x1e4c,0x1e52,0x1e58,
-1,0x1e5f,1,1,1,1,0xe14,0xe22,0x1e64,0x1e6a,0x1e72,0x1e7c,0x1e86,0x1e90,0x1e9a,0x1ea4,
-0x1eae,0x1eb8,0x1ec2,0x1ecc,0x1ed6,0x1ee0,0x1eea,0x1ef4,0x1efe,0x1f08,0x1f12,0x1f1c,0x1f26,0x1f30,0xe30,0xe3a,
-0x1f38,0x1f3e,0x1f44,0x1f4a,0x1f52,0x1f5c,0x1f66,0x1f70,0x1f7a,0x1f84,0x1f8e,0x1f98,0x1fa2,0x1fac,0x1fb4,0x1fba,
-0x1fc0,0x1fc6,0xe44,0xe4e,0x1fcc,0x1fd2,0x1fda,0x1fe4,0x1fee,0x1ff8,0x2002,0x200c,0x2016,0x2020,0x202a,0x2034,
-0x203e,0x2048,0x2052,0x205c,0x2066,0x2070,0x207a,0x2084,0x208e,0x2098,0x20a0,0x20a6,0x20ac,0x20b2,0x20ba,0x20c4,
-0x20ce,0x20d8,0x20e2,0x20ec,0x20f6,0x2100,0x210a,0x2114,0x211c,0x2122,0x2129,0x212f,0x2134,0x213a,0x2140,0x2146,
-1,1,1,1,1,1,0xe58,0xe6e,0xe86,0xe94,0xea2,0xeb0,0xebe,0xecc,0xed8,0xeee,
-0xf06,0xf14,0xf22,0xf30,0xf3e,0xf4c,0xf58,0xf66,0x214f,0x2159,0x2163,0x216d,1,1,0xf74,0xf82,
-0x2177,0x2181,0x218b,0x2195,1,1,0xf90,0xfa6,0xfbe,0xfcc,0xfda,0xfe8,0xff6,0x1004,0x1010,0x1026,
-0x103e,0x104c,0x105a,0x1068,0x1076,0x1084,0x1090,0x10a2,0x219f,0x21a9,0x21b3,0x21bd,0x21c7,0x21d1,0x10b4,0x10c6,
-0x21db,0x21e5,0x21ef,0x21f9,0x2203,0x220d,0x10d8,0x10e6,0x2217,0x2221,0x222b,0x2235,1,1,0x10f4,0x1102,
-0x223f,0x2249,0x2253,0x225d,1,1,0x1110,0x1122,0x2267,0x2271,0x227b,0x2285,0x228f,0x2299,1,0x1134,
-1,0x22a3,1,0x22ad,1,0x22b7,0x1146,0x115c,0x1174,0x1182,0x1190,0x119e,0x11ac,0x11ba,0x11c6,0x11dc,
-0x11f4,0x1202,0x1210,0x121e,0x122c,0x123a,0x1246,0x3b8e,0x22bf,0x3b96,0x1250,0x3b9e,0x22c5,0x3ba6,0x22cb,0x3bae,
-0x22d1,0x3bb6,0x125a,0x3bbe,1,1,0x22d8,0x22e2,0x22f1,0x2301,0x2311,0x2321,0x2331,0x2341,0x234c,0x2356,
-0x2365,0x2375,0x2385,0x2395,0x23a5,0x23b5,0x23c0,0x23ca,0x23d9,0x23e9,0x23f9,0x2409,0x2419,0x2429,0x2434,0x243e,
-0x244d,0x245d,0x246d,0x247d,0x248d,0x249d,0x24a8,0x24b2,0x24c1,0x24d1,0x24e1,0x24f1,0x2501,0x2511,0x251c,0x2526,
-0x2535,0x2545,0x2555,0x2565,0x2575,0x2585,0x258f,0x2595,0x259d,0x25a4,0x25ad,1,0x1264,0x25b7,0x25bf,0x25c5,
-0x25cb,0x3bc6,0x25d0,1,0x2aa2,0x8f0,1,0x25d7,0x25df,0x25e6,0x25ef,1,0x126e,0x25f9,0x2601,0x3bce,
-0x2607,0x3bd6,0x260c,0x2613,0x2619,0x261f,0x2625,0x262b,0x2633,0x3be0,1,1,0x263b,0x2643,0x264b,0x2651,
-0x2657,0x3bea,1,0x265d,0x2663,0x2669,0x266f,0x2675,0x267d,0x3bf4,0x2685,0x268b,0x2691,0x2699,0x26a1,0x26a7,
-0x26ad,0x3bfe,0x26b3,0x26b9,0x3c06,0x2aa7,1,1,0x26c1,0x26c8,0x26d1,1,0x1278,0x26db,0x26e3,0x3c0e,
-0x26e9,0x3c16,0x26ee,0x2aab,0x8fc,1,0xfa09,0xfa09,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0xffcc,0xffcc,0xfe02,0xfe02,0xffcc,0xffcc,0xffcc,0xffcc,0xfe02,0xfe02,
-0xfe02,0xffcc,0xffcc,1,1,1,1,0xffcc,1,1,1,0xfe02,0xfe02,0xffcc,0xffb8,0xffcc,
-0xfe02,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0x2aae,1,1,
-1,0x2ab2,0x3c1e,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0x908,1,0x90c,1,0x910,1,1,1,1,
-1,0x26f5,0x26fb,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0x2701,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0x2707,0x270d,0x2713,0x914,1,0x918,1,0x91c,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0x920,0x2719,1,1,1,0x924,
-0x271f,1,0x928,0x2725,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0x92c,0x272b,0x930,0x2731,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x934,1,1,1,0x2737,1,0x938,0x273d,0x93c,1,0x2743,0x940,0x2749,
-1,1,1,0x944,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x274f,0x948,0x2755,1,0x94c,0x950,1,1,1,1,
-1,1,1,0x275b,0x2761,0x2767,0x276d,0x2773,0x954,0x958,0x2779,0x277f,0x95c,0x960,0x2785,0x278b,
-0x964,0x968,0x96c,0x970,1,1,0x2791,0x2797,0x974,0x978,0x279d,0x27a3,0x97c,0x980,0x27a9,0x27af,
-1,1,1,1,1,1,1,0x984,0x988,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0x98c,1,1,1,1,1,0x990,0x994,
-1,0x998,0x27b5,0x27bb,0x27c1,0x27c7,1,1,0x99c,0x9a0,0x9a4,0x9a8,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0x27cd,0x27d3,0x27d9,0x27df,
-1,1,1,1,1,1,0x27e5,0x27eb,0x27f1,0x27f7,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x2ab7,0x2abb,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0x2abf,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffd0,0xffc8,0xffc8,0xffb8,1,0xffcc,0xffd2,0xffb8,
+0xffcc,0xffb8,0x1a6c,0x1a72,0x1a78,0x1a7e,0x1a85,0x1a8b,0x1a91,0x1a97,0x1a9f,0x1aa9,0x1ab0,0x1ab6,0x1abc,0x1ac2,
+0x1ac8,0x1ace,0x1ad5,0x1adb,0x1ae0,0x1ae6,0x1aee,0x1af8,0x1b02,0x1b0c,0x1b14,0x1b1a,0x1b20,0x1b26,0x1b2f,0x1b39,
+0x1b41,0x1b47,0x1b4c,0x1b52,0x1b58,0x1b5e,0x1b64,0x1b6a,0x1b70,0x1b76,0x1b7d,0x1b83,0x1b88,0x1b8e,0x1b94,0x1b9a,
+0x1ba2,0x1bac,0x1bb4,0x1bba,0x1bc0,0x1bc6,0x1bcc,0x1bd2,0xdde,0xde8,0x1bda,0x1be4,0x1bec,0x1bf2,0x1bf8,0x1bfe,
+0x1c04,0x1c0a,0x1c10,0x1c16,0x1c1d,0x1c23,0x1c28,0x1c2e,0x1c34,0x1c3a,0x1c40,0x1c46,0x1c4c,0x1c52,0x1c5a,0x1c64,
+0x1c6e,0x1c78,0x1c82,0x1c8c,0x1c96,0x1ca0,0x1ca9,0x1caf,0x1cb5,0x1cbb,0x1cc0,0x1cc6,0xdf2,0xdfc,0x1cce,0x1cd8,
+0x1ce0,0x1ce6,0x1cec,0x1cf2,0xe06,0xe10,0x1cfa,0x1d04,0x1d0e,0x1d18,0x1d22,0x1d2c,0x1d34,0x1d3a,0x1d40,0x1d46,
+0x1d4c,0x1d52,0x1d58,0x1d5e,0x1d64,0x1d6a,0x1d70,0x1d76,0x1d7c,0x1d82,0x1d8a,0x1d94,0x1d9e,0x1da8,0x1db0,0x1db6,
+0x1dbd,0x1dc3,0x1dc8,0x1dce,0x1dd4,0x1dda,0x1de0,0x1de6,0x1dec,0x1df2,0x1df9,0x1dff,0x1e05,0x1e0b,0x1e11,0x1e17,
+0x1e1c,0x1e22,0x1e28,0x1e2e,0x1e35,0x1e3b,0x1e41,0x1e47,0x1e4c,0x1e52,0x1e58,0x1e5e,1,0x1e65,1,1,
+1,1,0xe1a,0xe28,0x1e6a,0x1e70,0x1e78,0x1e82,0x1e8c,0x1e96,0x1ea0,0x1eaa,0x1eb4,0x1ebe,0x1ec8,0x1ed2,
+0x1edc,0x1ee6,0x1ef0,0x1efa,0x1f04,0x1f0e,0x1f18,0x1f22,0x1f2c,0x1f36,0xe36,0xe40,0x1f3e,0x1f44,0x1f4a,0x1f50,
+0x1f58,0x1f62,0x1f6c,0x1f76,0x1f80,0x1f8a,0x1f94,0x1f9e,0x1fa8,0x1fb2,0x1fba,0x1fc0,0x1fc6,0x1fcc,0xe4a,0xe54,
+0x1fd2,0x1fd8,0x1fe0,0x1fea,0x1ff4,0x1ffe,0x2008,0x2012,0x201c,0x2026,0x2030,0x203a,0x2044,0x204e,0x2058,0x2062,
+0x206c,0x2076,0x2080,0x208a,0x2094,0x209e,0x20a6,0x20ac,0x20b2,0x20b8,0x20c0,0x20ca,0x20d4,0x20de,0x20e8,0x20f2,
+0x20fc,0x2106,0x2110,0x211a,0x2122,0x2128,0x212f,0x2135,0x213a,0x2140,0x2146,0x214c,1,1,1,1,
+1,1,0xe5e,0xe74,0xe8c,0xe9a,0xea8,0xeb6,0xec4,0xed2,0xede,0xef4,0xf0c,0xf1a,0xf28,0xf36,
+0xf44,0xf52,0xf5e,0xf6c,0x2155,0x215f,0x2169,0x2173,1,1,0xf7a,0xf88,0x217d,0x2187,0x2191,0x219b,
+1,1,0xf96,0xfac,0xfc4,0xfd2,0xfe0,0xfee,0xffc,0x100a,0x1016,0x102c,0x1044,0x1052,0x1060,0x106e,
+0x107c,0x108a,0x1096,0x10a8,0x21a5,0x21af,0x21b9,0x21c3,0x21cd,0x21d7,0x10ba,0x10cc,0x21e1,0x21eb,0x21f5,0x21ff,
+0x2209,0x2213,0x10de,0x10ec,0x221d,0x2227,0x2231,0x223b,1,1,0x10fa,0x1108,0x2245,0x224f,0x2259,0x2263,
+1,1,0x1116,0x1128,0x226d,0x2277,0x2281,0x228b,0x2295,0x229f,1,0x113a,1,0x22a9,1,0x22b3,
+1,0x22bd,0x114c,0x1162,0x117a,0x1188,0x1196,0x11a4,0x11b2,0x11c0,0x11cc,0x11e2,0x11fa,0x1208,0x1216,0x1224,
+0x1232,0x1240,0x124c,0x3b9e,0x22c5,0x3ba6,0x1256,0x3bae,0x22cb,0x3bb6,0x22d1,0x3bbe,0x22d7,0x3bc6,0x1260,0x3bce,
+1,1,0x22de,0x22e8,0x22f7,0x2307,0x2317,0x2327,0x2337,0x2347,0x2352,0x235c,0x236b,0x237b,0x238b,0x239b,
+0x23ab,0x23bb,0x23c6,0x23d0,0x23df,0x23ef,0x23ff,0x240f,0x241f,0x242f,0x243a,0x2444,0x2453,0x2463,0x2473,0x2483,
+0x2493,0x24a3,0x24ae,0x24b8,0x24c7,0x24d7,0x24e7,0x24f7,0x2507,0x2517,0x2522,0x252c,0x253b,0x254b,0x255b,0x256b,
+0x257b,0x258b,0x2595,0x259b,0x25a3,0x25aa,0x25b3,1,0x126a,0x25bd,0x25c5,0x25cb,0x25d1,0x3bd6,0x25d6,1,
+0x2ab2,0x8f0,1,0x25dd,0x25e5,0x25ec,0x25f5,1,0x1274,0x25ff,0x2607,0x3bde,0x260d,0x3be6,0x2612,0x2619,
+0x261f,0x2625,0x262b,0x2631,0x2639,0x3bf0,1,1,0x2641,0x2649,0x2651,0x2657,0x265d,0x3bfa,1,0x2663,
+0x2669,0x266f,0x2675,0x267b,0x2683,0x3c04,0x268b,0x2691,0x2697,0x269f,0x26a7,0x26ad,0x26b3,0x3c0e,0x26b9,0x26bf,
+0x3c16,0x2ab7,1,1,0x26c7,0x26ce,0x26d7,1,0x127e,0x26e1,0x26e9,0x3c1e,0x26ef,0x3c26,0x26f4,0x2abb,
+0x8fc,1,0xfa09,0xfa09,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,0xfe02,0xfe02,0xffcc,0xffcc,0xffcc,0xffcc,0xfe02,0xfe02,0xfe02,0xffcc,0xffcc,1,
+1,1,1,0xffcc,1,1,1,0xfe02,0xfe02,0xffcc,0xffb8,0xffcc,0xfe02,0xfe02,0xffb8,0xffb8,
+0xffb8,0xffb8,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0x2abe,1,1,1,0x2ac2,0x3c2e,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x908,1,0x90c,1,0x910,1,1,1,1,1,0x26fb,0x2701,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0x2707,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x270d,0x2713,0x2719,0x914,1,0x918,1,0x91c,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0x920,0x271f,1,1,1,0x924,0x2725,1,0x928,0x272b,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0x92c,0x2731,0x930,0x2737,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x934,
+1,1,1,0x273d,1,0x938,0x2743,0x93c,1,0x2749,0x940,0x274f,1,1,1,0x944,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0x2755,0x948,0x275b,1,0x94c,0x950,1,1,1,1,1,1,1,0x2761,
+0x2767,0x276d,0x2773,0x2779,0x954,0x958,0x277f,0x2785,0x95c,0x960,0x278b,0x2791,0x964,0x968,0x96c,0x970,
+1,1,0x2797,0x279d,0x974,0x978,0x27a3,0x27a9,0x97c,0x980,0x27af,0x27b5,1,1,1,1,
+1,1,1,0x984,0x988,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x98c,1,1,1,1,1,0x990,0x994,1,0x998,0x27bb,0x27c1,
+0x27c7,0x27cd,1,1,0x99c,0x9a0,0x9a4,0x9a8,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x27d3,0x27d9,0x27df,0x27e5,1,1,1,1,
+1,1,0x27eb,0x27f1,0x27f7,0x27fd,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2ac7,
+0x2acb,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0x2acf,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,
0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xffb4,0xffc8,0xffd0,0xffbc,0xffc0,0xffc0,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x9ac,1,
+1,1,1,0x9b0,0x2803,0x9b4,0x2809,0x9b8,0x280f,0x9bc,0x2815,0x9c0,0x281b,0x9c4,0x2821,0x9c8,
+0x2827,0x9cc,0x282d,0x9d0,0x2833,0x9d4,0x2839,0x9d8,0x283f,0x9dc,0x2845,1,0x9e0,0x284b,0x9e4,0x2851,
+0x9e8,0x2857,1,1,1,1,1,0x9ec,0x285d,0x2863,0x9f4,0x2869,0x286f,0x9fc,0x2875,0x287b,
+0xa04,0x2881,0x2887,0xa0c,0x288d,0x2893,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x2899,1,1,1,1,0xfc10,
+0xfc10,1,1,0xa14,0x289f,1,1,1,1,1,1,1,0xa18,1,1,1,
+1,0xa1c,0x28a5,0xa20,0x28ab,0xa24,0x28b1,0xa28,0x28b7,0xa2c,0x28bd,0xa30,0x28c3,0xa34,0x28c9,0xa38,
+0x28cf,0xa3c,0x28d5,0xa40,0x28db,0xa44,0x28e1,0xa48,0x28e7,1,0xa4c,0x28ed,0xa50,0x28f3,0xa54,0x28f9,
+1,1,1,1,1,0xa58,0x28ff,0x2905,0xa60,0x290b,0x2911,0xa68,0x2917,0x291d,0xa70,0x2923,
+0x2929,0xa78,0x292f,0x2935,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xa80,0xa84,0xa88,0xa8c,1,0x293b,1,1,0x2941,0x2947,0x294d,
+0x2953,1,1,0xa90,0x2959,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xffcc,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xffb4,0xffc8,0xffd0,0xffbc,
-0xffc0,0xffc0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0x9ac,1,1,1,1,0x9b0,0x27fd,0x9b4,0x2803,0x9b8,0x2809,0x9bc,0x280f,0x9c0,
-0x2815,0x9c4,0x281b,0x9c8,0x2821,0x9cc,0x2827,0x9d0,0x282d,0x9d4,0x2833,0x9d8,0x2839,0x9dc,0x283f,1,
-0x9e0,0x2845,0x9e4,0x284b,0x9e8,0x2851,1,1,1,1,1,0x9ec,0x2857,0x285d,0x9f4,0x2863,
-0x2869,0x9fc,0x286f,0x2875,0xa04,0x287b,0x2881,0xa0c,0x2887,0x288d,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2893,1,
-1,1,1,0xfc10,0xfc10,1,1,0xa14,0x2899,1,1,1,1,1,1,1,
-0xa18,1,1,1,1,0xa1c,0x289f,0xa20,0x28a5,0xa24,0x28ab,0xa28,0x28b1,0xa2c,0x28b7,0xa30,
-0x28bd,0xa34,0x28c3,0xa38,0x28c9,0xa3c,0x28cf,0xa40,0x28d5,0xa44,0x28db,0xa48,0x28e1,1,0xa4c,0x28e7,
-0xa50,0x28ed,0xa54,0x28f3,1,1,1,1,1,0xa58,0x28f9,0x28ff,0xa60,0x2905,0x290b,0xa68,
-0x2911,0x2917,0xa70,0x291d,0x2923,0xa78,0x2929,0x292f,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xa80,0xa84,0xa88,0xa8c,1,0x2935,1,
-1,0x293b,0x2941,0x2947,0x294d,1,1,0xa90,0x2953,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xffcc,1,1,1,1,0xffcc,0xffcc,0xffcc,
+1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0xffcc,1,0xffcc,0xffcc,0xffb8,1,1,0xffcc,0xffcc,1,1,1,1,1,0xffcc,0xffcc,
-1,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,
-0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
-0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0xadc,0x1283,0x1283,0x1283,
-0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
-0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
-0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
-0x1283,0x1283,0x1283,0x1283,0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
-0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0x3c56,1,0x3c56,0x3c56,
-0x3c56,0x3c56,0x3c56,0x3c56,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x3c56,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x3c56,1,1,1,1,
-0x3c56,1,1,1,0x3c56,1,0x3c56,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0x3b87,1,0x2ac5,0x2ac9,0x2acd,0x2ad1,0x2ad5,0x2ad9,0x2add,0x2ae1,0x2ae1,
-0x2ae5,0x2ae9,0x2aed,0x2af1,0x2af5,0x2af9,0x2afd,0x2b01,0x2b05,0x2b09,0x2b0d,0x2b11,0x2b15,0x2b19,0x2b1d,0x2b21,
-0x2b25,0x2b29,0x2b2d,0x2b31,0x2b35,0x2b39,0x2b3d,0x2b41,0x2b45,0x2b49,0x2b4d,0x2b51,0x2b55,0x2b59,0x2b5d,0x2b61,
-0x2b65,0x2b69,0x2b6d,0x2b71,0x2b75,0x2b79,0x2b7d,0x2b81,0x2b85,0x2b89,0x2b8d,0x2b91,0x2b95,0x2b99,0x2b9d,0x2ba1,
-0x2ba5,0x2ba9,0x2bad,0x2bb1,0x2bb5,0x2bb9,0x2bbd,0x2bc1,0x2bc5,0x2bc9,0x2bcd,0x2bd1,0x2bd5,0x2bd9,0x2bdd,0x2be1,
-0x2be5,0x2be9,0x2bed,0x2bf1,0x2bf5,0x2bf9,0x2bfd,0x2c01,0x2c05,0x2c09,0x2c0d,0x2c11,0x2c15,0x2c19,0x2c1d,0x2c21,
-0x2c25,0x2c29,0x2c2d,0x2b11,0x2c31,0x2c35,0x2c39,0x2c3d,0x2c41,0x2c45,0x2c49,0x2c4d,0x2c51,0x2c55,0x2c59,0x2c5d,
-0x2c61,0x2c65,0x2c69,0x2c6d,0x2c71,0x2c75,0x2c79,0x2c7d,0x2c81,0x2c85,0x2c89,0x2c8d,0x2c91,0x2c95,0x2c99,0x2c9d,
-0x2ca1,0x2ca5,0x2ca9,0x2cad,0x2cb1,0x2cb5,0x2cb9,0x2cbd,0x2cc1,0x2cc5,0x2cc9,0x2ccd,0x2cd1,0x2cd5,0x2cd9,0x2cdd,
-0x2ce1,0x2ce5,0x2ce9,0x2ced,0x2cf1,0x2cf5,0x2cf9,0x2cfd,0x2d01,0x2d05,0x2d09,0x2d0d,0x2d11,0x2d15,0x2d19,0x2d1d,
-0x2d21,0x2d25,0x2d29,0x2d2d,0x2d31,0x2d35,0x2d39,0x2d3d,0x2c79,0x2d41,0x2d45,0x2d49,0x2d4d,0x2d51,0x2d55,0x2d59,
-0x2d5d,0x2c39,0x2d61,0x2d65,0x2d69,0x2d6d,0x2d71,0x2d75,0x2d79,0x2d7d,0x2d81,0x2d85,0x2d89,0x2d8d,0x2d91,0x2d95,
-0x2d99,0x2d9d,0x2da1,0x2da5,0x2da9,0x2dad,0x2b11,0x2db1,0x2db5,0x2db9,0x2dbd,0x2dc1,0x2dc5,0x2dc9,0x2dcd,0x2dd1,
-0x2dd5,0x2dd9,0x2ddd,0x2de1,0x2de5,0x2de9,0x2ded,0x2df1,0x2df5,0x2df9,0x2dfd,0x2e01,0x2e05,0x2e09,0x2e0d,0x2e11,
-0x2e15,0x2e19,0x2c41,0x2e1d,0x2e21,0x2e25,0x2e29,0x2e2d,0x2e31,0x2e35,0x2e39,0x2e3d,0x2e41,0x2e45,0x2e49,0x2e4d,
-0x2e51,0x2e55,0x2e59,0x2e5d,0x2e61,0x2e65,0x2e69,0x2e6d,0x2e71,0x2e75,0x2e79,0x2e7d,0x2e81,0x2e85,0x2e89,0x2e8d,
-0x2e91,0x2e95,0x2e99,0x2e9d,0x2ea1,0x2ea5,0x2ea9,0x2ead,0x2eb1,0x2eb5,0x2eb9,0x2ebd,0x2ec1,0x2ec5,0x2ec9,0x2ecd,
-0x2ed1,0x2ed5,0x2ed9,0x2edd,0x2ee1,1,1,0x2ee5,1,0x2ee9,1,1,0x2eed,0x2ef1,0x2ef5,0x2ef9,
-0x2efd,0x2f01,0x2f05,0x2f09,0x2f0d,0x2f11,1,0x2f15,1,0x2f19,1,1,0x2f1d,0x2f21,1,1,
-1,0x2f25,0x2f29,0x2f2d,0x2f31,0x2f35,0x2f39,0x2f3d,0x2f41,0x2f45,0x2f49,0x2f4d,0x2f51,0x2f55,0x2f59,0x2f5d,
-0x2f61,0x2f65,0x2f69,0x2f6d,0x2f71,0x2f75,0x2f79,0x2f7d,0x2f81,0x2f85,0x2f89,0x2f8d,0x2f91,0x2f95,0x2f99,0x2f9d,
-0x2fa1,0x2fa5,0x2fa9,0x2fad,0x2fb1,0x2fb5,0x2fb9,0x2fbd,0x2fc1,0x2fc5,0x2fc9,0x2fcd,0x2fd1,0x2fd5,0x2d15,0x2fd9,
-0x2fdd,0x2fe1,0x2fe5,0x2fe9,0x2fed,0x2fed,0x2ff1,0x2ff5,0x2ff9,0x2ffd,0x3001,0x3005,0x3009,0x300d,0x2f1d,0x3011,
-0x3015,0x3019,0x301d,0x3021,0x3027,1,1,0x302b,0x302f,0x3033,0x3037,0x303b,0x303f,0x3043,0x3047,0x2f55,
-0x304b,0x304f,0x3053,0x2ee5,0x3057,0x305b,0x305f,0x3063,0x3067,0x306b,0x306f,0x3073,0x3077,0x307b,0x307f,0x3083,
-0x2f79,0x3087,0x2f7d,0x308b,0x308f,0x3093,0x3097,0x309b,0x2ee9,0x2b65,0x309f,0x30a3,0x30a7,0x2c7d,0x2dd9,0x30ab,
-0x30af,0x2f99,0x30b3,0x2f9d,0x30b7,0x30bb,0x30bf,0x2ef1,0x30c3,0x30c7,0x30cb,0x30cf,0x30d3,0x2ef5,0x30d7,0x30db,
-0x30df,0x30e3,0x30e7,0x30eb,0x2fd5,0x30ef,0x30f3,0x2d15,0x30f7,0x2fe5,0x30fb,0x30ff,0x3103,0x3107,0x310b,0x2ff9,
-0x310f,0x2f19,0x3113,0x2ffd,0x2c31,0x3117,0x3001,0x311b,0x3009,0x311f,0x3123,0x3127,0x312b,0x312f,0x3011,0x2f09,
-0x3133,0x3015,0x3137,0x3019,0x313b,0x2ae1,0x313f,0x3145,0x314b,0x3151,0x3155,0x3159,0x315d,0x3163,0x3169,0x316f,
-0x3173,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0x3176,0xfe34,0x317c,1,1,1,1,1,1,
-1,1,1,1,0x3182,0x3188,0x3190,0x319a,0x31a2,0x31a8,0x31ae,0x31b4,0x31ba,0x31c0,0x31c6,0x31cc,
-0x31d2,1,0x31d8,0x31de,0x31e4,0x31ea,0x31f0,1,0x31f6,1,0x31fc,0x3202,1,0x3208,0x320e,1,
-0x3214,0x321a,0x3220,0x3226,0x322c,0x3232,0x3238,0x323e,0x3244,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0xffb8,1,0xffcc,1,1,1,
-1,1,1,1,1,0xffcc,0xfe02,0xffb8,1,1,1,1,0xfe12,1,1,1,
-1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffcc,
-0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,
-0xa94,0x2959,0xa9a,0x2963,1,1,1,1,1,0xaa0,1,1,1,1,1,0x296d,
-1,1,1,1,1,1,1,1,1,0xfe12,0xfc0e,1,1,1,1,1,
-1,1,0xfc00,1,1,1,1,1,1,0x2977,0x2981,1,0xaa6,0xaac,0xfe12,0xfe12,
-1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,
-1,1,1,1,1,0xfe0e,1,1,1,1,1,0xfe12,0xfe0e,1,1,1,
-1,1,1,1,1,1,0xfe0e,0xfe12,1,1,1,1,1,1,1,1,
-1,1,1,0xfe0e,0xfe0e,1,0xfc00,1,1,1,1,1,1,1,0xab2,1,
-1,1,0x298b,0x2995,0xfe12,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,1,1,1,0xfe12,1,1,1,0xfe0e,1,1,1,1,1,1,
-1,1,1,0xfc00,1,1,1,1,1,1,1,1,0xabe,0xfc00,0x299f,0x29a9,
-0xfc00,0x29b3,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,1,
-1,1,0xad0,0xad6,0x29bd,0x29c7,1,1,1,0xfe12,0xfe0e,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe0e,1,1,1,1,
-1,1,1,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0xfe02,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x324a,0x3254,0x3268,0x3280,0x3298,0x32b0,0x32c8,0xffb0,0xffb0,0xfe02,
-0xfe02,0xfe02,1,1,1,0xffc4,0xffb0,0xffb0,0xffb0,1,1,1,1,1,1,1,
-1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,1,
-1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,
-1,1,1,1,1,1,1,1,0x32d6,0x32e0,0x32f4,0x330c,0x3324,0x333c,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
-1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,
-1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe0e,1,1,1,1,1,0x334b,
-0x334f,0x3353,0x3357,0x335d,0x2f3d,0x3361,0x3365,0x3369,0x336d,0x2f41,0x3371,0x3375,0x3379,0x2f45,0x337f,0x3383,
-0x3387,0x338b,0x3391,0x3395,0x3399,0x339d,0x33a3,0x33a7,0x33ab,0x33af,0x302f,0x33b3,0x33b9,0x33bd,0x33c1,0x33c5,
-0x33c9,0x33cd,0x33d1,0x33d5,0x3043,0x2f49,0x2f4d,0x3047,0x33d9,0x33dd,0x2c49,0x33e1,0x2f51,0x33e5,0x33e9,0x33ed,
-0x33f1,0x33f1,0x33f1,0x33f5,0x33fb,0x33ff,0x3403,0x3407,0x340d,0x3411,0x3415,0x3419,0x341d,0x3421,0x3425,0x3429,
-0x342d,0x3431,0x3435,0x3439,0x343d,0x343d,0x304f,0x3441,0x3445,0x3449,0x344d,0x2f59,0x3451,0x3455,0x3459,0x2ead,
-0x345d,0x3461,0x3465,0x3469,0x346d,0x3471,0x3475,0x3479,0x347d,0x3483,0x3487,0x348b,0x348f,0x3493,0x3497,0x349b,
-0x34a1,0x34a7,0x34ab,0x34af,0x34b3,0x34b7,0x34bb,0x34bf,0x34c3,0x34c7,0x34c7,0x34cb,0x34d1,0x34d5,0x2c39,0x34d9,
-0x34dd,0x34e3,0x34e7,0x34eb,0x34ef,0x34f3,0x34f7,0x2f6d,0x34fb,0x34ff,0x3503,0x3509,0x350d,0x3513,0x3517,0x351b,
-0x351f,0x3523,0x3527,0x352b,0x352f,0x3533,0x3537,0x353b,0x353f,0x3545,0x3549,0x354d,0x3551,0x2b61,0x3555,0x355b,
-0x355f,0x355f,0x3565,0x3569,0x3569,0x356d,0x3571,0x3577,0x357d,0x3581,0x3585,0x3589,0x358d,0x3591,0x3595,0x3599,
-0x359d,0x35a1,0x2f71,0x35a5,0x35ab,0x35af,0x35b3,0x307f,0x35b3,0x35b7,0x2f79,0x35bb,0x35bf,0x35c3,0x35c7,0x2f7d,
-0x2af5,0x35cb,0x35cf,0x35d3,0x35d7,0x35db,0x35df,0x35e3,0x35e9,0x35ed,0x35f1,0x35f5,0x35f9,0x35fd,0x3603,0x3607,
-0x360b,0x360f,0x3613,0x3617,0x361b,0x361f,0x3623,0x2f81,0x3627,0x362b,0x3631,0x3635,0x3639,0x363d,0x2f89,0x3641,
-0x3645,0x3649,0x364d,0x3651,0x3655,0x3659,0x365d,0x2b65,0x309f,0x3661,0x3665,0x3669,0x366d,0x3673,0x3677,0x367b,
-0x367f,0x2f8d,0x3683,0x3689,0x368d,0x3691,0x3151,0x3695,0x3699,0x369d,0x36a1,0x36a5,0x36ab,0x36af,0x36b3,0x36b7,
-0x36bd,0x36c1,0x36c5,0x36c9,0x2c7d,0x36cd,0x36d1,0x36d7,0x36dd,0x36e3,0x36e7,0x36ed,0x36f1,0x36f5,0x36f9,0x36fd,
-0x2f91,0x2dd9,0x3701,0x3705,0x3709,0x370d,0x3713,0x3717,0x371b,0x371f,0x30af,0x3723,0x3727,0x372d,0x3731,0x3735,
-0x373b,0x3741,0x3745,0x30b3,0x3749,0x374d,0x3751,0x3755,0x3759,0x375d,0x3761,0x3767,0x376b,0x3771,0x3775,0x377b,
-0x30bb,0x377f,0x3783,0x3789,0x378d,0x3791,0x3797,0x379d,0x37a1,0x37a5,0x37a9,0x37ad,0x37ad,0x37b1,0x37b5,0x30c3,
-0x37b9,0x37bd,0x37c1,0x37c5,0x37c9,0x37cf,0x37d3,0x2c45,0x37d9,0x37df,0x37e3,0x37e9,0x37ef,0x37f5,0x37f9,0x30db,
-0x37fd,0x3803,0x3809,0x380f,0x3815,0x3819,0x3819,0x30df,0x3159,0x381d,0x3821,0x3825,0x3829,0x382f,0x2bad,0x30e7,
-0x3833,0x3837,0x2fbd,0x383d,0x3843,0x2f05,0x3849,0x384d,0x2fcd,0x3851,0x3855,0x3859,0x385f,0x385f,0x3865,0x3869,
-0x386d,0x3873,0x3877,0x387b,0x387f,0x3885,0x3889,0x388d,0x3891,0x3895,0x3899,0x389f,0x38a3,0x38a7,0x38ab,0x38af,
-0x38b3,0x38b7,0x38bd,0x38c3,0x38c7,0x38cd,0x38d1,0x38d7,0x38db,0x2fe5,0x38df,0x38e5,0x38eb,0x38ef,0x38f5,0x38f9,
-0x38ff,0x3903,0x3907,0x390b,0x390f,0x3913,0x3917,0x391d,0x3923,0x3929,0x3565,0x392f,0x3933,0x3937,0x393b,0x393f,
-0x3943,0x3947,0x394b,0x394f,0x3953,0x3957,0x395b,0x2c8d,0x3961,0x3965,0x3969,0x396d,0x3971,0x3975,0x2ff1,0x3979,
-0x397d,0x3981,0x3985,0x3989,0x398f,0x3995,0x399b,0x399f,0x39a3,0x39a7,0x39ab,0x39b1,0x39b5,0x39bb,0x39bf,0x39c3,
-0x39c9,0x39cf,0x39d3,0x2b99,0x39d7,0x39db,0x39df,0x39e3,0x39e7,0x39eb,0x3103,0x39ef,0x39f3,0x39f7,0x39fb,0x39ff,
-0x3a03,0x3a07,0x3a0b,0x3a0f,0x3a13,0x3a19,0x3a1d,0x3a21,0x3a25,0x3a29,0x3a2d,0x3a33,0x3a39,0x3a3d,0x3a41,0x3117,
-0x311b,0x3a45,0x3a49,0x3a4f,0x3a53,0x3a57,0x3a5b,0x3a5f,0x3a65,0x3a6b,0x3a6f,0x3a73,0x3a77,0x3a7d,0x311f,0x3a81,
-0x3a87,0x3a8d,0x3a91,0x3a95,0x3a99,0x3a9f,0x3aa3,0x3aa7,0x3aab,0x3aaf,0x3ab3,0x3ab7,0x3abb,0x3ac1,0x3ac5,0x3ac9,
-0x3acd,0x3ad3,0x3ad7,0x3adb,0x3adf,0x3ae3,0x3ae9,0x3aef,0x3af3,0x3af7,0x3afb,0x3b01,0x3b05,0x3137,0x3137,0x3b0b,
-0x3b0f,0x3b15,0x3b19,0x3b1d,0x3b21,0x3b25,0x3b29,0x3b2d,0x3b31,0x313b,0x3b37,0x3b3b,0x3b3f,0x3b43,0x3b47,0x3b4b,
-0x3b51,0x3b55,0x3b5b,0x3b61,0x3b67,0x3b6b,0x3b6f,0x3b73,0x3b77,0x3b7b,0x3b7f,0x3b83,0x3b87,1,1,1
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xffcc,1,0xffcc,0xffcc,0xffb8,1,1,0xffcc,
+0xffcc,1,1,1,1,1,0xffcc,0xffcc,1,0xffcc,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,
+1,1,1,1,1,1,1,1,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0xae2,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x3c66,1,0x3c66,0x3c66,0x3c66,0x3c66,0x3c66,0x3c66,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c66,0x3c66,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x3c66,1,1,1,1,0x3c66,1,1,1,0x3c66,1,0x3c66,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0x3b97,1,0x2ad5,
+0x2ad9,0x2add,0x2ae1,0x2ae5,0x2ae9,0x2aed,0x2af1,0x2af1,0x2af5,0x2af9,0x2afd,0x2b01,0x2b05,0x2b09,0x2b0d,0x2b11,
+0x2b15,0x2b19,0x2b1d,0x2b21,0x2b25,0x2b29,0x2b2d,0x2b31,0x2b35,0x2b39,0x2b3d,0x2b41,0x2b45,0x2b49,0x2b4d,0x2b51,
+0x2b55,0x2b59,0x2b5d,0x2b61,0x2b65,0x2b69,0x2b6d,0x2b71,0x2b75,0x2b79,0x2b7d,0x2b81,0x2b85,0x2b89,0x2b8d,0x2b91,
+0x2b95,0x2b99,0x2b9d,0x2ba1,0x2ba5,0x2ba9,0x2bad,0x2bb1,0x2bb5,0x2bb9,0x2bbd,0x2bc1,0x2bc5,0x2bc9,0x2bcd,0x2bd1,
+0x2bd5,0x2bd9,0x2bdd,0x2be1,0x2be5,0x2be9,0x2bed,0x2bf1,0x2bf5,0x2bf9,0x2bfd,0x2c01,0x2c05,0x2c09,0x2c0d,0x2c11,
+0x2c15,0x2c19,0x2c1d,0x2c21,0x2c25,0x2c29,0x2c2d,0x2c31,0x2c35,0x2c39,0x2c3d,0x2b21,0x2c41,0x2c45,0x2c49,0x2c4d,
+0x2c51,0x2c55,0x2c59,0x2c5d,0x2c61,0x2c65,0x2c69,0x2c6d,0x2c71,0x2c75,0x2c79,0x2c7d,0x2c81,0x2c85,0x2c89,0x2c8d,
+0x2c91,0x2c95,0x2c99,0x2c9d,0x2ca1,0x2ca5,0x2ca9,0x2cad,0x2cb1,0x2cb5,0x2cb9,0x2cbd,0x2cc1,0x2cc5,0x2cc9,0x2ccd,
+0x2cd1,0x2cd5,0x2cd9,0x2cdd,0x2ce1,0x2ce5,0x2ce9,0x2ced,0x2cf1,0x2cf5,0x2cf9,0x2cfd,0x2d01,0x2d05,0x2d09,0x2d0d,
+0x2d11,0x2d15,0x2d19,0x2d1d,0x2d21,0x2d25,0x2d29,0x2d2d,0x2d31,0x2d35,0x2d39,0x2d3d,0x2d41,0x2d45,0x2d49,0x2d4d,
+0x2c89,0x2d51,0x2d55,0x2d59,0x2d5d,0x2d61,0x2d65,0x2d69,0x2d6d,0x2c49,0x2d71,0x2d75,0x2d79,0x2d7d,0x2d81,0x2d85,
+0x2d89,0x2d8d,0x2d91,0x2d95,0x2d99,0x2d9d,0x2da1,0x2da5,0x2da9,0x2dad,0x2db1,0x2db5,0x2db9,0x2dbd,0x2b21,0x2dc1,
+0x2dc5,0x2dc9,0x2dcd,0x2dd1,0x2dd5,0x2dd9,0x2ddd,0x2de1,0x2de5,0x2de9,0x2ded,0x2df1,0x2df5,0x2df9,0x2dfd,0x2e01,
+0x2e05,0x2e09,0x2e0d,0x2e11,0x2e15,0x2e19,0x2e1d,0x2e21,0x2e25,0x2e29,0x2c51,0x2e2d,0x2e31,0x2e35,0x2e39,0x2e3d,
+0x2e41,0x2e45,0x2e49,0x2e4d,0x2e51,0x2e55,0x2e59,0x2e5d,0x2e61,0x2e65,0x2e69,0x2e6d,0x2e71,0x2e75,0x2e79,0x2e7d,
+0x2e81,0x2e85,0x2e89,0x2e8d,0x2e91,0x2e95,0x2e99,0x2e9d,0x2ea1,0x2ea5,0x2ea9,0x2ead,0x2eb1,0x2eb5,0x2eb9,0x2ebd,
+0x2ec1,0x2ec5,0x2ec9,0x2ecd,0x2ed1,0x2ed5,0x2ed9,0x2edd,0x2ee1,0x2ee5,0x2ee9,0x2eed,0x2ef1,1,1,0x2ef5,
+1,0x2ef9,1,1,0x2efd,0x2f01,0x2f05,0x2f09,0x2f0d,0x2f11,0x2f15,0x2f19,0x2f1d,0x2f21,1,0x2f25,
+1,0x2f29,1,1,0x2f2d,0x2f31,1,1,1,0x2f35,0x2f39,0x2f3d,0x2f41,0x2f45,0x2f49,0x2f4d,
+0x2f51,0x2f55,0x2f59,0x2f5d,0x2f61,0x2f65,0x2f69,0x2f6d,0x2f71,0x2f75,0x2f79,0x2f7d,0x2f81,0x2f85,0x2f89,0x2f8d,
+0x2f91,0x2f95,0x2f99,0x2f9d,0x2fa1,0x2fa5,0x2fa9,0x2fad,0x2fb1,0x2fb5,0x2fb9,0x2fbd,0x2fc1,0x2fc5,0x2fc9,0x2fcd,
+0x2fd1,0x2fd5,0x2fd9,0x2fdd,0x2fe1,0x2fe5,0x2d25,0x2fe9,0x2fed,0x2ff1,0x2ff5,0x2ff9,0x2ffd,0x2ffd,0x3001,0x3005,
+0x3009,0x300d,0x3011,0x3015,0x3019,0x301d,0x2f2d,0x3021,0x3025,0x3029,0x302d,0x3031,0x3037,1,1,0x303b,
+0x303f,0x3043,0x3047,0x304b,0x304f,0x3053,0x3057,0x2f65,0x305b,0x305f,0x3063,0x2ef5,0x3067,0x306b,0x306f,0x3073,
+0x3077,0x307b,0x307f,0x3083,0x3087,0x308b,0x308f,0x3093,0x2f89,0x3097,0x2f8d,0x309b,0x309f,0x30a3,0x30a7,0x30ab,
+0x2ef9,0x2b75,0x30af,0x30b3,0x30b7,0x2c8d,0x2de9,0x30bb,0x30bf,0x2fa9,0x30c3,0x2fad,0x30c7,0x30cb,0x30cf,0x2f01,
+0x30d3,0x30d7,0x30db,0x30df,0x30e3,0x2f05,0x30e7,0x30eb,0x30ef,0x30f3,0x30f7,0x30fb,0x2fe5,0x30ff,0x3103,0x2d25,
+0x3107,0x2ff5,0x310b,0x310f,0x3113,0x3117,0x311b,0x3009,0x311f,0x2f29,0x3123,0x300d,0x2c41,0x3127,0x3011,0x312b,
+0x3019,0x312f,0x3133,0x3137,0x313b,0x313f,0x3021,0x2f19,0x3143,0x3025,0x3147,0x3029,0x314b,0x2af1,0x314f,0x3155,
+0x315b,0x3161,0x3165,0x3169,0x316d,0x3173,0x3179,0x317f,0x3183,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3186,
+0xfe34,0x318c,1,1,1,1,1,1,1,1,1,1,0x3192,0x3198,0x31a0,0x31aa,
+0x31b2,0x31b8,0x31be,0x31c4,0x31ca,0x31d0,0x31d6,0x31dc,0x31e2,1,0x31e8,0x31ee,0x31f4,0x31fa,0x3200,1,
+0x3206,1,0x320c,0x3212,1,0x3218,0x321e,1,0x3224,0x322a,0x3230,0x3236,0x323c,0x3242,0x3248,0x324e,
+0x3254,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
+0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffb8,1,0xffcc,1,1,1,1,1,1,1,1,0xffcc,0xfe02,0xffb8,
+1,1,1,1,0xfe12,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,
+1,1,1,1,1,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffb8,0xffb8,1,
+1,1,1,1,1,1,1,1,0xa94,0x295f,0xa9a,0x2969,1,1,1,1,
+1,0xaa0,1,1,1,1,1,0x2973,1,1,1,1,1,1,1,1,
+1,0xfe12,0xfc0e,1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,
+1,0x297d,0x2987,1,0xaa6,0xaac,0xfe12,0xfe12,1,1,1,1,1,1,1,1,
+1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,0xfe0e,1,1,
+1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe12,
+1,1,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe0e,1,0xfc00,1,
+1,1,1,1,1,1,0xab2,1,1,1,0x2991,0x299b,0xfe12,1,1,1,
+1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,0xfe12,1,1,
+1,0xfe0e,1,1,1,1,1,1,1,1,1,0xfc00,1,1,1,1,
+1,1,1,1,0xabe,0xfc00,0x29a5,0x29af,0xfc00,0x29b9,1,1,0xfe12,0xfe0e,1,1,
+1,1,1,1,1,1,1,1,1,1,0xad0,0xad6,0x29c3,0x29cd,1,1,
+1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,0xfc00,1,1,1,
+1,0xadc,1,1,0x29d7,1,1,1,1,0xfe12,0xfe12,1,0xfe02,0xfe02,0xfe02,0xfe02,
+0xfe02,1,1,1,1,1,1,1,1,1,1,1,0xfe0c,0xfe0c,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xfe02,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x325a,0x3264,0x3278,0x3290,0x32a8,
+0x32c0,0x32d8,0xffb0,0xffb0,0xfe02,0xfe02,0xfe02,1,1,1,0xffc4,0xffb0,0xffb0,0xffb0,1,1,
+1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,
+0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x32e6,0x32f0,0x3304,
+0x331c,0x3334,0x334c,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,1,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,
+1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe0e,1,
+1,1,1,1,0x335b,0x335f,0x3363,0x3367,0x336d,0x2f4d,0x3371,0x3375,0x3379,0x337d,0x2f51,0x3381,
+0x3385,0x3389,0x2f55,0x338f,0x3393,0x3397,0x339b,0x33a1,0x33a5,0x33a9,0x33ad,0x33b3,0x33b7,0x33bb,0x33bf,0x303f,
+0x33c3,0x33c9,0x33cd,0x33d1,0x33d5,0x33d9,0x33dd,0x33e1,0x33e5,0x3053,0x2f59,0x2f5d,0x3057,0x33e9,0x33ed,0x2c59,
+0x33f1,0x2f61,0x33f5,0x33f9,0x33fd,0x3401,0x3401,0x3401,0x3405,0x340b,0x340f,0x3413,0x3417,0x341d,0x3421,0x3425,
+0x3429,0x342d,0x3431,0x3435,0x3439,0x343d,0x3441,0x3445,0x3449,0x344d,0x344d,0x305f,0x3451,0x3455,0x3459,0x345d,
+0x2f69,0x3461,0x3465,0x3469,0x2ebd,0x346d,0x3471,0x3475,0x3479,0x347d,0x3481,0x3485,0x3489,0x348d,0x3493,0x3497,
+0x349b,0x349f,0x34a3,0x34a7,0x34ab,0x34b1,0x34b7,0x34bb,0x34bf,0x34c3,0x34c7,0x34cb,0x34cf,0x34d3,0x34d7,0x34d7,
+0x34db,0x34e1,0x34e5,0x2c49,0x34e9,0x34ed,0x34f3,0x34f7,0x34fb,0x34ff,0x3503,0x3507,0x2f7d,0x350b,0x350f,0x3513,
+0x3519,0x351d,0x3523,0x3527,0x352b,0x352f,0x3533,0x3537,0x353b,0x353f,0x3543,0x3547,0x354b,0x354f,0x3555,0x3559,
+0x355d,0x3561,0x2b71,0x3565,0x356b,0x356f,0x356f,0x3575,0x3579,0x3579,0x357d,0x3581,0x3587,0x358d,0x3591,0x3595,
+0x3599,0x359d,0x35a1,0x35a5,0x35a9,0x35ad,0x35b1,0x2f81,0x35b5,0x35bb,0x35bf,0x35c3,0x308f,0x35c3,0x35c7,0x2f89,
+0x35cb,0x35cf,0x35d3,0x35d7,0x2f8d,0x2b05,0x35db,0x35df,0x35e3,0x35e7,0x35eb,0x35ef,0x35f3,0x35f9,0x35fd,0x3601,
+0x3605,0x3609,0x360d,0x3613,0x3617,0x361b,0x361f,0x3623,0x3627,0x362b,0x362f,0x3633,0x2f91,0x3637,0x363b,0x3641,
+0x3645,0x3649,0x364d,0x2f99,0x3651,0x3655,0x3659,0x365d,0x3661,0x3665,0x3669,0x366d,0x2b75,0x30af,0x3671,0x3675,
+0x3679,0x367d,0x3683,0x3687,0x368b,0x368f,0x2f9d,0x3693,0x3699,0x369d,0x36a1,0x3161,0x36a5,0x36a9,0x36ad,0x36b1,
+0x36b5,0x36bb,0x36bf,0x36c3,0x36c7,0x36cd,0x36d1,0x36d5,0x36d9,0x2c8d,0x36dd,0x36e1,0x36e7,0x36ed,0x36f3,0x36f7,
+0x36fd,0x3701,0x3705,0x3709,0x370d,0x2fa1,0x2de9,0x3711,0x3715,0x3719,0x371d,0x3723,0x3727,0x372b,0x372f,0x30bf,
+0x3733,0x3737,0x373d,0x3741,0x3745,0x374b,0x3751,0x3755,0x30c3,0x3759,0x375d,0x3761,0x3765,0x3769,0x376d,0x3771,
+0x3777,0x377b,0x3781,0x3785,0x378b,0x30cb,0x378f,0x3793,0x3799,0x379d,0x37a1,0x37a7,0x37ad,0x37b1,0x37b5,0x37b9,
+0x37bd,0x37bd,0x37c1,0x37c5,0x30d3,0x37c9,0x37cd,0x37d1,0x37d5,0x37d9,0x37df,0x37e3,0x2c55,0x37e9,0x37ef,0x37f3,
+0x37f9,0x37ff,0x3805,0x3809,0x30eb,0x380d,0x3813,0x3819,0x381f,0x3825,0x3829,0x3829,0x30ef,0x3169,0x382d,0x3831,
+0x3835,0x3839,0x383f,0x2bbd,0x30f7,0x3843,0x3847,0x2fcd,0x384d,0x3853,0x2f15,0x3859,0x385d,0x2fdd,0x3861,0x3865,
+0x3869,0x386f,0x386f,0x3875,0x3879,0x387d,0x3883,0x3887,0x388b,0x388f,0x3895,0x3899,0x389d,0x38a1,0x38a5,0x38a9,
+0x38af,0x38b3,0x38b7,0x38bb,0x38bf,0x38c3,0x38c7,0x38cd,0x38d3,0x38d7,0x38dd,0x38e1,0x38e7,0x38eb,0x2ff5,0x38ef,
+0x38f5,0x38fb,0x38ff,0x3905,0x3909,0x390f,0x3913,0x3917,0x391b,0x391f,0x3923,0x3927,0x392d,0x3933,0x3939,0x3575,
+0x393f,0x3943,0x3947,0x394b,0x394f,0x3953,0x3957,0x395b,0x395f,0x3963,0x3967,0x396b,0x2c9d,0x3971,0x3975,0x3979,
+0x397d,0x3981,0x3985,0x3001,0x3989,0x398d,0x3991,0x3995,0x3999,0x399f,0x39a5,0x39ab,0x39af,0x39b3,0x39b7,0x39bb,
+0x39c1,0x39c5,0x39cb,0x39cf,0x39d3,0x39d9,0x39df,0x39e3,0x2ba9,0x39e7,0x39eb,0x39ef,0x39f3,0x39f7,0x39fb,0x3113,
+0x39ff,0x3a03,0x3a07,0x3a0b,0x3a0f,0x3a13,0x3a17,0x3a1b,0x3a1f,0x3a23,0x3a29,0x3a2d,0x3a31,0x3a35,0x3a39,0x3a3d,
+0x3a43,0x3a49,0x3a4d,0x3a51,0x3127,0x312b,0x3a55,0x3a59,0x3a5f,0x3a63,0x3a67,0x3a6b,0x3a6f,0x3a75,0x3a7b,0x3a7f,
+0x3a83,0x3a87,0x3a8d,0x312f,0x3a91,0x3a97,0x3a9d,0x3aa1,0x3aa5,0x3aa9,0x3aaf,0x3ab3,0x3ab7,0x3abb,0x3abf,0x3ac3,
+0x3ac7,0x3acb,0x3ad1,0x3ad5,0x3ad9,0x3add,0x3ae3,0x3ae7,0x3aeb,0x3aef,0x3af3,0x3af9,0x3aff,0x3b03,0x3b07,0x3b0b,
+0x3b11,0x3b15,0x3147,0x3147,0x3b1b,0x3b1f,0x3b25,0x3b29,0x3b2d,0x3b31,0x3b35,0x3b39,0x3b3d,0x3b41,0x314b,0x3b47,
+0x3b4b,0x3b4f,0x3b53,0x3b57,0x3b5b,0x3b61,0x3b65,0x3b6b,0x3b71,0x3b77,0x3b7b,0x3b7f,0x3b83,0x3b87,0x3b8b,0x3b8f,
+0x3b93,0x3b97,1,1
};
static const UCPTrie norm2_nfc_data_trie={
norm2_nfc_data_trieIndex,
{ norm2_nfc_data_trieData },
- 1712, 7824,
+ 1746, 7892,
0x2fc00, 0x30,
0, 0,
0, 0,
@@ -632,7 +640,7 @@ static const UCPTrie norm2_nfc_data_trie={
0x1,
};
-static const uint16_t norm2_nfc_data_extraData[7724]={
+static const uint16_t norm2_nfc_data_extraData[7732]={
0xffff,0xffff,0x8670,0x44dc,0x8670,0x44c0,0x8670,0x44de,0x600,0x180,0x602,0x182,0x604,0x185,0x606,0x186,
0x608,0x200,0x60c,0x205,0x60e,0x44d,0x610,0x189,0x612,0x3d44,0x614,0x18b,0x618,0x39a,0x61e,0x400,
0x622,0x404,0x646,0x3d41,0x64a,0x3c00,0x8650,0x208,0x60e,0x3c04,0x646,0x3c08,0x8662,0x3c0c,0x602,0x20c,
@@ -719,408 +727,409 @@ static const uint16_t norm2_nfc_data_extraData[7724]={
0x6132,0x61a6,0xe134,0x61a8,0x6132,0x61ac,0xe134,0x61ae,0x6132,0x61b2,0xe134,0x61b4,0x6132,0x61b8,0xe134,0x61ba,
0xe132,0x61ee,0xe132,0x61f0,0xe132,0x61f2,0xe132,0x61f4,0xe132,0x61fc,0xb489,0x2e82,0x2134,0xb489,0x2e82,0x2138,
0xb489,0x2e82,0x2156,0xb489,0x49c2,0x225c,0xb489,0x49c2,0x225e,0x3489,0xcf82,0x2696,0xb489,0xd5c2,0x2698,0x348b,
-0x2c02,0x2978,0x348b,0x2e82,0x2976,0xb48b,0x2f42,0x297c,0xb48b,0x6bc2,0x2b74,0xb48b,0x6bc2,0x2b76,2,0xe602,
-0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe602,0x41,0x308,0x8608,0x3bc,0xe602,
-0x41,0x30a,0x8602,0x3f4,0xca02,0x43,0x327,0x8602,0x3c10,0xe602,0x45,0x302,0x600,0x3d80,0x602,0x3d7c,
-0x606,0x3d88,0x8612,0x3d84,0xe602,0x49,0x308,0x8602,0x3c5c,0xe602,0x4f,0x302,0x600,0x3da4,0x602,0x3da0,
-0x606,0x3dac,0x8612,0x3da8,0xe602,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,0xe602,0x4f,0x308,
-0x8608,0x454,0xe602,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,0xe602,0x61,0x302,
-0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe602,0x61,0x308,0x8608,0x3be,0xe602,0x61,0x30a,
-0x8602,0x3f6,0xca02,0x63,0x327,0x8602,0x3c12,0xe602,0x65,0x302,0x600,0x3d82,0x602,0x3d7e,0x606,0x3d8a,
-0x8612,0x3d86,0xe602,0x69,0x308,0x8602,0x3c5e,0xe602,0x6f,0x302,0x600,0x3da6,0x602,0x3da2,0x606,0x3dae,
-0x8612,0x3daa,0xe602,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe602,0x6f,0x308,0x8608,0x456,
-0xe602,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe602,0x41,0x306,0x600,0x3d60,
-0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe602,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,0x606,0x3d6a,0x8612,
-0x3d66,0xe602,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe602,0x65,0x304,0x600,0x3c2a,0x8602,0x3c2e,0xe602,
-0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe602,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,0xe602,0x53,0x301,
-0x860e,0x3cc8,0xe602,0x73,0x301,0x860e,0x3cca,0xe602,0x53,0x30c,0x860e,0x3ccc,0xe602,0x73,0x30c,0x860e,
-0x3cce,0xe602,0x55,0x303,0x8602,0x3cf0,0xe602,0x75,0x303,0x8602,0x3cf2,0xe602,0x55,0x304,0x8610,0x3cf4,
-0xe602,0x75,0x304,0x8610,0x3cf6,0xd802,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,0x3dc0,0x612,0x3dbc,
-0x8646,0x3dc4,0xd802,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,0x8646,0x3dc6,0xd802,
-0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd802,0x75,0x31b,0x600,
-0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca02,0x4f,0x328,0x8608,0x3d8,0xca02,0x6f,
-0x328,0x8608,0x3da,0xe602,0x41,0x307,0x8608,0x3c0,0xe602,0x61,0x307,0x8608,0x3c2,0xca02,0x45,0x327,
-0x860c,0x3c38,0xca02,0x65,0x327,0x860c,0x3c3a,0xe602,0x4f,0x307,0x8608,0x460,0xe602,0x6f,0x307,0x8608,
-0x462,0xe602,0x3b1,0x301,0x868a,0x3f68,0xe602,0x3b7,0x301,0x868a,0x3f88,0xe602,0x3b9,0x308,0x600,0x3fa4,
-0x602,0x720,0x8684,0x3fae,0xe602,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,0xe602,0x3c9,0x301,
-0x868a,0x3fe8,2,0xcc6,0xcc2,0x99aa,0x1996,2,0xdd9,0xdcf,0x9b94,0x1bba,0xdc02,0x4c,0x323,0x8608,
-0x3c70,0xdc02,0x6c,0x323,0x8608,0x3c72,0xdc02,0x52,0x323,0x8608,0x3cb8,0xdc02,0x72,0x323,0x8608,0x3cba,
-0xdc02,0x53,0x323,0x860e,0x3cd0,0xdc02,0x73,0x323,0x860e,0x3cd2,0xdc02,0x41,0x323,0x604,0x3d58,0x860c,
-0x3d6c,0xdc02,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc02,0x45,0x323,0x8604,0x3d8c,0xdc02,0x65,0x323,
-0x8604,0x3d8e,0xdc02,0x4f,0x323,0x8604,0x3db0,0xdc02,0x6f,0x323,0x8604,0x3db2,0xe602,0x3b1,0x313,0x600,
-0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe602,0x3b1,0x314,0x600,0x3e07,0x602,0x3e0b,0x684,0x3e0f,
-0x868a,0x3f02,0x1f00,0xe643,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe643,0x3b1,0x314,0x300,0x868a,0x3f06,
-0x1f00,0xe643,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe643,0x3b1,0x314,0x301,0x868a,0x3f0a,0x1f00,0xe643,
-0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe643,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe602,0x391,0x313,0x600,
-0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe602,0x391,0x314,0x600,0x3e17,0x602,0x3e1b,0x684,0x3e1f,
-0x868a,0x3f12,0x1f08,0xe643,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe643,0x391,0x314,0x300,0x868a,0x3f16,
-0x1f08,0xe643,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe643,0x391,0x314,0x301,0x868a,0x3f1a,0x1f08,0xe643,
-0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe643,0x391,0x314,0x342,0x868a,0x3f1e,0xe602,0x3b5,0x313,0x600,
-0x3e24,0x8602,0x3e28,0xe602,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe602,0x395,0x313,0x600,0x3e34,0x8602,
-0x3e38,0xe602,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe602,0x3b7,0x313,0x600,0x3e45,0x602,0x3e49,0x684,
-0x3e4d,0x868a,0x3f20,0xe602,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,0x3f22,0x1f20,0xe643,
-0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe643,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,0xe643,0x3b7,0x313,
-0x301,0x868a,0x3f28,0x1f21,0xe643,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe643,0x3b7,0x313,0x342,0x868a,
-0x3f2c,0x1f21,0xe643,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe602,0x397,0x313,0x600,0x3e55,0x602,0x3e59,0x684,
-0x3e5d,0x868a,0x3f30,0xe602,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,0x3f32,0x1f28,0xe643,
-0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe643,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,0xe643,0x397,0x313,
-0x301,0x868a,0x3f38,0x1f29,0xe643,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe643,0x397,0x313,0x342,0x868a,
-0x3f3c,0x1f29,0xe643,0x397,0x314,0x342,0x868a,0x3f3e,0xe602,0x3b9,0x313,0x600,0x3e64,0x602,0x3e68,0x8684,
-0x3e6c,0xe602,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe602,0x399,0x313,0x600,0x3e74,0x602,
-0x3e78,0x8684,0x3e7c,0xe602,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe602,0x3bf,0x313,0x600,
-0x3e84,0x8602,0x3e88,0xe602,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe602,0x39f,0x313,0x600,0x3e94,0x8602,
-0x3e98,0xe602,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe602,0x3c5,0x313,0x600,0x3ea4,0x602,0x3ea8,0x8684,
-0x3eac,0xe602,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe602,0x3a5,0x314,0x600,0x3eb6,0x602,
-0x3eba,0x8684,0x3ebe,0xe602,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,0x3f40,0xe602,0x3c9,
-0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe643,0x3c9,0x313,0x300,0x868a,0x3f44,
-0x1f61,0xe643,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe643,0x3c9,0x313,0x301,0x868a,0x3f48,0x1f61,0xe643,
-0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe643,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,0xe643,0x3c9,0x314,
-0x342,0x868a,0x3f4e,0xe602,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,0x3f50,0xe602,0x3a9,
-0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe643,0x3a9,0x313,0x300,0x868a,0x3f54,
-0x1f69,0xe643,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe643,0x3a9,0x313,0x301,0x868a,0x3f58,0x1f69,0xe643,
-0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe643,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,0xe643,0x3a9,0x314,
-0x342,0x868a,0x3f5e,0xe602,0x3b1,0x300,0x868a,0x3f64,0xe602,0x3b7,0x300,0x868a,0x3f84,0xe602,0x3c9,0x300,
-0x868a,0x3fe4,0xe602,0x3b1,0x342,0x868a,0x3f6e,0xe602,0x3b7,0x342,0x868a,0x3f8e,0xe602,0x3c9,0x342,0x868a,
-0x3fee,3,0xe602,0x41,0x300,0xe602,0x41,0x301,0xe602,0x41,0x303,0xe602,0x45,0x300,0xe602,0x45,
-0x301,0xe602,0x45,0x308,0xe602,0x49,0x300,0xe602,0x49,0x301,0xe602,0x49,0x302,0xe602,0x4e,0x303,
-0xe602,0x4f,0x300,0xe602,0x4f,0x301,0xe602,0x55,0x300,0xe602,0x55,0x301,0xe602,0x55,0x302,0xe602,
-0x59,0x301,0xe602,0x61,0x300,0xe602,0x61,0x301,0xe602,0x61,0x303,0xe602,0x65,0x300,0xe602,0x65,
-0x301,0xe602,0x65,0x308,0xe602,0x69,0x300,0xe602,0x69,0x301,0xe602,0x69,0x302,0xe602,0x6e,0x303,
-0xe602,0x6f,0x300,0xe602,0x6f,0x301,0xe602,0x75,0x300,0xe602,0x75,0x301,0xe602,0x75,0x302,0xe602,
-0x79,0x301,0xe602,0x79,0x308,0xe602,0x41,0x304,0xe602,0x61,0x304,0xca02,0x41,0x328,0xca02,0x61,
-0x328,0xe602,0x43,0x301,0xe602,0x63,0x301,0xe602,0x43,0x302,0xe602,0x63,0x302,0xe602,0x43,0x307,
-0xe602,0x63,0x307,0xe602,0x43,0x30c,0xe602,0x63,0x30c,0xe602,0x44,0x30c,0xe602,0x64,0x30c,0xe602,
-0x45,0x306,0xe602,0x65,0x306,0xe602,0x45,0x307,0xe602,0x65,0x307,0xca02,0x45,0x328,0xca02,0x65,
-0x328,0xe602,0x45,0x30c,0xe602,0x65,0x30c,0xe602,0x47,0x302,0xe602,0x67,0x302,0xe602,0x47,0x306,
-0xe602,0x67,0x306,0xe602,0x47,0x307,0xe602,0x67,0x307,0xca02,0x47,0x327,0xca02,0x67,0x327,0xe602,
-0x48,0x302,0xe602,0x68,0x302,0xe602,0x49,0x303,0xe602,0x69,0x303,0xe602,0x49,0x304,0xe602,0x69,
-0x304,0xe602,0x49,0x306,0xe602,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,0xe602,0x49,0x307,
-0xe602,0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe602,0x4c,0x301,0xe602,
-0x6c,0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe602,0x4c,0x30c,0xe602,0x6c,0x30c,0xe602,0x4e,
-0x301,0xe602,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe602,0x4e,0x30c,0xe602,0x6e,0x30c,
-0xe602,0x4f,0x306,0xe602,0x6f,0x306,0xe602,0x4f,0x30b,0xe602,0x6f,0x30b,0xe602,0x52,0x301,0xe602,
-0x72,0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe602,0x52,0x30c,0xe602,0x72,0x30c,0xe602,0x53,
-0x302,0xe602,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,0xca02,0x74,0x327,
-0xe602,0x54,0x30c,0xe602,0x74,0x30c,0xe602,0x55,0x306,0xe602,0x75,0x306,0xe602,0x55,0x30a,0xe602,
-0x75,0x30a,0xe602,0x55,0x30b,0xe602,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,0x328,0xe602,0x57,
-0x302,0xe602,0x77,0x302,0xe602,0x59,0x302,0xe602,0x79,0x302,0xe602,0x59,0x308,0xe602,0x5a,0x301,
-0xe602,0x7a,0x301,0xe602,0x5a,0x307,0xe602,0x7a,0x307,0xe602,0x5a,0x30c,0xe602,0x7a,0x30c,0xe602,
-0x41,0x30c,0xe602,0x61,0x30c,0xe602,0x49,0x30c,0xe602,0x69,0x30c,0xe602,0x4f,0x30c,0xe602,0x6f,
-0x30c,0xe602,0x55,0x30c,0xe602,0x75,0x30c,0xdc,0xe643,0x55,0x308,0x304,0xfc,0xe643,0x75,0x308,
-0x304,0xdc,0xe643,0x55,0x308,0x301,0xfc,0xe643,0x75,0x308,0x301,0xdc,0xe643,0x55,0x308,0x30c,
-0xfc,0xe643,0x75,0x308,0x30c,0xdc,0xe643,0x55,0x308,0x300,0xfc,0xe643,0x75,0x308,0x300,0xc4,
-0xe643,0x41,0x308,0x304,0xe4,0xe643,0x61,0x308,0x304,0x226,0xe643,0x41,0x307,0x304,0x227,0xe643,
-0x61,0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe602,0x47,0x30c,0xe602,0x67,0x30c,0xe602,
-0x4b,0x30c,0xe602,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,0x328,0x304,0xe602,
-0x1b7,0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe602,0x47,0x301,0xe602,0x67,0x301,0xe602,0x4e,
-0x300,0xe602,0x6e,0x300,0xc5,0xe643,0x41,0x30a,0x301,0xe5,0xe643,0x61,0x30a,0x301,0xe602,0xc6,
-0x301,0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe602,0x41,0x30f,0xe602,0x61,0x30f,
-0xe602,0x41,0x311,0xe602,0x61,0x311,0xe602,0x45,0x30f,0xe602,0x65,0x30f,0xe602,0x45,0x311,0xe602,
-0x65,0x311,0xe602,0x49,0x30f,0xe602,0x69,0x30f,0xe602,0x49,0x311,0xe602,0x69,0x311,0xe602,0x4f,
-0x30f,0xe602,0x6f,0x30f,0xe602,0x4f,0x311,0xe602,0x6f,0x311,0xe602,0x52,0x30f,0xe602,0x72,0x30f,
-0xe602,0x52,0x311,0xe602,0x72,0x311,0xe602,0x55,0x30f,0xe602,0x75,0x30f,0xe602,0x55,0x311,0xe602,
-0x75,0x311,0xdc02,0x53,0x326,0xdc02,0x73,0x326,0xdc02,0x54,0x326,0xdc02,0x74,0x326,0xe602,0x48,
-0x30c,0xe602,0x68,0x30c,0xd6,0xe643,0x4f,0x308,0x304,0xf6,0xe643,0x6f,0x308,0x304,0xd5,0xe643,
-0x4f,0x303,0x304,0xf5,0xe643,0x6f,0x303,0x304,0x22e,0xe643,0x4f,0x307,0x304,0x22f,0xe643,0x6f,
-0x307,0x304,0xe602,0x59,0x304,0xe602,0x79,0x304,0xe602,0xa8,0x301,0xe602,0x391,0x301,0xe602,0x395,
-0x301,0xe602,0x397,0x301,0xe602,0x399,0x301,0xe602,0x39f,0x301,0xe602,0x3a5,0x301,0xe602,0x3a9,0x301,
-0x3ca,0xe643,0x3b9,0x308,0x301,0xe602,0x399,0x308,0xe602,0x3a5,0x308,0xe602,0x3b5,0x301,0xe602,0x3b9,
-0x301,0x3cb,0xe643,0x3c5,0x308,0x301,0xe602,0x3bf,0x301,0xe602,0x3c5,0x301,0xe602,0x3d2,0x301,0xe602,
-0x3d2,0x308,0xe602,0x415,0x300,0xe602,0x415,0x308,0xe602,0x413,0x301,0xe602,0x406,0x308,0xe602,0x41a,
-0x301,0xe602,0x418,0x300,0xe602,0x423,0x306,0xe602,0x418,0x306,0xe602,0x438,0x306,0xe602,0x435,0x300,
-0xe602,0x435,0x308,0xe602,0x433,0x301,0xe602,0x456,0x308,0xe602,0x43a,0x301,0xe602,0x438,0x300,0xe602,
-0x443,0x306,0xe602,0x474,0x30f,0xe602,0x475,0x30f,0xe602,0x416,0x306,0xe602,0x436,0x306,0xe602,0x410,
-0x306,0xe602,0x430,0x306,0xe602,0x410,0x308,0xe602,0x430,0x308,0xe602,0x415,0x306,0xe602,0x435,0x306,
-0xe602,0x4d8,0x308,0xe602,0x4d9,0x308,0xe602,0x416,0x308,0xe602,0x436,0x308,0xe602,0x417,0x308,0xe602,
-0x437,0x308,0xe602,0x418,0x304,0xe602,0x438,0x304,0xe602,0x418,0x308,0xe602,0x438,0x308,0xe602,0x41e,
-0x308,0xe602,0x43e,0x308,0xe602,0x4e8,0x308,0xe602,0x4e9,0x308,0xe602,0x42d,0x308,0xe602,0x44d,0x308,
-0xe602,0x423,0x304,0xe602,0x443,0x304,0xe602,0x423,0x308,0xe602,0x443,0x308,0xe602,0x423,0x30b,0xe602,
-0x443,0x30b,0xe602,0x427,0x308,0xe602,0x447,0x308,0xe602,0x42b,0x308,0xe602,0x44b,0x308,0xe602,0x627,
-0x653,0xe602,0x627,0x654,0xe602,0x648,0x654,0xdc02,0x627,0x655,0xe602,0x64a,0x654,0xe602,0x6d5,0x654,
-0xe602,0x6c1,0x654,0xe602,0x6d2,0x654,0x702,0x928,0x93c,0x702,0x930,0x93c,0x702,0x933,0x93c,2,
-0x9c7,0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,
-0xbd7,2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x5b02,0xc46,0xc56,2,0xcbf,0xcd5,
-2,0xcc6,0xcd5,2,0xcc6,0xcd6,0xcca,0x43,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,
-0xd3e,2,0xd46,0xd57,0x902,0xdd9,0xdca,0xddc,0x943,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf,2,
-0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2,0x1b0d,
-0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f,0x1b35,
-2,0x1b42,0x1b35,0xdc02,0x41,0x325,0xdc02,0x61,0x325,0xe602,0x42,0x307,0xe602,0x62,0x307,0xdc02,
-0x42,0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,0x43,0x327,0x301,
-0xe7,0xe643,0x63,0x327,0x301,0xe602,0x44,0x307,0xe602,0x64,0x307,0xdc02,0x44,0x323,0xdc02,0x64,
-0x323,0xdc02,0x44,0x331,0xdc02,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,0xdc02,0x44,0x32d,
-0xdc02,0x64,0x32d,0x112,0xe643,0x45,0x304,0x300,0x113,0xe643,0x65,0x304,0x300,0x112,0xe643,0x45,
-0x304,0x301,0x113,0xe643,0x65,0x304,0x301,0xdc02,0x45,0x32d,0xdc02,0x65,0x32d,0xdc02,0x45,0x330,
-0xdc02,0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,0xe602,0x46,0x307,
-0xe602,0x66,0x307,0xe602,0x47,0x304,0xe602,0x67,0x304,0xe602,0x48,0x307,0xe602,0x68,0x307,0xdc02,
-0x48,0x323,0xdc02,0x68,0x323,0xe602,0x48,0x308,0xe602,0x68,0x308,0xca02,0x48,0x327,0xca02,0x68,
-0x327,0xdc02,0x48,0x32e,0xdc02,0x68,0x32e,0xdc02,0x49,0x330,0xdc02,0x69,0x330,0xcf,0xe643,0x49,
-0x308,0x301,0xef,0xe643,0x69,0x308,0x301,0xe602,0x4b,0x301,0xe602,0x6b,0x301,0xdc02,0x4b,0x323,
-0xdc02,0x6b,0x323,0xdc02,0x4b,0x331,0xdc02,0x6b,0x331,0x1e36,0xe643,0x4c,0x323,0x304,0x1e37,0xe643,
-0x6c,0x323,0x304,0xdc02,0x4c,0x331,0xdc02,0x6c,0x331,0xdc02,0x4c,0x32d,0xdc02,0x6c,0x32d,0xe602,
-0x4d,0x301,0xe602,0x6d,0x301,0xe602,0x4d,0x307,0xe602,0x6d,0x307,0xdc02,0x4d,0x323,0xdc02,0x6d,
-0x323,0xe602,0x4e,0x307,0xe602,0x6e,0x307,0xdc02,0x4e,0x323,0xdc02,0x6e,0x323,0xdc02,0x4e,0x331,
-0xdc02,0x6e,0x331,0xdc02,0x4e,0x32d,0xdc02,0x6e,0x32d,0xd5,0xe643,0x4f,0x303,0x301,0xf5,0xe643,
-0x6f,0x303,0x301,0xd5,0xe643,0x4f,0x303,0x308,0xf5,0xe643,0x6f,0x303,0x308,0x14c,0xe643,0x4f,
-0x304,0x300,0x14d,0xe643,0x6f,0x304,0x300,0x14c,0xe643,0x4f,0x304,0x301,0x14d,0xe643,0x6f,0x304,
-0x301,0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,0xe602,0x52,0x307,
-0xe602,0x72,0x307,0x1e5a,0xe643,0x52,0x323,0x304,0x1e5b,0xe643,0x72,0x323,0x304,0xdc02,0x52,0x331,
-0xdc02,0x72,0x331,0xe602,0x53,0x307,0xe602,0x73,0x307,0x15a,0xe643,0x53,0x301,0x307,0x15b,0xe643,
-0x73,0x301,0x307,0x160,0xe643,0x53,0x30c,0x307,0x161,0xe643,0x73,0x30c,0x307,0x1e62,0xe643,0x53,
-0x323,0x307,0x1e63,0xe643,0x73,0x323,0x307,0xe602,0x54,0x307,0xe602,0x74,0x307,0xdc02,0x54,0x323,
-0xdc02,0x74,0x323,0xdc02,0x54,0x331,0xdc02,0x74,0x331,0xdc02,0x54,0x32d,0xdc02,0x74,0x32d,0xdc02,
-0x55,0x324,0xdc02,0x75,0x324,0xdc02,0x55,0x330,0xdc02,0x75,0x330,0xdc02,0x55,0x32d,0xdc02,0x75,
-0x32d,0x168,0xe643,0x55,0x303,0x301,0x169,0xe643,0x75,0x303,0x301,0x16a,0xe643,0x55,0x304,0x308,
-0x16b,0xe643,0x75,0x304,0x308,0xe602,0x56,0x303,0xe602,0x76,0x303,0xdc02,0x56,0x323,0xdc02,0x76,
-0x323,0xe602,0x57,0x300,0xe602,0x77,0x300,0xe602,0x57,0x301,0xe602,0x77,0x301,0xe602,0x57,0x308,
-0xe602,0x77,0x308,0xe602,0x57,0x307,0xe602,0x77,0x307,0xdc02,0x57,0x323,0xdc02,0x77,0x323,0xe602,
-0x58,0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe602,0x59,0x307,0xe602,0x79,
-0x307,0xe602,0x5a,0x302,0xe602,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,0xdc02,0x5a,0x331,
-0xdc02,0x7a,0x331,0xdc02,0x68,0x331,0xe602,0x74,0x308,0xe602,0x77,0x30a,0xe602,0x79,0x30a,0xe602,
-0x17f,0x307,0xe602,0x41,0x309,0xe602,0x61,0x309,0xc2,0xe643,0x41,0x302,0x301,0xe2,0xe643,0x61,
-0x302,0x301,0xc2,0xe643,0x41,0x302,0x300,0xe2,0xe643,0x61,0x302,0x300,0xc2,0xe643,0x41,0x302,
-0x309,0xe2,0xe643,0x61,0x302,0x309,0xc2,0xe643,0x41,0x302,0x303,0xe2,0xe643,0x61,0x302,0x303,
-0x1ea0,0xe643,0x41,0x323,0x302,0x1ea1,0xe643,0x61,0x323,0x302,0x102,0xe643,0x41,0x306,0x301,0x103,
-0xe643,0x61,0x306,0x301,0x102,0xe643,0x41,0x306,0x300,0x103,0xe643,0x61,0x306,0x300,0x102,0xe643,
-0x41,0x306,0x309,0x103,0xe643,0x61,0x306,0x309,0x102,0xe643,0x41,0x306,0x303,0x103,0xe643,0x61,
-0x306,0x303,0x1ea0,0xe643,0x41,0x323,0x306,0x1ea1,0xe643,0x61,0x323,0x306,0xe602,0x45,0x309,0xe602,
-0x65,0x309,0xe602,0x45,0x303,0xe602,0x65,0x303,0xca,0xe643,0x45,0x302,0x301,0xea,0xe643,0x65,
-0x302,0x301,0xca,0xe643,0x45,0x302,0x300,0xea,0xe643,0x65,0x302,0x300,0xca,0xe643,0x45,0x302,
-0x309,0xea,0xe643,0x65,0x302,0x309,0xca,0xe643,0x45,0x302,0x303,0xea,0xe643,0x65,0x302,0x303,
-0x1eb8,0xe643,0x45,0x323,0x302,0x1eb9,0xe643,0x65,0x323,0x302,0xe602,0x49,0x309,0xe602,0x69,0x309,
-0xdc02,0x49,0x323,0xdc02,0x69,0x323,0xe602,0x4f,0x309,0xe602,0x6f,0x309,0xd4,0xe643,0x4f,0x302,
-0x301,0xf4,0xe643,0x6f,0x302,0x301,0xd4,0xe643,0x4f,0x302,0x300,0xf4,0xe643,0x6f,0x302,0x300,
-0xd4,0xe643,0x4f,0x302,0x309,0xf4,0xe643,0x6f,0x302,0x309,0xd4,0xe643,0x4f,0x302,0x303,0xf4,
-0xe643,0x6f,0x302,0x303,0x1ecc,0xe643,0x4f,0x323,0x302,0x1ecd,0xe643,0x6f,0x323,0x302,0x1a0,0xe643,
-0x4f,0x31b,0x301,0x1a1,0xe643,0x6f,0x31b,0x301,0x1a0,0xe643,0x4f,0x31b,0x300,0x1a1,0xe643,0x6f,
-0x31b,0x300,0x1a0,0xe643,0x4f,0x31b,0x309,0x1a1,0xe643,0x6f,0x31b,0x309,0x1a0,0xe643,0x4f,0x31b,
-0x303,0x1a1,0xe643,0x6f,0x31b,0x303,0x1a0,0xdc43,0x4f,0x31b,0x323,0x1a1,0xdc43,0x6f,0x31b,0x323,
-0xdc02,0x55,0x323,0xdc02,0x75,0x323,0xe602,0x55,0x309,0xe602,0x75,0x309,0x1af,0xe643,0x55,0x31b,
-0x301,0x1b0,0xe643,0x75,0x31b,0x301,0x1af,0xe643,0x55,0x31b,0x300,0x1b0,0xe643,0x75,0x31b,0x300,
-0x1af,0xe643,0x55,0x31b,0x309,0x1b0,0xe643,0x75,0x31b,0x309,0x1af,0xe643,0x55,0x31b,0x303,0x1b0,
-0xe643,0x75,0x31b,0x303,0x1af,0xdc43,0x55,0x31b,0x323,0x1b0,0xdc43,0x75,0x31b,0x323,0xe602,0x59,
-0x300,0xe602,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe602,0x59,0x309,0xe602,0x79,0x309,
-0xe602,0x59,0x303,0xe602,0x79,0x303,0x1f10,0xe643,0x3b5,0x313,0x300,0x1f11,0xe643,0x3b5,0x314,0x300,
-0x1f10,0xe643,0x3b5,0x313,0x301,0x1f11,0xe643,0x3b5,0x314,0x301,0x1f18,0xe643,0x395,0x313,0x300,0x1f19,
-0xe643,0x395,0x314,0x300,0x1f18,0xe643,0x395,0x313,0x301,0x1f19,0xe643,0x395,0x314,0x301,0x1f30,0xe643,
-0x3b9,0x313,0x300,0x1f31,0xe643,0x3b9,0x314,0x300,0x1f30,0xe643,0x3b9,0x313,0x301,0x1f31,0xe643,0x3b9,
-0x314,0x301,0x1f30,0xe643,0x3b9,0x313,0x342,0x1f31,0xe643,0x3b9,0x314,0x342,0x1f38,0xe643,0x399,0x313,
-0x300,0x1f39,0xe643,0x399,0x314,0x300,0x1f38,0xe643,0x399,0x313,0x301,0x1f39,0xe643,0x399,0x314,0x301,
-0x1f38,0xe643,0x399,0x313,0x342,0x1f39,0xe643,0x399,0x314,0x342,0x1f40,0xe643,0x3bf,0x313,0x300,0x1f41,
-0xe643,0x3bf,0x314,0x300,0x1f40,0xe643,0x3bf,0x313,0x301,0x1f41,0xe643,0x3bf,0x314,0x301,0x1f48,0xe643,
-0x39f,0x313,0x300,0x1f49,0xe643,0x39f,0x314,0x300,0x1f48,0xe643,0x39f,0x313,0x301,0x1f49,0xe643,0x39f,
-0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x300,0x1f51,0xe643,0x3c5,0x314,0x300,0x1f50,0xe643,0x3c5,0x313,
-0x301,0x1f51,0xe643,0x3c5,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x342,0x1f51,0xe643,0x3c5,0x314,0x342,
-0x1f59,0xe643,0x3a5,0x314,0x300,0x1f59,0xe643,0x3a5,0x314,0x301,0x1f59,0xe643,0x3a5,0x314,0x342,0xe602,
-0x3b5,0x300,0xe602,0x3b9,0x300,0xe602,0x3bf,0x300,0xe602,0x3c5,0x300,0x1f00,0xf043,0x3b1,0x313,0x345,
-0x1f01,0xf043,0x3b1,0x314,0x345,0x1f02,0x345,2,0xf044,0x3b1,0x313,0x300,0x345,0x1f03,0x345,2,
-0xf044,0x3b1,0x314,0x300,0x345,0x1f04,0x345,2,0xf044,0x3b1,0x313,0x301,0x345,0x1f05,0x345,2,
-0xf044,0x3b1,0x314,0x301,0x345,0x1f06,0x345,2,0xf044,0x3b1,0x313,0x342,0x345,0x1f07,0x345,2,
-0xf044,0x3b1,0x314,0x342,0x345,0x1f08,0xf043,0x391,0x313,0x345,0x1f09,0xf043,0x391,0x314,0x345,0x1f0a,
-0x345,2,0xf044,0x391,0x313,0x300,0x345,0x1f0b,0x345,2,0xf044,0x391,0x314,0x300,0x345,0x1f0c,
-0x345,2,0xf044,0x391,0x313,0x301,0x345,0x1f0d,0x345,2,0xf044,0x391,0x314,0x301,0x345,0x1f0e,
-0x345,2,0xf044,0x391,0x313,0x342,0x345,0x1f0f,0x345,2,0xf044,0x391,0x314,0x342,0x345,0x1f20,
-0xf043,0x3b7,0x313,0x345,0x1f21,0xf043,0x3b7,0x314,0x345,0x1f22,0x345,2,0xf044,0x3b7,0x313,0x300,
-0x345,0x1f23,0x345,2,0xf044,0x3b7,0x314,0x300,0x345,0x1f24,0x345,2,0xf044,0x3b7,0x313,0x301,
-0x345,0x1f25,0x345,2,0xf044,0x3b7,0x314,0x301,0x345,0x1f26,0x345,2,0xf044,0x3b7,0x313,0x342,
-0x345,0x1f27,0x345,2,0xf044,0x3b7,0x314,0x342,0x345,0x1f28,0xf043,0x397,0x313,0x345,0x1f29,0xf043,
-0x397,0x314,0x345,0x1f2a,0x345,2,0xf044,0x397,0x313,0x300,0x345,0x1f2b,0x345,2,0xf044,0x397,
-0x314,0x300,0x345,0x1f2c,0x345,2,0xf044,0x397,0x313,0x301,0x345,0x1f2d,0x345,2,0xf044,0x397,
-0x314,0x301,0x345,0x1f2e,0x345,2,0xf044,0x397,0x313,0x342,0x345,0x1f2f,0x345,2,0xf044,0x397,
-0x314,0x342,0x345,0x1f60,0xf043,0x3c9,0x313,0x345,0x1f61,0xf043,0x3c9,0x314,0x345,0x1f62,0x345,2,
-0xf044,0x3c9,0x313,0x300,0x345,0x1f63,0x345,2,0xf044,0x3c9,0x314,0x300,0x345,0x1f64,0x345,2,
-0xf044,0x3c9,0x313,0x301,0x345,0x1f65,0x345,2,0xf044,0x3c9,0x314,0x301,0x345,0x1f66,0x345,2,
-0xf044,0x3c9,0x313,0x342,0x345,0x1f67,0x345,2,0xf044,0x3c9,0x314,0x342,0x345,0x1f68,0xf043,0x3a9,
-0x313,0x345,0x1f69,0xf043,0x3a9,0x314,0x345,0x1f6a,0x345,2,0xf044,0x3a9,0x313,0x300,0x345,0x1f6b,
-0x345,2,0xf044,0x3a9,0x314,0x300,0x345,0x1f6c,0x345,2,0xf044,0x3a9,0x313,0x301,0x345,0x1f6d,
-0x345,2,0xf044,0x3a9,0x314,0x301,0x345,0x1f6e,0x345,2,0xf044,0x3a9,0x313,0x342,0x345,0x1f6f,
-0x345,2,0xf044,0x3a9,0x314,0x342,0x345,0xe602,0x3b1,0x306,0xe602,0x3b1,0x304,0x1f70,0xf043,0x3b1,
-0x300,0x345,0xf002,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,0x342,0x345,0xe602,
-0x391,0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf002,0x391,0x345,0xe602,0xa8,0x342,0x1f74,0xf043,
-0x3b7,0x300,0x345,0xf002,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,0x3b7,0x342,0x345,
-0xe602,0x395,0x300,0xe602,0x397,0x300,0xf002,0x397,0x345,0xe602,0x1fbf,0x300,0xe602,0x1fbf,0x301,0xe602,
-0x1fbf,0x342,0xe602,0x3b9,0x306,0xe602,0x3b9,0x304,0x3ca,0xe643,0x3b9,0x308,0x300,0xe602,0x3b9,0x342,
-0x3ca,0xe643,0x3b9,0x308,0x342,0xe602,0x399,0x306,0xe602,0x399,0x304,0xe602,0x399,0x300,0xe602,0x1ffe,
-0x300,0xe602,0x1ffe,0x301,0xe602,0x1ffe,0x342,0xe602,0x3c5,0x306,0xe602,0x3c5,0x304,0x3cb,0xe643,0x3c5,
-0x308,0x300,0xe602,0x3c1,0x313,0xe602,0x3c1,0x314,0xe602,0x3c5,0x342,0x3cb,0xe643,0x3c5,0x308,0x342,
-0xe602,0x3a5,0x306,0xe602,0x3a5,0x304,0xe602,0x3a5,0x300,0xe602,0x3a1,0x314,0xe602,0xa8,0x300,0x1f7c,
-0xf043,0x3c9,0x300,0x345,0xf002,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,0xf043,0x3c9,0x342,
-0x345,0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf002,0x3a9,0x345,0x102,0x2190,0x338,0x102,0x2192,0x338,
-0x102,0x2194,0x338,0x102,0x21d0,0x338,0x102,0x21d4,0x338,0x102,0x21d2,0x338,0x102,0x2203,0x338,0x102,
-0x2208,0x338,0x102,0x220b,0x338,0x102,0x2223,0x338,0x102,0x2225,0x338,0x102,0x223c,0x338,0x102,0x2243,
-0x338,0x102,0x2245,0x338,0x102,0x2248,0x338,0x102,0x3d,0x338,0x102,0x2261,0x338,0x102,0x224d,0x338,
-0x102,0x3c,0x338,0x102,0x3e,0x338,0x102,0x2264,0x338,0x102,0x2265,0x338,0x102,0x2272,0x338,0x102,
-0x2273,0x338,0x102,0x2276,0x338,0x102,0x2277,0x338,0x102,0x227a,0x338,0x102,0x227b,0x338,0x102,0x2282,
-0x338,0x102,0x2283,0x338,0x102,0x2286,0x338,0x102,0x2287,0x338,0x102,0x22a2,0x338,0x102,0x22a8,0x338,
-0x102,0x22a9,0x338,0x102,0x22ab,0x338,0x102,0x227c,0x338,0x102,0x227d,0x338,0x102,0x2291,0x338,0x102,
-0x2292,0x338,0x102,0x22b2,0x338,0x102,0x22b3,0x338,0x102,0x22b4,0x338,0x102,0x22b5,0x338,0x802,0x304b,
-0x3099,0x802,0x304d,0x3099,0x802,0x304f,0x3099,0x802,0x3051,0x3099,0x802,0x3053,0x3099,0x802,0x3055,0x3099,
-0x802,0x3057,0x3099,0x802,0x3059,0x3099,0x802,0x305b,0x3099,0x802,0x305d,0x3099,0x802,0x305f,0x3099,0x802,
-0x3061,0x3099,0x802,0x3064,0x3099,0x802,0x3066,0x3099,0x802,0x3068,0x3099,0x802,0x306f,0x3099,0x802,0x306f,
-0x309a,0x802,0x3072,0x3099,0x802,0x3072,0x309a,0x802,0x3075,0x3099,0x802,0x3075,0x309a,0x802,0x3078,0x3099,
-0x802,0x3078,0x309a,0x802,0x307b,0x3099,0x802,0x307b,0x309a,0x802,0x3046,0x3099,0x802,0x309d,0x3099,0x802,
-0x30ab,0x3099,0x802,0x30ad,0x3099,0x802,0x30af,0x3099,0x802,0x30b1,0x3099,0x802,0x30b3,0x3099,0x802,0x30b5,
-0x3099,0x802,0x30b7,0x3099,0x802,0x30b9,0x3099,0x802,0x30bb,0x3099,0x802,0x30bd,0x3099,0x802,0x30bf,0x3099,
-0x802,0x30c1,0x3099,0x802,0x30c4,0x3099,0x802,0x30c6,0x3099,0x802,0x30c8,0x3099,0x802,0x30cf,0x3099,0x802,
-0x30cf,0x309a,0x802,0x30d2,0x3099,0x802,0x30d2,0x309a,0x802,0x30d5,0x3099,0x802,0x30d5,0x309a,0x802,0x30d8,
-0x3099,0x802,0x30d8,0x309a,0x802,0x30db,0x3099,0x802,0x30db,0x309a,0x802,0x30a6,0x3099,0x802,0x30ef,0x3099,
-0x802,0x30f0,0x3099,0x802,0x30f1,0x3099,0x802,0x30f2,0x3099,0x802,0x30fd,0x3099,0x704,0xd804,0xdc99,0xd804,
-0xdcba,0x704,0xd804,0xdc9b,0xd804,0xdcba,0x704,0xd804,0xdca5,0xd804,0xdcba,4,0xd804,0xdd31,0xd804,0xdd27,
-4,0xd804,0xdd32,0xd804,0xdd27,4,0xd804,0xdf47,0xd804,0xdf3e,4,0xd804,0xdf47,0xd804,0xdf57,4,
-0xd805,0xdcb9,0xd805,0xdcba,4,0xd805,0xdcb9,0xd805,0xdcb0,4,0xd805,0xdcb9,0xd805,0xdcbd,4,0xd805,
-0xddb8,0xd805,0xddaf,4,0xd805,0xddb9,0xd805,0xddaf,1,0x2b9,1,0x3b,1,0xb7,0x702,0x915,
-0x93c,0x702,0x916,0x93c,0x702,0x917,0x93c,0x702,0x91c,0x93c,0x702,0x921,0x93c,0x702,0x922,0x93c,
-0x702,0x92b,0x93c,0x702,0x92f,0x93c,0x702,0x9a1,0x9bc,0x702,0x9a2,0x9bc,0x702,0x9af,0x9bc,0x702,
-0xa32,0xa3c,0x702,0xa38,0xa3c,0x702,0xa16,0xa3c,0x702,0xa17,0xa3c,0x702,0xa1c,0xa3c,0x702,0xa2b,
-0xa3c,0x702,0xb21,0xb3c,0x702,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,
-2,0xf56,0xfb7,2,0xf5b,0xfb7,2,0xf40,0xfb5,0x8202,0xfb2,0xf80,0x8202,0xfb3,0xf80,2,
-0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,
-0xfb5,1,0x3b9,1,0x60,1,0xb4,1,0x3a9,1,0x4b,1,0x3008,1,0x3009,0x102,
-0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1,1,0x4e32,1,0x53e5,
-1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1,0x61f6,1,0x7669,1,0x7f85,
-1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1,0x6d1b,1,0x70d9,1,0x73de,
-1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1,0x6b04,1,0x721b,1,0x862d,
-1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1,0x62c9,1,0x81d8,1,0x881f,
-1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1,0x4f86,1,0x51b7,1,0x52de,
-1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1,0x8606,1,0x865c,1,0x8def,
-1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1,0x7da0,1,0x83c9,1,0x9304,
-1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1,0x807e,1,0x7262,1,0x78ca,
-1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1,0x6dda,1,0x6f0f,1,0x7d2f,
-1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1,0x51cc,1,0x7a1c,1,0x7dbe,
-1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x8afe,1,0x4e39,1,0x5be7,1,0x6012,
-1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1,0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc,
-1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1,0x7701,1,0x8449,1,0x8aaa,1,0x6bba,
-1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1,0x63a0,1,0x7565,1,0x4eae,1,0x5169,
-1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1,0x8ad2,1,0x91cf,1,0x52f5,1,0x5442,
-1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1,0x792a,1,0x95ad,1,0x9a6a,1,0x9e97,
-1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1,0x8f62,1,0x5e74,1,0x6190,1,0x6200,
-1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1,0x79ca,1,0x7df4,1,0x806f,1,0x8f26,
-1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1,0x52a3,1,0x54bd,1,0x70c8,1,0x88c2,
-1,0x5ec9,1,0x5ff5,1,0x637b,1,0x6bae,1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9,
-1,0x5dba,1,0x601c,1,0x73b2,1,0x7469,1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6,
-1,0x9748,1,0x9818,1,0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86,
-1,0x50da,1,0x5bee,1,0x5c3f,1,0x6599,1,0x71ce,1,0x7642,1,0x84fc,1,0x907c,
-1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,1,0x6d41,1,0x6e9c,
-1,0x7409,1,0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,1,0x622e,1,0x9678,
-1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,1,0x6817,1,0x9686,
-1,0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,1,0x6ce5,1,0x7406,
-1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,1,0x533f,1,0x6eba,
-1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,1,0x9e9f,1,0x6797,
-1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,1,0x7099,1,0x8b58,
-1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,1,0x7cd6,1,0x5b85,
-1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,1,0x5ed3,1,0x5140,
-1,0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,1,0x793c,1,0x795e,
-1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,1,0x8af8,1,0x9038,
-1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x90de,1,0x96b7,1,0x4fae,
-1,0x50e7,1,0x514d,1,0x52c9,1,0x52e4,1,0x5351,1,0x559d,1,0x5606,1,0x5668,
-1,0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,1,0x6094,1,0x6168,1,0x618e,1,0x61f2,
-1,0x654f,1,0x65e2,1,0x6691,1,0x6885,1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e,
-1,0x722b,1,0x7422,1,0x7891,1,0x793e,1,0x7949,1,0x7948,1,0x7950,1,0x7956,
-1,0x795d,1,0x798d,1,0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,1,0x7e09,1,0x7e41,
-1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,1,0x8457,1,0x8910,1,0x8996,1,0x8b01,
-1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x96e3,1,0x97ff,1,0x983b,1,0x6075,
-2,0xd850,0xdeee,1,0x8218,1,0x4e26,1,0x51b5,1,0x5168,1,0x4f80,1,0x5145,1,
-0x5180,1,0x52c7,1,0x52fa,1,0x5555,1,0x5599,1,0x55e2,1,0x58b3,1,0x5944,1,
-0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,0x5fad,1,0x60d8,1,
-0x614e,1,0x6108,1,0x6160,1,0x6234,1,0x63c4,1,0x641c,1,0x6452,1,0x6556,1,
-0x671b,1,0x6756,1,0x6b79,1,0x6edb,1,0x6ecb,1,0x701e,1,0x77a7,1,0x7235,1,
-0x72af,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,0x76db,1,0x76f4,1,
-0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7c7b,1,0x7d5b,1,0x7f3e,1,0x8352,1,
-0x83ef,1,0x8779,1,0x8941,1,0x8986,1,0x8abf,1,0x8acb,1,0x8aed,1,0x8b8a,1,
-0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x97db,1,0x980b,1,0x9b12,2,
-0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,1,0x4039,2,0xd854,
-0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0xe02,0x5d9,0x5b4,0x1102,0x5f2,
-0x5b7,0x1802,0x5e9,0x5c1,0x1902,0x5e9,0x5c2,0xfb49,0x1843,0x5e9,0x5bc,0x5c1,0xfb49,0x1943,0x5e9,0x5bc,
-0x5c2,0x1102,0x5d0,0x5b7,0x1202,0x5d0,0x5b8,0x1502,0x5d0,0x5bc,0x1502,0x5d1,0x5bc,0x1502,0x5d2,0x5bc,
-0x1502,0x5d3,0x5bc,0x1502,0x5d4,0x5bc,0x1502,0x5d5,0x5bc,0x1502,0x5d6,0x5bc,0x1502,0x5d8,0x5bc,0x1502,
-0x5d9,0x5bc,0x1502,0x5da,0x5bc,0x1502,0x5db,0x5bc,0x1502,0x5dc,0x5bc,0x1502,0x5de,0x5bc,0x1502,0x5e0,
-0x5bc,0x1502,0x5e1,0x5bc,0x1502,0x5e3,0x5bc,0x1502,0x5e4,0x5bc,0x1502,0x5e6,0x5bc,0x1502,0x5e7,0x5bc,
-0x1502,0x5e8,0x5bc,0x1502,0x5e9,0x5bc,0x1502,0x5ea,0x5bc,0x1302,0x5d5,0x5b9,0x1702,0x5d1,0x5bf,0x1702,
-0x5db,0x5bf,0x1702,0x5e4,0x5bf,0xd804,0xd834,0xdd57,0xd834,0xdd65,0xd804,0xd834,0xdd58,0xd834,0xdd65,0xd834,
-0xdd5f,0xd834,0xdd6e,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xdd5f,0xd834,0xdd6f,4,
-0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xdd5f,0xd834,0xdd70,4,0xd846,0xd834,0xdd58,0xd834,
-0xdd65,0xd834,0xdd70,0xd834,0xdd5f,0xd834,0xdd71,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd71,0xd834,
-0xdd5f,0xd834,0xdd72,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0xd804,0xd834,0xddb9,0xd834,0xdd65,
-0xd804,0xd834,0xddba,0xd834,0xdd65,0xd834,0xddbb,0xd834,0xdd6e,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,
-0xdd6e,0xd834,0xddbc,0xd834,0xdd6e,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbb,0xd834,
-0xdd6f,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xddbc,0xd834,0xdd6f,4,0xd846,0xd834,
-0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,0xd840,0xdd22,1,0x4f60,
-1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50cf,1,0x349e,2,0xd841,0xde3a,1,
-0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167,1,0x518d,2,0xd841,
-0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,2,0xd864,0xdddf,1,0x51f5,1,0x5203,
-1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277,1,0x3515,1,0x5305,1,0x5306,
-1,0x5349,1,0x535a,1,0x5373,1,0x537d,1,0x537f,2,0xd842,0xde2c,1,0x7070,1,
-0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1,1,0x5406,1,0x549e,1,0x5438,
-1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510,1,0x5553,1,0x5563,1,0x5584,
-1,0x55ab,1,0x55b3,1,0x55c2,1,0x5716,1,0x5717,1,0x5651,1,0x5674,1,0x58ee,
-1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,1,0x58ac,2,0xd845,
-0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,0x5962,2,0xd845,0xdea8,
-2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,0x5a66,1,0x36ee,1,
-0x36fc,1,0x5b08,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,1,0x5bf3,2,0xd846,
-0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1,0x5c60,1,0x5cc0,1,
-0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1,0x5d6b,1,0x5d7c,1,
-0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1,0x5e69,1,0x3862,2,
-0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,2,0xd868,0xdf92,1,0x5efe,2,
-0xd848,0xdf31,1,0x8201,1,0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62,
-1,0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a,
-1,0x391c,2,0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,0x617a,1,0x61b2,1,
-0x61a4,1,0x61af,1,0x61de,1,0x6210,1,0x621b,1,0x625d,1,0x62b1,1,0x62d4,1,
-0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1,0x6368,1,0x6383,1,0x63e4,2,0xd84a,
-0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e,1,0x6469,1,0x647e,1,0x649d,1,
-0x6477,1,0x3a6c,1,0x656c,2,0xd84c,0xdc0a,1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19,
-1,0x3b08,1,0x3ae4,1,0x5192,1,0x5195,1,0x6700,1,0x669c,1,0x80ad,1,0x43d9,
-1,0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,0x67fa,1,0x6785,1,
-0x6852,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x6942,1,0x69a3,1,0x69ea,
-1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2,0xd84e,0xdca7,1,0x6b54,
-1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bbb,2,0xd84e,0xde8d,2,0xd847,0xdd0b,2,0xd84e,
-0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1,0x6c67,1,0x6d16,1,0x6d3e,
-1,0x6d69,1,0x6d78,1,0x6d85,2,0xd84f,0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1,
-0x3d33,1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e,
-1,0x6fc6,1,0x7039,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,1,0x7077,1,0x70ad,
-2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,0xdfab,1,0x7228,1,
-0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,0xd852,0xdc14,1,0x737a,
-1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x7447,1,0x745c,1,0x7485,1,0x74ca,
-1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92,2,0xd848,0xdd9f,1,
-0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1,0x3ffc,1,0x4008,2,0xd854,
-0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854,0xdd33,1,0x771e,1,0x771f,1,0x778b,
-1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x40e3,2,0xd855,0xde26,2,0xd855,
-0xde9a,2,0xd855,0xdec5,1,0x79eb,1,0x412f,1,0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2,
-0xd856,0xdea7,1,0x7aee,1,0x4202,2,0xd856,0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2,
-0xd857,0xdc80,1,0x7cd2,1,0x42a0,1,0x7ce8,1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1,
-0x7d63,1,0x4301,1,0x7dc7,1,0x7e02,1,0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858,
-0xde47,1,0x4359,2,0xd858,0xded9,1,0x7f7a,2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,2,
-0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1,
-0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859,
-0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,0x8204,1,0x8f9e,1,0x446b,1,0x8291,1,
-0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,0x82e6,2,0xd85a,0xdf3c,
-1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,1,0x8353,1,0x83ca,
-1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b,0xdcd5,1,0x452b,1,
-0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b,0xdf2c,1,0x455d,1,
-0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1,0x8667,1,0x8669,1,
-0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8728,1,0x876b,1,0x8786,1,0x45d7,1,
-0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2,0xd85d,0xde67,1,0x88d7,1,0x88de,
-1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2,0xd85e,0xdd66,1,0x46be,1,0x46c7,
-1,0x8aa0,1,0x8c55,2,0xd85f,0xdca8,1,0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2,
-0xd85f,0xdf2f,2,0xd842,0xdc04,1,0x8dcb,1,0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4,
-2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1,
-0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa,
-1,0x958b,1,0x4995,1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1,
-0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a,
-1,0x4ab2,2,0xd865,0xdc96,1,0x9829,2,0xd865,0xddb6,1,0x98e2,1,0x4b33,1,0x9929,
-1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,0x9c40,1,0x9cfd,1,
-0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868,0xdd05,2,0xd868,0xde0e,
-2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1,0x9f05,1,0x9f0f,1,
-0x9f16,1,0x9f3b,2,0xd869,0xde00,0x3ac,0xe642,0x3b1,0x301,0x3ad,0xe642,0x3b5,0x301,0x3ae,0xe642,
-0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,0x3bf,0x301,0x3cd,0xe642,0x3c5,0x301,0x3ce,0xe642,
-0x3c9,0x301,0x386,0xe642,0x391,0x301,0x388,0xe642,0x395,0x301,0x389,0xe642,0x397,0x301,0x390,1,
-0xe643,0x3b9,0x308,0x301,0x38a,0xe642,0x399,0x301,0x3b0,1,0xe643,0x3c5,0x308,0x301,0x38e,0xe642,
-0x3a5,0x301,0x385,0xe642,0xa8,0x301,0x38c,0xe642,0x39f,0x301,0x38f,0xe642,0x3a9,0x301,0xc5,0xe642,
-0x41,0x30a,0xe6e6,0xe681,0x300,0xe6e6,0xe681,0x301,0xe6e6,0xe681,0x313,0xe6e6,0xe682,0x308,0x301,0x8100,
-0x8282,0xf71,0xf72,0x8100,0x8482,0xf71,0xf74,0x8100,0x8282,0xf71,0xf80,0
+0x2c02,0x2978,0x348b,0x2e82,0x2976,0xb48b,0x2f42,0x297c,0xb48b,0x6bc2,0x2b74,0xb48b,0x6bc2,0x2b76,0xb48d,0x4c02,
+0x3270,2,0xe602,0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe602,0x41,0x308,
+0x8608,0x3bc,0xe602,0x41,0x30a,0x8602,0x3f4,0xca02,0x43,0x327,0x8602,0x3c10,0xe602,0x45,0x302,0x600,
+0x3d80,0x602,0x3d7c,0x606,0x3d88,0x8612,0x3d84,0xe602,0x49,0x308,0x8602,0x3c5c,0xe602,0x4f,0x302,0x600,
+0x3da4,0x602,0x3da0,0x606,0x3dac,0x8612,0x3da8,0xe602,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,
+0xe602,0x4f,0x308,0x8608,0x454,0xe602,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,
+0xe602,0x61,0x302,0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe602,0x61,0x308,0x8608,0x3be,
+0xe602,0x61,0x30a,0x8602,0x3f6,0xca02,0x63,0x327,0x8602,0x3c12,0xe602,0x65,0x302,0x600,0x3d82,0x602,
+0x3d7e,0x606,0x3d8a,0x8612,0x3d86,0xe602,0x69,0x308,0x8602,0x3c5e,0xe602,0x6f,0x302,0x600,0x3da6,0x602,
+0x3da2,0x606,0x3dae,0x8612,0x3daa,0xe602,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe602,0x6f,
+0x308,0x8608,0x456,0xe602,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe602,0x41,
+0x306,0x600,0x3d60,0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe602,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,
+0x606,0x3d6a,0x8612,0x3d66,0xe602,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe602,0x65,0x304,0x600,0x3c2a,
+0x8602,0x3c2e,0xe602,0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe602,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,
+0xe602,0x53,0x301,0x860e,0x3cc8,0xe602,0x73,0x301,0x860e,0x3cca,0xe602,0x53,0x30c,0x860e,0x3ccc,0xe602,
+0x73,0x30c,0x860e,0x3cce,0xe602,0x55,0x303,0x8602,0x3cf0,0xe602,0x75,0x303,0x8602,0x3cf2,0xe602,0x55,
+0x304,0x8610,0x3cf4,0xe602,0x75,0x304,0x8610,0x3cf6,0xd802,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,
+0x3dc0,0x612,0x3dbc,0x8646,0x3dc4,0xd802,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,
+0x8646,0x3dc6,0xd802,0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd802,
+0x75,0x31b,0x600,0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca02,0x4f,0x328,0x8608,
+0x3d8,0xca02,0x6f,0x328,0x8608,0x3da,0xe602,0x41,0x307,0x8608,0x3c0,0xe602,0x61,0x307,0x8608,0x3c2,
+0xca02,0x45,0x327,0x860c,0x3c38,0xca02,0x65,0x327,0x860c,0x3c3a,0xe602,0x4f,0x307,0x8608,0x460,0xe602,
+0x6f,0x307,0x8608,0x462,0xe602,0x3b1,0x301,0x868a,0x3f68,0xe602,0x3b7,0x301,0x868a,0x3f88,0xe602,0x3b9,
+0x308,0x600,0x3fa4,0x602,0x720,0x8684,0x3fae,0xe602,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,
+0xe602,0x3c9,0x301,0x868a,0x3fe8,2,0xcc6,0xcc2,0x99aa,0x1996,2,0xdd9,0xdcf,0x9b94,0x1bba,0xdc02,
+0x4c,0x323,0x8608,0x3c70,0xdc02,0x6c,0x323,0x8608,0x3c72,0xdc02,0x52,0x323,0x8608,0x3cb8,0xdc02,0x72,
+0x323,0x8608,0x3cba,0xdc02,0x53,0x323,0x860e,0x3cd0,0xdc02,0x73,0x323,0x860e,0x3cd2,0xdc02,0x41,0x323,
+0x604,0x3d58,0x860c,0x3d6c,0xdc02,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc02,0x45,0x323,0x8604,0x3d8c,
+0xdc02,0x65,0x323,0x8604,0x3d8e,0xdc02,0x4f,0x323,0x8604,0x3db0,0xdc02,0x6f,0x323,0x8604,0x3db2,0xe602,
+0x3b1,0x313,0x600,0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe602,0x3b1,0x314,0x600,0x3e07,0x602,
+0x3e0b,0x684,0x3e0f,0x868a,0x3f02,0x1f00,0xe643,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe643,0x3b1,0x314,
+0x300,0x868a,0x3f06,0x1f00,0xe643,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe643,0x3b1,0x314,0x301,0x868a,
+0x3f0a,0x1f00,0xe643,0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe643,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe602,
+0x391,0x313,0x600,0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe602,0x391,0x314,0x600,0x3e17,0x602,
+0x3e1b,0x684,0x3e1f,0x868a,0x3f12,0x1f08,0xe643,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe643,0x391,0x314,
+0x300,0x868a,0x3f16,0x1f08,0xe643,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe643,0x391,0x314,0x301,0x868a,
+0x3f1a,0x1f08,0xe643,0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe643,0x391,0x314,0x342,0x868a,0x3f1e,0xe602,
+0x3b5,0x313,0x600,0x3e24,0x8602,0x3e28,0xe602,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe602,0x395,0x313,
+0x600,0x3e34,0x8602,0x3e38,0xe602,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe602,0x3b7,0x313,0x600,0x3e45,
+0x602,0x3e49,0x684,0x3e4d,0x868a,0x3f20,0xe602,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,
+0x3f22,0x1f20,0xe643,0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe643,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,
+0xe643,0x3b7,0x313,0x301,0x868a,0x3f28,0x1f21,0xe643,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe643,0x3b7,
+0x313,0x342,0x868a,0x3f2c,0x1f21,0xe643,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe602,0x397,0x313,0x600,0x3e55,
+0x602,0x3e59,0x684,0x3e5d,0x868a,0x3f30,0xe602,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,
+0x3f32,0x1f28,0xe643,0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe643,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,
+0xe643,0x397,0x313,0x301,0x868a,0x3f38,0x1f29,0xe643,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe643,0x397,
+0x313,0x342,0x868a,0x3f3c,0x1f29,0xe643,0x397,0x314,0x342,0x868a,0x3f3e,0xe602,0x3b9,0x313,0x600,0x3e64,
+0x602,0x3e68,0x8684,0x3e6c,0xe602,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe602,0x399,0x313,
+0x600,0x3e74,0x602,0x3e78,0x8684,0x3e7c,0xe602,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe602,
+0x3bf,0x313,0x600,0x3e84,0x8602,0x3e88,0xe602,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe602,0x39f,0x313,
+0x600,0x3e94,0x8602,0x3e98,0xe602,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe602,0x3c5,0x313,0x600,0x3ea4,
+0x602,0x3ea8,0x8684,0x3eac,0xe602,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe602,0x3a5,0x314,
+0x600,0x3eb6,0x602,0x3eba,0x8684,0x3ebe,0xe602,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,
+0x3f40,0xe602,0x3c9,0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe643,0x3c9,0x313,
+0x300,0x868a,0x3f44,0x1f61,0xe643,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe643,0x3c9,0x313,0x301,0x868a,
+0x3f48,0x1f61,0xe643,0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe643,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,
+0xe643,0x3c9,0x314,0x342,0x868a,0x3f4e,0xe602,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,
+0x3f50,0xe602,0x3a9,0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe643,0x3a9,0x313,
+0x300,0x868a,0x3f54,0x1f69,0xe643,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe643,0x3a9,0x313,0x301,0x868a,
+0x3f58,0x1f69,0xe643,0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe643,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,
+0xe643,0x3a9,0x314,0x342,0x868a,0x3f5e,0xe602,0x3b1,0x300,0x868a,0x3f64,0xe602,0x3b7,0x300,0x868a,0x3f84,
+0xe602,0x3c9,0x300,0x868a,0x3fe4,0xe602,0x3b1,0x342,0x868a,0x3f6e,0xe602,0x3b7,0x342,0x868a,0x3f8e,0xe602,
+0x3c9,0x342,0x868a,0x3fee,3,0xe602,0x41,0x300,0xe602,0x41,0x301,0xe602,0x41,0x303,0xe602,0x45,
+0x300,0xe602,0x45,0x301,0xe602,0x45,0x308,0xe602,0x49,0x300,0xe602,0x49,0x301,0xe602,0x49,0x302,
+0xe602,0x4e,0x303,0xe602,0x4f,0x300,0xe602,0x4f,0x301,0xe602,0x55,0x300,0xe602,0x55,0x301,0xe602,
+0x55,0x302,0xe602,0x59,0x301,0xe602,0x61,0x300,0xe602,0x61,0x301,0xe602,0x61,0x303,0xe602,0x65,
+0x300,0xe602,0x65,0x301,0xe602,0x65,0x308,0xe602,0x69,0x300,0xe602,0x69,0x301,0xe602,0x69,0x302,
+0xe602,0x6e,0x303,0xe602,0x6f,0x300,0xe602,0x6f,0x301,0xe602,0x75,0x300,0xe602,0x75,0x301,0xe602,
+0x75,0x302,0xe602,0x79,0x301,0xe602,0x79,0x308,0xe602,0x41,0x304,0xe602,0x61,0x304,0xca02,0x41,
+0x328,0xca02,0x61,0x328,0xe602,0x43,0x301,0xe602,0x63,0x301,0xe602,0x43,0x302,0xe602,0x63,0x302,
+0xe602,0x43,0x307,0xe602,0x63,0x307,0xe602,0x43,0x30c,0xe602,0x63,0x30c,0xe602,0x44,0x30c,0xe602,
+0x64,0x30c,0xe602,0x45,0x306,0xe602,0x65,0x306,0xe602,0x45,0x307,0xe602,0x65,0x307,0xca02,0x45,
+0x328,0xca02,0x65,0x328,0xe602,0x45,0x30c,0xe602,0x65,0x30c,0xe602,0x47,0x302,0xe602,0x67,0x302,
+0xe602,0x47,0x306,0xe602,0x67,0x306,0xe602,0x47,0x307,0xe602,0x67,0x307,0xca02,0x47,0x327,0xca02,
+0x67,0x327,0xe602,0x48,0x302,0xe602,0x68,0x302,0xe602,0x49,0x303,0xe602,0x69,0x303,0xe602,0x49,
+0x304,0xe602,0x69,0x304,0xe602,0x49,0x306,0xe602,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,
+0xe602,0x49,0x307,0xe602,0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe602,
+0x4c,0x301,0xe602,0x6c,0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe602,0x4c,0x30c,0xe602,0x6c,
+0x30c,0xe602,0x4e,0x301,0xe602,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe602,0x4e,0x30c,
+0xe602,0x6e,0x30c,0xe602,0x4f,0x306,0xe602,0x6f,0x306,0xe602,0x4f,0x30b,0xe602,0x6f,0x30b,0xe602,
+0x52,0x301,0xe602,0x72,0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe602,0x52,0x30c,0xe602,0x72,
+0x30c,0xe602,0x53,0x302,0xe602,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,
+0xca02,0x74,0x327,0xe602,0x54,0x30c,0xe602,0x74,0x30c,0xe602,0x55,0x306,0xe602,0x75,0x306,0xe602,
+0x55,0x30a,0xe602,0x75,0x30a,0xe602,0x55,0x30b,0xe602,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,
+0x328,0xe602,0x57,0x302,0xe602,0x77,0x302,0xe602,0x59,0x302,0xe602,0x79,0x302,0xe602,0x59,0x308,
+0xe602,0x5a,0x301,0xe602,0x7a,0x301,0xe602,0x5a,0x307,0xe602,0x7a,0x307,0xe602,0x5a,0x30c,0xe602,
+0x7a,0x30c,0xe602,0x41,0x30c,0xe602,0x61,0x30c,0xe602,0x49,0x30c,0xe602,0x69,0x30c,0xe602,0x4f,
+0x30c,0xe602,0x6f,0x30c,0xe602,0x55,0x30c,0xe602,0x75,0x30c,0xdc,0xe643,0x55,0x308,0x304,0xfc,
+0xe643,0x75,0x308,0x304,0xdc,0xe643,0x55,0x308,0x301,0xfc,0xe643,0x75,0x308,0x301,0xdc,0xe643,
+0x55,0x308,0x30c,0xfc,0xe643,0x75,0x308,0x30c,0xdc,0xe643,0x55,0x308,0x300,0xfc,0xe643,0x75,
+0x308,0x300,0xc4,0xe643,0x41,0x308,0x304,0xe4,0xe643,0x61,0x308,0x304,0x226,0xe643,0x41,0x307,
+0x304,0x227,0xe643,0x61,0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe602,0x47,0x30c,0xe602,
+0x67,0x30c,0xe602,0x4b,0x30c,0xe602,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,
+0x328,0x304,0xe602,0x1b7,0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe602,0x47,0x301,0xe602,0x67,
+0x301,0xe602,0x4e,0x300,0xe602,0x6e,0x300,0xc5,0xe643,0x41,0x30a,0x301,0xe5,0xe643,0x61,0x30a,
+0x301,0xe602,0xc6,0x301,0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe602,0x41,0x30f,
+0xe602,0x61,0x30f,0xe602,0x41,0x311,0xe602,0x61,0x311,0xe602,0x45,0x30f,0xe602,0x65,0x30f,0xe602,
+0x45,0x311,0xe602,0x65,0x311,0xe602,0x49,0x30f,0xe602,0x69,0x30f,0xe602,0x49,0x311,0xe602,0x69,
+0x311,0xe602,0x4f,0x30f,0xe602,0x6f,0x30f,0xe602,0x4f,0x311,0xe602,0x6f,0x311,0xe602,0x52,0x30f,
+0xe602,0x72,0x30f,0xe602,0x52,0x311,0xe602,0x72,0x311,0xe602,0x55,0x30f,0xe602,0x75,0x30f,0xe602,
+0x55,0x311,0xe602,0x75,0x311,0xdc02,0x53,0x326,0xdc02,0x73,0x326,0xdc02,0x54,0x326,0xdc02,0x74,
+0x326,0xe602,0x48,0x30c,0xe602,0x68,0x30c,0xd6,0xe643,0x4f,0x308,0x304,0xf6,0xe643,0x6f,0x308,
+0x304,0xd5,0xe643,0x4f,0x303,0x304,0xf5,0xe643,0x6f,0x303,0x304,0x22e,0xe643,0x4f,0x307,0x304,
+0x22f,0xe643,0x6f,0x307,0x304,0xe602,0x59,0x304,0xe602,0x79,0x304,0xe602,0xa8,0x301,0xe602,0x391,
+0x301,0xe602,0x395,0x301,0xe602,0x397,0x301,0xe602,0x399,0x301,0xe602,0x39f,0x301,0xe602,0x3a5,0x301,
+0xe602,0x3a9,0x301,0x3ca,0xe643,0x3b9,0x308,0x301,0xe602,0x399,0x308,0xe602,0x3a5,0x308,0xe602,0x3b5,
+0x301,0xe602,0x3b9,0x301,0x3cb,0xe643,0x3c5,0x308,0x301,0xe602,0x3bf,0x301,0xe602,0x3c5,0x301,0xe602,
+0x3d2,0x301,0xe602,0x3d2,0x308,0xe602,0x415,0x300,0xe602,0x415,0x308,0xe602,0x413,0x301,0xe602,0x406,
+0x308,0xe602,0x41a,0x301,0xe602,0x418,0x300,0xe602,0x423,0x306,0xe602,0x418,0x306,0xe602,0x438,0x306,
+0xe602,0x435,0x300,0xe602,0x435,0x308,0xe602,0x433,0x301,0xe602,0x456,0x308,0xe602,0x43a,0x301,0xe602,
+0x438,0x300,0xe602,0x443,0x306,0xe602,0x474,0x30f,0xe602,0x475,0x30f,0xe602,0x416,0x306,0xe602,0x436,
+0x306,0xe602,0x410,0x306,0xe602,0x430,0x306,0xe602,0x410,0x308,0xe602,0x430,0x308,0xe602,0x415,0x306,
+0xe602,0x435,0x306,0xe602,0x4d8,0x308,0xe602,0x4d9,0x308,0xe602,0x416,0x308,0xe602,0x436,0x308,0xe602,
+0x417,0x308,0xe602,0x437,0x308,0xe602,0x418,0x304,0xe602,0x438,0x304,0xe602,0x418,0x308,0xe602,0x438,
+0x308,0xe602,0x41e,0x308,0xe602,0x43e,0x308,0xe602,0x4e8,0x308,0xe602,0x4e9,0x308,0xe602,0x42d,0x308,
+0xe602,0x44d,0x308,0xe602,0x423,0x304,0xe602,0x443,0x304,0xe602,0x423,0x308,0xe602,0x443,0x308,0xe602,
+0x423,0x30b,0xe602,0x443,0x30b,0xe602,0x427,0x308,0xe602,0x447,0x308,0xe602,0x42b,0x308,0xe602,0x44b,
+0x308,0xe602,0x627,0x653,0xe602,0x627,0x654,0xe602,0x648,0x654,0xdc02,0x627,0x655,0xe602,0x64a,0x654,
+0xe602,0x6d5,0x654,0xe602,0x6c1,0x654,0xe602,0x6d2,0x654,0x702,0x928,0x93c,0x702,0x930,0x93c,0x702,
+0x933,0x93c,2,0x9c7,0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,
+0xb57,2,0xb92,0xbd7,2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x5b02,0xc46,0xc56,
+2,0xcbf,0xcd5,2,0xcc6,0xcd5,2,0xcc6,0xcd6,0xcca,0x43,0xcc6,0xcc2,0xcd5,2,0xd46,
+0xd3e,2,0xd47,0xd3e,2,0xd46,0xd57,0x902,0xdd9,0xdca,0xddc,0x943,0xdd9,0xdcf,0xdca,2,
+0xdd9,0xddf,2,0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,
+0x1b35,2,0x1b0d,0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,
+2,0x1b3f,0x1b35,2,0x1b42,0x1b35,0xdc02,0x41,0x325,0xdc02,0x61,0x325,0xe602,0x42,0x307,0xe602,
+0x62,0x307,0xdc02,0x42,0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,
+0x43,0x327,0x301,0xe7,0xe643,0x63,0x327,0x301,0xe602,0x44,0x307,0xe602,0x64,0x307,0xdc02,0x44,
+0x323,0xdc02,0x64,0x323,0xdc02,0x44,0x331,0xdc02,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,
+0xdc02,0x44,0x32d,0xdc02,0x64,0x32d,0x112,0xe643,0x45,0x304,0x300,0x113,0xe643,0x65,0x304,0x300,
+0x112,0xe643,0x45,0x304,0x301,0x113,0xe643,0x65,0x304,0x301,0xdc02,0x45,0x32d,0xdc02,0x65,0x32d,
+0xdc02,0x45,0x330,0xdc02,0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,
+0xe602,0x46,0x307,0xe602,0x66,0x307,0xe602,0x47,0x304,0xe602,0x67,0x304,0xe602,0x48,0x307,0xe602,
+0x68,0x307,0xdc02,0x48,0x323,0xdc02,0x68,0x323,0xe602,0x48,0x308,0xe602,0x68,0x308,0xca02,0x48,
+0x327,0xca02,0x68,0x327,0xdc02,0x48,0x32e,0xdc02,0x68,0x32e,0xdc02,0x49,0x330,0xdc02,0x69,0x330,
+0xcf,0xe643,0x49,0x308,0x301,0xef,0xe643,0x69,0x308,0x301,0xe602,0x4b,0x301,0xe602,0x6b,0x301,
+0xdc02,0x4b,0x323,0xdc02,0x6b,0x323,0xdc02,0x4b,0x331,0xdc02,0x6b,0x331,0x1e36,0xe643,0x4c,0x323,
+0x304,0x1e37,0xe643,0x6c,0x323,0x304,0xdc02,0x4c,0x331,0xdc02,0x6c,0x331,0xdc02,0x4c,0x32d,0xdc02,
+0x6c,0x32d,0xe602,0x4d,0x301,0xe602,0x6d,0x301,0xe602,0x4d,0x307,0xe602,0x6d,0x307,0xdc02,0x4d,
+0x323,0xdc02,0x6d,0x323,0xe602,0x4e,0x307,0xe602,0x6e,0x307,0xdc02,0x4e,0x323,0xdc02,0x6e,0x323,
+0xdc02,0x4e,0x331,0xdc02,0x6e,0x331,0xdc02,0x4e,0x32d,0xdc02,0x6e,0x32d,0xd5,0xe643,0x4f,0x303,
+0x301,0xf5,0xe643,0x6f,0x303,0x301,0xd5,0xe643,0x4f,0x303,0x308,0xf5,0xe643,0x6f,0x303,0x308,
+0x14c,0xe643,0x4f,0x304,0x300,0x14d,0xe643,0x6f,0x304,0x300,0x14c,0xe643,0x4f,0x304,0x301,0x14d,
+0xe643,0x6f,0x304,0x301,0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,
+0xe602,0x52,0x307,0xe602,0x72,0x307,0x1e5a,0xe643,0x52,0x323,0x304,0x1e5b,0xe643,0x72,0x323,0x304,
+0xdc02,0x52,0x331,0xdc02,0x72,0x331,0xe602,0x53,0x307,0xe602,0x73,0x307,0x15a,0xe643,0x53,0x301,
+0x307,0x15b,0xe643,0x73,0x301,0x307,0x160,0xe643,0x53,0x30c,0x307,0x161,0xe643,0x73,0x30c,0x307,
+0x1e62,0xe643,0x53,0x323,0x307,0x1e63,0xe643,0x73,0x323,0x307,0xe602,0x54,0x307,0xe602,0x74,0x307,
+0xdc02,0x54,0x323,0xdc02,0x74,0x323,0xdc02,0x54,0x331,0xdc02,0x74,0x331,0xdc02,0x54,0x32d,0xdc02,
+0x74,0x32d,0xdc02,0x55,0x324,0xdc02,0x75,0x324,0xdc02,0x55,0x330,0xdc02,0x75,0x330,0xdc02,0x55,
+0x32d,0xdc02,0x75,0x32d,0x168,0xe643,0x55,0x303,0x301,0x169,0xe643,0x75,0x303,0x301,0x16a,0xe643,
+0x55,0x304,0x308,0x16b,0xe643,0x75,0x304,0x308,0xe602,0x56,0x303,0xe602,0x76,0x303,0xdc02,0x56,
+0x323,0xdc02,0x76,0x323,0xe602,0x57,0x300,0xe602,0x77,0x300,0xe602,0x57,0x301,0xe602,0x77,0x301,
+0xe602,0x57,0x308,0xe602,0x77,0x308,0xe602,0x57,0x307,0xe602,0x77,0x307,0xdc02,0x57,0x323,0xdc02,
+0x77,0x323,0xe602,0x58,0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe602,0x59,
+0x307,0xe602,0x79,0x307,0xe602,0x5a,0x302,0xe602,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,
+0xdc02,0x5a,0x331,0xdc02,0x7a,0x331,0xdc02,0x68,0x331,0xe602,0x74,0x308,0xe602,0x77,0x30a,0xe602,
+0x79,0x30a,0xe602,0x17f,0x307,0xe602,0x41,0x309,0xe602,0x61,0x309,0xc2,0xe643,0x41,0x302,0x301,
+0xe2,0xe643,0x61,0x302,0x301,0xc2,0xe643,0x41,0x302,0x300,0xe2,0xe643,0x61,0x302,0x300,0xc2,
+0xe643,0x41,0x302,0x309,0xe2,0xe643,0x61,0x302,0x309,0xc2,0xe643,0x41,0x302,0x303,0xe2,0xe643,
+0x61,0x302,0x303,0x1ea0,0xe643,0x41,0x323,0x302,0x1ea1,0xe643,0x61,0x323,0x302,0x102,0xe643,0x41,
+0x306,0x301,0x103,0xe643,0x61,0x306,0x301,0x102,0xe643,0x41,0x306,0x300,0x103,0xe643,0x61,0x306,
+0x300,0x102,0xe643,0x41,0x306,0x309,0x103,0xe643,0x61,0x306,0x309,0x102,0xe643,0x41,0x306,0x303,
+0x103,0xe643,0x61,0x306,0x303,0x1ea0,0xe643,0x41,0x323,0x306,0x1ea1,0xe643,0x61,0x323,0x306,0xe602,
+0x45,0x309,0xe602,0x65,0x309,0xe602,0x45,0x303,0xe602,0x65,0x303,0xca,0xe643,0x45,0x302,0x301,
+0xea,0xe643,0x65,0x302,0x301,0xca,0xe643,0x45,0x302,0x300,0xea,0xe643,0x65,0x302,0x300,0xca,
+0xe643,0x45,0x302,0x309,0xea,0xe643,0x65,0x302,0x309,0xca,0xe643,0x45,0x302,0x303,0xea,0xe643,
+0x65,0x302,0x303,0x1eb8,0xe643,0x45,0x323,0x302,0x1eb9,0xe643,0x65,0x323,0x302,0xe602,0x49,0x309,
+0xe602,0x69,0x309,0xdc02,0x49,0x323,0xdc02,0x69,0x323,0xe602,0x4f,0x309,0xe602,0x6f,0x309,0xd4,
+0xe643,0x4f,0x302,0x301,0xf4,0xe643,0x6f,0x302,0x301,0xd4,0xe643,0x4f,0x302,0x300,0xf4,0xe643,
+0x6f,0x302,0x300,0xd4,0xe643,0x4f,0x302,0x309,0xf4,0xe643,0x6f,0x302,0x309,0xd4,0xe643,0x4f,
+0x302,0x303,0xf4,0xe643,0x6f,0x302,0x303,0x1ecc,0xe643,0x4f,0x323,0x302,0x1ecd,0xe643,0x6f,0x323,
+0x302,0x1a0,0xe643,0x4f,0x31b,0x301,0x1a1,0xe643,0x6f,0x31b,0x301,0x1a0,0xe643,0x4f,0x31b,0x300,
+0x1a1,0xe643,0x6f,0x31b,0x300,0x1a0,0xe643,0x4f,0x31b,0x309,0x1a1,0xe643,0x6f,0x31b,0x309,0x1a0,
+0xe643,0x4f,0x31b,0x303,0x1a1,0xe643,0x6f,0x31b,0x303,0x1a0,0xdc43,0x4f,0x31b,0x323,0x1a1,0xdc43,
+0x6f,0x31b,0x323,0xdc02,0x55,0x323,0xdc02,0x75,0x323,0xe602,0x55,0x309,0xe602,0x75,0x309,0x1af,
+0xe643,0x55,0x31b,0x301,0x1b0,0xe643,0x75,0x31b,0x301,0x1af,0xe643,0x55,0x31b,0x300,0x1b0,0xe643,
+0x75,0x31b,0x300,0x1af,0xe643,0x55,0x31b,0x309,0x1b0,0xe643,0x75,0x31b,0x309,0x1af,0xe643,0x55,
+0x31b,0x303,0x1b0,0xe643,0x75,0x31b,0x303,0x1af,0xdc43,0x55,0x31b,0x323,0x1b0,0xdc43,0x75,0x31b,
+0x323,0xe602,0x59,0x300,0xe602,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe602,0x59,0x309,
+0xe602,0x79,0x309,0xe602,0x59,0x303,0xe602,0x79,0x303,0x1f10,0xe643,0x3b5,0x313,0x300,0x1f11,0xe643,
+0x3b5,0x314,0x300,0x1f10,0xe643,0x3b5,0x313,0x301,0x1f11,0xe643,0x3b5,0x314,0x301,0x1f18,0xe643,0x395,
+0x313,0x300,0x1f19,0xe643,0x395,0x314,0x300,0x1f18,0xe643,0x395,0x313,0x301,0x1f19,0xe643,0x395,0x314,
+0x301,0x1f30,0xe643,0x3b9,0x313,0x300,0x1f31,0xe643,0x3b9,0x314,0x300,0x1f30,0xe643,0x3b9,0x313,0x301,
+0x1f31,0xe643,0x3b9,0x314,0x301,0x1f30,0xe643,0x3b9,0x313,0x342,0x1f31,0xe643,0x3b9,0x314,0x342,0x1f38,
+0xe643,0x399,0x313,0x300,0x1f39,0xe643,0x399,0x314,0x300,0x1f38,0xe643,0x399,0x313,0x301,0x1f39,0xe643,
+0x399,0x314,0x301,0x1f38,0xe643,0x399,0x313,0x342,0x1f39,0xe643,0x399,0x314,0x342,0x1f40,0xe643,0x3bf,
+0x313,0x300,0x1f41,0xe643,0x3bf,0x314,0x300,0x1f40,0xe643,0x3bf,0x313,0x301,0x1f41,0xe643,0x3bf,0x314,
+0x301,0x1f48,0xe643,0x39f,0x313,0x300,0x1f49,0xe643,0x39f,0x314,0x300,0x1f48,0xe643,0x39f,0x313,0x301,
+0x1f49,0xe643,0x39f,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x300,0x1f51,0xe643,0x3c5,0x314,0x300,0x1f50,
+0xe643,0x3c5,0x313,0x301,0x1f51,0xe643,0x3c5,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x342,0x1f51,0xe643,
+0x3c5,0x314,0x342,0x1f59,0xe643,0x3a5,0x314,0x300,0x1f59,0xe643,0x3a5,0x314,0x301,0x1f59,0xe643,0x3a5,
+0x314,0x342,0xe602,0x3b5,0x300,0xe602,0x3b9,0x300,0xe602,0x3bf,0x300,0xe602,0x3c5,0x300,0x1f00,0xf043,
+0x3b1,0x313,0x345,0x1f01,0xf043,0x3b1,0x314,0x345,0x1f02,0x345,2,0xf044,0x3b1,0x313,0x300,0x345,
+0x1f03,0x345,2,0xf044,0x3b1,0x314,0x300,0x345,0x1f04,0x345,2,0xf044,0x3b1,0x313,0x301,0x345,
+0x1f05,0x345,2,0xf044,0x3b1,0x314,0x301,0x345,0x1f06,0x345,2,0xf044,0x3b1,0x313,0x342,0x345,
+0x1f07,0x345,2,0xf044,0x3b1,0x314,0x342,0x345,0x1f08,0xf043,0x391,0x313,0x345,0x1f09,0xf043,0x391,
+0x314,0x345,0x1f0a,0x345,2,0xf044,0x391,0x313,0x300,0x345,0x1f0b,0x345,2,0xf044,0x391,0x314,
+0x300,0x345,0x1f0c,0x345,2,0xf044,0x391,0x313,0x301,0x345,0x1f0d,0x345,2,0xf044,0x391,0x314,
+0x301,0x345,0x1f0e,0x345,2,0xf044,0x391,0x313,0x342,0x345,0x1f0f,0x345,2,0xf044,0x391,0x314,
+0x342,0x345,0x1f20,0xf043,0x3b7,0x313,0x345,0x1f21,0xf043,0x3b7,0x314,0x345,0x1f22,0x345,2,0xf044,
+0x3b7,0x313,0x300,0x345,0x1f23,0x345,2,0xf044,0x3b7,0x314,0x300,0x345,0x1f24,0x345,2,0xf044,
+0x3b7,0x313,0x301,0x345,0x1f25,0x345,2,0xf044,0x3b7,0x314,0x301,0x345,0x1f26,0x345,2,0xf044,
+0x3b7,0x313,0x342,0x345,0x1f27,0x345,2,0xf044,0x3b7,0x314,0x342,0x345,0x1f28,0xf043,0x397,0x313,
+0x345,0x1f29,0xf043,0x397,0x314,0x345,0x1f2a,0x345,2,0xf044,0x397,0x313,0x300,0x345,0x1f2b,0x345,
+2,0xf044,0x397,0x314,0x300,0x345,0x1f2c,0x345,2,0xf044,0x397,0x313,0x301,0x345,0x1f2d,0x345,
+2,0xf044,0x397,0x314,0x301,0x345,0x1f2e,0x345,2,0xf044,0x397,0x313,0x342,0x345,0x1f2f,0x345,
+2,0xf044,0x397,0x314,0x342,0x345,0x1f60,0xf043,0x3c9,0x313,0x345,0x1f61,0xf043,0x3c9,0x314,0x345,
+0x1f62,0x345,2,0xf044,0x3c9,0x313,0x300,0x345,0x1f63,0x345,2,0xf044,0x3c9,0x314,0x300,0x345,
+0x1f64,0x345,2,0xf044,0x3c9,0x313,0x301,0x345,0x1f65,0x345,2,0xf044,0x3c9,0x314,0x301,0x345,
+0x1f66,0x345,2,0xf044,0x3c9,0x313,0x342,0x345,0x1f67,0x345,2,0xf044,0x3c9,0x314,0x342,0x345,
+0x1f68,0xf043,0x3a9,0x313,0x345,0x1f69,0xf043,0x3a9,0x314,0x345,0x1f6a,0x345,2,0xf044,0x3a9,0x313,
+0x300,0x345,0x1f6b,0x345,2,0xf044,0x3a9,0x314,0x300,0x345,0x1f6c,0x345,2,0xf044,0x3a9,0x313,
+0x301,0x345,0x1f6d,0x345,2,0xf044,0x3a9,0x314,0x301,0x345,0x1f6e,0x345,2,0xf044,0x3a9,0x313,
+0x342,0x345,0x1f6f,0x345,2,0xf044,0x3a9,0x314,0x342,0x345,0xe602,0x3b1,0x306,0xe602,0x3b1,0x304,
+0x1f70,0xf043,0x3b1,0x300,0x345,0xf002,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,
+0x342,0x345,0xe602,0x391,0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf002,0x391,0x345,0xe602,0xa8,
+0x342,0x1f74,0xf043,0x3b7,0x300,0x345,0xf002,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,
+0x3b7,0x342,0x345,0xe602,0x395,0x300,0xe602,0x397,0x300,0xf002,0x397,0x345,0xe602,0x1fbf,0x300,0xe602,
+0x1fbf,0x301,0xe602,0x1fbf,0x342,0xe602,0x3b9,0x306,0xe602,0x3b9,0x304,0x3ca,0xe643,0x3b9,0x308,0x300,
+0xe602,0x3b9,0x342,0x3ca,0xe643,0x3b9,0x308,0x342,0xe602,0x399,0x306,0xe602,0x399,0x304,0xe602,0x399,
+0x300,0xe602,0x1ffe,0x300,0xe602,0x1ffe,0x301,0xe602,0x1ffe,0x342,0xe602,0x3c5,0x306,0xe602,0x3c5,0x304,
+0x3cb,0xe643,0x3c5,0x308,0x300,0xe602,0x3c1,0x313,0xe602,0x3c1,0x314,0xe602,0x3c5,0x342,0x3cb,0xe643,
+0x3c5,0x308,0x342,0xe602,0x3a5,0x306,0xe602,0x3a5,0x304,0xe602,0x3a5,0x300,0xe602,0x3a1,0x314,0xe602,
+0xa8,0x300,0x1f7c,0xf043,0x3c9,0x300,0x345,0xf002,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,
+0xf043,0x3c9,0x342,0x345,0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf002,0x3a9,0x345,0x102,0x2190,0x338,
+0x102,0x2192,0x338,0x102,0x2194,0x338,0x102,0x21d0,0x338,0x102,0x21d4,0x338,0x102,0x21d2,0x338,0x102,
+0x2203,0x338,0x102,0x2208,0x338,0x102,0x220b,0x338,0x102,0x2223,0x338,0x102,0x2225,0x338,0x102,0x223c,
+0x338,0x102,0x2243,0x338,0x102,0x2245,0x338,0x102,0x2248,0x338,0x102,0x3d,0x338,0x102,0x2261,0x338,
+0x102,0x224d,0x338,0x102,0x3c,0x338,0x102,0x3e,0x338,0x102,0x2264,0x338,0x102,0x2265,0x338,0x102,
+0x2272,0x338,0x102,0x2273,0x338,0x102,0x2276,0x338,0x102,0x2277,0x338,0x102,0x227a,0x338,0x102,0x227b,
+0x338,0x102,0x2282,0x338,0x102,0x2283,0x338,0x102,0x2286,0x338,0x102,0x2287,0x338,0x102,0x22a2,0x338,
+0x102,0x22a8,0x338,0x102,0x22a9,0x338,0x102,0x22ab,0x338,0x102,0x227c,0x338,0x102,0x227d,0x338,0x102,
+0x2291,0x338,0x102,0x2292,0x338,0x102,0x22b2,0x338,0x102,0x22b3,0x338,0x102,0x22b4,0x338,0x102,0x22b5,
+0x338,0x802,0x304b,0x3099,0x802,0x304d,0x3099,0x802,0x304f,0x3099,0x802,0x3051,0x3099,0x802,0x3053,0x3099,
+0x802,0x3055,0x3099,0x802,0x3057,0x3099,0x802,0x3059,0x3099,0x802,0x305b,0x3099,0x802,0x305d,0x3099,0x802,
+0x305f,0x3099,0x802,0x3061,0x3099,0x802,0x3064,0x3099,0x802,0x3066,0x3099,0x802,0x3068,0x3099,0x802,0x306f,
+0x3099,0x802,0x306f,0x309a,0x802,0x3072,0x3099,0x802,0x3072,0x309a,0x802,0x3075,0x3099,0x802,0x3075,0x309a,
+0x802,0x3078,0x3099,0x802,0x3078,0x309a,0x802,0x307b,0x3099,0x802,0x307b,0x309a,0x802,0x3046,0x3099,0x802,
+0x309d,0x3099,0x802,0x30ab,0x3099,0x802,0x30ad,0x3099,0x802,0x30af,0x3099,0x802,0x30b1,0x3099,0x802,0x30b3,
+0x3099,0x802,0x30b5,0x3099,0x802,0x30b7,0x3099,0x802,0x30b9,0x3099,0x802,0x30bb,0x3099,0x802,0x30bd,0x3099,
+0x802,0x30bf,0x3099,0x802,0x30c1,0x3099,0x802,0x30c4,0x3099,0x802,0x30c6,0x3099,0x802,0x30c8,0x3099,0x802,
+0x30cf,0x3099,0x802,0x30cf,0x309a,0x802,0x30d2,0x3099,0x802,0x30d2,0x309a,0x802,0x30d5,0x3099,0x802,0x30d5,
+0x309a,0x802,0x30d8,0x3099,0x802,0x30d8,0x309a,0x802,0x30db,0x3099,0x802,0x30db,0x309a,0x802,0x30a6,0x3099,
+0x802,0x30ef,0x3099,0x802,0x30f0,0x3099,0x802,0x30f1,0x3099,0x802,0x30f2,0x3099,0x802,0x30fd,0x3099,0x704,
+0xd804,0xdc99,0xd804,0xdcba,0x704,0xd804,0xdc9b,0xd804,0xdcba,0x704,0xd804,0xdca5,0xd804,0xdcba,4,0xd804,
+0xdd31,0xd804,0xdd27,4,0xd804,0xdd32,0xd804,0xdd27,4,0xd804,0xdf47,0xd804,0xdf3e,4,0xd804,0xdf47,
+0xd804,0xdf57,4,0xd805,0xdcb9,0xd805,0xdcba,4,0xd805,0xdcb9,0xd805,0xdcb0,4,0xd805,0xdcb9,0xd805,
+0xdcbd,4,0xd805,0xddb8,0xd805,0xddaf,4,0xd805,0xddb9,0xd805,0xddaf,4,0xd806,0xdd35,0xd806,0xdd30,
+1,0x2b9,1,0x3b,1,0xb7,0x702,0x915,0x93c,0x702,0x916,0x93c,0x702,0x917,0x93c,0x702,
+0x91c,0x93c,0x702,0x921,0x93c,0x702,0x922,0x93c,0x702,0x92b,0x93c,0x702,0x92f,0x93c,0x702,0x9a1,
+0x9bc,0x702,0x9a2,0x9bc,0x702,0x9af,0x9bc,0x702,0xa32,0xa3c,0x702,0xa38,0xa3c,0x702,0xa16,0xa3c,
+0x702,0xa17,0xa3c,0x702,0xa1c,0xa3c,0x702,0xa2b,0xa3c,0x702,0xb21,0xb3c,0x702,0xb22,0xb3c,2,
+0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,2,0xf56,0xfb7,2,0xf5b,0xfb7,2,0xf40,
+0xfb5,0x8202,0xfb2,0xf80,0x8202,0xfb3,0xf80,2,0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,
+2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,1,0x3b9,1,0x60,1,0xb4,1,
+0x3a9,1,0x4b,1,0x3008,1,0x3009,0x102,0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,
+1,0x8cc8,1,0x6ed1,1,0x4e32,1,0x53e5,1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,
+1,0x5948,1,0x61f6,1,0x7669,1,0x7f85,1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,
+1,0x6a02,1,0x6d1b,1,0x70d9,1,0x73de,1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,
+1,0x5375,1,0x6b04,1,0x721b,1,0x862d,1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,
+1,0x8964,1,0x62c9,1,0x81d8,1,0x881f,1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,
+1,0x90ce,1,0x4f86,1,0x51b7,1,0x52de,1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,
+1,0x8001,1,0x8606,1,0x865c,1,0x8def,1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,
+1,0x797f,1,0x7da0,1,0x83c9,1,0x9304,1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,
+1,0x7c60,1,0x807e,1,0x7262,1,0x78ca,1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,
+1,0x6a13,1,0x6dda,1,0x6f0f,1,0x7d2f,1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,
+1,0x51dc,1,0x51cc,1,0x7a1c,1,0x7dbe,1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,
+1,0x8afe,1,0x4e39,1,0x5be7,1,0x6012,1,0x7387,1,0x7570,1,0x5317,1,0x78fb,
+1,0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc,1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,
+1,0x7701,1,0x8449,1,0x8aaa,1,0x6bba,1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,
+1,0x63a0,1,0x7565,1,0x4eae,1,0x5169,1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,
+1,0x8ad2,1,0x91cf,1,0x52f5,1,0x5442,1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,
+1,0x792a,1,0x95ad,1,0x9a6a,1,0x9e97,1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,
+1,0x8f62,1,0x5e74,1,0x6190,1,0x6200,1,0x649a,1,0x6f23,1,0x7149,1,0x7489,
+1,0x79ca,1,0x7df4,1,0x806f,1,0x8f26,1,0x84ee,1,0x9023,1,0x934a,1,0x5217,
+1,0x52a3,1,0x54bd,1,0x70c8,1,0x88c2,1,0x5ec9,1,0x5ff5,1,0x637b,1,0x6bae,
+1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9,1,0x5dba,1,0x601c,1,0x73b2,1,0x7469,
+1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6,1,0x9748,1,0x9818,1,0x4f8b,1,0x79ae,
+1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86,1,0x50da,1,0x5bee,1,0x5c3f,1,0x6599,
+1,0x71ce,1,0x7642,1,0x84fc,1,0x907c,1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,
+1,0x677b,1,0x67f3,1,0x6d41,1,0x6e9c,1,0x7409,1,0x7559,1,0x786b,1,0x7d10,
+1,0x985e,1,0x516d,1,0x622e,1,0x9678,1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,
+1,0x5f8b,1,0x6144,1,0x6817,1,0x9686,1,0x5229,1,0x540f,1,0x5c65,1,0x6613,
+1,0x674e,1,0x68a8,1,0x6ce5,1,0x7406,1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,
+1,0x91cc,1,0x96e2,1,0x533f,1,0x6eba,1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,
+1,0x96a3,1,0x9c57,1,0x9e9f,1,0x6797,1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,
+1,0x7c92,1,0x72c0,1,0x7099,1,0x8b58,1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,
+1,0x5ea6,1,0x62d3,1,0x7cd6,1,0x5b85,1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,
+1,0x964d,1,0x898b,1,0x5ed3,1,0x5140,1,0x55c0,1,0x585a,1,0x6674,1,0x51de,
+1,0x732a,1,0x76ca,1,0x793c,1,0x795e,1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,
+1,0x7fbd,1,0x8612,1,0x8af8,1,0x9038,1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,
+1,0x9db4,1,0x90de,1,0x96b7,1,0x4fae,1,0x50e7,1,0x514d,1,0x52c9,1,0x52e4,
+1,0x5351,1,0x559d,1,0x5606,1,0x5668,1,0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,
+1,0x6094,1,0x6168,1,0x618e,1,0x61f2,1,0x654f,1,0x65e2,1,0x6691,1,0x6885,
+1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e,1,0x722b,1,0x7422,1,0x7891,1,0x793e,
+1,0x7949,1,0x7948,1,0x7950,1,0x7956,1,0x795d,1,0x798d,1,0x798e,1,0x7a40,
+1,0x7a81,1,0x7bc0,1,0x7e09,1,0x7e41,1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,
+1,0x8457,1,0x8910,1,0x8996,1,0x8b01,1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,
+1,0x96e3,1,0x97ff,1,0x983b,1,0x6075,2,0xd850,0xdeee,1,0x8218,1,0x4e26,1,
+0x51b5,1,0x5168,1,0x4f80,1,0x5145,1,0x5180,1,0x52c7,1,0x52fa,1,0x5555,1,
+0x5599,1,0x55e2,1,0x58b3,1,0x5944,1,0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,
+0x5ed9,1,0x5f69,1,0x5fad,1,0x60d8,1,0x614e,1,0x6108,1,0x6160,1,0x6234,1,
+0x63c4,1,0x641c,1,0x6452,1,0x6556,1,0x671b,1,0x6756,1,0x6b79,1,0x6edb,1,
+0x6ecb,1,0x701e,1,0x77a7,1,0x7235,1,0x72af,1,0x7471,1,0x7506,1,0x753b,1,
+0x761d,1,0x761f,1,0x76db,1,0x76f4,1,0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,
+0x7c7b,1,0x7d5b,1,0x7f3e,1,0x8352,1,0x83ef,1,0x8779,1,0x8941,1,0x8986,1,
+0x8abf,1,0x8acb,1,0x8aed,1,0x8b8a,1,0x8f38,1,0x9072,1,0x9199,1,0x9276,1,
+0x967c,1,0x97db,1,0x980b,1,0x9b12,2,0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,
+1,0x3b9d,1,0x4018,1,0x4039,2,0xd854,0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,
+0x9f43,1,0x9f8e,0xe02,0x5d9,0x5b4,0x1102,0x5f2,0x5b7,0x1802,0x5e9,0x5c1,0x1902,0x5e9,0x5c2,0xfb49,
+0x1843,0x5e9,0x5bc,0x5c1,0xfb49,0x1943,0x5e9,0x5bc,0x5c2,0x1102,0x5d0,0x5b7,0x1202,0x5d0,0x5b8,0x1502,
+0x5d0,0x5bc,0x1502,0x5d1,0x5bc,0x1502,0x5d2,0x5bc,0x1502,0x5d3,0x5bc,0x1502,0x5d4,0x5bc,0x1502,0x5d5,
+0x5bc,0x1502,0x5d6,0x5bc,0x1502,0x5d8,0x5bc,0x1502,0x5d9,0x5bc,0x1502,0x5da,0x5bc,0x1502,0x5db,0x5bc,
+0x1502,0x5dc,0x5bc,0x1502,0x5de,0x5bc,0x1502,0x5e0,0x5bc,0x1502,0x5e1,0x5bc,0x1502,0x5e3,0x5bc,0x1502,
+0x5e4,0x5bc,0x1502,0x5e6,0x5bc,0x1502,0x5e7,0x5bc,0x1502,0x5e8,0x5bc,0x1502,0x5e9,0x5bc,0x1502,0x5ea,
+0x5bc,0x1302,0x5d5,0x5b9,0x1702,0x5d1,0x5bf,0x1702,0x5db,0x5bf,0x1702,0x5e4,0x5bf,0xd804,0xd834,0xdd57,
+0xd834,0xdd65,0xd804,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd5f,0xd834,0xdd6e,4,0xd846,0xd834,0xdd58,0xd834,
+0xdd65,0xd834,0xdd6e,0xd834,0xdd5f,0xd834,0xdd6f,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0xd834,
+0xdd5f,0xd834,0xdd70,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd70,0xd834,0xdd5f,0xd834,0xdd71,4,
+0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd71,0xd834,0xdd5f,0xd834,0xdd72,4,0xd846,0xd834,0xdd58,0xd834,
+0xdd65,0xd834,0xdd72,0xd804,0xd834,0xddb9,0xd834,0xdd65,0xd804,0xd834,0xddba,0xd834,0xdd65,0xd834,0xddbb,0xd834,
+0xdd6e,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbc,0xd834,0xdd6e,4,0xd846,0xd834,
+0xddba,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbb,0xd834,0xdd6f,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,
+0xdd6f,0xd834,0xddbc,0xd834,0xdd6f,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,
+0x4e38,1,0x4e41,2,0xd840,0xdd22,1,0x4f60,1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,
+1,0x50cf,1,0x349e,2,0xd841,0xde3a,1,0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,
+1,0x34b9,1,0x5167,1,0x518d,2,0xd841,0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,
+0x51ac,2,0xd864,0xdddf,1,0x51f5,1,0x5203,1,0x34df,1,0x523b,1,0x5246,1,0x5272,
+1,0x5277,1,0x3515,1,0x5305,1,0x5306,1,0x5349,1,0x535a,1,0x5373,1,0x537d,
+1,0x537f,2,0xd842,0xde2c,1,0x7070,1,0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,
+1,0x53f1,1,0x5406,1,0x549e,1,0x5438,1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,
+1,0x5510,1,0x5553,1,0x5563,1,0x5584,1,0x55ab,1,0x55b3,1,0x55c2,1,0x5716,
+1,0x5717,1,0x5651,1,0x5674,1,0x58ee,1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,
+1,0x5832,1,0x5831,1,0x58ac,2,0xd845,0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,
+0x591a,1,0x5922,1,0x5962,2,0xd845,0xdea8,2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,
+0x5a27,1,0x59d8,1,0x5a66,1,0x36ee,1,0x36fc,1,0x5b08,1,0x5b3e,2,0xd846,0xddc8,
+1,0x5bc3,1,0x5bd8,1,0x5bf3,2,0xd846,0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,
+0x5c22,1,0x3781,1,0x5c60,1,0x5cc0,1,0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,
+0xdde6,1,0x5d6e,1,0x5d6b,1,0x5d7c,1,0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,
+0x5e28,1,0x5e3d,1,0x5e69,1,0x3862,2,0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,
+1,0x5eb6,2,0xd868,0xdf92,1,0x5efe,2,0xd848,0xdf31,1,0x8201,1,0x5f22,1,0x38c7,
+2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62,1,0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,
+1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a,1,0x391c,2,0xd849,0xded4,1,0x60c7,1,
+0x6148,1,0x614c,1,0x617a,1,0x61b2,1,0x61a4,1,0x61af,1,0x61de,1,0x6210,1,
+0x621b,1,0x625d,1,0x62b1,1,0x62d4,1,0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,
+1,0x6368,1,0x6383,1,0x63e4,2,0xd84a,0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,
+0x3a2e,1,0x6469,1,0x647e,1,0x649d,1,0x6477,1,0x3a6c,1,0x656c,2,0xd84c,0xdc0a,
+1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19,1,0x3b08,1,0x3ae4,1,0x5192,1,0x5195,
+1,0x6700,1,0x669c,1,0x80ad,1,0x43d9,1,0x6721,1,0x675e,1,0x6753,2,0xd84c,
+0xdfc3,1,0x3b49,1,0x67fa,1,0x6785,1,0x6852,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,
+1,0x6914,1,0x6942,1,0x69a3,1,0x69ea,1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,
+0x3c18,1,0x6b21,2,0xd84e,0xdca7,1,0x6b54,1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bbb,
+2,0xd84e,0xde8d,2,0xd847,0xdd0b,2,0xd84e,0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,
+1,0x6ccd,1,0x6c67,1,0x6d16,1,0x6d3e,1,0x6d69,1,0x6d78,1,0x6d85,2,0xd84f,
+0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1,0x3d33,1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,
+1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e,1,0x6fc6,1,0x7039,1,0x701b,1,0x3d96,
+1,0x704a,1,0x707d,1,0x7077,1,0x70ad,2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,
+1,0x719c,2,0xd850,0xdfab,1,0x7228,1,0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,
+2,0xd851,0xdf35,2,0xd852,0xdc14,1,0x737a,1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,
+1,0x7447,1,0x745c,1,0x7485,1,0x74ca,1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,
+0x753e,2,0xd853,0xdc92,2,0xd848,0xdd9f,1,0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,
+0xd854,0xdc44,1,0x3ffc,1,0x4008,2,0xd854,0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,
+0xd854,0xdd33,1,0x771e,1,0x771f,1,0x778b,1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,
+0x784e,1,0x40e3,2,0xd855,0xde26,2,0xd855,0xde9a,2,0xd855,0xdec5,1,0x79eb,1,0x412f,
+1,0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2,0xd856,0xdea7,1,0x7aee,1,0x4202,2,0xd856,
+0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2,0xd857,0xdc80,1,0x7cd2,1,0x42a0,1,0x7ce8,
+1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1,0x7d63,1,0x4301,1,0x7dc7,1,0x7e02,1,
+0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858,0xde47,1,0x4359,2,0xd858,0xded9,1,0x7f7a,
+2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,2,0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,
+0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1,0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,
+0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859,0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,
+0x8204,1,0x8f9e,1,0x446b,1,0x8291,1,0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,
+0x82b3,1,0x82bd,1,0x82e6,2,0xd85a,0xdf3c,1,0x831d,1,0x8363,1,0x83ad,1,0x8323,
+1,0x83bd,1,0x83e7,1,0x8353,1,0x83ca,1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,
+0xd85b,0xdd6b,2,0xd85b,0xdcd5,1,0x452b,1,0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,
+1,0x8564,2,0xd85b,0xdf2c,1,0x455d,1,0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,
+0x456b,1,0x8650,1,0x8667,1,0x8669,1,0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,
+0x8728,1,0x876b,1,0x8786,1,0x45d7,1,0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,
+0x8863,2,0xd85d,0xde67,1,0x88d7,1,0x88de,1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,
+0xdcae,2,0xd85e,0xdd66,1,0x46be,1,0x46c7,1,0x8aa0,1,0x8c55,2,0xd85f,0xdca8,1,
+0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2,0xd85f,0xdf2f,2,0xd842,0xdc04,1,0x8dcb,1,
+0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4,2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,
+1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1,0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,
+0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa,1,0x958b,1,0x4995,1,0x95b7,2,0xd863,
+0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1,0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,
+0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a,1,0x4ab2,2,0xd865,0xdc96,1,0x9829,2,
+0xd865,0xddb6,1,0x98e2,1,0x4b33,1,0x9929,1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,
+2,0xd866,0xdf30,1,0x9c40,1,0x9cfd,1,0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,
+1,0x4cf8,2,0xd868,0xdd05,2,0xd868,0xde0e,2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,
+0x9ef9,1,0x9efe,1,0x9f05,1,0x9f0f,1,0x9f16,1,0x9f3b,2,0xd869,0xde00,0x3ac,0xe642,
+0x3b1,0x301,0x3ad,0xe642,0x3b5,0x301,0x3ae,0xe642,0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,
+0x3bf,0x301,0x3cd,0xe642,0x3c5,0x301,0x3ce,0xe642,0x3c9,0x301,0x386,0xe642,0x391,0x301,0x388,0xe642,
+0x395,0x301,0x389,0xe642,0x397,0x301,0x390,1,0xe643,0x3b9,0x308,0x301,0x38a,0xe642,0x399,0x301,
+0x3b0,1,0xe643,0x3c5,0x308,0x301,0x38e,0xe642,0x3a5,0x301,0x385,0xe642,0xa8,0x301,0x38c,0xe642,
+0x39f,0x301,0x38f,0xe642,0x3a9,0x301,0xc5,0xe642,0x41,0x30a,0xe6e6,0xe681,0x300,0xe6e6,0xe681,0x301,
+0xe6e6,0xe681,0x313,0xe6e6,0xe682,0x308,0x301,0x8100,0x8282,0xf71,0xf72,0x8100,0x8482,0xf71,0xf74,0x8100,
+0x8282,0xf71,0xf80,0
};
static const uint8_t norm2_nfc_data_smallFCD[256]={
0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0xe6,0x66,0x46,0x64,0x46,0x66,0x5b,
-0x12,0,0,4,0,0,0,0x43,0x20,2,0x29,0xae,0xc2,0xc0,0xff,0xff,
+0x12,0,0,4,0,0,0,0x43,0x20,2,0x69,0xae,0xc2,0xc0,0xff,0xff,
0xc0,0x72,0xbf,0,0,0,0,0,0,0,0x40,0,0x80,0x88,0,0,
0xfe,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -1129,7 +1138,7 @@ static const uint8_t norm2_nfc_data_smallFCD[256]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x98,0,0xc1,0x66,0xe0,0x80,0,0,0,0,
+0,0,0,0,0,0,0x98,0,0xc3,0x66,0xe0,0x80,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,
diff --git a/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h b/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
index 682ece28f13..e8bd52c6ae3 100644
--- a/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
+++ b/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
@@ -65,13 +65,13 @@ public:
normalizeSecondAndAppend(UnicodeString &first,
const UnicodeString &second,
UErrorCode &errorCode) const {
- return normalizeSecondAndAppend(first, second, TRUE, errorCode);
+ return normalizeSecondAndAppend(first, second, true, errorCode);
}
virtual UnicodeString &
append(UnicodeString &first,
const UnicodeString &second,
UErrorCode &errorCode) const {
- return normalizeSecondAndAppend(first, second, FALSE, errorCode);
+ return normalizeSecondAndAppend(first, second, false, errorCode);
}
UnicodeString &
normalizeSecondAndAppend(UnicodeString &first,
@@ -112,14 +112,14 @@ public:
int32_t length;
const UChar *d=impl.getDecomposition(c, buffer, length);
if(d==NULL) {
- return FALSE;
+ return false;
}
if(d==buffer) {
decomposition.setTo(buffer, length); // copy the string (Jamos from Hangul syllable c)
} else {
- decomposition.setTo(FALSE, d, length); // read-only alias
+ decomposition.setTo(false, d, length); // read-only alias
}
- return TRUE;
+ return true;
}
virtual UBool
getRawDecomposition(UChar32 c, UnicodeString &decomposition) const {
@@ -127,14 +127,14 @@ public:
int32_t length;
const UChar *d=impl.getRawDecomposition(c, buffer, length);
if(d==NULL) {
- return FALSE;
+ return false;
}
if(d==buffer) {
decomposition.setTo(buffer, length); // copy the string (algorithmic decomposition)
} else {
- decomposition.setTo(FALSE, d, length); // read-only alias
+ decomposition.setTo(false, d, length); // read-only alias
}
- return TRUE;
+ return true;
}
virtual UChar32
composePair(UChar32 a, UChar32 b) const {
@@ -150,12 +150,12 @@ public:
virtual UBool
isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
if(U_FAILURE(errorCode)) {
- return FALSE;
+ return false;
}
const UChar *sArray=s.getBuffer();
if(sArray==NULL) {
errorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return FALSE;
+ return false;
}
const UChar *sLimit=sArray+s.length();
return sLimit==spanQuickCheckYes(sArray, sLimit, errorCode);
@@ -227,7 +227,7 @@ private:
virtual void
normalize(const UChar *src, const UChar *limit,
ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
- impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode);
+ impl.compose(src, limit, onlyContiguous, true, buffer, errorCode);
}
using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function.
@@ -256,24 +256,24 @@ private:
virtual UBool
isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
- return FALSE;
+ return false;
}
const UChar *sArray=s.getBuffer();
if(sArray==NULL) {
errorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return FALSE;
+ return false;
}
UnicodeString temp;
ReorderingBuffer buffer(impl, temp);
if(!buffer.init(5, errorCode)) { // small destCapacity for substring normalization
- return FALSE;
+ return false;
}
- return impl.compose(sArray, sArray+s.length(), onlyContiguous, FALSE, buffer, errorCode);
+ return impl.compose(sArray, sArray+s.length(), onlyContiguous, false, buffer, errorCode);
}
virtual UBool
isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
- return FALSE;
+ return false;
}
const uint8_t *s = reinterpret_cast<const uint8_t *>(sp.data());
return impl.composeUTF8(0, onlyContiguous, s, s + sp.length(), nullptr, nullptr, errorCode);
@@ -343,7 +343,7 @@ private:
struct Norm2AllModes : public UMemory {
Norm2AllModes(Normalizer2Impl *i)
- : impl(i), comp(*i, FALSE), decomp(*i), fcd(*i), fcc(*i, TRUE) {}
+ : impl(i), comp(*i, false), decomp(*i), fcd(*i), fcc(*i, true) {}
~Norm2AllModes();
static Norm2AllModes *createInstance(Normalizer2Impl *impl, UErrorCode &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
index b2dd7ad4b86..cbf6b4d9804 100644
--- a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
@@ -2088,6 +2088,13 @@ uint8_t Normalizer2Impl::getPreviousTrailCC(const uint8_t *start, const uint8_t
// minDecompNoCP etc. and smallFCD[] are intended to help with any loss of performance,
// at least for ASCII & CJK.
+// Ticket 20907 - The optimizer in MSVC/Visual Studio versions below 16.4 has trouble with this
+// function on Windows ARM64. As a work-around, we disable optimizations for this function.
+// This work-around could/should be removed once the following versions of Visual Studio are no
+// longer supported: All versions of VS2017, and versions of VS2019 below 16.4.
+#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
+#pragma optimize( "", off )
+#endif
// Gets the FCD value from the regular normalization data.
uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
uint16_t norm16=getNorm16(c);
@@ -2121,6 +2128,9 @@ uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
}
return norm16;
}
+#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
+#pragma optimize( "", on )
+#endif
// Dual functionality:
// buffer!=NULL: normalize
diff --git a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
index cf3015ea881..4218a30a345 100644
--- a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
+++ b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
@@ -171,7 +171,7 @@ public:
UErrorCode &errorCode);
UBool appendBMP(UChar c, uint8_t cc, UErrorCode &errorCode) {
if(remainingCapacity==0 && !resize(1, errorCode)) {
- return FALSE;
+ return false;
}
if(lastCC<=cc || cc==0) {
*limit++=c;
@@ -183,7 +183,7 @@ public:
insert(c, cc);
}
--remainingCapacity;
- return TRUE;
+ return true;
}
UBool appendZeroCC(UChar32 c, UErrorCode &errorCode);
UBool appendZeroCC(const UChar *s, const UChar *sLimit, UErrorCode &errorCode);
@@ -359,7 +359,7 @@ public:
return getFCD16FromNormData(c);
}
- /** Returns TRUE if the single-or-lead code unit c might have non-zero FCD data. */
+ /** Returns true if the single-or-lead code unit c might have non-zero FCD data. */
UBool singleLeadMightHaveNonZeroFCD16(UChar32 lead) const {
// 0<=lead<=0xffff
uint8_t bits=smallFCD[lead>>8];
@@ -397,8 +397,8 @@ public:
MIN_YES_YES_WITH_CC=0xfe02,
JAMO_VT=0xfe00,
MIN_NORMAL_MAYBE_YES=0xfc00,
- JAMO_L=2, // offset=1 hasCompBoundaryAfter=FALSE
- INERT=1, // offset=0 hasCompBoundaryAfter=TRUE
+ JAMO_L=2, // offset=1 hasCompBoundaryAfter=false
+ INERT=1, // offset=0 hasCompBoundaryAfter=true
// norm16 bit 0 is comp-boundary-after.
HAS_COMP_BOUNDARY_AFTER=1,
diff --git a/Build/source/libs/icu/icu-src/source/common/patternprops.h b/Build/source/libs/icu/icu-src/source/common/patternprops.h
index b57cdeb6e53..95898d580c8 100644
--- a/Build/source/libs/icu/icu-src/source/common/patternprops.h
+++ b/Build/source/libs/icu/icu-src/source/common/patternprops.h
@@ -44,17 +44,17 @@ U_NAMESPACE_BEGIN
class U_COMMON_API PatternProps {
public:
/**
- * @return TRUE if c is a Pattern_Syntax code point.
+ * @return true if c is a Pattern_Syntax code point.
*/
static UBool isSyntax(UChar32 c);
/**
- * @return TRUE if c is a Pattern_Syntax or Pattern_White_Space code point.
+ * @return true if c is a Pattern_Syntax or Pattern_White_Space code point.
*/
static UBool isSyntaxOrWhiteSpace(UChar32 c);
/**
- * @return TRUE if c is a Pattern_White_Space character.
+ * @return true if c is a Pattern_White_Space character.
*/
static UBool isWhiteSpace(UChar32 c);
@@ -78,7 +78,7 @@ public:
/**
* Tests whether the string contains a "pattern identifier", that is,
* whether it contains only non-Pattern_White_Space, non-Pattern_Syntax characters.
- * @return TRUE if there are no Pattern_White_Space or Pattern_Syntax characters in s.
+ * @return true if there are no Pattern_White_Space or Pattern_Syntax characters in s.
*/
static UBool isIdentifier(const UChar *s, int32_t length);
diff --git a/Build/source/libs/icu/icu-src/source/common/pluralmap.h b/Build/source/libs/icu/icu-src/source/common/pluralmap.h
index db644093a1f..d898ac4671f 100644
--- a/Build/source/libs/icu/icu-src/source/common/pluralmap.h
+++ b/Build/source/libs/icu/icu-src/source/common/pluralmap.h
@@ -234,7 +234,7 @@ public:
}
/**
- * Returns TRUE if this object equals rhs.
+ * Returns true if this object equals rhs.
*/
UBool equals(
const PluralMap<T> &rhs,
@@ -244,13 +244,13 @@ public:
continue;
}
if (fVariants[i] == NULL || rhs.fVariants[i] == NULL) {
- return FALSE;
+ return false;
}
if (!eqFunc(*fVariants[i], *rhs.fVariants[i])) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
private:
diff --git a/Build/source/libs/icu/icu-src/source/common/propname_data.h b/Build/source/libs/icu/icu-src/source/common/propname_data.h
index e56ccd897b9..6f63e9cdd47 100644
--- a/Build/source/libs/icu/icu-src/source/common/propname_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/propname_data.h
@@ -13,98 +13,99 @@
U_NAMESPACE_BEGIN
-const int32_t PropNameData::indexes[8]={0x20,0x157c,0x4f32,0xa3ee,0xa3ee,0xa3ee,0x2f,0};
+const int32_t PropNameData::indexes[8]={0x20,0x15b8,0x5048,0xa69a,0xa69a,0xa69a,0x2f,0};
-const int32_t PropNameData::valueMaps[1367]={
-6,0,0x41,0,0xe3,0x356,0xe3,0x36c,0xe3,0x381,0xe3,0x397,0xe3,0x3a2,0xe3,0x3c3,
-0xe3,0x3d3,0xe3,0x3e2,0xe3,0x3f0,0xe3,0x414,0xe3,0x42b,0xe3,0x443,0xe3,0x45a,0xe3,0x469,
-0xe3,0x478,0xe3,0x489,0xe3,0x497,0xe3,0x4a9,0xe3,0x4c3,0xe3,0x4de,0xe3,0x4f3,0xe3,0x510,
-0xe3,0x521,0xe3,0x52c,0xe3,0x54b,0xe3,0x561,0xe3,0x572,0xe3,0x582,0xe3,0x59d,0xe3,0x5b6,
-0xe3,0x5c7,0xe3,0x5e1,0xe3,0x5f4,0xe3,0x604,0xe3,0x61e,0xe3,0x637,0xe3,0x64e,0xe3,0x662,
-0xe3,0x678,0xe3,0x68c,0xe3,0x6a2,0xe3,0x6bc,0xe3,0x6d4,0xe3,0x6f0,0xe3,0x6f8,0xe3,0x700,
-0xe3,0x708,0xe3,0x710,0xe3,0x719,0xe3,0x726,0xe3,0x739,0xe3,0x756,0xe3,0x773,0xe3,0x790,
-0xe3,0x7ae,0xe3,0x7cc,0xe3,0x7f0,0xe3,0x7fd,0xe3,0x817,0xe3,0x82c,0xe3,0x847,0xe3,0x85e,
-0xe3,0x875,0xe3,0x897,0xe3,0x1000,0x1019,0x8b6,0x15d,0xad6,0x178,0x2df6,0xe9,0x2e15,0x2a9,0x2f53,
-0x2bf,0x2fad,0x2c9,0x320a,0x2eb,0x3b05,0x355,0x3b75,0x35f,0x3e0f,0x38e,0x3e4d,0x396,0x48f6,0x457,0x4974,
-0x461,0x4999,0x467,0x49b3,0x46d,0x49d4,0x474,0x49ee,0xe9,0x4a13,0xe9,0x4a39,0x47b,0x4ae3,0x491,0x4b5c,
-0x4a4,0x4c0e,0x4bf,0x4c45,0x4c6,0x4df4,0x4d9,0x5274,0x501,0x2000,0x2001,0x52d3,0x509,0x3000,0x3001,0x535f,
-0,0x4000,0x400e,0x5371,0,0x537a,0,0x5394,0,0x53a5,0,0x53b6,0,0x53cc,0,0x53d5,
-0,0x53f2,0,0x5410,0,0x542e,0,0x544c,0,0x5462,0,0x5476,0,0x548c,0,0x7000,
-0x7001,0x54a5,0,0x7d6,0x12,0,1,0x12,0x20,0x7f4,0x49,0,1,7,8,9,
-0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,
-0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67,0x6b,0x76,
-0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,
-0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x56,0x67,0x72,0x7f,0x8c,0x99,0xa6,0xb3,0xc0,
-0xcd,0xda,0xe7,0xf4,0x101,0x10e,0x11b,0x128,0x135,0x142,0x14f,0x15c,0x169,0x176,0x183,0x190,
-0x19d,0x1aa,0x1b7,0x1c4,0x1d1,0x1de,0x1eb,0x1fa,0x209,0x218,0x227,0x236,0x245,0x254,0x263,0x27d,
-0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,0x321,0x332,0x343,0x986,1,0,
-0x17,0x8c5,0x8d6,0x8e7,0x8fb,0x912,0x92a,0x93c,0x951,0x968,0x97d,0x98d,0x99f,0x9bc,0x9d8,0x9ea,
-0xa07,0xa23,0xa3f,0xa54,0xa69,0xa83,0xa9e,0xab9,0xb28,1,0,0x12d,0xae1,0xaee,0xb01,0xb29,
-0xb47,0xb65,0xb7d,0xba8,0xbd2,0xbea,0xbfd,0xc10,0xc1f,0xc2e,0xc3d,0xc4c,0xc63,0xc74,0xc87,0xc9a,
-0xca7,0xcb4,0xcc3,0xcd4,0xce9,0xcfa,0xd05,0xd0e,0xd1f,0xd30,0xd43,0xd55,0xd68,0xd7b,0xdba,0xdc7,
-0xdd4,0xde1,0xdf6,0xe26,0xe40,0xe61,0xe8c,0xeaf,0xf0d,0xf34,0xf4f,0xf5e,0xf85,0xfad,0xfd0,0xff3,
-0x101d,0x1036,0x1055,0x1078,0x109c,0x10af,0x10c9,0x10f3,0x110b,0x1133,0x115c,0x116f,0x1182,0x1195,0x11bc,0x11cb,
-0x11eb,0x1219,0x1237,0x1265,0x1281,0x129c,0x12b5,0x12ce,0x12ef,0x131f,0x133e,0x1360,0x1394,0x13c1,0x1406,0x1427,
-0x1451,0x1472,0x149b,0x14ae,0x14e1,0x14f8,0x1507,0x1518,0x1543,0x155a,0x158b,0x15b9,0x15fc,0x1607,0x1640,0x1651,
-0x1662,0x166f,0x1682,0x16bc,0x16e0,0x1704,0x173e,0x1776,0x17a1,0x17b9,0x17e5,0x1811,0x181e,0x182d,0x184a,0x186c,
-0x189a,0x18ba,0x18e1,0x1908,0x1927,0x193a,0x194b,0x195c,0x1981,0x19a6,0x19cd,0x1a01,0x1a2e,0x1a4c,0x1a5f,0x1a78,
-0x1ab1,0x1ac0,0x1ae0,0x1b02,0x1b24,0x1b3b,0x1b52,0x1b7f,0x1b98,0x1bb1,0x1be2,0x1c0c,0x1c27,0x1c3a,0x1c59,0x1c62,
-0x1c75,0x1c93,0x1cb1,0x1cc4,0x1cdb,0x1cf0,0x1d25,0x1d49,0x1d5e,0x1d6d,0x1d80,0x1da4,0x1dad,0x1dd1,0x1de8,0x1dfb,
-0x1e0a,0x1e15,0x1e36,0x1e4e,0x1e5d,0x1e6c,0x1e7b,0x1e92,0x1ea7,0x1ebc,0x1ef5,0x1f08,0x1f24,0x1f2f,0x1f3c,0x1f6a,
-0x1f8e,0x1fb1,0x1fc4,0x1fe6,0x1ff9,0x2014,0x2037,0x205a,0x207f,0x2090,0x20bf,0x20ec,0x2103,0x211e,0x212d,0x2158,
-0x2190,0x21ca,0x21f8,0x2209,0x2216,0x223a,0x2249,0x2265,0x227f,0x229c,0x22d4,0x22e9,0x2316,0x2335,0x2363,0x2383,
-0x23b7,0x23c6,0x23f0,0x2413,0x243e,0x2449,0x245a,0x2475,0x2499,0x24a6,0x24bb,0x24e2,0x250d,0x2544,0x2557,0x2568,
-0x2598,0x25a9,0x25b8,0x25cd,0x25eb,0x25fe,0x2611,0x2628,0x2645,0x2650,0x2659,0x267b,0x2690,0x26b5,0x26cc,0x26f5,
-0x2710,0x2725,0x273e,0x275f,0x2794,0x27a5,0x27d6,0x27fa,0x280b,0x2824,0x282f,0x285c,0x287e,0x28ac,0x28df,0x28ee,
-0x28ff,0x291c,0x295e,0x2985,0x2992,0x29a7,0x29cb,0x29f1,0x2a2a,0x2a3b,0x2a5f,0x2a6a,0x2a77,0x2a86,0x2aab,0x2ad9,
-0x2af5,0x2b12,0x2b1f,0x2b30,0x2b4e,0x2b71,0x2b8e,0x2b9b,0x2bbb,0x2bd8,0x2bf9,0x2c22,0x2c33,0x2c52,0x2c6b,0x2c84,
-0x2c95,0x2cde,0x2cef,0x2d08,0x2d37,0x2d64,0x2d89,0x2dcb,0x2de7,0x1e00,1,0,0x12,0x2e2c,0x2e3c,0x2e4f,
-0x2e5f,0x2e6f,0x2e7e,0x2e8e,0x2ea0,0x2eb3,0x2ec5,0x2ed5,0x2ee5,0x2ef4,0x2f03,0x2f13,0x2f20,0x2f2f,0x2f43,0x1ebe,
-1,0,6,0x2f68,0x2f73,0x2f80,0x2f8d,0x2f9a,0x2fa5,0x1f02,1,0,0x1e,0x2fc2,0x2fd1,0x2fe6,
-0x2ffb,0x3010,0x3024,0x3035,0x3049,0x305c,0x306d,0x3086,0x3098,0x30a9,0x30bd,0x30d0,0x30e8,0x30fa,0x3105,0x3115,
-0x3123,0x3138,0x314d,0x3163,0x317d,0x3193,0x31a3,0x31b7,0x31cb,0x31dc,0x31f4,0x212d,1,0,0x66,0x321c,
-0x323f,0x3248,0x3255,0x3260,0x3269,0x3274,0x327d,0x3296,0x329b,0x32a4,0x32c1,0x32ca,0x32d7,0x32e0,0x3304,0x330b,
-0x3314,0x3327,0x3332,0x333b,0x3346,0x335f,0x3368,0x3377,0x3382,0x338b,0x3396,0x339f,0x33a6,0x33af,0x33ba,0x33c3,
-0x33dc,0x33e5,0x33f2,0x33fd,0x340e,0x3419,0x342e,0x3445,0x344e,0x3457,0x3470,0x347b,0x3484,0x348d,0x34a4,0x34c1,
-0x34cc,0x34dd,0x34e8,0x34ef,0x34fc,0x3509,0x3536,0x354b,0x3554,0x356f,0x3592,0x35b3,0x35d4,0x35f9,0x3620,0x3641,
-0x3664,0x3685,0x36ac,0x36cd,0x36f2,0x3711,0x3730,0x374f,0x376c,0x378d,0x37ae,0x37d1,0x37f6,0x3815,0x3834,0x3855,
-0x387c,0x38a1,0x38c0,0x38e1,0x3904,0x391f,0x3938,0x3953,0x396c,0x3989,0x39a4,0x39c1,0x39e0,0x39fd,0x3a1a,0x3a39,
-0x3a56,0x3a71,0x3a8e,0x3aab,0x3ade,0x2472,1,0,6,0x3b16,0x3b25,0x3b35,0x3b45,0x3b55,0x3b66,0x24d0,
-1,0,0x2b,0x3b84,0x3b90,0x3b9e,0x3bad,0x3bbc,0x3bcc,0x3bdd,0x3bf1,0x3c06,0x3c1c,0x3c2f,0x3c43,0x3c53,
-0x3c5c,0x3c67,0x3c77,0x3c93,0x3ca5,0x3cb3,0x3cc2,0x3cce,0x3ce3,0x3cf7,0x3d0a,0x3d18,0x3d2c,0x3d3a,0x3d44,0x3d56,
-0x3d62,0x3d70,0x3d80,0x3d87,0x3d8e,0x3d95,0x3d9c,0x3da3,0x3db9,0x3dda,0x85e,0x3dec,0x3df7,0x3e06,0x2729,1,
-0,4,0x3e20,0x3e2b,0x3e37,0x3e41,0x274f,1,0,0xbd,0x3e58,0x3e65,0x3e7a,0x3e87,0x3e96,0x3ea4,
-0x3eb3,0x3ec2,0x3ed4,0x3ee3,0x3ef1,0x3f02,0x3f11,0x3f20,0x3f2d,0x3f39,0x3f48,0x3f57,0x3f61,0x3f6e,0x3f7b,0x3f8a,
-0x3f98,0x3fa7,0x3fb3,0x3fbd,0x3fc9,0x3fd9,0x3fe9,0x3ff7,0x4003,0x4014,0x4020,0x402c,0x403a,0x4047,0x4053,0x4060,
-0xcfa,0x406d,0x407b,0x4095,0x409e,0x40ac,0x40ba,0x40c6,0x40d5,0x40e3,0x40f1,0x40fd,0x410c,0x411a,0x4128,0x4135,
-0x4144,0x415f,0x416e,0x417f,0x4190,0x41a3,0x41b5,0x41c4,0x41d6,0x41e5,0x41f1,0x41fc,0x1e0a,0x4209,0x4214,0x421f,
-0x422a,0x4235,0x4250,0x425b,0x4266,0x4271,0x4284,0x4298,0x42a3,0x42b2,0x42c1,0x42cc,0x42d7,0x42e4,0x42f3,0x4301,
-0x430c,0x4327,0x4331,0x4342,0x4353,0x4362,0x4373,0x437e,0x4389,0x4394,0x439f,0x43aa,0x43b5,0x43c0,0x43ca,0x43d5,
-0x43e5,0x43f0,0x43fe,0x440b,0x4416,0x4425,0x4432,0x443f,0x444e,0x445b,0x446c,0x447e,0x448e,0x4499,0x44ac,0x44c3,
-0x44d1,0x44de,0x44e9,0x44f6,0x4507,0x4523,0x4539,0x4544,0x4561,0x4571,0x4580,0x458b,0x4596,0x1f24,0x45a2,0x45ad,
-0x45c5,0x45d5,0x45e4,0x45f2,0x4600,0x460b,0x4616,0x462a,0x4641,0x4659,0x4669,0x4679,0x4689,0x469b,0x46a6,0x46b1,
-0x46bb,0x46c7,0x46d5,0x46e8,0x46f4,0x4701,0x470c,0x4728,0x4735,0x4743,0x475c,0x2824,0x476b,0x2645,0x4778,0x4786,
-0x4798,0x47a6,0x47b2,0x47c2,0x2a5f,0x47d0,0x47dc,0x47e7,0x47f2,0x47fd,0x4811,0x481f,0x4836,0x4842,0x4856,0x4864,
-0x4876,0x488c,0x489a,0x48ac,0x48ba,0x48d7,0x48e9,0x30fb,1,0,6,0x4910,0x4923,0x4933,0x4941,0x4952,
-0x4962,0x3157,0x12,0,1,0x498c,0x4992,0x3164,0x12,0,1,0x498c,0x4992,0x3171,1,0,
-3,0x498c,0x4992,0x49cb,0x3187,1,0,3,0x498c,0x4992,0x49cb,0x319d,1,0,0x12,0x4a55,
-0x4a5f,0x4a6b,0x4a72,0x4a7d,0x4a82,0x4a89,0x4a90,0x4a99,0x4a9e,0x4aa3,0x4ab3,0x85e,0x3dec,0x4abf,0x3df7,0x4acf,
-0x3e06,0x3246,1,0,0xf,0x4a55,0x4af6,0x4b00,0x4b0a,0x4b15,0x3cc2,0x4b1f,0x4b2b,0x4b33,0x4b3a,0x4b44,
-0x4a6b,0x4a72,0x4a82,0x4b4e,0x32cd,1,0,0x17,0x4a55,0x4b6b,0x4b0a,0x4b77,0x4b84,0x4b92,0x3cc2,0x4b9d,
-0x4a6b,0x4bae,0x4a82,0x4bbd,0x4bcb,0x85e,0x3dda,0x4bd7,0x4be8,0x3dec,0x4abf,0x3df7,0x4acf,0x3e06,0x4bf9,0x33ea,
-1,0,3,0x4c2c,0x4c34,0x4c3c,0x3403,1,0,0xf,0x4c65,0x4c6c,0x4c7b,0x4c9c,0x4cbf,0x4cca,
-0x4ce9,0x4d00,0x4d0d,0x4d16,0x4d35,0x4d68,0x4d83,0x4db2,0x4dcf,0x3493,1,0,0x24,0x4e12,0x4e1f,0x4e32,
-0x4e3f,0x4e6c,0x4e91,0x4ea6,0x4ec5,0x4ee6,0x4f13,0x4f4c,0x4f6f,0x4f92,0x4fbf,0x4ff4,0x501b,0x5044,0x507b,0x50aa,
-0x50cb,0x50f0,0x50ff,0x5122,0x5139,0x5146,0x5155,0x5172,0x518b,0x51ae,0x51d3,0x51ec,0x5201,0x5210,0x5221,0x522e,
-0x524f,0x3663,1,0,4,0x528d,0x5298,0x52b0,0x52c8,0x369f,0x36,1,2,4,8,0xe,
-0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,
-0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,
-0x30f80000,0x2fc2,0x2fd1,0x2fe6,0x2ffb,0x5301,0x3010,0x3024,0x52f7,0x3035,0x3049,0x305c,0x5312,0x306d,0x3086,0x3098,
-0x5329,0x30a9,0x30bd,0x30d0,0x5352,0x30e8,0x30fa,0x3105,0x3115,0x52ee,0x3123,0x3138,0x314d,0x3163,0x317d,0x3193,
-0x31a3,0x31b7,0x31cb,0x5348,0x31dc,0x31f4,0x5333
+const int32_t PropNameData::valueMaps[1382]={
+6,0,0x41,0,0xe3,0x368,0xe3,0x37e,0xe3,0x393,0xe3,0x3a9,0xe3,0x3b4,0xe3,0x3d5,
+0xe3,0x3e5,0xe3,0x3f4,0xe3,0x402,0xe3,0x426,0xe3,0x43d,0xe3,0x455,0xe3,0x46c,0xe3,0x47b,
+0xe3,0x48a,0xe3,0x49b,0xe3,0x4a9,0xe3,0x4bb,0xe3,0x4d5,0xe3,0x4f0,0xe3,0x505,0xe3,0x522,
+0xe3,0x533,0xe3,0x53e,0xe3,0x55d,0xe3,0x573,0xe3,0x584,0xe3,0x594,0xe3,0x5af,0xe3,0x5c8,
+0xe3,0x5d9,0xe3,0x5f3,0xe3,0x606,0xe3,0x616,0xe3,0x630,0xe3,0x649,0xe3,0x660,0xe3,0x674,
+0xe3,0x68a,0xe3,0x69e,0xe3,0x6b4,0xe3,0x6ce,0xe3,0x6e6,0xe3,0x702,0xe3,0x70a,0xe3,0x712,
+0xe3,0x71a,0xe3,0x722,0xe3,0x72b,0xe3,0x738,0xe3,0x74b,0xe3,0x768,0xe3,0x785,0xe3,0x7a2,
+0xe3,0x7c0,0xe3,0x7de,0xe3,0x802,0xe3,0x80f,0xe3,0x829,0xe3,0x83e,0xe3,0x859,0xe3,0x870,
+0xe3,0x887,0xe3,0x8a9,0xe3,0x1000,0x1019,0x8c8,0x15f,0xae8,0x17a,0x2f11,0xe9,0x2f30,0x2b3,0x306e,
+0x2c9,0x30c8,0x2d3,0x3325,0x2f5,0x3c20,0x35f,0x3c90,0x369,0x3f2a,0x398,0x3f68,0x3a0,0x4a5b,0x465,0x4ad9,
+0x46f,0x4afe,0x475,0x4b18,0x47b,0x4b39,0x482,0x4b53,0xe9,0x4b78,0xe9,0x4b9e,0x489,0x4c48,0x49f,0x4cc1,
+0x4b2,0x4d73,0x4cd,0x4daa,0x4d4,0x4f8a,0x4e8,0x540a,0x510,0x2000,0x2001,0x5469,0x518,0x3000,0x3001,0x54f5,
+0,0x4000,0x400e,0x5507,0,0x5510,0,0x552a,0,0x553b,0,0x554c,0,0x5562,0,0x556b,
+0,0x5588,0,0x55a6,0,0x55c4,0,0x55e2,0,0x55f8,0,0x560c,0,0x5622,0,0x7000,
+0x7001,0x563b,0,0x7d6,0x12,0,1,0x12,0x20,0x7f4,0x4a,0,1,6,7,8,
+9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
+0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67,0x6b,
+0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,
+0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x5e,0x68,0x79,0x84,0x91,0x9e,0xab,0xb8,
+0xc5,0xd2,0xdf,0xec,0xf9,0x106,0x113,0x120,0x12d,0x13a,0x147,0x154,0x161,0x16e,0x17b,0x188,
+0x195,0x1a2,0x1af,0x1bc,0x1c9,0x1d6,0x1e3,0x1f0,0x1fd,0x20c,0x21b,0x22a,0x239,0x248,0x257,0x266,
+0x275,0x28f,0x2a3,0x2b7,0x2d2,0x2e1,0x2ea,0x2fa,0x302,0x30b,0x31a,0x323,0x333,0x344,0x355,0x995,
+1,0,0x17,0x8d7,0x8e8,0x8f9,0x90d,0x924,0x93c,0x94e,0x963,0x97a,0x98f,0x99f,0x9b1,0x9ce,
+0x9ea,0x9fc,0xa19,0xa35,0xa51,0xa66,0xa7b,0xa95,0xab0,0xacb,0xb37,1,0,0x135,0xaf3,0xb00,
+0xb13,0xb3b,0xb59,0xb77,0xb8f,0xbba,0xbe4,0xbfc,0xc0f,0xc22,0xc31,0xc40,0xc4f,0xc5e,0xc75,0xc86,
+0xc99,0xcac,0xcb9,0xcc6,0xcd5,0xce6,0xcfb,0xd0c,0xd17,0xd20,0xd31,0xd42,0xd55,0xd67,0xd7a,0xd8d,
+0xdcc,0xdd9,0xde6,0xdf3,0xe08,0xe38,0xe52,0xe73,0xe9e,0xec1,0xf1f,0xf46,0xf61,0xf70,0xf97,0xfbf,
+0xfe2,0x1005,0x102f,0x1048,0x1067,0x108a,0x10ae,0x10c1,0x10db,0x1105,0x111d,0x1145,0x116e,0x1181,0x1194,0x11a7,
+0x11ce,0x11dd,0x11fd,0x122b,0x1249,0x1277,0x1293,0x12ae,0x12c7,0x12e0,0x1301,0x1331,0x1350,0x1372,0x13a6,0x13d3,
+0x1418,0x1439,0x1463,0x1484,0x14ad,0x14c0,0x14f3,0x150a,0x1519,0x152a,0x1555,0x156c,0x159d,0x15cb,0x160e,0x1619,
+0x1652,0x1663,0x1674,0x1681,0x1694,0x16ce,0x16f2,0x1716,0x1750,0x1788,0x17b3,0x17cb,0x17f7,0x1823,0x1830,0x183f,
+0x185c,0x187e,0x18ac,0x18cc,0x18f3,0x191a,0x1939,0x194c,0x195d,0x196e,0x1993,0x19b8,0x19df,0x1a13,0x1a40,0x1a5e,
+0x1a71,0x1a8a,0x1ac3,0x1ad2,0x1af2,0x1b14,0x1b36,0x1b4d,0x1b64,0x1b91,0x1baa,0x1bc3,0x1bf4,0x1c1e,0x1c39,0x1c4c,
+0x1c6b,0x1c74,0x1c87,0x1ca5,0x1cc3,0x1cd6,0x1ced,0x1d02,0x1d37,0x1d5b,0x1d70,0x1d7f,0x1d92,0x1db6,0x1dbf,0x1de3,
+0x1dfa,0x1e0d,0x1e1c,0x1e27,0x1e48,0x1e60,0x1e6f,0x1e7e,0x1e8d,0x1ea4,0x1eb9,0x1ece,0x1f07,0x1f1a,0x1f36,0x1f41,
+0x1f4e,0x1f7c,0x1fa0,0x1fc3,0x1fd6,0x1ff8,0x200b,0x2026,0x2049,0x206c,0x2091,0x20a2,0x20d1,0x20fe,0x2115,0x2130,
+0x213f,0x216a,0x21a2,0x21dc,0x220a,0x221b,0x2228,0x224c,0x225b,0x2277,0x2291,0x22ae,0x22e6,0x22fb,0x2328,0x2347,
+0x2375,0x2395,0x23c9,0x23d8,0x2402,0x2425,0x2450,0x245b,0x246c,0x2487,0x24ab,0x24b8,0x24cd,0x24f4,0x251f,0x2556,
+0x2569,0x257a,0x25aa,0x25bb,0x25ca,0x25df,0x25fd,0x2610,0x2623,0x263a,0x2657,0x2662,0x266b,0x268d,0x26a2,0x26c7,
+0x26de,0x2707,0x2722,0x2737,0x2750,0x2771,0x27a6,0x27b7,0x27e8,0x280c,0x281d,0x2836,0x2841,0x286e,0x2890,0x28be,
+0x28f1,0x2900,0x2911,0x292e,0x2970,0x2997,0x29a4,0x29b9,0x29dd,0x2a03,0x2a3c,0x2a4d,0x2a71,0x2a7c,0x2a89,0x2a98,
+0x2abd,0x2aeb,0x2b07,0x2b24,0x2b31,0x2b42,0x2b60,0x2b83,0x2ba0,0x2bad,0x2bcd,0x2bea,0x2c0b,0x2c34,0x2c45,0x2c64,
+0x2c7d,0x2c96,0x2ca7,0x2cf0,0x2d01,0x2d1a,0x2d49,0x2d76,0x2d9b,0x2ddd,0x2df9,0x2e08,0x2e1f,0x2e4d,0x2e66,0x2e8f,
+0x2ea9,0x2ee4,0x2f02,0x1e85,1,0,0x12,0x2f47,0x2f57,0x2f6a,0x2f7a,0x2f8a,0x2f99,0x2fa9,0x2fbb,0x2fce,
+0x2fe0,0x2ff0,0x3000,0x300f,0x301e,0x302e,0x303b,0x304a,0x305e,0x1f43,1,0,6,0x3083,0x308e,0x309b,
+0x30a8,0x30b5,0x30c0,0x1f87,1,0,0x1e,0x30dd,0x30ec,0x3101,0x3116,0x312b,0x313f,0x3150,0x3164,0x3177,
+0x3188,0x31a1,0x31b3,0x31c4,0x31d8,0x31eb,0x3203,0x3215,0x3220,0x3230,0x323e,0x3253,0x3268,0x327e,0x3298,0x32ae,
+0x32be,0x32d2,0x32e6,0x32f7,0x330f,0x21b2,1,0,0x66,0x3337,0x335a,0x3363,0x3370,0x337b,0x3384,0x338f,
+0x3398,0x33b1,0x33b6,0x33bf,0x33dc,0x33e5,0x33f2,0x33fb,0x341f,0x3426,0x342f,0x3442,0x344d,0x3456,0x3461,0x347a,
+0x3483,0x3492,0x349d,0x34a6,0x34b1,0x34ba,0x34c1,0x34ca,0x34d5,0x34de,0x34f7,0x3500,0x350d,0x3518,0x3529,0x3534,
+0x3549,0x3560,0x3569,0x3572,0x358b,0x3596,0x359f,0x35a8,0x35bf,0x35dc,0x35e7,0x35f8,0x3603,0x360a,0x3617,0x3624,
+0x3651,0x3666,0x366f,0x368a,0x36ad,0x36ce,0x36ef,0x3714,0x373b,0x375c,0x377f,0x37a0,0x37c7,0x37e8,0x380d,0x382c,
+0x384b,0x386a,0x3887,0x38a8,0x38c9,0x38ec,0x3911,0x3930,0x394f,0x3970,0x3997,0x39bc,0x39db,0x39fc,0x3a1f,0x3a3a,
+0x3a53,0x3a6e,0x3a87,0x3aa4,0x3abf,0x3adc,0x3afb,0x3b18,0x3b35,0x3b54,0x3b71,0x3b8c,0x3ba9,0x3bc6,0x3bf9,0x24f7,
+1,0,6,0x3c31,0x3c40,0x3c50,0x3c60,0x3c70,0x3c81,0x2555,1,0,0x2b,0x3c9f,0x3cab,0x3cb9,
+0x3cc8,0x3cd7,0x3ce7,0x3cf8,0x3d0c,0x3d21,0x3d37,0x3d4a,0x3d5e,0x3d6e,0x3d77,0x3d82,0x3d92,0x3dae,0x3dc0,0x3dce,
+0x3ddd,0x3de9,0x3dfe,0x3e12,0x3e25,0x3e33,0x3e47,0x3e55,0x3e5f,0x3e71,0x3e7d,0x3e8b,0x3e9b,0x3ea2,0x3ea9,0x3eb0,
+0x3eb7,0x3ebe,0x3ed4,0x3ef5,0x870,0x3f07,0x3f12,0x3f21,0x27ae,1,0,4,0x3f3b,0x3f46,0x3f52,0x3f5c,
+0x27d4,1,0,0xc1,0x3f73,0x3f80,0x3f95,0x3fa2,0x3fb1,0x3fbf,0x3fce,0x3fdd,0x3fef,0x3ffe,0x400c,0x401d,
+0x402c,0x403b,0x4048,0x4054,0x4063,0x4072,0x407c,0x4089,0x4096,0x40a5,0x40b3,0x40c2,0x40ce,0x40d8,0x40e4,0x40f4,
+0x4104,0x4112,0x411e,0x412f,0x413b,0x4147,0x4155,0x4162,0x416e,0x417b,0xd0c,0x4188,0x4196,0x41b0,0x41b9,0x41c7,
+0x41d5,0x41e1,0x41f0,0x41fe,0x420c,0x4218,0x4227,0x4235,0x4243,0x4250,0x425f,0x427a,0x4289,0x429a,0x42ab,0x42be,
+0x42d0,0x42df,0x42f1,0x4300,0x430c,0x4317,0x1e1c,0x4324,0x432f,0x433a,0x4345,0x4350,0x436b,0x4376,0x4381,0x438c,
+0x439f,0x43b3,0x43be,0x43cd,0x43dc,0x43e7,0x43f2,0x43ff,0x440e,0x441c,0x4427,0x4442,0x444c,0x445d,0x446e,0x447d,
+0x448e,0x4499,0x44a4,0x44af,0x44ba,0x44c5,0x44d0,0x44db,0x44e5,0x44f0,0x4500,0x450b,0x4519,0x4526,0x4531,0x4540,
+0x454d,0x455a,0x4569,0x4576,0x4587,0x4599,0x45a9,0x45b4,0x45c7,0x45de,0x45ec,0x45f9,0x4604,0x4611,0x4622,0x463e,
+0x4654,0x465f,0x467c,0x468c,0x469b,0x46a6,0x46b1,0x1f36,0x46bd,0x46c8,0x46e0,0x46f0,0x46ff,0x470d,0x471b,0x4726,
+0x4731,0x4745,0x475c,0x4774,0x4784,0x4794,0x47a4,0x47b6,0x47c1,0x47cc,0x47d6,0x47e2,0x47f0,0x4803,0x480f,0x481c,
+0x4827,0x4843,0x4850,0x485e,0x4877,0x2836,0x4886,0x2657,0x4893,0x48a1,0x48b3,0x48c1,0x48cd,0x48dd,0x2a71,0x48eb,
+0x48f7,0x4902,0x490d,0x4918,0x492c,0x493a,0x4951,0x495d,0x4971,0x497f,0x4991,0x49a7,0x49b5,0x49c7,0x49d5,0x49f2,
+0x4a04,0x4a11,0x4a22,0x4a34,0x4a4e,0x31cc,1,0,6,0x4a75,0x4a88,0x4a98,0x4aa6,0x4ab7,0x4ac7,0x3228,
+0x12,0,1,0x4af1,0x4af7,0x3235,0x12,0,1,0x4af1,0x4af7,0x3242,1,0,3,0x4af1,
+0x4af7,0x4b30,0x3258,1,0,3,0x4af1,0x4af7,0x4b30,0x326e,1,0,0x12,0x4bba,0x4bc4,0x4bd0,
+0x4bd7,0x4be2,0x4be7,0x4bee,0x4bf5,0x4bfe,0x4c03,0x4c08,0x4c18,0x870,0x3f07,0x4c24,0x3f12,0x4c34,0x3f21,0x3317,
+1,0,0xf,0x4bba,0x4c5b,0x4c65,0x4c6f,0x4c7a,0x3ddd,0x4c84,0x4c90,0x4c98,0x4c9f,0x4ca9,0x4bd0,0x4bd7,
+0x4be7,0x4cb3,0x339e,1,0,0x17,0x4bba,0x4cd0,0x4c6f,0x4cdc,0x4ce9,0x4cf7,0x3ddd,0x4d02,0x4bd0,0x4d13,
+0x4be7,0x4d22,0x4d30,0x870,0x3ef5,0x4d3c,0x4d4d,0x3f07,0x4c24,0x3f12,0x4c34,0x3f21,0x4d5e,0x34bb,1,0,
+3,0x4d91,0x4d99,0x4da1,0x34d4,1,0,0x10,0x4dca,0x4dd1,0x4de0,0x4e01,0x4e24,0x4e2f,0x4e4e,0x4e65,
+0x4e72,0x4e7b,0x4e9a,0x4ecd,0x4ee8,0x4f17,0x4f34,0x4f59,0x356d,1,0,0x24,0x4fa8,0x4fb5,0x4fc8,0x4fd5,
+0x5002,0x5027,0x503c,0x505b,0x507c,0x50a9,0x50e2,0x5105,0x5128,0x5155,0x518a,0x51b1,0x51da,0x5211,0x5240,0x5261,
+0x5286,0x5295,0x52b8,0x52cf,0x52dc,0x52eb,0x5308,0x5321,0x5344,0x5369,0x5382,0x5397,0x53a6,0x53b7,0x53c4,0x53e5,
+0x373d,1,0,4,0x5423,0x542e,0x5446,0x545e,0x3779,0x36,1,2,4,8,0xe,0x10,
+0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,
+0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,
+0x30dd,0x30ec,0x3101,0x3116,0x5497,0x312b,0x313f,0x548d,0x3150,0x3164,0x3177,0x54a8,0x3188,0x31a1,0x31b3,0x54bf,
+0x31c4,0x31d8,0x31eb,0x54e8,0x3203,0x3215,0x3220,0x3230,0x5484,0x323e,0x3253,0x3268,0x327e,0x3298,0x32ae,0x32be,
+0x32d2,0x32e6,0x54de,0x32f7,0x330f,0x54c9
};
-const uint8_t PropNameData::bytesTries[14774]={
+const uint8_t PropNameData::bytesTries[14992]={
0,0x15,0x6d,0xc3,0x78,0x73,0xc2,0x12,0x76,0x7a,0x76,0x6a,0x77,0xa2,0x52,0x78,
1,0x64,0x50,0x69,0x10,0x64,1,0x63,0x30,0x73,0x62,0x13,0x74,0x61,0x72,0x74,
0x63,0x60,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x61,0x13,0x69,0x67,0x69,0x74,
@@ -232,22 +233,17 @@ const uint8_t PropNameData::bytesTries[14774]={
0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,
0x72,0x69,0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,
0x65,0x73,0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,
-0x72,0x75,0x65,0x23,0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,
+0x72,0x75,0x65,0x23,0xb,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,
0x24,0x72,0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,
0x61,0x79,0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,
0x6e,3,0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,
0x72,0x65,0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,
0x6e,0x61,0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,
-0xa3,0xe0,0x61,0x5c,0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,1,0x6f,
-0x26,0x73,0xa3,0xf0,0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,
-0xa3,0xf0,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,2,0x61,
-0x74,0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,0x13,0x65,
-0x6c,0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,0x6f,0x76,
-0x65,0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,0x72,0xa3,
-0xd8,0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,0x6c,0x30,
-0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,0xa2,0xdc,
-2,0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,0xdc,1,
-0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,0xa3,0xda,
+0xa3,0xe0,0x64,0x45,0x64,0x4e,0x68,0x88,0x69,1,0x6f,0x26,0x73,0xa3,0xf0,0x1a,
+0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xf0,2,0x61,0xa3,
+0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75,0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,
+0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62,0x6f,0x76,0x65,0xa3,0xea,0x12,0x61,0x6e,0x72,
+0x2c,0x15,0x65,0x61,0x64,0x69,0x6e,0x67,0x2d,0x61,0xa2,0x7b,0x62,0xa2,0xd4,0x63,
0x11,0x63,0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,
0x10,0x31,0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,
0x47,0x30,0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,
@@ -255,788 +251,806 @@ const uint8_t PropNameData::bytesTries[14774]={
0x3a,2,0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,
0x36,0x55,0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,
0x34,0x51,6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,
-0x5f,0x32,0x61,0x10,0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,0x6f,0x13,
-0x75,0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,0xe9,0x13,
-0x62,0x6f,0x76,0x65,0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,
-0x48,0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,
-0x33,0x22,1,0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,
-0x74,0x74,0x6f,0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,
-0x65,0x72,0x72,0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,
-0x3d,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,
-0x74,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,
-0x53,0x70,2,0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,
-0x69,0x6f,0x6e,0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,
-0x4d,0x14,0x6f,0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,
-0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,
-0x6f,0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,
-0x61,0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,
-0x72,0x61,0x6c,0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,
-0x72,2,0x65,0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,
-0x68,0x74,0x20,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,
-0x65,0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,
-0x61,0x74,0x65,0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,
-0x65,0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,
-0x74,0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,
-0x61,0x74,0x6f,0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,
-0x73,0x74,0x72,0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,
-0x62,0x84,0x63,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,
-0x61,0x72,0x61,0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,
-0x69,0x63,1,0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,
-0x74,0x65,0x72,0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,
-0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,0x45,0,0x16,0x6d,0xc8,0x94,0x74,0xc1,0xd2,
-0x77,0x61,0x77,0x48,0x79,0x70,0x7a,0x1d,0x61,0x6e,0x61,0x62,0x61,0x7a,0x61,0x72,
-0x73,0x71,0x75,0x61,0x72,0x65,0xa5,0x18,0x10,0x61,1,0x6e,0x36,0x72,0x16,0x61,
-0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x12,0x63,0x68,0x6f,0xa5,0x2c,0x10,0x69,
-2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,
-0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,0x6d,
-0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,0x6c,
-0x73,0xa3,0x49,0x74,0xa2,0x59,0x75,0xa4,0x22,0x76,2,0x61,0x36,0x65,0x7a,0x73,
-0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,
-0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,
-0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,
-0x19,0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,
-0x65,0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,4,
-0x61,0x68,0x65,0xa2,0x9a,0x68,0xa2,0x9d,0x69,0xa2,0xa5,0x72,0x1c,0x61,0x6e,0x73,
-0x70,0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0xa3,0xcf,4,0x67,0x58,0x69,0x7e,0x6b,0xa2,0x58,0x6d,0xa2,
-0x5a,0x6e,0x12,0x67,0x75,0x74,0xa4,0x10,0x19,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,
-0x6e,0x74,0x73,0xa5,0x11,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,
-0x67,0xa3,0x62,0x13,0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,
-0x5e,0x78,0x16,0x75,0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,
-0x12,0x69,0x65,0x74,0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x11,0x69,0x6c,0x48,0x12,
-0x73,0x75,0x70,0xa4,0x2b,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x2b,0x13,
-0x6c,0x75,0x67,0x75,0x4b,0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,
-2,0x62,0x34,0x66,0x3c,0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,
-0x61,0x6e,0x57,0x14,0x69,0x6e,0x61,0x67,0x68,0xa3,0x90,2,0x63,0x82,0x67,0x92,
-0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,0x61,0x6e,0x61,0x64,0x69,0x61,0x6e,0x61,
-0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,
-0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xad,0x11,
-0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa3,0xad,0x15,0x61,0x72,0x69,0x74,0x69,0x63,
-0xa3,0x78,0x70,0xc3,0x33,0x70,0xa6,0x49,0x72,0xa8,5,0x73,7,0x6f,0xc1,0xa6,
-0x6f,0xa2,0x51,0x70,0xa2,0x6d,0x75,0xa2,0x8c,0x79,2,0x6c,0x50,0x6d,0x62,0x72,
-0x12,0x69,0x61,0x63,0x3a,0x12,0x73,0x75,0x70,0xa4,0x17,0x16,0x70,0x6c,0x65,0x6d,
-0x65,0x6e,0x74,0xa5,0x17,0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,
-0x14,0x62,0x6f,0x6c,0x73,0x61,0x1f,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,
-0x61,0x70,0x68,0x73,0x65,0x78,0x74,1,0x61,0xa5,0x2a,0x65,0x14,0x6e,0x64,0x65,
-0x64,0x61,0xa5,0x2a,2,0x67,0x34,0x72,0x3e,0x79,0x13,0x6f,0x6d,0x62,0x6f,0xa5,
-0x16,0x13,0x64,0x69,0x61,0x6e,0xa5,0x23,0x17,0x61,0x73,0x6f,0x6d,0x70,0x65,0x6e,
-0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,0xa3,0x56,0x12,
-0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x6c,0x65,0x74,
-0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d,0x74,0x6f,0x6e,0x73,
-0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6,0x15,0x64,0x61,0x6e,
-0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16,0x70,0x6c,0x65,0x6d,
-0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d,0x9e,0x70,0xa2,0x4b,
-0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,
-0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1,0x61,0x4e,0x73,0x12,
-0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75,0x62,0x73,0x63,0x72,
-0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73,0x1b,0x61,0x74,0x68,
-0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1,0x6c,0x40,0x75,1,
-0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x15,0x65,
-0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70,0x72,0x69,0x76,0x61,
-0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3,0x6d,0x62,0xa3,0x6e,
-3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,
-0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,
-5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62,0xa3,0x68,0x63,0xa3,
-0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x6f,0x70,
-0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,
-0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x88,0x68,0xa2,0x48,0x69,0xa2,0x71,0x6d,0x12,
-0x61,0x6c,0x6c,1,0x66,0x46,0x6b,0x15,0x61,0x6e,0x61,0x65,0x78,0x74,0xa4,0x29,
-0x15,0x65,0x6e,0x73,0x69,0x6f,0x6e,0xa5,0x29,0x12,0x6f,0x72,0x6d,1,0x73,0xa3,
-0x54,0x76,0x16,0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,
-0x16,0x72,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,
-0x6e,0xa3,0xac,1,0x61,0x52,0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,
-0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,
-0x72,0x2e,0x76,0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,
-0x64,0x50,0x6e,0x13,0x68,0x61,0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,
-0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,
-0xf8,5,0x72,0x35,0x72,0x44,0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,
-0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72,
-0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61,
-0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a,
-0x75,0x15,0x63,0x69,0x6e,0x68,0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d,
-0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61,
-0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72,
-1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73,
-0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15,
-0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f,
-0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96,
-1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,0x69,0xa2,0xc0,
-0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,
-0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,0x6d,0xa2,0xe6,0x6e,0xa8,0x19,0x6f,6,
-0x70,0x63,0x70,0x56,0x72,0x8a,0x73,0xa2,0x4c,0x74,0x10,0x74,0x1f,0x6f,0x6d,0x61,
-0x6e,0x73,0x69,0x79,0x61,0x71,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa5,0x28,0x18,
-0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61,0x63,0x74,0x65,0x72,0x72,
-0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85,1,0x69,0x46,0x6e,0x1e,
-0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,0x69,0x6e,0x67,0x62,0x61,0x74,0x73,0xa3,
-0xf2,0x11,0x79,0x61,0x47,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,0xa3,0x7a,
-0x11,0x67,0x65,0xa5,0xf,0x63,0xa2,0x71,0x67,0xa2,0x71,0x6c,1,0x63,0xa2,0x62,
-0x64,5,0x70,0x38,0x70,0x36,0x73,0x56,0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,
-0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61,0x6e,0xa3,0x8c,0x11,0x69,
-0x63,0xa3,0xf1,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,0x68,0x61,0x72,0x61,0x62,
-0x69,0x61,0x6e,0xa3,0xbb,0x13,0x64,0x69,0x61,0x6e,0xa5,0x22,0x68,0x42,0x69,0x54,
-0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17,
-0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63,
-0xa3,0x58,0x13,0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d,
-0x65,6,0x6f,0x86,0x6f,0x6c,0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,0x14,0x61,0x6e,
-0x6d,0x61,0x72,0x58,0x12,0x65,0x78,0x74,2,0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,
-0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb6,0x62,0xa3,0xee,1,0x64,0x52,0x6e,
-0x15,0x67,0x6f,0x6c,0x69,0x61,0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,0xd,0x16,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,0x66,0x69,0x65,
-0x72,1,0x6c,0x3c,0x74,0x19,0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,
-0xa3,0x8a,0x15,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,
-0x44,0x73,0x11,0x69,0x63,0xa2,0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,
-0x73,0xa3,0x5c,0x13,0x74,0x61,0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,0x65,0xa4,0x4c,
-0x69,1,0x61,0xa2,0x8f,0x73,0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,
-0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0x8f,0x61,0xa2,0x66,0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,
-0x65,0x6f,0x75,0x73,2,0x6d,0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,
-0x63,0x61,0x6c,0x81,0x11,0x61,0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,
-0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,
-0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,
-0x77,0x73,0xa3,0x73,0x10,0x6f,0xa3,0xd8,7,0x72,0x6f,0x72,0x44,0x73,0x4e,0x74,
-0x62,0x79,0x19,0x61,0x6e,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa5,0x20,0x13,
-0x63,0x68,0x65,0x6e,0xa5,0xc,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,
-0xa5,0x14,0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,
-0x6f,0x72,0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,
-0x61,0x74,0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,
-0x6f,0x72,0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,
-0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,0x68,0x50,0x6b,0x7e,0x6c,0x88,
-0x6e,1,0x64,0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,
-0x69,0x63,0xa3,0xc6,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,0xaa,0x14,0x74,
-0x69,0x6c,0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,0x13,0x61,0x73,
-0x61,0x72,0xa5,0x1f,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,3,0x64,0x6c,0x65,
-0x7e,0x6e,0xa2,0x47,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,
-0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7,0x15,0x75,0x72,0x73,
-0x69,0x76,0x65,0xa3,0xd6,0x17,0x65,0x66,0x61,0x69,0x64,0x72,0x69,0x6e,0xa5,0x21,
-0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,
-0xd5,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,
-0x6b,0x61,0x6b,0x75,0x69,0xa3,0xeb,6,0x6b,0x3b,0x6b,0x56,0x6f,0x5a,0x75,0x64,
-0x79,0x11,0x69,0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,0x68,0x75,0x65,
-0x68,0x6d,0x6f,0x6e,0x67,0xa5,0x27,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,
-0x6b,0x21,1,0x6d,0x2c,0x73,0x11,0x68,0x75,0xa5,0x15,0x17,0x62,0x65,0x72,0x66,
-0x6f,0x72,0x6d,0x73,0x7b,0x61,0x44,0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,0xe,
-0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b,1,0x62,0x38,0x6e,0x17,0x64,0x69,
-0x6e,0x61,0x67,0x61,0x72,0x69,0xa5,0x26,0x15,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,
-0xef,0x67,0xc4,0xe,0x6a,0xc1,0x95,0x6a,0xa2,0xc5,0x6b,0xa2,0xde,0x6c,4,0x61,
-0x54,0x65,0xa2,0x61,0x69,0xa2,0x78,0x6f,0xa2,0xa7,0x79,1,0x63,0x2e,0x64,0x12,
-0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,
-0x69,0x6e,1,0x31,0x82,0x65,0x11,0x78,0x74,4,0x61,0x5c,0x62,0x29,0x63,0xa3,
-0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,4,0x61,0x36,0x62,
-0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa3,0xe7,0x26,0x18,0x64,0x64,0x69,0x74,
-0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,
-0x6d,0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,
-0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,
-0x6d,0x2e,0x6e,0x34,0x73,0x10,0x75,0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,
-0x61,0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,
-0x62,0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,
-0x76,0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,
-0x61,1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,
-0x12,0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,1,0x61,0x80,0x68,3,
-0x61,0x3c,0x6d,0x4c,0x6f,0x64,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,
-0x16,0x72,0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,0x11,0x65,0x72,0x68,0x16,0x73,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,
-0x3a,0x6e,0x42,0x74,0xa2,0x51,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,
-0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62,0x76,0x67,0x7c,0x6e,0x12,0x61,0x64,0x61,
-0x4d,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0xcb,0x16,0x70,0x6c,0x65,0x6d,0x65,
-0x6e,0x74,0xa3,0xcb,0x11,0x78,0x74,1,0x61,0xa5,0x13,0x65,0x14,0x6e,0x64,0x65,
-0x64,0x61,0xa5,0x13,0x11,0x75,0x6e,0xa3,0x42,0x11,0x78,0x69,0x96,0x17,0x72,0x61,
-0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,0x61,0x6e,0x61,0x9e,1,0x65,
-0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0x65,0x6e,
-0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,0xa3,0x6b,0x67,0xa2,0xb5,0x68,
-0xa4,0x84,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,0x6e,0xa2,0x62,0x70,0x13,0x61,0x65,
-0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0x2b,1,0x63,0x99,0x65,
-0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,1,0x64,0x56,0x73,0x15,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,0x73,0x63,0x72,0x1f,0x69,0x70,0x74,
-0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x73,0x99,0x1c,0x70,
-0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0xba,1,0x64,
-0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,
-0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,0x13,0x6c,0x61,0x76,0x69,
-0xa3,0xbe,0x11,0x69,0x63,1,0x6e,0x3e,0x73,0x1a,0x69,0x79,0x61,0x71,0x6e,0x75,
-0x6d,0x62,0x65,0x72,0x73,0xa5,0x1e,0x19,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,
-0x6d,0x73,0xa3,0xb2,4,0x65,0x74,0x6c,0xa2,0x82,0x6f,0xa2,0x9a,0x72,0xa2,0x9e,
-0x75,2,0x6a,0x34,0x6e,0x3e,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,0x61,
-0x72,0x61,0x74,0x69,0x45,0x18,0x6a,0x61,0x6c,0x61,0x67,0x6f,0x6e,0x64,0x69,0xa5,
-0x1c,1,0x6e,0xa2,0x46,0x6f,1,0x6d,0x6e,0x72,0x13,0x67,0x69,0x61,0x6e,0x5a,
-1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,
-0x74,0xa3,0x87,0x11,0x78,0x74,0xa4,0x1b,0x14,0x65,0x6e,0x64,0x65,0x64,0xa5,0x1b,
-0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73,0x8c,0x12,0x65,0x78,
-0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e,0x65,0x72,0x61,0x6c,
-0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x61,0x67,0x6f,
-0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,0x75,0x70,0xa4,0xa,0x16,0x70,0x6c,
-0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,0x68,0x69,0x63,0xa3,0x59,1,0x61,
-0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78,0x74,0x6e,0x14,0x65,
-0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,0x69,0x63,0x31,0x13,
-0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,0x48,0x65,0xa2,0xdf,0x69,1,0x67,
-0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,0x10,0x68,1,0x70,0x3a,0x73,0x18,
-0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4b,1,0x72,0x3c,0x75,0x19,
-0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,0x11,0x69,0x76,0x1f,
-0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
-0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e,0xa5,2,0x10,0x66,
-2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,
-0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x1a,
-0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x13,0x61,0x72,
-0x6b,0x73,0xa3,0x52,2,0x67,0x34,0x69,0xa2,0x45,0x75,0x12,0x6e,0x6f,0x6f,0xa3,
-0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,
-0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,0x6d,0x70,0x61,0x74,0x69,0x62,0x69,
-0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,
-0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x19,
-0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,0xa5,0x1d,0x13,0x62,0x72,0x65,
-0x77,0x37,0x61,0xa4,5,0x62,0xa6,0x45,0x63,0xa8,0x1a,0x64,0xac,0xa6,0x65,5,
-0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,0x69,0x6f,0x70,0x69,0x63,0x5e,1,
-0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
-0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,0xa3,0xc8,0x65,0x13,0x6e,0x64,0x65,
-0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63,0x6f,0x6e,0x73,0xa3,
-0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,0x61,0x5a,0x63,0x9e,0x69,0x1c,0x64,
-0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x75,0x70,0xa2,0xc4,0x16,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,
-0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0xc3,0x13,0x72,0x69,0x63,0x73,0x86,
-0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3,0x11,0x6a,0x6b,0xa2,
-0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x61,0x6e,0x64,0x6d,0x6f,0x6e,0x74,
-0x68,0x73,0xa3,0x44,0x61,0x4a,0x67,0x76,0x6c,1,0x62,0x30,0x79,0x13,0x6d,0x61,
-0x69,0x63,0xa5,0x25,0x13,0x61,0x73,0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,
-0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,
-0x6d,0xa5,1,0x1f,0x79,0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,
-0x6c,0x79,0x70,0x68,1,0x66,0x26,0x73,0xa3,0xc2,0x1c,0x6f,0x72,0x6d,0x61,0x74,
-0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa5,0x24,7,0x6e,0xc0,0xe5,0x6e,0x3e,
-0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,
-0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74,1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,
-0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,
-0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,
-0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,
-0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,
-2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,
-0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2,0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,
-0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,
-0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,
-0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,
-0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,
-1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,
-0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42,0x68,0xa2,0x4d,0x6c,1,0x63,0x62,0x70,
-0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,
-0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,
-0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c,0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d,0xa5,7,0x1a,0x67,0x65,0x61,0x6e,0x6e,
-0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,
-0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,
-0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,0x64,0x72,0x61,0x77,0x69,0x6e,0x67,
-0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,0x65,0x78,0x74,0xa2,0x43,0x14,0x65,
-0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,
-0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,
-1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,
-0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2,0x52,0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,
-0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,0x34,0x6d,0x40,0x73,0x66,0x74,0x11,
-0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,
-0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
-0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,
-0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,0x69,0x41,0x16,0x61,0x69,0x6b,0x73,
-0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1,0x4c,0x6f,0xa2,0x55,0x75,0xa4,0x10,0x79,
-1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c,0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,
-0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,
-0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,
-9,0x65,0x13,0x6e,0x64,0x65,0x64,2,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,
-9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,
-0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,0xa2,0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,
-0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,
-0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,0x15,0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,
-0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,
-0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,
-0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,0x61,0x72,0x6b,0x73,0x2e,2,0x65,
-0x40,0x66,0xa6,0x2a,0x73,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
-0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,
-0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,0x6e,0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,
-0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,
-0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,0x73,0x83,0x12,0x74,0x69,0x63,0xa2,0x84,
-0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0xdf,1,
-0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,
-0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa2,0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,
-0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,
-0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xdb,0x68,0xa4,5,0x6a,0x10,0x6b,0xa2,0x47,
-4,0x63,0x86,0x65,0xa2,0x7d,0x72,0xa2,0x92,0x73,0xa2,0xa4,0x75,0x1f,0x6e,0x69,
-0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x47,
-0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,5,0x64,0x65,0x64,0xa3,0xd1,
-0x65,0xa5,0,0x66,0xa5,0x12,0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,
-0x96,0x69,1,0x62,0x44,0x64,0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,
-0x4f,0x12,0x73,0x75,0x70,0xa3,0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,
-0x66,0x54,0x69,0x18,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,
-0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,
-0x73,0xa3,0x53,0x11,0x78,0x74,5,0x64,9,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,
-0xa5,0x12,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x19,0x61,0x64,0x69,0x63,
-0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x95,
-1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,0x61,0x6e,0x64,0x70,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,0x72,0x6f,0x6b,0x65,
-0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,
-0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,0x1d,0x61,0x64,0x69,0x61,0x6e,
-0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x63,0x12,0x69,0x61,0x6e,0xa3,0xa8,
-1,0x61,0x6c,0x65,1,0x72,0x38,0x73,0x17,0x73,0x73,0x79,0x6d,0x62,0x6f,0x6c,
-0x73,0xa5,0x19,0x13,0x6f,0x6b,0x65,0x65,0x60,0x12,0x73,0x75,0x70,0xa2,0xff,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xff,1,0x6b,0x26,0x6d,0xa3,0xa4,0x11,
-0x6d,0x61,0xa3,0xd4,3,0x65,0x3e,0x69,0x7e,0x6f,0xa2,0x5d,0x75,0x15,0x70,0x6c,
-0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,
-0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,
-0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,0x5a,1,0x61,0x30,0x6e,0x14,0x67,0x62,0x61,
-0x74,0x73,0x91,0x18,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,
-0x30,0x66,0x36,0x73,0x11,0x75,0x70,0xa3,0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,
-0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,1,0x67,0x3e,0x6d,0x12,0x69,0x6e,
-0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,0x11,0x72,0x61,0xa5,0x1a,
-8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,0x64,
-0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62,0x37,
-0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10,0x72,
-0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d,0x70,
-0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1,0x72,
-0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63,0x61,
-0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f,0x30,
-0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,0x2f,
-2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10,0x6e,
-0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27,0x11,
-0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74,0x69,
-0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4,0x61,
-0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,0x17,
-0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,0x69,
-0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25,0x20,
-1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72,0x6f,
-0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,0x7a,
-2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,0x16,
-0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69,0x15,
-0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,
-0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,
-0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,
-0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73,0x69,
-0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66,0x5b,
-0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,
-0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,0x61,
-0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33,0x6c,
-0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,
-0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70,0x4c,
-0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b,0x14,
-0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
-0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,0x63,
-0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x30,
-0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x17,
-0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72,0x6d,
-0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
-0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,
-0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,0x27,
-0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,
-0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75,0x6d,
-0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
-0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,
-0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,0x1b,
-0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,0x74,
-0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,0x1f,
-0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
-0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69,0x74,
-0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x47,
-0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12,0x6d,
-0xc2,0x3f,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73,0x7a,
-1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74,0x22,
-0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18,0x72,
-0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b,0x61,
-0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11,0x68,
-0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67,1,
-0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62,0x75,
-0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11,0x61,
-0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,0x68,
-0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,0x61,
-0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x6b,0x70,0xa4,0x88,0x71,0xa4,0x88,
-0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68,0x93,
-1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61,0x2e,
-0x65,0xa4,0x3e,0x69,0x10,0x6d,0x53,1,0x6c,0xa2,0xe7,0x6e,0x16,0x69,0x63,0x68,
-0x61,0x65,0x61,0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,
-0x79,0xa2,0x42,0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,
-0x6d,0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,
-0x3c,0x68,0x4a,0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,
-0x6e,0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,
-0x11,0x61,0x77,0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,
-0x46,0x71,0x4a,0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,
-0x6e,0x65,0xa3,0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,
-0x67,0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,
-0x6d,0x65,0x6c,0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,
-0x11,0x74,0x68,0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,
-0x68,0xa3,0x44,0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,
-0x6c,0x2a,0x79,0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,
-0x99,1,0x61,0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,
-0x68,0x9b,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,6,0x6e,0x2c,0x6e,0x34,0x72,0x5e,
-0x73,0x62,0x74,0x11,0x74,0x61,0xa3,0x63,2,0x67,0x2e,0x6e,0x32,0x79,0x10,0x61,
-0xa3,0x60,0x10,0x61,0xa3,0x5d,1,0x61,0xa3,0x5e,0x6e,0x10,0x61,0xa3,0x5f,0x10,
-0x61,0xa3,0x61,0x11,0x73,0x61,0xa3,0x62,0x62,0x3c,0x6a,0x42,0x6c,0x10,0x6c,1,
-0x61,0xa3,0x5b,0x6c,0x10,0x61,0xa3,0x5c,0x11,0x68,0x61,0xa3,0x59,0x10,0x61,0xa3,
-0x5a,0x11,0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,
-0x28,0x6f,0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,
-0x70,0x21,0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,
-0x5d,0x66,0x9a,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x75,0x6c,0x11,0x61,0x6d,
-0x4c,0x12,0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,
-0x73,0x65,0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,
-0x86,0x10,0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,
-0x40,0x65,0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,
-0x43,2,0x68,0x3b,0x6d,0x5c,0x6e,0x1a,0x69,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,
-0x67,0x79,0x61,1,0x6b,0x2a,0x70,0x10,0x61,0xa3,0x65,0x15,0x69,0x6e,0x6e,0x61,
-0x79,0x61,0xa3,0x64,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,
-0x3d,2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,
-0x4b,1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2e,0x62,
-0x8a,0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,0x6c,1,0x61,0x28,0x65,
-0x10,0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,0x61,0x6e,2,0x66,0x30,
-0x6e,0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,0xa3,0x56,0x12,0x6f,0x6f,
-0x6e,0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,
-0x61,0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,
-0x29,0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,
-0x68,0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,
-0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,
-0x69,0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,
-0x6e,0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,
-0x6f,0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,
-0x69,0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,
-0,0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,0x77,0x84,0x78,0x9c,0x7a,
-0x10,0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,
-0x67,0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,
-0x72,0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,
-0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,
-0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,
-0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,
-0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,
-0x72,0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,
-0x61,0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,
-0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,
-0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,
-0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,
-0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,
-0x2d,4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,
-0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,
-0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-0x3d,0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,
-0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,
-0x6c,0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,
-0x64,0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,
-0x11,0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,
-0x75,0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,
-0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,
-0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,
-1,0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,
-0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,
-0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,
-0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,
-0x74,0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,
-0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,
-0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,
-0x61,0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,
-0x65,0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,
-0x72,0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,0x46,0x78,0x36,0x18,0x63,
-0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,0x61,0x73,0x65,0x71,0x72,
-0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,0x42,0x6e,1,0x6f,0x32,
-0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65,0x21,1,0x65,0x2e,
-0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d,0x61,0x6c,0x23,0,
-0x18,0x6e,0xc4,0x1e,0x74,0xc1,0x61,0x77,0x8a,0x77,0xa2,0x4c,0x78,0xa2,0x70,0x79,
-0xa2,0x7a,0x7a,6,0x73,0x1e,0x73,0x34,0x78,0x42,0x79,0x48,0x7a,0x11,0x7a,0x7a,
-0xa3,0x67,0x10,0x79,1,0x65,0xa3,0xae,0x6d,0xa3,0x81,0x11,0x78,0x78,0xa3,0x66,
-0x11,0x79,0x79,0x21,0x61,0x30,0x69,0x58,0x6d,0x11,0x74,0x68,0xa3,0x80,0x10,0x6e,
-1,0x61,0x26,0x62,0xa3,0xb1,0x1a,0x62,0x61,0x7a,0x61,0x72,0x73,0x71,0x75,0x61,
-0x72,0x65,0xa3,0xb1,0x11,0x6e,0x68,0x23,2,0x61,0x30,0x63,0x5a,0x6f,0x11,0x6c,
-0x65,0xa3,0x9b,1,0x6e,0x3c,0x72,0x10,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63,0x69,
-0x74,0x69,0xa3,0x92,0x12,0x63,0x68,0x6f,0xa3,0xbc,0x11,0x68,0x6f,0xa3,0xbc,1,
-0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65,0x6f,0x9b,0x10,0x69,0x72,0x11,
-0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xba,0x76,1,0x61,0x2c,0x69,0x11,0x73,0x70,
-0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,5,0x67,0x36,0x67,0x68,0x68,
-0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68,0xa2,0x9e,0x12,0x75,0x74,0x61,
-0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61,0x6e,0x6f,0x14,0x69,0x6e,0x61,
-0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1,0x61,0x24,0x69,0x6d,0x6a,0x11,
-0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11,0x6e,0x67,0x99,6,0x6c,0x21,
-0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3,0x7f,1,0x65,0x89,0x75,0x97,
-1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67,0xa2,0x9a,0x11,0x75,0x74,0xa3,
-0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,0xa3,0x99,1,0x61,
-0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,0x67,0x75,2,0x6c,
-0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,0x89,0x12,0x68,0x61,
-0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,0x75,0x68,0x11,0x67,
-0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67,0x11,0x61,
-0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc1,0x13,0x71,0xa2,0xde,0x72,0xa2,
-0xe3,0x73,6,0x69,0x8a,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x75,0x79,1,0x6c,
-0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e,0xa3,0x61,
-0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0x95,
-2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61,0x6c,0x61,
-0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77,0x72,0x69,
-0x74,0x69,0x6e,0x67,0xa3,0x70,2,0x67,0x3a,0x72,0x52,0x79,0x10,0x6f,0xa2,0xb0,
-0x12,0x6d,0x62,0x6f,0xa3,0xb0,1,0x64,0x26,0x6f,0xa3,0xb8,0xa2,0xb7,0x12,0x69,
-0x61,0x6e,0xa3,0xb7,0x10,0x61,0xa2,0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,
-0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,0x61,
-0x5c,0x67,0xa2,0x43,0x68,1,0x61,0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,0x28,
-0x76,0x30,0x77,0x87,0x12,0x61,0x64,0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,2,
-0x6d,0x40,0x72,0x58,0x75,0x10,0x72,0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,0x61,
-0xa3,0x6f,1,0x61,0x26,0x72,0xa3,0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,0x7e,
-1,0x61,0xa3,0x5e,0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,1,
-0x63,0x2f,0x69,0x23,3,0x65,0x3e,0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,0x69,
-0x24,0x72,0x61,0x10,0x63,0x61,0x13,0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,0x67,
-0xa3,0x6e,1,0x68,0x2a,0x72,0x10,0x6f,0xa3,0x5d,0x10,0x67,0xa3,0xb6,0x6e,0xa2,
-0x83,0x6f,0xa2,0xf2,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,0x6c,
-0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,0xa3,
-0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,0x6c,
-0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,0x67,
-0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,0x76,
-0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,0xa5,
-0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,
-0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,0x11,
-0x72,0x6d,0xa3,0x59,6,0x6b,0x36,0x6b,0x56,0x73,0x6e,0x75,0x74,0x79,0x11,0x69,
-0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,0x68,0x75,0x65,0x68,0x6d,0x6f,
-0x6e,0x67,0xa3,0xba,1,0x67,0x2e,0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,
-0xa3,0x84,0x11,0x68,0x75,0xa3,0x96,0x12,0x73,0x68,0x75,0xa3,0x96,0x61,0x42,0x62,
-0x80,0x65,0x10,0x77,1,0x61,0xa3,0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,
-2,0x62,0x2e,0x6e,0x3c,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,
-0x6e,0xa3,0x8f,0x10,0x64,0xa2,0xbb,0x16,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,0xa3,
-0xbb,0x11,0x61,0x74,0xa3,0x8f,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x93,0x73,2,
-0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,0x67,0x65,
-0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,0x6d,
-0x5b,1,0x63,0xa2,0x60,0x64,5,0x70,0x37,0x70,0x36,0x73,0x54,0x74,0x14,0x75,
-0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,0x61,
-0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,0x68,
-0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,0x13,0x64,0x69,0x61,0x6e,0xa3,0xb8,
-0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,
-0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa3,0x4c,0x14,0x74,
-0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,0x6d,0x12,0x69,0x6b,0x69,0xa3,
-0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,0x11,0x79,0x61,0x5f,0x10,0x68,
-0xa3,0x58,0x68,0xc2,0xf3,0x6b,0xc2,0xa,0x6b,0xa4,0x17,0x6c,0xa4,0x98,0x6d,8,
-0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86,0x79,1,0x61,0x28,0x6d,0x10,
-0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64,0x2e,0x6e,0x32,0x6f,0x10,0x6e,
-0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,0x61,0x6e,0x57,
-0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x11,0x6c,0x74,
-0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x36,0x65,0xa2,0x67,0x69,0xa2,0xbd,
-0x6c,0x11,0x79,0x6d,0x55,6,0x6e,0x38,0x6e,0x32,0x72,0x5c,0x73,0x6c,0x79,0x10,
-0x61,0xa3,0x55,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,
-0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,0x68,
-0x65,0x6e,0xa3,0xa9,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa3,0xaf,
-0x68,0x36,0x6b,0x4c,0x6c,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x61,0x26,
-0x6a,0xa3,0xa0,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x10,0x61,0xa2,0xb4,0x12,0x73,
-0x61,0x72,0xa3,0xb4,3,0x64,0x78,0x65,0x94,0x6e,0xa2,0x42,0x72,1,0x63,0xa3,
-0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,
-0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x56,0x15,0x75,0x72,0x73,0x69,0x76,
-0x65,0xa3,0x8d,1,0x65,0x26,0x66,0xa3,0xb5,0x16,0x66,0x61,0x69,0x64,0x72,0x69,
-0x6e,0xa3,0xb5,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa3,0x73,0x10,0x64,
-0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0x8c,0x11,0x61,0x6f,
-0xa3,0x5c,5,0x6f,0x14,0x6f,0x30,0x70,0x36,0x74,0x11,0x68,0x69,0xa3,0x78,0x11,
-0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,0x61,0x2e,0x68,0x98,0x6e,0x11,0x64,
-0x61,0x4b,4,0x69,0x3c,0x6c,0x44,0x6e,0x48,0x74,0x56,0x79,0x13,0x61,0x68,0x6c,
-0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,0x78,0x10,0x69,0xa3,0x4f,1,0x61,0x4d,
-0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,
-0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,0x8d,3,0x61,0x3c,0x6d,0x4e,0x6f,0x5a,
-0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0x91,0x10,0x72,0x92,0x15,0x6f,0x73,
-0x68,0x74,0x68,0x69,0x93,1,0x65,0x24,0x72,0x4f,0x10,0x72,0x4f,0x10,0x6a,0xa2,
-0x9d,0x11,0x6b,0x69,0xa3,0x9d,4,0x61,0x5c,0x65,0x90,0x69,0xa0,0x6f,0xa2,0x5d,
-0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2,0x6c,0x11,0x61,0x6e,0xa3,0x6c,0x10,0x69,
-0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2,0x6e,0x42,0x6f,0x46,0x74,3,0x66,0xa3,
-0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53,0x10,0x6e,0x53,0x10,0x61,0xa3,0x6a,0x50,
-0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52,0x11,0x68,0x61,0xa3,0x52,2,0x6d,0x2e,
-0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10,0x62,0x80,0x10,0x75,0x81,2,0x61,0xa3,
-0x53,0x62,0x83,0x65,0x11,0x61,0x72,1,0x61,0xa3,0x53,0x62,0x83,0x11,0x6d,0x61,
-0xa3,0x8b,0x68,0x6e,0x69,0xa2,0x95,0x6a,2,0x61,0x30,0x70,0x52,0x75,0x11,0x72,
-0x63,0xa3,0x94,1,0x6d,0x38,0x76,0x10,0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73,0x65,
-0xa3,0x4e,0x10,0x6f,0xa3,0xad,0x11,0x61,0x6e,0xa3,0x69,6,0x6c,0x1e,0x6c,0x34,
-0x6d,0x3a,0x72,0x48,0x75,0x11,0x6e,0x67,0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x10,
-0x6e,1,0x67,0xa3,0x4b,0x70,0xa3,0xba,0x11,0x6b,0x74,0x8d,0x61,0x3c,0x65,0xa2,
-0x43,0x69,0x11,0x72,0x61,0x48,0x13,0x67,0x61,0x6e,0x61,0x49,1,0x6e,0x34,0x74,
-0x10,0x72,0xa2,0xa2,0x11,0x61,0x6e,0xa3,0xa2,0x42,6,0x6f,0xe,0x6f,0x77,0x73,
-0xa3,0x49,0x74,0xa3,0x4a,0x75,0x12,0x6e,0x6f,0x6f,0x77,0x62,0xa3,0xac,0x67,0x3e,
-0x69,0x42,0x19,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,0xa3,0xb6,0x44,
-0x11,0x75,0x6c,0x45,0x11,0x62,0x72,0x46,0x11,0x65,0x77,0x47,2,0x6d,0x2e,0x6e,
-0x4a,0x74,0x11,0x61,0x6c,0x5d,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,
-0x6d,0x61,0x69,0x63,0xa3,0x74,2,0x64,0x66,0x68,0x6a,0x73,0x1b,0x63,0x72,0x69,
-0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,
-0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61,0x76,0x69,0xa3,0x7a,0x10,0x73,0xa3,0x4d,
-0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23,0x64,0xc0,0xf9,0x64,0xa2,0x7a,0x65,0xa2,
-0xad,0x67,4,0x65,0x82,0x6c,0x9a,0x6f,0xa2,0x46,0x72,0xa2,0x55,0x75,2,0x6a,
-0x3c,0x6e,0x4e,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69,0x41,1,
-0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x18,0x6a,0x61,0x6c,0x61,0x67,
-0x6f,0x6e,0x64,0x69,0xa3,0xb3,0x10,0x6f,1,0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,
-0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90,0x15,0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,
-1,0x6e,0x30,0x74,0x10,0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x67,0xa3,0xb3,0x6d,
-0xa3,0xaf,1,0x61,0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,
-0xa2,0x89,0x12,0x74,0x68,0x61,0xa3,0x89,3,0x65,0x42,0x6f,0x68,0x73,0x76,0x75,
-0x11,0x70,0x6c,0xa2,0x87,0x13,0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,
-0x10,0x61,0x34,0x15,0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,
-0x33,0x11,0x67,0x72,0xa2,0xb2,0x10,0x61,0xa3,0xb2,0x11,0x72,0x74,0x33,2,0x67,
-0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,0x79,
-2,0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,0x68,
-0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,1,0x62,0x36,0x79,
-0x10,0x6d,0xa2,0xb9,0x12,0x61,0x69,0x63,0xa3,0xb9,0x10,0x61,0xa2,0x88,0x12,0x73,
-0x61,0x6e,0xa3,0x88,0x61,0xa2,0xa2,0x62,0xa4,7,0x63,6,0x6f,0x3d,0x6f,0x5a,
-0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,0x69,0x2a,0x6c,0x31,0x73,0xa3,
-0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74,0x7f,1,0x6d,0x30,
-0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e,0x21,0x11,0x72,0x74,
-0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61,0x32,0x68,0xa2,0x41,
-0x69,0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72,0x76,0x75,0x1d,0x63,
-0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0x9f,0x10,
-0x6d,0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,
-0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68,0x11,0x61,0x6e,0xa3,
-0x68,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,0x65,0x2d,1,0x6b,
-0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,6,0x68,0x4a,0x68,0x48,0x6e,0x4e,
-0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,0x73,0x74,0x61,0x6e,
-0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,
-0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,0x3e,
-0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,0x10,
-0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11,0x68,0x62,0xa3,0x9f,
-0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7,0x11,0x61,0x6b,0xa3,
-0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1,0x67,0x30,0x68,1,
-0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,0x73,0x65,0x8f,0x11,
-0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10,0x61,1,
-0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69,0xa3,0x41,
-0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3,0xa8,0x15,0x69,0x6b,
-0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73,0x54,0x74,1,0x61,
-0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65,0x73,0x65,0x9d,0x10,
-0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13,0x61,0x76,0x61,0x68,
-0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,0x6c,0x42,0x6e,0x90,
-0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,0x6d,0x6f,0x25,0x22,
-1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,0x79,0x6c,0x6c,0x61,
-0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x29,0x18,0x61,0x64,
-0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,0x1a,0x74,0x61,0x70,
-0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,0x61,0x69,0x6c,0x69,
-0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,
-0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,0x20,0x10,0x6f,
-0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,
-0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,
-0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,0xb,0x72,0x39,
-0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10,0x78,0x21,0x72,0x28,
-0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,
-0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,0x61,
-0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c,0x3c,0x6f,0x4a,0x70,
-1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28,1,0x66,0x2b,0x76,
-0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c,0x65,0x64,0x67,1,
-0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x41,0x10,
-0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x23,
-2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,0x27,0x3a,1,0x61,
-0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d,0x3e,0x16,0x6f,0x64,
-0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,0x75,
-0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,1,
-0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,3,
-0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,0x6f,
-0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,0x70,
-0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,0x66,
-0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,0x23,
-1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,0x74,
-0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0,0x10,0x6c,
-0x88,0x72,0x40,0x72,0x36,0x73,0x5e,0x77,0x7a,0x78,0x8a,0x7a,0x11,0x77,0x6a,0x4b,
-1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,
-0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,0x65,
-0x71,0x75,0x6f,0x74,0x65,0x3f,0x17,0x73,0x65,0x67,0x73,0x70,0x61,0x63,0x65,0x4d,
-0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76,0x6f,0x13,0x74,0x68,0x65,0x72,0x21,
-1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,
-1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,0x74,
-0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,
-0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,0x66,0x3f,0x66,0x40,0x67,0x4e,0x68,
-0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,0x61,0x6e,0x61,0x27,0x10,0x6f,0x24,
-0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,
-0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49,1,0x65,0x24,0x6c,0x3d,0x19,0x62,
-0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61,0x86,0x63,0x92,0x64,0x94,
-0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,
-0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61,0x24,0x67,0x45,0x11,0x73,0x65,0x42,
-0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x47,0x15,
-0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,1,0x6f,0x24,0x71,0x41,0x18,
-0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,0x41,2,0x63,0x32,0x6e,0x3c,0x6f,
-0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73,0x65,0x25,0x20,0x12,0x6f,
-0x6e,0x65,0x21,6,0x6f,0x5c,0x6f,0x4a,0x72,0x5c,0x74,0x64,0x76,0x1d,0x69,0x73,
-0x75,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x6c,0x65,0x66,0x74,0x3d,0x18,0x76,0x65,
-0x72,0x73,0x74,0x72,0x75,0x63,0x6b,0x2d,0x13,0x69,0x67,0x68,0x74,0x2f,0x11,0x6f,
-0x70,0x30,0x12,0x61,0x6e,0x64,2,0x62,0x32,0x6c,0x50,0x72,0x13,0x69,0x67,0x68,
-0x74,0x3b,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x32,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,
-0x68,0x74,0x35,0x12,0x65,0x66,0x74,0x36,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,
-0x74,0x39,0x62,0x2c,0x6c,0x5c,0x6e,0x10,0x61,0x21,0x14,0x6f,0x74,0x74,0x6f,0x6d,
-0x22,0x12,0x61,0x6e,0x64,1,0x6c,0x2e,0x72,0x13,0x69,0x67,0x68,0x74,0x27,0x12,
-0x65,0x66,0x74,0x25,0x12,0x65,0x66,0x74,0x28,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,
-0x68,0x74,0x2b,0xd,0x6e,0xaa,0x72,0x70,0x72,0x92,0x73,0xa2,0x46,0x74,0xa2,0x54,
-0x76,1,0x69,0x60,0x6f,0x12,0x77,0x65,0x6c,0x62,1,0x64,0x3a,0x69,0x19,0x6e,
-0x64,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,0x67,0x17,0x65,0x70,0x65,0x6e,0x64,
-0x65,0x6e,0x74,0x65,1,0x72,0x2e,0x73,0x13,0x61,0x72,0x67,0x61,0x61,0x12,0x61,
-0x6d,0x61,0x5f,0x1d,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x73,0x68,0x69,0x66,0x74,
-0x65,0x72,0x57,0x1e,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x6d,0x6f,0x64,0x69,0x66,
-0x69,0x65,0x72,0x59,0x12,0x6f,0x6e,0x65,1,0x6c,0x2c,0x6d,0x12,0x61,0x72,0x6b,
-0x5d,0x14,0x65,0x74,0x74,0x65,0x72,0x5b,0x6e,0x3c,0x6f,0x7c,0x70,0x18,0x75,0x72,
-0x65,0x6b,0x69,0x6c,0x6c,0x65,0x72,0x55,1,0x6f,0x4c,0x75,1,0x6b,0x3c,0x6d,
-0x12,0x62,0x65,0x72,0x50,0x15,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x53,0x11,0x74,0x61,
-0x4f,0x16,0x6e,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x4d,0x13,0x74,0x68,0x65,0x72,0x21,
-0x67,0x3e,0x67,0x4a,0x69,0x64,0x6a,0x82,0x6d,0x1d,0x6f,0x64,0x69,0x66,0x79,0x69,
-0x6e,0x67,0x6c,0x65,0x74,0x74,0x65,0x72,0x4b,0x1c,0x65,0x6d,0x69,0x6e,0x61,0x74,
-0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x45,0x1e,0x6e,0x76,0x69,0x73,0x69,0x62,0x6c,
-0x65,0x73,0x74,0x61,0x63,0x6b,0x65,0x72,0x47,0x14,0x6f,0x69,0x6e,0x65,0x72,0x49,
-0x61,0xa2,0xba,0x62,0xa2,0xc0,0x63,1,0x61,0xa2,0xa2,0x6f,0x16,0x6e,0x73,0x6f,
-0x6e,0x61,0x6e,0x74,0x2a,8,0x6b,0x67,0x6b,0x48,0x6d,0x52,0x70,0x5c,0x73,0xa2,
-0x42,0x77,0x19,0x69,0x74,0x68,0x73,0x74,0x61,0x63,0x6b,0x65,0x72,0x43,0x14,0x69,
-0x6c,0x6c,0x65,0x72,0x35,0x14,0x65,0x64,0x69,0x61,0x6c,0x37,1,0x6c,0x52,0x72,
-0x10,0x65,1,0x63,0x2e,0x66,0x13,0x69,0x78,0x65,0x64,0x3d,0x19,0x65,0x64,0x69,
-0x6e,0x67,0x72,0x65,0x70,0x68,0x61,0x3b,0x18,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,
-0x65,0x72,0x39,0x10,0x75,1,0x62,0x3e,0x63,0x1b,0x63,0x65,0x65,0x64,0x69,0x6e,
-0x67,0x72,0x65,0x70,0x68,0x61,0x41,0x15,0x6a,0x6f,0x69,0x6e,0x65,0x64,0x3f,0x64,
-0x4c,0x66,0x52,0x68,0x5a,0x69,0x1e,0x6e,0x69,0x74,0x69,0x61,0x6c,0x70,0x6f,0x73,
-0x74,0x66,0x69,0x78,0x65,0x64,0x33,0x12,0x65,0x61,0x64,0x2d,0x13,0x69,0x6e,0x61,
-0x6c,0x2f,0x18,0x65,0x61,0x64,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,0x1d,0x6e,0x74,
-0x69,0x6c,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x29,0x16,0x76,0x61,
-0x67,0x72,0x61,0x68,0x61,0x23,1,0x69,0x4a,0x72,0x10,0x61,0x1f,0x68,0x6d,0x69,
-0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x6e,0x75,0x6d,0x62,0x65,0x72,0x27,0x12,0x6e,
-0x64,0x75,0x25,2,0x72,0x38,0x74,0x46,0x75,0x26,0x15,0x70,0x72,0x69,0x67,0x68,
-0x74,0x27,0x20,0x15,0x6f,0x74,0x61,0x74,0x65,0x64,0x21,1,0x72,0x24,0x75,0x25,
-0x22,0x18,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x65,0x64,1,0x72,0x32,0x75,0x15,
-0x70,0x72,0x69,0x67,0x68,0x74,0x25,0x15,0x6f,0x74,0x61,0x74,0x65,0x64,0x23,0xd,
-0x6e,0xc1,0x86,0x73,0xa8,0x73,0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,
-0,2,0x6c,0xd9,0x20,0,0x70,0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,
-0,0,7,0x6f,0x3c,0x6f,0xff,8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,
-0x13,0x6d,0x62,0x6f,0x6c,0xff,0xf,0,0,0,0x11,0x61,0x63,1,0x65,0x34,
-0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,
-0x61,0x74,0x6f,0x72,0xc3,0,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,
-0,0x63,0xff,2,0,0,0,0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,
-0xff,1,0,0,0,0x16,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,
-0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,
-1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x25,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,
-0x6f,0xa2,0x89,0x70,0xfe,0x30,0xf8,0,0,9,0x69,0x33,0x69,0xff,0x10,0,
-0,0,0x6f,0xfd,0x80,0,0,0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,
-0x63,0x74,0xfe,0x30,0xf8,0,0,0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,
-0xf8,0,0,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,
-0x48,0x63,0xfd,0x40,0,0,0x64,0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,
-0xff,0x20,0,0,0,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,
-0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,
-0xab,0,0x6f,0x30,0x75,0x13,0x6d,0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,
-0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,
-0x12,0x68,0x65,0x72,0xe6,0x80,1,3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,
-0x79,0x6d,0x62,0x6f,0x6c,0xff,8,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,
-0x61,0x14,0x75,0x6d,0x62,0x65,0x72,0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,
-0x74,0x69,0x6f,0x6e,0xfd,0x80,0,0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,
-0x75,0x61,0x74,0x69,0x6f,0x6e,0xf9,0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,
-0xa2,0x64,0x6c,0xa2,0x79,0x6d,0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,
-0x80,0x6e,0xa1,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,
-0x79,0x6d,0x62,0x6f,0x6c,0xff,4,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,
-0x41,1,0x72,0x3c,0x74,0x16,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,
-0,0,0x10,0x6b,0xa5,0xc0,1,0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,
-0,0,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0xff,0x20,0,0,0,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,
-0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,
-0x6d,0x18,0x6d,0x41,0x6f,0x28,0x74,0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,
-0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,
-0x6c,0x29,0x13,0x74,0x74,0x65,0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,
-0,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,
-0x63,0x46,0x64,0xa2,0x96,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,
-0x61,0x72,0x6b,0xa3,0x80,0xe6,0x80,1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,
-0xe1,0,0,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0xff,2,0,0,0,0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,
-0,1,0x6d,0x62,0x6e,1,0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,
-0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0xfd,0x40,0,0,0x19,0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,
-0xa5,0xc0,0x61,0x58,0x63,0xd9,0x80,0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,
-0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,
-0x18,0x73,0x65,0x64,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,
-0x69,0x12,0x67,0x69,0x74,0xa7,0,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0xe9,0,0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,
-0x6d,0x62,0x65,0x72,0xa7,0
+0x5f,0x32,0x61,0x10,0x34,0xa3,0x54,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,
+0xa3,0xe8,0x74,2,0x61,0x74,0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,
+0x61,0x3e,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,
+0xc8,0x13,0x62,0x6f,0x76,0x65,0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,
+0xa2,0xd6,0x10,0x72,0xa3,0xd8,0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,
+0xa2,0xe6,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,
+0x74,0xa3,0xe4,0xa2,0xdc,2,0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,
+0x6f,0x77,0xa2,0xdc,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,
+0x65,0x66,0x74,0xa3,0xda,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48,
+0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33,
+0x22,1,0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74,
+0x74,0x6f,0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,
+0x72,0x72,0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,
+0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74,
+0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53,
+0x70,2,0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69,
+0x6f,0x6e,0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d,
+0x14,0x6f,0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,
+0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f,
+0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,
+0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72,
+0x61,0x6c,0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72,
+2,0x65,0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,
+0x74,0x20,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,
+0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61,
+0x74,0x65,0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65,
+0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74,
+0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61,
+0x74,0x6f,0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73,
+0x74,0x72,0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62,
+0x84,0x63,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61,
+0x72,0x61,0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,
+0x63,1,0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,
+0x65,0x72,0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,
+0x65,0x75,0x74,0x72,0x61,0x6c,0x45,0,0x16,0x6d,0xc8,0xc8,0x74,0xc1,0xee,0x77,
+0x6a,0x77,0x48,0x79,0x70,0x7a,0x1d,0x61,0x6e,0x61,0x62,0x61,0x7a,0x61,0x72,0x73,
+0x71,0x75,0x61,0x72,0x65,0xa5,0x18,0x10,0x61,1,0x6e,0x36,0x72,0x16,0x61,0x6e,
+0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x12,0x63,0x68,0x6f,0xa5,0x2c,1,0x65,0x88,
+0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,
+0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,
+0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,
+0x6c,0x73,0xa3,0x49,0x13,0x7a,0x69,0x64,0x69,0xa5,0x34,0x74,0xa2,0x59,0x75,0xa4,
+0x35,0x76,2,0x61,0x36,0x65,0x7a,0x73,0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,
+1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,
+0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,
+0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19,0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,
+0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65,0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,
+0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,4,0x61,0x68,0x65,0xa2,0xad,0x68,0xa2,0xb0,
+0x69,0xa2,0xb8,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,
+0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xcf,4,0x67,
+0x7e,0x69,0xa2,0x41,0x6b,0xa2,0x6a,0x6d,0xa2,0x6c,0x6e,0x12,0x67,0x75,0x74,0xa4,
+0x10,1,0x63,0x40,0x73,0x11,0x75,0x70,0xa4,0x33,0x16,0x70,0x6c,0x65,0x6d,0x65,
+0x6e,0x74,0xa5,0x33,0x18,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5,0x11,
+2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13,0x61,
+0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75,0x61,
+0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,
+0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74,0xa3,
+0xb7,0x11,0x72,0x69,0xa3,0xdc,0x11,0x69,0x6c,0x48,0x12,0x73,0x75,0x70,0xa4,0x2b,
+0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x2b,0x13,0x6c,0x75,0x67,0x75,0x4b,
+0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66,0x3c,
+0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14,0x69,
+0x6e,0x61,0x67,0x68,0xa3,0x90,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,
+0x65,0x64,0x63,0x61,0x6e,0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,
+0x67,0x69,0x6e,0x61,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,
+0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,
+0x78,0x74,0xa3,0xad,0x15,0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,0x70,0xc3,0x4b,
+0x70,0xa6,0x61,0x72,0xa8,0x1d,0x73,7,0x6f,0xc1,0xbe,0x6f,0xa2,0x69,0x70,0xa2,
+0x85,0x75,0xa2,0xa4,0x79,2,0x6c,0x50,0x6d,0x62,0x72,0x12,0x69,0x61,0x63,0x3a,
+0x12,0x73,0x75,0x70,0xa4,0x17,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x17,
+0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x13,0x62,0x6f,0x6c,0x73,
+1,0x61,0x4c,0x66,0x10,0x6f,0x1f,0x72,0x6c,0x65,0x67,0x61,0x63,0x79,0x63,0x6f,
+0x6d,0x70,0x75,0x74,0x69,0x6e,0x67,0xa5,0x32,0x1f,0x6e,0x64,0x70,0x69,0x63,0x74,
+0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x78,0x74,1,0x61,0xa5,0x2a,0x65,0x14,
+0x6e,0x64,0x65,0x64,0x61,0xa5,0x2a,2,0x67,0x34,0x72,0x3e,0x79,0x13,0x6f,0x6d,
+0x62,0x6f,0xa5,0x16,0x13,0x64,0x69,0x61,0x6e,0xa5,0x23,0x17,0x61,0x73,0x6f,0x6d,
+0x70,0x65,0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,
+0xa3,0x56,0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,
+0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d,0x74,
+0x6f,0x6e,0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6,0x15,
+0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16,0x70,
+0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d,0x9e,
+0x70,0xa2,0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,
+0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1,0x61,
+0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75,0x62,
+0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73,0x1b,
+0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1,0x6c,
+0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,
+0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70,0x72,
+0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3,0x6d,
+0x62,0xa3,0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d,0x62,
+0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,
+0x68,0x73,0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62,0xa3,
+0x68,0x63,0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63,0x61,
+0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e,0x63,
+0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x88,0x68,0xa2,0x48,0x69,0xa2,
+0x71,0x6d,0x12,0x61,0x6c,0x6c,1,0x66,0x46,0x6b,0x15,0x61,0x6e,0x61,0x65,0x78,
+0x74,0xa4,0x29,0x15,0x65,0x6e,0x73,0x69,0x6f,0x6e,0xa5,0x29,0x12,0x6f,0x72,0x6d,
+1,0x73,0xa3,0x54,0x76,0x16,0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,
+0x6d,0x36,0x75,0x16,0x72,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,
+0x69,0x74,0x61,0x6e,0xa3,0xac,1,0x61,0x52,0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,
+0x6e,0x64,0x66,0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,
+0xa3,0xf7,1,0x72,0x2e,0x76,0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,
+0xa3,0xd9,1,0x64,0x50,0x6e,0x13,0x68,0x61,0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,
+0x68,0x61,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,
+0x61,0x6d,0xa3,0xf8,5,0x72,0x35,0x72,0x44,0x73,0x64,0x75,1,0x61,0xa3,0x4e,
+0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x69,0x76,0x61,0x74,
+0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,
+0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,
+0x6c,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,2,0x68,
+0x38,0x6c,0x4a,0x75,0x15,0x63,0x69,0x6e,0x68,0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,
+0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,
+0xf4,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,
+0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,
+0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
+0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,
+0x73,0x74,0x6f,0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,
+0x61,0xa3,0x96,1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,
+0x69,0xa2,0xc0,0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,
+0x6c,0x73,0xa3,0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,0x6d,0xa2,0xe6,0x6e,0xa8,
+0x19,0x6f,6,0x70,0x63,0x70,0x56,0x72,0x8a,0x73,0xa2,0x4c,0x74,0x10,0x74,0x1f,
+0x6f,0x6d,0x61,0x6e,0x73,0x69,0x79,0x61,0x71,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,
+0xa5,0x28,0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61,0x63,0x74,
+0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85,1,0x69,
+0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,0x69,0x6e,0x67,0x62,0x61,
+0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,
+0x61,0xa3,0x7a,0x11,0x67,0x65,0xa5,0xf,0x63,0xa2,0x71,0x67,0xa2,0x71,0x6c,1,
+0x63,0xa2,0x62,0x64,5,0x70,0x38,0x70,0x36,0x73,0x56,0x74,0x14,0x75,0x72,0x6b,
+0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61,0x6e,0xa3,
+0x8c,0x11,0x69,0x63,0xa3,0xf1,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,0x68,0x61,
+0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x13,0x64,0x69,0x61,0x6e,0xa5,0x22,0x68,
+0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,
+0xa3,0xf0,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,
+0x6c,0x69,0x63,0xa3,0x58,0x13,0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,
+0x68,0x61,0x6d,0x65,6,0x6f,0x86,0x6f,0x6c,0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,
+0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65,0x78,0x74,2,0x61,0xa3,0xb6,0x62,
+0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb6,0x62,0xa3,0xee,1,
+0x64,0x52,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61,0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,
+0xd,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,
+0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19,0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,
+0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,
+0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2,0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,
+0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61,0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,
+0x65,0xa4,0x4c,0x69,1,0x61,0xa2,0x8f,0x73,0x10,0x63,5,0x70,0x18,0x70,0xa2,
+0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x15,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66,0x65,0x46,0x6d,0x19,0x61,0x74,0x68,
+0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,
+0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d,0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,
+0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61,0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,
+0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,
+0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8e,0x12,0x61,0x6e,0x64,1,0x61,
+0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,
+0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f,0xa3,0xd8,7,0x72,0x6f,0x72,0x44,
+0x73,0x4e,0x74,0x62,0x79,0x19,0x61,0x6e,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,
+0xa5,0x20,0x13,0x63,0x68,0x65,0x6e,0xa5,0xc,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,
+0x6e,0x64,0x69,0xa5,0x14,0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,
+0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,
+0x5d,0x16,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,
+0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,
+0x65,0x72,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,0x68,0x50,0x6b,
+0x7e,0x6c,0x88,0x6e,1,0x64,0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,
+0xea,0x12,0x61,0x69,0x63,0xa3,0xc6,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,
+0xaa,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,
+0x13,0x61,0x73,0x61,0x72,0xa5,0x1f,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,3,
+0x64,0x6c,0x65,0x7e,0x6e,0xa2,0x47,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,0x63,
+0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7,0x15,
+0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x65,0x66,0x61,0x69,0x64,0x72,0x69,
+0x6e,0xa5,0x21,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,
+0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xd5,0x18,0x64,
+0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0xeb,6,0x6b,0x3b,0x6b,0x56,0x6f,
+0x5a,0x75,0x64,0x79,0x11,0x69,0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,
+0x68,0x75,0x65,0x68,0x6d,0x6f,0x6e,0x67,0xa5,0x27,0x10,0x6f,0xa3,0x92,0x14,0x62,
+0x6c,0x6f,0x63,0x6b,0x21,1,0x6d,0x2c,0x73,0x11,0x68,0x75,0xa5,0x15,0x17,0x62,
+0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0x7b,0x61,0x44,0x62,0x21,0x65,0x10,0x77,1,
+0x61,0xa5,0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b,1,0x62,0x38,0x6e,
+0x17,0x64,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,0xa5,0x26,0x15,0x61,0x74,0x61,0x65,
+0x61,0x6e,0xa3,0xef,0x67,0xc4,0x32,0x6a,0xc1,0xb9,0x6a,0xa2,0xd5,0x6b,0xa2,0xee,
+0x6c,4,0x61,0x54,0x65,0xa2,0x61,0x69,0xa2,0x78,0x6f,0xa2,0xb7,0x79,1,0x63,
+0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,
+0x55,0x74,0x11,0x69,0x6e,1,0x31,0x82,0x65,0x11,0x78,0x74,4,0x61,0x5c,0x62,
+0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,4,
+0x61,0x36,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa3,0xe7,0x26,0x18,0x64,
+0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,
+0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,
+0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,
+0xa3,0x9c,2,0x6d,0x4e,0x6e,0x54,0x73,0x10,0x75,0xa2,0xb0,0x12,0x73,0x75,0x70,
+0xa4,0x31,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x31,0x11,0x62,0x75,0xa3,
+0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,0x38,0x73,0x17,0x79,
+0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,
+0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
+0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,
+0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,1,0x61,
+0xa2,0x43,0x68,4,0x61,0x40,0x69,0x50,0x6d,0x6e,0x6f,0x86,0x75,0x15,0x64,0x61,
+0x77,0x61,0x64,0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,
+0x1d,0x74,0x61,0x6e,0x73,0x6d,0x61,0x6c,0x6c,0x73,0x63,0x72,0x69,0x70,0x74,0xa5,
+0x30,0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x12,
+0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x3a,0x6e,0x42,0x74,0xa2,0x51,0x79,0x13,0x61,
+0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62,0x76,
+0x67,0x7c,0x6e,0x12,0x61,0x64,0x61,0x4d,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,
+0xcb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x78,0x74,1,0x61,
+0xa5,0x13,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa5,0x13,0x11,0x75,0x6e,0xa3,0x42,
+0x11,0x78,0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,
+0x6b,0x61,0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,
+0x69,0x63,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,
+0x74,0xa3,0x6b,0x67,0xa2,0xb5,0x68,0xa4,0x84,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,
+0x6e,0xa2,0x62,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,
+0x6e,0x73,0x2b,1,0x63,0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
+1,0x64,0x56,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,
+0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,
+0x73,0x63,0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,
+0x74,0x65,0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,
+0x61,0x69,0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,
+0x6f,0x6e,0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,
+0xa3,0xbd,0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x11,0x69,0x63,1,0x6e,0x3e,0x73,
+0x1a,0x69,0x79,0x61,0x71,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa5,0x1e,0x19,0x75,
+0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x74,0x6c,0xa2,
+0x82,0x6f,0xa2,0x9a,0x72,0xa2,0x9e,0x75,2,0x6a,0x34,0x6e,0x3e,0x72,0x14,0x6d,
+0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,0x61,0x74,0x69,0x45,0x18,0x6a,0x61,0x6c,
+0x61,0x67,0x6f,0x6e,0x64,0x69,0xa5,0x1c,1,0x6e,0xa2,0x46,0x6f,1,0x6d,0x6e,
+0x72,0x13,0x67,0x69,0x61,0x6e,0x5a,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x87,
+0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x87,0x11,0x78,0x74,0xa4,0x1b,0x14,
+0x65,0x6e,0x64,0x65,0x64,0xa5,0x1b,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,
+0x70,0x65,0x73,0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,
+0xa3,0xe3,0x1e,0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
+0x6f,0x6e,0x71,0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,
+0x75,0x70,0xa4,0xa,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,
+0x68,0x69,0x63,0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,
+0x65,0x11,0x78,0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,
+0x6f,0x70,0x74,0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,
+0x48,0x65,0xa2,0xdf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,
+0x10,0x68,1,0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
+0xa3,0x4b,1,0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,
+0x73,0xa3,0x4c,0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,
+0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,
+0x72,0x61,0x6e,0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,
+0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,
+0x6f,0x72,0x6d,0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,
+0x6d,0x73,0xa3,0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,2,0x67,0x34,0x69,0xa2,
+0x45,0x75,0x12,0x6e,0x6f,0x6f,0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,
+0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,
+0x6d,0x70,0x61,0x74,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,
+0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,
+0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x19,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,
+0x61,0xa5,0x1d,0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa4,5,0x62,0xa6,0x45,0x63,
+0xa8,0x1a,0x64,0xac,0xb8,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,
+0x69,0x6f,0x70,0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,
+0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,
+0xa3,0xc8,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,
+0x74,0x69,0x63,0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,
+0x61,0x5a,0x63,0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
+0x73,0x75,0x70,0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,
+0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,
+0xc3,0x13,0x72,0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,
+0x74,0xa3,0xc3,0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,
+0x61,0x6e,0x64,0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x4a,0x67,0x76,0x6c,
+1,0x62,0x30,0x79,0x13,0x6d,0x61,0x69,0x63,0xa5,0x25,0x13,0x61,0x73,0x61,0x6e,
+0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,0x63,0x63,
+0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x1f,0x79,0x70,0x74,0x69,0x61,
+0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,1,0x66,0x26,0x73,0xa3,
+0xc2,0x1c,0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa5,
+0x24,7,0x6e,0xc0,0xe5,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,0x65,
+0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74,1,
+0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,
+0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,
+0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,
+0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,
+0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,0x6f,
+0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2,0x43,
+0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,
+0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xd2,
+0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,
+0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,
+0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,
+0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,
+0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42,0x68,
+0xa2,0x4d,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x70,
+1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,
+0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c,0xa2,
+0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d,0xa5,
+7,0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,
+0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,
+0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,
+0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,
+0x64,0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,
+0x65,0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,
+0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,
+0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,
+0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2,0x52,
+0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,
+0x34,0x6d,0x40,0x73,0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,
+0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,
+0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,
+0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,
+0x69,0x41,0x16,0x61,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1,0x4c,
+0x6f,0xa2,0x55,0x75,0xa4,0x10,0x79,1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c,0x69,
+0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65,0x6d,
+0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3,0x61,
+0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x65,0x13,0x6e,0x64,0x65,0x64,2,0x61,
+0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,
+0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,0xa2,
+0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,
+0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,0x15,
+0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,
+0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,
+0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,
+0x61,0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,0x41,0x73,0x18,0x75,0x70,0x70,
+0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,
+0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,0x6e,
+0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,
+0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,0x73,
+0x83,0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,0x6d,
+0x62,0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,0x79,
+0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa2,
+0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,0x70,
+0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xe1,0x68,
+0xa4,0xb,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8c,0x65,0xa2,0x80,0x72,0xa2,0x98,
+0x73,0xa2,0xaa,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,0x67,
+0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,
+0x6e,6,0x64,0x6b,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,0xa5,0x12,0x67,0xa5,0x2e,
+0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,0x44,0x64,
+0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,0x70,0xa3,
+0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,0x64,0x65,
+0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,
+0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,0x78,0x74,
+6,0x64,0xc,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,0xa5,0x12,0x67,0xa5,0x2e,0x61,
+0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x19,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,
+0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x95,1,0x74,0x50,
+0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,
+0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,
+2,0x6e,0x48,0x72,0x64,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,
+0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,
+0x6c,0x61,0x62,0x69,0x63,0x73,0x63,0x12,0x69,0x61,0x6e,0xa3,0xa8,2,0x61,0x3a,
+0x65,0x4c,0x6f,0x16,0x72,0x61,0x73,0x6d,0x69,0x61,0x6e,0xa5,0x2d,1,0x6b,0x26,
+0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,1,0x72,0x38,0x73,0x17,0x73,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,0xa5,0x19,0x13,0x6f,0x6b,0x65,0x65,0x60,0x12,0x73,0x75,
+0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xff,3,0x65,0x3e,
+0x69,0x7e,0x6f,0xa2,0x69,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,
+0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,
+0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,
+0x5a,2,0x61,0x3a,0x6e,0x82,0x76,0x16,0x65,0x73,0x61,0x6b,0x75,0x72,0x75,0xa5,
+0x2f,0x18,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,0x30,0x66,
+0x36,0x73,0x11,0x75,0x70,0xa3,0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,0x72,0x73,
+0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x14,0x67,0x62,0x61,0x74,0x73,0x91,1,0x67,
+0x3e,0x6d,0x12,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,
+0x11,0x72,0x61,0xa5,0x1a,8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,
+0x4b,0x77,0x12,0x69,0x64,0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,
+2,0x61,0x40,0x62,0x37,0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,
+0x61,0x6b,0x37,0x10,0x72,0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,
+0x75,1,0x62,0x3d,0x70,0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,
+0x6c,0x6c,0x39,1,0x72,0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,
+0x40,0x13,0x69,0x63,0x61,0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,
+0x36,0x73,0x10,0x6f,0x30,0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,
+0x12,0x69,0x61,0x6c,0x2f,2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,
+0x61,0x74,0x25,0x10,0x6e,0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,
+0x63,0x6c,0x65,0x27,0x11,0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,
+0x2c,0x14,0x63,0x74,0x69,0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,
+0x6e,0x74,0x2b,4,0x61,0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,
+0x64,0x65,0x2b,0x22,0x17,0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,
+0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,
+0x64,0x74,0x68,0x25,0x20,1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,
+0x28,0x13,0x72,0x72,0x6f,0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,
+0x98,0x75,0xa2,0x49,0x7a,2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,
+0x57,0x70,0x34,0x75,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,
+1,0x65,0x32,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,
+0x61,0x72,0x61,0x74,0x6f,0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,
+0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,
+0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,
+0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,
+8,0x66,0x14,0x66,0x5b,0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,
+0x61,0x74,0x65,0x75,0x73,0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,
+0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
+0x3d,2,0x64,0x33,0x6c,0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,
+0x67,0x6d,0x61,0x72,0x6b,0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,
+0x38,0x6e,0x42,0x70,0x4c,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,
+0x74,0x65,0x72,0x2b,0x14,0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,
+0x75,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,
+0x61,0x74,0x69,0x6f,0x6e,0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,
+0x6d,4,0x61,0x60,0x63,0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,
+0x65,0x72,1,0x6c,0x30,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,
+0x74,0x65,0x72,0x29,0x17,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,
+0x2e,0x6f,0x13,0x72,0x6d,0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,
+0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,
+0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,
+0x29,0x6f,0x28,0x74,0x27,0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,
+0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,
+0x65,0x72,0x6e,0x75,0x6d,0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,
+0x72,0x61,0x74,0x6f,0x72,0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,
+0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,
+0x4e,0x73,0x45,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,
+0x6c,0x53,0x20,0x12,0x74,0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,
+0x72,0x6f,0x6c,0x3f,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,
+0x61,0x74,0x69,0x6f,0x6e,0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,
+0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,
+0x69,0x12,0x67,0x69,0x74,0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,
+0x74,0x69,0x6f,0x6e,0x47,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,
+0x72,0x33,0,0x12,0x6d,0xc2,0x3f,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,
+0x72,0x79,0xa2,0x73,0x7a,1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,
+0x6e,0x85,5,0x74,0x22,0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,
+0x61,0x77,0x6f,0x18,0x72,0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,
+0x61,0x73,0x68,0x6b,0x61,0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,
+0x10,0x64,0x62,0x11,0x68,0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,
+0x69,0x10,0x6e,0x67,1,0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,
+0x6d,0x61,0x72,0x62,0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,
+0x71,0x77,0x73,0x11,0x61,0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,
+0x68,0x65,0x83,0x10,0x68,0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,
+0x69,0x6c,0x7f,0x14,0x61,0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x6b,0x70,
+0xa4,0x88,0x71,0xa4,0x88,0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,
+0x61,0x79,0x65,0x68,0x93,1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,
+0x65,0x61,2,0x61,0x2e,0x65,0xa4,0x3e,0x69,0x10,0x6d,0x53,1,0x6c,0xa2,0xe7,
+0x6e,0x16,0x69,0x63,0x68,0x61,0x65,0x61,0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,
+0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42,0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,
+0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,
+0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a,0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,
+0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,
+0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77,0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,
+0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a,0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,
+0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3,0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,
+0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,
+0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c,0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,
+0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68,0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,
+0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44,0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,
+0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79,0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,
+0x95,0x12,0x65,0x74,0x68,0x99,1,0x61,0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,
+0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,6,0x6e,
+0x2c,0x6e,0x34,0x72,0x5e,0x73,0x62,0x74,0x11,0x74,0x61,0xa3,0x63,2,0x67,0x2e,
+0x6e,0x32,0x79,0x10,0x61,0xa3,0x60,0x10,0x61,0xa3,0x5d,1,0x61,0xa3,0x5e,0x6e,
+0x10,0x61,0xa3,0x5f,0x10,0x61,0xa3,0x61,0x11,0x73,0x61,0xa3,0x62,0x62,0x3c,0x6a,
+0x42,0x6c,0x10,0x6c,1,0x61,0xa3,0x5b,0x6c,0x10,0x61,0xa3,0x5c,0x11,0x68,0x61,
+0xa3,0x59,0x10,0x61,0xa3,0x5a,0x11,0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,
+0x10,0x61,0x91,1,0x6a,0x28,0x6f,0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,
+0x67,0x67,0x72,0x6f,0x75,0x70,0x21,0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,
+0x66,0x5b,0x70,0x10,0x68,0x5d,0x66,0x9a,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,
+0x75,0x6c,0x11,0x61,0x6d,0x4c,0x12,0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,
+0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,
+0x69,0x79,0x65,0x68,0x8f,0x86,0x10,0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,
+0x61,0x6c,0x39,1,0x61,0x40,0x65,0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,
+0x13,0x67,0x6f,0x61,0x6c,0x43,2,0x68,0x3b,0x6d,0x5c,0x6e,0x1a,0x69,0x66,0x69,
+0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,1,0x6b,0x2a,0x70,0x10,0x61,0xa3,0x65,
+0x15,0x69,0x6e,0x6e,0x61,0x79,0x61,0xa3,0x64,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,
+0x68,0x67,0x6f,0x61,0x6c,0x3d,2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,
+0x65,0x64,0x68,0x65,0x68,0x4b,1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,
+0x68,0x89,0x61,0x2e,0x62,0x8a,0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,
+0x6c,1,0x61,0x28,0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,
+0x61,0x6e,2,0x66,0x30,0x6e,0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,
+0xa3,0x56,0x12,0x6f,0x6f,0x6e,0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,
+0x72,0x1f,0x75,0x73,0x68,0x61,0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,
+0x65,0x65,0x8d,1,0x68,0x29,0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,
+0x74,0x68,0x72,0x69,0x73,0x68,0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,
+0x75,0x21,0x18,0x6f,0x6e,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,
+0x67,0x68,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,
+0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,
+0x19,0x65,0x66,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,
+0x6c,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,
+0x73,0x69,0x6e,0x67,0x23,0,0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,
+0x77,0x84,0x78,0x9c,0x7a,0x10,0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,
+0x65,0x59,4,0x61,0x51,0x67,0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,
+0x63,0x65,0x55,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,
+0x6f,0x77,0x6e,0x21,1,0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,
+0x72,0x5d,0x10,0x78,0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,
+0x72,1,0x65,0x24,0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,
+0x69,0x63,0x61,0x74,0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,
+0x75,0x46,0x14,0x6d,0x65,0x72,0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,
+0x5b,0x17,0x6e,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,
+0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,
+0x72,0x4c,0x1a,0x65,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,
+0x1b,0x73,0x74,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,
+0x4e,0x16,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,
+0x6a,0xa2,0x61,0x6c,0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,
+0x62,0x72,0x65,0x61,0x6b,0x2d,4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,
+0x3a,0x13,0x70,0x68,0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,
+0x65,0x72,0x6d,2,0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,
+0x61,0x70,0x68,0x69,0x63,0x3d,0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,
+0x22,0x65,0x14,0x72,0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,
+0x72,0x69,0x63,0x41,2,0x6c,0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,
+0x6e,0x65,0x66,0x65,0x65,0x64,0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,
+0xdb,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,
+0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,
+0x69,0x63,0x25,4,0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,
+0x6b,2,0x61,0x36,0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,
+0x66,0x74,0x65,0x72,0x29,1,0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,
+0x72,0x65,0x2b,7,0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,
+0x76,0x6e,1,0x64,0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,
+0x61,0x6b,0x2f,0x15,0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,
+0x6e,0x65,0x73,0x65,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,
+0x19,0x6c,0x65,0x78,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,
+0x6e,0x67,0x6d,0x61,0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,
+0x6f,0x73,0x65,0x70,1,0x61,0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
+0x6f,0x6e,0x31,0x18,0x72,0x65,0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,
+0x72,0x69,0x61,0x67,0x65,0x72,0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,
+0x46,0x78,0x36,0x18,0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,
+0x61,0x73,0x65,0x71,0x72,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,
+0x42,0x6e,1,0x6f,0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,
+0x65,0x21,1,0x65,0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,
+0x6d,0x61,0x6c,0x23,0,0x18,0x6e,0xc4,0x2a,0x74,0xc1,0x6d,0x77,0x96,0x77,0xa2,
+0x4c,0x78,0xa2,0x70,0x79,0xa2,0x7a,0x7a,6,0x73,0x1e,0x73,0x34,0x78,0x42,0x79,
+0x48,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x10,0x79,1,0x65,0xa3,0xae,0x6d,0xa3,0x81,
+0x11,0x78,0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x61,0x30,0x69,0x58,0x6d,0x11,0x74,
+0x68,0xa3,0x80,0x10,0x6e,1,0x61,0x26,0x62,0xa3,0xb1,0x1a,0x62,0x61,0x7a,0x61,
+0x72,0x73,0x71,0x75,0x61,0x72,0x65,0xa3,0xb1,0x11,0x6e,0x68,0x23,2,0x61,0x30,
+0x63,0x5a,0x6f,0x11,0x6c,0x65,0xa3,0x9b,1,0x6e,0x3c,0x72,0x10,0x61,0xa2,0x92,
+0x15,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0x92,0x12,0x63,0x68,0x6f,0xa3,0xbc,0x11,
+0x68,0x6f,0xa3,0xbc,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65,0x6f,
+0x9b,1,0x65,0x2c,0x69,0x72,0x11,0x69,0x69,0x73,0x11,0x7a,0x69,0xa2,0xc0,0x11,
+0x64,0x69,0xa3,0xc0,0x74,0x4a,0x75,0xa2,0xba,0x76,1,0x61,0x2c,0x69,0x11,0x73,
+0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,5,0x67,0x36,0x67,0x68,
+0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68,0xa2,0x9e,0x12,0x75,0x74,
+0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61,0x6e,0x6f,0x14,0x69,0x6e,
+0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1,0x61,0x24,0x69,0x6d,0x6a,
+0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11,0x6e,0x67,0x99,6,0x6c,
+0x21,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3,0x7f,1,0x65,0x89,0x75,
+0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67,0xa2,0x9a,0x11,0x75,0x74,
+0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,0xa3,0x99,1,
+0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,0x67,0x75,2,
+0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,0x89,0x12,0x68,
+0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,0x75,0x68,0x11,
+0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67,0x11,
+0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc1,0x13,0x71,0xa2,0xde,0x72,
+0xa2,0xe3,0x73,6,0x69,0x8a,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x75,0x79,1,
+0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e,0xa3,
+0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,
+0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61,0x6c,
+0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77,0x72,
+0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,2,0x67,0x3a,0x72,0x52,0x79,0x10,0x6f,0xa2,
+0xb0,0x12,0x6d,0x62,0x6f,0xa3,0xb0,1,0x64,0x26,0x6f,0xa3,0xb8,0xa2,0xb7,0x12,
+0x69,0x61,0x6e,0xa3,0xb7,0x10,0x61,0xa2,0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,
+0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,
+0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,
+0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,
+2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,
+0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,
+0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,
+1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,
+0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,
+0x67,0xa3,0x6e,1,0x68,0x2a,0x72,0x10,0x6f,0xa3,0x5d,0x10,0x67,0xa3,0xb6,0x6e,
+0xa2,0x83,0x6f,0xa2,0xf2,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,
+0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,
+0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,
+0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,
+0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,
+0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,
+0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,
+0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,
+0x11,0x72,0x6d,0xa3,0x59,6,0x6b,0x36,0x6b,0x56,0x73,0x6e,0x75,0x74,0x79,0x11,
+0x69,0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,0x68,0x75,0x65,0x68,0x6d,
+0x6f,0x6e,0x67,0xa3,0xba,1,0x67,0x2e,0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,
+0x62,0xa3,0x84,0x11,0x68,0x75,0xa3,0x96,0x12,0x73,0x68,0x75,0xa3,0x96,0x61,0x42,
+0x62,0x80,0x65,0x10,0x77,1,0x61,0xa3,0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,
+0x97,2,0x62,0x2e,0x6e,0x3c,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,
+0x61,0x6e,0xa3,0x8f,0x10,0x64,0xa2,0xbb,0x16,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,
+0xa3,0xbb,0x11,0x61,0x74,0xa3,0x8f,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x93,0x73,
+2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,0x67,
+0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,
+0x6d,0x5b,1,0x63,0xa2,0x60,0x64,5,0x70,0x37,0x70,0x36,0x73,0x54,0x74,0x14,
+0x75,0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,
+0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,
+0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,0x13,0x64,0x69,0x61,0x6e,0xa3,
+0xb8,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,
+0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa3,0x4c,0x14,
+0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,0x6d,0x12,0x69,0x6b,0x69,
+0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,0x11,0x79,0x61,0x5f,0x10,
+0x68,0xa3,0x58,0x68,0xc3,0xd,0x6b,0xc2,0x24,0x6b,0xa4,0x17,0x6c,0xa4,0xb2,0x6d,
+8,0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86,0x79,1,0x61,0x28,0x6d,
+0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64,0x2e,0x6e,0x32,0x6f,0x10,
+0x6e,0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,0x61,0x6e,
+0x57,0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x11,0x6c,
+0x74,0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x36,0x65,0xa2,0x67,0x69,0xa2,
+0xbd,0x6c,0x11,0x79,0x6d,0x55,6,0x6e,0x38,0x6e,0x32,0x72,0x5c,0x73,0x6c,0x79,
+0x10,0x61,0xa3,0x55,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,
+0x6e,0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,
+0x68,0x65,0x6e,0xa3,0xa9,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa3,
+0xaf,0x68,0x36,0x6b,0x4c,0x6c,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x61,
+0x26,0x6a,0xa3,0xa0,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x10,0x61,0xa2,0xb4,0x12,
+0x73,0x61,0x72,0xa3,0xb4,3,0x64,0x78,0x65,0x94,0x6e,0xa2,0x42,0x72,1,0x63,
+0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,
+0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x56,0x15,0x75,0x72,0x73,0x69,
+0x76,0x65,0xa3,0x8d,1,0x65,0x26,0x66,0xa3,0xb5,0x16,0x66,0x61,0x69,0x64,0x72,
+0x69,0x6e,0xa3,0xb5,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa3,0x73,0x10,
+0x64,0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0x8c,0x11,0x61,
+0x6f,0xa3,0x5c,6,0x6e,0x1a,0x6e,0x34,0x6f,0x38,0x70,0x3e,0x74,0x11,0x68,0x69,
+0xa3,0x78,0x11,0x64,0x61,0x4b,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,
+0x61,0x30,0x68,0x9a,0x69,0x11,0x74,0x73,0xa3,0xbf,4,0x69,0x3c,0x6c,0x44,0x6e,
+0x48,0x74,0x56,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,
+0x78,0x10,0x69,0xa3,0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,
+0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,
+0x8d,4,0x61,0x40,0x69,0x52,0x6d,0x70,0x6f,0x7c,0x75,0x15,0x64,0x61,0x77,0x61,
+0x64,0x69,0xa3,0x91,0x10,0x72,0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,0x1d,
+0x74,0x61,0x6e,0x73,0x6d,0x61,0x6c,0x6c,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xbf,
+1,0x65,0x24,0x72,0x4f,0x10,0x72,0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,
+0x9d,4,0x61,0x5c,0x65,0x90,0x69,0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,
+0x10,0x69,0xa2,0x6c,0x11,0x61,0x6e,0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,
+0xa3,0x6b,2,0x6e,0x42,0x6f,0x46,0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,
+0x24,0x6e,0x53,0x10,0x6e,0x53,0x10,0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,
+0x63,0xa2,0x52,0x11,0x68,0x61,0xa3,0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,
+0xa3,0x83,0x10,0x62,0x80,0x10,0x75,0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,
+0x61,0x72,1,0x61,0xa3,0x53,0x62,0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x6e,0x69,
+0xa2,0x95,0x6a,2,0x61,0x30,0x70,0x52,0x75,0x11,0x72,0x63,0xa3,0x94,1,0x6d,
+0x38,0x76,0x10,0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73,0x65,0xa3,0x4e,0x10,0x6f,0xa3,
+0xad,0x11,0x61,0x6e,0xa3,0x69,6,0x6c,0x1e,0x6c,0x34,0x6d,0x3a,0x72,0x48,0x75,
+0x11,0x6e,0x67,0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x10,0x6e,1,0x67,0xa3,0x4b,
+0x70,0xa3,0xba,0x11,0x6b,0x74,0x8d,0x61,0x3c,0x65,0xa2,0x43,0x69,0x11,0x72,0x61,
+0x48,0x13,0x67,0x61,0x6e,0x61,0x49,1,0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,
+0x61,0x6e,0xa3,0xa2,0x42,6,0x6f,0xe,0x6f,0x77,0x73,0xa3,0x49,0x74,0xa3,0x4a,
+0x75,0x12,0x6e,0x6f,0x6f,0x77,0x62,0xa3,0xac,0x67,0x3e,0x69,0x42,0x19,0x66,0x69,
+0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,0xa3,0xb6,0x44,0x11,0x75,0x6c,0x45,0x11,
+0x62,0x72,0x46,0x11,0x65,0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,
+0x5d,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,
+0x74,2,0x64,0x66,0x68,0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,
+0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,
+0x13,0x6c,0x61,0x76,0x69,0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,
+0x65,0x64,0x23,0x64,0xc1,0xd,0x64,0xa2,0x7a,0x65,0xa2,0xc1,0x67,4,0x65,0x82,
+0x6c,0x9a,0x6f,0xa2,0x46,0x72,0xa2,0x55,0x75,2,0x6a,0x3c,0x6e,0x4e,0x72,1,
+0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,
+0x72,0x61,0x74,0x69,0x3f,0x18,0x6a,0x61,0x6c,0x61,0x67,0x6f,0x6e,0x64,0x69,0xa3,
+0xb3,0x10,0x6f,1,0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,
+0x61,0x67,0x90,0x15,0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,1,0x6e,0x30,0x74,0x10,
+0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x67,0xa3,0xb3,0x6d,0xa3,0xaf,1,0x61,0x32,
+0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74,0x68,
+0x61,0xa3,0x89,4,0x65,0x46,0x69,0x6c,0x6f,0x8c,0x73,0x9a,0x75,0x11,0x70,0x6c,
+0xa2,0x87,0x13,0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,
+0x15,0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,1,0x61,
+0x36,0x76,0x16,0x65,0x73,0x61,0x6b,0x75,0x72,0x75,0xa3,0xbe,0x10,0x6b,0xa3,0xbe,
+0x11,0x67,0x72,0xa2,0xb2,0x10,0x61,0xa3,0xb2,0x11,0x72,0x74,0x33,2,0x67,0x3a,
+0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,0x79,2,
+0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,0x68,0x69,
+0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,1,0x62,0x36,0x79,0x10,
+0x6d,0xa2,0xb9,0x12,0x61,0x69,0x63,0xa3,0xb9,0x10,0x61,0xa2,0x88,0x12,0x73,0x61,
+0x6e,0xa3,0x88,0x61,0xa2,0xb4,0x62,0xa4,0x19,0x63,6,0x6f,0x3d,0x6f,0x5a,0x70,
+0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,
+0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74,0x7f,1,0x6d,0x30,0x70,
+0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e,0x21,0x11,0x72,0x74,0x7f,
+0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61,0x32,0x68,0xa2,0x41,0x69,
+0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72,0x76,0x75,0x1d,0x63,0x61,
+0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0x9f,0x10,0x6d,
+0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,
+0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,
+3,0x61,0x32,0x65,0x44,0x6f,0x52,0x72,0x10,0x73,0xa3,0xbd,1,0x6b,0x26,0x6d,
+0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,0x65,0x2d,
+0x16,0x72,0x61,0x73,0x6d,0x69,0x61,0x6e,0xa3,0xbd,6,0x68,0x4a,0x68,0x48,0x6e,
+0x4e,0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,0x73,0x74,0x61,
+0x6e,0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,
+0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,
+0x3e,0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,
+0x10,0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11,0x68,0x62,0xa3,
+0x9f,0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7,0x11,0x61,0x6b,
+0xa3,0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1,0x67,0x30,0x68,
+1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,0x73,0x65,0x8f,
+0x11,0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10,0x61,
+1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69,0xa3,
+0x41,0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3,0xa8,0x15,0x69,
+0x6b,0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73,0x54,0x74,1,
+0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65,0x73,0x65,0x9d,
+0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13,0x61,0x76,0x61,
+0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,0x6c,0x42,0x6e,
+0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,0x6d,0x6f,0x25,
+0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,0x79,0x6c,0x6c,
+0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x29,0x18,0x61,
+0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,0x1a,0x74,0x61,
+0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,0x61,0x69,0x6c,
+0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,
+0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,0x20,0x10,
+0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,
+0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,
+0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,0xb,0x72,
+0x39,0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10,0x78,0x21,0x72,
+0x28,0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,
+0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,
+0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c,0x3c,0x6f,0x4a,
+0x70,1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28,1,0x66,0x2b,
+0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c,0x65,0x64,0x67,
+1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x41,
+0x10,0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,
+0x23,2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,0x27,0x3a,1,
+0x61,0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d,0x3e,0x16,0x6f,
+0x64,0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,
+0x75,0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,
+1,0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,
+3,0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,
+0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,
+0x70,0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,
+0x66,0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,
+0x23,1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,
+0x74,0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0,0x10,
+0x6c,0x88,0x72,0x40,0x72,0x36,0x73,0x5e,0x77,0x7a,0x78,0x8a,0x7a,0x11,0x77,0x6a,
+0x4b,1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,
+0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,
+0x65,0x71,0x75,0x6f,0x74,0x65,0x3f,0x17,0x73,0x65,0x67,0x73,0x70,0x61,0x63,0x65,
+0x4d,0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76,0x6f,0x13,0x74,0x68,0x65,0x72,
+0x21,1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,
+0x64,1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,
+0x74,0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d,0x65,0x72,
+0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,0x66,0x3f,0x66,0x40,0x67,0x4e,
+0x68,0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,0x61,0x6e,0x61,0x27,0x10,0x6f,
+0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,
+0x74,0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49,1,0x65,0x24,0x6c,0x3d,0x19,
+0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61,0x86,0x63,0x92,0x64,
+0x94,0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,
+0x6e,0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61,0x24,0x67,0x45,0x11,0x73,0x65,
+0x42,0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x47,
+0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,1,0x6f,0x24,0x71,0x41,
+0x18,0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,0x41,2,0x63,0x32,0x6e,0x3c,
+0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73,0x65,0x25,0x20,0x12,
+0x6f,0x6e,0x65,0x21,6,0x6f,0x65,0x6f,0x4a,0x72,0x5c,0x74,0x64,0x76,0x1d,0x69,
+0x73,0x75,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x6c,0x65,0x66,0x74,0x3d,0x18,0x76,
+0x65,0x72,0x73,0x74,0x72,0x75,0x63,0x6b,0x2d,0x13,0x69,0x67,0x68,0x74,0x2f,0x11,
+0x6f,0x70,0x30,0x12,0x61,0x6e,0x64,2,0x62,0x32,0x6c,0x62,0x72,0x13,0x69,0x67,
+0x68,0x74,0x3b,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x32,0x12,0x61,0x6e,0x64,1,0x6c,
+0x2e,0x72,0x13,0x69,0x67,0x68,0x74,0x35,0x12,0x65,0x66,0x74,0x3f,0x12,0x65,0x66,
+0x74,0x36,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,0x74,0x39,0x62,0x2c,0x6c,0x5c,
+0x6e,0x10,0x61,0x21,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x22,0x12,0x61,0x6e,0x64,1,
+0x6c,0x2e,0x72,0x13,0x69,0x67,0x68,0x74,0x27,0x12,0x65,0x66,0x74,0x25,0x12,0x65,
+0x66,0x74,0x28,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,0x74,0x2b,0xd,0x6e,0xaa,
+0x72,0x70,0x72,0x92,0x73,0xa2,0x46,0x74,0xa2,0x54,0x76,1,0x69,0x60,0x6f,0x12,
+0x77,0x65,0x6c,0x62,1,0x64,0x3a,0x69,0x19,0x6e,0x64,0x65,0x70,0x65,0x6e,0x64,
+0x65,0x6e,0x74,0x67,0x17,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,0x65,1,0x72,
+0x2e,0x73,0x13,0x61,0x72,0x67,0x61,0x61,0x12,0x61,0x6d,0x61,0x5f,0x1d,0x65,0x67,
+0x69,0x73,0x74,0x65,0x72,0x73,0x68,0x69,0x66,0x74,0x65,0x72,0x57,0x1e,0x79,0x6c,
+0x6c,0x61,0x62,0x6c,0x65,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x59,0x12,0x6f,
+0x6e,0x65,1,0x6c,0x2c,0x6d,0x12,0x61,0x72,0x6b,0x5d,0x14,0x65,0x74,0x74,0x65,
+0x72,0x5b,0x6e,0x3c,0x6f,0x7c,0x70,0x18,0x75,0x72,0x65,0x6b,0x69,0x6c,0x6c,0x65,
+0x72,0x55,1,0x6f,0x4c,0x75,1,0x6b,0x3c,0x6d,0x12,0x62,0x65,0x72,0x50,0x15,
+0x6a,0x6f,0x69,0x6e,0x65,0x72,0x53,0x11,0x74,0x61,0x4f,0x16,0x6e,0x6a,0x6f,0x69,
+0x6e,0x65,0x72,0x4d,0x13,0x74,0x68,0x65,0x72,0x21,0x67,0x3e,0x67,0x4a,0x69,0x64,
+0x6a,0x82,0x6d,0x1d,0x6f,0x64,0x69,0x66,0x79,0x69,0x6e,0x67,0x6c,0x65,0x74,0x74,
+0x65,0x72,0x4b,0x1c,0x65,0x6d,0x69,0x6e,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,
+0x6b,0x45,0x1e,0x6e,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x73,0x74,0x61,0x63,0x6b,
+0x65,0x72,0x47,0x14,0x6f,0x69,0x6e,0x65,0x72,0x49,0x61,0xa2,0xba,0x62,0xa2,0xc0,
+0x63,1,0x61,0xa2,0xa2,0x6f,0x16,0x6e,0x73,0x6f,0x6e,0x61,0x6e,0x74,0x2a,8,
+0x6b,0x67,0x6b,0x48,0x6d,0x52,0x70,0x5c,0x73,0xa2,0x42,0x77,0x19,0x69,0x74,0x68,
+0x73,0x74,0x61,0x63,0x6b,0x65,0x72,0x43,0x14,0x69,0x6c,0x6c,0x65,0x72,0x35,0x14,
+0x65,0x64,0x69,0x61,0x6c,0x37,1,0x6c,0x52,0x72,0x10,0x65,1,0x63,0x2e,0x66,
+0x13,0x69,0x78,0x65,0x64,0x3d,0x19,0x65,0x64,0x69,0x6e,0x67,0x72,0x65,0x70,0x68,
+0x61,0x3b,0x18,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x39,0x10,0x75,1,
+0x62,0x3e,0x63,0x1b,0x63,0x65,0x65,0x64,0x69,0x6e,0x67,0x72,0x65,0x70,0x68,0x61,
+0x41,0x15,0x6a,0x6f,0x69,0x6e,0x65,0x64,0x3f,0x64,0x4c,0x66,0x52,0x68,0x5a,0x69,
+0x1e,0x6e,0x69,0x74,0x69,0x61,0x6c,0x70,0x6f,0x73,0x74,0x66,0x69,0x78,0x65,0x64,
+0x33,0x12,0x65,0x61,0x64,0x2d,0x13,0x69,0x6e,0x61,0x6c,0x2f,0x18,0x65,0x61,0x64,
+0x6c,0x65,0x74,0x74,0x65,0x72,0x31,0x1d,0x6e,0x74,0x69,0x6c,0x6c,0x61,0x74,0x69,
+0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x29,0x16,0x76,0x61,0x67,0x72,0x61,0x68,0x61,0x23,
+1,0x69,0x4a,0x72,0x10,0x61,0x1f,0x68,0x6d,0x69,0x6a,0x6f,0x69,0x6e,0x69,0x6e,
+0x67,0x6e,0x75,0x6d,0x62,0x65,0x72,0x27,0x12,0x6e,0x64,0x75,0x25,2,0x72,0x38,
+0x74,0x46,0x75,0x26,0x15,0x70,0x72,0x69,0x67,0x68,0x74,0x27,0x20,0x15,0x6f,0x74,
+0x61,0x74,0x65,0x64,0x21,1,0x72,0x24,0x75,0x25,0x22,0x18,0x61,0x6e,0x73,0x66,
+0x6f,0x72,0x6d,0x65,0x64,1,0x72,0x32,0x75,0x15,0x70,0x72,0x69,0x67,0x68,0x74,
+0x25,0x15,0x6f,0x74,0x61,0x74,0x65,0x64,0x23,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,
+0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,
+0x70,0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,
+0xff,8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,
+0xf,0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,
+0x72,0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,
+0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,0,
+0,0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0,0x16,
+0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,
+0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,
+0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,
+0x73,0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,
+0xf8,0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,
+0,0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,
+0,0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,
+0x61,0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,0,
+0x64,0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,0x1f,
+0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
+0xd9,0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,
+0x6d,0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,
+0x67,0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,
+1,3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,
+8,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,
+0x72,0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,
+0,0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0xf9,0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,
+0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,
+0x69,0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,
+4,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,
+0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,
+1,0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,
+0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,
+0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,
+0x69,0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,
+0x74,0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,
+0x74,0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,
+0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,
+0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,
+0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,
+0x80,1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,
+0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,
+0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,1,
+0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,
+0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,
+0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,
+0x80,0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,
+0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,
+0x74,0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,
+0,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,
+0,0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0
};
-const char PropNameData::nameGroups[21692]={
+const char PropNameData::nameGroups[22098]={
2,'A','l','p','h','a',0,'A','l','p','h','a','b','e','t','i','c',0,
4,'N',0,'N','o',0,'F',0,'F','a','l','s','e',0,4,'Y',0,'Y','e','s',0,'T',0,'T','r','u','e',0,
2,'N','R',0,'N','o','t','_','R','e','o','r','d','e','r','e','d',0,
-2,'O','V',0,'O','v','e','r','l','a','y',0,2,'N','K',0,'N','u','k','t','a',0,
-2,'K','V',0,'K','a','n','a','_','V','o','i','c','i','n','g',0,
+2,'O','V',0,'O','v','e','r','l','a','y',0,2,'H','A','N','R',0,'H','a','n','_','R','e','a','d','i','n','g',0,
+2,'N','K',0,'N','u','k','t','a',0,2,'K','V',0,'K','a','n','a','_','V','o','i','c','i','n','g',0,
2,'V','R',0,'V','i','r','a','m','a',0,2,'C','C','C','1','0',0,'C','C','C','1','0',0,
2,'C','C','C','1','1',0,'C','C','C','1','1',0,2,'C','C','C','1','2',0,'C','C','C','1','2',0,
2,'C','C','C','1','3',0,'C','C','C','1','3',0,2,'C','C','C','1','4',0,'C','C','C','1','4',0,
@@ -1486,7 +1500,16 @@ const char PropNameData::nameGroups[21692]={
2,'S','y','m','b','o','l','s','_','A','n','d','_','P','i','c','t','o','g','r','a','p','h','s','_','E','x','t','_','A',0,
'S','y','m','b','o','l','s','_','A','n','d','_','P','i','c','t','o','g','r','a','p','h','s','_','E','x','t','e','n','d','e','d',
'_','A',0,2,'T','a','m','i','l','_','S','u','p',0,'T','a','m','i','l','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'W','a','n','c','h','o',0,'W','a','n','c','h','o',0,2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o',
+2,'W','a','n','c','h','o',0,'W','a','n','c','h','o',0,2,'C','h','o','r','a','s','m','i','a','n',0,
+'C','h','o','r','a','s','m','i','a','n',0,2,'C','J','K','_','E','x','t','_','G',0,'C','J','K','_','U','n','i','f','i','e',
+'d','_','I','d','e','o','g','r','a','p','h','s','_','E','x','t','e','n','s','i','o','n','_','G',0,
+2,'D','i','v','e','s','_','A','k','u','r','u',0,'D','i','v','e','s','_','A','k','u','r','u',0,
+2,'K','h','i','t','a','n','_','S','m','a','l','l','_','S','c','r','i','p','t',0,'K','h','i','t','a','n','_','S','m','a','l',
+'l','_','S','c','r','i','p','t',0,2,'L','i','s','u','_','S','u','p',0,'L','i','s','u','_','S','u','p','p','l','e','m','e',
+'n','t',0,2,'S','y','m','b','o','l','s','_','F','o','r','_','L','e','g','a','c','y','_','C','o','m','p','u','t','i','n','g',
+0,'S','y','m','b','o','l','s','_','F','o','r','_','L','e','g','a','c','y','_','C','o','m','p','u','t','i','n','g',0,
+2,'T','a','n','g','u','t','_','S','u','p',0,'T','a','n','g','u','t','_','S','u','p','p','l','e','m','e','n','t',0,
+2,'Y','e','z','i','d','i',0,'Y','e','z','i','d','i',0,2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o',
'm','b','i','n','i','n','g','_','C','l','a','s','s',0,2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_',
'T','y','p','e',0,3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0,
3,'C','a','n',0,'C','a','n','o','n','i','c','a','l',0,'c','a','n',0,
@@ -1769,7 +1792,10 @@ const char PropNameData::nameGroups[21692]={
2,'S','o','g','d',0,'S','o','g','d','i','a','n',0,2,'S','o','g','o',0,'O','l','d','_','S','o','g','d','i','a','n',0,
2,'E','l','y','m',0,'E','l','y','m','a','i','c',0,2,'H','m','n','p',0,'N','y','i','a','k','e','n','g','_','P','u','a',
'c','h','u','e','_','H','m','o','n','g',0,2,'N','a','n','d',0,'N','a','n','d','i','n','a','g','a','r','i',0,
-2,'W','c','h','o',0,'W','a','n','c','h','o',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l',
+2,'W','c','h','o',0,'W','a','n','c','h','o',0,2,'C','h','r','s',0,'C','h','o','r','a','s','m','i','a','n',0,
+2,'D','i','a','k',0,'D','i','v','e','s','_','A','k','u','r','u',0,
+2,'K','i','t','s',0,'K','h','i','t','a','n','_','S','m','a','l','l','_','S','c','r','i','p','t',0,
+2,'Y','e','z','i',0,'Y','e','z','i','d','i',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l',
'e','_','T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0,
2,'L',0,'L','e','a','d','i','n','g','_','J','a','m','o',0,
2,'V',0,'V','o','w','e','l','_','J','a','m','o',0,2,'T',0,'T','r','a','i','l','i','n','g','_','J','a','m','o',0,
@@ -1820,9 +1846,10 @@ const char PropNameData::nameGroups[21692]={
'T','o','p','_','A','n','d','_','L','e','f','t','_','A','n','d','_','R','i','g','h','t',0,
2,'T','o','p','_','A','n','d','_','R','i','g','h','t',0,'T','o','p','_','A','n','d','_','R','i','g','h','t',0,
2,'V','i','s','u','a','l','_','O','r','d','e','r','_','L','e','f','t',0,'V','i','s','u','a','l','_','O','r','d','e','r','_',
-'L','e','f','t',0,2,'I','n','S','C',0,'I','n','d','i','c','_','S','y','l','l','a','b','i','c','_','C','a','t','e','g','o',
-'r','y',0,2,'O','t','h','e','r',0,'O','t','h','e','r',0,
-2,'A','v','a','g','r','a','h','a',0,'A','v','a','g','r','a','h','a',0,
+'L','e','f','t',0,2,'T','o','p','_','A','n','d','_','B','o','t','t','o','m','_','A','n','d','_','L','e','f','t',0,
+'T','o','p','_','A','n','d','_','B','o','t','t','o','m','_','A','n','d','_','L','e','f','t',0,
+2,'I','n','S','C',0,'I','n','d','i','c','_','S','y','l','l','a','b','i','c','_','C','a','t','e','g','o','r','y',0,
+2,'O','t','h','e','r',0,'O','t','h','e','r',0,2,'A','v','a','g','r','a','h','a',0,'A','v','a','g','r','a','h','a',0,
2,'B','i','n','d','u',0,'B','i','n','d','u',0,2,'B','r','a','h','m','i','_','J','o','i','n','i','n','g','_','N','u','m',
'b','e','r',0,'B','r','a','h','m','i','_','J','o','i','n','i','n','g','_','N','u','m','b','e','r',0,
2,'C','a','n','t','i','l','l','a','t','i','o','n','_','M','a','r','k',0,'C','a','n','t','i','l','l','a','t','i','o','n','_',
diff --git a/Build/source/libs/icu/icu-src/source/common/punycode.cpp b/Build/source/libs/icu/icu-src/source/common/punycode.cpp
index 90fe1ec3c80..4832938ff7e 100644
--- a/Build/source/libs/icu/icu-src/source/common/punycode.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/punycode.cpp
@@ -107,36 +107,26 @@ digitToBasic(int32_t digit, UBool uppercase) {
}
/**
- * basicToDigit[] contains the numeric value of a basic code
- * point (for use in representing integers) in the range 0 to
- * BASE-1, or -1 if b is does not represent a value.
+ * @return the numeric value of a basic code point (for use in representing integers)
+ * in the range 0 to BASE-1, or a negative value if cp is invalid.
*/
-static const int8_t
-basicToDigit[256]={
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-};
+static int32_t decodeDigit(int32_t cp) {
+ if(cp<=u'Z') {
+ if(cp<=u'9') {
+ if(cp<u'0') {
+ return -1;
+ } else {
+ return cp-u'0'+26; // 0..9 -> 26..35
+ }
+ } else {
+ return cp-u'A'; // A-Z -> 0..25
+ }
+ } else if(cp<=u'z') {
+ return cp-'a'; // a..z -> 0..25
+ } else {
+ return -1;
+ }
+}
static inline char
asciiCaseMap(char b, UBool uppercase) {
@@ -178,15 +168,23 @@ adaptBias(int32_t delta, int32_t length, UBool firstTime) {
return count+(((BASE-TMIN+1)*delta)/(delta+SKEW));
}
-#define MAX_CP_COUNT 200
+namespace {
-U_CFUNC int32_t
+// ICU-13727: Limit input length for n^2 algorithm
+// where well-formed strings are at most 59 characters long.
+constexpr int32_t ENCODE_MAX_CODE_UNITS=1000;
+constexpr int32_t DECODE_MAX_CHARS=2000;
+
+} // namespace
+
+// encode
+U_CAPI int32_t
u_strToPunycode(const UChar *src, int32_t srcLength,
UChar *dest, int32_t destCapacity,
const UBool *caseFlags,
UErrorCode *pErrorCode) {
- int32_t cpBuffer[MAX_CP_COUNT];
+ int32_t cpBuffer[ENCODE_MAX_CODE_UNITS];
int32_t n, delta, handledCPCount, basicLength, destLength, bias, j, m, q, k, t, srcCPCount;
UChar c, c2;
@@ -199,6 +197,10 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
+ if (srcLength>ENCODE_MAX_CODE_UNITS) {
+ *pErrorCode=U_INPUT_TOO_LONG_ERROR;
+ return 0;
+ }
/*
* Handle the basic code points and
@@ -211,9 +213,8 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
if((c=src[j])==0) {
break;
}
- if(srcCPCount==MAX_CP_COUNT) {
- /* too many input code points */
- *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
+ if(j>=ENCODE_MAX_CODE_UNITS) {
+ *pErrorCode=U_INPUT_TOO_LONG_ERROR;
return 0;
}
if(IS_BASIC(c)) {
@@ -243,11 +244,6 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
} else {
/* length-specified input */
for(j=0; j<srcLength; ++j) {
- if(srcCPCount==MAX_CP_COUNT) {
- /* too many input code points */
- *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
- return 0;
- }
c=src[j];
if(IS_BASIC(c)) {
cpBuffer[srcCPCount++]=0;
@@ -312,7 +308,7 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
* Increase delta enough to advance the decoder's
* <n,i> state to <m,0>, but guard against overflow:
*/
- if(m-n>(0x7fffffff-MAX_CP_COUNT-delta)/(handledCPCount+1)) {
+ if(m-n>(0x7fffffff-handledCPCount-delta)/(handledCPCount+1)) {
*pErrorCode=U_INTERNAL_PROGRAM_ERROR;
return 0;
}
@@ -373,7 +369,8 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
return u_terminateUChars(dest, destCapacity, destLength, pErrorCode);
}
-U_CFUNC int32_t
+// decode
+U_CAPI int32_t
u_strFromPunycode(const UChar *src, int32_t srcLength,
UChar *dest, int32_t destCapacity,
UBool *caseFlags,
@@ -395,6 +392,10 @@ u_strFromPunycode(const UChar *src, int32_t srcLength,
if(srcLength==-1) {
srcLength=u_strlen(src);
}
+ if (srcLength>DECODE_MAX_CHARS) {
+ *pErrorCode=U_INPUT_TOO_LONG_ERROR;
+ return 0;
+ }
/*
* Handle the basic code points:
@@ -455,7 +456,7 @@ u_strFromPunycode(const UChar *src, int32_t srcLength,
return 0;
}
- digit=basicToDigit[(uint8_t)src[in++]];
+ digit=decodeDigit(src[in++]);
if(digit<0) {
*pErrorCode=U_INVALID_CHAR_FOUND;
return 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/punycode.h b/Build/source/libs/icu/icu-src/source/common/punycode.h
index 5d8a243175c..9e28f770c40 100644
--- a/Build/source/libs/icu/icu-src/source/common/punycode.h
+++ b/Build/source/libs/icu/icu-src/source/common/punycode.h
@@ -50,7 +50,7 @@ http://www.nicemice.net/amc/
* @param caseFlags Vector of boolean values, one per input UChar,
* indicating that the corresponding character is to be
* marked for the decoder optionally
- * uppercasing (TRUE) or lowercasing (FALSE)
+ * uppercasing (true) or lowercasing (false)
* the character.
* ASCII characters are output directly in the case as marked.
* Flags corresponding to trail surrogates are ignored.
@@ -65,7 +65,7 @@ http://www.nicemice.net/amc/
*
* @see u_strFromPunycode
*/
-U_CFUNC int32_t
+U_CAPI int32_t
u_strToPunycode(const UChar *src, int32_t srcLength,
UChar *dest, int32_t destCapacity,
const UBool *caseFlags,
@@ -83,10 +83,10 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
* and of caseFlags in numbers of UBools.
* @param caseFlags Output array for case flags as
* defined by the Punycode string.
- * The caller should uppercase (TRUE) or lowercase (FASLE)
+ * The caller should uppercase (true) or lowercase (FASLE)
* the corresponding character in dest.
* For supplementary characters, only the lead surrogate
- * is marked, and FALSE is stored for the trail surrogate.
+ * is marked, and false is stored for the trail surrogate.
* This is redundant and not necessary for ASCII characters
* because they are already in the case indicated.
* Can be NULL if the case flags are not needed.
@@ -100,7 +100,7 @@ u_strToPunycode(const UChar *src, int32_t srcLength,
*
* @see u_strToPunycode
*/
-U_CFUNC int32_t
+U_CAPI int32_t
u_strFromPunycode(const UChar *src, int32_t srcLength,
UChar *dest, int32_t destCapacity,
UBool *caseFlags,
diff --git a/Build/source/libs/icu/icu-src/source/common/putil.cpp b/Build/source/libs/icu/icu-src/source/common/putil.cpp
index acb902220b8..3ed6a05d22d 100644
--- a/Build/source/libs/icu/icu-src/source/common/putil.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/putil.cpp
@@ -81,7 +81,7 @@
#include <float.h>
#ifndef U_COMMON_IMPLEMENTATION
-#error U_COMMON_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see http://userguide.icu-project.org/howtouseicu
+#error U_COMMON_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see https://unicode-org.github.io/icu/userguide/howtouseicu
#endif
@@ -118,11 +118,15 @@
# ifndef _XPG4_2
# define _XPG4_2
# endif
+# elif U_PLATFORM == U_PF_ANDROID
+# include <sys/system_properties.h>
+# include <dlfcn.h>
# endif
#elif U_PLATFORM == U_PF_QNX
# include <sys/neutrino.h>
#endif
+
/*
* Only include langinfo.h if we have a way to get the codeset. If we later
* depend on more feature, we can test on U_HAVE_NL_LANGINFO.
@@ -886,7 +890,7 @@ typedef struct DefaultTZInfo {
* It is currently use to compare two TZ files.
*/
static UBool compareBinaryFiles(const char* defaultTZFileName, const char* TZFileName, DefaultTZInfo* tzInfo) {
- FILE* file;
+ FILE* file;
int64_t sizeFile;
int64_t sizeFileLeft;
int32_t sizeFileRead;
@@ -1043,9 +1047,53 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
}
#endif
+#if U_PLATFORM == U_PF_ANDROID
+typedef int(system_property_read_callback)(const prop_info* info,
+ void (*callback)(void* cookie,
+ const char* name,
+ const char* value,
+ uint32_t serial),
+ void* cookie);
+typedef int(system_property_get)(const char*, char*);
+
+static char gAndroidTimeZone[PROP_VALUE_MAX] = { '\0' };
+
+static void u_property_read(void* cookie, const char* name, const char* value,
+ uint32_t serial) {
+ uprv_strcpy((char* )cookie, value);
+}
+#endif
+
U_CAPI void U_EXPORT2
-uprv_tzname_clear_cache()
+uprv_tzname_clear_cache(void)
{
+#if U_PLATFORM == U_PF_ANDROID
+ /* Android's timezone is stored in system property. */
+ gAndroidTimeZone[0] = '\0';
+ void* libc = dlopen("libc.so", RTLD_NOLOAD);
+ if (libc) {
+ /* Android API 26+ has new API to get system property and old API
+ * (__system_property_get) is deprecated */
+ system_property_read_callback* property_read_callback =
+ (system_property_read_callback*)dlsym(
+ libc, "__system_property_read_callback");
+ if (property_read_callback) {
+ const prop_info* info =
+ __system_property_find("persist.sys.timezone");
+ if (info) {
+ property_read_callback(info, &u_property_read, gAndroidTimeZone);
+ }
+ } else {
+ system_property_get* property_get =
+ (system_property_get*)dlsym(libc, "__system_property_get");
+ if (property_get) {
+ property_get("persist.sys.timezone", gAndroidTimeZone);
+ }
+ }
+ dlclose(libc);
+ }
+#endif
+
#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK)
gTimeZoneBufferPtr = NULL;
#endif
@@ -1084,17 +1132,21 @@ uprv_tzname(int n)
/* This code can be temporarily disabled to test tzname resolution later on. */
#ifndef DEBUG_TZNAME
+#if U_PLATFORM == U_PF_ANDROID
+ tzid = gAndroidTimeZone;
+#else
tzid = getenv("TZ");
+#endif
if (tzid != NULL && isValidOlsonID(tzid)
#if U_PLATFORM == U_PF_SOLARIS
/* When TZ equals localtime on Solaris, check the /etc/localtime file. */
&& uprv_strcmp(tzid, TZ_ENV_CHECK) != 0
#endif
) {
- /* The colon forces tzset() to treat the remainder as zoneinfo path */
- if (tzid[0] == ':') {
- tzid++;
- }
+ /* The colon forces tzset() to treat the remainder as zoneinfo path */
+ if (tzid[0] == ':') {
+ tzid++;
+ }
/* This might be a good Olson ID. */
skipZoneIDPrefix(&tzid);
return tzid;
@@ -1115,7 +1167,7 @@ uprv_tzname(int n)
int32_t tzZoneInfoTailLen = uprv_strlen(TZZONEINFOTAIL);
gTimeZoneBuffer[ret] = 0;
char * tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
-
+
if (tzZoneInfoTailPtr != NULL
&& isValidOlsonID(tzZoneInfoTailPtr + tzZoneInfoTailLen))
{
@@ -1445,7 +1497,7 @@ static void setTimeZoneFilesDir(const char *path, UErrorCode &status) {
#endif
}
-#define TO_STRING(x) TO_STRING_2(x)
+#define TO_STRING(x) TO_STRING_2(x)
#define TO_STRING_2(x) #x
static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) {
@@ -1459,6 +1511,11 @@ static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) {
const char *dir = "";
+#if defined(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR)
+ char timezonefilesdir_path_buffer[PATH_MAX];
+ const char *prefix = getenv(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR);
+#endif
+
#if U_PLATFORM_HAS_WINUWP_API == 1
// The UWP version does not support the environment variable setting.
@@ -1485,6 +1542,13 @@ static void U_CALLCONV TimeZoneDataDirInitFn(UErrorCode &status) {
dir = "";
}
+#if defined(ICU_TIMEZONE_FILES_DIR_PREFIX_ENV_VAR)
+ if (prefix != NULL) {
+ snprintf(timezonefilesdir_path_buffer, PATH_MAX, "%s%s", prefix, dir);
+ dir = timezonefilesdir_path_buffer;
+ }
+#endif
+
setTimeZoneFilesDir(dir, status);
}
@@ -1540,7 +1604,7 @@ static const char *uprv_getPOSIXIDForCategory(int category)
{
/* Maybe we got some garbage. Try something more reasonable */
posixID = getenv("LC_ALL");
- /* Solaris speaks POSIX - See IEEE Std 1003.1-2008
+ /* Solaris speaks POSIX - See IEEE Std 1003.1-2008
* This is needed to properly handle empty env. variables
*/
#if U_PLATFORM == U_PF_SOLARIS
@@ -1551,7 +1615,7 @@ static const char *uprv_getPOSIXIDForCategory(int category)
if (posixID == 0) {
posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
if (posixID == 0) {
-#endif
+#endif
posixID = getenv("LANG");
}
}
@@ -1659,7 +1723,7 @@ The leftmost codepage (.xxx) wins.
// (The "C"/"POSIX" case is handled in uprv_getPOSIXIDForCategory())
uprv_strcpy(correctedPOSIXLocale, "en_US_POSIX");
}
-
+
/* Note that we scan the *uncorrected* ID. */
const char *p;
if ((p = uprv_strrchr(posixID, '@')) != nullptr) {
@@ -2080,7 +2144,7 @@ int_getDefaultCodepage()
#endif
// Special case for UTF-8
if (codepageNumber == 65001)
- {
+ {
return "UTF-8";
}
// Windows codepages can look like windows-1252, so format the found number
@@ -2273,7 +2337,7 @@ u_getVersion(UVersionInfo versionArray) {
}
/**
- * icucfg.h dependent code
+ * icucfg.h dependent code
*/
#if U_ENABLE_DYLOAD && HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API
@@ -2287,7 +2351,7 @@ u_getVersion(UVersionInfo versionArray) {
#include <dlfcn.h>
#endif /* HAVE_DLFCN_H */
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uprv_dl_open(const char *libName, UErrorCode *status) {
void *ret = NULL;
if(U_FAILURE(*status)) return ret;
@@ -2301,13 +2365,13 @@ uprv_dl_open(const char *libName, UErrorCode *status) {
return ret;
}
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uprv_dl_close(void *lib, UErrorCode *status) {
if(U_FAILURE(*status)) return;
dlclose(lib);
}
-U_INTERNAL UVoidFunction* U_EXPORT2
+U_CAPI UVoidFunction* U_EXPORT2
uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
union {
UVoidFunction *fp;
@@ -2330,40 +2394,40 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
/* Windows API implementation. */
// Note: UWP does not expose/allow these APIs, so the UWP version gets the null implementation. */
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uprv_dl_open(const char *libName, UErrorCode *status) {
HMODULE lib = NULL;
-
+
if(U_FAILURE(*status)) return NULL;
-
+
lib = LoadLibraryA(libName);
-
+
if(lib==NULL) {
*status = U_MISSING_RESOURCE_ERROR;
}
-
+
return (void*)lib;
}
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uprv_dl_close(void *lib, UErrorCode *status) {
HMODULE handle = (HMODULE)lib;
if(U_FAILURE(*status)) return;
-
+
FreeLibrary(handle);
-
+
return;
}
-U_INTERNAL UVoidFunction* U_EXPORT2
+U_CAPI UVoidFunction* U_EXPORT2
uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
HMODULE handle = (HMODULE)lib;
UVoidFunction* addr = NULL;
-
+
if(U_FAILURE(*status) || lib==NULL) return NULL;
-
+
addr = (UVoidFunction*)GetProcAddress(handle, sym);
-
+
if(addr==NULL) {
DWORD lastError = GetLastError();
if(lastError == ERROR_PROC_NOT_FOUND) {
@@ -2372,7 +2436,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
*status = U_UNSUPPORTED_ERROR; /* other unknown error. */
}
}
-
+
return addr;
}
@@ -2380,7 +2444,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
/* No dynamic loading, null (nonexistent) implementation. */
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uprv_dl_open(const char *libName, UErrorCode *status) {
(void)libName;
if(U_FAILURE(*status)) return NULL;
@@ -2388,7 +2452,7 @@ uprv_dl_open(const char *libName, UErrorCode *status) {
return NULL;
}
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uprv_dl_close(void *lib, UErrorCode *status) {
(void)lib;
if(U_FAILURE(*status)) return;
@@ -2396,7 +2460,7 @@ uprv_dl_close(void *lib, UErrorCode *status) {
return;
}
-U_INTERNAL UVoidFunction* U_EXPORT2
+U_CAPI UVoidFunction* U_EXPORT2
uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
(void)lib;
(void)sym;
diff --git a/Build/source/libs/icu/icu-src/source/common/putilimp.h b/Build/source/libs/icu/icu-src/source/common/putilimp.h
index d9c90cf4e75..a325c6c359a 100644
--- a/Build/source/libs/icu/icu-src/source/common/putilimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/putilimp.h
@@ -210,93 +210,93 @@ typedef size_t uintptr_t;
* Floating point utility to determine if a double is Not a Number (NaN).
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 uprv_isNaN(double d);
+U_CAPI UBool U_EXPORT2 uprv_isNaN(double d);
/**
* Floating point utility to determine if a double has an infinite value.
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 uprv_isInfinite(double d);
+U_CAPI UBool U_EXPORT2 uprv_isInfinite(double d);
/**
* Floating point utility to determine if a double has a positive infinite value.
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 uprv_isPositiveInfinity(double d);
+U_CAPI UBool U_EXPORT2 uprv_isPositiveInfinity(double d);
/**
* Floating point utility to determine if a double has a negative infinite value.
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 uprv_isNegativeInfinity(double d);
+U_CAPI UBool U_EXPORT2 uprv_isNegativeInfinity(double d);
/**
* Floating point utility that returns a Not a Number (NaN) value.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_getNaN(void);
+U_CAPI double U_EXPORT2 uprv_getNaN(void);
/**
* Floating point utility that returns an infinite value.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_getInfinity(void);
+U_CAPI double U_EXPORT2 uprv_getInfinity(void);
/**
* Floating point utility to truncate a double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_trunc(double d);
+U_CAPI double U_EXPORT2 uprv_trunc(double d);
/**
* Floating point utility to calculate the floor of a double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_floor(double d);
+U_CAPI double U_EXPORT2 uprv_floor(double d);
/**
* Floating point utility to calculate the ceiling of a double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_ceil(double d);
+U_CAPI double U_EXPORT2 uprv_ceil(double d);
/**
* Floating point utility to calculate the absolute value of a double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_fabs(double d);
+U_CAPI double U_EXPORT2 uprv_fabs(double d);
/**
* Floating point utility to calculate the fractional and integer parts of a double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_modf(double d, double* pinteger);
+U_CAPI double U_EXPORT2 uprv_modf(double d, double* pinteger);
/**
* Floating point utility to calculate the remainder of a double divided by another double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_fmod(double d, double y);
+U_CAPI double U_EXPORT2 uprv_fmod(double d, double y);
/**
* Floating point utility to calculate d to the power of exponent (d^exponent).
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_pow(double d, double exponent);
+U_CAPI double U_EXPORT2 uprv_pow(double d, double exponent);
/**
* Floating point utility to calculate 10 to the power of exponent (10^exponent).
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_pow10(int32_t exponent);
+U_CAPI double U_EXPORT2 uprv_pow10(int32_t exponent);
/**
* Floating point utility to calculate the maximum value of two doubles.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_fmax(double d, double y);
+U_CAPI double U_EXPORT2 uprv_fmax(double d, double y);
/**
* Floating point utility to calculate the minimum value of two doubles.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_fmin(double d, double y);
+U_CAPI double U_EXPORT2 uprv_fmin(double d, double y);
/**
* Private utility to calculate the maximum value of two integers.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y);
+U_CAPI int32_t U_EXPORT2 uprv_max(int32_t d, int32_t y);
/**
* Private utility to calculate the minimum value of two integers.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y);
+U_CAPI int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y);
#if U_IS_BIG_ENDIAN
# define uprv_isNegative(number) (*((signed char *)&(number))<0)
@@ -309,13 +309,13 @@ U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y);
* type of arbitrary bit length.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_maxMantissa(void);
+U_CAPI double U_EXPORT2 uprv_maxMantissa(void);
/**
* Floating point utility to calculate the logarithm of a double.
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_log(double d);
+U_CAPI double U_EXPORT2 uprv_log(double d);
/**
* Does common notion of rounding e.g. uprv_floor(x + 0.5);
@@ -323,7 +323,7 @@ U_INTERNAL double U_EXPORT2 uprv_log(double d);
* @return the rounded double
* @internal
*/
-U_INTERNAL double U_EXPORT2 uprv_round(double x);
+U_CAPI double U_EXPORT2 uprv_round(double x);
/**
* Adds the signed integers a and b, storing the result in res.
@@ -336,7 +336,7 @@ U_INTERNAL double U_EXPORT2 uprv_round(double x);
* @return true if overflow occurred; false if no overflow occurred.
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* res);
+U_CAPI UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* res);
/**
* Multiplies the signed integers a and b, storing the result in res.
@@ -349,7 +349,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* re
* @return true if overflow occurred; false if no overflow occurred.
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* res);
+U_CAPI UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* res);
#if 0
/**
@@ -359,7 +359,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* re
* @return the number of digits after the decimal point in a double number x.
* @internal
*/
-/*U_INTERNAL int32_t U_EXPORT2 uprv_digitsAfterDecimal(double x);*/
+/*U_CAPI int32_t U_EXPORT2 uprv_digitsAfterDecimal(double x);*/
#endif
#if !U_CHARSET_IS_UTF8
@@ -368,22 +368,22 @@ U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* re
* Return the default codepage for this platform and locale.
* This function can call setlocale() on Unix platforms. Please read the
* platform documentation on setlocale() before calling this function.
- * @return the default codepage for this platform
+ * @return the default codepage for this platform
* @internal
*/
-U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void);
+U_CAPI const char* U_EXPORT2 uprv_getDefaultCodepage(void);
#endif
/**
* Please use uloc_getDefault() instead.
* Return the default locale ID string by querying the system, or
- * zero if one cannot be found.
+ * zero if one cannot be found.
* This function can call setlocale() on Unix platforms. Please read the
* platform documentation on setlocale() before calling this function.
* @return the default locale ID string
* @internal
*/
-U_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void);
+U_CAPI const char* U_EXPORT2 uprv_getDefaultLocaleID(void);
/**
* Time zone utilities
@@ -417,7 +417,7 @@ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void);
* Date/Time application.
* @internal
*/
-U_INTERNAL void U_EXPORT2 uprv_tzset(void);
+U_CAPI void U_EXPORT2 uprv_tzset(void);
/**
* Difference in seconds between coordinated universal
@@ -425,7 +425,7 @@ U_INTERNAL void U_EXPORT2 uprv_tzset(void);
* @return the difference in seconds between coordinated universal time and local time.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void);
+U_CAPI int32_t U_EXPORT2 uprv_timezone(void);
/**
* tzname(0) Three-letter time-zone name derived from TZ environment
@@ -435,13 +435,13 @@ U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void);
* tzname(1) is an empty string.
* @internal
*/
-U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n);
+U_CAPI const char* U_EXPORT2 uprv_tzname(int n);
/**
* Reset the global tzname cache.
* @internal
*/
-U_INTERNAL void uprv_tzname_clear_cache();
+U_CAPI void uprv_tzname_clear_cache(void);
/**
* Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
@@ -449,7 +449,7 @@ U_INTERNAL void uprv_tzname_clear_cache();
* @return the UTC time measured in milliseconds
* @internal
*/
-U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void);
+U_CAPI UDate U_EXPORT2 uprv_getUTCtime(void);
/**
* Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970.
@@ -458,15 +458,15 @@ U_INTERNAL UDate U_EXPORT2 uprv_getUTCtime(void);
* @return the UTC time measured in milliseconds
* @internal
*/
-U_INTERNAL UDate U_EXPORT2 uprv_getRawUTCtime(void);
+U_CAPI UDate U_EXPORT2 uprv_getRawUTCtime(void);
/**
* Determine whether a pathname is absolute or not, as defined by the platform.
* @param path Pathname to test
- * @return TRUE if the path is absolute
+ * @return true if the path is absolute
* @internal (ICU 3.0)
*/
-U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
+U_CAPI UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
/**
* Use U_MAX_PTR instead of this function.
@@ -474,7 +474,7 @@ U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path);
* @return the largest possible pointer greater than the base
* @internal (ICU 3.8)
*/
-U_INTERNAL void * U_EXPORT2 uprv_maximumPtr(void *base);
+U_CAPI void * U_EXPORT2 uprv_maximumPtr(void *base);
/**
* Maximum value of a (void*) - use to indicate the limit of an 'infinite' buffer.
@@ -572,26 +572,26 @@ typedef void (UVoidFunction)(void);
* Load a library
* @internal (ICU 4.4)
*/
-U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status);
+U_CAPI void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status);
/**
* Close a library
* @internal (ICU 4.4)
*/
-U_INTERNAL void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status);
+U_CAPI void U_EXPORT2 uprv_dl_close( void *lib, UErrorCode *status);
/**
* Extract a symbol from a library (function)
* @internal (ICU 4.8)
*/
-U_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func( void *lib, const char *symbolName, UErrorCode *status);
+U_CAPI UVoidFunction* U_EXPORT2 uprv_dlsym_func( void *lib, const char *symbolName, UErrorCode *status);
/**
* Extract a symbol from a library (function)
* Not implemented, no clients.
* @internal
*/
-/* U_INTERNAL void * U_EXPORT2 uprv_dlsym_data( void *lib, const char *symbolName, UErrorCode *status); */
+/* U_CAPI void * U_EXPORT2 uprv_dlsym_data( void *lib, const char *symbolName, UErrorCode *status); */
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbi.cpp b/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
index 01dae48de44..9b7e70c3cf4 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
@@ -68,10 +68,18 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode
init(status);
fData = new RBBIDataWrapper(data, status); // status checked in constructor
if (U_FAILURE(status)) {return;}
- if(fData == 0) {
+ if(fData == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
+ if (fData->fForwardTable->fLookAheadResultsSize > 0) {
+ fLookAheadMatches = static_cast<int32_t *>(
+ uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t)));
+ if (fLookAheadMatches == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
}
//
@@ -98,10 +106,18 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules,
}
fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status);
if (U_FAILURE(status)) {return;}
- if(fData == 0) {
+ if(fData == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
+ if (fData->fForwardTable->fLookAheadResultsSize > 0) {
+ fLookAheadMatches = static_cast<int32_t *>(
+ uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t)));
+ if (fLookAheadMatches == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
}
@@ -117,10 +133,18 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &sta
init(status);
fData = new RBBIDataWrapper(udm, status); // status checked in constructor
if (U_FAILURE(status)) {return;}
- if(fData == 0) {
+ if(fData == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
+ if (fData->fForwardTable->fLookAheadResultsSize > 0) {
+ fLookAheadMatches = static_cast<int32_t *>(
+ uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t)));
+ if (fLookAheadMatches == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
}
@@ -188,30 +212,34 @@ RuleBasedBreakIterator::~RuleBasedBreakIterator() {
// fCharIter was adopted from the outside.
delete fCharIter;
}
- fCharIter = NULL;
+ fCharIter = nullptr;
utext_close(&fText);
- if (fData != NULL) {
+ if (fData != nullptr) {
fData->removeReference();
- fData = NULL;
+ fData = nullptr;
}
delete fBreakCache;
- fBreakCache = NULL;
+ fBreakCache = nullptr;
delete fDictionaryCache;
- fDictionaryCache = NULL;
+ fDictionaryCache = nullptr;
delete fLanguageBreakEngines;
- fLanguageBreakEngines = NULL;
+ fLanguageBreakEngines = nullptr;
delete fUnhandledBreakEngine;
- fUnhandledBreakEngine = NULL;
+ fUnhandledBreakEngine = nullptr;
+
+ uprv_free(fLookAheadMatches);
+ fLookAheadMatches = nullptr;
}
/**
* Assignment operator. Sets this iterator to have the same behavior,
* and iterate over the same text, as the one passed in.
+ * TODO: needs better handling of memory allocation errors.
*/
RuleBasedBreakIterator&
RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) {
@@ -252,6 +280,14 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) {
fData = that.fData->addReference();
}
+ uprv_free(fLookAheadMatches);
+ fLookAheadMatches = nullptr;
+ if (fData && fData->fForwardTable->fLookAheadResultsSize > 0) {
+ fLookAheadMatches = static_cast<int32_t *>(
+ uprv_malloc(fData->fForwardTable->fLookAheadResultsSize * sizeof(int32_t)));
+ }
+
+
fPosition = that.fPosition;
fRuleStatusIndex = that.fRuleStatusIndex;
fDone = that.fDone;
@@ -275,16 +311,17 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) {
//
//-----------------------------------------------------------------------------
void RuleBasedBreakIterator::init(UErrorCode &status) {
- fCharIter = NULL;
- fData = NULL;
+ fCharIter = nullptr;
+ fData = nullptr;
fPosition = 0;
fRuleStatusIndex = 0;
fDone = false;
fDictionaryCharCount = 0;
- fLanguageBreakEngines = NULL;
- fUnhandledBreakEngine = NULL;
- fBreakCache = NULL;
- fDictionaryCache = NULL;
+ fLanguageBreakEngines = nullptr;
+ fUnhandledBreakEngine = nullptr;
+ fBreakCache = nullptr;
+ fDictionaryCache = nullptr;
+ fLookAheadMatches = nullptr;
// Note: IBM xlC is unable to assign or initialize member fText from UTEXT_INITIALIZER.
// fText = UTEXT_INITIALIZER;
@@ -700,50 +737,53 @@ enum RBBIRunMode {
};
-// Map from look-ahead break states (corresponds to rules) to boundary positions.
-// Allows multiple lookahead break rules to be in flight at the same time.
+// Wrapper functions to select the appropriate handleNext() or handleSafePrevious()
+// instantiation, based on whether an 8 or 16 bit table is required.
//
-// This is a temporary approach for ICU 57. A better fix is to make the look-ahead numbers
-// in the state table be sequential, then we can just index an array. And the
-// table could also tell us in advance how big that array needs to be.
-//
-// Before ICU 57 there was just a single simple variable for a look-ahead match that
-// was in progress. Two rules at once did not work.
-
-static const int32_t kMaxLookaheads = 8;
-struct LookAheadResults {
- int32_t fUsedSlotLimit;
- int32_t fPositions[8];
- int16_t fKeys[8];
+// These Trie access functions will be inlined within the handleNext()/Previous() instantions.
+static inline uint16_t TrieFunc8(const UCPTrie *trie, UChar32 c) {
+ return UCPTRIE_FAST_GET(trie, UCPTRIE_8, c);
+}
- LookAheadResults() : fUsedSlotLimit(0), fPositions(), fKeys() {}
+static inline uint16_t TrieFunc16(const UCPTrie *trie, UChar32 c) {
+ return UCPTRIE_FAST_GET(trie, UCPTRIE_16, c);
+}
- int32_t getPosition(int16_t key) {
- for (int32_t i=0; i<fUsedSlotLimit; ++i) {
- if (fKeys[i] == key) {
- return fPositions[i];
- }
+int32_t RuleBasedBreakIterator::handleNext() {
+ const RBBIStateTable *statetable = fData->fForwardTable;
+ bool use8BitsTrie = ucptrie_getValueWidth(fData->fTrie) == UCPTRIE_VALUE_BITS_8;
+ if (statetable->fFlags & RBBI_8BITS_ROWS) {
+ if (use8BitsTrie) {
+ return handleNext<RBBIStateTableRow8, TrieFunc8>();
+ } else {
+ return handleNext<RBBIStateTableRow8, TrieFunc16>();
+ }
+ } else {
+ if (use8BitsTrie) {
+ return handleNext<RBBIStateTableRow16, TrieFunc8>();
+ } else {
+ return handleNext<RBBIStateTableRow16, TrieFunc16>();
}
- UPRV_UNREACHABLE;
}
+}
- void setPosition(int16_t key, int32_t position) {
- int32_t i;
- for (i=0; i<fUsedSlotLimit; ++i) {
- if (fKeys[i] == key) {
- fPositions[i] = position;
- return;
- }
+int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
+ const RBBIStateTable *statetable = fData->fReverseTable;
+ bool use8BitsTrie = ucptrie_getValueWidth(fData->fTrie) == UCPTRIE_VALUE_BITS_8;
+ if (statetable->fFlags & RBBI_8BITS_ROWS) {
+ if (use8BitsTrie) {
+ return handleSafePrevious<RBBIStateTableRow8, TrieFunc8>(fromPosition);
+ } else {
+ return handleSafePrevious<RBBIStateTableRow8, TrieFunc16>(fromPosition);
}
- if (i >= kMaxLookaheads) {
- UPRV_UNREACHABLE;
+ } else {
+ if (use8BitsTrie) {
+ return handleSafePrevious<RBBIStateTableRow16, TrieFunc8>(fromPosition);
+ } else {
+ return handleSafePrevious<RBBIStateTableRow16, TrieFunc16>(fromPosition);
}
- fKeys[i] = key;
- fPositions[i] = position;
- U_ASSERT(fUsedSlotLimit == i);
- fUsedSlotLimit = i + 1;
}
-};
+}
//-----------------------------------------------------------------------------------
@@ -752,19 +792,20 @@ struct LookAheadResults {
// Run the state machine to find a boundary
//
//-----------------------------------------------------------------------------------
+template <typename RowType, RuleBasedBreakIterator::PTrieFunc trieFunc>
int32_t RuleBasedBreakIterator::handleNext() {
int32_t state;
uint16_t category = 0;
RBBIRunMode mode;
- RBBIStateTableRow *row;
+ RowType *row;
UChar32 c;
- LookAheadResults lookAheadMatches;
int32_t result = 0;
int32_t initialPosition = 0;
const RBBIStateTable *statetable = fData->fForwardTable;
const char *tableData = statetable->fTableData;
uint32_t tableRowLen = statetable->fRowLen;
+ uint32_t dictStart = statetable->fDictCategoriesStart;
#ifdef RBBI_DEBUG
if (gTrace) {
RBBIDebugPuts("Handle Next pos char state category");
@@ -789,7 +830,7 @@ int32_t RuleBasedBreakIterator::handleNext() {
// Set the initial state for the state machine
state = START_STATE;
- row = (RBBIStateTableRow *)
+ row = (RowType *)
//(statetable->fTableData + (statetable->fRowLen * state));
(tableData + tableRowLen * state);
@@ -825,21 +866,8 @@ int32_t RuleBasedBreakIterator::handleNext() {
if (mode == RBBI_RUN) {
// look up the current character's character category, which tells us
// which column in the state table to look at.
- // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned,
- // not the size of the character going in, which is a UChar32.
- //
- category = UTRIE2_GET16(fData->fTrie, c);
-
- // Check the dictionary bit in the character's category.
- // Counter is only used by dictionary based iteration.
- // Chars that need to be handled by a dictionary have a flag bit set
- // in their category values.
- //
- if ((category & 0x4000) != 0) {
- fDictionaryCharCount++;
- // And off the dictionary flag bit.
- category &= ~0x4000;
- }
+ category = trieFunc(fData->fTrie, c);
+ fDictionaryCharCount += (category >= dictStart);
}
#ifdef RBBI_DEBUG
@@ -860,34 +888,41 @@ int32_t RuleBasedBreakIterator::handleNext() {
// fNextState is a variable-length array.
U_ASSERT(category<fData->fHeader->fCatCount);
state = row->fNextState[category]; /*Not accessing beyond memory*/
- row = (RBBIStateTableRow *)
+ row = (RowType *)
// (statetable->fTableData + (statetable->fRowLen * state));
(tableData + tableRowLen * state);
- if (row->fAccepting == -1) {
+ uint16_t accepting = row->fAccepting;
+ if (accepting == ACCEPTING_UNCONDITIONAL) {
// Match found, common case.
if (mode != RBBI_START) {
result = (int32_t)UTEXT_GETNATIVEINDEX(&fText);
}
- fRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values.
- }
-
- int16_t completedRule = row->fAccepting;
- if (completedRule > 0) {
+ fRuleStatusIndex = row->fTagsIdx; // Remember the break status (tag) values.
+ } else if (accepting > ACCEPTING_UNCONDITIONAL) {
// Lookahead match is completed.
- int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule);
+ U_ASSERT(accepting < fData->fForwardTable->fLookAheadResultsSize);
+ int32_t lookaheadResult = fLookAheadMatches[accepting];
if (lookaheadResult >= 0) {
- fRuleStatusIndex = row->fTagIdx;
+ fRuleStatusIndex = row->fTagsIdx;
fPosition = lookaheadResult;
return lookaheadResult;
}
}
- int16_t rule = row->fLookAhead;
- if (rule != 0) {
- // At the position of a '/' in a look-ahead match. Record it.
+
+ // If we are at the position of the '/' in a look-ahead (hard break) rule;
+ // record the current position, to be returned later, if the full rule matches.
+ // TODO: Move this check before the previous check of fAccepting.
+ // This would enable hard-break rules with no following context.
+ // But there are line break test failures when trying this. Investigate.
+ // Issue ICU-20837
+ uint16_t rule = row->fLookAhead;
+ U_ASSERT(rule == 0 || rule > ACCEPTING_UNCONDITIONAL);
+ U_ASSERT(rule == 0 || rule < fData->fForwardTable->fLookAheadResultsSize);
+ if (rule > ACCEPTING_UNCONDITIONAL) {
int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(&fText);
- lookAheadMatches.setPosition(rule, pos);
+ fLookAheadMatches[rule] = pos;
}
if (state == STOP_STATE) {
@@ -942,10 +977,12 @@ int32_t RuleBasedBreakIterator::handleNext() {
// because the safe table does not require as many options.
//
//-----------------------------------------------------------------------------------
+template <typename RowType, RuleBasedBreakIterator::PTrieFunc trieFunc>
int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
+
int32_t state;
uint16_t category = 0;
- RBBIStateTableRow *row;
+ RowType *row;
UChar32 c;
int32_t result = 0;
@@ -965,7 +1002,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
// Set the initial state for the state machine
c = UTEXT_PREVIOUS32(&fText);
state = START_STATE;
- row = (RBBIStateTableRow *)
+ row = (RowType *)
(stateTable->fTableData + (stateTable->fRowLen * state));
// loop until we reach the start of the text or transition to state 0
@@ -974,12 +1011,9 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
// look up the current character's character category, which tells us
// which column in the state table to look at.
- // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned,
- // not the size of the character going in, which is a UChar32.
//
- // And off the dictionary flag bit. For reverse iteration it is not used.
- category = UTRIE2_GET16(fData->fTrie, c);
- category &= ~0x4000;
+ // Off the dictionary flag bit. For reverse iteration it is not used.
+ category = trieFunc(fData->fTrie, c);
#ifdef RBBI_DEBUG
if (gTrace) {
@@ -998,7 +1032,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
// fNextState is a variable-length array.
U_ASSERT(category<fData->fHeader->fCatCount);
state = row->fNextState[category]; /*Not accessing beyond memory*/
- row = (RBBIStateTableRow *)
+ row = (RowType *)
(stateTable->fTableData + (stateTable->fRowLen * state));
if (state == STOP_STATE) {
@@ -1018,6 +1052,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
return result;
}
+
//-------------------------------------------------------------------------------
//
// getRuleStatus() Return the break rule tag associated with the current
@@ -1111,7 +1146,7 @@ static icu::UInitOnce gRBBIInitOnce = U_INITONCE_INITIALIZER;
* Release all static memory held by breakiterator.
*/
U_CDECL_BEGIN
-static UBool U_CALLCONV rbbi_cleanup(void) {
+UBool U_CALLCONV rbbi_cleanup(void) {
delete gLanguageBreakFactories;
gLanguageBreakFactories = nullptr;
delete gEmptyString;
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp b/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
index 4f9e83360a2..63ff3001c70 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
@@ -142,13 +142,15 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo
utext_setNativeIndex(text, rangeStart);
UChar32 c = utext_current32(text);
- category = UTRIE2_GET16(fBI->fData->fTrie, c);
+ category = ucptrie_get(fBI->fData->fTrie, c);
+ uint32_t dictStart = fBI->fData->fForwardTable->fDictCategoriesStart;
while(U_SUCCESS(status)) {
- while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd && (category & 0x4000) == 0) {
+ while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd
+ && (category < dictStart)) {
utext_next32(text); // TODO: cleaner loop structure.
c = utext_current32(text);
- category = UTRIE2_GET16(fBI->fData->fTrie, c);
+ category = ucptrie_get(fBI->fData->fTrie, c);
}
if (current >= rangeEnd) {
break;
@@ -166,7 +168,7 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo
// Reload the loop variables for the next go-round
c = utext_current32(text);
- category = UTRIE2_GET16(fBI->fData->fTrie, c);
+ category = ucptrie_get(fBI->fData->fTrie, c);
}
// If we found breaks, ensure that the first and last entries are
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h b/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
index 7991d6c0c7b..597312e85c4 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
@@ -126,13 +126,13 @@ class RuleBasedBreakIterator::BreakCache: public UMemory {
* Additional boundaries, either preceding or following, may be added
* to the cache as a side effect.
*
- * Return FALSE if the operation failed.
+ * Return false if the operation failed.
*/
UBool populateNear(int32_t position, UErrorCode &status);
/**
* Add boundary(s) to the cache following the current last boundary.
- * Return FALSE if at the end of the text, and no more boundaries can be added.
+ * Return false if at the end of the text, and no more boundaries can be added.
* Leave iteration position at the first newly added boundary, or unchanged if no boundary was added.
*/
UBool populateFollowing();
@@ -170,7 +170,7 @@ class RuleBasedBreakIterator::BreakCache: public UMemory {
* Fails if the requested position is outside of the range of boundaries currently held by the cache.
* The startPosition must be on a code point boundary.
*
- * Return TRUE if successful, FALSE if the specified position is after
+ * Return true if successful, false if the specified position is after
* the last cached boundary or before the first.
*/
UBool seek(int32_t startPosition);
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbicst.pl b/Build/source/libs/icu/icu-src/source/common/rbbicst.pl
index 32dd2ffff10..9aee3c16627 100755
--- a/Build/source/libs/icu/icu-src/source/common/rbbicst.pl
+++ b/Build/source/libs/icu/icu-src/source/common/rbbicst.pl
@@ -1,6 +1,6 @@
#**************************************************************************
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#**************************************************************************
#**************************************************************************
# Copyright (C) 2002-2016 International Business Machines Corporation
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp b/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
index 1d4c9e5895f..193acafc442 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
@@ -11,10 +11,10 @@
#if !UCONFIG_NO_BREAK_ITERATION
+#include "unicode/ucptrie.h"
#include "unicode/utypes.h"
#include "rbbidata.h"
#include "rbbirb.h"
-#include "utrie2.h"
#include "udatamem.h"
#include "cmemory.h"
#include "cstring.h"
@@ -110,17 +110,24 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) {
fReverseTable = (RBBIStateTable *)((char *)data + fHeader->fRTable);
}
- fTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS,
- (uint8_t *)data + fHeader->fTrie,
- fHeader->fTrieLen,
- NULL, // *actual length
- &status);
+ fTrie = ucptrie_openFromBinary(UCPTRIE_TYPE_FAST,
+ UCPTRIE_VALUE_BITS_ANY,
+ (uint8_t *)data + fHeader->fTrie,
+ fHeader->fTrieLen,
+ nullptr, // *actual length
+ &status);
if (U_FAILURE(status)) {
return;
}
- fRuleSource = (UChar *)((char *)data + fHeader->fRuleSource);
- fRuleString.setTo(TRUE, fRuleSource, -1);
+ UCPTrieValueWidth width = ucptrie_getValueWidth(fTrie);
+ if (!(width == UCPTRIE_VALUE_BITS_8 || width == UCPTRIE_VALUE_BITS_16)) {
+ status = U_INVALID_FORMAT_ERROR;
+ return;
+ }
+
+ fRuleSource = ((char *)data + fHeader->fRuleSource);
+ fRuleString = UnicodeString::fromUTF8(StringPiece(fRuleSource, fHeader->fRuleSourceLen));
U_ASSERT(data->fRuleSourceLen > 0);
fRuleStatusTable = (int32_t *)((char *)data + fHeader->fStatusTable);
@@ -142,8 +149,8 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) {
//-----------------------------------------------------------------------------
RBBIDataWrapper::~RBBIDataWrapper() {
U_ASSERT(fRefCount == 0);
- utrie2_close(fTrie);
- fTrie = NULL;
+ ucptrie_close(fTrie);
+ fTrie = nullptr;
if (fUDataMem) {
udata_close(fUDataMem);
} else if (!fDontFreeData) {
@@ -223,9 +230,16 @@ void RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *tab
uint32_t c;
uint32_t s;
- RBBIDebugPrintf(" %s\n", heading);
+ RBBIDebugPrintf("%s\n", heading);
- RBBIDebugPrintf("State | Acc LA TagIx");
+ RBBIDebugPrintf(" fDictCategoriesStart: %d\n", table->fDictCategoriesStart);
+ RBBIDebugPrintf(" fLookAheadResultsSize: %d\n", table->fLookAheadResultsSize);
+ RBBIDebugPrintf(" Flags: %4x RBBI_LOOKAHEAD_HARD_BREAK=%s RBBI_BOF_REQUIRED=%s RBBI_8BITS_ROWS=%s\n",
+ table->fFlags,
+ table->fFlags & RBBI_LOOKAHEAD_HARD_BREAK ? "T" : "F",
+ table->fFlags & RBBI_BOF_REQUIRED ? "T" : "F",
+ table->fFlags & RBBI_8BITS_ROWS ? "T" : "F");
+ RBBIDebugPrintf("\nState | Acc LA TagIx");
for (c=0; c<fHeader->fCatCount; c++) {RBBIDebugPrintf("%3d ", c);}
RBBIDebugPrintf("\n------|---------------"); for (c=0;c<fHeader->fCatCount; c++) {
RBBIDebugPrintf("----");
@@ -236,12 +250,20 @@ void RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *tab
RBBIDebugPrintf(" N U L L T A B L E\n\n");
return;
}
+ UBool use8Bits = table->fFlags & RBBI_8BITS_ROWS;
for (s=0; s<table->fNumStates; s++) {
RBBIStateTableRow *row = (RBBIStateTableRow *)
(table->fTableData + (table->fRowLen * s));
- RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->fAccepting, row->fLookAhead, row->fTagIdx);
- for (c=0; c<fHeader->fCatCount; c++) {
- RBBIDebugPrintf("%3d ", row->fNextState[c]);
+ if (use8Bits) {
+ RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->r8.fAccepting, row->r8.fLookAhead, row->r8.fTagsIdx);
+ for (c=0; c<fHeader->fCatCount; c++) {
+ RBBIDebugPrintf("%3d ", row->r8.fNextState[c]);
+ }
+ } else {
+ RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->r16.fAccepting, row->r16.fLookAhead, row->r16.fTagsIdx);
+ for (c=0; c<fHeader->fCatCount; c++) {
+ RBBIDebugPrintf("%3d ", row->r16.fNextState[c]);
+ }
}
RBBIDebugPrintf("\n");
}
@@ -377,35 +399,64 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD
//
int32_t topSize = offsetof(RBBIStateTable, fTableData);
- // Forward state table.
+ // Forward state table.
tableStartOffset = ds->readUInt32(rbbiDH->fFTable);
tableLength = ds->readUInt32(rbbiDH->fFTableLen);
if (tableLength > 0) {
- ds->swapArray32(ds, inBytes+tableStartOffset, topSize,
+ RBBIStateTable *rbbiST = (RBBIStateTable *)(inBytes+tableStartOffset);
+ UBool use8Bits = ds->readUInt32(rbbiST->fFlags) & RBBI_8BITS_ROWS;
+
+ ds->swapArray32(ds, inBytes+tableStartOffset, topSize,
outBytes+tableStartOffset, status);
- ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
- outBytes+tableStartOffset+topSize, status);
+
+ // Swap the state table if the table is in 16 bits.
+ if (use8Bits) {
+ if (outBytes != inBytes) {
+ uprv_memmove(outBytes+tableStartOffset+topSize,
+ inBytes+tableStartOffset+topSize,
+ tableLength-topSize);
+ }
+ } else {
+ ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
+ outBytes+tableStartOffset+topSize, status);
+ }
}
-
+
// Reverse state table. Same layout as forward table, above.
tableStartOffset = ds->readUInt32(rbbiDH->fRTable);
tableLength = ds->readUInt32(rbbiDH->fRTableLen);
if (tableLength > 0) {
- ds->swapArray32(ds, inBytes+tableStartOffset, topSize,
+ RBBIStateTable *rbbiST = (RBBIStateTable *)(inBytes+tableStartOffset);
+ UBool use8Bits = ds->readUInt32(rbbiST->fFlags) & RBBI_8BITS_ROWS;
+
+ ds->swapArray32(ds, inBytes+tableStartOffset, topSize,
outBytes+tableStartOffset, status);
- ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
- outBytes+tableStartOffset+topSize, status);
+
+ // Swap the state table if the table is in 16 bits.
+ if (use8Bits) {
+ if (outBytes != inBytes) {
+ uprv_memmove(outBytes+tableStartOffset+topSize,
+ inBytes+tableStartOffset+topSize,
+ tableLength-topSize);
+ }
+ } else {
+ ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize,
+ outBytes+tableStartOffset+topSize, status);
+ }
}
// Trie table for character categories
- utrie2_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen),
- outBytes+ds->readUInt32(rbbiDH->fTrie), status);
-
- // Source Rules Text. It's UChar data
- ds->swapArray16(ds, inBytes+ds->readUInt32(rbbiDH->fRuleSource), ds->readUInt32(rbbiDH->fRuleSourceLen),
- outBytes+ds->readUInt32(rbbiDH->fRuleSource), status);
+ ucptrie_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen),
+ outBytes+ds->readUInt32(rbbiDH->fTrie), status);
+
+ // Source Rules Text. It's UTF8 data
+ if (outBytes != inBytes) {
+ uprv_memmove(outBytes+ds->readUInt32(rbbiDH->fRuleSource),
+ inBytes+ds->readUInt32(rbbiDH->fRuleSource),
+ ds->readUInt32(rbbiDH->fRuleSourceLen));
+ }
// Table of rule status values. It's all int_32 values
ds->swapArray32(ds, inBytes+ds->readUInt32(rbbiDH->fStatusTable), ds->readUInt32(rbbiDH->fStatusTableLen),
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbidata.h b/Build/source/libs/icu/icu-src/source/common/rbbidata.h
index b7de6ce073c..3749f16799e 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbidata.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbidata.h
@@ -49,16 +49,17 @@ ubrk_swap(const UDataSwapper *ds,
#ifdef __cplusplus
+#include "unicode/ucptrie.h"
#include "unicode/uobject.h"
#include "unicode/unistr.h"
#include "unicode/uversion.h"
#include "umutex.h"
-#include "utrie2.h"
+
U_NAMESPACE_BEGIN
// The current RBBI data format version.
-static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {5, 0, 0, 0};
+static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {6, 0, 0, 0};
/*
* The following structs map exactly onto the raw data from ICU common data file.
@@ -94,49 +95,61 @@ struct RBBIDataHeader {
-struct RBBIStateTableRow {
- int16_t fAccepting; /* Non-zero if this row is for an accepting state. */
- /* Value 0: not an accepting state. */
- /* -1: Unconditional Accepting state. */
- /* positive: Look-ahead match has completed. */
- /* Actual boundary position happened earlier */
- /* Value here == fLookAhead in earlier */
- /* state, at actual boundary pos. */
- int16_t fLookAhead; /* Non-zero if this row is for a state that */
- /* corresponds to a '/' in the rule source. */
- /* Value is the same as the fAccepting */
- /* value for the rule (which will appear */
- /* in a different state. */
- int16_t fTagIdx; /* Non-zero if this row covers a {tagged} position */
- /* from a rule. Value is the index in the */
- /* StatusTable of the set of matching */
- /* tags (rule status values) */
- int16_t fReserved;
- uint16_t fNextState[1]; /* Next State, indexed by char category. */
- /* Variable-length array declared with length 1 */
- /* to disable bounds checkers. */
- /* Array Size is actually fData->fHeader->fCatCount*/
- /* CAUTION: see RBBITableBuilder::getTableSize() */
- /* before changing anything here. */
+template <typename T>
+struct RBBIStateTableRowT {
+ T fAccepting; // Non-zero if this row is for an accepting state.
+ // Value 0: not an accepting state.
+ // 1: (ACCEPTING_UNCONDITIONAL) Unconditional Accepting state.
+ // >1: Look-ahead match has completed.
+ // Actual boundary position happened earlier.
+ // Value here == fLookAhead in earlier
+ // state, at actual boundary pos.
+ T fLookAhead; // Non-zero if this row is for a state that
+ // corresponds to a '/' in the rule source.
+ // Value is the same as the fAccepting
+ // value for the rule (which will appear
+ // in a different state.
+ T fTagsIdx; // Non-zero if this row covers a {tagged} position
+ // from a rule. Value is the index in the
+ // StatusTable of the set of matching
+ // tags (rule status values)
+ T fNextState[1]; // Next State, indexed by char category.
+ // Variable-length array declared with length 1
+ // to disable bounds checkers.
+ // Array Size is actually fData->fHeader->fCatCount
+ // CAUTION: see RBBITableBuilder::getTableSize()
+ // before changing anything here.
};
+typedef RBBIStateTableRowT<uint8_t> RBBIStateTableRow8;
+typedef RBBIStateTableRowT<uint16_t> RBBIStateTableRow16;
+
+constexpr uint16_t ACCEPTING_UNCONDITIONAL = 1; // Value constant for RBBIStateTableRow::fAccepting
+
+union RBBIStateTableRow {
+ RBBIStateTableRow16 r16;
+ RBBIStateTableRow8 r8;
+};
struct RBBIStateTable {
- uint32_t fNumStates; /* Number of states. */
- uint32_t fRowLen; /* Length of a state table row, in bytes. */
- uint32_t fFlags; /* Option Flags for this state table */
- uint32_t fReserved; /* reserved */
- char fTableData[1]; /* First RBBIStateTableRow begins here. */
- /* Variable-length array declared with length 1 */
- /* to disable bounds checkers. */
- /* (making it char[] simplifies ugly address */
- /* arithmetic for indexing variable length rows.) */
+ uint32_t fNumStates; // Number of states.
+ uint32_t fRowLen; // Length of a state table row, in bytes.
+ uint32_t fDictCategoriesStart; // Char category number of the first dictionary
+ // char class, or the the largest category number + 1
+ // if there are no dictionary categories.
+ uint32_t fLookAheadResultsSize; // Size of run-time array required for holding
+ // look-ahead results. Indexed by row.fLookAhead.
+ uint32_t fFlags; // Option Flags for this state table.
+ char fTableData[1]; // First RBBIStateTableRow begins here.
+ // Variable-length array declared with length 1
+ // to disable bounds checkers.
+ // (making it char[] simplifies ugly address
+ // arithmetic for indexing variable length rows.)
};
-typedef enum {
- RBBI_LOOKAHEAD_HARD_BREAK = 1,
- RBBI_BOF_REQUIRED = 2
-} RBBIStateTableFlags;
+constexpr uint32_t RBBI_LOOKAHEAD_HARD_BREAK = 1;
+constexpr uint32_t RBBI_BOF_REQUIRED = 2;
+constexpr uint32_t RBBI_8BITS_ROWS = 4;
/* */
@@ -170,13 +183,13 @@ public:
const RBBIDataHeader *fHeader;
const RBBIStateTable *fForwardTable;
const RBBIStateTable *fReverseTable;
- const UChar *fRuleSource;
+ const char *fRuleSource;
const int32_t *fRuleStatusTable;
/* number of int32_t values in the rule status table. Used to sanity check indexing */
int32_t fStatusMaxIdx;
- UTrie2 *fTrie;
+ UCPTrie *fTrie;
private:
u_atomic_int32_t fRefCount;
@@ -184,14 +197,16 @@ private:
UnicodeString fRuleString;
UBool fDontFreeData;
- RBBIDataWrapper(const RBBIDataWrapper &other); /* forbid copying of this class */
- RBBIDataWrapper &operator=(const RBBIDataWrapper &other); /* forbid copying of this class */
+ RBBIDataWrapper(const RBBIDataWrapper &other) = delete; /* forbid copying of this class */
+ RBBIDataWrapper &operator=(const RBBIDataWrapper &other) = delete; /* forbid copying of this class */
};
U_NAMESPACE_END
+U_CFUNC UBool rbbi_cleanup(void);
+
#endif /* C++ */
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbinode.h b/Build/source/libs/icu/icu-src/source/common/rbbinode.h
index f3525960225..cff3ba70c42 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbinode.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbinode.h
@@ -79,7 +79,7 @@ class RBBINode : public UMemory {
// corresponds to columns in the final
// state transition table.
- UBool fLookAheadEnd; // For endMark nodes, set TRUE if
+ UBool fLookAheadEnd; // For endMark nodes, set true if
// marking the end of a look-ahead rule.
UBool fRuleRoot; // True if this node is the root of a rule.
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp b/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
index 08c577696c2..e5c250dfe40 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
@@ -22,6 +22,7 @@
#include "unicode/uniset.h"
#include "unicode/uchar.h"
#include "unicode/uchriter.h"
+#include "unicode/ustring.h"
#include "unicode/parsepos.h"
#include "unicode/parseerr.h"
@@ -154,13 +155,33 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() {
int32_t reverseTableSize = align8(fForwardTable->getSafeTableSize());
int32_t trieSize = align8(fSetBuilder->getTrieSize());
int32_t statusTableSize = align8(fRuleStatusVals->size() * sizeof(int32_t));
- int32_t rulesSize = align8((fStrippedRules.length()+1) * sizeof(UChar));
+
+ int32_t rulesLengthInUTF8 = 0;
+ u_strToUTF8WithSub(0, 0, &rulesLengthInUTF8,
+ fStrippedRules.getBuffer(), fStrippedRules.length(),
+ 0xfffd, nullptr, fStatus);
+ *fStatus = U_ZERO_ERROR;
+
+ int32_t rulesSize = align8((rulesLengthInUTF8+1));
int32_t totalSize = headerSize
+ forwardTableSize
+ reverseTableSize
+ statusTableSize + trieSize + rulesSize;
+#ifdef RBBI_DEBUG
+ if (fDebugEnv && uprv_strstr(fDebugEnv, "size")) {
+ RBBIDebugPrintf("Header Size: %8d\n", headerSize);
+ RBBIDebugPrintf("Forward Table Size: %8d\n", forwardTableSize);
+ RBBIDebugPrintf("Reverse Table Size: %8d\n", reverseTableSize);
+ RBBIDebugPrintf("Trie Size: %8d\n", trieSize);
+ RBBIDebugPrintf("Status Table Size: %8d\n", statusTableSize);
+ RBBIDebugPrintf("Rules Size: %8d\n", rulesSize);
+ RBBIDebugPrintf("-----------------------------\n");
+ RBBIDebugPrintf("Total Size: %8d\n", totalSize);
+ }
+#endif
+
RBBIDataHeader *data = (RBBIDataHeader *)uprv_malloc(totalSize);
if (data == NULL) {
*fStatus = U_MEMORY_ALLOCATION_ERROR;
@@ -184,11 +205,11 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() {
data->fRTableLen = reverseTableSize;
data->fTrie = data->fRTable + data->fRTableLen;
- data->fTrieLen = fSetBuilder->getTrieSize();
- data->fStatusTable = data->fTrie + trieSize;
+ data->fTrieLen = trieSize;
+ data->fStatusTable = data->fTrie + data->fTrieLen;
data->fStatusTableLen= statusTableSize;
data->fRuleSource = data->fStatusTable + statusTableSize;
- data->fRuleSourceLen = fStrippedRules.length() * sizeof(UChar);
+ data->fRuleSourceLen = rulesLengthInUTF8;
uprv_memset(data->fReserved, 0, sizeof(data->fReserved));
@@ -201,7 +222,12 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() {
ruleStatusTable[i] = fRuleStatusVals->elementAti(i);
}
- fStrippedRules.extract((UChar *)((uint8_t *)data+data->fRuleSource), rulesSize/2+1, *fStatus);
+ u_strToUTF8WithSub((char *)data+data->fRuleSource, rulesSize, &rulesLengthInUTF8,
+ fStrippedRules.getBuffer(), fStrippedRules.length(),
+ 0xfffd, nullptr, fStatus);
+ if (U_FAILURE(*fStatus)) {
+ return NULL;
+ }
return data;
}
@@ -261,9 +287,7 @@ RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) {
//
// UnicodeSet processing.
- // Munge the Unicode Sets to create a set of character categories.
- // Generate the mapping tables (TRIE) from input code points to
- // the character categories.
+ // Munge the Unicode Sets to create an initial set of character categories.
//
fSetBuilder->buildRanges();
@@ -277,6 +301,12 @@ RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) {
}
fForwardTable->buildForwardTable();
+
+ // State table and character category optimization.
+ // Merge equivalent rows and columns.
+ // Note that this process alters the initial set of character categories,
+ // causing the representation of UnicodeSets in the parse tree to become invalid.
+
optimizeTables();
fForwardTable->buildSafeReverseTable(status);
@@ -289,6 +319,9 @@ RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) {
}
#endif
+ // Generate the mapping tables (TRIE) from input code points to
+ // the character categories.
+ //
fSetBuilder->buildTrie();
//
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt b/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt
index c27857eb295..83f7aa401b0 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt
+++ b/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt
@@ -2,7 +2,7 @@
#*****************************************************************************
#
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
#*****************************************************************************
#*****************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp b/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
index f536ab5d398..9c406af6713 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
@@ -829,16 +829,14 @@ static const UChar chRParen = 0x29;
UnicodeString RBBIRuleScanner::stripRules(const UnicodeString &rules) {
UnicodeString strippedRules;
int32_t rulesLength = rules.length();
- bool skippingSpaces = false;
for (int32_t idx=0; idx<rulesLength; idx = rules.moveIndex32(idx, 1)) {
UChar32 cp = rules.char32At(idx);
bool whiteSpace = u_hasBinaryProperty(cp, UCHAR_PATTERN_WHITE_SPACE);
- if (skippingSpaces && whiteSpace) {
+ if (whiteSpace) {
continue;
}
strippedRules.append(cp);
- skippingSpaces = whiteSpace;
}
return strippedRules;
}
@@ -1274,6 +1272,10 @@ void RBBIRuleScanner::scanSet() {
}
+int32_t RBBIRuleScanner::numRules() {
+ return fRuleNum;
+}
+
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbiscan.h b/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
index c51b4cf2a68..58022002c55 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
@@ -54,7 +54,7 @@ public:
struct RBBIRuleChar {
UChar32 fChar;
UBool fEscaped;
- RBBIRuleChar() : fChar(0), fEscaped(FALSE) {}
+ RBBIRuleChar() : fChar(0), fEscaped(false) {}
};
RBBIRuleScanner(RBBIRuleBuilder *rb);
@@ -73,6 +73,8 @@ public:
// reverse rules,
// and a list of UnicodeSets encountered.
+ int32_t numRules(); // Return the number of rules that have been seen.
+
/**
* Return a rules string without unnecessary
* characters.
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp b/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
index 36e2e07e9c6..29faeb8c456 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
@@ -19,7 +19,7 @@
// by the RBBI rules.
// - compute a set of non-overlapping character ranges
// with all characters within a range belonging to the same
-// set of input uniocde sets.
+// set of input unicode sets.
// - Derive a set of non-overlapping UnicodeSet (like things)
// that will correspond to columns in the state table for
// the RBBI execution engine. All characters within one
@@ -35,7 +35,6 @@
#if !UCONFIG_NO_BREAK_ITERATION
#include "unicode/uniset.h"
-#include "utrie2.h"
#include "uvector.h"
#include "uassert.h"
#include "cmemory.h"
@@ -46,6 +45,7 @@
U_NAMESPACE_BEGIN
+const int32_t kMaxCharCategoriesFor8BitsTrie = 255;
//------------------------------------------------------------------------
//
// Constructor
@@ -55,11 +55,12 @@ RBBISetBuilder::RBBISetBuilder(RBBIRuleBuilder *rb)
{
fRB = rb;
fStatus = rb->fStatus;
- fRangeList = 0;
- fTrie = 0;
+ fRangeList = nullptr;
+ fMutableTrie = nullptr;
+ fTrie = nullptr;
fTrieSize = 0;
fGroupCount = 0;
- fSawBOF = FALSE;
+ fSawBOF = false;
}
@@ -79,7 +80,8 @@ RBBISetBuilder::~RBBISetBuilder()
delete r;
}
- utrie2_close(fTrie);
+ ucptrie_close(fTrie);
+ umutablecptrie_close(fMutableTrie);
}
@@ -194,24 +196,47 @@ void RBBISetBuilder::buildRanges() {
//
// Numbering: # 0 (state table column 0) is unused.
// # 1 is reserved - table column 1 is for end-of-input
- // # 2 is reserved - table column 2 is for beginning-in-input
+ // # 2 is reserved - table column 2 is for beginning-of-input
// # 3 is the first range list.
//
RangeDescriptor *rlSearchRange;
- for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
+ int32_t dictGroupCount = 0;
+
+ for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) {
for (rlSearchRange=fRangeList; rlSearchRange != rlRange; rlSearchRange=rlSearchRange->fNext) {
if (rlRange->fIncludesSets->equals(*rlSearchRange->fIncludesSets)) {
rlRange->fNum = rlSearchRange->fNum;
+ rlRange->fIncludesDict = rlSearchRange->fIncludesDict;
break;
}
}
if (rlRange->fNum == 0) {
- fGroupCount ++;
- rlRange->fNum = fGroupCount+2;
- rlRange->setDictionaryFlag();
- addValToSets(rlRange->fIncludesSets, fGroupCount+2);
+ rlRange->fFirstInGroup = true;
+ if (rlRange->isDictionaryRange()) {
+ rlRange->fNum = ++dictGroupCount;
+ rlRange->fIncludesDict = true;
+ } else {
+ fGroupCount++;
+ rlRange->fNum = fGroupCount+2;
+ addValToSets(rlRange->fIncludesSets, rlRange->fNum);
+ }
+ }
+ }
+
+ // Move the character category numbers for any dictionary ranges up, so that they
+ // immediately follow the non-dictionary ranges.
+
+ fDictCategoriesStart = fGroupCount + 3;
+ for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) {
+ if (rlRange->fIncludesDict) {
+ rlRange->fNum += fDictCategoriesStart - 1;
+ if (rlRange->fFirstInGroup) {
+ addValToSets(rlRange->fIncludesSets, rlRange->fNum);
+ }
}
}
+ fGroupCount += dictGroupCount;
+
// Handle input sets that contain the special string {eof}.
// Column 1 of the state table is reserved for EOF on input.
@@ -220,13 +245,11 @@ void RBBISetBuilder::buildRanges() {
// references to {bof}.)
// Add this column value (1 or 2) to the equivalent expression
// subtree for each UnicodeSet that contains the string {eof}
- // Because {bof} and {eof} are not a characters in the normal sense,
- // they doesn't affect the computation of ranges or TRIE.
- static const UChar eofUString[] = {0x65, 0x6f, 0x66, 0};
- static const UChar bofUString[] = {0x62, 0x6f, 0x66, 0};
+ // Because {bof} and {eof} are not characters in the normal sense,
+ // they don't affect the computation of the ranges or TRIE.
- UnicodeString eofString(eofUString);
- UnicodeString bofString(bofUString);
+ UnicodeString eofString(u"eof");
+ UnicodeString bofString(u"bof");
for (ni=0; ; ni++) { // Loop over each of the UnicodeSets encountered in the input rules
usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni);
if (usetNode==NULL) {
@@ -253,19 +276,17 @@ void RBBISetBuilder::buildRanges() {
// range group number.
//
void RBBISetBuilder::buildTrie() {
- RangeDescriptor *rlRange;
-
- fTrie = utrie2_open(0, // Initial value for all code points.
+ fMutableTrie = umutablecptrie_open(
+ 0, // Initial value for all code points.
0, // Error value for out-of-range input.
fStatus);
- for (rlRange = fRangeList; rlRange!=0 && U_SUCCESS(*fStatus); rlRange=rlRange->fNext) {
- utrie2_setRange32(fTrie,
- rlRange->fStartChar, // Range start
- rlRange->fEndChar, // Range end (inclusive)
- rlRange->fNum, // value for range
- TRUE, // Overwrite previously written values
- fStatus);
+ for (RangeDescriptor *range = fRangeList; range!=nullptr && U_SUCCESS(*fStatus); range=range->fNext) {
+ umutablecptrie_setRange(fMutableTrie,
+ range->fStartChar, // Range start
+ range->fEndChar, // Range end (inclusive)
+ range->fNum, // value for range
+ fStatus);
}
}
@@ -273,16 +294,21 @@ void RBBISetBuilder::buildTrie() {
void RBBISetBuilder::mergeCategories(IntPair categories) {
U_ASSERT(categories.first >= 1);
U_ASSERT(categories.second > categories.first);
+ U_ASSERT((categories.first < fDictCategoriesStart && categories.second < fDictCategoriesStart) ||
+ (categories.first >= fDictCategoriesStart && categories.second >= fDictCategoriesStart));
+
for (RangeDescriptor *rd = fRangeList; rd != nullptr; rd = rd->fNext) {
- int32_t rangeNum = rd->fNum & ~DICT_BIT;
- int32_t rangeDict = rd->fNum & DICT_BIT;
+ int32_t rangeNum = rd->fNum;
if (rangeNum == categories.second) {
- rd->fNum = categories.first | rangeDict;
+ rd->fNum = categories.first;
} else if (rangeNum > categories.second) {
rd->fNum--;
}
}
--fGroupCount;
+ if (categories.second <= fDictCategoriesStart) {
+ --fDictCategoriesStart;
+ }
}
@@ -295,15 +321,18 @@ int32_t RBBISetBuilder::getTrieSize() {
if (U_FAILURE(*fStatus)) {
return 0;
}
- utrie2_freeze(fTrie, UTRIE2_16_VALUE_BITS, fStatus);
- fTrieSize = utrie2_serialize(fTrie,
- NULL, // Buffer
- 0, // Capacity
- fStatus);
- if (*fStatus == U_BUFFER_OVERFLOW_ERROR) {
- *fStatus = U_ZERO_ERROR;
+ if (fTrie == nullptr) {
+ bool use8Bits = getNumCharCategories() <= kMaxCharCategoriesFor8BitsTrie;
+ fTrie = umutablecptrie_buildImmutable(
+ fMutableTrie,
+ UCPTRIE_TYPE_FAST,
+ use8Bits ? UCPTRIE_VALUE_BITS_8 : UCPTRIE_VALUE_BITS_16,
+ fStatus);
+ fTrieSize = ucptrie_toBinary(fTrie, nullptr, 0, fStatus);
+ if (*fStatus == U_BUFFER_OVERFLOW_ERROR) {
+ *fStatus = U_ZERO_ERROR;
+ }
}
- // RBBIDebugPrintf("Trie table size is %d\n", trieSize);
return fTrieSize;
}
@@ -316,9 +345,9 @@ int32_t RBBISetBuilder::getTrieSize() {
//
//-----------------------------------------------------------------------------------
void RBBISetBuilder::serializeTrie(uint8_t *where) {
- utrie2_serialize(fTrie,
- where, // Buffer
- fTrieSize, // Capacity
+ ucptrie_toBinary(fTrie,
+ where, // Buffer
+ fTrieSize, // Capacity
fStatus);
}
@@ -386,6 +415,16 @@ int32_t RBBISetBuilder::getNumCharCategories() const {
//------------------------------------------------------------------------
//
+// getDictCategoriesStart
+//
+//------------------------------------------------------------------------
+int32_t RBBISetBuilder::getDictCategoriesStart() const {
+ return fDictCategoriesStart;
+}
+
+
+//------------------------------------------------------------------------
+//
// sawBOF
//
//------------------------------------------------------------------------
@@ -403,7 +442,7 @@ UBool RBBISetBuilder::sawBOF() const {
UChar32 RBBISetBuilder::getFirstChar(int32_t category) const {
RangeDescriptor *rlRange;
UChar32 retVal = (UChar32)-1;
- for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
+ for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) {
if (rlRange->fNum == category) {
retVal = rlRange->fStartChar;
break;
@@ -413,7 +452,6 @@ UChar32 RBBISetBuilder::getFirstChar(int32_t category) const {
}
-
//------------------------------------------------------------------------
//
// printRanges A debugging function.
@@ -426,16 +464,16 @@ void RBBISetBuilder::printRanges() {
int i;
RBBIDebugPrintf("\n\n Nonoverlapping Ranges ...\n");
- for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
- RBBIDebugPrintf("%2i %4x-%4x ", rlRange->fNum, rlRange->fStartChar, rlRange->fEndChar);
+ for (rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) {
+ RBBIDebugPrintf("%4x-%4x ", rlRange->fStartChar, rlRange->fEndChar);
for (i=0; i<rlRange->fIncludesSets->size(); i++) {
RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i);
- UnicodeString setName = UNICODE_STRING("anon", 4);
+ UnicodeString setName {u"anon"};
RBBINode *setRef = usetNode->fParent;
- if (setRef != NULL) {
+ if (setRef != nullptr) {
RBBINode *varRef = setRef->fParent;
- if (varRef != NULL && varRef->fType == RBBINode::varRef) {
+ if (varRef != nullptr && varRef->fType == RBBINode::varRef) {
setName = varRef->fText;
}
}
@@ -455,19 +493,15 @@ void RBBISetBuilder::printRanges() {
//------------------------------------------------------------------------
#ifdef RBBI_DEBUG
void RBBISetBuilder::printRangeGroups() {
- RangeDescriptor *rlRange;
- RangeDescriptor *tRange;
int i;
- int lastPrintedGroupNum = 0;
RBBIDebugPrintf("\nRanges grouped by Unicode Set Membership...\n");
- for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
- int groupNum = rlRange->fNum & 0xbfff;
- if (groupNum > lastPrintedGroupNum) {
- lastPrintedGroupNum = groupNum;
+ for (RangeDescriptor *rlRange = fRangeList; rlRange!=nullptr; rlRange=rlRange->fNext) {
+ if (rlRange->fFirstInGroup) {
+ int groupNum = rlRange->fNum;
RBBIDebugPrintf("%2i ", groupNum);
- if (rlRange->fNum & DICT_BIT) { RBBIDebugPrintf(" <DICT> ");}
+ if (groupNum >= fDictCategoriesStart) { RBBIDebugPrintf(" <DICT> ");}
for (i=0; i<rlRange->fIncludesSets->size(); i++) {
RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i);
@@ -483,7 +517,7 @@ void RBBISetBuilder::printRangeGroups() {
}
i = 0;
- for (tRange = rlRange; tRange != 0; tRange = tRange->fNext) {
+ for (RangeDescriptor *tRange = rlRange; tRange != nullptr; tRange = tRange->fNext) {
if (tRange->fNum == rlRange->fNum) {
if (i++ % 5 == 0) {
RBBIDebugPrintf("\n ");
@@ -550,28 +584,22 @@ void RBBISetBuilder::printSets() {
//
//-------------------------------------------------------------------------------------
-RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &status) {
- int i;
-
- this->fStartChar = other.fStartChar;
- this->fEndChar = other.fEndChar;
- this->fNum = other.fNum;
- this->fNext = NULL;
- UErrorCode oldstatus = status;
- this->fIncludesSets = new UVector(status);
- if (U_FAILURE(oldstatus)) {
- status = oldstatus;
- }
+RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &status) :
+ fStartChar(other.fStartChar), fEndChar {other.fEndChar}, fNum {other.fNum},
+ fIncludesDict{other.fIncludesDict}, fFirstInGroup{other.fFirstInGroup} {
+
if (U_FAILURE(status)) {
return;
}
- /* test for NULL */
- if (this->fIncludesSets == 0) {
+ fIncludesSets = new UVector(status);
+ if (this->fIncludesSets == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ if (U_FAILURE(status)) {
return;
}
- for (i=0; i<other.fIncludesSets->size(); i++) {
+ for (int32_t i=0; i<other.fIncludesSets->size(); i++) {
this->fIncludesSets->addElement(other.fIncludesSets->elementAt(i), status);
}
}
@@ -583,24 +611,13 @@ RangeDescriptor::RangeDescriptor(const RangeDescriptor &other, UErrorCode &statu
//
//-------------------------------------------------------------------------------------
RangeDescriptor::RangeDescriptor(UErrorCode &status) {
- this->fStartChar = 0;
- this->fEndChar = 0;
- this->fNum = 0;
- this->fNext = NULL;
- UErrorCode oldstatus = status;
- this->fIncludesSets = new UVector(status);
- if (U_FAILURE(oldstatus)) {
- status = oldstatus;
- }
if (U_FAILURE(status)) {
return;
}
- /* test for NULL */
- if(this->fIncludesSets == 0) {
+ fIncludesSets = new UVector(status);
+ if (fIncludesSets == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
- return;
}
-
}
@@ -611,7 +628,7 @@ RangeDescriptor::RangeDescriptor(UErrorCode &status) {
//-------------------------------------------------------------------------------------
RangeDescriptor::~RangeDescriptor() {
delete fIncludesSets;
- fIncludesSets = NULL;
+ fIncludesSets = nullptr;
}
//-------------------------------------------------------------------------------------
@@ -622,7 +639,7 @@ RangeDescriptor::~RangeDescriptor() {
void RangeDescriptor::split(UChar32 where, UErrorCode &status) {
U_ASSERT(where>fStartChar && where<=fEndChar);
RangeDescriptor *nr = new RangeDescriptor(*this, status);
- if(nr == 0) {
+ if(nr == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -641,27 +658,22 @@ void RangeDescriptor::split(UChar32 where, UErrorCode &status) {
//-------------------------------------------------------------------------------------
//
-// RangeDescriptor::setDictionaryFlag
+// RangeDescriptor::isDictionaryRange
//
-// Character Category Numbers that include characters from
-// the original Unicode Set named "dictionary" have bit 14
-// set to 1. The RBBI runtime engine uses this to trigger
-// use of the word dictionary.
+// Test whether this range includes characters from
+// the original Unicode Set named "dictionary".
//
-// This function looks through the Unicode Sets that it
-// (the range) includes, and sets the bit in fNum when
-// "dictionary" is among them.
+// This function looks through the Unicode Sets that
+// the range includes, checking for one named "dictionary"
//
// TODO: a faster way would be to find the set node for
// "dictionary" just once, rather than looking it
// up by name every time.
//
//-------------------------------------------------------------------------------------
-void RangeDescriptor::setDictionaryFlag() {
- int i;
-
+bool RangeDescriptor::isDictionaryRange() {
static const char16_t *dictionary = u"dictionary";
- for (i=0; i<fIncludesSets->size(); i++) {
+ for (int32_t i=0; i<fIncludesSets->size(); i++) {
RBBINode *usetNode = (RBBINode *)fIncludesSets->elementAt(i);
RBBINode *setRef = usetNode->fParent;
if (setRef != nullptr) {
@@ -669,16 +681,14 @@ void RangeDescriptor::setDictionaryFlag() {
if (varRef && varRef->fType == RBBINode::varRef) {
const UnicodeString *setName = &varRef->fText;
if (setName->compare(dictionary, -1) == 0) {
- fNum |= RBBISetBuilder::DICT_BIT;
- break;
+ return true;
}
}
}
}
+ return false;
}
-
-
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbisetb.h b/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
index ed6a76b1214..6409a4ea579 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
@@ -16,9 +16,10 @@
#if !UCONFIG_NO_BREAK_ITERATION
+#include "unicode/ucptrie.h"
+#include "unicode/umutablecptrie.h"
#include "unicode/uobject.h"
#include "rbbirb.h"
-#include "utrie2.h"
#include "uvector.h"
U_NAMESPACE_BEGIN
@@ -40,25 +41,26 @@ U_NAMESPACE_BEGIN
//
class RangeDescriptor : public UMemory {
public:
- UChar32 fStartChar; // Start of range, unicode 32 bit value.
- UChar32 fEndChar; // End of range, unicode 32 bit value.
- int32_t fNum; // runtime-mapped input value for this range.
- UVector *fIncludesSets; // vector of the the original
- // Unicode sets that include this range.
- // (Contains ptrs to uset nodes)
- RangeDescriptor *fNext; // Next RangeDescriptor in the linked list.
+ UChar32 fStartChar {}; // Start of range, unicode 32 bit value.
+ UChar32 fEndChar {}; // End of range, unicode 32 bit value.
+ int32_t fNum {0}; // runtime-mapped input value for this range.
+ bool fIncludesDict {false}; // True if the range includes $dictionary.
+ bool fFirstInGroup {false}; // True if first range in a group with the same fNum.
+ UVector *fIncludesSets {nullptr}; // vector of the the original
+ // Unicode sets that include this range.
+ // (Contains ptrs to uset nodes)
+ RangeDescriptor *fNext {nullptr}; // Next RangeDescriptor in the linked list.
RangeDescriptor(UErrorCode &status);
RangeDescriptor(const RangeDescriptor &other, UErrorCode &status);
~RangeDescriptor();
void split(UChar32 where, UErrorCode &status); // Spit this range in two at "where", with
// where appearing in the second (higher) part.
- void setDictionaryFlag(); // Check whether this range appears as part of
+ bool isDictionaryRange(); // Check whether this range appears as part of
// the Unicode set named "dictionary"
-private:
- RangeDescriptor(const RangeDescriptor &other); // forbid copying of this class
- RangeDescriptor &operator=(const RangeDescriptor &other); // forbid copying of this class
+ RangeDescriptor(const RangeDescriptor &other) = delete; // forbid default copying of this class
+ RangeDescriptor &operator=(const RangeDescriptor &other) = delete; // forbid assigning of this class
};
@@ -89,6 +91,8 @@ public:
int32_t getNumCharCategories() const; // CharCategories are the same as input symbol set to the
// runtime state machine, which are the same as
// columns in the DFA state table
+ int32_t getDictCategoriesStart() const; // First char category that includes $dictionary, or
+ // last category + 1 if there are no dictionary categories.
int32_t getTrieSize() /*const*/; // Size in bytes of the serialized Trie.
void serializeTrie(uint8_t *where); // write out the serialized Trie.
UChar32 getFirstChar(int32_t val) const;
@@ -101,8 +105,6 @@ public:
*/
void mergeCategories(IntPair categories);
- static constexpr int32_t DICT_BIT = 0x4000;
-
#ifdef RBBI_DEBUG
void printSets();
void printRanges();
@@ -114,24 +116,22 @@ public:
#endif
private:
- void numberSets();
-
RBBIRuleBuilder *fRB; // The RBBI Rule Compiler that owns us.
UErrorCode *fStatus;
RangeDescriptor *fRangeList; // Head of the linked list of RangeDescriptors
- UTrie2 *fTrie; // The mapping TRIE that is the end result of processing
- uint32_t fTrieSize; // the Unicode Sets.
+ UMutableCPTrie *fMutableTrie; // The mapping TRIE that is the end result of processing
+ UCPTrie *fTrie; // the Unicode Sets.
+ uint32_t fTrieSize;
- // Groups correspond to character categories -
- // groups of ranges that are in the same original UnicodeSets.
- // fGroupCount is the index of the last used group.
- // fGroupCount+1 is also the number of columns in the RBBI state table being compiled.
- // State table column 0 is not used. Column 1 is for end-of-input.
- // column 2 is for group 0. Funny counting.
+ // Number of range groups, which are groups of ranges that are in the same original UnicodeSets.
int32_t fGroupCount;
+ // The number of the first dictionary char category.
+ // If there are no Dictionary categories, set to the last category + 1.
+ int32_t fDictCategoriesStart;
+
UBool fSawBOF;
RBBISetBuilder(const RBBISetBuilder &other); // forbid copying of this class
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp b/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
index a20b51777cd..70e260fc08b 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
@@ -18,6 +18,7 @@
#include "unicode/unistr.h"
#include "rbbitblb.h"
#include "rbbirb.h"
+#include "rbbiscan.h"
#include "rbbisetb.h"
#include "rbbidata.h"
#include "cstring.h"
@@ -27,6 +28,8 @@
U_NAMESPACE_BEGIN
+const int32_t kMaxStateFor8BitsTable = 255;
+
RBBITableBuilder::RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode, UErrorCode &status) :
fRB(rb),
fTree(*rootNode),
@@ -52,6 +55,7 @@ RBBITableBuilder::~RBBITableBuilder() {
}
delete fDStates;
delete fSafeTable;
+ delete fLookAheadRuleMap;
}
@@ -121,7 +125,7 @@ void RBBITableBuilder::buildForwardTable() {
}
cn->fLeftChild = fTree;
fTree->fParent = cn;
- cn->fRightChild = new RBBINode(RBBINode::endMark);
+ RBBINode *endMarkerNode = cn->fRightChild = new RBBINode(RBBINode::endMark);
// Delete and exit if memory allocation failed.
if (cn->fRightChild == NULL) {
*fStatus = U_MEMORY_ALLOCATION_ERROR;
@@ -164,7 +168,7 @@ void RBBITableBuilder::buildForwardTable() {
// For "chained" rules, modify the followPos sets
//
if (fRB->fChainRules) {
- calcChainedFollowPos(fTree);
+ calcChainedFollowPos(fTree, endMarkerNode);
}
//
@@ -178,6 +182,7 @@ void RBBITableBuilder::buildForwardTable() {
// Build the DFA state transition tables.
//
buildStateTable();
+ mapLookAheadRules();
flagAcceptingStates();
flagLookAheadStates();
flagTaggedStates();
@@ -401,19 +406,13 @@ void RBBITableBuilder::addRuleRootNodes(UVector *dest, RBBINode *node) {
// to implement rule chaining. NOT described by Aho
//
//-----------------------------------------------------------------------------
-void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) {
+void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree, RBBINode *endMarkNode) {
- UVector endMarkerNodes(*fStatus);
UVector leafNodes(*fStatus);
- int32_t i;
-
if (U_FAILURE(*fStatus)) {
return;
}
- // get a list of all endmarker nodes.
- tree->findNodes(&endMarkerNodes, RBBINode::endMark, *fStatus);
-
// get a list all leaf nodes
tree->findNodes(&leafNodes, RBBINode::leafChar, *fStatus);
if (U_FAILURE(*fStatus)) {
@@ -442,28 +441,26 @@ void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) {
int32_t startNodeIx;
for (endNodeIx=0; endNodeIx<leafNodes.size(); endNodeIx++) {
- RBBINode *tNode = (RBBINode *)leafNodes.elementAt(endNodeIx);
- RBBINode *endNode = NULL;
+ RBBINode *endNode = (RBBINode *)leafNodes.elementAt(endNodeIx);
// Identify leaf nodes that correspond to overall rule match positions.
- // These include an endMarkerNode in their followPos sets.
- for (i=0; i<endMarkerNodes.size(); i++) {
- if (tNode->fFollowPos->contains(endMarkerNodes.elementAt(i))) {
- endNode = tNode;
- break;
- }
- }
- if (endNode == NULL) {
- // node wasn't an end node. Try again with the next.
+ // These include the endMarkNode in their followPos sets.
+ //
+ // Note: do not consider other end marker nodes, those that are added to
+ // look-ahead rules. These can't chain; a match immediately stops
+ // further matching. This leaves exactly one end marker node, the one
+ // at the end of the complete tree.
+
+ if (!endNode->fFollowPos->contains(endMarkNode)) {
continue;
}
// We've got a node that can end a match.
- // Line Break Specific hack: If this node's val correspond to the $CM char class,
- // don't chain from it.
- // TODO: Add rule syntax for this behavior, get specifics out of here and
- // into the rule file.
+ // !!LBCMNoChain implementation: If this node's val correspond to
+ // the Line Break $CM char class, don't chain from it.
+ // TODO: Remove this. !!LBCMNoChain is deprecated, and is not used
+ // by any of the standard ICU rules.
if (fRB->fLBCMNoChain) {
UChar32 c = this->fRB->fSetBuilder->getFirstChar(endNode->fVal);
if (c != -1) {
@@ -475,7 +472,6 @@ void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) {
}
}
-
// Now iterate over the nodes that can start a match, looking for ones
// with the same char class as our ending node.
RBBINode *startNode;
@@ -705,6 +701,76 @@ ExitBuildSTdeleteall:
}
+/**
+ * mapLookAheadRules
+ *
+ */
+void RBBITableBuilder::mapLookAheadRules() {
+ fLookAheadRuleMap = new UVector32(fRB->fScanner->numRules() + 1, *fStatus);
+ if (fLookAheadRuleMap == nullptr) {
+ *fStatus = U_MEMORY_ALLOCATION_ERROR;
+ }
+ if (U_FAILURE(*fStatus)) {
+ return;
+ }
+ fLookAheadRuleMap->setSize(fRB->fScanner->numRules() + 1);
+
+ for (int32_t n=0; n<fDStates->size(); n++) {
+ RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
+ int32_t laSlotForState = 0;
+
+ // Establish the look-ahead slot for this state, if the state covers
+ // any look-ahead nodes - corresponding to the '/' in look-ahead rules.
+
+ // If any of the look-ahead nodes already have a slot assigned, use it,
+ // otherwise assign a new one.
+
+ bool sawLookAheadNode = false;
+ for (int32_t ipos=0; ipos<sd->fPositions->size(); ++ipos) {
+ RBBINode *node = static_cast<RBBINode *>(sd->fPositions->elementAt(ipos));
+ if (node->fType != RBBINode::NodeType::lookAhead) {
+ continue;
+ }
+ sawLookAheadNode = true;
+ int32_t ruleNum = node->fVal; // Set when rule was originally parsed.
+ U_ASSERT(ruleNum < fLookAheadRuleMap->size());
+ U_ASSERT(ruleNum > 0);
+ int32_t laSlot = fLookAheadRuleMap->elementAti(ruleNum);
+ if (laSlot != 0) {
+ if (laSlotForState == 0) {
+ laSlotForState = laSlot;
+ } else {
+ // TODO: figure out if this can fail, change to setting an error code if so.
+ U_ASSERT(laSlot == laSlotForState);
+ }
+ }
+ }
+ if (!sawLookAheadNode) {
+ continue;
+ }
+
+ if (laSlotForState == 0) {
+ laSlotForState = ++fLASlotsInUse;
+ }
+
+ // For each look ahead node covered by this state,
+ // set the mapping from the node's rule number to the look ahead slot.
+ // There can be multiple nodes/rule numbers going to the same la slot.
+
+ for (int32_t ipos=0; ipos<sd->fPositions->size(); ++ipos) {
+ RBBINode *node = static_cast<RBBINode *>(sd->fPositions->elementAt(ipos));
+ if (node->fType != RBBINode::NodeType::lookAhead) {
+ continue;
+ }
+ int32_t ruleNum = node->fVal; // Set when rule was originally parsed.
+ int32_t existingVal = fLookAheadRuleMap->elementAti(ruleNum);
+ (void)existingVal;
+ U_ASSERT(existingVal == 0 || existingVal == laSlotForState);
+ fLookAheadRuleMap->setElementAt(laSlotForState, ruleNum);
+ }
+ }
+
+}
//-----------------------------------------------------------------------------
//
@@ -740,32 +806,23 @@ void RBBITableBuilder::flagAcceptingStates() {
if (sd->fPositions->indexOf(endMarker) >= 0) {
// Any non-zero value for fAccepting means this is an accepting node.
// The value is what will be returned to the user as the break status.
- // If no other value was specified, force it to -1.
+ // If no other value was specified, force it to ACCEPTING_UNCONDITIONAL (1).
if (sd->fAccepting==0) {
// State hasn't been marked as accepting yet. Do it now.
- sd->fAccepting = endMarker->fVal;
+ sd->fAccepting = fLookAheadRuleMap->elementAti(endMarker->fVal);
if (sd->fAccepting == 0) {
- sd->fAccepting = -1;
+ sd->fAccepting = ACCEPTING_UNCONDITIONAL;
}
}
- if (sd->fAccepting==-1 && endMarker->fVal != 0) {
+ if (sd->fAccepting==ACCEPTING_UNCONDITIONAL && endMarker->fVal != 0) {
// Both lookahead and non-lookahead accepting for this state.
- // Favor the look-ahead. Expedient for line break.
- // TODO: need a more elegant resolution for conflicting rules.
- sd->fAccepting = endMarker->fVal;
+ // Favor the look-ahead, because a look-ahead match needs to
+ // immediately stop the run-time engine. First match, not longest.
+ sd->fAccepting = fLookAheadRuleMap->elementAti(endMarker->fVal);
}
// implicit else:
- // if sd->fAccepting already had a value other than 0 or -1, leave it be.
-
- // If the end marker node is from a look-ahead rule, set
- // the fLookAhead field for this state also.
- if (endMarker->fLookAheadEnd) {
- // TODO: don't change value if already set?
- // TODO: allow for more than one active look-ahead rule in engine.
- // Make value here an index to a side array in engine?
- sd->fLookAhead = sd->fAccepting;
- }
+ // if sd->fAccepting already had a value other than 0 or 1, leave it be.
}
}
}
@@ -792,11 +849,20 @@ void RBBITableBuilder::flagLookAheadStates() {
}
for (i=0; i<lookAheadNodes.size(); i++) {
lookAheadNode = (RBBINode *)lookAheadNodes.elementAt(i);
+ U_ASSERT(lookAheadNode->fType == RBBINode::NodeType::lookAhead);
for (n=0; n<fDStates->size(); n++) {
RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n);
- if (sd->fPositions->indexOf(lookAheadNode) >= 0) {
- sd->fLookAhead = lookAheadNode->fVal;
+ int32_t positionsIdx = sd->fPositions->indexOf(lookAheadNode);
+ if (positionsIdx >= 0) {
+ U_ASSERT(lookAheadNode == sd->fPositions->elementAt(positionsIdx));
+ uint32_t lookaheadSlot = fLookAheadRuleMap->elementAti(lookAheadNode->fVal);
+ U_ASSERT(sd->fLookAhead == 0 || sd->fLookAhead == lookaheadSlot);
+ // if (sd->fLookAhead != 0 && sd->fLookAhead != lookaheadSlot) {
+ // printf("%s:%d Bingo. sd->fLookAhead:%d lookaheadSlot:%d\n",
+ // __FILE__, __LINE__, sd->fLookAhead, lookaheadSlot);
+ // }
+ sd->fLookAhead = lookaheadSlot;
}
}
}
@@ -1083,7 +1149,13 @@ bool RBBITableBuilder::findDuplCharClassFrom(IntPair *categories) {
int32_t numCols = fRB->fSetBuilder->getNumCharCategories();
for (; categories->first < numCols-1; categories->first++) {
- for (categories->second=categories->first+1; categories->second < numCols; categories->second++) {
+ // Note: dictionary & non-dictionary columns cannot be merged.
+ // The limitSecond value prevents considering mixed pairs.
+ // Dictionary categories are >= DictCategoriesStart.
+ // Non dict categories are < DictCategoriesStart.
+ int limitSecond = categories->first < fRB->fSetBuilder->getDictCategoriesStart() ?
+ fRB->fSetBuilder->getDictCategoriesStart() : numCols;
+ for (categories->second=categories->first+1; categories->second < limitSecond; categories->second++) {
// Initialized to different values to prevent returning true if numStates = 0 (implies no duplicates).
uint16_t table_base = 0;
uint16_t table_dupl = 1;
@@ -1204,16 +1276,6 @@ void RBBITableBuilder::removeState(IntPair duplStates) {
}
sd->fDtran->setElementAt(newVal, col);
}
- if (sd->fAccepting == duplState) {
- sd->fAccepting = keepState;
- } else if (sd->fAccepting > duplState) {
- sd->fAccepting--;
- }
- if (sd->fLookAhead == duplState) {
- sd->fLookAhead = keepState;
- } else if (sd->fLookAhead > duplState) {
- sd->fLookAhead--;
- }
}
}
@@ -1280,11 +1342,18 @@ int32_t RBBITableBuilder::getTableSize() const {
numRows = fDStates->size();
numCols = fRB->fSetBuilder->getNumCharCategories();
- rowSize = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t)*numCols;
+ if (use8BitsForTable()) {
+ rowSize = offsetof(RBBIStateTableRow8, fNextState) + sizeof(int8_t)*numCols;
+ } else {
+ rowSize = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t)*numCols;
+ }
size += numRows * rowSize;
return size;
}
+bool RBBITableBuilder::use8BitsForTable() const {
+ return fDStates->size() <= kMaxStateFor8BitsTable;
+}
//-----------------------------------------------------------------------------
//
@@ -1309,27 +1378,48 @@ void RBBITableBuilder::exportTable(void *where) {
return;
}
- table->fRowLen = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t) * catCount;
table->fNumStates = fDStates->size();
+ table->fDictCategoriesStart = fRB->fSetBuilder->getDictCategoriesStart();
+ table->fLookAheadResultsSize = fLASlotsInUse == ACCEPTING_UNCONDITIONAL ? 0 : fLASlotsInUse + 1;
table->fFlags = 0;
+ if (use8BitsForTable()) {
+ table->fRowLen = offsetof(RBBIStateTableRow8, fNextState) + sizeof(uint8_t) * catCount;
+ table->fFlags |= RBBI_8BITS_ROWS;
+ } else {
+ table->fRowLen = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t) * catCount;
+ }
if (fRB->fLookAheadHardBreak) {
table->fFlags |= RBBI_LOOKAHEAD_HARD_BREAK;
}
if (fRB->fSetBuilder->sawBOF()) {
table->fFlags |= RBBI_BOF_REQUIRED;
}
- table->fReserved = 0;
for (state=0; state<table->fNumStates; state++) {
RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(state);
RBBIStateTableRow *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen);
- U_ASSERT (-32768 < sd->fAccepting && sd->fAccepting <= 32767);
- U_ASSERT (-32768 < sd->fLookAhead && sd->fLookAhead <= 32767);
- row->fAccepting = (int16_t)sd->fAccepting;
- row->fLookAhead = (int16_t)sd->fLookAhead;
- row->fTagIdx = (int16_t)sd->fTagsIdx;
- for (col=0; col<catCount; col++) {
- row->fNextState[col] = (uint16_t)sd->fDtran->elementAti(col);
+ if (use8BitsForTable()) {
+ U_ASSERT (sd->fAccepting <= 255);
+ U_ASSERT (sd->fLookAhead <= 255);
+ U_ASSERT (0 <= sd->fTagsIdx && sd->fTagsIdx <= 255);
+ RBBIStateTableRow8 *r8 = (RBBIStateTableRow8*)row;
+ r8->fAccepting = sd->fAccepting;
+ r8->fLookAhead = sd->fLookAhead;
+ r8->fTagsIdx = sd->fTagsIdx;
+ for (col=0; col<catCount; col++) {
+ U_ASSERT (sd->fDtran->elementAti(col) <= kMaxStateFor8BitsTable);
+ r8->fNextState[col] = sd->fDtran->elementAti(col);
+ }
+ } else {
+ U_ASSERT (sd->fAccepting <= 0xffff);
+ U_ASSERT (sd->fLookAhead <= 0xffff);
+ U_ASSERT (0 <= sd->fTagsIdx && sd->fTagsIdx <= 0xffff);
+ row->r16.fAccepting = sd->fAccepting;
+ row->r16.fLookAhead = sd->fLookAhead;
+ row->r16.fTagsIdx = sd->fTagsIdx;
+ for (col=0; col<catCount; col++) {
+ row->r16.fNextState[col] = sd->fDtran->elementAti(col);
+ }
}
}
}
@@ -1465,11 +1555,18 @@ int32_t RBBITableBuilder::getSafeTableSize() const {
numRows = fSafeTable->size();
numCols = fRB->fSetBuilder->getNumCharCategories();
- rowSize = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t)*numCols;
+ if (use8BitsForSafeTable()) {
+ rowSize = offsetof(RBBIStateTableRow8, fNextState) + sizeof(int8_t)*numCols;
+ } else {
+ rowSize = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t)*numCols;
+ }
size += numRows * rowSize;
return size;
}
+bool RBBITableBuilder::use8BitsForSafeTable() const {
+ return fSafeTable->size() <= kMaxStateFor8BitsTable;
+}
//-----------------------------------------------------------------------------
//
@@ -1494,20 +1591,34 @@ void RBBITableBuilder::exportSafeTable(void *where) {
return;
}
- table->fRowLen = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t) * catCount;
table->fNumStates = fSafeTable->size();
table->fFlags = 0;
- table->fReserved = 0;
+ if (use8BitsForSafeTable()) {
+ table->fRowLen = offsetof(RBBIStateTableRow8, fNextState) + sizeof(uint8_t) * catCount;
+ table->fFlags |= RBBI_8BITS_ROWS;
+ } else {
+ table->fRowLen = offsetof(RBBIStateTableRow16, fNextState) + sizeof(int16_t) * catCount;
+ }
for (state=0; state<table->fNumStates; state++) {
UnicodeString *rowString = (UnicodeString *)fSafeTable->elementAt(state);
RBBIStateTableRow *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen);
- row->fAccepting = 0;
- row->fLookAhead = 0;
- row->fTagIdx = 0;
- row->fReserved = 0;
- for (col=0; col<catCount; col++) {
- row->fNextState[col] = rowString->charAt(col);
+ if (use8BitsForSafeTable()) {
+ RBBIStateTableRow8 *r8 = (RBBIStateTableRow8*)row;
+ r8->fAccepting = 0;
+ r8->fLookAhead = 0;
+ r8->fTagsIdx = 0;
+ for (col=0; col<catCount; col++) {
+ U_ASSERT(rowString->charAt(col) <= kMaxStateFor8BitsTable);
+ r8->fNextState[col] = static_cast<uint8_t>(rowString->charAt(col));
+ }
+ } else {
+ row->r16.fAccepting = 0;
+ row->r16.fLookAhead = 0;
+ row->r16.fTagsIdx = 0;
+ for (col=0; col<catCount; col++) {
+ row->r16.fNextState[col] = rowString->charAt(col);
+ }
}
}
}
@@ -1545,12 +1656,12 @@ void RBBITableBuilder::printStates() {
RBBIDebugPrintf("state | i n p u t s y m b o l s \n");
RBBIDebugPrintf(" | Acc LA Tag");
for (c=0; c<fRB->fSetBuilder->getNumCharCategories(); c++) {
- RBBIDebugPrintf(" %2d", c);
+ RBBIDebugPrintf(" %3d", c);
}
RBBIDebugPrintf("\n");
RBBIDebugPrintf(" |---------------");
for (c=0; c<fRB->fSetBuilder->getNumCharCategories(); c++) {
- RBBIDebugPrintf("---");
+ RBBIDebugPrintf("----");
}
RBBIDebugPrintf("\n");
@@ -1559,7 +1670,7 @@ void RBBITableBuilder::printStates() {
RBBIDebugPrintf(" %3d | " , n);
RBBIDebugPrintf("%3d %3d %5d ", sd->fAccepting, sd->fLookAhead, sd->fTagsIdx);
for (c=0; c<fRB->fSetBuilder->getNumCharCategories(); c++) {
- RBBIDebugPrintf(" %2d", sd->fDtran->elementAti(c));
+ RBBIDebugPrintf(" %3d", sd->fDtran->elementAti(c));
}
RBBIDebugPrintf("\n");
}
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbitblb.h b/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
index bc6077bb4da..fe3db8d7bf1 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
@@ -20,6 +20,7 @@
#include "unicode/uobject.h"
#include "unicode/rbbi.h"
+#include "rbbidata.h"
#include "rbbirb.h"
#include "rbbinode.h"
@@ -53,6 +54,9 @@ public:
*/
void exportTable(void *where);
+ /** Use 8 bits to encode the forward table */
+ bool use8BitsForTable() const;
+
/**
* Find duplicate (redundant) character classes. Begin looking with categories.first.
* Duplicate, if found are returned in the categories parameter.
@@ -85,15 +89,18 @@ public:
*/
void exportSafeTable(void *where);
+ /** Use 8 bits to encode the safe reverse table */
+ bool use8BitsForSafeTable() const;
private:
void calcNullable(RBBINode *n);
void calcFirstPos(RBBINode *n);
void calcLastPos(RBBINode *n);
void calcFollowPos(RBBINode *n);
- void calcChainedFollowPos(RBBINode *n);
+ void calcChainedFollowPos(RBBINode *n, RBBINode *endMarkNode);
void bofFixup();
void buildStateTable();
+ void mapLookAheadRules();
void flagAcceptingStates();
void flagLookAheadStates();
void flagTaggedStates();
@@ -175,9 +182,18 @@ private:
/** Synthesized safe table, UVector of UnicodeString, one string per table row. */
UVector *fSafeTable;
+ /** Map from rule number (fVal in look ahead nodes) to sequential lookahead index. */
+ UVector32 *fLookAheadRuleMap = nullptr;
+
+ /* Counter used when assigning lookahead rule numbers.
+ * Contains the last look-ahead number already in use.
+ * The first look-ahead number is 2; Number 1 (ACCEPTING_UNCONDITIONAL) is reserved
+ * for non-lookahead accepting states. See the declarations of RBBIStateTableRowT. */
+ int32_t fLASlotsInUse = ACCEPTING_UNCONDITIONAL;
+
- RBBITableBuilder(const RBBITableBuilder &other); // forbid copying of this class
- RBBITableBuilder &operator=(const RBBITableBuilder &other); // forbid copying of this class
+ RBBITableBuilder(const RBBITableBuilder &other) = delete; // forbid copying of this class
+ RBBITableBuilder &operator=(const RBBITableBuilder &other) = delete; // forbid copying of this class
};
//
@@ -186,8 +202,8 @@ private:
class RBBIStateDescriptor : public UMemory {
public:
UBool fMarked;
- int32_t fAccepting;
- int32_t fLookAhead;
+ uint32_t fAccepting;
+ uint32_t fLookAhead;
UVector *fTagVals;
int32_t fTagsIdx;
UVector *fPositions; // Set of parse tree positions associated
diff --git a/Build/source/libs/icu/icu-src/source/common/resource.h b/Build/source/libs/icu/icu-src/source/common/resource.h
index 5199b858880..3795694412a 100644
--- a/Build/source/libs/icu/icu-src/source/common/resource.h
+++ b/Build/source/libs/icu/icu-src/source/common/resource.h
@@ -60,7 +60,7 @@ public:
/**
* @param i Array item index.
* @param value Output-only, receives the value of the i'th item.
- * @return TRUE if i is non-negative and less than getSize().
+ * @return true if i is non-negative and less than getSize().
*/
UBool getValue(int32_t i, ResourceValue &value) const;
@@ -97,14 +97,14 @@ public:
* @param i Table item index.
* @param key Output-only, receives the key of the i'th item.
* @param value Output-only, receives the value of the i'th item.
- * @return TRUE if i is non-negative and less than getSize().
+ * @return true if i is non-negative and less than getSize().
*/
UBool getKeyAndValue(int32_t i, const char *&key, ResourceValue &value) const;
/**
* @param key Key string to find in the table.
* @param value Output-only, receives the value of the item with that key.
- * @return TRUE if the table contains the key.
+ * @return true if the table contains the key.
*/
UBool findValue(const char *key, ResourceValue &value) const;
@@ -141,7 +141,7 @@ public:
inline UnicodeString getUnicodeString(UErrorCode &errorCode) const {
int32_t len = 0;
const UChar *r = getString(len, errorCode);
- return UnicodeString(TRUE, r, len);
+ return UnicodeString(true, r, len);
}
/**
@@ -152,7 +152,7 @@ public:
inline UnicodeString getAliasUnicodeString(UErrorCode &errorCode) const {
int32_t len = 0;
const UChar *r = getAliasString(len, errorCode);
- return UnicodeString(TRUE, r, len);
+ return UnicodeString(true, r, len);
}
/**
@@ -199,7 +199,7 @@ public:
* CLDR no-fallback data values of (three empty-set symbols)=={2205, 2205, 2205}
* when enumerating tables with fallback from the specific resource bundle to root.
*
- * @return TRUE if this is a no-inheritance marker string
+ * @return true if this is a no-inheritance marker string
*/
virtual UBool isNoInheritanceMarker() const = 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/ruleiter.h b/Build/source/libs/icu/icu-src/source/common/ruleiter.h
index 4e1be53823d..28e2ca57530 100644
--- a/Build/source/libs/icu/icu-src/source/common/ruleiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/ruleiter.h
@@ -114,7 +114,7 @@ public:
* character.
* @param options one or more of the following options, bitwise-OR-ed
* together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
- * @param isEscaped output parameter set to TRUE if the character
+ * @param isEscaped output parameter set to true if the character
* was escaped
* @param ec input-output error code. An error will only be set by
* this routing if options includes PARSE_VARIABLES and an unknown
diff --git a/Build/source/libs/icu/icu-src/source/common/serv.h b/Build/source/libs/icu/icu-src/source/common/serv.h
index e1f69cd4119..ca070b6c6d6 100644
--- a/Build/source/libs/icu/icu-src/source/common/serv.h
+++ b/Build/source/libs/icu/icu-src/source/common/serv.h
@@ -138,16 +138,16 @@ class U_COMMON_API ICUServiceKey : public UObject {
* must eventually return false. This implementation has no fallbacks
* and always returns false.</p>
*
- * @return TRUE if the ICUServiceKey changed to a valid fallback value.
+ * @return true if the ICUServiceKey changed to a valid fallback value.
*/
virtual UBool fallback();
/**
- * <p>Return TRUE if a key created from id matches, or would eventually
+ * <p>Return true if a key created from id matches, or would eventually
* fallback to match, the canonical ID of this ICUServiceKey.</p>
*
* @param id the id to test.
- * @return TRUE if this ICUServiceKey's canonical ID is a fallback of id.
+ * @return true if this ICUServiceKey's canonical ID is a fallback of id.
*/
virtual UBool isFallbackOf(const UnicodeString& id) const;
@@ -291,15 +291,15 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory {
public:
/**
* <p>Construct a SimpleFactory that maps a single ID to a single
- * service instance. If visible is TRUE, the ID will be visible.
+ * service instance. If visible is true, the ID will be visible.
* The instance must not be NULL. The SimpleFactory will adopt
* the instance, which must not be changed subsequent to this call.</p>
*
* @param instanceToAdopt the service instance to adopt.
* @param id the ID to assign to this service instance.
- * @param visible if TRUE, the ID will be visible.
+ * @param visible if true, the ID will be visible.
*/
- SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible = TRUE);
+ SimpleFactory(UObject* instanceToAdopt, const UnicodeString& id, UBool visible = true);
/**
* <p>Destructor.</p>
@@ -318,7 +318,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory {
virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
/**
- * <p>This implementation adds a mapping from ID -> this to result if visible is TRUE,
+ * <p>This implementation adds a mapping from ID -> this to result if visible is true,
* otherwise it removes ID from result.</p>
*
* @param result the mapping table to update.
@@ -327,7 +327,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory {
virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
/**
- * <p>This implementation returns the factory ID if it equals id and visible is TRUE,
+ * <p>This implementation returns the factory ID if it equals id and visible is true,
* otherwise it returns the empty string. (This implementation provides
* no localized id information.)</p>
*
@@ -427,8 +427,8 @@ public:
UErrorCode& status);
/**
- * <p>Return TRUE if either string of the pair is bogus.</p>
- * @return TRUE if either string of the pair is bogus.
+ * <p>Return true if either string of the pair is bogus.</p>
+ * @return true if either string of the pair is bogus.
*/
UBool isBogus() const;
@@ -761,7 +761,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
/**
* <p>A convenience override of registerInstance(UObject*, const UnicodeString&, UBool)
- * that defaults visible to TRUE.</p>
+ * that defaults visible to true.</p>
*
* @param objToAdopt the object to register and adopt.
* @param id the ID to assign to this object.
@@ -774,7 +774,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
/**
* <p>Register a service instance with the provided ID. The ID will be
* canonicalized. The canonicalized ID will be returned by
- * getVisibleIDs if visible is TRUE. The service instance will be adopted and
+ * getVisibleIDs if visible is true. The service instance will be adopted and
* must not be modified subsequent to this call.</p>
*
* <p>This issues a serviceChanged notification to registered listeners.</p>
@@ -784,7 +784,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
*
* @param objToAdopt the object to register and adopt.
* @param id the ID to assign to this object.
- * @param visible TRUE if getVisibleIDs is to return this ID.
+ * @param visible true if getVisibleIDs is to return this ID.
* @param status the error code status.
* @return a registry key that can be passed to unregister() to unregister
* (and discard) this instance.
@@ -820,7 +820,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
*
* @param rkey the registry key.
* @param status the error code status.
- * @return TRUE if the call successfully unregistered the factory.
+ * @return true if the call successfully unregistered the factory.
*/
virtual UBool unregister(URegistryKey rkey, UErrorCode& status);
@@ -833,9 +833,9 @@ class U_COMMON_API ICUService : public ICUNotifier {
virtual void reset(void);
/**
- * <p>Return TRUE if the service is in its default state.</p>
+ * <p>Return true if the service is in its default state.</p>
*
- * <p>The default implementation returns TRUE if there are no
+ * <p>The default implementation returns true if there are no
* factories registered.</p>
*/
virtual UBool isDefault(void) const;
@@ -877,7 +877,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
*
* @param instanceToAdopt the service instance to adopt.
* @param id the ID to assign to this service instance.
- * @param visible if TRUE, the ID will be visible.
+ * @param visible if true, the ID will be visible.
* @param status the error code status.
* @return an instance of ICUServiceFactory that maps this instance to the provided ID.
*/
@@ -885,7 +885,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
/**
* <p>Reinitialize the factory list to its default state. After this call, isDefault()
- * must return TRUE.</p>
+ * must return true.</p>
*
* <p>This issues a serviceChanged notification to registered listeners.</p>
*
@@ -928,7 +928,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
* different listeners.</p>
*
* @param l the listener to test.
- * @return TRUE if the service accepts the listener.
+ * @return true if the service accepts the listener.
*/
virtual UBool acceptsListener(const EventListener& l) const;
diff --git a/Build/source/libs/icu/icu-src/source/common/servnotf.h b/Build/source/libs/icu/icu-src/source/common/servnotf.h
index dba7a0fea3b..305570c1e67 100644
--- a/Build/source/libs/icu/icu-src/source/common/servnotf.h
+++ b/Build/source/libs/icu/icu-src/source/common/servnotf.h
@@ -105,7 +105,7 @@ public:
protected:
/**
- * Subclasses implement this to return TRUE if the listener is
+ * Subclasses implement this to return true if the listener is
* of the appropriate type.
*/
virtual UBool acceptsListener(const EventListener& l) const = 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/sharedobject.h b/Build/source/libs/icu/icu-src/source/common/sharedobject.h
index c0a5aba4782..6ccfb27b018 100644
--- a/Build/source/libs/icu/icu-src/source/common/sharedobject.h
+++ b/Build/source/libs/icu/icu-src/source/common/sharedobject.h
@@ -90,13 +90,13 @@ public:
int32_t getRefCount() const;
/**
- * If noHardReferences() == TRUE then this object has no hard references.
+ * If noHardReferences() == true then this object has no hard references.
* Must be called only from within the internals of UnifiedCache.
*/
inline UBool noHardReferences() const { return getRefCount() == 0; }
/**
- * If hasHardReferences() == TRUE then this object has hard references.
+ * If hasHardReferences() == true then this object has hard references.
* Must be called only from within the internals of UnifiedCache.
*/
inline UBool hasHardReferences() const { return getRefCount() != 0; }
diff --git a/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp b/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
index 76d8f54efd4..f7f7aead617 100644
--- a/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
@@ -263,6 +263,8 @@ UnicodeString SimpleFormatter::getTextWithNoArguments(
sb.append(compiledPattern + i, n);
i += n;
} else if (n < offsetsLength) {
+ // TODO(ICU-20406): This does not distinguish between "{0}{1}" and "{1}{0}".
+ // Consider removing this function and replacing it with an iterator interface.
offsets[n] = sb.length();
}
}
diff --git a/Build/source/libs/icu/icu-src/source/common/sources.txt b/Build/source/libs/icu/icu-src/source/common/sources.txt
new file mode 100644
index 00000000000..e0410daaa47
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/sources.txt
@@ -0,0 +1,196 @@
+appendable.cpp
+bmpset.cpp
+brkeng.cpp
+brkiter.cpp
+bytesinkutil.cpp
+bytestream.cpp
+bytestrie.cpp
+bytestriebuilder.cpp
+bytestrieiterator.cpp
+caniter.cpp
+characterproperties.cpp
+chariter.cpp
+charstr.cpp
+cmemory.cpp
+cstr.cpp
+cstring.cpp
+cwchar.cpp
+dictbe.cpp
+dictionarydata.cpp
+dtintrv.cpp
+edits.cpp
+errorcode.cpp
+filteredbrk.cpp
+filterednormalizer2.cpp
+icudataver.cpp
+icuplug.cpp
+loadednormalizer2impl.cpp
+localebuilder.cpp
+localematcher.cpp
+localeprioritylist.cpp
+locavailable.cpp
+locbased.cpp
+locdispnames.cpp
+locdistance.cpp
+locdspnm.cpp
+locid.cpp
+loclikely.cpp
+loclikelysubtags.cpp
+locmap.cpp
+locresdata.cpp
+locutil.cpp
+lsr.cpp
+messagepattern.cpp
+normalizer2.cpp
+normalizer2impl.cpp
+normlzr.cpp
+parsepos.cpp
+patternprops.cpp
+pluralmap.cpp
+propname.cpp
+propsvec.cpp
+punycode.cpp
+putil.cpp
+rbbi.cpp
+rbbi_cache.cpp
+rbbidata.cpp
+rbbinode.cpp
+rbbirb.cpp
+rbbiscan.cpp
+rbbisetb.cpp
+rbbistbl.cpp
+rbbitblb.cpp
+resbund.cpp
+resbund_cnv.cpp
+resource.cpp
+restrace.cpp
+ruleiter.cpp
+schriter.cpp
+serv.cpp
+servlk.cpp
+servlkf.cpp
+servls.cpp
+servnotf.cpp
+servrbf.cpp
+servslkf.cpp
+sharedobject.cpp
+simpleformatter.cpp
+static_unicode_sets.cpp
+stringpiece.cpp
+stringtriebuilder.cpp
+uarrsort.cpp
+ubidi.cpp
+ubidi_props.cpp
+ubidiln.cpp
+ubiditransform.cpp
+ubidiwrt.cpp
+ubrk.cpp
+ucase.cpp
+ucasemap.cpp
+ucasemap_titlecase_brkiter.cpp
+ucat.cpp
+uchar.cpp
+ucharstrie.cpp
+ucharstriebuilder.cpp
+ucharstrieiterator.cpp
+uchriter.cpp
+ucln_cmn.cpp
+ucmndata.cpp
+ucnv.cpp
+ucnv2022.cpp
+ucnv_bld.cpp
+ucnv_cb.cpp
+ucnv_cnv.cpp
+ucnv_ct.cpp
+ucnv_err.cpp
+ucnv_ext.cpp
+ucnv_io.cpp
+ucnv_lmb.cpp
+ucnv_set.cpp
+ucnv_u16.cpp
+ucnv_u32.cpp
+ucnv_u7.cpp
+ucnv_u8.cpp
+ucnvbocu.cpp
+ucnvdisp.cpp
+ucnvhz.cpp
+ucnvisci.cpp
+ucnvlat1.cpp
+ucnvmbcs.cpp
+ucnvscsu.cpp
+ucnvsel.cpp
+ucol_swp.cpp
+ucptrie.cpp
+ucurr.cpp
+udata.cpp
+udatamem.cpp
+udataswp.cpp
+uenum.cpp
+uhash.cpp
+uhash_us.cpp
+uidna.cpp
+uinit.cpp
+uinvchar.cpp
+uiter.cpp
+ulist.cpp
+uloc.cpp
+uloc_keytype.cpp
+uloc_tag.cpp
+umapfile.cpp
+umath.cpp
+umutablecptrie.cpp
+umutex.cpp
+unames.cpp
+unifiedcache.cpp
+unifilt.cpp
+unifunct.cpp
+uniset.cpp
+uniset_closure.cpp
+uniset_props.cpp
+unisetspan.cpp
+unistr.cpp
+unistr_case.cpp
+unistr_case_locale.cpp
+unistr_cnv.cpp
+unistr_props.cpp
+unistr_titlecase_brkiter.cpp
+unorm.cpp
+unormcmp.cpp
+uobject.cpp
+uprops.cpp
+ures_cnv.cpp
+uresbund.cpp
+uresdata.cpp
+usc_impl.cpp
+uscript.cpp
+uscript_props.cpp
+uset.cpp
+uset_props.cpp
+usetiter.cpp
+ushape.cpp
+usprep.cpp
+ustack.cpp
+ustr_cnv.cpp
+ustr_titlecase_brkiter.cpp
+ustr_wcs.cpp
+ustrcase.cpp
+ustrcase_locale.cpp
+ustrenum.cpp
+ustrfmt.cpp
+ustring.cpp
+ustrtrns.cpp
+utext.cpp
+utf_impl.cpp
+util.cpp
+util_props.cpp
+utrace.cpp
+utrie.cpp
+utrie2.cpp
+utrie2_builder.cpp
+utrie_swap.cpp
+uts46.cpp
+utypes.cpp
+uvector.cpp
+uvectr32.cpp
+uvectr64.cpp
+wintz.cpp
diff --git a/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp b/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
index d4f7f310baf..99089e08ef9 100644
--- a/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
@@ -51,6 +51,47 @@ void StringPiece::set(const char* str) {
length_ = 0;
}
+int32_t StringPiece::find(StringPiece needle, int32_t offset) {
+ if (length() == 0 && needle.length() == 0) {
+ return 0;
+ }
+ // TODO: Improve to be better than O(N^2)?
+ for (int32_t i = offset; i < length(); i++) {
+ int32_t j = 0;
+ for (; j < needle.length(); i++, j++) {
+ if (data()[i] != needle.data()[j]) {
+ i -= j;
+ goto outer_end;
+ }
+ }
+ return i - j;
+ outer_end: void();
+ }
+ return -1;
+}
+
+int32_t StringPiece::compare(StringPiece other) {
+ int32_t i = 0;
+ for (; i < length(); i++) {
+ if (i == other.length()) {
+ // this is longer
+ return 1;
+ }
+ char a = data()[i];
+ char b = other.data()[i];
+ if (a < b) {
+ return -1;
+ } else if (a > b) {
+ return 1;
+ }
+ }
+ if (i < other.length()) {
+ // other is longer
+ return -1;
+ }
+ return 0;
+}
+
U_EXPORT UBool U_EXPORT2
operator==(const StringPiece& x, const StringPiece& y) {
int32_t len = x.size();
diff --git a/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp b/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
index 60905821649..6769aa6b2cc 100644
--- a/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
@@ -18,6 +18,8 @@
* Internal function for sorting arrays.
*/
+#include <cstddef>
+
#include "unicode/utypes.h"
#include "cmemory.h"
#include "uarrsort.h"
diff --git a/Build/source/libs/icu/icu-src/source/common/uassert.h b/Build/source/libs/icu/icu-src/source/common/uassert.h
index f0f7a92574b..afd31eeffd9 100644
--- a/Build/source/libs/icu/icu-src/source/common/uassert.h
+++ b/Build/source/libs/icu/icu-src/source/common/uassert.h
@@ -31,6 +31,8 @@
#if U_DEBUG
# include <assert.h>
# define U_ASSERT(exp) assert(exp)
+#elif U_CPLUSPLUS_VERSION
+# define U_ASSERT(exp) (void)0
#else
# define U_ASSERT(exp)
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp b/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
index 4141c21938a..afcc4aaf4f9 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
@@ -248,7 +248,7 @@ u_charMirror(UChar32 c) {
return ubidi_getMirror(c);
}
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_getBidiPairedBracket(UChar32 c) {
return ubidi_getPairedBracket(c);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h b/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
index 70083892048..7a34870bd80 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
@@ -11,37 +11,37 @@
#ifdef INCLUDED_FROM_UBIDI_PROPS_C
-static const UVersionInfo ubidi_props_dataVersion={0xc,1,0,0};
+static const UVersionInfo ubidi_props_dataVersion={0xd,0,0,0};
-static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x663c,0x6058,0x28,0x620,0x8c0,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6502b6};
+static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x67ec,0x6200,0x28,0x620,0x8c8,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6502b6};
-static const uint16_t ubidi_props_trieIndex[12324]={
+static const uint16_t ubidi_props_trieIndex[12536]={
0x37c,0x384,0x38c,0x394,0x3ac,0x3b4,0x3bc,0x3c4,0x39c,0x3a4,0x39c,0x3a4,0x39c,0x3a4,0x39c,0x3a4,
0x39c,0x3a4,0x39c,0x3a4,0x3ca,0x3d2,0x3da,0x3e2,0x3ea,0x3f2,0x3ee,0x3f6,0x3fe,0x406,0x401,0x409,
0x39c,0x3a4,0x39c,0x3a4,0x411,0x419,0x39c,0x3a4,0x39c,0x3a4,0x39c,0x3a4,0x41f,0x427,0x42f,0x437,
0x43f,0x447,0x44f,0x457,0x45d,0x465,0x46d,0x475,0x47d,0x485,0x48b,0x493,0x49b,0x4a3,0x4ab,0x4b3,
-0x4bf,0x4bb,0x4c7,0x4cf,0x431,0x4df,0x4e7,0x4d7,0x4ef,0x4f1,0x4f9,0x501,0x509,0x50a,0x512,0x51a,
-0x522,0x50a,0x52a,0x52f,0x522,0x50a,0x537,0x53f,0x509,0x547,0x54f,0x501,0x554,0x39c,0x55c,0x560,
-0x568,0x56a,0x572,0x57a,0x509,0x582,0x58a,0x501,0x413,0x58e,0x512,0x501,0x39c,0x39c,0x596,0x39c,
-0x39c,0x59c,0x5a4,0x39c,0x39c,0x5a8,0x5b0,0x39c,0x5b4,0x5bb,0x39c,0x5c3,0x5cb,0x5d2,0x553,0x39c,
-0x39c,0x5da,0x5e2,0x5ea,0x5f2,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x5fa,0x39c,0x602,0x39c,0x39c,0x39c,
-0x60a,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x612,0x39c,0x39c,0x39c,0x61a,0x61a,0x516,0x516,0x39c,0x620,0x628,0x602,
-0x63e,0x630,0x630,0x646,0x64d,0x636,0x39c,0x39c,0x39c,0x655,0x65d,0x39c,0x39c,0x39c,0x65f,0x667,
-0x66f,0x39c,0x676,0x67e,0x39c,0x686,0x39c,0x39c,0x546,0x68e,0x554,0x696,0x413,0x69e,0x39c,0x6a5,
-0x39c,0x6aa,0x39c,0x39c,0x39c,0x39c,0x6b0,0x6b8,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x3ea,0x6c0,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x6c8,0x6d0,0x6d4,
-0x6ec,0x6f2,0x6dc,0x6e4,0x6fa,0x702,0x706,0x5d5,0x70e,0x716,0x71e,0x39c,0x726,0x667,0x667,0x667,
-0x736,0x73e,0x746,0x74e,0x753,0x75b,0x763,0x72e,0x76b,0x773,0x39c,0x779,0x780,0x667,0x667,0x667,
-0x667,0x580,0x786,0x667,0x78e,0x39c,0x39c,0x664,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,
-0x667,0x667,0x667,0x667,0x667,0x796,0x667,0x667,0x667,0x667,0x667,0x79c,0x667,0x667,0x7a4,0x7ac,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x667,0x667,0x667,0x667,0x7bc,0x7c4,0x7cc,0x7b4,
-0x7dc,0x7e4,0x7ec,0x7f3,0x7fa,0x802,0x806,0x7d4,0x667,0x667,0x667,0x80e,0x814,0x667,0x667,0x81a,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x822,0x39c,0x39c,0x39c,0x82a,0x39c,0x39c,0x39c,0x3ea,
-0x832,0x83a,0x66b,0x39c,0x83d,0x667,0x667,0x66a,0x667,0x667,0x667,0x667,0x667,0x667,0x844,0x84a,
-0x85a,0x852,0x39c,0x39c,0x862,0x60a,0x39c,0x3c3,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x667,0x829,
-0x3d1,0x39c,0x86a,0x872,0x39c,0x87a,0x882,0x39c,0x39c,0x39c,0x39c,0x886,0x39c,0x39c,0x65f,0x3c2,
+0x4bf,0x4bb,0x4c7,0x4cf,0x431,0x4df,0x4e6,0x4d7,0x4ee,0x4f0,0x4f8,0x500,0x508,0x509,0x511,0x519,
+0x521,0x509,0x529,0x52e,0x521,0x509,0x536,0x53e,0x508,0x546,0x54e,0x500,0x556,0x39c,0x55e,0x562,
+0x56a,0x56c,0x574,0x57c,0x508,0x584,0x58c,0x500,0x413,0x590,0x511,0x500,0x508,0x39c,0x598,0x39c,
+0x39c,0x59e,0x5a6,0x39c,0x39c,0x5aa,0x5b2,0x39c,0x5b6,0x5bd,0x39c,0x5c5,0x5cd,0x5d4,0x555,0x39c,
+0x39c,0x5dc,0x5e4,0x5ec,0x5f4,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x5fc,0x39c,0x604,0x39c,0x39c,0x39c,
+0x60c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x614,0x39c,0x39c,0x39c,0x61c,0x61c,0x515,0x515,0x39c,0x622,0x62a,0x604,
+0x640,0x632,0x632,0x648,0x64f,0x638,0x39c,0x39c,0x39c,0x657,0x65f,0x39c,0x39c,0x39c,0x661,0x669,
+0x671,0x39c,0x678,0x680,0x39c,0x688,0x56b,0x39c,0x545,0x690,0x556,0x698,0x413,0x6a0,0x39c,0x6a7,
+0x39c,0x6ac,0x39c,0x39c,0x39c,0x39c,0x6b2,0x6ba,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x3ea,0x6c2,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x6ca,0x6d2,0x6d6,
+0x6ee,0x6f4,0x6de,0x6e6,0x6fc,0x704,0x708,0x5d7,0x710,0x718,0x720,0x39c,0x728,0x669,0x669,0x669,
+0x738,0x740,0x748,0x750,0x755,0x75d,0x765,0x730,0x76d,0x775,0x39c,0x77b,0x782,0x669,0x669,0x669,
+0x669,0x582,0x788,0x669,0x790,0x39c,0x39c,0x666,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
+0x669,0x669,0x669,0x669,0x669,0x798,0x669,0x669,0x669,0x669,0x669,0x79e,0x669,0x669,0x7a6,0x7ae,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x669,0x669,0x669,0x7be,0x7c6,0x7ce,0x7b6,
+0x7de,0x7e6,0x7ee,0x7f5,0x7fc,0x804,0x808,0x7d6,0x669,0x669,0x669,0x810,0x816,0x669,0x669,0x81c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x824,0x39c,0x39c,0x39c,0x82c,0x39c,0x39c,0x39c,0x3ea,
+0x834,0x83c,0x840,0x39c,0x848,0x669,0x669,0x66c,0x669,0x669,0x669,0x669,0x669,0x669,0x84f,0x855,
+0x865,0x85d,0x39c,0x39c,0x86d,0x60c,0x39c,0x3c3,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x82b,
+0x3d1,0x39c,0x875,0x87d,0x39c,0x885,0x88d,0x39c,0x39c,0x39c,0x39c,0x891,0x39c,0x39c,0x661,0x3c2,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
@@ -54,7 +54,7 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x667,0x667,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x669,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
@@ -98,10 +98,10 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x86a,0x667,0x580,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x88d,0x39c,0x39c,0x892,0x56a,0x39c,0x39c,0x5b6,0x667,0x65e,0x39c,0x39c,0x89a,0x39c,0x39c,0x39c,
-0x8a2,0x8a9,0x630,0x8b1,0x39c,0x39c,0x58c,0x8b9,0x39c,0x8c1,0x8c8,0x39c,0x4ef,0x8cd,0x39c,0x508,
-0x39c,0x8d5,0x8dd,0x50a,0x39c,0x8e1,0x509,0x8e9,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x8f0,
+0x39c,0x39c,0x39c,0x39c,0x875,0x669,0x582,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x898,0x39c,0x39c,0x89d,0x56c,0x39c,0x39c,0x5b8,0x669,0x660,0x39c,0x39c,0x8a5,0x39c,0x39c,0x39c,
+0x8ad,0x8b4,0x632,0x8bc,0x39c,0x39c,0x58e,0x8c4,0x39c,0x8cc,0x8d3,0x39c,0x4ee,0x8d8,0x39c,0x507,
+0x39c,0x8e0,0x8e8,0x509,0x39c,0x8ec,0x508,0x8f4,0x39c,0x39c,0x39c,0x8fa,0x39c,0x39c,0x39c,0x901,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
@@ -141,9 +141,9 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x904,0x8f8,0x8fc,0x49b,0x49b,0x49b,0x49b,0x49b,
-0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x90c,0x49b,0x49b,0x49b,0x49b,0x914,0x918,
-0x920,0x928,0x92c,0x934,0x49b,0x49b,0x49b,0x938,0x940,0x38c,0x948,0x950,0x39c,0x39c,0x39c,0x958,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x915,0x909,0x90d,0x49b,0x49b,0x49b,0x49b,0x49b,
+0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x91d,0x49b,0x49b,0x49b,0x49b,0x925,0x929,
+0x931,0x939,0x93d,0x945,0x49b,0x49b,0x49b,0x949,0x951,0x38c,0x959,0x961,0x39c,0x39c,0x39c,0x969,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0xe70,0xe70,0xeb0,0xef0,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xf28,0xf68,0xfa8,0xfb8,0xff8,0x1004,
@@ -180,65 +180,65 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x960,0x39c,0x667,0x667,0x968,0x60a,0x39c,0x502,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x970,0x39c,0x39c,0x39c,0x977,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x971,0x39c,0x669,0x669,0x979,0x60c,0x39c,0x501,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x981,0x39c,0x39c,0x39c,0x988,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x97f,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
-0x987,0x98b,0x431,0x431,0x431,0x431,0x99b,0x993,0x431,0x9a3,0x431,0x431,0x9ab,0x9b1,0x431,0x431,
-0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x9c1,0x9b9,0x431,0x431,0x431,0x431,0x431,0x431,
-0x431,0x431,0x431,0x9c9,0x431,0x431,0x431,0x431,0x431,0x9d1,0x9d8,0x9de,0x431,0x431,0x431,0x431,
-0x509,0x9e6,0x9ed,0x9f4,0x413,0x9f7,0x39c,0x39c,0x4ef,0x9fe,0x39c,0xa04,0x413,0xa09,0xa11,0x39c,
-0x39c,0xa16,0x39c,0x39c,0x39c,0x39c,0x82a,0xa1e,0x413,0x58e,0x569,0xa25,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x9e6,0xa2d,0x39c,0x39c,0xa35,0xa3d,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xa41,0xa49,0x39c,
-0x39c,0xa51,0x569,0xa59,0x39c,0xa5f,0x39c,0x39c,0x5fa,0xa67,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xa6c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xa73,0x569,0xa7b,
-0xa7f,0xa87,0x39c,0xa8e,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xa95,0x39c,0x39c,0xaa3,0xa9d,0x39c,0x39c,0x39c,0xaab,0xab3,0x39c,0xab7,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x590,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xac4,0xabf,0x39c,
+0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x990,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
+0x998,0x99c,0x431,0x431,0x431,0x431,0x9ac,0x9a4,0x431,0x9b4,0x431,0x431,0x9bc,0x9c2,0x431,0x431,
+0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x9d2,0x9ca,0x431,0x431,0x431,0x431,0x431,0x431,
+0x431,0x431,0x431,0x9da,0x431,0x9e2,0x431,0x431,0x431,0x9e6,0x9ed,0x9f3,0x431,0x9f7,0x9ff,0x431,
+0x508,0xa07,0xa0e,0xa15,0x413,0xa18,0x39c,0x39c,0x4ee,0xa1f,0x39c,0xa25,0x413,0xa2a,0xa32,0x39c,
+0x39c,0xa37,0x39c,0x39c,0x39c,0x39c,0x82c,0xa3f,0x413,0x590,0x56b,0xa46,0x39c,0x39c,0x39c,0x39c,
+0x39c,0xa07,0xa4e,0x39c,0x39c,0xa56,0xa5e,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xa62,0xa6a,0x39c,
+0x39c,0xa72,0x56b,0xa7a,0x39c,0xa80,0x39c,0x39c,0x5fc,0xa88,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0xa8d,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xa94,0xa9c,0x39c,0x39c,0x39c,0xa9f,0x56b,0xaa7,
+0xaab,0xab3,0x39c,0xaba,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0xac1,0x39c,0x39c,0xacf,0xac9,0x39c,0x39c,0x39c,0xad7,0xadf,0x39c,0xae3,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x592,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xaf0,0xaeb,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xacc,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xad3,
-0x39c,0xad9,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0xaf8,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xaff,
+0x39c,0xb05,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0xa05,0x39c,0xadf,0x39c,0x39c,0xae7,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0xa26,0x39c,0xb0b,0x39c,0x39c,0xb13,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x523,0xaef,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x522,0xb1b,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xaf6,0xafe,0xb04,0x39c,0x39c,0x667,0x667,0xb0c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x667,0x667,0xb14,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb22,0xb2a,0xb30,0x39c,0x39c,0x669,0x669,0xb38,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x669,0x83f,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0xb1a,0x39c,0xb21,0x39c,0xb1d,0x39c,0xb24,0x39c,0xb2c,0xb30,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x3ea,0xb38,0x3ea,
-0xb3f,0xb46,0xb4e,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0xb3a,0x39c,0xb41,0x39c,0xb3d,0x39c,0xb44,0x39c,0xb4c,0xb50,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x3ea,0xb58,0x3ea,
+0xb5f,0xb66,0xb6e,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb56,0xb5e,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xad9,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0xb63,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb76,0xb7e,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb05,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0xb83,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x431,0x431,0x431,
-0x431,0x431,0x431,0xb6b,0x431,0xb73,0xb73,0xb7a,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
+0x431,0x431,0x431,0xb8b,0x431,0xb93,0xb93,0xb9a,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
-0x8fc,0x49b,0x49b,0x431,0x431,0x49b,0x49b,0x9de,0x431,0x431,0x431,0x431,0x431,0x49b,0x49b,0x49b,
-0x49b,0x49b,0x49b,0x49b,0xb82,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x667,0xb8a,0x667,
-0x667,0x66a,0xb8f,0xb93,0x844,0xb9b,0x3be,0x39c,0xba1,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x777,0x39c,0x39c,0x39c,0x39c,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,
-0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,0x667,
-0x667,0x667,0x667,0x844,0xba9,0x667,0x667,0x667,0x66a,0x667,0x667,0xbb1,0x66c,0xb8a,0x667,0xbb9,
-0x667,0xbc1,0x846,0x39c,0x39c,0x796,0x667,0x667,0xbc5,0x667,0xbcd,0xbd3,0x667,0x667,0x667,0x66a,
-0xbd8,0xbe7,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x90d,0x49b,0x49b,0x431,0x431,0x49b,0x49b,0x9f3,0x431,0x431,0x431,0x431,0x431,0x49b,0x49b,0x49b,
+0x49b,0x49b,0x49b,0x49b,0xba2,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x669,0xbaa,0x669,
+0x669,0x66c,0xbaf,0xbb3,0x84f,0xbbb,0x3be,0x39c,0xbc1,0x39c,0xbc6,0x39c,0x39c,0x39c,0x39c,0x39c,
+0x779,0x39c,0x39c,0x39c,0x39c,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
+0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
+0x669,0x669,0x669,0x66b,0x979,0x669,0x669,0x669,0x66c,0x669,0x669,0xbce,0x66e,0xbaa,0x669,0xbd6,
+0x669,0xbde,0xbe3,0x39c,0x39c,0x669,0x669,0x669,0xbeb,0x669,0x669,0x798,0x669,0x669,0x669,0x66c,
+0xbf2,0xbfa,0xc00,0xc05,0x39c,0x669,0x669,0x669,0x669,0xc0d,0x669,0x788,0xc15,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xbdf,0x39c,0x39c,0x39c,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xc1c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xbdf,0xbf7,0xbef,0xbef,
-0xbef,0xbf8,0xbf8,0xbf8,0xbf8,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0xc00,0xbf8,0xbf8,0xbf8,
-0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,
-0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,
-0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,
-0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0xbf8,0x37b,0x37b,0x37b,
+0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xc1c,0xc2c,0xc24,0xc24,
+0xc24,0xc2d,0xc2d,0xc2d,0xc2d,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0xc35,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0x37b,0x37b,0x37b,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,
9,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,
@@ -323,368 +323,379 @@ static const uint16_t ubidi_props_trieIndex[12324]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,
0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
-0x81,0x41,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,
+0x81,0x41,0x81,0x81,0x81,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,
0x4d,0x4d,0xd,0x8d,0x4d,0x8d,0x8d,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,5,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,
-0x4d,0xd,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0x4d,0xd,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
-0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,4,
+0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,
+0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,
+0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,
-0,0,0,4,0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,
-0xb1,0,0,0xb1,0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
+0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,
-0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,
+0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0,0xb1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,
-0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,
+0,0,0,0,0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,
-0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0,0,4,0,0,0,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,
+0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0xb1,0xb1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0,0,0xa0,0,0,0,0,0,0,0xa0,0,
-0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
+9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x310a,0xf20a,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
+0,0,0,4,0,0xb1,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0,
-0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,
+0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,
+0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,
+0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,
+0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,0,0xb1,0,0,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a,
-0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0,0,0,0,0,0,0,0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0,0,0,0,0xa,0,0,0,0xa,0xa,0,0,0,0,0,0,
+0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
-0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0,
-0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,
-0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0,0,0,
+0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,
-0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,
-0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-2,0,0,0,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,
-9,9,9,9,9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,
+0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa,
-0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,
-2,2,3,3,0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,
+0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0,2,2,2,2,
+2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9,9,9,9,9,
+9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,
+4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,
+2,2,2,2,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,
-0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,
-0,0xa,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
-0,0,0xa,0xa,0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,
-0,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,
-0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,
-0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,
-0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x900a,0x900a,0x900a,0x900a,0xa,0x900a,0xa,0x100a,0xa,
-0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,
-0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x900a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,
-0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,
-0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0,0,0,0,0,
+0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0,0,0,4,0,
+0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,
+0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
-0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa,0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,
-0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0x300a,0xf00a,0xa,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
+0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa,
-0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a,
-0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x900a,0x100a,0x100a,0x100a,0x100a,
-0x900a,0xa,0x100a,0x900a,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,
-0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa,
-0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x900a,0xa,
-0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,
-0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
+0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,
+0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,
+0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x900a,
+0x900a,0x900a,0x900a,0xa,0x900a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0xa,0xa,
+0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,
+0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,
+0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0xa,
+0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,
+0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,
-0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,
-0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,
+0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa,
+0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,
+0xa,0xa,0xa,0xa,0x900a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a,
+0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,
+0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,
+0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,
+0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a,0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,
+0xf20a,0xa,0xa,0x900a,0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0x100a,0x900a,0x300a,0xf00a,0x100a,0x100a,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,
+0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,
+0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0x900a,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,
+0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,
+0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,
+0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,
+0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0,0,0,0,0,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
-0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
-0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0xa,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xa,0,0,0,0,0,0xa,0xa,
-0,0,0,0,0,0xa,0xa,0xa,9,0xa,0xa,0xa,0xa,0,0,0,
-0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,
-0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,
+0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1,
+0xb1,0xb1,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
+0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,
+0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0,0,0,
+0,0xa,0xa,0xa,9,0xa,0xa,0xa,0xa,0,0,0,0x310a,0xf20a,0x310a,0xf20a,
+0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa,
0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0xb1,0,
-0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
-0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,
-0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0,0xb1,0,0,0,0,0xb1,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
+0,0,0,0,0,0,0xb1,0,0,0,0xb1,0,0,0,0,0xb1,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
+0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0,0,
+0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,1,1,1,1,1,1,1,1,1,3,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,1,0xb1,1,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,
+0,1,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4,
-0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,
+0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
+0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,
+0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa,
+0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,
-0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,
-2,2,2,2,2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x310a,
-0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
+0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3,
+6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa,
+0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x510a,
+0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,
-0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,
+0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0xb1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0xb1,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,1,1,1,1,
+0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xa,
+1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1,
-1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,
+0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,0x41,0x81,1,1,
-0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41,
-0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81,0x81,0x81,0x81,0x41,
-0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,1,1,1,1,
+0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81,
+0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81,
-0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,0x41,0x81,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0x81,0x81,0x81,
-0x81,0x41,0x41,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x4d,0x4d,0x8d,0x4d,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,5,5,5,5,5,5,5,5,5,5,0xd,0xd,
-0xd,0xd,0xd,0xd,0x6d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+1,1,1,1,1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,
+0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0x81,0x81,0x81,0x81,0x41,0x41,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x4d,0x4d,0x8d,0x4d,0xb1,0xb1,0xb1,0xb1,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,5,5,5,5,5,5,5,5,
+5,5,0xd,0xd,0xd,0xd,0xd,0xd,0x6d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,5,5,5,5,5,5,5,5,5,5,5,5,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0x4d,0x4d,0x4d,0x8d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,
+1,1,1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x8d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0x41,1,0x41,0x41,
+0x81,0x81,0x81,1,0x41,0x81,0x81,0x41,0x41,0x81,0x41,0x41,1,0x41,0x81,0x81,
+0x41,1,1,1,1,0x81,0x41,0x61,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xb1,
-0,0,0,0,0,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,
+0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,
-0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
-0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0,0xb1,0,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0,
+0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xa0,0xa0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
@@ -714,7 +725,7 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
@@ -725,9 +736,6 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -759,34 +767,39 @@ static const uint16_t ubidi_props_trieIndex[12324]={
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2,
-2,2,2,2,2,2,2,0xa,0xa,0,0,0,0,0,0,0,
+2,2,2,2,2,2,2,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0,0,0,
+0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x12,0x12,0xa,0xa,0xa,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,
0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
+0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0,0,0,0
+0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0,0,0,0
};
static const uint32_t ubidi_props_mirrors[40]={
@@ -795,7 +808,7 @@ static const uint32_t ubidi_props_mirrors[40]={
0x16029b8,0x4029f5,0x1802ade,0x1c02ae3,0x1a02ae4,0x1e02ae5,0xe02aee,0x602bfe
};
-static const uint8_t ubidi_props_jgArray[672]={
+static const uint8_t ubidi_props_jgArray[680]={
0x2d,0,3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6,
6,0x1f,0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0xb,0xb,0x37,0x37,0x37,
0,9,0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0,
@@ -837,7 +850,8 @@ static const uint8_t ubidi_props_jgArray[672]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,0xd,0x28,9,0x1d,0x16,0x18,0x2d,0x2d,0x1f,0x2c,0x39,0,6,0x21,
-0xb,0x55,0x1f,1,0x13,0,4,4,4,0x1f,0x2d,0x56,0x58,0x57,0,0
+0xb,0x55,0x1f,1,0x13,0,4,4,4,0x1f,0x2d,0x56,0x58,0x57,4,4,
+4,0xd,0xb,1,0x58,0xd,0xd,0x16
};
static const uint8_t ubidi_props_jgArray2[612]={
@@ -893,13 +907,13 @@ static const UBiDiProps ubidi_props_singleton={
ubidi_props_trieIndex+3568,
NULL,
3568,
- 8756,
+ 8968,
0x1a0,
0xe70,
0x0,
0x0,
0x110000,
- 0x3020,
+ 0x30f4,
NULL, 0, FALSE, FALSE, 0, NULL
},
{ 2,2,0,0 }
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidiimp.h b/Build/source/libs/icu/icu-src/source/common/ubidiimp.h
index 9f822396e59..a319964afda 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidiimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ubidiimp.h
@@ -26,6 +26,14 @@
/* miscellaneous definitions ---------------------------------------------- */
+// ICU-20853=ICU-20935 Solaris #defines CS and ES in sys/regset.h
+#ifdef CS
+# undef CS
+#endif
+#ifdef ES
+# undef ES
+#endif
+
typedef uint8_t DirProp;
typedef uint32_t Flags;
@@ -453,26 +461,26 @@ ubidi_getMemory(BidiMemoryForAllocation *pMemory, int32_t *pSize, UBool mayAlloc
/* additional macros used by ubidi_open() - always allow allocation */
#define getInitialDirPropsMemory(pBiDi, length) \
ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->dirPropsMemory, &(pBiDi)->dirPropsSize, \
- TRUE, (length))
+ true, (length))
#define getInitialLevelsMemory(pBiDi, length) \
ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \
- TRUE, (length))
+ true, (length))
#define getInitialOpeningsMemory(pBiDi, length) \
ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->openingsMemory, &(pBiDi)->openingsSize, \
- TRUE, (length)*sizeof(Opening))
+ true, (length)*sizeof(Opening))
#define getInitialParasMemory(pBiDi, length) \
ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->parasMemory, &(pBiDi)->parasSize, \
- TRUE, (length)*sizeof(Para))
+ true, (length)*sizeof(Para))
#define getInitialRunsMemory(pBiDi, length) \
ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \
- TRUE, (length)*sizeof(Run))
+ true, (length)*sizeof(Run))
#define getInitialIsolatesMemory(pBiDi, length) \
ubidi_getMemory((BidiMemoryForAllocation *)&(pBiDi)->isolatesMemory, &(pBiDi)->isolatesSize, \
- TRUE, (length)*sizeof(Isolate))
+ true, (length)*sizeof(Isolate))
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp b/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
index 5b0d5cf96a4..d56bf1518bf 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
@@ -89,7 +89,7 @@ struct UBiDiTransform {
uint32_t letters; /* letter option for ArabicShaping */
};
-U_DRAFT UBiDiTransform* U_EXPORT2
+U_CAPI UBiDiTransform* U_EXPORT2
ubiditransform_open(UErrorCode *pErrorCode)
{
UBiDiTransform *pBiDiTransform = NULL;
@@ -102,7 +102,7 @@ ubiditransform_open(UErrorCode *pErrorCode)
return pBiDiTransform;
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ubiditransform_close(UBiDiTransform *pBiDiTransform)
{
if (pBiDiTransform != NULL) {
@@ -434,7 +434,7 @@ findMatchingScheme(UBiDiLevel inLevel, UBiDiLevel outLevel,
return NULL;
}
-U_DRAFT uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
ubiditransform_transform(UBiDiTransform *pBiDiTransform,
const UChar *src, int32_t srcLength,
UChar *dest, int32_t destSize,
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp b/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
index aa4d6b544c1..a69c0a4b8b1 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
@@ -346,6 +346,13 @@ ubidi_writeReverse(const UChar *src, int32_t srcLength,
return u_terminateUChars(dest, destSize, destLength, pErrorCode);
}
+// Ticket 20907 - The optimizer in MSVC/Visual Studio versions below 16.4 has trouble with this
+// function on Windows ARM64. As a work-around, we disable optimizations for this function.
+// This work-around could/should be removed once the following versions of Visual Studio are no
+// longer supported: All versions of VS2017, and versions of VS2019 below 16.4.
+#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
+#pragma optimize( "", off )
+#endif
U_CAPI int32_t U_EXPORT2
ubidi_writeReordered(UBiDi *pBiDi,
UChar *dest, int32_t destSize,
@@ -638,3 +645,6 @@ ubidi_writeReordered(UBiDi *pBiDi,
return u_terminateUChars(saveDest, destCapacity, destCapacity-destSize, pErrorCode);
}
+#if (defined(_MSC_VER) && (defined(_M_ARM64)) && (_MSC_VER < 1924))
+#pragma optimize( "", on )
+#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/ucase.cpp b/Build/source/libs/icu/icu-src/source/common/ucase.cpp
index 4ec25a27a50..2b142f5bc24 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucase.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucase.cpp
@@ -707,6 +707,7 @@ ucase_isCaseSensitive(UChar32 c) {
#define is_r(c) ((c)=='r' || (c)=='R')
#define is_t(c) ((c)=='t' || (c)=='T')
#define is_u(c) ((c)=='u' || (c)=='U')
+#define is_y(c) ((c)=='y' || (c)=='Y')
#define is_z(c) ((c)=='z' || (c)=='Z')
/* separator? */
@@ -804,6 +805,18 @@ ucase_getCaseLocale(const char *locale) {
return UCASE_LOC_DUTCH;
}
}
+ } else if(c=='h') {
+ /* hy or hye? *not* hyw */
+ c=*locale++;
+ if(is_y(c)) {
+ c=*locale++;
+ if(is_e(c)) {
+ c=*locale;
+ }
+ if(is_sep(c)) {
+ return UCASE_LOC_ARMENIAN;
+ }
+ }
}
} else {
// uppercase c
@@ -868,6 +881,18 @@ ucase_getCaseLocale(const char *locale) {
return UCASE_LOC_DUTCH;
}
}
+ } else if(c=='H') {
+ /* hy or hye? *not* hyw */
+ c=*locale++;
+ if(is_y(c)) {
+ c=*locale++;
+ if(is_e(c)) {
+ c=*locale;
+ }
+ if(is_sep(c)) {
+ return UCASE_LOC_ARMENIAN;
+ }
+ }
}
}
return UCASE_LOC_ROOT;
@@ -1229,6 +1254,17 @@ toUpperOrTitle(UChar32 c,
*/
*pString=nullptr;
return 0; /* remove the dot (continue without output) */
+ } else if(c==0x0587) {
+ // See ICU-13416:
+ // Ö‡ ligature ech-yiwn
+ // uppercases to ÔµÕ’=ech+yiwn by default and in Western Armenian,
+ // but to ÔµÕŽ=ech+vew in Eastern Armenian.
+ if(loc==UCASE_LOC_ARMENIAN) {
+ *pString=upperNotTitle ? u"ÔµÕŽ" : u"ÔµÕ¾";
+ } else {
+ *pString=upperNotTitle ? u"ÔµÕ’" : u"ÔµÖ‚";
+ }
+ return 2;
} else {
/* no known conditional special case mapping, use a normal mapping */
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ucase.h b/Build/source/libs/icu/icu-src/source/common/ucase.h
index b0a453b87e8..a018f82b81b 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucase.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucase.h
@@ -56,7 +56,8 @@ enum {
UCASE_LOC_TURKISH,
UCASE_LOC_LITHUANIAN,
UCASE_LOC_GREEK,
- UCASE_LOC_DUTCH
+ UCASE_LOC_DUTCH,
+ UCASE_LOC_ARMENIAN
};
/**
@@ -117,7 +118,7 @@ ucase_addCaseClosure(UChar32 c, const USetAdder *sa);
* the string itself is added as well as part of its code points' closure.
* It must be length>=0.
*
- * @return TRUE if the string was found
+ * @return true if the string was found
*/
U_CFUNC UBool U_EXPORT2
ucase_addStringCaseClosure(const UChar *s, int32_t length, const USetAdder *sa);
diff --git a/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h b/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
index 68554b3130c..aead6d58d1e 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
@@ -11,36 +11,36 @@
#ifdef INCLUDED_FROM_UCASE_CPP
-static const UVersionInfo ucase_props_dataVersion={0xc,1,0,0};
+static const UVersionInfo ucase_props_dataVersion={0xd,0,0,0};
-static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x6fea,0x5fb8,0x687,0x172,0,0,0,0,0,0,0,0,0,0,3};
+static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x70c2,0x6098,0x683,0x172,0,0,0,0,0,0,0,0,0,0,3};
-static const uint16_t ucase_props_trieIndex[12244]={
+static const uint16_t ucase_props_trieIndex[12356]={
0x336,0x33e,0x346,0x34e,0x35c,0x364,0x36c,0x374,0x37c,0x384,0x38b,0x393,0x39b,0x3a3,0x3ab,0x3b3,
0x3b9,0x3c1,0x3c9,0x3d1,0x3d9,0x3e1,0x3e9,0x3f1,0x3f9,0x401,0x409,0x411,0x419,0x421,0x429,0x431,
0x439,0x441,0x449,0x451,0x459,0x461,0x469,0x471,0x46d,0x475,0x47a,0x482,0x489,0x491,0x499,0x4a1,
0x4a9,0x4b1,0x4b9,0x4c1,0x355,0x35d,0x4c6,0x4ce,0x4d3,0x4db,0x4e3,0x4eb,0x4ea,0x4f2,0x4f7,0x4ff,
-0x507,0x50e,0x512,0x355,0x355,0x336,0x522,0x51a,0x52a,0x52c,0x534,0x53c,0x540,0x541,0x549,0x551,
-0x559,0x541,0x561,0x566,0x559,0x541,0x56e,0x576,0x540,0x57e,0x586,0x58e,0x596,0x355,0x59e,0x355,
-0x5a6,0x4ec,0x5ae,0x58e,0x540,0x57e,0x5b5,0x58e,0x5bd,0x5bf,0x549,0x58e,0x355,0x355,0x5c7,0x355,
-0x355,0x5cd,0x5d4,0x355,0x355,0x5d8,0x5e0,0x355,0x5e4,0x5eb,0x355,0x5f2,0x5fa,0x601,0x609,0x355,
-0x355,0x60e,0x616,0x61e,0x626,0x62e,0x635,0x63d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x645,0x355,0x355,0x655,0x655,0x64d,
+0x507,0x50e,0x512,0x355,0x355,0x355,0x519,0x521,0x529,0x52b,0x533,0x53b,0x53f,0x540,0x548,0x550,
+0x558,0x540,0x560,0x565,0x558,0x540,0x56d,0x575,0x53f,0x57d,0x585,0x58d,0x595,0x355,0x59d,0x355,
+0x5a5,0x4ec,0x5ad,0x58d,0x53f,0x57d,0x5b4,0x58d,0x5bc,0x5be,0x548,0x58d,0x53f,0x355,0x5c6,0x355,
+0x355,0x5cc,0x5d3,0x355,0x355,0x5d7,0x5df,0x355,0x5e3,0x5ea,0x355,0x5f1,0x5f9,0x600,0x608,0x355,
+0x355,0x60d,0x615,0x61d,0x625,0x62d,0x634,0x63c,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x644,0x355,0x355,0x654,0x654,0x64c,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x65d,0x65d,0x54d,0x54d,0x355,0x663,0x66b,0x355,
-0x673,0x355,0x67b,0x355,0x682,0x688,0x355,0x355,0x355,0x690,0x355,0x355,0x355,0x355,0x355,0x355,
-0x697,0x355,0x69e,0x6a6,0x355,0x6ae,0x355,0x355,0x57d,0x6b6,0x6be,0x6c4,0x5bd,0x6cc,0x355,0x6d3,
-0x355,0x6d8,0x355,0x6de,0x6e6,0x6ea,0x6f2,0x6fa,0x702,0x707,0x70a,0x712,0x722,0x71a,0x732,0x72a,
-0x37c,0x73a,0x37c,0x742,0x745,0x37c,0x74d,0x37c,0x755,0x75d,0x765,0x76d,0x775,0x77d,0x785,0x78d,
-0x795,0x79c,0x355,0x7a4,0x7ac,0x355,0x7b4,0x7bc,0x7c4,0x7cc,0x7d4,0x7dc,0x7e4,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x65c,0x65c,0x54c,0x54c,0x355,0x662,0x66a,0x355,
+0x672,0x355,0x67a,0x355,0x681,0x687,0x355,0x355,0x355,0x68f,0x355,0x355,0x355,0x355,0x355,0x355,
+0x696,0x355,0x69d,0x6a5,0x355,0x6ad,0x6b5,0x355,0x57c,0x6b8,0x6c0,0x6c6,0x5bc,0x6ce,0x355,0x6d5,
+0x355,0x6da,0x355,0x6e0,0x6e8,0x6ec,0x6f4,0x6fc,0x704,0x709,0x70c,0x714,0x724,0x71c,0x734,0x72c,
+0x37c,0x73c,0x37c,0x744,0x747,0x37c,0x74f,0x37c,0x757,0x75f,0x767,0x76f,0x777,0x77f,0x787,0x78f,
+0x797,0x79e,0x355,0x7a6,0x7ae,0x355,0x7b6,0x7be,0x7c6,0x7ce,0x7d6,0x7de,0x7e6,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x7e7,0x7ed,0x7f3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x7e9,0x7ef,0x7f5,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x7fb,0x800,0x804,0x80c,0x37c,0x37c,0x37c,0x814,0x81c,0x823,0x355,0x828,0x355,0x355,0x355,0x830,
-0x355,0x678,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x53f,0x838,0x355,0x355,0x83f,0x355,0x355,0x847,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x7fd,0x802,0x806,0x80e,0x37c,0x37c,0x37c,0x816,0x81e,0x825,0x355,0x82a,0x355,0x355,0x355,0x832,
+0x355,0x677,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x53e,0x83a,0x355,0x355,0x841,0x355,0x355,0x849,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
@@ -96,12 +96,12 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x84f,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x851,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6de,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x855,0x355,0x85d,0x862,0x86a,0x355,0x355,0x872,0x87a,0x882,0x37c,0x887,0x88f,0x895,0x89d,0x89f,
-0x8a7,0x682,0x355,0x355,0x355,0x355,0x8ae,0x8b6,0x355,0x8be,0x8c5,0x355,0x52a,0x8ca,0x8d2,0x682,
-0x355,0x8d8,0x8e0,0x8e4,0x355,0x8ec,0x8f4,0x8fc,0x355,0x902,0x906,0x90e,0x91e,0x916,0x355,0x926,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6e0,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x857,0x355,0x85f,0x864,0x86c,0x355,0x355,0x874,0x87c,0x884,0x37c,0x889,0x891,0x897,0x89f,0x8a2,
+0x8aa,0x8b1,0x355,0x355,0x355,0x355,0x8b8,0x8c0,0x355,0x8c8,0x8cf,0x355,0x529,0x8d4,0x8dc,0x681,
+0x355,0x8e2,0x8ea,0x8ee,0x355,0x8f6,0x8fe,0x906,0x355,0x90c,0x910,0x918,0x928,0x920,0x355,0x930,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
@@ -141,9 +141,9 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x92e,0x355,0x355,0x355,0x355,0x936,0x5bd,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x938,0x355,0x355,0x355,0x355,0x940,0x5bc,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x93b,0x943,0x947,0x355,0x355,0x355,0x355,0x338,0x33e,0x94f,0x957,0x95e,0x4ec,0x355,0x355,0x966,
+0x945,0x94d,0x951,0x355,0x355,0x355,0x355,0x338,0x33e,0x959,0x961,0x968,0x4ec,0x355,0x355,0x970,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0xd58,0xd58,0xd70,0xdb0,0xdf0,0xe2c,0xe6c,0xeac,0xee4,0xf24,0xf64,0xfa4,0xfe4,0x1024,0x1064,0x10a4,
@@ -175,50 +175,50 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0xc96,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x96d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x975,0x355,0x355,0x355,0x978,0x355,0x355,0x355,
-0x355,0x980,0x986,0x98a,0x355,0x355,0x98e,0x992,0x998,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x977,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6b5,0x355,0x355,0x355,0x97f,0x355,0x355,0x355,
+0x355,0x987,0x98d,0x991,0x355,0x355,0x995,0x999,0x99f,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x9a0,0x9a4,0x355,0x355,0x355,0x355,0x355,0x9ac,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x9b4,0x9b8,0x9c0,0x9c4,0x355,0x9cb,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9d2,0x355,0x355,0x355,0x355,
-0x355,0x540,0x9d7,0x9de,0x5be,0x5bd,0x9e2,0x53d,0x355,0x9ea,0x9f1,0x355,0x9f7,0x5bd,0x9fc,0xa04,
-0x355,0x355,0xa09,0x355,0x355,0x355,0x355,0x338,0xa11,0x5bd,0x5bf,0xa19,0xa20,0x355,0x355,0x355,
-0x355,0x355,0x9d7,0xa28,0x355,0x355,0xa30,0xa38,0x355,0x355,0x355,0x355,0x355,0x355,0xa3c,0xa44,
-0x355,0x355,0xa4c,0x4b0,0x355,0x355,0xa54,0x355,0x355,0xa5a,0xa62,0x355,0x355,0x355,0x355,0x355,
-0x355,0xa67,0x355,0x355,0x355,0xa6f,0xa77,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xa7f,0x975,
-0xa87,0xa8b,0xa93,0x355,0xa9a,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0xaa1,0x355,0x355,0x936,0xaa9,0x355,0x355,0x355,0xaaf,0xab7,0x355,0xabb,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xac1,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x9a7,0x9ab,0x355,0x355,0x355,0x355,0x355,0x9b3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x9bb,0x9bf,0x9c7,0x9cb,0x355,0x9d2,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x9d8,0x355,0x355,0x355,0x355,0x9df,0x355,0x355,0x355,0x355,
+0x355,0x53f,0x9e4,0x9eb,0x5bd,0x5bc,0x9ef,0x53c,0x355,0x9f7,0x9fe,0x355,0xa04,0x5bc,0xa09,0xa11,
+0x355,0x355,0xa16,0x355,0x355,0x355,0x355,0x338,0xa1e,0x5bc,0x5be,0xa26,0xa2d,0x355,0x355,0x355,
+0x355,0x355,0x9e4,0xa35,0x355,0x355,0xa3d,0xa45,0x355,0x355,0x355,0x355,0x355,0x355,0xa49,0xa51,
+0x355,0x355,0xa59,0x4b0,0x355,0x355,0xa61,0x355,0x355,0xa67,0xa6f,0x355,0x355,0x355,0x355,0x355,
+0x355,0xa74,0x355,0x355,0x355,0xa7c,0xa84,0x355,0x355,0xa8c,0xa94,0x355,0x355,0x355,0xa97,0x6b5,
+0xa9f,0xaa3,0xaab,0x355,0xab2,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0xab9,0x355,0x355,0x940,0xac1,0x355,0x355,0x355,0xac7,0xacf,0x355,0xad3,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xad9,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xac7,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xadf,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xace,0x355,0xad4,0x57d,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xae6,0x355,0xaec,0x57c,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0xa6f,0xa77,0x355,0x355,0x355,0x355,0x355,0x355,0x678,0x355,0xada,0x355,0x355,
-0xae2,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0xa7c,0xa84,0x355,0x355,0x355,0x355,0x355,0x355,0x677,0x355,0xaf2,0x355,0x355,
+0xafa,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0xae3,0x57d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0xaff,0x57c,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0xaeb,0xaf3,0xaf9,0x355,0x355,0x355,0x355,0xb01,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0xb09,0xb11,0xb16,0xb1c,0xb24,0xb2c,0xb34,0xb0d,0xb3c,0xb44,
-0xb4c,0xb53,0xb0e,0xb09,0xb11,0xb0c,0xb1c,0xb0f,0xb0a,0xb5b,0xb0d,0xb63,0xb6b,0xb73,0xb7a,0xb66,
-0xb6e,0xb76,0xb7d,0xb69,0xb85,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x87a,0xb8d,0x87a,0xb94,0xb9b,0xba3,0x355,0x355,0x355,0x355,0x355,
+0x355,0xb07,0xb0f,0xb15,0x355,0x355,0x355,0x355,0xb1d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0xb25,0xb2d,0xb32,0xb38,0xb40,0xb48,0xb50,0xb29,0xb58,0xb60,
+0xb68,0xb6f,0xb2a,0xb25,0xb2d,0xb28,0xb38,0xb2b,0xb26,0xb77,0xb29,0xb7f,0xb87,0xb8f,0xb96,0xb82,
+0xb8a,0xb92,0xb99,0xb85,0xba1,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x87c,0xba9,0x87c,0xbb0,0xbb7,0xbbf,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0xbab,0xbb3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xbb7,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9c9,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0xbc7,0xbcf,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xbd3,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9d0,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0xbbf,0x355,0xbc7,0xbcf,0xbd6,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0xbdb,0x355,0xbe3,0xbeb,0xbf2,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xb05,
-0xbde,0xbde,0xbe4,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x9ec,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xb21,
+0xbfa,0xbfa,0xc00,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x9f9,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x540,0x87a,0x87a,0x87a,0x355,0x355,0x355,0x355,0x87a,0x87a,
-0x87a,0x87a,0x87a,0x87a,0x87a,0xbec,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
+0x355,0x355,0x355,0x355,0x355,0x355,0x53f,0x87c,0x87c,0x87c,0x355,0x355,0x355,0x355,0x87c,0x87c,
+0x87c,0x87c,0x87c,0x87c,0x87c,0xc08,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
0x355,0x355,0x355,0x355,0x355,0x355,0x335,0x335,0,0,0,0,0,0,0,0,
@@ -304,7 +304,7 @@ static const uint16_t ucase_props_trieIndex[12244]={
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,
-0,4,0,0,0,0,0,0,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
+0,4,0,0,0,0,0,4,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0x1719,1,0,0,0,
0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64,
@@ -342,352 +342,358 @@ static const uint16_t ucase_props_trieIndex[12244]={
0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,
4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0x64,0x64,0,0,0,0,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44,
-0x44,0x64,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,
-0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0,
+0,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44,
+0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,
+0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,0,0x64,0,0,0,0,4,4,4,
+4,4,4,4,4,0,0,0,0,0x64,0,0,0,0x44,0x64,0x44,
+0x44,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,
+0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,
+0,4,4,4,4,0,0,0,0,0,0,0,0,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0,0,
-0,4,4,4,4,4,4,4,4,0,0,0,0,0x64,0,0,
-0,0x44,0x64,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,
0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0,
+0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x64,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0,
+0,4,4,0,0,0,0,4,4,0,0,4,4,0x64,0,0,
+0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,4,4,4,4,4,0,4,4,0,0,0,
0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
+4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x44,0,0,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,4,0,0,0,0,4,4,0,0,4,
-4,0x64,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,0,0,0,4,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,
-4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x64,0,0,4,0,4,4,4,4,0,0,0,
-0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,4,0,
-0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,
+0x64,0,0,4,0,4,4,4,4,0,0,0,0,0,0,0,
+0,0x64,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
+0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
+0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,
+0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
+0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,4,
-4,0,4,4,4,0x64,0,0,0,0,0,0,0,0x64,0x64,0,
-0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
-4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,0,0,0,0,0,4,4,4,0,4,4,
+4,0x64,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,
+0,0,0,0,0,0,4,0,0,0,0,0,4,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,4,4,
-4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0x64,0,
-0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0,
+4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,0,0,4,4,4,4,0x64,0x64,0x64,4,4,0,0,0,
-0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0,
+0,0,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x64,0,0,0,0,0,0,0,4,4,4,0,4,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0,
+0,4,0,0,4,4,4,4,0x64,0x64,0x64,0,0,0,0,0,
+0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
+4,4,4,4,0x64,0x64,0x64,4,4,0,0,0,0,0,0,0,
+0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0,0x64,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x64,0x64,4,0x64,4,4,4,
-4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44,
-0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,
-0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+0,0,0,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0x64,
+0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0x64,0x64,4,0x64,4,4,4,4,4,0x64,0x64,
+0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44,0,0,0,0,
+0,4,4,4,4,4,4,4,4,4,4,4,0,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,4,4,4,0,4,4,4,4,4,0x64,
-0,0x64,0x64,0,0,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,0,0,0,0,4,4,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,0,0,4,4,0,
-0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,0,0,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
-0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
-0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0,0x179a,0,0,0,0,
-0,0x179a,0,0,0x17b9,0x17e9,0x1819,0x1849,0x1879,0x18a9,0x18d9,0x1909,0x1939,0x1969,0x1999,0x19c9,
-0x19f9,0x1a29,0x1a59,0x1a89,0x1ab9,0x1ae9,0x1b19,0x1b49,0x1b79,0x1ba9,0x1bd9,0x1c09,0x1c39,0x1c69,0x1c99,0x1cc9,
-0x1cf9,0x1d29,0x1d59,0x1d89,0x1db9,0x1de9,0x1e19,0x1e49,0x1e79,0x1ea9,0x1ed9,0x1f09,0x1f39,0x1f69,0x1f99,0,
-4,0x1fc9,0x1ff9,0x2029,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x44,0x44,0x44,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,
-0x205a,0x205a,0x205a,0x205a,0x207a,0x207a,0x207a,0x207a,0x207a,0x207a,0,0,0x2099,0x20c9,0x20f9,0x2129,
-0x2159,0x2189,0,0,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,
-0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,0x205a,
-0x205a,0x205a,0x205a,0x205a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,4,0x64,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,0,4,4,4,4,4,4,4,0,0,0,0,0,0,
-0,0,4,0,0,4,4,4,4,4,4,4,4,4,0x64,4,
-0,0,0,4,0,0,0,0,0,0x44,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,0,0,0,0,4,4,0,0,0,0,0,0,0,
-0,0,4,0,0,0,0,0,0,0x64,0x44,0x64,0,0,0,0,
+4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,
+0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x44,0x64,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
-4,4,4,4,4,4,4,0,0x64,0,4,0,0,4,4,4,
-4,4,4,4,4,0,0,0,0,0,0,4,4,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0,0,0x64,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,
-0x64,0x64,0x64,0x44,0x44,0x64,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,4,4,
-4,4,4,0,4,0,0,0,0,0,4,0,0x60,0,0,0,
+0,4,4,4,4,0,4,4,4,4,4,0x64,0,0x64,0x64,0,
+0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
+0,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,0,0,4,4,0,0,0,0,0,
+0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,4,0,0,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,
+0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,
+0x175a,0x175a,0x175a,0x175a,0x175a,0x175a,0,0x175a,0,0,0,0,0,0x175a,0,0,
+0x1779,0x17a9,0x17d9,0x1809,0x1839,0x1869,0x1899,0x18c9,0x18f9,0x1929,0x1959,0x1989,0x19b9,0x19e9,0x1a19,0x1a49,
+0x1a79,0x1aa9,0x1ad9,0x1b09,0x1b39,0x1b69,0x1b99,0x1bc9,0x1bf9,0x1c29,0x1c59,0x1c89,0x1cb9,0x1ce9,0x1d19,0x1d49,
+0x1d79,0x1da9,0x1dd9,0x1e09,0x1e39,0x1e69,0x1e99,0x1ec9,0x1ef9,0x1f29,0x1f59,0,4,0x1f89,0x1fb9,0x1fe9,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,
+0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,
+0x203a,0x203a,0x203a,0x203a,0x203a,0x203a,0,0,0x2059,0x2089,0x20b9,0x20e9,0x2119,0x2149,0,0,
+0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,
+0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,
+4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,0,
+0,4,4,4,4,4,4,4,4,4,0x64,4,0,0,0,4,
+0,0,0,0,0,0x44,0,0,0,0,0,0,0,0,0,0,
+0,0,0,4,4,4,4,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,4,4,0,0,4,4,0x60,0x64,4,4,0,0,
+0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x64,0,4,4,0,0,0,4,0,4,4,4,0x60,0x60,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
-4,4,4,4,0,0,4,0x64,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,0,0,0x21b9,0x21e9,0x2219,0x2249,0x2279,0x22c9,0x2319,0x2349,
-0x2379,0,0,0,0,0,0,0,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,
-0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,0x23aa,
-0x23aa,0x23aa,0x23aa,0,0,0x23aa,0x23aa,0x23aa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,
-0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0,0,0,0,0x64,0,0,0,0,0,0,0x44,0,0,0,
-0x44,0x44,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
+0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,
+0,0,0,4,4,0,0,0,0,0,0,0,0,0,4,0,
+0,0,0,0,0,0x64,0x44,0x64,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,
+0x64,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4,0,4,4,4,4,
+4,4,4,0,0x64,0,4,0,0,4,4,4,4,4,4,4,
+4,0,0,0,0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x44,0,0,0x64,0,0,0,0,0,0,0,4,0,0,0,0,
+0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,
+0x44,0x64,4,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x64,0,4,4,4,4,4,0,4,0,0,0,
+0,0,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,
+4,4,0x60,0x64,4,4,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x64,0,4,4,0,0,
+0,4,0,4,4,4,0x60,0x60,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,0x64,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,
+0x2179,0x21a9,0x21d9,0x2209,0x2239,0x2289,0x22d9,0x2309,0x2339,0,0,0,0,0,0,0,
+0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,
+0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0,0,0x236a,0x236a,0x236a,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,
+0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,
+0,0,0,0,0x44,0,0,0,0x44,0x44,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x25,5,5,5,5,5,
-5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,
-5,0x23c9,1,1,1,0x23e9,1,1,5,5,5,5,0x25,5,5,5,
-0x25,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x2409,1,1,1,1,1,1,1,0x21,1,
-1,1,1,5,5,5,5,5,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,
-0x64,0x64,0,0x44,0x64,0x64,0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x242a,0x2469,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0x25,5,5,5,5,5,5,5,5,1,1,1,1,1,
+1,1,1,1,1,1,1,1,5,0x2389,1,1,1,0x23a9,1,1,
+5,5,5,5,0x25,5,5,5,0x25,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x23c9,1,
+1,1,1,1,1,1,0x21,1,1,1,1,5,5,5,5,5,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0,0x44,0x64,0x64,0x44,0x64,
+0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,
+0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x24a9,0x2529,0x25a9,0x2629,0x26a9,0x2729,
-1,1,0x275a,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,
+0x23ea,0x2429,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
-0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,
-0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
-0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
-0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,
-0xfc12,0xfc12,0,0,0x27a9,0x411,0x2829,0x411,0x28d9,0x411,0x2989,0x411,0,0xfc12,0,0xfc12,
-0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,
-0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11,0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,
-0x3f11,0x3f11,0,0,0x2a39,0x2aa9,0x2b19,0x2b89,0x2bf9,0x2c69,0x2cd9,0x2d49,0x2dbb,0x2e2b,0x2e9b,0x2f0b,
-0x2f7b,0x2feb,0x305b,0x30cb,0x3139,0x31a9,0x3219,0x3289,0x32f9,0x3369,0x33d9,0x3449,0x34bb,0x352b,0x359b,0x360b,
-0x367b,0x36eb,0x375b,0x37cb,0x3839,0x38a9,0x3919,0x3989,0x39f9,0x3a69,0x3ad9,0x3b49,0x3bbb,0x3c2b,0x3c9b,0x3d0b,
-0x3d7b,0x3deb,0x3e5b,0x3ecb,0x411,0x411,0x3f39,0x3fb9,0x4029,0,0x40a9,0x4129,0xfc12,0xfc12,0xdb12,0xdb12,
-0x41db,4,0x4249,4,4,4,0x4299,0x4319,0x4389,0,0x4409,0x4489,0xd512,0xd512,0xd512,0xd512,
-0x453b,4,4,4,0x411,0x411,0x45a9,0x4659,0,0,0x4729,0x47a9,0xfc12,0xfc12,0xce12,0xce12,
-0,4,4,4,0x411,0x411,0x4859,0x4909,0x49d9,0x391,0x4a59,0x4ad9,0xfc12,0xfc12,0xc812,0xc812,
-0xfc92,4,4,4,0,0,0x4b89,0x4c09,0x4c79,0,0x4cf9,0x4d79,0xc012,0xc012,0xc112,0xc112,
-0x4e2b,4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,
-4,4,4,4,0,0,0,0,0,0,0,0,4,4,0,0,
-0,0,0,0,4,0,0,4,0,0,4,4,4,4,4,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,
-0,0x25,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x44,0x44,4,4,4,
-4,0x44,4,4,4,0x64,0x64,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,
-0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,0,0,2,0,0,1,2,2,2,1,1,
-2,2,2,1,0,2,0,0,0,2,2,2,2,2,0,0,
-0,0,0,0,2,0,0x4e9a,0,2,0,0x4eda,0x4f1a,2,2,0,1,
-2,2,0xe12,2,1,0,0,0,0,1,0,0,1,1,2,2,
-0,0,0,0,0,2,1,1,0x21,0x21,0,0,0,0,0xf211,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,
-0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,
-0,0,0,0x92,0xff91,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,
-0xd12,0xd12,0xd12,0xd12,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,
-0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1812,0x1812,0x1812,0x1812,
+0x92,0xff91,0x2469,0x24e9,0x2569,0x25e9,0x2669,0x26e9,1,1,0x271a,1,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411,
+0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
+0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411,
+0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
+0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
+0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x2769,0x411,0x27e9,0x411,
+0x2899,0x411,0x2949,0x411,0,0xfc12,0,0xfc12,0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411,
+0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11,
+0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,0x3f11,0x3f11,0,0,0x29f9,0x2a69,0x2ad9,0x2b49,
+0x2bb9,0x2c29,0x2c99,0x2d09,0x2d7b,0x2deb,0x2e5b,0x2ecb,0x2f3b,0x2fab,0x301b,0x308b,0x30f9,0x3169,0x31d9,0x3249,
+0x32b9,0x3329,0x3399,0x3409,0x347b,0x34eb,0x355b,0x35cb,0x363b,0x36ab,0x371b,0x378b,0x37f9,0x3869,0x38d9,0x3949,
+0x39b9,0x3a29,0x3a99,0x3b09,0x3b7b,0x3beb,0x3c5b,0x3ccb,0x3d3b,0x3dab,0x3e1b,0x3e8b,0x411,0x411,0x3ef9,0x3f79,
+0x3fe9,0,0x4069,0x40e9,0xfc12,0xfc12,0xdb12,0xdb12,0x419b,4,0x4209,4,4,4,0x4259,0x42d9,
+0x4349,0,0x43c9,0x4449,0xd512,0xd512,0xd512,0xd512,0x44fb,4,4,4,0x411,0x411,0x4569,0x4619,
+0,0,0x46e9,0x4769,0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4819,0x48c9,
+0x4999,0x391,0x4a19,0x4a99,0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b49,0x4bc9,
+0x4c39,0,0x4cb9,0x4d39,0xc012,0xc012,0xc112,0xc112,0x4deb,4,4,0,0,0,0,0,
+0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0,
+0,0,0,0,4,4,0,0,0,0,0,0,4,0,0,4,
+0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,4,
+4,4,4,4,4,4,4,4,0,0x25,0,0,0,0,0,0,
+0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,
+0x64,0x64,0x64,0x44,0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,
+0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,
+0,0,1,2,2,2,1,1,2,2,2,1,0,2,0,0,
+0,2,2,2,2,2,0,0,0,0,0,0,2,0,0x4e5a,0,
+2,0,0x4e9a,0x4eda,2,2,0,1,2,2,0xe12,2,1,0,0,0,
+0,1,0,0,1,1,2,2,0,0,0,0,0,2,1,1,
+0x21,0x21,0,0,0,0,0xf211,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,
+0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,
+0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0,0,0,0x92,0xff91,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,
+0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xf311,0xf311,0xf311,0xf311,
+0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
-0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,
+0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
-0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,
-0x92,0xff91,0x4f5a,0x4f7a,0x4f9a,0x4fb9,0x4fd9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x4ffa,0x501a,0x503a,
-0x505a,1,0x92,0xff91,1,0x92,0xff91,1,1,1,1,1,0x25,5,0x507a,0x507a,
-0x92,0xff91,0x92,0xff91,1,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91,0x44,
-0x44,0x44,0x92,0xff91,0,0,0,0,0,0,0,0,0,0,0,0,
-0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,
-0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,0x5099,
-0x5099,0x5099,0,0x5099,0,0,0,0,0,0x5099,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,0x92,0xff91,0x4f1a,0x4f3a,0x4f5a,0x4f79,0x4f99,0x92,
+0xff91,0x92,0xff91,0x92,0xff91,0x4fba,0x4fda,0x4ffa,0x501a,1,0x92,0xff91,1,0x92,0xff91,1,
+1,1,1,1,0x25,5,0x503a,0x503a,0x92,0xff91,0x92,0xff91,1,0,0,0,
+0,0,0,0x92,0xff91,0x92,0xff91,0x44,0x44,0x44,0x92,0xff91,0,0,0,0,
+0,0,0,0,0,0,0,0,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,
+0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,
+0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0,0x5059,0,0,0,0,
+0,0x5059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0,0,0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x60,0x60,
-0,4,4,4,4,4,0,0,0,0,0,4,0,0,0,0,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
+0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4,4,4,0,0,
+0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4,
+4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x507a,0x50b9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,
+4,4,4,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,5,5,0x44,0x44,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x64,0x64,4,4,4,4,0,0,0,0,0,
+0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,5,1,1,1,1,1,1,1,1,0x92,0xff91,0x92,
+0xff91,0x50fa,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,4,4,4,0x92,
+0xff91,0x511a,1,0,0x92,0xff91,0x92,0xff91,0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x513a,0x515a,0x517a,0x519a,0x513a,1,0x51ba,0x51da,0x51fa,0x521a,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0,0x92,0xff91,
+0xe812,0x523a,0x525a,0x92,0xff91,0x92,0xff91,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0,
+5,5,1,0,0,0,0,0,0,0,4,0,0,0,0x64,0,
+0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
+0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x64,4,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,0,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+0,0,0,0,0,0,4,4,4,4,4,0x64,0x64,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x50ba,0x50f9,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,4,4,4,0,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,5,5,0x44,0x44,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x44,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,5,1,1,1,
-1,1,1,1,1,0x92,0xff91,0x92,0xff91,0x513a,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,4,4,4,0x92,0xff91,0x515a,1,0,0x92,0xff91,0x92,0xff91,
-0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x517a,0x519a,
-0x51ba,0x51da,0x517a,1,0x51fa,0x521a,0x523a,0x525a,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0,0,0x92,0xff91,0xe812,0x527a,0x529a,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,1,0,0,0,0,0,0,0,4,0,
-0,0,0x64,0,0,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x64,4,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,0,0,0,0,0,0,4,4,
-4,4,4,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
-4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,4,4,
-4,4,0,0,4,4,0,0,0x60,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,
-0,4,4,0,0,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,4,0,0,0,0,0,0,0,0,4,0,0,0,
+0,0,0,4,4,4,4,4,4,4,4,4,4,4,0,0x60,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+0,0,0,0x64,0,0,4,4,4,4,0,0,4,4,0,0,
+0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0,0x44,0x44,0x64,0,0,0x44,0x44,0,0,0,0,0,0x44,0x44,
-0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
-0,0,0,4,4,0,0x64,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x52b9,1,1,1,1,
-1,1,1,4,5,5,5,5,1,1,1,1,1,1,1,1,
-0,0,0,0,0,0,0,0,0x52d9,0x5309,0x5339,0x5369,0x5399,0x53c9,0x53f9,0x5429,
-0x5459,0x5489,0x54b9,0x54e9,0x5519,0x5549,0x5579,0x55a9,0x5bd9,0x5c09,0x5c39,0x5c69,0x5c99,0x5cc9,0x5cf9,0x5d29,
-0x5d59,0x5d89,0x5db9,0x5de9,0x5e19,0x5e49,0x5e79,0x5ea9,0x5ed9,0x5f09,0x5f39,0x5f69,0x5f99,0x5fc9,0x5ff9,0x6029,
-0x6059,0x6089,0x60b9,0x60e9,0x6119,0x6149,0x6179,0x61a9,0x55d9,0x5609,0x5639,0x5669,0x5699,0x56c9,0x56f9,0x5729,
-0x5759,0x5789,0x57b9,0x57e9,0x5819,0x5849,0x5879,0x58a9,0x58d9,0x5909,0x5939,0x5969,0x5999,0x59c9,0x59f9,0x5a29,
-0x5a59,0x5a89,0x5ab9,0x5ae9,0x5b19,0x5b49,0x5b79,0x5ba9,0,0,0,0,0,4,0,0,
-4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x61d9,0x6259,0x62d9,0x6359,0x6409,0x64b9,0x6559,0,
-0,0,0,0,0,0,0,0,0,0,0,0x65f9,0x6679,0x66f9,0x6779,0x67f9,
-0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
-0,4,0,0,0,0,0,0,0,0,0,0,0,0x1012,0x1012,0x1012,
-0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
-0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,0,0,4,0,4,0xf011,0xf011,0xf011,
-0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,4,4,4,4,4,4,0,0,4,4,0,0,4,4,0,
0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
+0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x44,0,0x44,0x44,0x64,0,0,0x44,
+0x44,0,0,0,0,0,0x44,0x44,0,0x44,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,0,0,0,0,0,4,4,0,0x64,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x5279,1,1,1,1,1,1,1,4,5,5,5,5,
+1,1,1,1,1,1,1,1,1,4,4,4,0,0,0,0,
+0x5299,0x52c9,0x52f9,0x5329,0x5359,0x5389,0x53b9,0x53e9,0x5419,0x5449,0x5479,0x54a9,0x54d9,0x5509,0x5539,0x5569,
+0x5b99,0x5bc9,0x5bf9,0x5c29,0x5c59,0x5c89,0x5cb9,0x5ce9,0x5d19,0x5d49,0x5d79,0x5da9,0x5dd9,0x5e09,0x5e39,0x5e69,
+0x5e99,0x5ec9,0x5ef9,0x5f29,0x5f59,0x5f89,0x5fb9,0x5fe9,0x6019,0x6049,0x6079,0x60a9,0x60d9,0x6109,0x6139,0x6169,
+0x5599,0x55c9,0x55f9,0x5629,0x5659,0x5689,0x56b9,0x56e9,0x5719,0x5749,0x5779,0x57a9,0x57d9,0x5809,0x5839,0x5869,
+0x5899,0x58c9,0x58f9,0x5929,0x5959,0x5989,0x59b9,0x59e9,0x5a19,0x5a49,0x5a79,0x5aa9,0x5ad9,0x5b09,0x5b39,0x5b69,
+0,0,0,0,0,4,0,0,4,0,0,0,0,0x64,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x6199,0x6219,0x6299,0x6319,0x63c9,0x6479,0x6519,0,0,0,0,0,0,0,0,0,
+0,0,0,0x65b9,0x6639,0x66b9,0x6739,0x67b9,0,0,0,0,0,0,0x64,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,0,0,0,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,
+0x64,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
+0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,
+0,0,4,0,4,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
+0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,
+4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,
-0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
+0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x1412,0x1412,0x1412,0x1412,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
+0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,
-0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
-0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0,0,0,0,
+0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
+0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0,0,0,0,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,
-0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,
-0,4,4,4,0,4,4,0,0,0,0,0,4,0x64,4,0x44,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64,
-0,0,0,0,0,0x44,0x64,0,0,0,0,0,0,0,0,0,
+0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,4,4,4,
+0,4,4,0,0,0,0,0,4,0x64,4,0x44,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0,
+0,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x2012,0x2012,0x2012,0x2012,
0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,
-0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,
-0x2012,0x2012,0x2012,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
+0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xe011,0xe011,0xe011,0xe011,
0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
-0xe011,0xe011,0xe011,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,
-0x44,0x44,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,4,4,4,4,4,4,4,4,0x64,0,
+0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,
-0,0x64,0x64,0,0,4,0,0,0x44,0x44,0x44,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
-0,4,4,4,4,4,4,0x64,0x64,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,
+0,0,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,0,
-0x60,0,0,0,0,0,0,0,0,4,0x64,4,4,0,0,0,
+0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
+4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+4,4,4,0,0,0x64,0x64,0,0,4,0,0,0x44,0x44,0x44,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,4,4,0,0,4,0x60,0x64,4,0,0,0,0,
-0,0,4,0,0,0,0,4,4,4,4,4,4,0x64,0x64,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+4,4,4,4,0,4,4,4,4,4,4,0x64,0x64,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
-0,0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,
-0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x64,4,4,0,0x64,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0,
+0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,
+4,4,4,0,0x60,0,0,0,0,0,0,0,0,4,0x64,4,
+4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,4,4,0,0,4,0x60,0x64,4,
+0,0,0,0,0,0,4,0,0,0,0,4,4,4,4,4,
+4,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0x60,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,
+0x44,0,0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x64,4,4,0,0x64,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,4,4,4,4,4,0,4,0,0,0,0,4,
-4,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,4,4,4,4,4,0,4,0,
+0,0,0,4,4,0,0x64,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,4,4,0,0,0,0,0,0,4,4,0,0x64,
-0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
+0,0,0,0,0,0,4,4,4,4,0,0,0,0,0,0,
+4,4,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,4,4,4,4,4,4,4,0,0,4,0,0x64,
-0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,
-4,4,4,4,4,4,0x60,0x64,0,0,0,0,0,0,0,0,
+4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,
+0,4,0,0x64,0,0,0,0,0,0,0,0,0,0,0,4,
+0,4,0,0,4,4,4,4,4,4,0x60,0x64,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,4,4,0,0,4,4,4,4,0,4,
-4,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
-4,4,4,4,0,0x64,0x64,0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,
+0,0,0,0,0,0,0,0,0,4,4,4,0,0,4,4,
+4,4,0,4,4,4,4,0x64,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+4,4,4,4,4,4,4,4,0,0x64,0x64,0,0,0,0,0,
+0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
-0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0xf011,0xf011,0xf011,0xf011,
0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,0,0,0,
+0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,4,4,0x60,0x64,0,
+0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,4,4,0,0,4,4,0,0,0,0,0,4,4,4,
4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
@@ -712,7 +718,8 @@ static const uint16_t ucase_props_trieIndex[12244]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,0,4,0,0,0,0,
+4,4,4,4,4,4,4,4,4,4,0,4,4,0,0,0,
+0,0,0,0,0,0,0,0,0x60,0x60,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,4,0x64,0,0,0,0,0,
0,0x60,0x60,0x64,0x64,0x64,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,4,
@@ -784,7 +791,7 @@ static const uint16_t ucase_props_trieIndex[12244]={
0,0,0,0
};
-static const uint16_t ucase_props_exceptions[1671]={
+static const uint16_t ucase_props_exceptions[1667]={
0xc850,0x20,2,0x130,0x131,0x4810,0x20,0x841,0x6b,1,0x212a,0x841,0x73,1,0x17f,0x5c50,
0x20,2,0x130,0x131,0x844,0x4b,1,0x212a,0x844,0x53,1,0x17f,0x806,0x3bc,0x39c,0x841,
0xe5,1,0x212b,0x8c0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,0x1e9e,0x844,0xc5,1,
@@ -808,88 +815,88 @@ static const uint16_t ucase_props_exceptions[1671]={
0x43e,1,0x1c82,0x841,0x441,1,0x1c83,0x841,0x442,2,0x1c84,0x1c85,0x841,0x44a,1,0x1c86,
0x844,0x412,1,0x1c80,0x844,0x414,1,0x1c81,0x844,0x41e,1,0x1c82,0x844,0x421,1,0x1c83,
0x844,0x422,2,0x1c84,0x1c85,0x844,0x42a,1,0x1c86,0x841,0x463,1,0x1c87,0x844,0x462,1,
-0x1c87,0x880,0x2220,0x565,0x582,0x535,0x552,0x535,0x582,0x810,0x1c60,0x80c,0x1c90,0x10d0,0x80c,0x1c91,
-0x10d1,0x80c,0x1c92,0x10d2,0x80c,0x1c93,0x10d3,0x80c,0x1c94,0x10d4,0x80c,0x1c95,0x10d5,0x80c,0x1c96,0x10d6,
-0x80c,0x1c97,0x10d7,0x80c,0x1c98,0x10d8,0x80c,0x1c99,0x10d9,0x80c,0x1c9a,0x10da,0x80c,0x1c9b,0x10db,0x80c,
-0x1c9c,0x10dc,0x80c,0x1c9d,0x10dd,0x80c,0x1c9e,0x10de,0x80c,0x1c9f,0x10df,0x80c,0x1ca0,0x10e0,0x80c,0x1ca1,
-0x10e1,0x80c,0x1ca2,0x10e2,0x80c,0x1ca3,0x10e3,0x80c,0x1ca4,0x10e4,0x80c,0x1ca5,0x10e5,0x80c,0x1ca6,0x10e6,
-0x80c,0x1ca7,0x10e7,0x80c,0x1ca8,0x10e8,0x80c,0x1ca9,0x10e9,0x80c,0x1caa,0x10ea,0x80c,0x1cab,0x10eb,0x80c,
-0x1cac,0x10ec,0x80c,0x1cad,0x10ed,0x80c,0x1cae,0x10ee,0x80c,0x1caf,0x10ef,0x80c,0x1cb0,0x10f0,0x80c,0x1cb1,
-0x10f1,0x80c,0x1cb2,0x10f2,0x80c,0x1cb3,0x10f3,0x80c,0x1cb4,0x10f4,0x80c,0x1cb5,0x10f5,0x80c,0x1cb6,0x10f6,
-0x80c,0x1cb7,0x10f7,0x80c,0x1cb8,0x10f8,0x80c,0x1cb9,0x10f9,0x80c,0x1cba,0x10fa,0x80c,0x1cbd,0x10fd,0x80c,
-0x1cbe,0x10fe,0x80c,0x1cbf,0x10ff,0xa10,0x97d0,0xa10,8,0x806,0x13f0,0x13f0,0x806,0x13f1,0x13f1,0x806,
-0x13f2,0x13f2,0x806,0x13f3,0x13f3,0x806,0x13f4,0x13f4,0x806,0x13f5,0x13f5,0x806,0x432,0x412,0x806,0x434,
-0x414,0x806,0x43e,0x41e,0x806,0x441,0x421,0x846,0x442,0x422,1,0x1c85,0x846,0x442,0x422,1,
-0x1c84,0x806,0x44a,0x42a,0x806,0x463,0x462,0x806,0xa64b,0xa64a,0xc10,0xbc0,0x810,0x8a04,0x810,0xee6,
-0x810,0x8a38,0x841,0x1e61,1,0x1e9b,0x844,0x1e60,1,0x1e9b,0x880,0x2220,0x68,0x331,0x48,0x331,
-0x48,0x331,0x880,0x2220,0x74,0x308,0x54,0x308,0x54,0x308,0x880,0x2220,0x77,0x30a,0x57,0x30a,
-0x57,0x30a,0x880,0x2220,0x79,0x30a,0x59,0x30a,0x59,0x30a,0x880,0x2220,0x61,0x2be,0x41,0x2be,
-0x41,0x2be,0x806,0x1e61,0x1e60,0xc90,0x1dbf,0x20,0x73,0x73,0x880,0x2220,0x3c5,0x313,0x3a5,0x313,
-0x3a5,0x313,0x880,0x3330,0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x880,0x3330,0x3c5,
-0x313,0x301,0x3a5,0x313,0x301,0x3a5,0x313,0x301,0x880,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,
-0x3a5,0x313,0x342,0x890,8,0x220,0x1f00,0x3b9,0x1f08,0x399,0x890,8,0x220,0x1f01,0x3b9,0x1f09,
-0x399,0x890,8,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x890,8,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x890,
-8,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x890,8,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x890,8,0x220,
-0x1f06,0x3b9,0x1f0e,0x399,0x890,8,0x220,0x1f07,0x3b9,0x1f0f,0x399,0xc90,8,0x220,0x1f00,0x3b9,
-0x1f08,0x399,0xc90,8,0x220,0x1f01,0x3b9,0x1f09,0x399,0xc90,8,0x220,0x1f02,0x3b9,0x1f0a,0x399,
-0xc90,8,0x220,0x1f03,0x3b9,0x1f0b,0x399,0xc90,8,0x220,0x1f04,0x3b9,0x1f0c,0x399,0xc90,8,
-0x220,0x1f05,0x3b9,0x1f0d,0x399,0xc90,8,0x220,0x1f06,0x3b9,0x1f0e,0x399,0xc90,8,0x220,0x1f07,
-0x3b9,0x1f0f,0x399,0x890,8,0x220,0x1f20,0x3b9,0x1f28,0x399,0x890,8,0x220,0x1f21,0x3b9,0x1f29,
-0x399,0x890,8,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x890,8,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x890,
-8,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x890,8,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x890,8,0x220,
-0x1f26,0x3b9,0x1f2e,0x399,0x890,8,0x220,0x1f27,0x3b9,0x1f2f,0x399,0xc90,8,0x220,0x1f20,0x3b9,
-0x1f28,0x399,0xc90,8,0x220,0x1f21,0x3b9,0x1f29,0x399,0xc90,8,0x220,0x1f22,0x3b9,0x1f2a,0x399,
-0xc90,8,0x220,0x1f23,0x3b9,0x1f2b,0x399,0xc90,8,0x220,0x1f24,0x3b9,0x1f2c,0x399,0xc90,8,
-0x220,0x1f25,0x3b9,0x1f2d,0x399,0xc90,8,0x220,0x1f26,0x3b9,0x1f2e,0x399,0xc90,8,0x220,0x1f27,
-0x3b9,0x1f2f,0x399,0x890,8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x890,8,0x220,0x1f61,0x3b9,0x1f69,
-0x399,0x890,8,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x890,8,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x890,
-8,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x890,8,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x890,8,0x220,
-0x1f66,0x3b9,0x1f6e,0x399,0x890,8,0x220,0x1f67,0x3b9,0x1f6f,0x399,0xc90,8,0x220,0x1f60,0x3b9,
-0x1f68,0x399,0xc90,8,0x220,0x1f61,0x3b9,0x1f69,0x399,0xc90,8,0x220,0x1f62,0x3b9,0x1f6a,0x399,
-0xc90,8,0x220,0x1f63,0x3b9,0x1f6b,0x399,0xc90,8,0x220,0x1f64,0x3b9,0x1f6c,0x399,0xc90,8,
-0x220,0x1f65,0x3b9,0x1f6d,0x399,0xc90,8,0x220,0x1f66,0x3b9,0x1f6e,0x399,0xc90,8,0x220,0x1f67,
-0x3b9,0x1f6f,0x399,0x880,0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x890,9,0x220,0x3b1,0x3b9,
-0x391,0x399,0x880,0x2220,0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x880,0x2220,0x3b1,0x342,0x391,0x342,
-0x391,0x342,0x880,0x3330,0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0xc90,9,0x220,
-0x3b1,0x3b9,0x391,0x399,0x846,0x3b9,0x399,1,0x345,0x880,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,
-0x345,0x890,9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,
-0x880,0x2220,0x3b7,0x342,0x397,0x342,0x397,0x342,0x880,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,
-0x397,0x342,0x345,0xc90,9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x3330,0x3b9,0x308,0x300,0x399,
-0x308,0x300,0x399,0x308,0x300,0x8c0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,
-0x301,0x390,0x880,0x2220,0x3b9,0x342,0x399,0x342,0x399,0x342,0x880,0x3330,0x3b9,0x308,0x342,0x399,
-0x308,0x342,0x399,0x308,0x342,0x880,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,
-0x8c0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x880,0x2220,0x3c1,
-0x313,0x3a1,0x313,0x3a1,0x313,0x880,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x880,0x3330,0x3c5,
-0x308,0x342,0x3a5,0x308,0x342,0x3a5,0x308,0x342,0x880,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,
-0x890,9,0x220,0x3c9,0x3b9,0x3a9,0x399,0x880,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x880,
-0x2220,0x3c9,0x342,0x3a9,0x342,0x3a9,0x342,0x880,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,
-0x342,0x345,0xc90,9,0x220,0x3c9,0x3b9,0x3a9,0x399,0xc50,0x1d5d,1,0x3a9,0xc50,0x20bf,1,
-0x4b,0xc50,0x2046,1,0xc5,0xc10,0x29f7,0xc10,0xee6,0xc10,0x29e7,0xc10,0x2a2b,0xc10,0x2a28,0xc10,
-0x2a1c,0xc10,0x29fd,0xc10,0x2a1f,0xc10,0x2a1e,0xc10,0x2a3f,0xc10,0x1c60,0x841,0xa64b,1,0x1c88,0x844,
-0xa64a,1,0x1c88,0xc10,0x8a04,0xc10,0xa528,0xc10,0xa544,0xc10,0xa54f,0xc10,0xa54b,0xc10,0xa541,0xc10,
-0xa512,0xc10,0xa52a,0xc10,0xa515,0x810,0x3a0,0xc10,0xa543,0xc10,0x8a38,0xc10,0x3a0,0x806,0x13a0,0x13a0,
-0x806,0x13a1,0x13a1,0x806,0x13a2,0x13a2,0x806,0x13a3,0x13a3,0x806,0x13a4,0x13a4,0x806,0x13a5,0x13a5,0x806,
-0x13a6,0x13a6,0x806,0x13a7,0x13a7,0x806,0x13a8,0x13a8,0x806,0x13a9,0x13a9,0x806,0x13aa,0x13aa,0x806,0x13ab,
-0x13ab,0x806,0x13ac,0x13ac,0x806,0x13ad,0x13ad,0x806,0x13ae,0x13ae,0x806,0x13af,0x13af,0x806,0x13b0,0x13b0,
-0x806,0x13b1,0x13b1,0x806,0x13b2,0x13b2,0x806,0x13b3,0x13b3,0x806,0x13b4,0x13b4,0x806,0x13b5,0x13b5,0x806,
-0x13b6,0x13b6,0x806,0x13b7,0x13b7,0x806,0x13b8,0x13b8,0x806,0x13b9,0x13b9,0x806,0x13ba,0x13ba,0x806,0x13bb,
-0x13bb,0x806,0x13bc,0x13bc,0x806,0x13bd,0x13bd,0x806,0x13be,0x13be,0x806,0x13bf,0x13bf,0x806,0x13c0,0x13c0,
-0x806,0x13c1,0x13c1,0x806,0x13c2,0x13c2,0x806,0x13c3,0x13c3,0x806,0x13c4,0x13c4,0x806,0x13c5,0x13c5,0x806,
-0x13c6,0x13c6,0x806,0x13c7,0x13c7,0x806,0x13c8,0x13c8,0x806,0x13c9,0x13c9,0x806,0x13ca,0x13ca,0x806,0x13cb,
-0x13cb,0x806,0x13cc,0x13cc,0x806,0x13cd,0x13cd,0x806,0x13ce,0x13ce,0x806,0x13cf,0x13cf,0x806,0x13d0,0x13d0,
-0x806,0x13d1,0x13d1,0x806,0x13d2,0x13d2,0x806,0x13d3,0x13d3,0x806,0x13d4,0x13d4,0x806,0x13d5,0x13d5,0x806,
-0x13d6,0x13d6,0x806,0x13d7,0x13d7,0x806,0x13d8,0x13d8,0x806,0x13d9,0x13d9,0x806,0x13da,0x13da,0x806,0x13db,
-0x13db,0x806,0x13dc,0x13dc,0x806,0x13dd,0x13dd,0x806,0x13de,0x13de,0x806,0x13df,0x13df,0x806,0x13e0,0x13e0,
-0x806,0x13e1,0x13e1,0x806,0x13e2,0x13e2,0x806,0x13e3,0x13e3,0x806,0x13e4,0x13e4,0x806,0x13e5,0x13e5,0x806,
-0x13e6,0x13e6,0x806,0x13e7,0x13e7,0x806,0x13e8,0x13e8,0x806,0x13e9,0x13e9,0x806,0x13ea,0x13ea,0x806,0x13eb,
-0x13eb,0x806,0x13ec,0x13ec,0x806,0x13ed,0x13ed,0x806,0x13ee,0x13ee,0x806,0x13ef,0x13ef,0x880,0x2220,0x66,
-0x66,0x46,0x46,0x46,0x66,0x880,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x880,0x2220,0x66,
-0x6c,0x46,0x4c,0x46,0x6c,0x880,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,
-0x880,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0x8c0,1,0x2220,0x73,0x74,
-0x53,0x54,0x53,0x74,0xfb06,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x880,
-0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x880,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x880,
-0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x880,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x880,
-0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d
+0x1c87,0x4880,0x20,0x565,0x582,0x810,0x1c60,0x80c,0x1c90,0x10d0,0x80c,0x1c91,0x10d1,0x80c,0x1c92,0x10d2,
+0x80c,0x1c93,0x10d3,0x80c,0x1c94,0x10d4,0x80c,0x1c95,0x10d5,0x80c,0x1c96,0x10d6,0x80c,0x1c97,0x10d7,0x80c,
+0x1c98,0x10d8,0x80c,0x1c99,0x10d9,0x80c,0x1c9a,0x10da,0x80c,0x1c9b,0x10db,0x80c,0x1c9c,0x10dc,0x80c,0x1c9d,
+0x10dd,0x80c,0x1c9e,0x10de,0x80c,0x1c9f,0x10df,0x80c,0x1ca0,0x10e0,0x80c,0x1ca1,0x10e1,0x80c,0x1ca2,0x10e2,
+0x80c,0x1ca3,0x10e3,0x80c,0x1ca4,0x10e4,0x80c,0x1ca5,0x10e5,0x80c,0x1ca6,0x10e6,0x80c,0x1ca7,0x10e7,0x80c,
+0x1ca8,0x10e8,0x80c,0x1ca9,0x10e9,0x80c,0x1caa,0x10ea,0x80c,0x1cab,0x10eb,0x80c,0x1cac,0x10ec,0x80c,0x1cad,
+0x10ed,0x80c,0x1cae,0x10ee,0x80c,0x1caf,0x10ef,0x80c,0x1cb0,0x10f0,0x80c,0x1cb1,0x10f1,0x80c,0x1cb2,0x10f2,
+0x80c,0x1cb3,0x10f3,0x80c,0x1cb4,0x10f4,0x80c,0x1cb5,0x10f5,0x80c,0x1cb6,0x10f6,0x80c,0x1cb7,0x10f7,0x80c,
+0x1cb8,0x10f8,0x80c,0x1cb9,0x10f9,0x80c,0x1cba,0x10fa,0x80c,0x1cbd,0x10fd,0x80c,0x1cbe,0x10fe,0x80c,0x1cbf,
+0x10ff,0xa10,0x97d0,0xa10,8,0x806,0x13f0,0x13f0,0x806,0x13f1,0x13f1,0x806,0x13f2,0x13f2,0x806,0x13f3,
+0x13f3,0x806,0x13f4,0x13f4,0x806,0x13f5,0x13f5,0x806,0x432,0x412,0x806,0x434,0x414,0x806,0x43e,0x41e,
+0x806,0x441,0x421,0x846,0x442,0x422,1,0x1c85,0x846,0x442,0x422,1,0x1c84,0x806,0x44a,0x42a,
+0x806,0x463,0x462,0x806,0xa64b,0xa64a,0xc10,0xbc0,0x810,0x8a04,0x810,0xee6,0x810,0x8a38,0x841,0x1e61,
+1,0x1e9b,0x844,0x1e60,1,0x1e9b,0x880,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x880,0x2220,
+0x74,0x308,0x54,0x308,0x54,0x308,0x880,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x880,0x2220,
+0x79,0x30a,0x59,0x30a,0x59,0x30a,0x880,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,0x806,0x1e61,
+0x1e60,0xc90,0x1dbf,0x20,0x73,0x73,0x880,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x880,0x3330,
+0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x880,0x3330,0x3c5,0x313,0x301,0x3a5,0x313,
+0x301,0x3a5,0x313,0x301,0x880,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x890,
+8,0x220,0x1f00,0x3b9,0x1f08,0x399,0x890,8,0x220,0x1f01,0x3b9,0x1f09,0x399,0x890,8,0x220,
+0x1f02,0x3b9,0x1f0a,0x399,0x890,8,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x890,8,0x220,0x1f04,0x3b9,
+0x1f0c,0x399,0x890,8,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x890,8,0x220,0x1f06,0x3b9,0x1f0e,0x399,
+0x890,8,0x220,0x1f07,0x3b9,0x1f0f,0x399,0xc90,8,0x220,0x1f00,0x3b9,0x1f08,0x399,0xc90,8,
+0x220,0x1f01,0x3b9,0x1f09,0x399,0xc90,8,0x220,0x1f02,0x3b9,0x1f0a,0x399,0xc90,8,0x220,0x1f03,
+0x3b9,0x1f0b,0x399,0xc90,8,0x220,0x1f04,0x3b9,0x1f0c,0x399,0xc90,8,0x220,0x1f05,0x3b9,0x1f0d,
+0x399,0xc90,8,0x220,0x1f06,0x3b9,0x1f0e,0x399,0xc90,8,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x890,
+8,0x220,0x1f20,0x3b9,0x1f28,0x399,0x890,8,0x220,0x1f21,0x3b9,0x1f29,0x399,0x890,8,0x220,
+0x1f22,0x3b9,0x1f2a,0x399,0x890,8,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x890,8,0x220,0x1f24,0x3b9,
+0x1f2c,0x399,0x890,8,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x890,8,0x220,0x1f26,0x3b9,0x1f2e,0x399,
+0x890,8,0x220,0x1f27,0x3b9,0x1f2f,0x399,0xc90,8,0x220,0x1f20,0x3b9,0x1f28,0x399,0xc90,8,
+0x220,0x1f21,0x3b9,0x1f29,0x399,0xc90,8,0x220,0x1f22,0x3b9,0x1f2a,0x399,0xc90,8,0x220,0x1f23,
+0x3b9,0x1f2b,0x399,0xc90,8,0x220,0x1f24,0x3b9,0x1f2c,0x399,0xc90,8,0x220,0x1f25,0x3b9,0x1f2d,
+0x399,0xc90,8,0x220,0x1f26,0x3b9,0x1f2e,0x399,0xc90,8,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x890,
+8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x890,8,0x220,0x1f61,0x3b9,0x1f69,0x399,0x890,8,0x220,
+0x1f62,0x3b9,0x1f6a,0x399,0x890,8,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x890,8,0x220,0x1f64,0x3b9,
+0x1f6c,0x399,0x890,8,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x890,8,0x220,0x1f66,0x3b9,0x1f6e,0x399,
+0x890,8,0x220,0x1f67,0x3b9,0x1f6f,0x399,0xc90,8,0x220,0x1f60,0x3b9,0x1f68,0x399,0xc90,8,
+0x220,0x1f61,0x3b9,0x1f69,0x399,0xc90,8,0x220,0x1f62,0x3b9,0x1f6a,0x399,0xc90,8,0x220,0x1f63,
+0x3b9,0x1f6b,0x399,0xc90,8,0x220,0x1f64,0x3b9,0x1f6c,0x399,0xc90,8,0x220,0x1f65,0x3b9,0x1f6d,
+0x399,0xc90,8,0x220,0x1f66,0x3b9,0x1f6e,0x399,0xc90,8,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x880,
+0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x890,9,0x220,0x3b1,0x3b9,0x391,0x399,0x880,0x2220,
+0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x880,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x880,0x3330,
+0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0xc90,9,0x220,0x3b1,0x3b9,0x391,0x399,
+0x846,0x3b9,0x399,1,0x345,0x880,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x890,9,0x220,
+0x3b7,0x3b9,0x397,0x399,0x880,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x880,0x2220,0x3b7,0x342,
+0x397,0x342,0x397,0x342,0x880,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0xc90,
+9,0x220,0x3b7,0x3b9,0x397,0x399,0x880,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308,
+0x300,0x8c0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x880,0x2220,
+0x3b9,0x342,0x399,0x342,0x399,0x342,0x880,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308,
+0x342,0x880,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0x8c0,1,0x3330,0x3c5,
+0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x880,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1,
+0x313,0x880,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x880,0x3330,0x3c5,0x308,0x342,0x3a5,0x308,
+0x342,0x3a5,0x308,0x342,0x880,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x890,9,0x220,0x3c9,
+0x3b9,0x3a9,0x399,0x880,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x880,0x2220,0x3c9,0x342,0x3a9,
+0x342,0x3a9,0x342,0x880,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0xc90,9,
+0x220,0x3c9,0x3b9,0x3a9,0x399,0xc50,0x1d5d,1,0x3a9,0xc50,0x20bf,1,0x4b,0xc50,0x2046,1,
+0xc5,0xc10,0x29f7,0xc10,0xee6,0xc10,0x29e7,0xc10,0x2a2b,0xc10,0x2a28,0xc10,0x2a1c,0xc10,0x29fd,0xc10,
+0x2a1f,0xc10,0x2a1e,0xc10,0x2a3f,0xc10,0x1c60,0x841,0xa64b,1,0x1c88,0x844,0xa64a,1,0x1c88,0xc10,
+0x8a04,0xc10,0xa528,0xc10,0xa544,0xc10,0xa54f,0xc10,0xa54b,0xc10,0xa541,0xc10,0xa512,0xc10,0xa52a,0xc10,
+0xa515,0x810,0x3a0,0xc10,0xa543,0xc10,0x8a38,0xc10,0x3a0,0x806,0x13a0,0x13a0,0x806,0x13a1,0x13a1,0x806,
+0x13a2,0x13a2,0x806,0x13a3,0x13a3,0x806,0x13a4,0x13a4,0x806,0x13a5,0x13a5,0x806,0x13a6,0x13a6,0x806,0x13a7,
+0x13a7,0x806,0x13a8,0x13a8,0x806,0x13a9,0x13a9,0x806,0x13aa,0x13aa,0x806,0x13ab,0x13ab,0x806,0x13ac,0x13ac,
+0x806,0x13ad,0x13ad,0x806,0x13ae,0x13ae,0x806,0x13af,0x13af,0x806,0x13b0,0x13b0,0x806,0x13b1,0x13b1,0x806,
+0x13b2,0x13b2,0x806,0x13b3,0x13b3,0x806,0x13b4,0x13b4,0x806,0x13b5,0x13b5,0x806,0x13b6,0x13b6,0x806,0x13b7,
+0x13b7,0x806,0x13b8,0x13b8,0x806,0x13b9,0x13b9,0x806,0x13ba,0x13ba,0x806,0x13bb,0x13bb,0x806,0x13bc,0x13bc,
+0x806,0x13bd,0x13bd,0x806,0x13be,0x13be,0x806,0x13bf,0x13bf,0x806,0x13c0,0x13c0,0x806,0x13c1,0x13c1,0x806,
+0x13c2,0x13c2,0x806,0x13c3,0x13c3,0x806,0x13c4,0x13c4,0x806,0x13c5,0x13c5,0x806,0x13c6,0x13c6,0x806,0x13c7,
+0x13c7,0x806,0x13c8,0x13c8,0x806,0x13c9,0x13c9,0x806,0x13ca,0x13ca,0x806,0x13cb,0x13cb,0x806,0x13cc,0x13cc,
+0x806,0x13cd,0x13cd,0x806,0x13ce,0x13ce,0x806,0x13cf,0x13cf,0x806,0x13d0,0x13d0,0x806,0x13d1,0x13d1,0x806,
+0x13d2,0x13d2,0x806,0x13d3,0x13d3,0x806,0x13d4,0x13d4,0x806,0x13d5,0x13d5,0x806,0x13d6,0x13d6,0x806,0x13d7,
+0x13d7,0x806,0x13d8,0x13d8,0x806,0x13d9,0x13d9,0x806,0x13da,0x13da,0x806,0x13db,0x13db,0x806,0x13dc,0x13dc,
+0x806,0x13dd,0x13dd,0x806,0x13de,0x13de,0x806,0x13df,0x13df,0x806,0x13e0,0x13e0,0x806,0x13e1,0x13e1,0x806,
+0x13e2,0x13e2,0x806,0x13e3,0x13e3,0x806,0x13e4,0x13e4,0x806,0x13e5,0x13e5,0x806,0x13e6,0x13e6,0x806,0x13e7,
+0x13e7,0x806,0x13e8,0x13e8,0x806,0x13e9,0x13e9,0x806,0x13ea,0x13ea,0x806,0x13eb,0x13eb,0x806,0x13ec,0x13ec,
+0x806,0x13ed,0x13ed,0x806,0x13ee,0x13ee,0x806,0x13ef,0x13ef,0x880,0x2220,0x66,0x66,0x46,0x46,0x46,
+0x66,0x880,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x880,0x2220,0x66,0x6c,0x46,0x4c,0x46,
+0x6c,0x880,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x880,0x3330,0x66,0x66,
+0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,
+0xfb06,0x8c0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x880,0x2220,0x574,0x576,0x544,
+0x546,0x544,0x576,0x880,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x880,0x2220,0x574,0x56b,0x544,
+0x53b,0x544,0x56b,0x880,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x880,0x2220,0x574,0x56d,0x544,
+0x53d,0x544,0x56d
};
static const uint16_t ucase_props_unfold[370]={
@@ -929,13 +936,13 @@ static const UCaseProps ucase_props_singleton={
ucase_props_trieIndex+3288,
NULL,
3288,
- 8956,
+ 9068,
0x188,
0xd54,
0x0,
0x0,
0xe0800,
- 0x2fd0,
+ 0x3040,
NULL, 0, FALSE, FALSE, 0, NULL
},
{ 4,0,0,0 }
diff --git a/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp b/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
index 99e30c9fc69..ed72bda828f 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
@@ -687,13 +687,13 @@ void toUpper(uint32_t options,
if (change) {
ByteSinkUtil::appendTwoBytes(upper, sink);
if ((data & HAS_EITHER_DIALYTIKA) != 0) {
- sink.Append(u8"\u0308", 2); // restore or add a dialytika
+ sink.AppendU8(u8"\u0308", 2); // restore or add a dialytika
}
if (addTonos) {
- sink.Append(u8"\u0301", 2);
+ sink.AppendU8(u8"\u0301", 2);
}
while (numYpogegrammeni > 0) {
- sink.Append(u8"\u0399", 2);
+ sink.AppendU8(u8"\u0399", 2);
--numYpogegrammeni;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h b/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
index 7788fd93710..e17a0ae5a36 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
@@ -68,15 +68,15 @@ class BreakIterator; // unicode/brkiter.h
class ByteSink;
class Locale; // unicode/locid.h
-/** Returns TRUE if the options are valid. Otherwise FALSE, and sets an error. */
+/** Returns true if the options are valid. Otherwise false, and sets an error. */
inline UBool ustrcase_checkTitleAdjustmentOptions(uint32_t options, UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) { return FALSE; }
+ if (U_FAILURE(errorCode)) { return false; }
if ((options & U_TITLECASE_ADJUSTMENT_MASK) == U_TITLECASE_ADJUSTMENT_MASK) {
// Both options together.
errorCode = U_ILLEGAL_ARGUMENT_ERROR;
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
inline UBool ustrcase_isLNS(UChar32 c) {
diff --git a/Build/source/libs/icu/icu-src/source/common/uchar.cpp b/Build/source/libs/icu/icu-src/source/common/uchar.cpp
index b54cd626d10..eb14e4c75d5 100644
--- a/Build/source/libs/icu/icu-src/source/common/uchar.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uchar.cpp
@@ -556,7 +556,6 @@ u_charAge(UChar32 c, UVersionInfo versionArray) {
U_CAPI UScriptCode U_EXPORT2
uscript_getScript(UChar32 c, UErrorCode *pErrorCode) {
- uint32_t scriptX;
if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
return USCRIPT_INVALID_CODE;
}
@@ -564,48 +563,46 @@ uscript_getScript(UChar32 c, UErrorCode *pErrorCode) {
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return USCRIPT_INVALID_CODE;
}
- scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
+ uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
+ uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
- return (UScriptCode)scriptX;
+ return (UScriptCode)codeOrIndex;
} else if(scriptX<UPROPS_SCRIPT_X_WITH_INHERITED) {
return USCRIPT_COMMON;
} else if(scriptX<UPROPS_SCRIPT_X_WITH_OTHER) {
return USCRIPT_INHERITED;
} else {
- return (UScriptCode)scriptExtensions[scriptX&UPROPS_SCRIPT_MASK];
+ return (UScriptCode)scriptExtensions[codeOrIndex];
}
}
U_CAPI UBool U_EXPORT2
uscript_hasScript(UChar32 c, UScriptCode sc) {
- const uint16_t *scx;
uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
+ uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
- return sc==(UScriptCode)scriptX;
+ return sc==(UScriptCode)codeOrIndex;
}
- scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK);
+ const uint16_t *scx=scriptExtensions+codeOrIndex;
if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) {
scx=scriptExtensions+scx[1];
}
- if(sc>=USCRIPT_CODE_LIMIT) {
+ uint32_t sc32=sc;
+ if(sc32>0x7fff) {
/* Guard against bogus input that would make us go past the Script_Extensions terminator. */
return FALSE;
}
- while(sc>*scx) {
+ while(sc32>*scx) {
++scx;
}
- return sc==(*scx&0x7fff);
+ return sc32==(*scx&0x7fff);
}
U_CAPI int32_t U_EXPORT2
uscript_getScriptExtensions(UChar32 c,
UScriptCode *scripts, int32_t capacity,
UErrorCode *pErrorCode) {
- uint32_t scriptX;
- int32_t length;
- const uint16_t *scx;
- uint16_t sx;
if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
return 0;
}
@@ -613,21 +610,23 @@ uscript_getScriptExtensions(UChar32 c,
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
- scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
+ uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK;
+ uint32_t codeOrIndex=uprops_mergeScriptCodeOrIndex(scriptX);
if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) {
if(capacity==0) {
*pErrorCode=U_BUFFER_OVERFLOW_ERROR;
} else {
- scripts[0]=(UScriptCode)scriptX;
+ scripts[0]=(UScriptCode)codeOrIndex;
}
return 1;
}
- scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK);
+ const uint16_t *scx=scriptExtensions+codeOrIndex;
if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) {
scx=scriptExtensions+scx[1];
}
- length=0;
+ int32_t length=0;
+ uint16_t sx;
do {
sx=*scx++;
if(length<capacity) {
diff --git a/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h b/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
index 10c25b3048e..9a78918204f 100644
--- a/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
@@ -11,145 +11,146 @@
#ifdef INCLUDED_FROM_UCHAR_C
-static const UVersionInfo dataVersion={0xc,1,0,0};
+static const UVersionInfo dataVersion={0xd,0,0,0};
-static const uint16_t propsTrie_index[21968]={
-0x45d,0x465,0x46d,0x475,0x48d,0x495,0x49d,0x4a5,0x4ad,0x4b5,0x4bb,0x4c3,0x4cb,0x4d3,0x4db,0x4e3,
-0x4e9,0x4f1,0x4f9,0x501,0x504,0x50c,0x514,0x51c,0x524,0x52c,0x528,0x530,0x538,0x540,0x545,0x54d,
-0x555,0x55d,0x561,0x569,0x571,0x579,0x581,0x589,0x585,0x58d,0x592,0x59a,0x5a0,0x5a8,0x5b0,0x5b8,
-0x5c0,0x5c8,0x5d0,0x5d8,0x5dd,0x5e5,0x5e8,0x5f0,0x5f8,0x600,0x606,0x60e,0x60d,0x615,0x61d,0x625,
-0x635,0x62d,0x63d,0x645,0x47d,0x655,0x65d,0x64d,0x66d,0x66f,0x677,0x665,0x687,0x68d,0x695,0x67f,
-0x6a5,0x6ab,0x6b3,0x69d,0x6c3,0x6c9,0x6d1,0x6bb,0x6e1,0x6e7,0x6ef,0x6d9,0x6ff,0x707,0x70f,0x6f7,
-0x71f,0x725,0x72d,0x717,0x73d,0x743,0x74b,0x735,0x75b,0x760,0x768,0x753,0x778,0x77f,0x787,0x770,
-0x609,0x78f,0x797,0x47d,0x79f,0x7a6,0x7ae,0x47d,0x7b6,0x7be,0x7c6,0x7cb,0x7d3,0x7da,0x7e2,0x47d,
-0x5c8,0x7ea,0x7f2,0x7fa,0x802,0x555,0x812,0x80a,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x81a,0x5c8,0x822,0x826,0x82e,0x5c8,0x834,0x5c8,0x83a,0x842,0x84a,0x555,0x555,0x852,
-0x85a,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x85f,0x867,0x5c8,0x5c8,0x86f,0x877,0x87f,0x887,0x88f,0x5c8,0x897,0x89f,0x8a7,
-0x8b7,0x5c8,0x8bf,0x8c1,0x8c9,0x8af,0x5c8,0x8cc,0x8e0,0x8d4,0x8dc,0x8e8,0x5c8,0x8f0,0x8f6,0x8fe,
-0x906,0x5c8,0x916,0x91e,0x926,0x90e,0x47d,0x47d,0x936,0x939,0x941,0x92e,0x951,0x949,0x5c8,0x958,
-0x5c8,0x967,0x960,0x96f,0x977,0x97b,0x983,0x98b,0x4fd,0x993,0x996,0x99c,0x9a3,0x996,0x524,0x9ab,
-0x4ad,0x4ad,0x4ad,0x4ad,0x9b3,0x4ad,0x4ad,0x4ad,0x9c3,0x9cb,0x9d3,0x9db,0x9e3,0x9e7,0x9ef,0x9bb,
-0xa07,0xa0f,0x9f7,0x9ff,0xa17,0xa1f,0xa27,0xa2f,0xa47,0xa37,0xa3f,0xa4f,0xa57,0xa66,0xa6b,0xa5e,
-0xa73,0xa73,0xa73,0xa73,0xa73,0xa73,0xa73,0xa73,0xa7b,0xa83,0x8fe,0xa86,0xa8e,0xa95,0xa9a,0xaa2,
-0x8fe,0xaa9,0xaa8,0xab9,0xabc,0x8fe,0x8fe,0xab1,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0xacb,0xad3,0xac3,
-0x8fe,0x8fe,0x8fe,0xad8,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0xade,0xae6,0x8fe,0xaee,0xaf5,
-0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0xa73,0xa73,0xa73,0xa73,0xafd,0xa73,0xb04,0xb0b,
-0xa73,0xa73,0xa73,0xa73,0xa73,0xa73,0xa73,0xa73,0x8fe,0xb13,0xb1a,0xb1e,0xb24,0x8fe,0x8fe,0x8fe,
-0x555,0xb34,0xb2c,0xb3c,0x4ad,0x4ad,0x4ad,0xb44,0x4fd,0xb4c,0x5c8,0xb52,0xb62,0xb5a,0xb5a,0x524,
-0xb6a,0xb72,0xb7a,0x47d,0xb82,0x8fe,0x8fe,0xb89,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0xb91,0xb97,
-0xba7,0xb9f,0x609,0x5c8,0xbaf,0x85a,0x5c8,0xbb7,0xbbf,0xbc3,0x5c8,0x5c8,0xbc8,0xbd0,0x8fe,0xbd8,
-0xaa3,0xbe0,0xbe6,0x8fe,0xbe0,0xbee,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,
-0xbf6,0x5c8,0x5c8,0x5c8,0xbfe,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0xc04,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc09,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8cc,0x8fe,0x8fe,
-0xc11,0x5c8,0xc14,0x5c8,0xc1c,0xc22,0xc2a,0xc32,0xc37,0x5c8,0x5c8,0xc3b,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc42,0x5c8,0xc49,0xc4f,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc57,0x5c8,0x5c8,0x5c8,0xc5f,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc61,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc68,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0xc6f,0x5c8,0x5c8,0x5c8,0xc76,0xc7e,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc83,0x5c8,0x5c8,0xc8b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc8f,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc92,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc95,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0xc9b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0xca3,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0xca8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xcad,0x5c8,0x5c8,0x5c8,0xcb2,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0xcba,0xcc1,0xcc5,0x5c8,0x5c8,0x5c8,0xccc,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xcd2,
-0xce2,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0xcda,0x8fe,0xcea,0x96f,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0xcef,0xcf7,0x4ad,0xd07,0xcff,0x5c8,0x5c8,0xd0f,0xd17,0xd27,0x4ad,0xd2c,0xd34,0xd3a,0xd42,0xd1f,
-0xd4a,0xd52,0x5c8,0xd5a,0xd6a,0xd6d,0xd62,0xd75,0x61d,0xd7d,0xd84,0x8c0,0x66d,0xd94,0xd8c,0xd9c,
-0x5c8,0xda4,0xdac,0xdb4,0x5c8,0xdbc,0xdc4,0xdcc,0xdd4,0xddc,0xde0,0xde8,0x4fd,0x4fd,0x5c8,0xdf0,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xdf8,0xe04,0xdfc,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,
-0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0x5c8,0x5c8,0x5c8,0xe1c,0x5c8,0xccd,0xe23,0xe28,
-0x5c8,0x5c8,0x5c8,0xe30,0x5c8,0x5c8,0x8cb,0x47d,0xe46,0xe36,0xe3e,0x5c8,0x5c8,0xe4e,0xe56,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xe5b,0xe63,0x5c8,0xe67,0x5c8,0xe6d,0xe71,
-0xe79,0xe81,0xe88,0xe90,0x5c8,0x5c8,0x5c8,0xe96,0xeae,0x46d,0xeb6,0xebe,0xec3,0x8e0,0xe9e,0xea6,
-0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,
-0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,0xe0c,
-0x11f4,0x11f4,0x1234,0x1274,0x12b4,0x12ec,0x132c,0x136c,0x13a4,0x13e4,0x1410,0x1450,0x1490,0x14a0,0x14e0,0x1514,
-0x1554,0x1584,0x15c4,0x1604,0x1614,0x1648,0x1680,0x16c0,0x1700,0x1740,0x1774,0x17a0,0x17e0,0x1818,0x1834,0x1874,
+static const uint16_t propsTrie_index[22276]={
+0x46d,0x475,0x47d,0x485,0x49d,0x4a5,0x4ad,0x4b5,0x4bd,0x4c5,0x4cb,0x4d3,0x4db,0x4e3,0x4eb,0x4f3,
+0x4f9,0x501,0x509,0x511,0x514,0x51c,0x524,0x52c,0x534,0x53c,0x538,0x540,0x548,0x550,0x555,0x55d,
+0x565,0x56d,0x571,0x579,0x581,0x589,0x591,0x599,0x595,0x59d,0x5a2,0x5aa,0x5b0,0x5b8,0x5c0,0x5c8,
+0x5d0,0x5d8,0x5e0,0x5e8,0x5ed,0x5f5,0x5f8,0x600,0x608,0x610,0x616,0x61e,0x61d,0x625,0x62d,0x635,
+0x645,0x63d,0x64d,0x655,0x48d,0x665,0x66b,0x65d,0x67b,0x67d,0x685,0x673,0x695,0x69b,0x6a3,0x68d,
+0x6b3,0x6b9,0x6c1,0x6ab,0x6d1,0x6d7,0x6df,0x6c9,0x6ef,0x6f5,0x6fd,0x6e7,0x70d,0x715,0x71d,0x705,
+0x72d,0x733,0x73b,0x725,0x74b,0x751,0x759,0x743,0x769,0x76e,0x776,0x761,0x786,0x78d,0x795,0x77e,
+0x619,0x79d,0x7a5,0x48d,0x7ad,0x7b4,0x7bc,0x48d,0x7c4,0x7cc,0x7d4,0x7d9,0x7e1,0x7e8,0x7f0,0x48d,
+0x5d8,0x7f8,0x800,0x808,0x810,0x565,0x820,0x818,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x828,0x5d8,0x830,0x834,0x83c,0x5d8,0x842,0x5d8,0x848,0x850,0x858,0x565,0x565,0x860,
+0x868,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x86d,0x875,0x5d8,0x5d8,0x87d,0x885,0x88d,0x895,0x89d,0x5d8,0x8a5,0x8ad,0x8b5,
+0x8c5,0x5d8,0x8cd,0x8cf,0x8d7,0x8bd,0x5d8,0x8da,0x8ee,0x8e2,0x8ea,0x8f6,0x5d8,0x8fe,0x904,0x90c,
+0x914,0x5d8,0x924,0x92c,0x934,0x91c,0x944,0x48d,0x94c,0x94f,0x957,0x93c,0x967,0x95f,0x5d8,0x96e,
+0x5d8,0x97d,0x976,0x985,0x98d,0x991,0x999,0x9a1,0x50d,0x9a9,0x9ac,0x9b2,0x9b9,0x9ac,0x534,0x9c1,
+0x4bd,0x4bd,0x4bd,0x4bd,0x9c9,0x4bd,0x4bd,0x4bd,0x9d9,0x9e1,0x9e9,0x9f1,0x9f9,0x9fd,0xa05,0x9d1,
+0xa1d,0xa25,0xa0d,0xa15,0xa2d,0xa35,0xa3d,0xa45,0xa5d,0xa4d,0xa55,0xa65,0xa6d,0xa7c,0xa81,0xa74,
+0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa91,0xa99,0x90c,0xa9c,0xaa4,0xaab,0xab0,0xab8,
+0x90c,0xabf,0xabe,0xacf,0xad2,0x90c,0x90c,0xac7,0x90c,0x90c,0x90c,0x90c,0x90c,0xae1,0xae9,0xad9,
+0x90c,0x90c,0x90c,0xaee,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xaf4,0xafc,0x90c,0xb04,0xb0b,
+0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xa89,0xa89,0xa89,0xa89,0xb13,0xa89,0xb1a,0xb21,
+0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0x90c,0xb29,0xb30,0xb34,0xb3a,0x90c,0x90c,0x90c,
+0x565,0xb4a,0xb42,0xb52,0x4bd,0x4bd,0x4bd,0xb5a,0x50d,0xb62,0x5d8,0xb68,0xb78,0xb70,0xb70,0x534,
+0xb80,0xb88,0xb90,0x48d,0xb98,0x90c,0x90c,0xb9f,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xba7,0xbad,
+0xbbd,0xbb5,0x619,0x5d8,0xbc5,0x868,0x5d8,0xbcd,0xbd5,0xbd9,0x5d8,0x5d8,0xbde,0x5d8,0x90c,0xbe5,
+0xab9,0xbed,0xbf3,0x90c,0xbed,0xbfb,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
+0xc03,0x5d8,0x5d8,0x5d8,0xc0b,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0xc11,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc16,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x90c,0x90c,
+0xc1e,0x5d8,0xc21,0x5d8,0xc29,0xc2f,0xc37,0xc3f,0xc44,0x5d8,0x5d8,0xc48,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc4f,0x5d8,0xc56,0xc5c,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc64,0x5d8,0x5d8,0x5d8,0xc6c,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc6e,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc75,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0xc7c,0x5d8,0x5d8,0x5d8,0xc83,0xc8b,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc90,0x5d8,0x5d8,0xc98,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc9c,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc9f,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xca2,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0xca8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0xcb0,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0xcb5,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xcba,0x5d8,0x5d8,0x5d8,0xcbf,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0xcc7,0xcce,0xcd2,0x5d8,0x5d8,0x5d8,0xcd9,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8ce,
+0xce7,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0xcdf,0x90c,0xcef,0x985,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0xcf4,0xcfc,0x4bd,0xd0c,0xd04,0x5d8,0x5d8,0xd14,0xd1c,0xd2c,0x4bd,0xd31,0xd39,0xd3f,0xd47,0xd24,
+0xd4f,0xd57,0x5d8,0xd5f,0xd6f,0xd72,0xd67,0xd7a,0x62d,0xd82,0xd89,0x8ce,0x67b,0xd99,0xd91,0xda1,
+0x5d8,0xda9,0xdb1,0xdb9,0x5d8,0xdc1,0xdc9,0xdd1,0xdd9,0xde1,0xde5,0xded,0x50d,0x50d,0x5d8,0xdf5,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xdfd,0xe09,0xe01,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
+0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0x5d8,0x5d8,0x5d8,0xe21,0x5d8,0xcda,0xe28,0xe2d,
+0x5d8,0x5d8,0x5d8,0xe35,0x5d8,0x5d8,0x8d9,0x48d,0xe4b,0xe3b,0xe43,0x5d8,0x5d8,0xe53,0xe5b,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xe60,0xe68,0x5d8,0xe6c,0x5d8,0xe72,0xe76,
+0xe7e,0xe86,0xe8d,0xe95,0x5d8,0x5d8,0x5d8,0xe9b,0xeb3,0x47d,0xebb,0xec3,0xec8,0x8ee,0xea3,0xeab,
+0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
+0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
+0x1234,0x1234,0x1274,0x12b4,0x12f4,0x132c,0x136c,0x13ac,0x13e4,0x1424,0x1450,0x1490,0x14d0,0x14e0,0x1520,0x1554,
+0x1594,0x15c4,0x1604,0x1644,0x1654,0x1688,0x16c0,0x1700,0x1740,0x1780,0x17b4,0x17e0,0x1820,0x1858,0x1874,0x18b4,
0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xbc0,0xa40,0xbe2,0xa40,0xa40,0xa40,0xa40,0xc22,0x1db,0x1db,
0xc62,0xca2,0xa40,0xa40,0xa40,0xa40,0xce2,0xd02,0xa40,0xa40,0xd42,0xd82,0xdc2,0xe02,0xe42,0xe82,
0xec2,0xef9,0x1db,0x1db,0xf1d,0xf51,0x1db,0xf79,0x1db,0x1db,0x1db,0x1db,0xfa6,0x1db,0x1db,0x1db,
0x1db,0x1db,0x1db,0x1db,0xfba,0x1db,0xff2,0x1032,0x1db,0x103d,0x1db,0x1db,0x1db,0x1073,0xa40,0x10b3,
+0x1db,0x1db,0x10f3,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
@@ -171,129 +172,132 @@ static const uint16_t propsTrie_index[21968]={
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0x10f3,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+0x1133,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1133,
+0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1173,
0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1133,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0xecb,0xed2,0xeda,0x47d,0x5c8,0x5c8,0x5c8,0xbd0,0xeea,0xee2,0xf01,0xef2,0xef9,0xf09,0xb7e,0xf11,
-0x47d,0x47d,0x47d,0x47d,0x8c0,0x5c8,0xf19,0xf21,0x5c8,0xf29,0xf31,0xf35,0xf3d,0x5c8,0xf45,0x47d,
-0x555,0x55f,0xf4d,0x5c8,0xf51,0xf59,0xf69,0xf61,0x5c8,0xf71,0x5c8,0xf78,0x47d,0x47d,0x47d,0x47d,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xb62,0x8cc,0xe6d,0x47d,0x47d,0x47d,0x47d,
-0xf88,0xf80,0xf8b,0xf93,0x8e0,0xf9b,0x47d,0xfa3,0xfab,0xfb3,0x47d,0x47d,0x5c8,0xfc3,0xfcb,0xfbb,
-0xfdb,0xfe2,0xfd3,0xfea,0xff2,0x47d,0x1002,0xffa,0x5c8,0x1005,0x100d,0x1015,0x101d,0x1025,0x47d,0x47d,
-0x5c8,0x5c8,0x102d,0x47d,0x555,0x1035,0x4fd,0x103d,0x5c8,0x1045,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x104d,0x47d,0x47d,0x47d,0x47d,0x1055,0x105d,0x1064,0x47d,0x47d,0x47d,0x47d,0xb62,
-0x1074,0x5fe,0x107c,0x106c,0x951,0x1084,0x108c,0x1092,0x10aa,0x109a,0x10a2,0x10ae,0x951,0x10be,0x10b6,0x10c6,
-0x10d6,0x10ce,0x47d,0x47d,0x10dd,0x10e5,0x620,0x10ed,0x10fd,0x1103,0x110b,0x10f5,0x47d,0x47d,0x47d,0x47d,
-0x5c8,0x1113,0x111b,0x47d,0x5c8,0x1123,0x112b,0x47d,0x47d,0x47d,0x47d,0x47d,0x5c8,0x1133,0x113b,0x47d,
-0x5c8,0x1143,0x114b,0x1153,0x5c8,0x1163,0x115b,0x47d,0x83a,0x116b,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x5c8,0x1173,0x47d,0x47d,0x47d,0x555,0x4fd,0x117b,0x47d,0x47d,0x47d,0x47d,0x47d,0x118b,0x118f,0x1183,
-0x11a7,0x1197,0x119f,0x5c8,0x11b7,0x11af,0x5c8,0x8c1,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x11cd,0x11d2,0x11bf,0x11c7,0x11e2,0x11da,0x47d,0x47d,0x11f1,0x11f5,0x11e9,0x1205,0x11fd,0x115b,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x1209,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x1219,0x1211,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8cb,0x47d,0x47d,0x47d,
-0x1229,0x1231,0x1239,0x1221,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x1241,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x1249,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x1251,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x8c1,0x8e0,0x1259,0x47d,0x47d,0xe63,0x1261,0x5c8,0x1269,0x1271,0x1279,0xcd2,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x555,0x4fd,0x1281,0x47d,0x47d,0x47d,0x5c8,0x5c8,0x1289,0x128e,0x1294,0x47d,
-0x47d,0x129c,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x12a4,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x12ac,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8e0,0x47d,0x12b1,0x12b8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xdfc,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x12be,0x12c3,0x12cb,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0xb91,0x8fe,0x12d3,0x8fe,0x12da,0x12e2,0x12e8,
-0x8fe,0x12ee,0x8fe,0x8fe,0x12f6,0x47d,0x47d,0x47d,0x47d,0x12fe,0x8fe,0x8fe,0xaa5,0x1306,0x47d,0x47d,
-0x47d,0x47d,0x1316,0x131d,0x1322,0x1328,0x1330,0x1338,0x1340,0x131a,0x1348,0x1350,0x1358,0x135d,0x132f,0x1316,
-0x131d,0x1319,0x1328,0x1365,0x1317,0x1368,0x131a,0x1370,0x1378,0x1380,0x1387,0x1373,0x137b,0x1383,0x138a,0x1376,
-0x1392,0x130e,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,
-0x8fe,0x8fe,0x524,0x13a2,0x524,0x13a9,0x13b0,0x139a,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x13b7,0x13bf,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x5c8,0x13cf,0x13c7,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x5c8,0x13d7,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x13df,0x47d,0x555,0x13ef,0x13e7,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x13f7,0x1407,0x13ff,0x47d,0x47d,0x1417,0x140f,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x1427,0x142f,0x1437,0x143f,0x1447,0x144f,0x47d,0x141f,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x8fe,0x1457,0x8fe,0x8fe,0xb89,0x145c,0x1460,0xb91,0x1468,0x8fe,0x8fe,0x146d,0x8fe,0x12ed,
-0x47d,0x1475,0x147d,0x1481,0x1489,0x1491,0x47d,0x47d,0x47d,0x47d,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,
-0x8fe,0x1499,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,
-0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0x8fe,0xb91,0x14a1,0x8fe,0x8fe,0x8fe,0xb89,0x8fe,0x8fe,
-0x14a9,0x14b1,0x1457,0x8fe,0x14b9,0x8fe,0x14c1,0xb93,0x47d,0x47d,0x14c6,0x8fe,0x8fe,0x14ca,0x8fe,0x14d2,
-0x14d8,0x8fe,0x8fe,0x8fe,0xb89,0x14dd,0x14e3,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x14eb,0x5c8,0x5c8,0x14f2,0x5c8,0x5c8,0x5c8,0x14fa,0x5c8,0x1502,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0xc73,0x5c8,0x5c8,0x150a,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x1512,0x151a,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xcb2,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x1521,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x1528,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x152f,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0xb62,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x1533,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0xf51,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x153b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x1543,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x154b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,
-0x5c8,0x5c8,0x5c8,0xf51,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x155b,0x1553,0x1553,0x1553,0x47d,0x47d,0x47d,0x47d,0x524,0x524,0x524,0x524,0x524,
-0x524,0x524,0x1563,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,0xe14,
-0xe14,0xe14,0x156b,0x45c,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1173,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0xed0,0xed7,0xedf,0x48d,0x5d8,0x5d8,0x5d8,0xee7,0xef7,0xeef,0xf0e,0xeff,0xf06,0xf16,0xf1a,0xf1e,
+0x48d,0x48d,0x48d,0x48d,0x8ce,0x5d8,0xf26,0xf2e,0x5d8,0xf36,0xf3e,0xf42,0xf4a,0x5d8,0xf52,0x48d,
+0x565,0x56f,0xf5a,0x5d8,0xf5e,0xf66,0xf76,0xf6e,0x5d8,0xf7e,0x5d8,0xf85,0x48d,0x48d,0x48d,0x48d,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xb78,0x8da,0xe72,0x48d,0x48d,0x48d,0x48d,
+0xf95,0xf8d,0xf98,0xfa0,0x8ee,0xfa8,0x48d,0xfb0,0xfb8,0xfc0,0x48d,0x48d,0x5d8,0xfd0,0xfd8,0xfc8,
+0xfe8,0xfef,0xfe0,0xff7,0xfff,0x48d,0x100f,0x1007,0x5d8,0x1012,0x101a,0x1022,0x102a,0x1032,0x48d,0x48d,
+0x5d8,0x5d8,0x103a,0x48d,0x565,0x1042,0x50d,0x104a,0x5d8,0x1052,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x105a,0x5d8,0x1062,0x48d,0x48d,0x106a,0x1072,0x1079,0x48d,0x48d,0xe68,0x1081,0xb78,
+0x1091,0x60e,0x1099,0x1089,0x967,0x10a1,0x10a9,0x10af,0x10c7,0x10b7,0x10bf,0x10cb,0x967,0x10db,0x10d3,0x10e3,
+0x10f3,0x10eb,0x48d,0x48d,0x10fa,0x1102,0x630,0x110a,0x111a,0x1120,0x1128,0x1112,0x48d,0x48d,0x48d,0x48d,
+0x5d8,0x1130,0x1138,0x1140,0x5d8,0x1148,0x1150,0x48d,0x48d,0x48d,0x48d,0x48d,0x5d8,0x1158,0x1160,0x48d,
+0x5d8,0x1168,0x1170,0x1178,0x5d8,0x1188,0x1180,0x48d,0x848,0x1190,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x5d8,0x1198,0x48d,0x48d,0x48d,0x565,0x50d,0x11a0,0x11b0,0x11b6,0x11a8,0x48d,0x48d,0x11c6,0x11ca,0x11be,
+0x11e2,0x11d2,0x11da,0x5d8,0x11f2,0x11ea,0x5d8,0x8cf,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x1208,0x120d,0x11fa,0x1202,0x121d,0x1215,0x48d,0x48d,0x122c,0x1230,0x1224,0x1240,0x1238,0x1180,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x1244,0x48d,0x48d,0x48d,0x48d,0x48d,0x124b,0x125b,0x1253,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8d9,0x48d,0x48d,0x48d,
+0x126b,0x1273,0x127b,0x1263,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1283,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x128b,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x1293,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x8cf,0x8ee,0x129b,0x48d,0x48d,0xe68,0x12a3,0x5d8,0x12b3,0x12bb,0x12c3,0x12ab,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x565,0x50d,0x12cb,0x48d,0x48d,0x48d,0x5d8,0x5d8,0x12d3,0x12d8,0x12de,0x48d,
+0x48d,0x12e6,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x12ee,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8da,0x48d,0x103a,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8ee,0x48d,0x12f4,0x12fb,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xe01,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x1301,0x1306,0x130e,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xba7,0x90c,0x1316,0x90c,0x131d,0x1325,0x132b,
+0x90c,0x1331,0x90c,0x90c,0x1339,0x48d,0x48d,0x48d,0x48d,0x1341,0x90c,0x90c,0xabb,0x1349,0x48d,0x48d,
+0x48d,0x48d,0x1359,0x1360,0x1365,0x136b,0x1373,0x137b,0x1383,0x135d,0x138b,0x1393,0x139b,0x13a0,0x1372,0x1359,
+0x1360,0x135c,0x136b,0x13a8,0x135a,0x13ab,0x135d,0x13b3,0x13bb,0x13c3,0x13ca,0x13b6,0x13be,0x13c6,0x13cd,0x13b9,
+0x13d5,0x1351,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
+0x90c,0x90c,0x534,0x13e5,0x534,0x13ec,0x13f3,0x13dd,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x13fa,0x1402,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x5d8,0x1412,0x140a,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x5d8,0x141a,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1422,0x48d,0x565,0x1432,0x142a,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x143a,0x144a,0x1442,0x48d,0x48d,0x145a,0x1452,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x146a,0x1472,0x147a,0x1482,0x148a,0x1492,0x48d,0x1462,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x90c,0x149a,0x90c,0x90c,0xb9f,0x149f,0x14a3,0xba7,0x14ab,0x90c,0x90c,0x90c,0x90c,0xba9,
+0x48d,0x14b3,0x14bb,0x14bf,0x14c7,0x14cf,0x48d,0x48d,0x48d,0x48d,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
+0x90c,0x14d7,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
+0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x14df,0x14e7,0x90c,0x90c,0x90c,0xb9f,0x90c,0x90c,
+0x14ef,0x14f7,0x149a,0x90c,0x14ff,0x90c,0x1507,0x150c,0x48d,0x48d,0x90c,0x90c,0x90c,0x1514,0x90c,0x90c,
+0x151b,0x90c,0x90c,0x90c,0xb9f,0x1520,0x1528,0x152e,0x1533,0x48d,0x90c,0x90c,0x90c,0x90c,0x153b,0x90c,
+0xabe,0x117c,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x1543,0x5d8,0x5d8,0x154a,0x5d8,0x5d8,0x5d8,0x1552,0x5d8,0x155a,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0xc80,0x5d8,0x5d8,0x1562,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x156a,0x1572,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xcbf,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1579,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x1580,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1587,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0xf5e,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x158b,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0xf5e,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x1066,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x1590,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x1598,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0xf5e,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
+0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x655,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x15a8,0x15a0,0x15a0,0x15a0,0x48d,0x48d,0x48d,0x48d,0x534,0x534,0x534,0x534,0x534,
+0x534,0x534,0x15b0,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
+0x48d,0x48d,0x48d,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0x15b8,0x46c,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
0xf,0xf,0xf,0xf,0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,
0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
@@ -421,938 +425,956 @@ static const uint16_t propsTrie_index[21968]={
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
-5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,
-6,6,6,6,5,5,6,6,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x17,4,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,6,8,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,8,6,5,8,8,8,6,6,6,
-6,6,6,6,6,8,8,8,8,6,8,8,5,6,6,6,
-6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0x19,0x19,
-0x37cb,0x35cb,0x3fcb,0x34cb,0x3ccb,0x94b,0x1b,0x19,5,0x17,6,0,5,6,8,8,
-0,5,5,5,5,5,5,5,5,0,0,5,5,0,0,5,
+5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,6,
+6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,6,
+0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,4,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,8,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,
+6,5,8,8,8,6,6,6,6,6,6,6,6,8,8,8,
+8,6,8,8,5,6,6,6,6,6,6,6,5,5,5,5,
+5,5,5,5,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,5,5,0x19,0x19,0x37cb,0x35cb,0x3fcb,0x34cb,0x3ccb,0x94b,0x1b,0x19,
+5,0x17,6,0,5,6,8,8,0,5,5,5,5,5,5,5,
+5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,0,
+0,0,5,5,5,5,0,0,6,5,8,8,8,6,6,6,
+6,0,0,8,8,0,0,8,8,6,5,0,0,0,0,0,
+0,0,0,8,0,0,0,0,5,5,0,5,0,0,0,0,
+0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,6,6,5,5,
+5,6,0x17,0,0,0,0,0,0,0,0,0,0,6,6,8,
+0,5,5,5,5,5,5,0,0,0,0,5,5,0,0,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,0,5,0,0,0,5,5,5,5,0,0,
-6,5,8,8,8,6,6,6,6,0,0,8,8,0,0,8,
-8,6,5,0,0,0,0,0,0,0,0,8,0,0,0,0,
-5,5,0,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,6,6,5,5,5,6,0x17,0,0,0,0,0,
-0,0,0,0,0,6,6,8,0,5,5,5,5,5,5,0,
-0,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,5,5,0,5,5,0,5,5,0,0,
+6,0,8,8,8,6,6,0,0,0,0,6,6,0,0,6,
+6,6,0,0,0,6,0,0,0,0,0,0,0,5,5,5,
+5,0,5,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0x17,0x19,0,0,0,0,0,0,0,5,6,6,
+6,6,6,6,0,6,6,8,0,5,5,5,5,5,5,5,
+5,5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,
-0,5,5,0,5,5,0,0,6,0,8,8,8,6,6,0,
-0,0,0,6,6,0,0,6,6,6,0,0,0,6,0,0,
-0,0,0,0,0,5,5,5,5,0,5,0,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x19,0,0,
-0,0,0,0,0,5,6,6,6,6,6,6,0,6,6,8,
-0,5,5,5,5,5,5,5,5,5,0,5,5,5,0,5,
+0,5,5,5,5,5,0,0,6,5,8,8,8,6,6,6,
+6,6,0,6,6,8,0,8,8,6,0,0,5,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,6,6,
+0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x1b,5,0x34cb,0x344b,
+0x3ccb,0x37cb,0x35cb,0x3fcb,0,0,0,0,0,0,0,0,0,6,8,8,
+0,5,5,5,5,5,5,5,5,0,0,5,5,0,0,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0,
-6,5,8,8,8,6,6,6,6,6,0,6,6,8,0,8,
-8,6,0,0,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x1b,5,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0,0,0,0,
-0,0,0,0,0,6,8,8,0,5,5,5,5,5,5,5,
-5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,
-0,5,5,5,5,5,0,0,6,5,8,6,8,6,6,6,
-6,0,0,8,8,0,0,8,8,6,0,0,0,0,0,0,
-0,0,6,8,0,0,0,0,5,5,0,5,0,0,0,0,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,0,0,6,5,
-0,5,5,5,5,5,5,0,0,0,5,5,5,0,5,5,
-5,5,0,0,0,5,5,0,5,0,5,5,0,0,0,5,
-5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,0,8,8,6,8,8,0,
-0,0,8,8,8,0,8,8,8,6,0,0,5,0,0,0,
-0,0,0,8,0,0,0,0,0,0,0,0,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,
-0,0,0,0x17,0x54b,0x58b,0x5cb,0x60b,0x58b,0x5cb,0x60b,0x1b,6,8,8,8,
-6,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,5,6,6,6,8,8,8,8,0,6,6,6,0,6,6,
-6,6,0,0,0,0,0,0,0,6,6,0,5,5,5,0,
+6,5,8,6,8,6,6,6,6,0,0,8,8,0,0,8,
+8,6,0,0,0,0,0,0,0,6,6,8,0,0,0,0,
+5,5,0,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,
+0,0,0,0,0,0,6,5,0,5,5,5,5,5,5,0,
+0,0,5,5,5,0,5,5,5,5,0,0,0,5,5,0,
+5,0,5,5,0,0,0,5,5,0,0,0,5,5,5,0,
+0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
+0,0,8,8,6,8,8,0,0,0,8,8,8,0,8,8,
+8,6,0,0,5,0,0,0,0,0,0,8,0,0,0,0,
0,0,0,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0,5,5,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,6,8,8,0x17,5,5,5,5,5,5,5,
+0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0x17,0x54b,0x58b,0x5cb,0x60b,
+0x58b,0x5cb,0x60b,0x1b,6,8,8,8,6,5,5,5,5,5,5,5,
5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
-0,5,5,5,5,5,0,0,6,5,8,6,8,8,8,8,
-8,0,6,8,8,0,8,8,6,6,0,0,0,0,0,0,
-0,8,8,0,0,0,0,0,0,0,5,0,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x34cb,
-0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,5,5,5,5,6,6,8,8,
-0,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,6,6,5,8,8,
-8,6,6,6,6,0,8,8,8,0,8,8,8,6,5,0x1b,
-0,0,0,0,5,5,5,8,0xcc0b,0xca0b,0xcb4b,0xc90b,0x364b,0xc94b,0x350b,5,
-0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0,0,8,8,0x17,0,0,0,0,0,0,0,0,0,0,0,
-0,0,8,8,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,
-5,5,5,5,5,5,5,5,0,5,0,0,5,5,5,5,
-5,5,5,0,0,0,6,0,0,0,0,8,8,8,6,6,
-6,0,6,0,8,8,8,8,8,8,8,8,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,
-6,6,6,6,6,6,6,0,0,0,0,0x19,5,5,5,5,
-5,5,4,6,6,6,6,6,6,6,6,0x17,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0,0,0,0,5,5,0,
-5,0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,5,0,5,
-5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6,
-6,6,6,6,6,5,0,0,5,5,5,5,5,0,4,0,
-6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b,
-6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6,
-0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5,5,5,5,5,
-0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0,0,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,8,6,6,6,6,
-6,0x17,6,6,5,5,5,5,5,6,6,6,6,6,6,6,
-6,6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,
+5,5,5,5,5,5,0,0,0,5,6,6,6,8,8,8,
+8,0,6,6,6,0,6,6,6,6,0,0,0,0,0,0,
+0,6,6,0,5,5,5,0,0,0,0,0,5,5,6,6,
+0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,5,5,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,6,8,8,
+0x17,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
+5,5,5,5,5,5,5,5,0,5,5,5,5,5,0,0,
+6,5,8,6,8,8,8,8,8,0,6,8,8,0,8,8,
+6,6,0,0,0,0,0,0,0,8,8,0,0,0,0,0,
+0,0,5,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,
+5,5,5,5,6,6,8,8,5,5,5,5,5,5,5,5,
+5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,6,6,5,8,8,8,6,6,6,6,0,8,8,
+8,0,8,8,8,6,5,0x1b,0,0,0,0,5,5,5,8,
+0xcc0b,0xca0b,0xcb4b,0xc90b,0x364b,0xc94b,0x350b,5,0,0,0,0,0,0,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,8,8,0x17,0,0,0,
+0,0,0,0,0,0,0,0,0,6,8,8,0,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
+0,5,0,0,5,5,5,5,5,5,5,0,0,0,6,0,
+0,0,0,8,8,8,6,6,6,0,6,0,8,8,8,8,
+8,8,8,8,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,0,
+0,0,0,0x19,5,5,5,5,5,5,4,6,6,6,6,6,
+6,6,6,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
+0,0,0,0,0,5,5,0,5,0,5,5,5,5,5,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,5,0,5,5,5,5,5,5,5,5,5,
+5,6,5,5,6,6,6,6,6,6,6,6,6,5,0,0,
+5,5,5,5,5,0,4,0,6,6,6,6,6,6,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5,
+5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,
+0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8,
+5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,8,6,6,6,6,6,0x17,6,6,5,5,5,5,
+5,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,
-0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,8,8,6,6,6,6,8,6,6,6,6,6,6,
-8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,5,5,8,8,
-6,6,5,5,5,5,6,6,6,5,8,8,8,5,5,8,
-8,8,8,8,8,8,5,5,5,6,6,6,6,5,5,5,
-5,5,5,5,5,5,5,5,5,5,6,8,8,6,6,8,
-8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,8,8,8,6,0x1b,0x1b,2,2,2,2,2,2,2,2,
+6,6,6,6,6,6,6,6,6,6,6,6,6,0,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,
+0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,6,
+6,8,6,6,6,6,6,6,8,6,6,8,8,6,6,5,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,
+5,5,5,5,5,5,8,8,6,6,5,5,5,5,6,6,
+6,5,8,8,8,5,5,8,8,8,8,8,8,8,5,5,
+5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,
+5,5,6,8,8,6,6,8,8,8,8,8,8,6,5,8,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,0x17,4,2,2,2,
+1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,0x17,4,2,2,2,1,1,1,1,1,1,0,1,
-0,0,0,0,0,1,0,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,
-5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,0,
-5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
-5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,0,
5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,
-0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,
-2,2,2,2,2,2,0,0,0x13,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,
+0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x1b,0x17,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0xc,5,5,5,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0,0,2,2,2,2,2,2,0,0,
+0x13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0x1b,0x17,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0xc,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x14,
+0x15,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0x17,
+0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5,5,5,5,5,5,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,6,6,6,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,6,6,6,0x17,0x17,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,6,6,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,0,6,6,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,6,6,8,6,6,6,6,6,
+6,6,8,8,8,8,8,8,8,8,6,8,8,6,6,6,
+6,6,6,6,6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,
+5,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,6,5,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,
+6,6,0x10,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0,0,5,5,5,4,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x14,0x15,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5,
5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,6,6,
-6,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-6,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,0,6,6,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-6,6,8,6,6,6,6,6,6,6,8,8,8,8,8,8,
-8,8,6,8,8,6,6,6,6,6,6,6,6,6,6,6,
-0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b,
-0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,6,5,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17,
-0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0x10,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,4,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,5,5,5,5,5,6,6,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,
-6,6,6,8,8,8,8,6,6,8,8,8,0,0,0,0,
-8,8,6,8,8,8,8,8,8,6,6,6,0,0,0,0,
-0x1b,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
+0,0,0,0,0,0,0,0,6,6,6,8,8,8,8,6,
+6,8,8,8,0,0,0,0,8,8,6,8,8,8,8,8,
+8,6,6,6,0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-6,8,8,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,4,
-0x17,0x17,0x17,0x17,0x17,0x17,0,0,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,7,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,8,6,8,
-6,6,6,6,6,6,6,0,6,8,6,8,8,6,6,6,
-6,6,6,6,6,8,8,8,8,8,8,6,6,6,6,6,
-6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,6,6,6,6,8,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,6,8,6,6,6,6,6,8,
-6,8,8,8,8,8,6,8,8,5,5,5,5,5,5,5,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
-0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8,6,6,8,6,
-6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
-5,5,5,5,6,6,8,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,8,6,6,8,8,8,6,8,6,
-6,6,8,8,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,5,5,5,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,
-8,8,8,8,8,8,8,8,6,6,6,6,6,6,6,6,
-8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,4,4,4,4,4,4,0x17,0x17,2,2,2,2,
-2,2,2,2,2,0,0,0,0,0,0,0,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0,0,1,1,1,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,6,6,6,0x17,
-6,6,6,6,6,6,6,6,6,6,6,6,6,8,6,6,
-6,6,6,6,6,5,5,5,5,6,5,5,5,5,5,5,
-6,5,5,8,6,6,5,0,0,0,0,0,2,2,2,2,
-2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,
+5,5,5,5,5,5,5,6,6,8,8,6,0,0,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,8,6,8,6,6,6,6,6,6,6,0,
+6,8,6,8,8,6,6,6,6,6,6,6,6,8,8,8,
+8,8,8,6,6,6,6,6,6,6,6,6,6,0,0,6,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,
+6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
+6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6,6,6,6,8,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+6,8,6,6,6,6,6,8,6,8,8,8,8,8,6,8,
+8,5,5,5,5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6,
+6,6,8,8,6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,6,6,8,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,
+6,6,8,8,8,6,8,6,6,6,8,8,0,0,0,0,
+0,0,0,0,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,5,5,5,5,5,5,8,8,8,8,8,8,8,8,
+6,6,6,6,6,6,6,6,8,8,6,6,0,0,0,0x17,
+0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,
+4,4,0x17,0x17,2,2,2,2,2,2,2,2,2,0,0,0,
+0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
+0,1,1,1,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,
+0,0,0,0,6,6,6,0x17,6,6,6,6,6,6,6,6,
+6,6,6,6,6,8,6,6,6,6,6,6,6,5,5,5,
+5,6,5,5,5,5,5,5,6,5,5,8,6,6,5,0,
+0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,
-2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,4,4,4,4,4,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,0,6,6,6,6,6,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,
-2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a,0,0,2,2,
-2,0,2,2,1,1,1,1,3,0x1a,0x1a,0,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,0,0,1,1,1,1,1,1,0,0,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,0,0,1,1,1,1,1,1,0,0,2,2,2,2,
-2,2,2,2,0,1,0,1,0,1,0,1,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,
-2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,
-2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,
-2,0,2,2,1,1,1,1,3,0x1a,2,0x1a,0x1a,0x1a,2,2,
-2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a,2,2,2,2,
-0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17,
-0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,
-0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,
-0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x2cb,4,0,0,
-0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4,0xc,0xc,0xc,0xc,
-0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,
-0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b,
-0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0,4,4,4,4,
-4,4,4,4,4,4,4,4,4,0,0,0,0x19,0x19,0x19,0x19,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,
+4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,
+4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6,
+6,6,6,6,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,2,2,2,2,2,2,
+2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,
+1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2,1,1,1,1,
+3,0x1a,0x1a,0,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1,
+1,1,0,0,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1,
+1,1,0,0,2,2,2,2,2,2,2,2,0,1,0,1,
+0,1,0,1,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,0,0,2,2,2,2,2,2,2,2,3,3,3,3,
+3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,
+3,3,3,3,2,2,2,2,2,0,2,2,1,1,1,1,
+3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,
+3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2,1,1,1,1,
+0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,
+0x10,0x10,0x10,0x10,0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,
+0x18,0x14,0x15,4,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,
+0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,
+0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,
+0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,
+0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,
+0x18,0x14,0x15,0,4,4,4,4,4,4,4,4,4,4,4,4,
+4,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
-0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,
-6,6,6,6,6,6,6,6,6,7,7,7,7,6,7,7,
-7,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2,1,1,1,1,
-2,5,5,5,5,2,0x1b,0x1b,2,2,1,1,0x18,0x18,0x18,0x18,
-0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b,
-0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b,
-0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2,1,1,1,2,
-0x1b,1,0x1b,0x1b,0x18,1,1,1,1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a,
-0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a,
-0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1,
-2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,0,0,0,0,0x18,0x18,0x18,0x18,
-0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,
-0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x19,0x19,0x19,0x19,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
+6,7,7,7,7,6,7,7,7,6,6,6,6,6,6,6,
+6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,
+1,1,0x1b,2,1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,
+2,2,1,1,0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,
+0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,
+0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,
+1,1,2,2,1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1,
+1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,
+0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,
+0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,
+0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b,
-0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,
-0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,
-0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
-0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
+0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,
+0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,
+0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,
+0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,
+0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,
+0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b,
-0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
-0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,
+0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,
+0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,
-0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,
+0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,
+0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
+0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,
+0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,
-0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,
+0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
+0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,2,1,1,1,2,2,1,2,1,2,1,2,1,1,1,
-1,2,1,2,2,1,2,2,2,2,2,2,4,4,1,1,
-1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,1,2,1,2,6,
-6,6,1,2,0,0,0,0,0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17,
-2,2,2,2,2,2,0,2,0,0,0,0,0,2,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,0,0,0,0,0,0,4,0x17,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,6,5,5,5,5,5,5,5,0,
+2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,1,
+2,1,2,1,2,1,1,1,1,2,1,2,2,1,2,2,
+2,2,2,2,4,4,1,1,1,2,1,2,2,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,1,2,1,2,6,6,6,1,2,0,0,0,0,
+0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17,2,2,2,2,2,2,0,2,
+0,0,0,0,0,2,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,4,
+0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,0,0,0,0,0,0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,
-0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,
-0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,
-0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17,0x13,0x17,0x14,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,
+0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,
+0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17,
+0x13,0x17,0x14,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x1b,0x1b,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x58a,0x5ca,0x60a,
-0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,6,6,8,8,0x13,4,4,4,
-4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17,
-0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,
-0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x13,0x14,0x15,0x15,5,5,5,5,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0,0,0,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,
+6,6,8,8,0x13,4,4,4,4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,
+5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17,0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
+0x13,0x14,0x15,0x15,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a,
+0x1a,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,
+4,4,4,5,0,0,0,0,0,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1b,0xa8b,0xacb,0xb0b,
+0xb4b,0xb8b,0xbcb,0xc0b,0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe4b,0xe8b,0xecb,
+0xf0b,0xf4b,0xf8b,0xfcb,0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,5,5,5,5,
+5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,0,6,6,0x1a,0x1a,4,4,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x685,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x17,4,4,4,5,0,0,0,0,
-0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+5,5,5,5,5,0x705,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x585,5,5,0x705,5,5,5,0x7885,
+5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,
+5,0x785,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x5c5,5,5,5,5,5,5,5,0x685,5,0x645,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b,
-0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb,
-0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,5,5,5,5,5,0x685,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0x7985,0x7c5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0x7845,5,5,5,5,
+5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x685,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x705,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x585,5,5,0x705,5,5,5,0x7885,5,0x605,5,5,
+0x1e45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x7985,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7a85,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,
-5,5,5,5,0x685,5,0x645,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x5c5,5,0x745,5,0x6c5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x7985,0x7c5,5,5,5,5,5,5,5,
+5,0x7c5,5,0x7845,0xa45,0xcc5,5,5,5,5,5,5,0xf45,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5,5,5,
-0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x7985,5,5,5,
+5,0x605,0x605,0x605,0x605,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x7a85,5,5,5,5,5,
+5,5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0x585,5,5,5,5,5,5,5,0x585,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x5c5,5,0x745,5,0x6c5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,0x7845,
-0xa45,0xcc5,5,5,5,5,5,5,0xf45,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,0x605,0x605,
-0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x645,
+5,5,5,5,5,5,5,5,5,5,0x585,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x585,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0x785,0xa45,5,5,5,5,
+5,5,5,5,5,5,5,5,0x585,0x5c5,0x605,5,0x5c5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x585,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x745,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x785,0xa45,5,5,5,5,5,5,5,5,
-5,5,5,5,0x585,0x5c5,0x605,5,0x5c5,5,5,5,5,5,5,5,
+5,5,0x705,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x745,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x705,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1e45,5,
+5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x785,5,5,5,5,5,
+0x7885,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0x5c5,5,5,5,5,0x5c5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x7845,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5,5,5,
-5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x7885,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,
+5,5,5,5,0x1e45,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x5c5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5,
+0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0x545,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5,
-0x1e45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,
+5,4,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x545,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,
-5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,4,4,6,6,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,5,6,7,7,7,0x17,
-6,6,6,6,6,6,6,6,6,6,0x17,4,5,5,5,5,
-5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17,
-0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,5,4,4,2,5,5,5,5,5,0x1a,0x1a,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,2,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-4,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,
-1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,2,1,2,5,
-1,2,1,2,2,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,2,
-1,2,1,2,1,2,1,2,0,0,1,2,1,1,1,0,
+1,2,1,2,1,2,1,2,1,2,1,2,4,4,6,6,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,6,
+7,7,7,0x17,6,6,6,6,6,6,6,6,6,6,0x17,4,
+5,5,5,5,5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x54a,
+6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,6,5,5,5,6,5,
-5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,8,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b,
-0x19,0x1b,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17,
-0,0,0,0,0,0,0,0,8,8,8,8,6,6,0,0,
-0,0,0,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,8,8,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,8,8,8,8,8,8,8,8,
-8,8,8,8,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,5,5,5,5,5,5,0x17,0x17,0x17,5,
-0x17,5,5,6,5,5,5,5,5,5,6,6,6,6,6,6,
-6,6,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,
-6,6,8,8,0,0,0,0,0,0,0,0,0,0,0,0x17,
-8,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,4,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,6,8,8,6,6,6,6,8,8,6,6,8,8,
-5,5,5,5,5,6,4,5,5,5,5,5,5,5,5,5,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,0,
-5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,8,
-8,6,6,8,8,6,6,0,0,0,0,0,0,0,0,0,
-5,5,5,6,5,5,5,5,5,5,5,5,6,8,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0x17,0x17,0x17,0x17,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-4,5,5,5,5,5,5,0x1b,0x1b,0x1b,5,8,6,8,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-6,5,6,6,6,5,5,6,6,5,5,5,5,5,6,6,
-5,6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,5,5,4,0x17,0x17,
-5,5,5,5,5,5,5,5,5,5,5,8,6,6,8,8,
-0x17,0x17,5,4,4,8,6,0,0,0,0,0,0,0,0,0,
-0,5,5,5,5,5,5,0,0,5,5,5,5,5,5,0,
-0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0x1a,4,4,4,4,
-2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-5,5,5,8,8,6,8,8,6,8,8,0x17,8,6,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,1,2,5,4,4,2,5,5,5,5,5,
+0x1a,0x1a,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,4,2,2,2,2,2,2,2,2,1,2,1,
+2,1,1,2,1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,
+2,1,2,5,1,2,1,2,2,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,1,1,1,1,2,1,1,1,1,
+1,2,1,2,1,2,1,2,1,2,1,2,0,0,1,2,
+1,1,1,1,2,1,2,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,6,5,
+5,5,6,5,5,5,5,6,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
+8,6,6,8,0x1b,0x1b,0x1b,0x1b,6,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,
+0x35cb,0x3fcb,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,8,8,8,8,
+6,6,0,0,0,0,0,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,8,8,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,8,
+8,8,8,8,8,8,8,8,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,
+0x17,0x17,0x17,5,0x17,5,5,6,5,5,5,5,5,5,6,6,
+6,6,6,6,6,6,0x17,0x17,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
+6,6,6,6,6,6,8,8,0,0,0,0,0,0,0,0,
+0,0,0,0x17,8,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0,4,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,6,8,8,6,6,6,6,8,8,
+6,6,8,8,5,5,5,5,5,6,4,5,5,5,5,5,
+5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
+5,5,5,0,5,5,5,5,5,5,5,5,5,6,6,6,
+6,6,6,8,8,6,6,8,8,6,6,0,0,0,0,0,
+0,0,0,0,5,5,5,6,5,5,5,5,5,5,5,5,
+6,8,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,4,5,5,5,5,5,5,0x1b,0x1b,0x1b,5,8,
+6,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,6,5,6,6,6,5,5,6,6,5,5,5,
+5,5,6,6,5,6,5,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
+5,4,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,8,
+6,6,8,8,0x17,0x17,5,4,4,8,6,0,0,0,0,0,
+0,0,0,0,0,5,5,5,5,5,5,0,0,5,5,5,
+5,5,5,0,0,5,5,5,5,5,5,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,0,5,5,5,5,
+5,5,5,0,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x1a,
+4,4,4,4,2,2,2,2,2,2,2,2,2,4,0x1a,0x1a,
+0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,5,5,5,8,8,6,8,8,6,8,8,0x17,
+8,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
-5,5,5,5,5,5,5,0,0,0,0,5,5,5,5,5,
+0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
+0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5,5,
-5,5,5,0x7c5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x18,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-5,5,5,5,5,0,5,0,5,5,0,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,0,
-0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,
-0,0,0,0,0,5,6,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x15,0x14,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
+0x11,0x11,0x11,0x11,5,5,5,5,5,5,5,5,5,5,5,0x605,
+5,5,5,5,5,5,5,0x7c5,5,5,5,5,0x5c5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0x6c5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0x18,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,5,5,5,5,5,0,5,0,5,5,0,5,
+5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,2,
+2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,
+2,2,2,2,0,0,0,0,0,5,6,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1a,0x1a,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x15,0x14,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-0x19,0x1b,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0,
-0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,
-0x17,0x17,0x17,0,0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,
-0x17,0x17,0x18,0x13,0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,
-5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0x10,0,0,5,5,5,5,5,5,
-0,0,5,5,5,5,5,5,0,0,5,5,5,5,5,5,
-0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0,
-0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0,0x10,0x10,0x10,0x1b,0x1b,0,0,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,
-0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2,
+0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,0x19,0x1b,0,0,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
+0x15,0x17,0,0,0,0,0,0,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,
+0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,
+0x17,0x16,0x16,0x16,0x17,0x17,0x17,0,0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,
+0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13,0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,
+0,0,0,0,5,5,5,5,5,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,0,0x10,0,0,5,5,
+5,5,5,5,0,0,5,5,5,5,5,5,0,0,5,5,
+5,5,5,5,0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,
+0x1b,0x19,0x19,0,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,
+0,0,0,0,0,0x10,0x10,0x10,0x1b,0x1b,0,0,0,0x17,0x17,0x17,
+0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,0x1a,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,0x14,0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,
-5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,
+2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,
+0x17,0x17,5,5,5,5,5,5,5,5,5,5,4,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,
-5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,
+5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,
-0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0,0,0,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0,0,0,0,0x58b,
-0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,
-0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca,
-0x11ca,0x11ca,0x1e4a,0x880a,0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b,
-0x3ccb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,
-0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,
-0x980a,0x784a,0x984a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,
-0x5ca,0x5ca,0x5ca,0x68a,0x1b,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,0,0,0,0,0xb00b,0xb80b,0x784b,0x804b,
+0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,
+0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0,
+0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,
+0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,
+0x7ca,0xcca,0x11ca,0x11ca,0x11ca,0x11ca,0x1e4a,0x880a,0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,
+0x11ca,0x344b,0x344b,0x388b,0x3ccb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x54b,0x34cb,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,
+0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,
+0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a,0x1b,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,6,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,6,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,
-0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,
-0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,0,0,0,0,
-0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x1bca,5,5,5,5,5,5,5,5,0xb80a,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+0x1b,0x1b,0x1b,0x1b,0x1b,6,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,6,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
+0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,
+0xa00b,0xa80b,0xb00b,0xb80b,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,
+0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x1bca,5,5,5,5,5,5,
+5,5,0xb80a,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
+6,6,6,0,0,0,0,0,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0x17,5,5,5,5,0,0,0,0,5,5,5,5,
-5,5,5,5,0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,0,0,0,0,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0x17,5,5,5,5,0,0,0,0,
+5,5,5,5,5,5,5,5,0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,
+0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
+5,5,5,5,5,5,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0,0,0,0,2,2,2,2,
-2,2,2,2,5,5,5,5,5,5,5,5,0,0,0,0,
+2,2,2,2,0,0,0,0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
+2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
+0,0,0,0x17,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0x17,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,0,5,5,0,0,0,
+5,0,0,5,5,5,5,5,5,5,0,0,5,0,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,5,5,0,0,0,5,0,0,5,
-5,5,5,5,5,5,0,0,5,0,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5,
+5,5,5,5,5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,
+0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0,
-0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-5,5,0,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5,
+5,5,5,0,5,5,0,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5,
+5,5,5,5,5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b,
-0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb,
-0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0x17,
+0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,
+0x90cb,0x98cb,0xa0cb,0xa8cb,0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b,
-0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b,
-0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb,
-0x7cb,0xa4b,0x1e4b,0x784b,0x344b,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,5,6,6,6,
-0,6,6,0,0,0,0,0,6,6,6,6,5,5,5,5,
-0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-6,6,6,0,0,0,0,6,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0x5ecb,0x344b,5,5,
+0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,
+0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,
+0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b,0x344b,0,0,0,0,0,0,0,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,
+5,6,6,6,0,6,6,0,0,0,0,0,6,6,6,6,
+5,5,5,5,0,5,5,5,0,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,6,6,6,0,0,0,0,6,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0,
-0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,
+5,5,5,5,5,5,5,5,5,0x58b,0x7cb,0xa4b,5,5,5,5,
+5,6,6,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,0x1b,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
+0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
+0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,
+0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,
+0,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,
+0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-0x1b,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,0,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,
-0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,
-0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,0,0,0,0,0x17,0x17,0x17,
-0x17,0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,
-0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0,0,0,0,0,0,0,0x58b,0x68b,
-0x7cb,0x11cb,0x1e4b,0x784b,5,5,5,5,6,6,6,6,0,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,
-0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,
-0x34cb,0x348b,0x388b,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0xccb,0x1e4b,0x344b,5,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,
-6,0x58b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,
-0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
-8,6,8,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,
-0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-8,8,8,6,6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17,
-0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0x10,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,6,
-6,6,6,6,8,6,6,6,6,6,6,6,6,0,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,8,8,0,
+5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
+0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
+0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b,5,5,5,5,6,6,6,6,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
+0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,
+0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0,5,5,5,5,5,5,5,5,
+5,5,0,6,6,0x13,0,0,5,5,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,6,0x17,0x17,5,0,
-0,0,0,0,0,0,0,0,8,5,5,5,5,0x17,0x17,0x17,
-0x17,6,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,6,
-6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
-0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0xccb,0x1e4b,0x344b,5,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,8,8,8,6,6,6,8,8,6,8,6,6,
-0x17,0x17,0x17,0x17,0x17,0x17,6,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,5,0,5,5,
-5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,5,5,5,5,5,5,5,5,5,5,0x17,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,5,5,8,8,0,0,6,6,6,6,6,6,
-6,0,0,0,6,6,6,6,6,0,0,0,0,0,0,0,
-0,0,0,0,6,6,8,8,0,5,5,5,5,5,5,5,
-5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,
-0,5,5,5,5,5,0,6,6,5,8,8,6,8,8,8,
-8,0,0,8,8,0,0,8,8,8,0,0,5,0,0,0,
-0,0,0,8,0,0,0,0,0,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,
+6,6,6,6,6,0x58b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0,0,
+0,0,0,0,5,5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,6,8,6,8,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,8,8,8,6,6,6,6,6,6,6,6,8,8,6,6,
-6,8,6,5,5,5,5,0x17,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x17,0,0x17,6,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,
-6,6,6,6,6,8,6,8,8,8,8,6,6,8,6,6,
-5,5,0x17,5,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+5,5,5,5,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,
+0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,8,8,8,6,6,6,6,8,8,6,6,0x17,
+0x17,0x10,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,
+0,0x10,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,6,
-6,6,0,0,8,8,8,8,6,6,8,6,6,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,5,5,5,5,6,6,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,
-6,6,6,6,6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,
-5,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,6,8,6,8,8,6,6,6,6,
-6,6,8,6,5,0,0,0,0,0,0,0,8,8,6,6,
-6,6,8,6,6,6,6,6,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,5,5,5,5,
-5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,
-6,6,6,6,8,6,6,0x17,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,
-0,0,0,0,0,0,0,0,0,0,0,5,6,5,0x17,5,
-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,
-6,6,6,6,0,0,6,6,8,8,8,8,5,5,5,5,
+5,5,5,6,6,6,6,6,8,6,6,6,6,6,6,6,
+6,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,
+5,8,8,5,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-6,6,6,6,6,8,5,6,6,6,6,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,6,0,0,0,0,0,0,0,0,5,6,6,6,
-6,6,6,8,8,6,6,6,5,5,5,5,5,6,6,6,
-6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0,
+0x17,0x17,5,0,0,0,0,0,0,0,0,0,8,5,5,5,
+5,0x17,0x17,0x17,0x17,6,6,6,6,0x17,8,6,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
+8,8,6,6,6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b,
+0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,
+0x784b,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,8,8,8,6,6,6,8,8,
+6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,6,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+5,0,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
+5,0x17,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,
+6,6,6,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,5,5,8,8,0,0,6,6,
+6,6,6,6,6,0,0,0,6,6,6,6,6,0,0,0,
+0,0,0,0,0,0,0,0,6,6,8,8,0,5,5,5,
+5,5,5,5,5,0,0,5,5,0,0,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
+5,0,5,5,0,5,5,5,5,5,0,6,6,5,8,8,
+6,8,8,8,8,0,0,8,8,0,0,8,8,8,0,0,
+5,0,0,0,0,0,0,8,0,0,0,0,0,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,
+8,8,6,6,6,8,6,5,5,5,5,0x17,0x17,0x17,0x17,0x17,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0x17,6,5,
+5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,
-6,6,6,8,6,6,0x17,0x17,0x17,5,0x17,0x17,5,0x17,0x17,0x17,
-0x17,0x17,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,
-0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0,0x17,0x17,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,8,6,6,6,6,6,6,6,0,
-6,6,6,6,6,6,8,6,6,6,6,6,6,6,6,6,
-0,8,6,6,6,6,6,6,6,8,6,6,8,6,6,0,
+8,8,8,6,6,6,6,6,6,8,6,8,8,8,8,6,
+6,8,6,6,5,5,0x17,5,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
+8,8,6,6,6,6,0,0,8,8,8,8,6,6,8,6,
+6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,6,6,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+8,8,8,6,6,6,6,6,6,6,6,8,8,6,8,6,
+6,0x17,0x17,0x17,5,0,0,0,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,6,8,6,8,8,
+6,6,6,6,6,6,8,6,5,0,0,0,0,0,0,0,
+8,8,6,6,6,6,8,6,6,6,6,6,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,
+5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,
+6,6,6,6,6,6,6,6,8,6,6,0x17,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,
+0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0,0,0,5,
+8,5,8,6,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+5,5,5,5,5,5,5,0,0,5,0,0,5,5,5,5,
+5,5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,8,8,8,8,8,8,0,8,
+8,0,0,6,6,8,6,5,6,5,0x17,5,8,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,5,6,0,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,5,5,5,5,5,5,5,0,5,5,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,6,6,6,6,6,6,0,0,0,6,0,
-6,6,0,6,5,5,5,5,5,5,5,5,5,5,8,8,
-8,8,8,0,6,6,0,8,8,6,8,6,5,0,0,0,
-0,0,0,0,5,5,5,5,5,5,0,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,6,6,8,8,0x17,0x17,0,0,0,
-0,0,0,0,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x17,0xcd0b,0xcc0b,0xcb0b,0xd00b,0xca0b,0xcf0b,0xcb4b,0xd04b,0xc90b,0x37cb,0x37cb,0x364b,
-0x35cb,0xc94b,0x3fcb,0x350b,0x34cb,0x344b,0x344b,0x3ccb,0xcd0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x19,0x19,0x19,0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,
-0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,
-0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,
-0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,
-0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,
-0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,
-0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,
-0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,
-0x454a,0x348a,0x388a,0x35ca,5,5,5,5,0,0,0,0,0,0,0,0,
+0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,
+0,0,6,6,8,8,8,8,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
+6,8,5,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,6,
+0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,8,
+8,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,
+6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x17,0x17,0x17,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,8,
+6,6,0x17,0x17,0x17,5,0x17,0x17,5,0x17,0x17,0x17,0x17,0x17,0,0,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,
+0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0,0x17,0x17,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,8,6,6,6,6,6,6,6,0,6,6,6,6,
+6,6,8,6,6,6,6,6,6,6,6,6,0,8,6,6,
+6,6,6,6,6,8,6,6,8,6,6,0,0,0,0,0,
0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,0,
+5,5,5,5,0,0,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,5,6,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+5,5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,6,6,6,6,6,6,0,0,0,6,0,6,6,0,6,
+5,5,5,5,5,5,5,5,5,5,8,8,8,8,8,0,
+6,6,0,8,8,6,8,6,5,0,0,0,0,0,0,0,
+5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,6,6,8,8,0x17,0x17,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x19,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x17,0xcd0b,0xcc0b,0xcb0b,0xd00b,
+0xca0b,0xcf0b,0xcb4b,0xd04b,0xc90b,0x37cb,0x37cb,0x364b,0x35cb,0xc94b,0x3fcb,0x350b,0x34cb,0x344b,0x344b,0x3ccb,
+0xcd0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x19,0x34ca,0x354a,0x34ca,0x34ca,
+0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,
+0x17,0,0,0,0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a,
+0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,
+0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,
+0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,
+0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,
+0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,
+0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca,5,5,5,5,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,6,6,6,6,6,0x17,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,
-0x1b,0x1b,0x1b,0x1b,4,4,4,4,0x17,0x1b,0,0,0,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,
-0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,5,5,5,5,5,5,5,5,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,0x10,0x10,0x10,0x10,
+0x10,0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,6,
+6,0x17,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
-0,5,5,5,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,
-0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0x58b,0x5cb,0x60b,0x17,0x17,0x17,0x17,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,6,5,8,8,8,8,8,8,8,8,8,8,8,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
+6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,4,4,4,4,
+0x17,0x1b,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,0,0,0,0,5,5,5,0x54b,0x58b,0x5cb,0x60b,
+0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,
+0x58b,0x5cb,0x60b,0x17,0x17,0x17,0x17,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,0,0,0,0,6,5,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,6,
-6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,0x17,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
+8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+0,0,0,0,0,0,0,6,6,6,6,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,0x17,4,6,0,0,0,
+0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,
+5,5,5,5,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,
-6,6,0x1b,0x1b,0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,6,6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,
-6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
+0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b,
+0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,
+6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
-0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0,0,0,0,
-0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,
-0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x58b,0x5cb,0x60b,0x64b,0x68b,0x58b,
-0x68b,0,0,0,0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,2,2,2,2,2,2,2,0,2,2,
-2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,0,1,1,
-0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,
-1,1,1,1,1,1,2,2,2,2,0,2,0,2,2,2,
-2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-2,2,2,2,1,1,0,1,1,1,1,0,0,1,1,1,
-1,1,1,1,1,0,1,1,1,1,1,1,1,0,2,2,
+0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,
+0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0,0,0,0,0,0,0,0,
+0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,
+0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x58b,0x5cb,0x60b,0x64b,0x68b,0x58b,0x68b,0,0,0,
+0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,1,0,1,1,1,1,0,
-1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,
-1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,2,2,2,2,2,2,2,0,2,2,2,2,2,2,
+2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,1,0,1,1,0,0,1,0,
+0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,
+1,1,2,2,2,2,0,2,0,2,2,2,2,2,2,2,
+0,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
+1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,
+1,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,1,1,0,1,1,1,1,0,1,1,1,1,
+1,0,1,0,0,0,1,1,1,1,1,1,1,0,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-2,2,2,2,2,2,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0x18,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,2,2,
-2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x18,2,2,2,2,
+1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
+2,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0x18,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,0x18,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,0x18,2,2,2,2,
-2,2,1,2,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,
-0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,
-6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,0,0,6,6,6,6,6,6,6,0,6,
-6,0,6,6,6,6,6,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,5,0x1b,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,6,
-6,6,6,4,4,4,4,4,4,4,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,6,6,6,6,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0x19,5,5,5,5,
-5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6,
-6,6,6,0,0,0,0,0,0,0,0,0,2,2,2,2,
-6,6,6,6,6,6,6,4,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,1,1,2,2,
+2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0x18,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,
+2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,2,2,2,0x18,2,2,2,2,2,2,1,2,
+0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,0,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+6,0,0,6,6,6,6,6,6,6,0,6,6,0,6,6,
+6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,5,0x1b,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0,6,6,6,6,6,6,6,4,
+4,4,4,4,4,4,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,6,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0x19,5,5,5,5,5,0,0,0x58b,
+0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6,6,6,6,0,
+0,0,0,0,0,0,0,0,2,2,2,2,6,6,6,6,
+6,6,6,4,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0x17,0x17,1,1,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,
-0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x78cb,0x794b,0x814b,0x58b,
-0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x1b,0x34cb,0x344b,0x3ccb,0x19,0x58b,0x5cb,0x788b,
-0x78cb,0,0,0,0,0,0,0,0,0,0,0,0x16cb,0x194b,0x1bcb,0x1e4b,
-0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,
-0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x984b,0xa04b,0xa84b,0xb04b,
-0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x1b,0x5cb,0x60b,0x64b,0x68b,0x6cb,
-0x70b,0x74b,0x78b,0x7cb,0x900b,0xa00b,0x804b,0x788b,0x344b,0x354b,0,0,0,0x58b,0x5cb,0x60b,
-0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,
-0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x18,0x18,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,
-5,0,0,5,0,5,5,5,5,5,5,5,5,5,5,0,
-5,5,5,5,0,5,0,5,0,0,0,0,0,0,5,0,
-0,0,0,5,0,5,0,5,0,5,5,5,0,5,5,0,
-5,0,0,5,0,5,0,5,0,5,0,5,0,5,5,0,
-5,0,0,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,0,5,5,5,5,0,5,0,5,5,5,5,
-5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,
-0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
+0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x78cb,0x794b,0x814b,0x58b,0x5cb,0x60b,0x64b,0x68b,
+0x6cb,0x70b,0x74b,0x78b,0x1b,0x34cb,0x344b,0x3ccb,0x19,0x58b,0x5cb,0x788b,0x78cb,0,0,0,
+0,0,0,0,0,0,0,0,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,
+0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,
+0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,
+0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x1b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,
+0x900b,0xa00b,0x804b,0x788b,0x344b,0x354b,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
+0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,
+0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x18,0x18,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,0,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,5,5,0,5,0,0,5,
+0,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
+0,5,0,5,0,0,0,0,0,0,5,0,0,0,0,5,
+0,5,0,5,0,5,5,5,0,5,5,0,5,0,0,5,
+0,5,0,5,0,5,0,5,0,5,5,0,5,0,0,5,
+5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,5,
+0,5,5,5,5,0,5,0,5,5,5,5,5,5,5,5,
+5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,0,0,0,0,5,5,5,0,5,5,5,
+5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,
+0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b,0x54b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b,0x54b,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
-0,0,0,0,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
+0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0,
+0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,5,0x705,5,5,
+0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,0x705,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,0x645,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
@@ -1372,1969 +1394,2007 @@ static const uint16_t propsTrie_index[21968]={
5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5,5,
5,5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
+5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x10,0x10,0x10,0x10,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x785,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0,0x10,0,0,
+0,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,0,0,0,0
+0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,
+0,0,0,0
};
static const UTrie2 propsTrie={
propsTrie_index,
- propsTrie_index+4468,
+ propsTrie_index+4532,
NULL,
- 4468,
- 17500,
+ 4532,
+ 17744,
0xa40,
- 0x11f4,
+ 0x1234,
0x0,
0x0,
0x110000,
- 0x55cc,
+ 0x5700,
NULL, 0, FALSE, FALSE, 0, NULL
};
-static const uint16_t propsVectorsTrie_index[30588]={
-0x4d6,0x4de,0x4e6,0x4ee,0x506,0x50e,0x516,0x51e,0x526,0x52e,0x536,0x53e,0x546,0x54e,0x556,0x55e,
-0x565,0x56d,0x575,0x57d,0x580,0x588,0x590,0x598,0x5a0,0x5a8,0x5b0,0x5b8,0x5c0,0x5c8,0x5d0,0x5d8,
-0x5e0,0x5e8,0x5ef,0x5f7,0x5ff,0x607,0x60f,0x617,0x61f,0x627,0x62c,0x634,0x63b,0x643,0x64b,0x653,
-0x65b,0x663,0x66b,0x673,0x67a,0x682,0x68a,0x692,0x69a,0x6a2,0x6aa,0x6b2,0x6ba,0x6c2,0x6ca,0x6d2,
-0x19e4,0xd43,0xe2a,0x6da,0x4f6,0xe91,0xe99,0x1b8e,0x12b7,0x12c7,0x12af,0x12bf,0x7a3,0x7a9,0x7b1,0x7b9,
-0x7c1,0x7c7,0x7cf,0x7d7,0x7df,0x7e5,0x7ed,0x7f5,0x7fd,0x803,0x80b,0x813,0x81b,0x823,0x82b,0x832,
-0x83a,0x840,0x848,0x850,0x858,0x85e,0x866,0x86e,0x876,0x12cf,0x87e,0x886,0x88e,0x895,0x89d,0x8a5,
-0x8ad,0x8b1,0x8b9,0x8c0,0x8c8,0x8d0,0x8d8,0x8e0,0x15e3,0x15eb,0x8e8,0x8f0,0x8f8,0x900,0x908,0x90f,
-0x1649,0x1639,0x1641,0x191f,0x1927,0x12df,0x917,0x12d7,0x1529,0x1529,0x152b,0x12f3,0x12f4,0x12e7,0x12e9,0x12eb,
-0x1651,0x1653,0x91f,0x1653,0x927,0x92c,0x934,0x1658,0x93a,0x1653,0x940,0x948,0xc1f,0x1660,0x1660,0x950,
-0x1670,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,
-0x1671,0x1671,0x1671,0x1668,0x958,0x1679,0x1679,0x960,0xb3f,0xb47,0xb4f,0xb57,0x1689,0x1681,0x968,0x970,
-0x978,0x1693,0x169b,0x980,0x1691,0x988,0x19ec,0xd4b,0xb5f,0xb67,0xb6f,0xb74,0x188d,0xc52,0xc59,0x17f5,
-0xbef,0x19f4,0xd53,0xd5b,0xd63,0xd6b,0xf44,0xf44,0x18e5,0x18ea,0xc8d,0xc95,0x195b,0x1963,0x1aad,0xe32,
-0x196b,0xcd7,0xcdf,0x1973,0x1101,0x11a9,0xf24,0xd73,0x1815,0x17fd,0x180d,0x1805,0x18a5,0x189d,0x1865,0xbff,
-0x12fc,0x12fc,0x12fc,0x12fc,0x12ff,0x12fc,0x12fc,0x1307,0x990,0x130f,0x994,0x99c,0x130f,0x9a4,0x9ac,0x9b4,
-0x131f,0x1317,0x1327,0x9bc,0x9c4,0x132f,0x9cc,0x9d4,0x1337,0x133f,0x1347,0x134f,0x9dc,0x1357,0x135e,0x1366,
-0x136e,0x1376,0x137e,0x1386,0x138e,0x1395,0x139d,0x13a5,0x13ad,0x13b5,0x13b8,0x13ba,0x16a3,0x1788,0x178e,0x18d5,
-0x13c2,0x9e4,0x9ec,0x14dc,0x14e1,0x14e4,0x14ec,0x13ca,0x14f4,0x14f4,0x13da,0x13d2,0x13e2,0x13ea,0x13f2,0x13fa,
-0x1402,0x140a,0x1412,0x141a,0x1796,0x17ed,0x192f,0x1a85,0x142a,0x1431,0x1439,0x1441,0x1422,0x1449,0x179e,0x17a5,
-0x16ab,0x16ab,0x16ab,0x16ab,0x16ab,0x16ab,0x16ab,0x16ab,0x17ad,0x17b0,0x17ad,0x17ad,0x17b8,0x17bf,0x17c1,0x17c8,
-0x17d0,0x17d4,0x17d4,0x17d7,0x17d4,0x17d4,0x17dd,0x17d4,0x181d,0x18dd,0x1937,0xb7c,0xb82,0x1bca,0x1bd2,0x1ca9,
-0x187d,0xc2f,0xc33,0x18f2,0x186d,0x186d,0x186d,0xc07,0x1875,0xc27,0x18bd,0xc7d,0xc0f,0xc17,0xc17,0x197b,
-0x18ad,0x193f,0xc69,0xc6d,0x9f4,0x16b3,0x16b3,0x9fc,0x16bb,0x16bb,0x16bb,0x16bb,0x16bb,0x16bb,0xa04,0x6de,
-0x1511,0x1533,0xa0c,0x153b,0xa14,0x1543,0x154b,0x1553,0xa1c,0xa21,0x155b,0x1562,0xa26,0xa2e,0x18cd,0xbf7,
-0xa36,0x15bd,0x15c4,0x156a,0x15cc,0x15d3,0x1572,0x1576,0x158f,0x158f,0x1591,0x157e,0x1586,0x1586,0x1587,0x15db,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,
-0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x16c3,0x1264,0x1825,0x1825,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,
-0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x15a0,0x19dc,0x126c,
-0x16cb,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,
-0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,
-0x16d1,0x16d1,0x16d1,0x16d1,0xa3e,0x16d9,0xa46,0x19fc,0x1987,0x1987,0x1987,0x1987,0x1987,0x1987,0x1987,0x1987,
-0x1983,0xce7,0x1997,0x198f,0x1999,0x1a04,0x1a04,0xd7b,0x1885,0x18fa,0x194f,0x1953,0x1947,0x1aa5,0xc9d,0xca0,
-0x18b5,0xc75,0x1902,0xca8,0x19a1,0x19a4,0xcef,0x1a0c,0x19b4,0x19ac,0xcf7,0xd83,0x1a14,0x1a18,0xd8b,0xfec,
-0x19bc,0xcff,0xd07,0x1a20,0x1a30,0x1a28,0xd93,0xeec,0xe3a,0xe42,0x1c19,0xfa4,0x1cc6,0x1cc6,0x1a38,0xd9b,
-0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,
-0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,
-0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,
-0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,
-0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,
-0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,
-0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,
-0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,
-0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,
-0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,
-0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,
-0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,
-0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,
-0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,
-0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,
-0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,
-0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,
-0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,
-0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,
-0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,
-0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,
-0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0x1631,0x162b,0x162c,0x162d,0x162e,0x162f,0x1630,0xa4e,0xda3,0xda6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,
-0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,0x1603,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,
-0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x14fc,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,
-0x15ad,0x15b5,0x17e5,0x1274,0x18c5,0x18c5,0x1278,0x127f,0xa56,0xa5e,0xa66,0x1469,0x1470,0x1478,0xa6e,0x1480,
-0x14b1,0x14b1,0x1459,0x1461,0x1488,0x14a8,0x14a9,0x14b9,0x1490,0x1451,0xa76,0x1498,0xa7e,0x14a0,0xa86,0xa8a,
-0xc85,0x14c1,0xa92,0xa9a,0x14c9,0x14cf,0x14d4,0xaa2,0xab2,0x1519,0x1521,0x1504,0x1509,0xaba,0xac2,0xaaa,
-0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,
-0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15fb,0x15fb,0x15fb,0x15fb,
-0x13d8,0x13d8,0x1418,0x1458,0x1498,0x14d8,0x1518,0x1558,0x1594,0x15d4,0x1600,0x1640,0x1680,0x16c0,0x1700,0x1740,
-0x1780,0x17bc,0x17fc,0x183c,0x187c,0x18b0,0x18ec,0x192c,0x196c,0x19ac,0x19e8,0x1a28,0x1a68,0x1aa8,0x1ae8,0x1b28,
-0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xe48,0xa40,0xe6a,0xa40,0xa40,0xa40,0xa40,0xbc0,0x12d5,0x12d5,
-0xeaa,0xeea,0xa40,0xa40,0xa40,0xa40,0xf2a,0xc00,0xa40,0xa40,0xc40,0xc80,0xcc0,0xd00,0xe08,0xd78,
-0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,
-0x1215,0x1215,0x1215,0x1215,0xf6a,0x1255,0x108a,0x10ca,0x1295,0x10d5,0x1315,0x1315,0x1315,0xfaa,0xfca,0x100a,
-0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,
-0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0xfca,0x104a,
+static const uint16_t propsVectorsTrie_index[31228]={
+0x4e8,0x4f0,0x4f8,0x500,0x518,0x520,0x528,0x530,0x538,0x540,0x548,0x550,0x558,0x560,0x568,0x570,
+0x577,0x57f,0x587,0x58f,0x592,0x59a,0x5a2,0x5aa,0x5b2,0x5ba,0x5c2,0x5ca,0x5d2,0x5da,0x5e2,0x5ea,
+0x5f2,0x5fa,0x601,0x609,0x611,0x619,0x621,0x629,0x631,0x639,0x63e,0x646,0x64d,0x655,0x65d,0x665,
+0x66d,0x675,0x67d,0x685,0x68c,0x694,0x69c,0x6a4,0x6ac,0x6b4,0x6bc,0x6c4,0x6cc,0x6d4,0x6dc,0x6e4,
+0x1a38,0xd5e,0xe35,0x6ec,0x508,0xe9c,0xea4,0x1bf2,0x1300,0x1310,0x12f8,0x1308,0x7c5,0x7cb,0x7d3,0x7db,
+0x7e3,0x7e9,0x7f1,0x7f9,0x801,0x807,0x80f,0x817,0x81f,0x825,0x82d,0x835,0x83d,0x845,0x84d,0x854,
+0x85c,0x862,0x86a,0x872,0x87a,0x880,0x888,0x890,0x898,0x1318,0x8a0,0x8a8,0x8b0,0x8b7,0x8bf,0x8c7,
+0x8cf,0x8d3,0x8db,0x8e2,0x8ea,0x8f2,0x8fa,0x902,0x162c,0x1634,0x90a,0x912,0x91a,0x922,0x92a,0x931,
+0x1692,0x1682,0x168a,0x1973,0x197b,0x1328,0x939,0x1320,0x1572,0x1572,0x1574,0x133c,0x133d,0x1330,0x1332,0x1334,
+0x169a,0x169c,0x941,0x169c,0x949,0x94e,0x956,0x16a1,0x95c,0x169c,0x962,0x96a,0xc39,0x16a9,0x16a9,0x972,
+0x16b9,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,
+0x16ba,0x16ba,0x16ba,0x16b1,0x97a,0x16c2,0x16c2,0x982,0xb59,0xb61,0xb69,0xb71,0x16d2,0x16ca,0x98a,0x992,
+0x99a,0x16dc,0x16e4,0x9a2,0x16da,0x9aa,0x1a40,0xd66,0xb79,0xb81,0xb89,0xb8e,0x18e1,0xc6c,0xc73,0x1849,
+0xc09,0x1a48,0xd6e,0xd76,0xd7e,0xd86,0xf47,0xf48,0x1939,0x193e,0xca8,0xcb0,0x19af,0x19b7,0x1b11,0xe3d,
+0x19bf,0xcf2,0xcfa,0x19c7,0x10f6,0x1196,0xf27,0xd8e,0x1869,0x1851,0x1861,0x1859,0x18f9,0x18f1,0x18b9,0xc19,
+0x1345,0x1345,0x1345,0x1345,0x1348,0x1345,0x1345,0x1350,0x9b2,0x1358,0x9b6,0x9be,0x1358,0x9c6,0x9ce,0x9d6,
+0x1368,0x1360,0x1370,0x9de,0x9e6,0x1378,0x9ee,0x9f6,0x1380,0x1388,0x1390,0x1398,0x9fe,0x13a0,0x13a7,0x13af,
+0x13b7,0x13bf,0x13c7,0x13cf,0x13d7,0x13de,0x13e6,0x13ee,0x13f6,0x13fe,0x1401,0x1403,0x16ec,0x17dc,0x17e2,0x1929,
+0x140b,0xa06,0xa0e,0x1525,0x152a,0x152d,0x1535,0x1413,0x153d,0x153d,0x1423,0x141b,0x142b,0x1433,0x143b,0x1443,
+0x144b,0x1453,0x145b,0x1463,0x17ea,0x1841,0x1983,0x1ad9,0x1473,0x147a,0x1482,0x148a,0x146b,0x1492,0x17f2,0x17f9,
+0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x1801,0x1804,0x1801,0x1801,0x180c,0x1813,0x1815,0x181c,
+0x1824,0x1828,0x1828,0x182b,0x1828,0x1828,0x1831,0x1828,0x1871,0x1931,0x198b,0xb96,0xb9c,0x1c36,0x1c3e,0x1d15,
+0x18d1,0xc49,0xc4d,0x1946,0x18c1,0x18c1,0x18c1,0xc21,0x18c9,0xc41,0x1911,0xc98,0xc29,0xc31,0xc31,0x19cf,
+0x1901,0x1993,0xc83,0xc88,0xa16,0x16fc,0x16fc,0xa1e,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0xa26,0x6f0,
+0x155a,0x157c,0xa2e,0x1584,0xa36,0x158c,0x1594,0x159c,0xa3e,0xa43,0x15a4,0x15ab,0xa48,0x170c,0x1921,0xc11,
+0xa50,0x1606,0x160d,0x15b3,0x1615,0x161c,0x15bb,0x15bf,0x15d8,0x15d8,0x15da,0x15c7,0x15cf,0x15cf,0x15d0,0x1624,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
+0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1717,0x1879,0x1879,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
+0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e9,0x1a30,0x12b5,
+0x171f,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,
+0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,
+0x1725,0x1725,0x1725,0x1725,0xa58,0x172d,0xa60,0x1a50,0x19db,0x19db,0x19db,0x19db,0x19db,0x19db,0x19db,0x19db,
+0x19d7,0xd02,0x19eb,0x19e3,0x19ed,0x1a58,0x1a58,0xd96,0x18d9,0x194e,0x19a3,0x19a7,0x199b,0x1b09,0xcb8,0xcbb,
+0x1909,0xc90,0x1956,0xcc3,0x19f5,0x19f8,0xd0a,0x1a60,0x1a08,0x1a00,0xd12,0xd9e,0x1a68,0x1a6c,0xda6,0xff0,
+0x1a10,0xd1a,0xd22,0x1a74,0x1a84,0x1a7c,0xdae,0xef7,0xe45,0xe4d,0x1c85,0xfa8,0x1d32,0x1d32,0x1a8c,0xdb6,
+0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,
+0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,
+0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,
+0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,
+0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,
+0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,
+0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,
+0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,
+0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,
+0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,
+0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,
+0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,
+0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,
+0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,
+0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,
+0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,
+0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,
+0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,
+0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,
+0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,
+0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,
+0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0xa68,0xdbe,0xdc1,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,
+0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
+0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,
+0x15f6,0x15fe,0x1839,0x12bd,0x1919,0x1919,0x12c1,0x12c8,0xa70,0xa78,0xa80,0x14b2,0x14b9,0x14c1,0xa88,0x14c9,
+0x14fa,0x14fa,0x14a2,0x14aa,0x14d1,0x14f1,0x14f2,0x1502,0x14d9,0x149a,0xa90,0x14e1,0xa98,0x14e9,0xaa0,0xaa4,
+0xca0,0x150a,0xaac,0xab4,0x1512,0x1518,0x151d,0xabc,0xacc,0x1562,0x156a,0x154d,0x1552,0xad4,0xadc,0xac4,
+0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,
+0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x1644,0x1644,0x1644,0x1644,
+0x1420,0x1420,0x1460,0x14a0,0x14e0,0x1520,0x1560,0x15a0,0x15dc,0x161c,0x1648,0x1688,0x16c8,0x1708,0x1748,0x1788,
+0x17c8,0x1804,0x1844,0x1884,0x18c4,0x18f8,0x1934,0x1974,0x19b4,0x19f4,0x1a30,0x1a70,0x1ab0,0x1af0,0x1b30,0x1b70,
+0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xe75,0xa40,0xe97,0xa40,0xa40,0xa40,0xa40,0xbc0,0x12dd,0x12dd,
+0xed7,0xc00,0xa40,0xa40,0xa40,0xa40,0xf17,0xc2d,0xa40,0xa40,0xc6d,0xcad,0xced,0xd2d,0xe35,0xda5,
+0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,
+0x121d,0x121d,0x121d,0x121d,0xf57,0x125d,0x1092,0x10d2,0x129d,0x10dd,0x131d,0x131d,0x131d,0xf97,0xfb7,0xff7,
+0x135d,0x135d,0x1037,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,
+0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0x1052,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
-0xdb8,0xdc8,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd38,
-0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,
-0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1195,0x1115,
-0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,
-0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x11d5,0x1155,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0xb8a,0xb91,0xb99,0xba1,0x182d,0x182d,0x182d,0xba9,0xbb1,0xbb4,0x185d,0x1855,0xbe7,0xd0f,0xd13,0xd17,
-0x4f6,0x4f6,0x4f6,0x4f6,0xd1f,0x19c4,0xd27,0xf3c,0x16e1,0xaca,0xad0,0xffc,0xbbc,0x1895,0xc61,0x4f6,
-0x16f6,0x16e9,0x16ee,0x1835,0xbc4,0xbcc,0x113f,0x1145,0x1c01,0xf59,0x1bf1,0x6e6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1c21,0x1c21,0x1c21,0x1c21,0x1c21,0x1c21,0x1c21,0x1c21,0x1c21,0xfac,0xfb4,0xfbc,0x4f6,0x4f6,0x4f6,0x4f6,
-0xbd4,0xbd7,0xdae,0x1c69,0xff4,0x6ee,0x4f6,0x108d,0xcb0,0xd2f,0x4f6,0x4f6,0x1b9e,0xef4,0xefc,0x1cb1,
-0xc3b,0xc42,0xc4a,0x1a40,0x1c49,0x4f6,0x1c29,0xfcc,0x1a48,0xdb6,0xdbe,0xdc6,0x101c,0x6f6,0x4f6,0x4f6,
-0x1a50,0x1a50,0x6fe,0x4f6,0x1cde,0x10a5,0x1cd6,0x10ad,0x1d96,0x11bf,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0xdce,0x4f6,0x4f6,0x4f6,0x4f6,0x1db6,0x11e7,0x11ee,0x706,0x4f6,0x4f6,0x4f6,0x11f6,
-0x1ab5,0x1ab7,0xe4a,0xe51,0x1a58,0x1a60,0xdd6,0xf1c,0x1b96,0xedc,0xee4,0xfc4,0x1bb6,0x1bba,0xf14,0x103c,
-0xf8f,0xf94,0x70e,0x4f6,0x1095,0x109d,0x1c11,0xf9c,0xf71,0xf77,0xf7f,0xf87,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1d26,0x1d1e,0x112f,0x1137,0x1c91,0x1c89,0x1063,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1c79,0x1024,0x102c,0x1034,
-0x1c41,0x1c39,0xfdc,0x1127,0x1bc2,0xf2c,0x716,0x4f6,0x1073,0x107b,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1d8e,0x11a1,0x71e,0x4f6,0x4f6,0x1ca1,0x1c99,0x106b,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x11fe,0x1202,0x120a,
-0x1d66,0x1d5e,0x1189,0x1d56,0x1d4e,0x726,0x1c71,0x1014,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x10e5,0x10ea,0x10f2,0x10f9,0x1119,0x111f,0x4f6,0x4f6,0x116d,0x1171,0x1179,0x11b1,0x11b7,0x72e,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x11cf,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1dce,0x1240,
-0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,
-0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190a,0x190f,0xcb8,0xcbf,0xcbf,0xcbf,
-0x1917,0x1917,0x1917,0xcc7,0x1cce,0x1cce,0x1cce,0x1cce,0x1cce,0x1cce,0x736,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,0x1abf,
-0x1abf,0xe59,0xfe4,0x73e,0x4f6,0x4f6,0x742,0xf34,0x1c61,0x1c59,0x1004,0x100c,0x74a,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x1dae,0x1da6,0x11df,0x4f6,0x4f6,0x4f6,0x1bae,0x1bae,0xf04,0x1ba6,0xf0c,0x4f6,0x4f6,0x1111,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1bf9,0x1bf9,0x1bf9,0xf4c,0xf51,0x752,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0xad8,0x170e,0xae0,0x170f,0x1706,0x1717,0x171d,0x1725,0xae8,
-0x184d,0x184d,0x75a,0x4f6,0x4f6,0x4f6,0x4f6,0x11d7,0x183d,0x183d,0xbdf,0xccf,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1756,0x175d,0xaf0,0x1760,0xaf8,0xb00,0xb08,0x175a,0xb10,0xb18,0xb20,0x175f,0x1767,0x1756,0x175d,0x1759,
-0x1760,0x1768,0x1757,0x175e,0x175a,0xb27,0x172d,0x1735,0x173c,0x1743,0x1730,0x1738,0x173f,0x1746,0xb2f,0x174e,
-0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,0x1cf6,
-0x1ce6,0x1ce9,0x1ce6,0x1cf0,0x10d5,0x762,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1109,0x76a,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1dc6,0x1212,0x772,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1dd6,0x1248,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x1c31,0x1c31,0x1c31,0x1c31,0x1c31,0x1c31,0xfd4,0x4f6,0x1d16,0x1d0e,0x10dd,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x776,0x1d9e,0x11c7,0x4f6,0x4f6,0x121a,0x121b,0x77e,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0xea1,0xea9,0xeb1,0xeb9,0xec1,0xec9,0xed0,0xed4,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x782,0x1044,0x1c81,0x104a,0x1c81,0x1052,0x1057,0x105b,0x105b,
-0x10b5,0x1d2e,0x1d36,0x10bd,0x1d06,0x10c5,0x10cd,0x1d76,0x1dbe,0x1dbe,0x1191,0x1199,0x1232,0x1238,0x1238,0x1238,
-0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,
-0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,
-0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78a,0x78b,0xb37,0x1770,0x1770,0x1770,0x793,0x793,0x793,0x793,
-0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x79b,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,
-0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,
-0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,
-0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,
-0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x793,0x19cc,0xd37,0x19d4,0x19d4,0xd3b,0xe61,0xe69,0xe71,
-0xde6,0x1a7d,0x1a95,0xdee,0x1a8d,0xdf6,0xdfa,0xe01,0xe09,0xe10,0xe18,0xe20,0xe22,0xe22,0xe22,0xe22,
-0x1af6,0x1afe,0x1af6,0x1b04,0x1b0c,0x1ad7,0x1b14,0x1b1c,0x1af6,0x1b24,0x1b2c,0x1b33,0x1b3b,0x1adf,0x1af6,0x1b40,
-0x1ae7,0x1aee,0x1b48,0x1b4e,0x1be2,0x1be9,0x1bda,0x1b56,0x1b5e,0x1b66,0x1b6e,0x1c51,0x1b76,0x1b7e,0xe79,0xe81,
-0x1ac7,0x1ac7,0x1ac7,0xe89,0x1c09,0x1c09,0xf61,0xf69,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,
-0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0x1a6a,0x1a68,0x1a72,0x1a68,0x1a68,0x1a68,
-0x1a68,0x1a68,0x1a68,0x1a75,0x1a68,0x1a68,0x1a68,0x1a68,0x1a68,0xdde,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cb9,
-0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cb9,0x1cbe,0x1cb9,0x1cb9,0x1cb9,0x1083,0x1085,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x114d,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,
-0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,0x1d46,
-0x1d46,0x1155,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1acf,0x1d6e,0x1d6e,0x1d6e,0x1d6e,0x1d6e,
-0x1d6e,0x1d6e,0x115d,0x1165,0x1223,0x122a,0x1d86,0x1d86,0x1d86,0x1d86,0x1d86,0x1d86,0x1d86,0x1d86,0x1d86,0x1d86,
-0x1d86,0x1181,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,
-0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x4f6,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1287,0x1250,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1258,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1780,0x1780,0x1780,0x1780,0x1780,0x1780,
-0x1780,0x1780,0x1780,0x1780,0x1780,0x1780,0x1780,0x1780,0x1780,0x1780,0x128f,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x125c,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,
-0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x1250,0x125c,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1297,0x1b86,0x1b86,0x1b86,0x1b86,0x1b86,0x1b86,0x129f,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x12a7,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x160b,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1613,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,0x161b,
-0x161b,0x161b,0x161b,0x161b,0x161b,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,0x1778,
-0x1778,0x1778,0x1778,0x1778,0x1778,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,
-0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,
-0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,
-0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d3e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,
-0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x1d7e,0x4d5,0x4d5,0x4d5,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
-0x2bb,0x2be,0x2c7,0x2c1,0x2c1,0x2c4,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
-0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x7ef,0x7e9,0x7ce,0x7c5,0x7bc,0x7b9,0x7b0,0x7cb,
-0x7b6,0x7c2,0x7c5,0x7e0,0x7d7,0x7c8,0x7ec,0x7bf,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,
-0x7ad,0x7ad,0x7d4,0x7d1,0x7da,0x7da,0x7da,0x7e9,0x7b0,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7f5,
-0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,
-0x7f5,0x7f5,0x7f5,0x7b6,0x7bc,0x7c2,0x7e6,0x7aa,0x7e3,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f2,
-0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,
-0x7f2,0x7f2,0x7f2,0x7b6,0x7dd,0x7b3,0x7da,0x2bb,0,0,0,0,0,0,0,0,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xde5,0xdf5,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,
+0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x111d,
+0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,
+0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x115d,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0xba4,0xbab,0xbb3,0xbbb,0x1881,0x1881,0x1881,0xbc3,0xbcb,0xbce,0x18b1,0x18a9,0xc01,0xd2a,0xd2e,0xd32,
+0x508,0x508,0x508,0x508,0xd3a,0x1a18,0xd42,0xf3f,0x1735,0xae4,0xaea,0x1000,0xbd6,0x18e9,0xc7b,0x508,
+0x174a,0x173d,0x1742,0x1889,0xbde,0xbe6,0x1134,0x113a,0x1c6d,0xf5d,0x1c5d,0x6f8,0x508,0x508,0x508,0x508,
+0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0xfb0,0xfb8,0xfc0,0x508,0x508,0x508,0x508,
+0xbee,0xbf1,0xdc9,0x1cd5,0xff8,0x700,0x508,0x1092,0xccb,0xd4a,0x508,0x508,0x1c02,0xeff,0xf07,0x1d1d,
+0xc55,0xc5c,0xc64,0x1a94,0x1cb5,0x508,0x1c95,0xfd0,0x1a9c,0xdd1,0xdd9,0xde1,0x1020,0x708,0x508,0x508,
+0x1aa4,0x1aa4,0x710,0x508,0x1d4a,0x10aa,0x1d42,0x10b2,0x1e0e,0x11ac,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0xde9,0x1e66,0x1291,0x508,0x508,0x1e2e,0x11d4,0x11db,0x718,0x508,0x71c,0x1248,0x11e3,
+0x1b19,0x1b1b,0xe55,0xe5c,0x1aac,0x1ab4,0xdf1,0xf1f,0x1bfa,0xee7,0xeef,0xfc8,0x1c1a,0x1c1e,0x1c26,0x1040,
+0xf93,0xf98,0x724,0x508,0x109a,0x10a2,0x1c7d,0xfa0,0xf75,0xf7b,0xf83,0xf8b,0x508,0x508,0x508,0x508,
+0x1daa,0x1da2,0x1124,0x112c,0x1cfd,0x1cf5,0x1068,0x508,0x508,0x508,0x508,0x508,0x1ce5,0x1028,0x1030,0x1038,
+0x1cad,0x1ca5,0xfe0,0x111c,0x1c2e,0xf2f,0x72c,0x508,0x1078,0x1080,0x508,0x508,0x508,0x508,0x508,0x508,
+0x1e06,0x118e,0x734,0x508,0x508,0x1d0d,0x1d05,0x1070,0x1250,0x1256,0x125e,0x508,0x508,0x11eb,0x11ef,0x11f7,
+0x1dde,0x1dd6,0x1176,0x1dce,0x1dc6,0x73c,0x1cdd,0x1018,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x10da,0x10df,0x10e7,0x10ee,0x110e,0x1114,0x508,0x508,0x115a,0x115e,0x1166,0x119e,0x11a4,0x744,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x11bc,0x508,0x508,0x508,0x508,0x508,0x748,0x1e4e,0x1238,
+0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,
+0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x1963,0xcd3,0xcda,0xcda,0xcda,
+0x196b,0x196b,0x196b,0xce2,0x1d3a,0x1d3a,0x1d3a,0x1d3a,0x1d3a,0x1d3a,0x750,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,
+0x1b23,0xe64,0xfe8,0x758,0x508,0x508,0x75c,0xf37,0x1ccd,0x1cc5,0x1008,0x1010,0x764,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x1e26,0x1e1e,0x11cc,0x508,0x508,0x508,0x1c12,0x1c12,0xf0f,0x1c0a,0xf17,0x508,0x508,0x1106,
+0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,
+0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dbe,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,
+0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1266,0x126c,0x1286,0x1289,0x1289,0x1289,0x76c,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1c65,0x1c65,0x1c65,
+0xf50,0xf55,0x774,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1752,0x1752,0x1752,
+0x1752,0x1752,0x1752,0x1752,0xaf2,0x1762,0xafa,0x1763,0x175a,0x176b,0x1771,0x1779,0xb02,0x18a1,0x18a1,0x77c,
+0x508,0x508,0x508,0x508,0x11c4,0x1891,0x1891,0xbf9,0xcea,0x508,0x508,0x508,0x508,0x17aa,0x17b1,0xb0a,
+0x17b4,0xb12,0xb1a,0xb22,0x17ae,0xb2a,0xb32,0xb3a,0x17b3,0x17bb,0x17aa,0x17b1,0x17ad,0x17b4,0x17bc,0x17ab,
+0x17b2,0x17ae,0xb41,0x1781,0x1789,0x1790,0x1797,0x1784,0x178c,0x1793,0x179a,0xb49,0x17a2,0x1d62,0x1d62,0x1d62,
+0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d52,0x1d55,0x1d52,
+0x1d5c,0x10ca,0x784,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x10fe,0x78c,0x508,
+0x508,0x508,0x508,0x508,0x508,0x1e46,0x11ff,0x794,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x1e56,0x1240,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1c9d,0x1c9d,0x1c9d,
+0x1c9d,0x1c9d,0x1c9d,0xfd8,0x508,0x1d9a,0x1d92,0x10d2,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x798,0x1e16,0x11b4,0x508,0x508,0x1207,0x1208,0x7a0,0x508,0x508,0x508,0x508,0x508,0xeac,0xeb4,0xebc,
+0xec4,0xecc,0xed4,0xedb,0xedf,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x7a4,0x1048,0x1ced,0x104e,0x1ced,0x1056,0x105b,0x1060,0x1060,0x1d72,0x1d82,0x1d8a,
+0x10ba,0x1d7a,0x1e36,0x10c2,0x1dee,0x1e3e,0x1e3e,0x117e,0x1186,0x121f,0x1225,0x122a,0x1230,0x1e5e,0x1e5e,0x1e5e,
+0x1e5e,0x1274,0x1e5e,0x127a,0x127e,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,
+0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,
+0x7ac,0x7ac,0x7ac,0x7ac,0x7ad,0xb51,0x17c4,0x17c4,0x17c4,0x7b5,0x7b5,0x7b5,0x7b5,0x1899,0x1899,0x1899,
+0x1899,0x1899,0x1899,0x1899,0x7bd,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
+0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
+0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
+0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
+0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x1a20,0xd52,0x1a28,0x1a28,0xd56,0xe6c,0xe74,0xe7c,0x1ae9,0x1ad1,0x1af1,
+0x1af9,0x1ae1,0xe01,0xe05,0xe0c,0xe14,0xe1b,0xe23,0xe2b,0xe2d,0xe2d,0xe2d,0xe2d,0x1b5a,0x1b62,0x1b5a,
+0x1b68,0x1b70,0x1b3b,0x1b78,0x1b80,0x1b5a,0x1b88,0x1b90,0x1b97,0x1b9f,0x1b43,0x1b5a,0x1ba4,0x1b4b,0x1b52,0x1bac,
+0x1bb2,0x1c4e,0x1c55,0x1c46,0x1bba,0x1bc2,0x1bca,0x1bd2,0x1cbd,0x1bda,0x1be2,0xe84,0xe8c,0x1b2b,0x1b2b,0x1b2b,
+0xe94,0x1c75,0x1c75,0xf65,0xf6d,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,
+0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abe,0x1abc,0x1ac6,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,
+0x1ac9,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0xdf9,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,
+0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d2a,0x1d25,0x1d25,0x1d25,0x1088,0x108a,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1142,0x1b33,0x1de6,0x1de6,0x1de6,0x1de6,0x1de6,0x1de6,0x1de6,0x114a,
+0x1152,0x1210,0x1217,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x116e,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
+0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x12d0,0x1299,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
+0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
+0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x12a1,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,
+0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x12d8,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x12a5,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
+0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
+0x1e6e,0x12ad,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x12a5,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x12e0,0x1bea,0x1bea,0x1bea,0x1bea,
+0x1bea,0x1bea,0x12e8,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x12f0,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1654,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x165c,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
+0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
+0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
+0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
+0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
+0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
+0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1df6,0x1df6,0x1df6,
+0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
+0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
+0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
+0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1e6e,0x1e6e,0x1e6e,
+0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
+0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
+0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
+0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x4e7,0x4e7,0x4e7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2ca,0x2d3,0x2cd,0x2cd,0x2d0,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x7fb,0x7f5,0x7da,0x7d1,0x7c8,0x7c5,0x7bc,0x7d7,0x7c2,0x7ce,0x7d1,0x7ec,0x7e3,0x7d4,0x7f8,0x7cb,
+0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7e0,0x7dd,0x7e6,0x7e6,0x7e6,0x7f5,
+0x7bc,0x807,0x807,0x807,0x807,0x807,0x807,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,
+0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x7c2,0x7c8,0x7ce,0x7f2,0x7b6,
+0x7ef,0x804,0x804,0x804,0x804,0x804,0x804,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,
+0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7c2,0x7e9,0x7bf,0x7e6,0x2c7,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2d9,0x2ca,0x2ca,
-0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,
-0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2cd,0x645,0x804,0x807,0x64b,0x807,0x801,0x642,
-0x639,0x2d3,0x657,0x2d6,0x80a,0x630,0x64e,0x7fe,0x648,0x654,0x636,0x636,0x63c,0x2d0,0x642,0x63f,
-0x639,0x636,0x657,0x2d6,0x633,0x633,0x633,0x645,0x2df,0x2df,0x2df,0x2df,0x2df,0x2df,0x660,0x2df,
-0x2df,0x2df,0x2df,0x2df,0x2df,0x2df,0x2df,0x2df,0x660,0x2df,0x2df,0x2df,0x2df,0x2df,0x2df,0x651,
-0x660,0x2df,0x2df,0x2df,0x2df,0x2df,0x660,0x65a,0x65d,0x65d,0x2dc,0x2dc,0x2dc,0x2dc,0x65a,0x2dc,
-0x65d,0x65d,0x65d,0x2dc,0x65d,0x65d,0x2dc,0x2dc,0x65a,0x2dc,0x65d,0x65d,0x2dc,0x2dc,0x2dc,0x651,
-0x65a,0x65d,0x65d,0x2dc,0x65d,0x2dc,0x65a,0x2dc,0x2eb,0x666,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,
-0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2e8,0x663,0x2eb,0x666,0x2eb,0x2e2,0x2eb,0x2e2,
-0x2eb,0x2e2,0x2eb,0x666,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x66c,0x663,
-0x2eb,0x2e2,0x2eb,0x666,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x663,0x66f,0x669,0x2eb,0x2e2,0x2eb,0x2e2,
-0x663,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x66f,0x669,0x66c,0x663,0x2eb,0x666,0x2eb,0x2e2,0x2eb,
-0x666,0x672,0x66c,0x663,0x2eb,0x666,0x2eb,0x2e2,0x2eb,0x2e2,0x66c,0x663,0x2eb,0x2e2,0x2eb,0x2e2,
-0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x66c,0x663,
-0x2eb,0x2e2,0x2eb,0x666,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,
-0x2eb,0x2eb,0x2e2,0x2eb,0x2e2,0x2eb,0x2e2,0x2e5,0x2ee,0x2fa,0x2fa,0x2ee,0x2fa,0x2ee,0x2fa,0x2fa,
-0x2ee,0x2fa,0x2fa,0x2fa,0x2ee,0x2ee,0x2fa,0x2fa,0x2fa,0x2fa,0x2ee,0x2fa,0x2fa,0x2ee,0x2fa,0x2fa,
-0x2fa,0x2ee,0x2ee,0x2ee,0x2fa,0x2fa,0x2ee,0x2fa,0x2fd,0x2f1,0x2fa,0x2ee,0x2fa,0x2ee,0x2fa,0x2fa,
-0x2ee,0x2fa,0x2ee,0x2ee,0x2fa,0x2ee,0x2fa,0x2fd,0x2f1,0x2fa,0x2fa,0x2fa,0x2ee,0x2fa,0x2ee,0x2fa,
-0x2fa,0x2ee,0x2ee,0x2f7,0x2fa,0x2ee,0x2ee,0x2ee,0x2f7,0x2f7,0x2f7,0x2f7,0x300,0x300,0x2f4,0x300,
-0x300,0x2f4,0x300,0x300,0x2f4,0x2fd,0x675,0x2fd,0x675,0x2fd,0x675,0x2fd,0x675,0x2fd,0x675,0x2fd,
-0x675,0x2fd,0x675,0x2fd,0x675,0x2ee,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fa,0x2ee,0x2fd,0x2f1,
-0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2f1,0x300,0x300,0x2f4,0x2fd,0x2f1,0x9e1,0x9e1,
-0x9e4,0x9de,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,
-0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x2fd,0x2f1,0x9e4,0x9de,0x9e4,0x9de,
-0x9e1,0x9db,0x9e4,0x9de,0xba6,0xcae,0x9e1,0x9db,0x9e1,0x9db,0x9e4,0x9de,0x9e4,0x9de,0x9e4,0x9de,
-0x9e4,0x9de,0x9e4,0x9de,0x9e4,0x9de,0x9e4,0x9de,0xcae,0xcae,0xcae,0xdad,0xdad,0xdad,0xdb0,0xdb0,
-0xdad,0xdb0,0xdb0,0xdad,0xdad,0xdb0,0xeee,0xef1,0xef1,0xef1,0xef1,0xeee,0xef1,0xeee,0xef1,0xeee,
-0xef1,0xeee,0xef1,0xeee,0x303,0x678,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,
-0x303,0x303,0x303,0x303,0x303,0x678,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,
-0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,
-0x303,0x303,0x303,0x303,0x306,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,
-0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x303,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0xcb1,0xcb1,
-0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x315,0x315,0x315,0x315,0x315,0x315,0x315,
-0x312,0x312,0x30f,0x30f,0x67e,0x30f,0x315,0x681,0x318,0x681,0x681,0x681,0x318,0x681,0x315,0x315,
-0x684,0x31b,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x67b,0x67b,0x67b,0x67b,0x30c,0x67b,0x30f,0xb1c,
-0x31e,0x31e,0x31e,0x31e,0x31e,0x309,0x309,0x309,0x309,0x309,0x9f0,0x9f0,0x9ed,0x9ea,0x9ed,0xcb4,
-0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,
-0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,
-0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,
-0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,
-0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,
-0x68a,0x68a,0x942,0x68a,0x68a,0x945,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xc63,
-0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xeb5,0xeb5,0xeb5,0xeb5,0xeb8,0xd7d,0xd7d,0xd7d,
-0x68d,0x68d,0xb22,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,
-0xf9c,0xf99,0xf9c,0xf99,0x32a,0x333,0xf9c,0xf99,9,9,0x339,0xef4,0xef4,0xef4,0x321,0x14f1,
-9,9,9,9,0x336,0x324,0x348,0x327,0x348,0x348,0x348,9,0x348,9,0x348,0x348,
-0x33f,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
-0x693,0x693,9,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x348,0x348,0x33f,0x33f,0x33f,0x33f,
-0x33f,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,
-0x690,0x690,0x33c,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x33f,0x33f,0x33f,0x33f,0x33f,0xf9c,
-0x34b,0x34b,0x34e,0x348,0x348,0x34b,0x342,0x9f3,0xbaf,0xbac,0x345,0x9f3,0x345,0x9f3,0x345,0x9f3,
-0x345,0x9f3,0x330,0x32d,0x330,0x32d,0x330,0x32d,0x330,0x32d,0x330,0x32d,0x330,0x32d,0x330,0x32d,
-0x34b,0x34b,0x342,0x33c,0xb5e,0xb5b,0xba9,0xcba,0xcb7,0xcbd,0xcba,0xcb7,0xdb3,0xdb6,0xdb6,0xdb6,
-0xa02,0x69f,0x35a,0x35d,0x35a,0x35a,0x35a,0x35d,0x35a,0x35a,0x35a,0x35a,0x35d,0xa02,0x35d,0x35a,
-0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69f,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,
-0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,
-0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x699,0x696,0x696,0x696,0x696,0x696,0x696,
-0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x9fc,0x699,0x354,0x357,
-0x354,0x354,0x354,0x357,0x354,0x354,0x354,0x354,0x357,0x9fc,0x357,0x354,0x35a,0x354,0x35a,0x354,
-0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,
-0x35a,0x354,0x35d,0x357,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x351,0x94e,
-0x951,0x933,0x933,0x1143,0x9f6,0x9f6,0xbb5,0xbb2,0x9ff,0x9f9,0x9ff,0x9f9,0x35a,0x354,0x35a,0x354,
-0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,
-0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,
-0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x354,0x35a,0x35d,0x357,0x35a,
-0x354,0xbb5,0xbb2,0x35a,0x354,0xbb5,0xbb2,0x35a,0x354,0xbb5,0xbb2,0xef7,0x35d,0x357,0x35d,0x357,
-0x35a,0x354,0x35d,0x357,0x35a,0x354,0x35d,0x357,0x35d,0x357,0x35d,0x357,0x35a,0x354,0x35d,0x357,
-0x35d,0x357,0x35d,0x357,0x35a,0x354,0x35d,0x357,0xa02,0x9fc,0x35d,0x357,0x35d,0x357,0x35d,0x357,
-0x35d,0x357,0xdbc,0xdb9,0x35d,0x357,0xefa,0xef7,0xefa,0xef7,0xefa,0xef7,0xc24,0xc21,0xc24,0xc21,
-0xc24,0xc21,0xc24,0xc21,0xc24,0xc21,0xc24,0xc21,0xc24,0xc21,0xc24,0xc21,0xf27,0xf24,0xf27,0xf24,
-0x1017,0x1014,0x1017,0x1014,0x1017,0x1014,0x1017,0x1014,0x1017,0x1014,0x1017,0x1014,0x1017,0x1014,0x1017,0x1014,
-0x117c,0x1179,0x1365,0x1362,0x152a,0x1527,0x152a,0x1527,0x152a,0x1527,0x152a,0x1527,0xc,0x36f,0x36f,0x36f,
-0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,
-0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xc,0xc,0x372,0x360,0x363,0x363,0x366,0x363,0x360,
-0x1932,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,
-0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,
-0x369,0x369,0x369,0x36c,0x1932,0x8b8,0xa05,0xc,0xc,0x14f4,0x14f4,0x1410,0xf,0x975,0x975,0x975,
-0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0xdbf,0x975,
-0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x375,0x375,0x375,0x375,
-0x375,0x375,0x375,0x375,0x375,0x375,0xefd,0x375,0x375,0x375,0x381,0x375,0x378,0x375,0x375,0x384,
-0x978,0xdc2,0xdc5,0xdc2,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0x387,0x387,0x387,0x387,
-0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,
-0x387,0x387,0x387,0x387,0x387,0x387,0x387,0xf,0xf,0xf,0xf,0x1935,0x387,0x387,0x387,0x37e,
-0x37b,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xcd2,0xcd2,0xcd2,0xcd2,
-0x1413,0x14f7,0xfa5,0xfa5,0xfa5,0xfa2,0xfa2,0xdcb,0x8be,0xccc,0xcc9,0xcc9,0xcc0,0xcc0,0xcc0,0xcc0,
-0xcc0,0xcc0,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0x8bb,0x14ee,0x12,0xdce,0x8c1,0x132c,0x3a2,0x3a5,0x3a5,
-0x3a5,0x3a5,0x3a5,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
-0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0x8c4,0x3a2,0x3a2,0x3a2,
-0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0xb55,
-0xb55,0xb55,0xcc0,0xcc6,0xcc3,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0x1329,0x954,0x954,0x954,0x954,
-0x954,0x954,0x954,0x954,0x954,0x954,0x39c,0x399,0x396,0x393,0xbb8,0xbb8,0x936,0x3a2,0x3a2,0x3ae,
-0x3a2,0x3a8,0x3a8,0x3a8,0x3a8,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
-0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
-0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
-0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
-0xa0b,0xa0b,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0xa0b,0x3a5,0x3a2,0x3a5,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,
-0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0xa0b,0x3a2,0x3a2,0x3a2,0x3a5,0x957,0x3a2,0x38d,0x38d,
-0x38d,0x38d,0x38d,0x38d,0x38d,0x38a,0x393,0x390,0x390,0x38d,0x38d,0x38d,0x38d,0x3ab,0x3ab,0x38d,
-0x38d,0x393,0x390,0x390,0x390,0x38d,0xccf,0xccf,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
-0x39f,0x39f,0xa0b,0xa0b,0xa0b,0xa08,0xa08,0xccf,0xa20,0xa20,0xa20,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,
-0xa1a,0xa1a,0xa1a,0xa17,0xa1a,0xa17,0x15,0xa23,0xa1d,0xa0e,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2e5,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
+0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
+0x2d9,0x651,0x810,0x813,0x657,0x813,0x80d,0x64e,0x645,0x2df,0x663,0x2e2,0x816,0x63c,0x65a,0x80a,
+0x654,0x660,0x642,0x642,0x648,0x2dc,0x64e,0x64b,0x645,0x642,0x663,0x2e2,0x63f,0x63f,0x63f,0x651,
+0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x66c,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,
+0x66c,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x65d,0x66c,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x66c,0x666,
+0x669,0x669,0x2e8,0x2e8,0x2e8,0x2e8,0x666,0x2e8,0x669,0x669,0x669,0x2e8,0x669,0x669,0x2e8,0x2e8,
+0x666,0x2e8,0x669,0x669,0x2e8,0x2e8,0x2e8,0x65d,0x666,0x669,0x669,0x2e8,0x669,0x2e8,0x666,0x2e8,
+0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,
+0x2f4,0x66f,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,
+0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x678,0x66f,0x2f7,0x2ee,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,
+0x2f7,0x66f,0x67b,0x675,0x2f7,0x2ee,0x2f7,0x2ee,0x66f,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x67b,
+0x675,0x678,0x66f,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x672,0x67e,0x678,0x66f,0x2f7,0x672,0x2f7,0x2ee,
+0x2f7,0x2ee,0x678,0x66f,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,
+0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x678,0x66f,0x2f7,0x2ee,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,
+0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f1,
+0x2fa,0x306,0x306,0x2fa,0x306,0x2fa,0x306,0x306,0x2fa,0x306,0x306,0x306,0x2fa,0x2fa,0x306,0x306,
+0x306,0x306,0x2fa,0x306,0x306,0x2fa,0x306,0x306,0x306,0x2fa,0x2fa,0x2fa,0x306,0x306,0x2fa,0x306,
+0x309,0x2fd,0x306,0x2fa,0x306,0x2fa,0x306,0x306,0x2fa,0x306,0x2fa,0x2fa,0x306,0x2fa,0x306,0x309,
+0x2fd,0x306,0x306,0x306,0x2fa,0x306,0x2fa,0x306,0x306,0x2fa,0x2fa,0x303,0x306,0x2fa,0x2fa,0x2fa,
+0x303,0x303,0x303,0x303,0x30c,0x30c,0x300,0x30c,0x30c,0x300,0x30c,0x30c,0x300,0x309,0x681,0x309,
+0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x2fa,0x309,0x2fd,
+0x309,0x2fd,0x309,0x2fd,0x306,0x2fa,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,
+0x2fd,0x30c,0x30c,0x300,0x309,0x2fd,0x9ea,0x9ea,0x9ed,0x9e7,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,
+0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,
+0x309,0x2fd,0x309,0x2fd,0x9ed,0x9e7,0x9ed,0x9e7,0x9ea,0x9e4,0x9ed,0x9e7,0xbaf,0xcb7,0x9ea,0x9e4,
+0x9ea,0x9e4,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,
+0xcb7,0xcb7,0xcb7,0xdb6,0xdb6,0xdb6,0xdb9,0xdb9,0xdb6,0xdb9,0xdb9,0xdb6,0xdb6,0xdb9,0xefa,0xefd,
+0xefd,0xefd,0xefd,0xefa,0xefd,0xefa,0xefd,0xefa,0xefd,0xefa,0xefd,0xefa,0x30f,0x684,0x30f,0x30f,
+0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x684,0x30f,0x30f,
+0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,
+0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x312,0x30f,0x30f,0x30f,
+0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,
+0x30f,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0xcba,0xcba,0x327,0x327,0x327,0x327,0x327,0x327,0x327,0x327,
+0x327,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31b,0x31b,0x318,0x318,0x68a,0x318,0x31e,0x68d,
+0x321,0x68d,0x68d,0x68d,0x321,0x68d,0x31e,0x31e,0x690,0x324,0x318,0x318,0x318,0x318,0x318,0x318,
+0x687,0x687,0x687,0x687,0x315,0x687,0x318,0xb25,0x327,0x327,0x327,0x327,0x327,0x318,0x318,0x318,
+0x318,0x318,0x9f9,0x9f9,0x9f6,0x9f3,0x9f6,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,
+0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
+0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
+0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
+0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
+0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x696,0x696,0x94b,0x696,0x696,0x94e,0xb28,0xb28,
+0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xc6c,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
+0xebe,0xebe,0xebe,0xebe,0xec1,0xd86,0xd86,0xd86,0x699,0x699,0xb2b,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,
+0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xfa8,0xfa5,0xfa8,0xfa5,0x333,0x33c,0xfa8,0xfa5,
+9,9,0x342,0xf00,0xf00,0xf00,0x32a,0x14fd,9,9,9,9,0x33f,0x32d,0x351,0x330,
+0x351,0x351,0x351,9,0x351,9,0x351,0x351,0x348,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,
+0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,9,0x69f,0x69f,0x69f,0x69f,0x69f,
+0x69f,0x69f,0x351,0x351,0x348,0x348,0x348,0x348,0x348,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,
+0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x345,0x69c,0x69c,0x69c,0x69c,0x69c,
+0x69c,0x69c,0x348,0x348,0x348,0x348,0x348,0xfa8,0x354,0x354,0x357,0x351,0x351,0x354,0x34b,0x9fc,
+0xbb8,0xbb5,0x34e,0x9fc,0x34e,0x9fc,0x34e,0x9fc,0x34e,0x9fc,0x339,0x336,0x339,0x336,0x339,0x336,
+0x339,0x336,0x339,0x336,0x339,0x336,0x339,0x336,0x354,0x354,0x34b,0x345,0xb67,0xb64,0xbb2,0xcc3,
+0xcc0,0xcc6,0xcc3,0xcc0,0xdbc,0xdbf,0xdbf,0xdbf,0xa0b,0x6ab,0x363,0x366,0x363,0x363,0x363,0x366,
+0x363,0x363,0x363,0x363,0x366,0xa0b,0x366,0x363,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,
+0x6a8,0x6ab,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,
+0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,
+0x6a2,0x6a5,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,
+0x6a2,0x6a2,0x6a2,0x6a2,0xa05,0x6a5,0x35d,0x360,0x35d,0x35d,0x35d,0x360,0x35d,0x35d,0x35d,0x35d,
+0x360,0xa05,0x360,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
+0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x366,0x360,0x363,0x35d,0x363,0x35d,
+0x363,0x35d,0x363,0x35d,0x363,0x35d,0x35a,0x957,0x95a,0x93c,0x93c,0x114f,0x9ff,0x9ff,0xbbe,0xbbb,
+0xa08,0xa02,0xa08,0xa02,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
+0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
+0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
+0x363,0x35d,0x363,0x35d,0x363,0x366,0x360,0x363,0x35d,0xbbe,0xbbb,0x363,0x35d,0xbbe,0xbbb,0x363,
+0x35d,0xbbe,0xbbb,0xf03,0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,0x363,0x35d,0x366,0x360,
+0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,
+0xa0b,0xa05,0x366,0x360,0x366,0x360,0x366,0x360,0x366,0x360,0xdc5,0xdc2,0x366,0x360,0xf06,0xf03,
+0xf06,0xf03,0xf06,0xf03,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,
+0xc2d,0xc2a,0xc2d,0xc2a,0xf33,0xf30,0xf33,0xf30,0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,
+0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,0x1188,0x1185,0x1371,0x136e,0x1536,0x1533,0x1536,0x1533,
+0x1536,0x1533,0x1536,0x1533,0xc,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,
+0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0xc,
+0xc,0x37b,0x369,0x369,0x369,0x36f,0x369,0x36c,0x1941,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
+0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
+0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x375,0x1941,0x37e,0xa0e,0xc,
+0xc,0x1500,0x1500,0x141c,0xf,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
+0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0xdc8,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
+0x97e,0x97e,0x97e,0x97e,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0xf09,0x381,
+0x381,0x381,0x38d,0x381,0x384,0x381,0x381,0x390,0x981,0xdcb,0xdce,0xdcb,0xf,0xf,0xf,0xf,
+0xf,0xf,0xf,0xf,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
+0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0xf,
+0xf,0xf,0xf,0x1944,0x393,0x393,0x393,0x38a,0x387,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+0xf,0xf,0xf,0xf,0xcdb,0xcdb,0xcdb,0xcdb,0x141f,0x1503,0xfb1,0xfb1,0xfb1,0xfae,0xfae,0xdd4,
+0x8c7,0xcd5,0xcd2,0xcd2,0xcc9,0xcc9,0xcc9,0xcc9,0xcc9,0xcc9,0xfab,0xfab,0xfab,0xfab,0xfab,0x8c4,
+0x14fa,0x12,0xdd7,0x8ca,0x1338,0x3ae,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
+0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xfb4,
+0xfb4,0xfb4,0xfb4,0xfb4,0x8cd,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x942,
+0x942,0x942,0x942,0x942,0x942,0x942,0x942,0xb5e,0xb5e,0xb5e,0xcc9,0xccf,0xccc,0xdd1,0xdd1,0xdd1,
+0xdd1,0xdd1,0xdd1,0x1335,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x3a8,0x3a5,
+0x3a2,0x39f,0xbc1,0xbc1,0x93f,0x3ae,0x3ae,0x3ba,0x3ae,0x3b4,0x3b4,0x3b4,0x3b4,0x3ae,0x3ae,0x3ae,
+0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
+0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
+0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
+0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xa14,0xa14,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xa14,
+0x3b1,0x3ae,0x3b1,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xa14,
+0x3ae,0x3ae,0x3ae,0x3b1,0x95d,0x3ae,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x396,0x39f,0x39c,
+0x39c,0x399,0x399,0x399,0x399,0x3b7,0x3b7,0x399,0x399,0x39f,0x39c,0x39c,0x39c,0x399,0xcd8,0xcd8,
+0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0xa14,0xa14,0xa14,0xa11,0xa11,0xcd8,
+0xa29,0xa29,0xa29,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa20,0xa23,0xa20,0x15,0xa2c,
+0xa26,0xa17,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,
+0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xcde,0xcde,0xcde,
0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,
-0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xcd5,0xcd5,0xcd5,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,
-0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,
-0xa11,0xa11,0xa11,0x15,0x15,0xcd5,0xcd5,0xcd5,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
-0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
-0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,
-0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,
-0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa26,0xa26,
-0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xbbb,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,
-0xf3f,0xf3f,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,
-0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,
-0xf42,0xf42,0xf42,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf45,0xf45,0xf39,0xf39,
-0xf3c,0xf4b,0xf48,0x10e,0x10e,0x1959,0x195c,0x195c,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,
-0x18ed,0x18ed,0x18ed,0x25b,0x25b,0x25b,0x25b,0x25b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb2e,0xb2e,0xb31,0xb31,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0x72,0x72,0x72,0x72,0x15ae,0x15ae,0x15ae,0x15ae,0x1c2,0x1c2,0x1c2,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x15ab,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1668,
-0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,
-0x201,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,
-0x126f,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,
-0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,
-0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,
-0x14ca,0x14ca,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,
-0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x18db,0x18de,0x18de,0x258,0x258,0x258,0x258,0x258,
-0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,
-0x19a7,0x19a7,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x179d,0x179d,0x179d,0x179d,0x21c,0x21c,0x21c,0x21c,
-0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
-0x1653,0x1653,0x1ef,0x1ef,0x1ef,0x1ef,0x1659,0x1659,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,
-0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
-0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1707,0x1707,0x1707,0x1707,0x204,0x204,0x204,0x204,
-0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xe25,0xe25,0xe22,0xe22,0xe22,0xe25,0xdb,0xdb,
-0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x22b,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,
-0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1836,0x1836,0x237,0x1836,0x1836,0x237,0x1836,0x1836,
-0x1836,0x1836,0x1836,0x237,0x237,0x237,0x237,0x237,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1a5e,0x1a5e,0x1a5e,0x1a5e,0x1a5e,0x1a5e,0x1a5e,0x1a5e,
-0x1a5e,0x1a5e,0x28b,0x28b,0x28b,0x28b,0x1a61,0x1a5b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x270,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,
-0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,
-0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0,0,0,0,0,0,0,0,
+0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0x15,0x15,0xcde,0xcde,0xcde,
+0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,
+0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0x1035,0x1035,
+0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,
+0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,
+0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,
+0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,
+0xa2f,0xbc4,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,
+0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,
+0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf42,0xf42,0xf42,0xf42,0xf42,
+0xf42,0xf42,0xf42,0xf42,0xf51,0xf51,0xf45,0xf45,0xf48,0xf57,0xf54,0x10b,0x10b,0x1968,0x196b,0x196b,
+0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x252,0x252,0x252,0x252,0x252,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb37,0xb37,0xb3a,0xb3a,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0x72,0x72,0x72,0x72,
+0x15ba,0x15ba,0x15ba,0x15ba,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x15b7,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x174,0x174,0x174,0x174,0x174,0x174,0x174,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,
+0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x18e7,0x18ea,0x18ea,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x261,0x261,0x261,0x261,0x261,0x261,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b1b,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
+0x17a9,0x17a9,0x17a9,0x17a9,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1e9,0x1e9,0x1e9,0x1e9,0x1665,0x1665,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,
+0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1713,0x1713,0x1713,0x1713,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xe2e,0xe2e,0xe2b,0xe2b,0xe2b,0xe2e,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x225,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1845,0x1845,0x231,0x1845,0x1845,0x231,0x1845,0x1845,0x1845,0x1845,0x1845,0x231,0x231,0x231,0x231,0x231,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x972,0x972,3,3,3,3,3,3,3,3,
+0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x282,0x282,0x282,0x282,0x1a70,0x1a6a,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x267,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,
+0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x97b,0x97b,
+3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-3,3,3,3,3,3,3,3,3,3,0x972,0x972,6,6,6,6,
+3,3,0x97b,0x97b,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,0xd83,0xd83,0xd83,0xd83,
-0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,0x14fd,0x3c9,0x3d8,0x3d8,
-0x1b,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x1b,0x1b,0x3de,0x3de,0x1b,0x1b,0x3de,
-0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x1b,0x3de,0x3de,
-0x3de,0x3de,0x3de,0x3de,0x3de,0x1b,0x3de,0x1b,0x1b,0x1b,0x3de,0x3de,0x3de,0x3de,0x1b,0x1b,
-0x3cc,0xcdb,0x3c9,0x3d8,0x3d8,0x3c9,0x3c9,0x3c9,0x3c9,0x1b,0x1b,0x3d8,0x3d8,0x1b,0x1b,0x3db,
-0x3db,0x3cf,0xdd4,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3c9,0x1b,0x1b,0x1b,0x1b,
-0x3e1,0x3e1,0x1b,0x3e1,0x3de,0x3de,0x3c9,0x3c9,0x1b,0x1b,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,
-0x95d,0x95d,0x95d,0x95d,0x3de,0x3de,0x3d5,0x3d5,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d5,0x3d2,0x1152,
-0x1896,0x1893,0x1938,0x1b,0x1e,0xcde,0x3e4,0xce1,0x1e,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x1e,
-0x1e,0x1e,0x1e,0x3f0,0x3f0,0x1e,0x1e,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,
-0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x1e,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x1e,0x3f0,0x3f3,
-0x1e,0x3f0,0x3f3,0x1e,0x3f0,0x3f0,0x1e,0x1e,0x3e7,0x1e,0x3ed,0x3ed,0x3ed,0x3e4,0x3e4,0x1e,
-0x1e,0x1e,0x1e,0x3e4,0x3e4,0x1e,0x1e,0x3e4,0x3e4,0x3ea,0x1e,0x1e,0x1e,0xfb1,0x1e,0x1e,
-0x1e,0x1e,0x1e,0x1e,0x1e,0x3f3,0x3f3,0x3f3,0x3f0,0x1e,0x3f3,0x1e,0x1e,0x1e,0x1e,0x1e,
-0x1e,0x1e,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x3e4,0x3e4,0x3f0,0x3f0,
-0x3f0,0xfb1,0x193b,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0x3f6,0x3f6,0x3ff,
-0x21,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0xcea,0x402,0x21,0x402,0x402,0x402,0x21,0x402,
-0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x21,0x402,0x402,
-0x402,0x402,0x402,0x402,0x402,0x21,0x402,0x402,0x21,0x402,0x402,0x402,0x402,0x402,0x21,0x21,
-0x3f9,0x402,0x3ff,0x3ff,0x3ff,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x21,0x3f6,0x3f6,0x3ff,0x21,0x3ff,
-0x3ff,0x3fc,0x21,0x21,0x402,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
-0x21,0x21,0x21,0x21,0x402,0xcea,0xce4,0xce4,0x21,0x21,0x963,0x963,0x963,0x963,0x963,0x963,
-0x963,0x963,0x963,0x963,0x1416,0xce7,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1719,0x1899,0x1899,
-0x1899,0x189c,0x189c,0x189c,0x24,0x405,0x414,0x414,0x24,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,
-0x41a,0x24,0x24,0x41a,0x41a,0x24,0x24,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,
-0x41a,0x41a,0x41a,0x41a,0x41a,0x24,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x24,0x41a,0x41a,
-0x24,0xced,0x41a,0x41a,0x41a,0x41a,0x24,0x24,0x408,0x41a,0x405,0x405,0x414,0x405,0x405,0x405,
-0xfb4,0x24,0x24,0x414,0x417,0x24,0x24,0x417,0x417,0x40b,0x24,0x24,0x24,0x24,0x24,0x24,
-0x24,0x24,0x405,0x405,0x24,0x24,0x24,0x24,0x41d,0x41d,0x24,0x41a,0x41a,0x41a,0xfb4,0xfb4,
-0x24,0x24,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x40e,0xced,0x1338,0x1338,
-0x1338,0x1338,0x1338,0x1338,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x27,0x420,0x42c,
-0x27,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x27,0x27,0x27,0x42c,0x42c,0x42c,0x27,0x42c,0x42c,
-0x42f,0x42c,0x27,0x27,0x27,0x42c,0x42c,0x27,0x42c,0x27,0x42c,0x42c,0x27,0x27,0x27,0x42c,
-0x42c,0x27,0x27,0x27,0x42c,0x42c,0x42c,0x27,0x27,0x27,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,
-0x42c,0x42c,0xdd7,0x42c,0x42c,0x42c,0x27,0x27,0x27,0x27,0x420,0x426,0x420,0x426,0x426,0x27,
-0x27,0x27,0x426,0x426,0x426,0x27,0x429,0x429,0x429,0x423,0x27,0x27,0xfb7,0x27,0x27,0x27,
-0x27,0x27,0x27,0x420,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0xeeb,0x969,
-0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x966,0x966,0x966,0xda7,0xcf0,0xcf0,0xcf0,0xcf0,
-0xcf0,0xcf3,0xcf0,0x27,0x27,0x27,0x27,0x27,0x1500,0x43e,0x43e,0x43e,0x193e,0x441,0x441,0x441,
-0x441,0x441,0x441,0x441,0x441,0x2a,0x441,0x441,0x441,0x2a,0x441,0x441,0x441,0x441,0x441,0x441,
-0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x2a,0x441,0x441,0x441,0x441,0x441,0x441,
-0x441,0x441,0x441,0x441,0x1503,0x441,0x441,0x441,0x441,0x441,0x2a,0x2a,0x2a,0xfc0,0x432,0x432,
-0x432,0x43e,0x43e,0x43e,0x43e,0x2a,0x432,0x432,0x435,0x2a,0x432,0x432,0x432,0x438,0x2a,0x2a,
-0x2a,0x2a,0x2a,0x2a,0x2a,0x432,0x432,0x2a,0xfc0,0xfc0,0x171c,0x2a,0x2a,0x2a,0x2a,0x2a,
-0x441,0x441,0xfba,0xfba,0x2a,0x2a,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x1a0a,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,
-0x17d9,0x1506,0x44a,0x44a,0x1941,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x2d,0x450,0x450,
-0x450,0x2d,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,
-0x450,0x2d,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x450,0x2d,0x450,0x450,0x450,
-0x450,0x450,0x2d,0x2d,0xcf6,0xcf9,0x44a,0x444,0x44d,0x44a,0x444,0x44a,0x44a,0x2d,0x444,0x44d,
-0x44d,0x2d,0x44d,0x44d,0x444,0x447,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x444,0x444,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x450,0x2d,0x450,0x450,0xf03,0xf03,0x2d,0x2d,0x96c,0x96c,
-0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x2d,0xf06,0xf06,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x189f,0x1509,0x45c,0x45c,0x30,0x462,0x462,0x462,
-0x462,0x462,0x462,0x462,0x462,0x30,0x462,0x462,0x462,0x30,0x462,0x462,0x462,0x462,0x462,0x462,
-0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x45c,0x453,0x453,0x453,0xfc3,0x30,0x45c,0x45c,
-0x45c,0x30,0x45f,0x45f,0x45f,0x456,0x133e,0x17dc,0x30,0x30,0x30,0x30,0x17df,0x17df,0x17df,0x453,
-0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x171f,0x462,0x462,0xfc3,0xfc3,0x30,0x30,0x459,0x459,
-0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0x17dc,0x17dc,
-0x17dc,0xfc9,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0x33,0x33,0xa35,0xa35,0x33,0xa3b,0xa3b,0xa3b,
-0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x33,
-0x33,0x33,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,
-0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x33,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,
-0x33,0xa3b,0x33,0x33,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x33,0x33,0x33,0xa2f,0x33,
-0x33,0x33,0x33,0xa2c,0xa35,0xa35,0xa2c,0xa2c,0xa2c,0x33,0xa2c,0x33,0xa35,0xa35,0xa38,0xa35,
-0xa38,0xa38,0xa38,0xa2c,0x33,0x33,0x33,0x33,0x33,0x33,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,
-0x150c,0x150c,0x150c,0x150c,0x33,0x33,0xa35,0xa35,0xa32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
-0x33,0x33,0x33,0x33,0x36,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,
-0x47d,0x47d,0x47d,0x47d,0x47d,0x468,0x47d,0x47a,0x468,0x468,0x468,0x468,0x468,0x468,0x46e,0x36,
-0x36,0x36,0x36,0x465,0x483,0x483,0x483,0x483,0x483,0x47d,0x480,0x46b,0x46b,0x46b,0x46b,0x46b,
-0x46b,0x468,0x46b,0x471,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x474,0x474,
+6,6,6,6,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
+0xd8c,0xd8c,0xd8c,0xd8c,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,0x1509,0x3d5,0x3e4,0x3e4,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,
+0x3ea,0x1b,0x1b,0x3ea,0x3ea,0x1b,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,
+0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x1b,0x3ea,0x1b,
+0x1b,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x1b,0x1b,0x3d8,0xce4,0x3d5,0x3e4,0x3e4,0x3d5,0x3d5,0x3d5,
+0x3d5,0x1b,0x1b,0x3e4,0x3e4,0x1b,0x1b,0x3e7,0x3e7,0x3db,0xddd,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x3d5,0x1b,0x1b,0x1b,0x1b,0x3ed,0x3ed,0x1b,0x3ed,0x3ea,0x3ea,0x3d5,0x3d5,
+0x1b,0x1b,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x3ea,0x3ea,0x3e1,0x3e1,
+0x3de,0x3de,0x3de,0x3de,0x3de,0x3e1,0x3de,0x115e,0x18a2,0x189f,0x1947,0x1b,0x1e,0xce7,0x3f0,0xcea,
+0x1e,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x1e,0x1e,0x1e,0x1e,0x3fc,0x3fc,0x1e,0x1e,0x3fc,
+0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x1e,0x3fc,0x3fc,
+0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x1e,0x3fc,0x3ff,0x1e,0x3fc,0x3ff,0x1e,0x3fc,0x3fc,0x1e,0x1e,
+0x3f3,0x1e,0x3f9,0x3f9,0x3f9,0x3f0,0x3f0,0x1e,0x1e,0x1e,0x1e,0x3f0,0x3f0,0x1e,0x1e,0x3f0,
+0x3f0,0x3f6,0x1e,0x1e,0x1e,0xfbd,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3ff,0x3ff,0x3ff,
+0x3fc,0x1e,0x3ff,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x969,0x969,0x969,0x969,0x969,0x969,
+0x969,0x969,0x969,0x969,0x3f0,0x3f0,0x3fc,0x3fc,0x3fc,0xfbd,0x194a,0x1e,0x1e,0x1e,0x1e,0x1e,
+0x1e,0x1e,0x1e,0x1e,0x21,0x402,0x402,0x40b,0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,
+0xcf3,0x40e,0x21,0x40e,0x40e,0x40e,0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,
+0x40e,0x40e,0x40e,0x40e,0x40e,0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x21,0x40e,0x40e,
+0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x21,0x21,0x405,0x40e,0x40b,0x40b,0x40b,0x402,0x402,0x402,
+0x402,0x402,0x21,0x402,0x402,0x40b,0x21,0x40b,0x40b,0x408,0x21,0x21,0x40e,0x21,0x21,0x21,
+0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x40e,0xcf3,0xced,0xced,
+0x21,0x21,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x1422,0xcf0,0x21,0x21,
+0x21,0x21,0x21,0x21,0x21,0x1725,0x18a5,0x18a5,0x18a5,0x18a8,0x18a8,0x18a8,0x24,0x411,0x420,0x420,
+0x24,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x24,0x24,0x426,0x426,0x24,0x24,0x426,
+0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x24,0x426,0x426,
+0x426,0x426,0x426,0x426,0x426,0x24,0x426,0x426,0x24,0xcf6,0x426,0x426,0x426,0x426,0x24,0x24,
+0x414,0x426,0x411,0x411,0x420,0x411,0x411,0x411,0xfc0,0x24,0x24,0x420,0x423,0x24,0x24,0x423,
+0x423,0x417,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x1ab5,0x411,0x411,0x24,0x24,0x24,0x24,
+0x429,0x429,0x24,0x426,0x426,0x426,0xfc0,0xfc0,0x24,0x24,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,
+0x41d,0x41d,0x41d,0x41d,0x41a,0xcf6,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x24,0x24,0x24,0x24,
+0x24,0x24,0x24,0x24,0x27,0x27,0x42c,0x438,0x27,0x438,0x438,0x438,0x438,0x438,0x438,0x27,
+0x27,0x27,0x438,0x438,0x438,0x27,0x438,0x438,0x43b,0x438,0x27,0x27,0x27,0x438,0x438,0x27,
+0x438,0x27,0x438,0x438,0x27,0x27,0x27,0x438,0x438,0x27,0x27,0x27,0x438,0x438,0x438,0x27,
+0x27,0x27,0x438,0x438,0x438,0x438,0x438,0x438,0x438,0x438,0xde0,0x438,0x438,0x438,0x27,0x27,
+0x27,0x27,0x42c,0x432,0x42c,0x432,0x432,0x27,0x27,0x27,0x432,0x432,0x432,0x27,0x435,0x435,
+0x435,0x42f,0x27,0x27,0xfc3,0x27,0x27,0x27,0x27,0x27,0x27,0x42c,0x27,0x27,0x27,0x27,
+0x27,0x27,0x27,0x27,0x27,0x27,0xef7,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,
+0x96f,0x96f,0x96f,0xdb0,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcfc,0xcf9,0x27,0x27,0x27,0x27,0x27,
+0x150c,0x44a,0x44a,0x44a,0x194d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x2a,0x44d,0x44d,
+0x44d,0x2a,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,
+0x44d,0x2a,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x150f,0x44d,0x44d,0x44d,
+0x44d,0x44d,0x2a,0x2a,0x2a,0xfcc,0x43e,0x43e,0x43e,0x44a,0x44a,0x44a,0x44a,0x2a,0x43e,0x43e,
+0x441,0x2a,0x43e,0x43e,0x43e,0x444,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x43e,0x43e,0x2a,
+0xfcc,0xfcc,0x1728,0x2a,0x2a,0x2a,0x2a,0x2a,0x44d,0x44d,0xfc6,0xfc6,0x2a,0x2a,0x447,0x447,
+0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x1a19,
+0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0x17e5,0x1512,0x456,0x456,0x1950,0x45c,0x45c,0x45c,
+0x45c,0x45c,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,
+0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,
+0x45c,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x45c,0x45c,0x2d,0x2d,0xcff,0xd02,0x456,0x450,
+0x459,0x456,0x450,0x456,0x456,0x2d,0x450,0x459,0x459,0x2d,0x459,0x459,0x450,0x453,0x2d,0x2d,
+0x2d,0x2d,0x2d,0x2d,0x2d,0x450,0x450,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x45c,0x2d,
+0x45c,0x45c,0xf0f,0xf0f,0x2d,0x2d,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,
+0x2d,0xf12,0xf12,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
+0x18ab,0x1515,0x468,0x468,0x1ab8,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x30,0x46e,0x46e,
+0x46e,0x30,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,
+0x468,0x45f,0x45f,0x45f,0xfcf,0x30,0x468,0x468,0x468,0x30,0x46b,0x46b,0x46b,0x462,0x134a,0x17e8,
+0x30,0x30,0x30,0x30,0x17eb,0x17eb,0x17eb,0x45f,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x172b,
+0x46e,0x46e,0xfcf,0xfcf,0x30,0x30,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,
+0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0x17e8,0x17e8,0x17e8,0xfd5,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,
+0x33,0x1abb,0xa3e,0xa3e,0x33,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,
+0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x33,0x33,0x33,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,
+0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x33,0xa44,
+0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x33,0xa44,0x33,0x33,0xa44,0xa44,0xa44,0xa44,
+0xa44,0xa44,0xa44,0x33,0x33,0x33,0xa38,0x33,0x33,0x33,0x33,0xa35,0xa3e,0xa3e,0xa35,0xa35,
+0xa35,0x33,0xa35,0x33,0xa3e,0xa3e,0xa41,0xa3e,0xa41,0xa41,0xa41,0xa35,0x33,0x33,0x33,0x33,
+0x33,0x33,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x33,0x33,0xa3e,0xa3e,
+0xa3b,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x489,0x489,0x489,
+0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,
+0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x474,0x489,0x486,
+0x474,0x474,0x474,0x474,0x474,0x474,0x47a,0x36,0x36,0x36,0x36,0x471,0x48f,0x48f,0x48f,0x48f,
+0x48f,0x489,0x48c,0x477,0x477,0x477,0x477,0x477,0x477,0x474,0x477,0x47d,0x483,0x483,0x483,0x483,
+0x483,0x483,0x483,0x483,0x483,0x483,0x480,0x480,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
-0x39,0x492,0x492,0x39,0x492,0x39,0x1a10,0x492,0x492,0x1a10,0x492,0x39,0x1a10,0x492,0x1a10,0x1a10,
-0x1a10,0x1a10,0x1a10,0x1a10,0x492,0x492,0x492,0x492,0x1a10,0x492,0x492,0x492,0x492,0x492,0x492,0x492,
-0x1a10,0x492,0x492,0x492,0x39,0x492,0x39,0x492,0x1a10,0x1a10,0x492,0x492,0x1a10,0x492,0x492,0x492,
-0x492,0x486,0x492,0x48f,0x486,0x486,0x486,0x486,0x486,0x486,0x1a0d,0x486,0x486,0x492,0x39,0x39,
-0x49b,0x49b,0x49b,0x49b,0x49b,0x39,0x498,0x39,0x489,0x489,0x489,0x489,0x489,0x486,0x39,0x39,
-0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x39,0x39,0x495,0x495,0x1419,0x1419,
-0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
+0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x49e,0x49e,0x39,0x49e,0x39,0x1a1f,0x49e,
+0x49e,0x1a1f,0x49e,0x39,0x1a1f,0x49e,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x49e,0x49e,0x49e,0x49e,
+0x1a1f,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x1a1f,0x49e,0x49e,0x49e,0x39,0x49e,0x39,0x49e,
+0x1a1f,0x1a1f,0x49e,0x49e,0x1a1f,0x49e,0x49e,0x49e,0x49e,0x492,0x49e,0x49b,0x492,0x492,0x492,0x492,
+0x492,0x492,0x1a1c,0x492,0x492,0x49e,0x39,0x39,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x39,0x4a4,0x39,
+0x495,0x495,0x495,0x495,0x495,0x492,0x39,0x39,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,
+0x498,0x498,0x39,0x39,0x4a1,0x4a1,0x1425,0x1425,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
-0x9ae,0x9ae,0x9ae,0x9b1,0x9ae,0x9ae,0x9ae,0x9ae,0x3c,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0x9ae,0x9ae,
-0x9ae,0x9ae,0x9b1,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0x9ae,0x9ae,0x9ae,
-0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0xa4a,0xfd8,0xfd8,0x3c,0x3c,0x3c,
-0x3c,0x97b,0x97b,0x97e,0x97b,0x97e,0x97e,0x987,0x97e,0x987,0x97b,0x97b,0x97b,0x97b,0x97b,0x9a8,
-0x97b,0x97e,0x981,0x981,0x984,0x98d,0x981,0x981,0x9ae,0x9ae,0x9ae,0x9ae,0x1347,0x1341,0x1341,0x1341,
-0x97b,0x97b,0x97b,0x97e,0x97b,0x97b,0xa3e,0x97b,0x3c,0x97b,0x97b,0x97b,0x97b,0x97e,0x97b,0x97b,
-0x97b,0x97b,0x97e,0x97b,0x97b,0x97b,0x97b,0x97e,0x97b,0x97b,0x97b,0x97b,0x97e,0x97b,0xa3e,0xa3e,
-0xa3e,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0xa3e,0x97e,0xa3e,0xa3e,0xa3e,0x3c,0xa47,0xa47,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa41,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x3c,0xfcf,0xa44,
-0xdda,0xdda,0xfd2,0xfd5,0xfcf,0x1155,0x1155,0x1155,0x1155,0x1344,0x1344,0x3c,0x3c,0x3c,0x3c,0x3c,
+0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,
+0x3c,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,
+0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,
+0x9b7,0x9ba,0xa53,0xfe4,0xfe4,0x3c,0x3c,0x3c,0x3c,0x984,0x984,0x987,0x984,0x987,0x987,0x990,
+0x987,0x990,0x984,0x984,0x984,0x984,0x984,0x9b1,0x984,0x987,0x98a,0x98a,0x98d,0x996,0x98a,0x98a,
+0x9b7,0x9b7,0x9b7,0x9b7,0x1353,0x134d,0x134d,0x134d,0x984,0x984,0x984,0x987,0x984,0x984,0xa47,0x984,
+0x3c,0x984,0x984,0x984,0x984,0x987,0x984,0x984,0x984,0x984,0x987,0x984,0x984,0x984,0x984,0x987,
+0x984,0x984,0x984,0x984,0x987,0x984,0xa47,0xa47,0xa47,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
+0xa47,0x987,0xa47,0xa47,0xa47,0x3c,0xa50,0xa50,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4a,0xa4d,
+0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0x3c,0xfdb,0xa4d,0xde3,0xde3,0xfde,0xfe1,0xfdb,0x1161,0x1161,0x1161,
+0x1161,0x1350,0x1350,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x4a1,0x4a1,0x4a1,0x4a1,
-0x4a1,0x4a1,0x3f,0x141f,0x3f,0x3f,0x3f,0x3f,0x3f,0x141f,0x3f,0x3f,0x49e,0x49e,0x49e,0x49e,
-0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xde9,0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0x42,0x42,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0x42,0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0x42,0x42,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xde9,0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0x42,0x42,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xde9,
-0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0x42,0x42,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0x42,
-0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0x42,0x42,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xde9,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xde9,0xa74,0x42,0xa74,0xa74,0xa74,0xa74,0x42,0x42,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xde9,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0x42,0x42,0x134a,0x134a,0xde3,
-0xde6,0xa6e,0xa77,0xa6b,0xa6b,0xa6b,0xa6b,0xa77,0xa77,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
-0xa71,0xa71,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0x42,0x42,0x42,
-0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
-0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0x1725,0x45,0x45,0x1722,0x1722,0x1722,0x1722,0x1722,0x1722,0x45,0x45,
-0xa8c,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,
-0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa89,0xa86,0x48,0x48,0x48,
-0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa92,0xa92,0xa92,0xa95,0xa95,
-0xa95,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,
-0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xa98,0xab6,0xab6,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,
-0xa9b,0xa9b,0xa9e,0xa9b,0xaad,0xaad,0xab0,0xab9,0xaa7,0xaa4,0xaad,0xaaa,0xab9,0xcfc,0x4e,0x4e,
-0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,
-0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,
-0xac8,0xac8,0xb49,0xb4c,0xace,0xb46,0xacb,0xac8,0xad1,0xae0,0xad4,0xae3,0xae3,0xae3,0xabf,0x51,
-0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0x51,0x51,0x51,0x51,0x51,0x51,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0x1944,0x51,0x51,0x51,0x51,0x51,0x51,0x51,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xac2,0xff6,0x51,0x51,0x51,0x51,0x51,
-0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x54,0x54,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x54,0x54,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x54,0x4c2,0x54,0x4c2,0x54,0x4c2,0x54,0x4c2,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x54,0x54,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x54,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4b9,0x4bf,0x4b9,
-0x4b9,0x4b6,0x4bf,0x4bf,0x4bf,0x54,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4b6,0x4b6,0x4b6,
-0x4bf,0x4bf,0x4bf,0x4bf,0x54,0x54,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x54,0x4b6,0x4b6,0x4b6,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4b6,0x4b6,0x4b6,
-0x54,0x54,0x4bf,0x4bf,0x4bf,0x54,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4bc,0x4b9,0x54,
-0xbc1,0xbc4,0xbc4,0xbc4,0xfff,0x57,0x14eb,0x14eb,0x14eb,0x14eb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x516,0xbd6,0x5a,0x5a,0x6d5,0x516,0x516,0x516,0x516,0x516,0x51c,0x52e,0x51c,0x528,0x522,0x6d8,
-0x513,0x6d2,0x6d2,0x6d2,0x6d2,0x513,0x513,0x513,0x513,0x513,0x519,0x52b,0x519,0x525,0x51f,0x5a,
-0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x5a,0x5a,0x5a,
-0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
-0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53a,0x53a,0x53a,
-0x53a,0x53d,0xaf2,0xaf5,0xbdc,0xbe2,0xbe2,0xbdf,0xbdf,0xbdf,0xbdf,0xdf8,0xf09,0xf09,0xf09,0xf09,
-0x1140,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
-0x56d,0x56d,0x56d,0xafe,0xf12,0x1005,0x1005,0x1005,0x1005,0x129f,0x172b,0x172b,0x63,0x63,0x63,0x63,
-0x6ff,0x6ff,0x6ff,0x6ff,0x702,0x702,0x702,0x702,0x702,0x702,0x579,0x579,0x576,0x576,0x576,0x576,
-0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0xb0a,0xb0a,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
+0x3c,0x3c,0x3c,0x3c,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x3f,0x142b,0x3f,0x3f,0x3f,0x3f,
+0x3f,0x142b,0x3f,0x3f,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
+0x4aa,0x4aa,0x4aa,0x4aa,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0x42,0xa7d,0xa7d,
+0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0xa7d,0x42,0xa7d,0xa7d,
+0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0x42,0xa7d,0xa7d,
+0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0x42,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0xa7d,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0x42,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x42,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,
+0xa7d,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
+0xa7d,0xa7d,0xa7d,0x42,0x42,0x1356,0x1356,0xdec,0xdef,0xa77,0xa80,0xa74,0xa74,0xa74,0xa74,0xa80,
+0xa80,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa71,0x42,0x42,0x42,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
+0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0x1731,0x45,0x45,
+0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x45,0x45,0xa95,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,
+0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,
+0xa98,0xa98,0xa98,0xa92,0xa8f,0x48,0x48,0x48,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
+0xa9e,0xa9e,0xa9e,0xa9b,0xa9b,0xa9b,0xa9e,0xa9e,0xa9e,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,
+0x151b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xaa1,0xabf,
+0xabf,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa7,0xaa4,0xab6,0xab6,0xab9,0xac2,
+0xab0,0xaad,0xab6,0xab3,0xac2,0xd05,0x4e,0x4e,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,
+0xabc,0xabc,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,
+0xd08,0xd08,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xad1,0xad1,0xb52,0xb55,0xad7,0xb4f,0xad4,0xad1,
+0xada,0xae9,0xadd,0xaec,0xaec,0xaec,0xac8,0x51,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,
+0xae0,0xae0,0x51,0x51,0x51,0x51,0x51,0x51,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0x1953,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0xae3,0xacb,0x1002,0x51,0x51,0x51,0x51,0x51,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
+0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x54,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x54,0x54,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
+0x54,0x4ce,0x54,0x4ce,0x54,0x4ce,0x54,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
+0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x54,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c5,0x4cb,0x4c5,0x4c5,0x4c2,0x4cb,0x4cb,0x4cb,0x54,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c2,0x4c2,0x4c2,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x54,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x54,0x4c2,0x4c2,0x4c2,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c2,0x4c2,0x4c2,0x54,0x54,0x4cb,0x4cb,0x4cb,0x54,0x4cb,0x4cb,
+0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c8,0x4c5,0x54,0xbca,0xbcd,0xbcd,0xbcd,0x100b,0x57,0x14f7,0x14f7,
+0x14f7,0x14f7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x522,0xbdf,0x5a,0x5a,0x6e1,0x522,0x522,0x522,
+0x522,0x522,0x528,0x53a,0x528,0x534,0x52e,0x6e4,0x51f,0x6de,0x6de,0x6de,0x6de,0x51f,0x51f,0x51f,
+0x51f,0x51f,0x525,0x537,0x525,0x531,0x52b,0x5a,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0x1359,0x1359,0x1359,
+0x1359,0x1359,0x1359,0x1359,0x1359,0x5a,0x5a,0x5a,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
+0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
+0x549,0x549,0x549,0x549,0x549,0x546,0x546,0x546,0x546,0x549,0xafb,0xafe,0xbe5,0xbeb,0xbeb,0xbe8,
+0xbe8,0xbe8,0xbe8,0xe01,0xf15,0xf15,0xf15,0xf15,0x114c,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
+0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x579,0x579,0x579,0xb07,0xf1e,0x1011,0x1011,0x1011,
+0x1011,0x12ab,0x1737,0x1737,0x63,0x63,0x63,0x63,0x70b,0x70b,0x70b,0x70b,0x70e,0x70e,0x70e,0x70e,
+0x70e,0x70e,0x585,0x585,0x582,0x582,0x582,0x582,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0xb13,0xb13,0x66,
0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
-0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x69,0x69,0x69,0x69,0x69,
-0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0x6c,0xb25,0xb25,0xb25,0xb25,0xb28,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xb28,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
-0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,
-0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
-0x75,0x837,0x831,0x837,0x831,0x837,0x831,0x837,0x831,0x837,0x831,0x831,0x834,0x831,0x834,0x831,
-0x834,0x831,0x834,0x831,0x834,0x831,0x834,0x831,0x834,0x831,0x834,0x831,0x834,0x831,0x834,0x831,
-0x831,0x831,0x831,0x837,0x831,0x837,0x831,0x837,0x831,0x831,0x831,0x831,0x831,0x831,0x837,0x831,
-0x831,0x831,0x831,0x831,0x834,0xc8a,0xc8a,0x75,0x75,0x94b,0x94b,0x915,0x915,0x83a,0x83d,0xc87,
-0x78,0x78,0x78,0x78,0x78,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,
-0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,
-0x84f,0x112e,0x190e,0x19f2,0x7b,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x7b,0x91e,0x91e,0x921,0x921,0x921,0x921,0x921,0x921,
-0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,
-0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,
-0x13e0,0x13e0,0x13e0,0x7e,0x7e,0x7e,0x7e,0x7e,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
+0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,
+0x5af,0x5af,0x5af,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,
+0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
+0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
+0xb2e,0xb2e,0x6c,0xb2e,0xb2e,0xb2e,0xb2e,0xb31,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
+0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb31,0x6c,0x6c,0x6c,0x6c,
+0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
+0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0x6f,0x6f,
+0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x843,0x83d,0x843,0x83d,0x843,0x83d,0x843,
+0x83d,0x843,0x83d,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,
+0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x83d,0x83d,0x83d,0x843,0x83d,0x843,0x83d,0x843,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x843,0x83d,0x83d,0x83d,0x83d,0x83d,0x840,0xc93,0xc93,0x75,
+0x75,0x954,0x954,0x91e,0x91e,0x846,0x849,0xc90,0x78,0x78,0x78,0x78,0x78,0x85b,0x85b,0x85b,
0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0xd8f,0xd8f,0x81,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,
-0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0x84,0x84,0x84,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
-0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xc93,0xb43,0xb43,0xb43,0xc93,0xb43,0x87,
-0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
-0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x9d2,0x9d2,0x9d2,0x9d2,0x8a,0x8a,0x8a,0x8a,
-0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,
-0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x8d,
-0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,
-0x8d,0x8d,0x8d,0x8d,0x8d,0xb16,0x5f1,0x5f7,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,
-0x5fd,0x5f4,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x8d,
-0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x8d,0x5f7,0x8d,0x5f7,0x5f7,0x8d,0x5f7,0x5f7,0x8d,0x5f7,0x5f7,
-0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5fa,0x612,0x60c,0x612,0x60c,0x60f,0x615,0x612,0x60c,
-0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x135f,0x135f,0x90,0x90,0x90,0x90,0x90,0x90,
-0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x612,0x60c,0x60f,0x615,0x612,
-0x60c,0x612,0x60c,0x612,0x60c,0x612,0x612,0x60c,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
-0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60f,0x60c,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,
-0x60c,0x60f,0x60c,0x60c,0x60f,0x60f,0x60c,0x60c,0x60c,0x60c,0x60c,0x60f,0x60c,0x60c,0x60f,0x60c,
-0x60f,0x60f,0x60f,0x60c,0x60f,0x60f,0x60f,0x60f,0x90,0x90,0x60f,0x60f,0x60f,0x60f,0x60c,0x60c,
-0x60f,0x60c,0x60c,0x60c,0x60c,0x60f,0x60c,0x60c,0x60c,0x60c,0x60c,0x60f,0x60f,0x60f,0x60c,0x60c,
-0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,
-0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0x612,0x612,0x96f,0x612,0x612,0x612,0x612,0x612,
-0x612,0x612,0x609,0x609,0xc1b,0xdaa,0x90,0x90,0x873,0x885,0x882,0x885,0x882,0xca8,0xca8,0xd9b,
-0xd98,0x876,0x876,0x876,0x876,0x888,0x888,0x888,0x8a0,0x8a3,0x8b2,0x93,0x8a6,0x8a9,0x8b5,0x8b5,
-0x89d,0x894,0x88e,0x894,0x88e,0x894,0x88e,0x891,0x891,0x8ac,0x8ac,0x8af,0x8ac,0x8ac,0x8ac,0x93,
-0x8ac,0x89a,0x897,0x891,0x93,0x93,0x93,0x93,0x61e,0x62a,0x61e,0xc1e,0x61e,0x96,0x61e,0x62a,
-0x61e,0x62a,0x61e,0x62a,0x61e,0x62a,0x61e,0x62a,0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,
-0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x627,0x621,0x627,0x621,0x624,0x62a,0x627,0x621,0x627,
-0x621,0x627,0x621,0x627,0x621,0x96,0x96,0x61b,0x771,0x774,0x789,0x78c,0x76b,0x774,0x774,0x9c,
-0x753,0x756,0x756,0x756,0x756,0x753,0x753,0x9c,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
-0x99,0xb19,0xb19,0xb19,0x9d5,0x74d,0x62d,0x62d,0x9c,0x79b,0x77a,0x76b,0x774,0x771,0x76b,0x77d,
-0x76e,0x768,0x76b,0x789,0x780,0x777,0x798,0x76b,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,
-0x795,0x795,0x786,0x783,0x789,0x789,0x789,0x79b,0x75c,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,
-0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x9c,0x9c,0x9c,0x759,0x759,0x759,0x759,0x759,0x759,
-0x9c,0x9c,0x759,0x759,0x759,0x759,0x759,0x759,0x9c,0x9c,0x759,0x759,0x759,0x759,0x759,0x759,
-0x9c,0x9c,0x759,0x759,0x759,0x9c,0x9c,0x9c,0xb64,0xb64,0xb64,0xb64,0x9f,0x9f,0x9f,0x9f,
-0x9f,0x9f,0x9f,0x9f,0x9f,0x18ab,0x18ab,0x18ab,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
-0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xa2,0xa2,0xa2,0xa2,0xa2,
-0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,
+0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x113a,0x191a,0x1a01,0x7b,0x85e,0x85e,0x85e,
+0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x7b,
+0x927,0x927,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,
+0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
+0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0xd98,0xd98,0x7e,
+0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0x81,0x81,0x81,
+0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
+0xb4c,0xc9c,0xb4c,0xb4c,0xb4c,0xc9c,0xb4c,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
+0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,
+0x9db,0x9db,0x9db,0x9db,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,
+0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,
+0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,
+0x8a,0x8a,0x8a,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x8a,0x8a,0x8a,0x8a,0x8a,0xb1f,0x5fd,0x603,
+0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x600,0x603,0x603,0x603,0x603,0x603,0x603,
+0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x8a,0x603,0x603,0x603,0x603,0x603,0x8a,0x603,0x8a,
+0x603,0x603,0x8a,0x603,0x603,0x8a,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x606,
+0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
+0x136b,0x136b,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+0x8d,0x8d,0x8d,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x61e,0x618,
+0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+0x61b,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x618,0x61b,0x618,0x618,0x61b,0x61b,0x618,0x618,
+0x618,0x618,0x618,0x61b,0x618,0x618,0x61b,0x618,0x61b,0x61b,0x61b,0x618,0x61b,0x61b,0x61b,0x61b,
+0x8d,0x8d,0x61b,0x61b,0x61b,0x61b,0x618,0x618,0x61b,0x618,0x618,0x618,0x618,0x61b,0x618,0x618,
+0x618,0x618,0x618,0x61b,0x61b,0x61b,0x618,0x618,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0x61e,0x61e,0x978,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x615,0x615,0xc24,0xdb3,0x8d,0x8d,
+0x87f,0x891,0x88e,0x891,0x88e,0xcb1,0xcb1,0xda4,0xda1,0x882,0x882,0x882,0x882,0x894,0x894,0x894,
+0x8ac,0x8af,0x8be,0x90,0x8b2,0x8b5,0x8c1,0x8c1,0x8a9,0x8a0,0x89a,0x8a0,0x89a,0x8a0,0x89a,0x89d,
+0x89d,0x8b8,0x8b8,0x8bb,0x8b8,0x8b8,0x8b8,0x90,0x8b8,0x8a6,0x8a3,0x89d,0x90,0x90,0x90,0x90,
+0x62a,0x636,0x62a,0xc27,0x62a,0x93,0x62a,0x636,0x62a,0x636,0x62a,0x636,0x62a,0x636,0x62a,0x636,
+0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,
+0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x93,0x93,0x627,
+0x77d,0x780,0x795,0x798,0x777,0x780,0x780,0x99,0x75f,0x762,0x762,0x762,0x762,0x75f,0x75f,0x99,
+0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0xb22,0xb22,0xb22,0x9de,0x759,0x639,0x639,
+0x99,0x7a7,0x786,0x777,0x780,0x77d,0x777,0x789,0x77a,0x774,0x777,0x795,0x78c,0x783,0x7a4,0x777,
+0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x792,0x78f,0x795,0x795,0x795,0x7a7,
+0x768,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,
+0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x99,
+0x99,0x99,0x765,0x765,0x765,0x765,0x765,0x765,0x99,0x99,0x765,0x765,0x765,0x765,0x765,0x765,
+0x99,0x99,0x765,0x765,0x765,0x765,0x765,0x765,0x99,0x99,0x765,0x765,0x765,0x99,0x99,0x99,
+0xb6d,0xb6d,0xb6d,0xb6d,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x18b7,0x18b7,0x18b7,
0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
-0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
-0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xa8,0xa8,0x1011,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
-0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xab,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb97,0xb97,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xab,0xb97,0xb97,
-0xab,0xab,0xb97,0xab,0xab,0xb97,0xb97,0xab,0xab,0xb97,0xb97,0xb97,0xb97,0xab,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb94,0xb94,0xb94,0xb94,0xab,0xb94,0xab,0xb94,0xb94,0xb94,
-0xb94,0xd20,0xb94,0xb94,0xab,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xab,0xb97,0xb97,0xb97,0xb97,0xab,0xab,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xab,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xab,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xab,0xb97,0xb97,0xb97,0xb97,0xab,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xab,0xb97,0xab,0xab,0xab,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xab,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xe0d,0xe0d,0xab,0xab,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb94,0xb94,0xb94,0xb8e,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xf21,0xf1e,0xab,0xab,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,
-0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xae,0xb9d,0xae,0xae,
-0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
-0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xc2d,0xc2d,0xc2d,0xc2d,
-0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xb1,0xc2d,0xc2d,0xc2d,0xc2d,0xc27,0xc27,
-0xc2a,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xc36,0xc36,0xc36,0xc36,
-0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc30,0xc30,
-0xc33,0xc9c,0xc9c,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xc3c,0xc3c,0xc3c,0xc3c,
-0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc39,0xc39,
-0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xc42,0xc42,0xc42,0xc42,
-0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xba,0xc42,0xc42,0xc42,0xba,0xc3f,0xc3f,
-0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xd32,0xd32,0xd32,0xd32,
-0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,
-0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0x152d,0x152d,0xbd,0xd23,0xd23,0xd23,0xd2f,
-0xd2f,0xd2f,0xd2f,0xd23,0xd23,0xd2f,0xd2f,0xd2f,0xbd,0xbd,0xbd,0xbd,0xd2f,0xd2f,0xd23,0xd2f,
-0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd26,0xd26,0xd26,0xbd,0xbd,0xbd,0xbd,0xd29,0xbd,0xbd,0xbd,
-0xd35,0xd35,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd38,0xd38,0xd38,0xd38,
-0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xc0,0xc0,
-0xd38,0xd38,0xd38,0xd38,0xd38,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
-0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,
-0x1530,0x1530,0x1530,0x1530,0xc3,0xc3,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,
-0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0xc3,0xc3,
-0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xc6,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xc6,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xc6,
-0xd5f,0xd5f,0xc6,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xc6,0xc6,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
-0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
-0xc6,0xc6,0xc6,0xc6,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,
-0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xc9,
-0xc9,0xc9,0xc9,0xc9,0xda4,0xda4,0xda4,0xcc,0xcc,0xcc,0xcc,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,
-0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,
-0xd9e,0xd9e,0xd9e,0xd9e,0xcc,0xcc,0xcc,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,
+0xb73,0xb73,0xb73,0x9f,0x9f,0x9f,0x9f,0x9f,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,
+0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
+0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xa2,0xa2,
+0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xa5,
+0xa5,0x101d,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,
+0x173d,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
+0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xa8,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xa8,0xba0,0xba0,0xa8,0xa8,0xba0,0xa8,0xa8,0xba0,0xba0,0xa8,
+0xa8,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,
+0xb9d,0xb9d,0xa8,0xb9d,0xa8,0xb9d,0xb9d,0xb9d,0xb9d,0xd29,0xb9d,0xb9d,0xa8,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xa8,0xba0,
+0xba0,0xba0,0xba0,0xa8,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xba0,0xba0,0xa8,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xa8,
+0xa8,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xe16,0xe16,0xa8,0xa8,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xf2d,0xf2a,
+0xa8,0xa8,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
+0xb9a,0xb9a,0xb9a,0xb9a,0xab,0xba6,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+0xab,0xab,0xab,0xab,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,
+0xc36,0xae,0xc36,0xc36,0xc36,0xc36,0xc30,0xc30,0xc33,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
+0xae,0xae,0xae,0xae,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,
+0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc39,0xc39,0xc3c,0xca5,0xca5,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,
+0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc42,0xc42,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
+0xb4,0xb4,0xb4,0xb4,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,
+0xc4b,0xb7,0xc4b,0xc4b,0xc4b,0xb7,0xc48,0xc48,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
+0xb7,0xb7,0xb7,0xb7,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
+0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
+0xd3b,0x1539,0x1539,0xba,0xd2c,0xd2c,0xd2c,0xd38,0xd38,0xd38,0xd38,0xd2c,0xd2c,0xd38,0xd38,0xd38,
+0xba,0xba,0xba,0xba,0xd38,0xd38,0xd2c,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd2f,0xd2f,0xd2f,
+0xba,0xba,0xba,0xba,0xd32,0xba,0xba,0xba,0xd3e,0xd3e,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,
+0xd35,0xd35,0xd35,0xd35,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,
+0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xbd,0xbd,0xd41,0xd41,0xd41,0xd41,0xd41,0xbd,0xbd,0xbd,
+0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
+0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0xc0,0xc0,0x153c,0x153c,
+0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
+0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0xc0,0x1abe,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
+0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xd68,0xd68,0xd68,
0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xcf,0xd65,
+0xd68,0xd68,0xd68,0xc3,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,
+0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xd68,0xd68,0xc3,0xd68,0xd68,0xd68,0xd68,0xd68,
+0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xc3,0xd68,0xd68,0xd68,0xd68,
+0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xd6b,0xd6b,0xd6b,0xd6b,
+0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
+0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xc6,0xc6,0xc6,0xc6,0xc6,0xdad,0xdad,0xdad,0xc9,
+0xc9,0xc9,0xc9,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,
+0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xc9,0xc9,0xc9,0xdaa,
+0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,
0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,
-0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd2,0xd2,
-0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
-0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,
-0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd5,0xd5,0xd74,0xd5,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
-0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
-0xd74,0xd74,0xd5,0xd74,0xd74,0xd5,0xd5,0xd5,0xd74,0xd5,0xd5,0xd74,0xd77,0xd77,0xd77,0xd77,
-0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,
-0xd77,0xd77,0xd77,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0x1533,0x1533,0x17e5,0x17e5,0xde,0x110d,0x110d,0x110d,0x110d,
-0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x135,0x135,0x135,0x135,0xe3a,0xe3a,0xe3a,0xe3a,
-0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,
-0xe3a,0xe3a,0xe3a,0xe31,0xe31,0xe37,0xe37,0xe31,0xe1,0xe1,0xe34,0xe34,0x113d,0x113d,0x113d,0x113d,
-0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xc99,0xc99,0xc99,0xc99,
-0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0x102c,0x102c,0x102c,0x102c,
-0x102c,0x102c,0x102c,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,
-0x1536,0x1539,0x18b1,0x18b1,0x18b1,0x18b1,0xe7,0x17e8,0x136b,0x117f,0xf30,0xf30,0xe4c,0xe49,0xe4c,0xe49,
-0xe49,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0x1188,0x1185,0x1188,0x1185,0x1182,0x1182,0x1182,0x1428,0x1425,
-0xea,0xea,0xea,0xea,0xea,0xe46,0xe43,0xe43,0xe43,0xe40,0xe46,0xe43,0xe4f,0xe4f,0xe4f,0xe4f,
-0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,
-0xe4f,0xe4f,0xe4f,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xe4f,0xe4f,0xe4f,0xe4f,
-0xe4f,0xe4f,0xe4f,0xed,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xed,0xe4f,0xe4f,0xe4f,0xe4f,
-0xe4f,0xe4f,0xe4f,0xed,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xed,0xe55,0xe55,0xe55,0xe55,
-0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe52,0xe52,0xe52,0xe52,
-0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xe58,0xe58,0xe58,0xe58,
-0xe58,0xe58,0xf3,0x142b,0xf3,0xf3,0xf3,0xf3,0xf3,0x142b,0xf3,0xf3,0xeaf,0xeaf,0xeaf,0xeaf,
-0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xe5e,0xe5e,0xe5e,0xe5e,
-0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xf6,0xe5b,0xe5b,0xe5b,0xe5b,
-0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,
-0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xf6,0xe70,0xe64,0xe64,0xe64,
-0xf9,0xe64,0xe64,0xf9,0xf9,0xf9,0xf9,0xf9,0xe64,0xe64,0xe64,0xe64,0xe70,0xe70,0xe70,0xe70,
-0xf9,0xe70,0xe70,0xe70,0xf9,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,
-0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0x194d,0x194d,0xf9,0xf9,
-0xe61,0xe61,0xe61,0xf9,0xf9,0xf9,0xf9,0xe67,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,
-0x194a,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe73,0xe73,
-0xe6a,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,
-0xe7f,0xe7f,0x118e,0x118e,0xfc,0xfc,0xfc,0xfc,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe82,0xe82,0xe82,
-0xe7f,0xe7f,0xe82,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xfc,0xfc,
-0xfc,0xfc,0xfc,0xfc,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0x118b,0xfc,
-0xfc,0xfc,0xe79,0xe79,0xe88,0xe88,0xe88,0xe88,0xff,0xff,0xff,0xff,0xe88,0xe88,0xe88,0xe88,
-0xe88,0xe88,0xe88,0xe88,0xe85,0xe88,0xe88,0xe88,0xe88,0xe88,0xff,0xff,0xff,0xff,0xff,0xff,
-0xff,0xff,0xff,0xff,0x1542,0x1548,0x1545,0x1890,0x17eb,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x1953,0x1950,
-0x1956,0x1950,0x1956,0x1a16,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,
-0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,
-0x102,0x102,0x102,0x102,0xeac,0xeac,0xeac,0xea9,0xea9,0xea0,0xea0,0xea9,0xea6,0xea6,0xea6,0xea6,
-0x105,0x105,0x105,0x105,0x1308,0x1308,0x1308,0x130b,0x130b,0x130b,0x1302,0x1302,0x1305,0x1302,0x159,0x159,
-0x159,0x159,0x159,0x159,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0x1437,0x1437,0x108,0x108,0x108,0x108,
-0x108,0x108,0x108,0xeb2,0x1371,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,
-0x108,0x108,0x108,0x136e,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,
-0xc69,0xc69,0xc69,0xc6c,0xedf,0xed0,0xeca,0xedc,0xed9,0xed3,0xed3,0xee2,0xecd,0xed6,0x10b,0x10b,
-0x10b,0x10b,0x10b,0x10b,0xf63,0xf63,0xf4e,0xf63,0xf66,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,
-0x111,0x111,0x111,0x111,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf6f,0xf6f,
-0xf54,0xf5a,0xf6f,0xf6f,0xf57,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf51,
-0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,
-0xf54,0x111,0x111,0x111,0x114,0x114,0x1a1c,0x1a19,0x1a1c,0x1a1c,0x1a1c,0x114,0x114,0x114,0x114,0x114,
-0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,
-0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x1551,0x1440,0x1440,0x1374,0x1068,0x1068,0x1068,0x1068,0x1068,
-0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,
-0xf7e,0xf7e,0xf7e,0xf7e,0xf7b,0xf7b,0xf81,0xf81,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,
+0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xcc,0xd6e,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,
+0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,
+0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xcf,0xcf,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,
+0xd77,0xd77,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,
+0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd2,0xd2,
+0xd7d,0xd2,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,
+0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd2,0xd7d,0xd7d,0xd2,0xd2,0xd2,
+0xd7d,0xd2,0xd2,0xd7d,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
+0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd5,0xd5,0xd5,0xd5,0xd5,
+0xd5,0xd5,0xd5,0xd5,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0x153f,
+0x153f,0x17f1,0x17f1,0xdb,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,
+0x1acd,0x132,0x132,0x132,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,
+0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe3a,0xe3a,0xe40,0xe40,0xe3a,
+0xde,0xde,0xe3d,0xe3d,0x1149,0x1149,0x1149,0x1149,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+0xe1,0xe1,0xe1,0xe1,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,
+0xca2,0xca2,0xca2,0xca2,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1542,0x1542,0x1542,0x1542,0x1542,
+0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1545,0x18bd,0x18bd,0x193e,0x18bd,0xe4,0x17f4,
+0x1377,0x118b,0xf3c,0xf3c,0xe55,0xe52,0xe55,0xe52,0xe52,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0x1194,
+0x1191,0x1194,0x1191,0x118e,0x118e,0x118e,0x1434,0x1431,0xe7,0xe7,0xe7,0xe7,0xe7,0xe4f,0xe4c,0xe4c,
+0xe4c,0xe49,0xe4f,0xe4c,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,
+0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xea,0xea,0xea,0xea,0xea,
+0xea,0xea,0xea,0xea,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xea,0xe58,0xe58,0xe58,0xe58,
+0xe58,0xe58,0xe58,0xea,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xea,0xe58,0xe58,0xe58,0xe58,
+0xe58,0xe58,0xe58,0xea,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,
+0xe5e,0xe5e,0xe5e,0xe5e,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xed,0xed,
+0xed,0xed,0xed,0xed,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xf0,0x1437,0xf0,0xf0,0xf0,0xf0,
+0xf0,0x1437,0xf0,0xf0,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
+0xeb8,0xeb8,0xeb8,0xeb8,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xf3,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,
+0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,
+0xe64,0xe64,0xe64,0xf3,0xe79,0xe6d,0xe6d,0xe6d,0xf6,0xe6d,0xe6d,0xf6,0xf6,0xf6,0xf6,0xf6,
+0xe6d,0xe6d,0xe6d,0xe6d,0xe79,0xe79,0xe79,0xe79,0xf6,0xe79,0xe79,0xe79,0xf6,0xe79,0xe79,0xe79,
+0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,
+0xe79,0xe79,0xe79,0xe79,0x195c,0x195c,0xf6,0xf6,0xe6a,0xe6a,0xe6a,0xf6,0xf6,0xf6,0xf6,0xe70,
+0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0x1959,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
+0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe7c,0xe7c,0xe73,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
+0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0x119a,0x119a,0xf9,0xf9,0xf9,0xf9,
+0xe88,0xe88,0xe88,0xe88,0xe88,0xe8b,0xe8b,0xe8b,0xe88,0xe88,0xe8b,0xe88,0xe88,0xe88,0xe88,0xe88,
+0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe85,0xe85,0xe85,0xe85,
+0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0x1197,0xf9,0xf9,0xf9,0xe82,0xe82,0xe91,0xe91,0xe91,0xe91,
+0xfc,0xfc,0xfc,0xfc,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe8e,0xe91,0xe91,0xe91,
+0xe91,0xe91,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x154e,0x1554,0x1551,0x189c,
+0x17f7,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x1962,0x195f,0x1965,0x195f,0x1965,0x1a25,0x1ac1,0x1ac1,0x1ac1,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xeb5,0xeb5,0xeb5,0xeb2,0xeb2,0xea9,0xea9,0xeb2,0xeaf,0xeaf,0xeaf,0xeaf,0x1ac4,0x102,0x102,0x102,
+0x1314,0x1314,0x1314,0x1317,0x1317,0x1317,0x130e,0x130e,0x1311,0x130e,0x156,0x156,0x156,0x156,0x156,0x156,
+0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0x1443,0x1443,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xebb,
+0x137d,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x137a,
+0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc75,
+0xee8,0xed9,0xed3,0xee5,0xee2,0xedc,0xedc,0xeeb,0xed6,0xedf,0x108,0x108,0x108,0x108,0x108,0x108,
+0xf6f,0xf6f,0xf5a,0xf6f,0xf72,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0x10e,0x10e,0x10e,0x10e,
+0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf7b,0xf7b,0xf60,0xf66,0xf7b,0xf7b,
+0xf63,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,
+0xf5d,0xf5d,0xf5d,0xf5d,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0x10e,0x10e,0x10e,
+0x111,0x111,0x1a2b,0x1a28,0x1a2b,0x1a2b,0x1a2b,0x1aca,0x1ac7,0x1aca,0x1ac7,0x111,0x111,0x111,0x111,0x111,
+0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,
+0x111,0x1aca,0x1ac7,0x155d,0x144c,0x144c,0x1380,0x1074,0x1074,0x1074,0x1074,0x1074,0xf8a,0xf8a,0xf8a,0xf8a,
0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,
-0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf84,0xf84,0xf84,0xf84,0x1197,0x1197,0x11a,0x11a,0x11a,0xf87,
-0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,
-0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1740,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,
-0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,
-0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xf93,0xf93,0xf93,0x155d,
-0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x120,0xf90,0xf90,0xf90,0xf90,
-0x155a,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0xf96,0xf96,0xf96,0xf96,
-0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0x1965,0x1965,
-0x1965,0x1965,0x1965,0x1965,0x1965,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x108f,0x108f,0x108f,0x108f,
-0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,
-0x108c,0x108c,0x1083,0x1080,0x126,0x126,0x126,0x1092,0x1092,0x1086,0x1086,0x1086,0x1089,0x1089,0x1089,0x1089,
-0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x126,0x126,0x126,0x108f,0x108f,0x108f,0x1095,0x1095,0x1095,0x1095,
-0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x10aa,0x10aa,0x10aa,0x10aa,
-0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10ad,0x10ad,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
-0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x10d4,0x10d4,0x10d4,0x10d4,
-0x10ce,0x17f1,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x10da,0x10da,0x10d1,0x10d1,0x10d1,0x10d1,
-0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x10f8,0x10f8,0x10f8,0x10f8,
-0x10f8,0x10f8,0x10f8,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10f2,0x10f5,
-0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x10ef,0x1107,0x1107,0x1107,0x1107,
-0x1107,0x1107,0x1107,0x1107,0x1107,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x1104,0x1104,0x10fb,0x10fb,0x1104,
-0x1104,0x10fb,0x10fb,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x1107,0x1107,0x1107,0x10fb,
-0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x10fb,0x1104,0x132,0x132,0x1101,0x1101,0x1101,0x1101,
-0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x132,0x132,0x10fe,0x110a,0x110a,0x110a,0x1569,0x135,0x135,0x135,
-0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
-0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,
-0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1110,0x1113,0x138,0x138,0x1116,0x1116,0x1116,0x1116,
-0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,
-0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x13b,0x13b,0x13b,0x1119,0x1119,0x1119,0x1119,
-0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x13e,0x13e,0x13e,
-0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x111f,0x111f,0x111f,0x111f,
-0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,
-0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x141,0x141,0x141,0x141,0x141,0x111c,0x1122,0x1122,0x1122,0x1122,
-0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x144,0x144,0x144,0x144,0x1125,0x1125,0x1125,0x1125,
-0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
-0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x119d,0x119d,0x119d,0x119d,
-0x11a6,0x119d,0x119d,0x119d,0x11a6,0x119d,0x119d,0x119d,0x119d,0x119a,0x14a,0x14a,0x11a3,0x11a3,0x11a3,0x11a3,
-0x11a3,0x11a3,0x11a3,0x11a9,0x11a3,0x11a9,0x11a3,0x11a3,0x11a3,0x11a9,0x11a9,0x14a,0x11ac,0x11ac,0x11ac,0x11ac,
-0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,
-0x11ac,0x11ac,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x11c7,0x11c7,0x11c7,0x11c7,
-0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,
-0x11c7,0x11c4,0x11af,0x11c4,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x150,0x11b8,0x11c1,0x11af,0x11c1,
-0x11c1,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11af,
-0x11af,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x150,0x150,0x11b2,0x11be,0x11be,0x11be,0x11be,
-0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x150,0x150,0x150,0x150,0x150,0x150,0x11be,0x11be,0x11be,0x11be,
-0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x150,0x150,0x150,0x150,0x150,0x150,0x11bb,0x11bb,0x11bb,0x11bb,
-0x11bb,0x11bb,0x11bb,0x11ca,0x11cd,0x11cd,0x11cd,0x11cd,0x11bb,0x11bb,0x150,0x150,0x15b4,0x15b4,0x15b4,0x15b4,
-0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b1,0x1c8,0x131d,0x12f6,0x1314,0x1314,
-0x1314,0x1314,0x1314,0x1314,0x1314,0x12fc,0x12f9,0x12f0,0x12f0,0x131a,0x12f0,0x12f0,0x12f0,0x12f0,0x12ff,0x14df,
-0x14e5,0x14e2,0x14e2,0x192f,0x170a,0x170a,0x1a9d,0x153,0x153,0x153,0x153,0x153,0x11e2,0x11e2,0x11e2,0x11e2,
-0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11d9,0x11d9,0x11dc,0x11e5,
-0x11df,0x11df,0x11df,0x11e5,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x12de,0x12de,0x12de,0x12de,
-0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,
-0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x15c,0x15c,0x15c,0x1203,0x11f7,0x11f7,0x11f7,
-0x11f7,0x11f7,0x11f7,0x11fa,0x1209,0x1209,0x11f7,0x11f7,0x11f7,0x11f7,0x15f,0x130e,0x11fd,0x11fd,0x11fd,0x11fd,
-0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x15f,0x15f,0x15f,0x15f,0x11f7,0x11f7,0x1227,0x121b,0x1227,0x162,
-0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,
-0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x1224,0x1224,0x122a,0x121e,0x1221,0x123f,0x123f,0x123f,0x1239,
-0x1239,0x1230,0x1239,0x1239,0x1230,0x1239,0x1239,0x1242,0x123c,0x1233,0x165,0x165,0x1236,0x1236,0x1236,0x1236,
-0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x165,0x165,0x165,0x165,0x165,0x165,0x1248,0x1248,0x1248,0x1248,
-0x1248,0x1248,0x1248,0x168,0x168,0x168,0x168,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,
-0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,
-0x1245,0x1245,0x1245,0x1245,0x168,0x168,0x168,0x168,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
-0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x16b,0x124e,
-0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,
-0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x16e,0x16e,
-0x16e,0x125a,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,
-0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x171,0x171,
-0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
-0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x174,0x174,0x174,0x174,0x174,
-0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,
-0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,
-0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x17a,0x128d,0x128d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,
-0x17d,0x17d,0x17d,0x17d,0x17d,0x196e,0x17d,0x17d,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,
-0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
-0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x180,0x1a40,0x1a40,0x1a40,0x1a40,0x1a40,0x1a40,0x1a40,0x1a43,
-0x1a3d,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,
-0x12ba,0x12ba,0x12ba,0x1575,0x1575,0x183,0x183,0x183,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,
-0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,
-0x13c8,0x13c8,0x144f,0x144f,0x1a1f,0x183,0x183,0x183,0x13ce,0x13ce,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,
-0x13c8,0x12c3,0x13c8,0x12c3,0x12c3,0x13c8,0x13ce,0x12c9,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,
-0x186f,0x186f,0x186f,0x186f,0x186f,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
+0xf87,0xf87,0xf8d,0xf8d,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xf96,0xf96,0xf96,0xf96,
+0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,
+0xf96,0xf96,0xf90,0xf90,0xf90,0xf90,0x11a3,0x11a3,0x117,0x117,0x117,0xf93,0x1563,0x1563,0x1563,0x1563,
+0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,
+0x1563,0x1563,0x1563,0x1563,0x1563,0x174c,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,
+0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,
+0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xf9f,0xf9f,0xf9f,0x1569,0x1569,0x1569,0x1569,0x1569,
+0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x11d,0xf9c,0xf9c,0xf9c,0xf9c,0x1566,0x11d,0x11d,0x11d,
+0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,
+0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,
+0x1974,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x109b,0x109b,0x109b,0x109b,0x1098,0x1098,0x1098,0x1098,
+0x1098,0x1098,0x1098,0x1098,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1098,0x1098,0x108f,0x108c,
+0x123,0x123,0x123,0x109e,0x109e,0x1092,0x1092,0x1092,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,
+0x1095,0x1095,0x123,0x123,0x123,0x109b,0x109b,0x109b,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,
+0x10a1,0x10a1,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,
+0x10b6,0x10b6,0x10b9,0x10b9,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,
+0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x10e0,0x10e0,0x10e0,0x10e0,0x10da,0x17fd,0x129,0x129,
+0x129,0x129,0x129,0x129,0x129,0x129,0x10e6,0x10e6,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,
+0x10dd,0x10dd,0x129,0x129,0x129,0x129,0x129,0x129,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x10f8,
+0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10fe,0x1101,0x12c,0x12c,0x12c,0x12c,
+0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x10fb,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
+0x1113,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1110,0x1110,0x1107,0x1107,0x1110,0x1110,0x1107,0x1107,0x12f,
+0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x1113,0x1113,0x1113,0x1107,0x1113,0x1113,0x1113,0x1113,
+0x1113,0x1113,0x1113,0x1113,0x1107,0x1110,0x12f,0x12f,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,
+0x110d,0x110d,0x12f,0x12f,0x110a,0x1116,0x1116,0x1116,0x1575,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
+0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
+0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,
+0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,
+0x111c,0x111c,0x111c,0x111c,0x111c,0x111f,0x135,0x135,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,
+0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,
+0x1122,0x1122,0x1122,0x1122,0x1122,0x138,0x138,0x138,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
+0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,
+0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,
+0x112b,0x112b,0x13e,0x13e,0x13e,0x13e,0x13e,0x1128,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,
+0x112e,0x112e,0x112e,0x112e,0x141,0x141,0x141,0x141,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
+0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x144,0x144,0x144,0x144,
+0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x11a9,0x11a9,0x11a9,0x11a9,0x11b2,0x11a9,0x11a9,0x11a9,
+0x11b2,0x11a9,0x11a9,0x11a9,0x11a9,0x11a6,0x147,0x147,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11b5,
+0x11af,0x11b5,0x11af,0x11af,0x11af,0x11b5,0x11b5,0x147,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
+0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x14a,0x14a,
+0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
+0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d0,0x11bb,0x11d0,
+0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x14d,0x11c4,0x11cd,0x11bb,0x11cd,0x11cd,0x11bb,0x11bb,0x11bb,
+0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11bb,0x11bb,0x11c1,0x11c1,0x11c1,
+0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x14d,0x14d,0x11be,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,
+0x11ca,0x11ca,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,
+0x11ca,0x11ca,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11d6,
+0x11d9,0x11d9,0x11d9,0x11d9,0x11c7,0x11c7,0x14d,0x14d,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,
+0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15bd,0x1adf,0x1329,0x1302,0x1320,0x1320,0x1320,0x1320,0x1320,0x1320,
+0x1320,0x1308,0x1305,0x12fc,0x12fc,0x1326,0x12fc,0x12fc,0x12fc,0x12fc,0x130b,0x14eb,0x14f1,0x14ee,0x14ee,0x193b,
+0x1716,0x1716,0x1aac,0x150,0x150,0x150,0x150,0x150,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
+0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11e5,0x11e5,0x11e8,0x11f1,0x11eb,0x11eb,0x11eb,0x11f1,
+0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,
+0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,
+0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x159,0x159,0x159,0x120f,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1206,
+0x1215,0x1215,0x1203,0x1203,0x1203,0x1203,0x15c,0x131a,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,
+0x1209,0x1209,0x15c,0x15c,0x15c,0x15c,0x1203,0x1203,0x1233,0x1227,0x1233,0x15f,0x15f,0x15f,0x15f,0x15f,
+0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,
+0x15f,0x15f,0x15f,0x1230,0x1230,0x1236,0x122a,0x122d,0x124b,0x124b,0x124b,0x1245,0x1245,0x123c,0x1245,0x1245,
+0x123c,0x1245,0x1245,0x124e,0x1248,0x123f,0x162,0x162,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,
+0x1242,0x1242,0x162,0x162,0x162,0x162,0x162,0x162,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x165,
+0x165,0x165,0x165,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x165,0x165,0x165,0x165,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,
+0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x168,0x125a,0x1257,0x1257,0x1257,0x1257,
+0x1257,0x1257,0x1257,0x1257,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
+0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x16b,0x16b,0x16b,0x1266,0x1269,0x1269,
+0x1269,0x1269,0x1269,0x1269,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,
+0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x16e,0x16e,0x126f,0x126f,0x126f,0x126f,
+0x126f,0x126f,0x126f,0x126f,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,
+0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x171,0x171,0x171,0x171,0x171,0x1275,0x1275,0x1275,0x1275,
+0x1275,0x1275,0x1275,0x1275,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,
+0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,
+0x127e,0x127e,0x127e,0x177,0x1299,0x1299,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
+0x17a,0x197d,0x17a,0x17a,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,
+0x14ca,0x14ca,0x14ca,0x14ca,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
+0x129f,0x129f,0x129f,0x17d,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a52,0x1a4c,0x279,0x279,0x279,
+0x279,0x279,0x279,0x279,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,
+0x187e,0x1ad0,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,
+0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,
+0x180,0x180,0x180,0x180,0x180,0x180,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,
+0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,
+0x12f6,0x13f5,0x13f2,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
+0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f3,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,
+0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f3,0x12f0,0x12f0,0x13f5,0x13f5,
+0x13f5,0x13f5,0x13f5,0x13f2,0x13f5,0x13f5,0x13f5,0x1881,0x183,0x183,0x183,0x183,0x12ed,0x12ed,0x12ed,0x12ed,
+0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1419,0x1419,0x183,0x183,
+0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1920,0x1920,0x1920,0x1920,
+0x1920,0x1920,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
-0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,
-0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,
-0x1380,0x1380,0x1380,0x1380,0x12ea,0x13e9,0x13e6,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,
-0x186,0x186,0x186,0x186,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e7,0x12e4,
-0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e4,0x12e7,
-0x12e4,0x12e4,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e6,0x13e9,0x13e9,0x13e9,0x1872,0x186,0x186,0x186,0x186,
-0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x186,0x186,0x186,0x186,0x186,0x186,0x186,
-0x140d,0x140d,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,
-0x1914,0x1914,0x1914,0x1914,0x1914,0x1914,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,
-0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,
-0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,
-0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,
-0x1389,0x1383,0x1383,0x1383,0x189,0x189,0x1386,0x189,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x138c,0x1395,
-0x138f,0x138f,0x1395,0x1395,0x1395,0x138f,0x1395,0x138f,0x138f,0x138f,0x1398,0x1398,0x18c,0x18c,0x18c,0x18c,
-0x18c,0x18c,0x18c,0x18c,0x1392,0x1392,0x1392,0x1392,0x18f,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x18f,
-0x18f,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x18f,0x18f,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x18f,
-0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x18f,
-0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x18f,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,
-0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13b6,
-0x13b6,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x192,0x192,0x192,0x192,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,
-0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,
-0x13ad,0x13ad,0x13ad,0x13ad,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,
-0x192,0x192,0x192,0x1578,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,
-0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x195,0x195,0x195,
-0x195,0x195,0x195,0x195,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,
-0x13bc,0x13bc,0x13bc,0x198,0x198,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,
-0x13bc,0x13bc,0x13bc,0x157b,0x198,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,
-0x13bc,0x13bc,0x13bc,0x13f2,0x198,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,
-0x13bc,0x13bc,0x13bc,0x13bc,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,
-0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x198,0x198,0x198,0x198,0x198,0x198,
-0x198,0x198,0x198,0x198,0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1590,0x1590,0x1590,0x1590,0x1590,0x1593,
-0x1701,0x1593,0x1593,0x1593,0x17cd,0x187b,0x187b,0x18b7,0x18b7,0x1a7f,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,
-0x19b,0x19b,0x19b,0x19b,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1590,0x1590,0x1590,0x1593,0x1590,0x16fe,
-0x16fe,0x19b,0x19b,0x19b,0x1593,0x1590,0x1590,0x1593,0x187b,0x187b,0x187b,0x191a,0x191a,0x19f8,0x1a7f,0x19b,
-0x19b,0x19b,0x19b,0x19b,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,
-0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,
-0x19e,0x19e,0x19e,0x19e,0x145b,0x1599,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,
-0x145b,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1752,0x1752,0x1a1,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,
-0x17fd,0x17fd,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,
-0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1974,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,
-0x17fa,0x17fa,0x17fa,0x17fa,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,
-0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,
-0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1a4,0x1461,0x1a4,0x1a4,0x1461,0x1a4,0x1461,0x1461,0x1461,
-0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1a4,0x1461,
-0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1461,0x1a4,0x1a4,0x1a4,0x1a4,0x1461,0x1a4,0x1461,0x1a4,0x1461,
-0x1a4,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1a4,0x1461,0x1a4,0x1a4,0x1461,0x1a4,0x1461,0x1a4,0x1461,
-0x1a4,0x1461,0x1a4,0x1461,0x1a4,0x1461,0x1461,0x1a4,0x1461,0x1a4,0x1a4,0x1461,0x1461,0x1461,0x1461,0x1a4,
-0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1461,
-0x1461,0x1a4,0x1461,0x1a4,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,
-0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,
-0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1461,0x1461,0x1461,0x1a4,0x1461,0x1461,0x1461,0x1461,0x1461,0x1a4,0x1461,
-0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,
-0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
-0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
-0x145e,0x145e,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
-0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1464,0x1464,0x1464,0x1464,0x1464,0x1473,0x1464,0x1467,0x1467,
-0x1464,0x1464,0x1464,0x146a,0x146a,0x1a7,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,
-0x146d,0x1479,0x1479,0x1479,0x197a,0x1977,0x1977,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,
+0x183,0x183,0x183,0x183,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,
+0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138f,0x138f,0x138f,
+0x186,0x186,0x1392,0x186,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1398,0x13a1,0x139b,0x139b,0x13a1,0x13a1,
+0x13a1,0x139b,0x13a1,0x139b,0x139b,0x139b,0x13a4,0x13a4,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,
+0x139e,0x139e,0x139e,0x139e,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x18c,0x18c,0x13aa,0x13aa,0x13aa,
+0x13aa,0x13aa,0x13aa,0x18c,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x18c,0x18c,0x18c,0x18c,0x18c,
+0x18c,0x18c,0x18c,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,
+0x13aa,0x13aa,0x13aa,0x18c,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,
+0x161d,0x161d,0x161d,0x161d,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13b0,0x13c2,0x13c2,0x13b6,0x13b6,0x13b6,
+0x13b6,0x13b6,0x18f,0x18f,0x18f,0x18f,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,
+0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,
+0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x1584,
+0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,
+0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x192,0x192,0x192,0x192,0x192,0x192,0x192,
+0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x195,
+0x195,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x1587,
+0x195,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13fe,
+0x195,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,
+0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,
+0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,
+0x1413,0x1410,0x1410,0x1410,0x1410,0x1410,0x159c,0x159c,0x159c,0x159c,0x159c,0x159f,0x170d,0x159f,0x159f,0x159f,
+0x17d9,0x188a,0x188a,0x18c3,0x18c3,0x1a8e,0x1b39,0x1b39,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,
+0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159c,0x159c,0x159c,0x159f,0x159c,0x170a,0x170a,0x198,0x198,0x198,
+0x159f,0x159c,0x159c,0x159f,0x188a,0x188a,0x188a,0x1926,0x1926,0x1a07,0x1a8e,0x1b39,0x1b39,0x198,0x198,0x198,
+0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,
+0x13cb,0x13cb,0x13cb,0x13cb,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,
+0x1467,0x15a5,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x15a5,0x15a5,0x15a5,
+0x15a5,0x15a5,0x15a5,0x175e,0x175e,0x19e,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1ad3,0x1ad3,
+0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,
+0x19e,0x19e,0x19e,0x1983,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,
+0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,
+0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,
+0x1a1,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,
+0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,
+0x1a1,0x1a1,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x146d,0x146d,
+0x1a1,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,
+0x1a1,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,
+0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x1a1,
+0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,
+0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,
+0x1a1,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,
+0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,
+0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,
+0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x146a,0x146a,0x1a1,0x1a1,
+0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1482,0x1482,0x1482,0x1482,
+0x1482,0x1482,0x1482,0x1470,0x1470,0x1470,0x1470,0x1470,0x147f,0x1470,0x1473,0x1473,0x1470,0x1470,0x1470,0x1476,
+0x1476,0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1479,0x1485,0x1485,0x1485,
+0x1989,0x1986,0x1986,0x1ad6,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x162f,0x162f,0x162f,0x162f,
+0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x1491,0x1491,0x1491,0x1491,
+0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x148e,0x1488,0x1488,0x148e,0x148e,0x1497,0x1497,0x1491,0x1494,
+0x1494,0x148e,0x148b,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x149a,0x149a,0x149a,0x149a,
+0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,
+0x149a,0x149a,0x149a,0x149a,0x1aa,0x1aa,0x1aa,0x1aa,0x1761,0x1761,0x149a,0x149a,0x1761,0x1761,0x1761,0x1761,
+0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1aa,0x1aa,0x1761,0x1761,
+0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x14a6,0x14a6,0x14a6,0x14a6,
+0x14a6,0x1a37,0x1a37,0x1a37,0x1a37,0x1a37,0x1a37,0x1ad,0x1ad,0x1ad,0x1ad,0x1a31,0x14a6,0x14a3,0x14a3,0x14a3,
+0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x1a34,0x1a34,0x1a34,0x1a34,
+0x1a34,0x1a34,0x1a34,0x1a34,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x14a0,0x14a0,0x14a0,0x14a0,0x14a9,
+0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14ca,0x14ca,0x14ca,0x14ca,
+0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x14c7,0x14c7,0x14c7,0x14c7,
+0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x14cd,0x14cd,0x14cd,0x14cd,
+0x14cd,0x14cd,0x14cd,0x14cd,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1323,0x1320,0x1323,0x12ff,
+0x1320,0x1326,0x1326,0x1329,0x1326,0x1329,0x132c,0x1320,0x1329,0x1329,0x1320,0x1320,0x14df,0x14df,0x14df,0x14df,
+0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14d0,0x14d9,0x14d0,0x14d9,0x14d9,0x14d0,0x14d0,0x14d0,0x14d0,
+0x14d0,0x14d0,0x14dc,0x14d3,0x1a3a,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x15b1,0x15b1,0x15b1,0x15b1,
+0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x1b9,0x1b9,0x15ae,0x15ae,0x15ae,0x15ae,
+0x15ae,0x15b4,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1719,0x1710,0x1710,0x1710,
+0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,
+0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1bf,0x1bf,0x1bf,0x1bf,0x1adf,0x1c2,0x1c2,0x1c2,
+0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
+0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
+0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,
+0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1c5,0x1c5,0x1c5,
+0x1c5,0x1c5,0x1c5,0x1c5,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1c5,0x1c5,
+0x15c9,0x15c3,0x15c6,0x15cf,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x1c8,0x1c8,0x1c8,0x1c8,
+0x1c8,0x1c8,0x1c8,0x1c8,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,
+0x15ba,0x15ba,0x15ba,0x15ba,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
+0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x198c,0x198c,0x198c,0x198c,0x1cb,0x1cb,0x1cb,
+0x1cb,0x1cb,0x1cb,0x1cb,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,
+0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,
+0x1cb,0x1cb,0x1cb,0x1cb,0x1776,0x171c,0x15de,0x1722,0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,
+0x15e7,0x1ce,0x1ce,0x15e7,0x15e7,0x1ce,0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,
+0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1ce,0x15e7,0x15e7,
+0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1ce,0x1a16,0x171f,0x15e7,0x15d8,0x15de,0x15d8,0x15de,0x15de,0x15de,
+0x15de,0x1ce,0x1ce,0x15de,0x15de,0x1ce,0x1ce,0x15e1,0x15e1,0x15e4,0x1ce,0x1ce,0x1779,0x1ce,0x1ce,0x1ce,
+0x1ce,0x1ce,0x1ce,0x15d8,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x15ea,0x15e7,0x15e7,0x15e7,0x15e7,0x15de,0x15de,
+0x1ce,0x1ce,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x1ce,0x1ce,0x1ce,0x15db,0x15db,0x15db,0x15db,
+0x15db,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x15ff,0x15ff,0x15ff,0x15ff,
+0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x1d1,0x15ff,
+0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15f9,0x15f9,0x15f9,0x15ed,
+0x15ed,0x15ed,0x15f9,0x15f9,0x15ed,0x15fc,0x15f0,0x15ed,0x1602,0x1602,0x15f6,0x1602,0x1602,0x15f3,0x180c,0x1d1,
+0x1611,0x1611,0x1611,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1608,0x160b,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
+0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
+0x177c,0x177c,0x177c,0x177c,0x161d,0x161a,0x1a3d,0x1a3d,0x1ae5,0x1ae8,0x1ae2,0x1ae2,0x1d7,0x1d7,0x1d7,0x1d7,
+0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1482,0x147c,0x147c,0x1482,0x1482,
-0x148b,0x148b,0x1485,0x1488,0x1488,0x1482,0x147f,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,
-0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,
-0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x1ad,0x1ad,0x1ad,0x1ad,0x1755,0x1755,0x148e,0x148e,
-0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
-0x1ad,0x1ad,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
-0x149a,0x149a,0x149a,0x149a,0x149a,0x1a28,0x1a28,0x1a28,0x1a28,0x1a28,0x1a28,0x1b0,0x1b0,0x1b0,0x1b0,0x1a22,
-0x149a,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,
-0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1494,
-0x1494,0x1494,0x1494,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,
-0x14af,0x14b2,0x14b5,0x14b5,0x14b2,0x14b8,0x14b8,0x14a3,0x14a6,0x1758,0x175b,0x175b,0x175b,0x159f,0x1b3,0x1b3,
-0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x159c,0x1761,0x1764,0x175e,0x1767,0x1767,
-0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
-0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
-0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,
-0x1317,0x1314,0x1317,0x12f3,0x1314,0x131a,0x131a,0x131d,0x131a,0x131d,0x1320,0x1314,0x131d,0x131d,0x1314,0x1314,
-0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14c4,0x14cd,0x14c4,0x14cd,0x14cd,
-0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14d0,0x14c7,0x1a2b,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,
-0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1bf,0x1bf,
-0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a8,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,
-0x170d,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,
-0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1c5,0x1c5,0x1c5,0x1c5,
-0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
-0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
-0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,
-0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1cb,0x1cb,0x1cb,
-0x1cb,0x1cb,0x1cb,0x1cb,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1cb,0x1cb,
-0x15bd,0x15b7,0x15ba,0x15c3,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x1ce,0x1ce,0x1ce,0x1ce,
-0x1ce,0x1ce,0x1ce,0x1ce,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,
-0x15ae,0x15ae,0x15ae,0x15ae,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,
-0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x197d,0x197d,0x197d,0x197d,0x1d1,0x1d1,0x1d1,
-0x1d1,0x1d1,0x1d1,0x1d1,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,0x1a82,
-0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,
-0x1d1,0x1d1,0x1d1,0x1d1,0x176a,0x1710,0x15d2,0x1716,0x1d4,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,
-0x15db,0x1d4,0x1d4,0x15db,0x15db,0x1d4,0x1d4,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,
-0x15db,0x15db,0x15db,0x15db,0x15db,0x1d4,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x1d4,0x15db,0x15db,
-0x1d4,0x15db,0x15db,0x15db,0x15db,0x15db,0x1d4,0x1a07,0x1713,0x15db,0x15cc,0x15d2,0x15cc,0x15d2,0x15d2,0x15d2,
-0x15d2,0x1d4,0x1d4,0x15d2,0x15d2,0x1d4,0x1d4,0x15d5,0x15d5,0x15d8,0x1d4,0x1d4,0x176d,0x1d4,0x1d4,0x1d4,
-0x1d4,0x1d4,0x1d4,0x15cc,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x15de,0x15db,0x15db,0x15db,0x15db,0x15d2,0x15d2,
-0x1d4,0x1d4,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x1d4,0x1d4,0x1d4,0x15cf,0x15cf,0x15cf,0x15cf,
-0x15cf,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x15f3,0x15f3,0x15f3,0x15f3,
-0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x1d7,0x15f3,
-0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15ed,0x15ed,0x15ed,0x15e1,
-0x15e1,0x15e1,0x15ed,0x15ed,0x15e1,0x15f0,0x15e4,0x15e1,0x15f6,0x15f6,0x15ea,0x15f6,0x15f6,0x15e7,0x1800,0x1d7,
-0x1605,0x1605,0x1605,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15fc,0x15ff,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1770,0x1770,0x1770,0x1770,0x1611,0x160e,0x1a2e,0x1a2e,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,
-0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
-0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,
-0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,
-0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,
-0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,
-0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,
-0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,
+0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x161a,0x161d,0x1620,0x1623,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,
-0x1632,0x1632,0x1632,0x1632,0x1632,0x1626,0x1626,0x1e6,0x1e6,0x1e6,0x1e6,0x1629,0x1629,0x1629,0x1629,0x1629,
-0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162c,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
-0x163b,0x163b,0x163b,0x163b,0x163b,0x1e9,0x1e9,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,
-0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,
-0x163e,0x1650,0x1650,0x1644,0x164d,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,
-0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,
-0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,
-0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1ef,
-0x1662,0x1662,0x1662,0x1662,0x1662,0x165c,0x1665,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,
-0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1662,0x1662,0x1662,0x1662,0x1662,0x1f2,
-0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,
-0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x1f5,
+0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
+0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
+0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
+0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,
+0x162f,0x162f,0x162f,0x1626,0x1629,0x162c,0x162f,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,
+0x163e,0x163e,0x163e,0x163e,0x163e,0x1632,0x1632,0x1e0,0x1e0,0x1e0,0x1e0,0x1635,0x1635,0x1635,0x1635,0x1635,
+0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x1638,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,
+0x1647,0x1647,0x1647,0x1647,0x1647,0x1e3,0x1e3,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,
+0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,
+0x164a,0x165c,0x165c,0x1650,0x1659,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,
+0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1e9,
+0x166e,0x166e,0x166e,0x166e,0x166e,0x1668,0x1671,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,
+0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166e,0x166e,0x166e,0x166e,0x166e,0x1ec,
0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,
-0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1674,0x1674,0x1674,0x1674,0x1674,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,
-0x168f,0x168f,0x1692,0x1692,0x1695,0x1686,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,
-0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x1fb,0x1686,0x1686,0x1686,0x1686,0x1686,
-0x1686,0x1686,0x1fb,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
-0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x168f,0x168f,0x168f,
-0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,
-0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,
-0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,
-0x16a7,0x16a7,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x16a4,0x16a4,0x16a4,0x16a4,0x201,0x201,0x201,
-0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16aa,
-0x16bc,0x16bc,0x16aa,0x16aa,0x16aa,0x16aa,0x207,0x207,0x16bc,0x16bc,0x16bf,0x16bf,0x16aa,0x16aa,0x16bc,0x16b0,
-0x16ad,0x16b3,0x16c5,0x16c5,0x16b6,0x16b6,0x16b9,0x16b9,0x16b9,0x16c5,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,
-0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1779,0x1776,0x1776,0x1776,0x1776,0x1773,0x1773,0x207,0x207,
+0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1ef,
+0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,
+0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1680,0x1680,0x1680,0x1680,0x1680,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,
+0x169b,0x169b,0x169e,0x169e,0x16a1,0x1692,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,
+0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1f5,0x1692,0x1692,0x1692,0x1692,0x1692,
+0x1692,0x1692,0x1f5,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
+0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x169b,0x169b,0x169b,
+0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
+0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,
+0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,
+0x16b3,0x16b3,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x16b0,0x16b0,0x16b0,0x16b0,0x1fb,0x1fb,0x1fb,
+0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16b6,
+0x16c8,0x16c8,0x16b6,0x16b6,0x16b6,0x16b6,0x201,0x201,0x16c8,0x16c8,0x16cb,0x16cb,0x16b6,0x16b6,0x16c8,0x16bc,
+0x16b9,0x16bf,0x16d1,0x16d1,0x16c2,0x16c2,0x16c5,0x16c5,0x16c5,0x16d1,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,
+0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1782,0x1782,0x1782,0x1782,0x177f,0x177f,0x201,0x201,
+0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,
+0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,
+0x204,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,
+0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,
+0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x207,0x207,0x207,0x207,
+0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
+0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
+0x16d7,0x16d7,0x207,0x207,0x207,0x207,0x207,0x207,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
+0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
+0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x207,0x207,0x1aeb,0x1aeb,0x207,0x207,
0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,
0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,
-0x20a,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,
-0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,
-0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x20d,0x20d,0x20d,0x20d,
-0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,
-0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,
-0x16cb,0x16cb,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,
-0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,
-0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,
-0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,
-0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16ce,0x16dd,0x16d4,0x16d1,
-0x16e3,0x16e3,0x16d7,0x16e3,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x16da,0x16da,0x16da,0x16da,
-0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x210,0x210,0x210,0x210,0x210,0x210,0x16e9,0x16e9,0x16e9,0x16e9,
-0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x213,
-0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x16ef,0x178b,0x178b,0x178b,0x178b,
-0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,
-0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x1980,0x216,0x216,0x177c,0x177c,0x177c,0x1788,0x1788,0x177c,0x177c,
-0x177c,0x177c,0x1788,0x177c,0x177c,0x177c,0x177c,0x177f,0x216,0x216,0x216,0x216,0x1785,0x1785,0x1785,0x1785,
-0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1782,0x1782,0x178e,0x178e,0x178e,0x1782,0x1791,0x1791,0x1791,0x1791,
-0x1791,0x1791,0x1791,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,
-0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,
-0x219,0x219,0x219,0x219,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,
-0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x21f,0x17a3,0x17a3,0x21f,0x21f,0x21f,0x21f,0x21f,0x17a0,
-0x17a0,0x17a0,0x17a0,0x17a0,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x222,0x17a6,0x222,0x17a6,0x17a6,
-0x17a6,0x17a6,0x222,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
-0x17a6,0x17a6,0x222,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a9,0x222,0x222,
-0x222,0x222,0x222,0x222,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,
-0x1608,0x1608,0x1608,0x1608,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
-0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,
-0x225,0x225,0x225,0x225,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,
-0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x17ac,0x17ac,
-0x17ac,0x17ac,0x17ac,0x17ac,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,
-0x228,0x1a85,0x1a85,0x1a88,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d6,0x1884,0x1884,0x1884,
-0x1884,0x1884,0x1884,0x1920,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,
-0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x1a85,0x228,0x19fb,0x19fb,0x19fb,0x19fb,0x228,0x228,0x228,0x19fb,0x1a85,
-0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x228,0x228,0x1a85,0x1a85,0x1a85,0x1a85,0x1a85,0x1a85,0x228,
-0x228,0x228,0x1a85,0x1a85,0x19fe,0x19fe,0x19fe,0x19fe,0x19fb,0x1a01,0x1a01,0x19fb,0x1a01,0x1a01,0x1a85,0x1a88,
-0x1a85,0x1a85,0x1a85,0x1a85,0x17d3,0x19fb,0x19fb,0x1a85,0x1a85,0x1a85,0x1a85,0x1a85,0x1a85,0x1a85,0x1a85,0x228,
-0x228,0x1a88,0x1a88,0x1a88,0x191d,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,
-0x1920,0x1920,0x191d,0x191d,0x17b8,0x17b8,0x17b8,0x17b8,0x17b5,0x17b8,0x17b8,0x17bb,0x17be,0x17bb,0x17bb,0x17b8,
-0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x17b5,
-0x17b5,0x17b5,0x17b5,0x17b5,0x1812,0x1812,0x1812,0x1812,0x1809,0x1809,0x1809,0x1803,0x1806,0x1806,0x1806,0x1a31,
-0x22e,0x22e,0x22e,0x22e,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x22e,0x22e,
-0x22e,0x22e,0x180c,0x180c,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x231,0x182d,0x182d,
-0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,
-0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182a,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x231,
-0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x182a,0x181b,0x182d,0x1830,0x1830,0x1824,0x1821,0x1821,0x231,0x231,
-0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,
-0x1827,0x1827,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,
-0x181e,0x231,0x231,0x231,0x183c,0x183f,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,
-0x1845,0x1845,0x1845,0x1845,0x1833,0x1833,0x1833,0x1833,0x1833,0x1833,0x1833,0x1833,0x1833,0x234,0x234,0x234,
-0x234,0x234,0x234,0x234,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,
-0x199e,0x199e,0x199e,0x199e,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x237,0x1836,0x1836,0x1836,0x1836,
-0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x237,0x237,0x1836,
-0x1836,0x1836,0x1836,0x1836,0x1887,0x1923,0x1a8b,0x1a8e,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,
+0x16da,0x16e9,0x16e0,0x16dd,0x16ef,0x16ef,0x16e3,0x16ef,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,
+0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,
+0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,
+0x16f2,0x16f2,0x16f2,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16fb,
+0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,
+0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x198f,0x210,0x210,0x1788,0x1788,0x1788,
+0x1794,0x1794,0x1788,0x1788,0x1788,0x1788,0x1794,0x1788,0x1788,0x1788,0x1788,0x178b,0x210,0x210,0x210,0x210,
+0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x178e,0x178e,0x179a,0x179a,0x179a,0x178e,
+0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,
+0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,
+0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,
+0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x219,0x17af,0x17af,0x219,0x219,
+0x219,0x219,0x219,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x21c,
+0x17b2,0x21c,0x17b2,0x17b2,0x17b2,0x17b2,0x21c,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
+0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x21c,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
+0x17b2,0x17b5,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
+0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,
+0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x21f,0x21f,0x21f,0x21f,0x21f,
+0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
+0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x21f,0x21f,0x21f,0x21f,0x21f,
+0x21f,0x21f,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,
+0x1929,0x1929,0x1929,0x1929,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a94,0x1b3c,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1b3f,
+0x1b3c,0x222,0x1a0a,0x1a94,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x17df,0x1a0a,0x1a0a,0x1a94,0x1a94,0x1a94,0x1a94,0x1a94,
+0x1a94,0x1a94,0x1a94,0x1b3c,0x222,0x1a97,0x1a97,0x1a97,0x1929,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
+0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x1929,0x1929,0x17c4,0x17c4,0x17c4,0x17c4,0x17c1,0x17c4,0x17c4,0x17c7,
+0x17ca,0x17c7,0x17c7,0x17c4,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,
+0x225,0x225,0x225,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x1821,0x1821,0x1821,0x1821,0x1818,0x1818,0x1818,0x1812,
+0x1815,0x1815,0x1815,0x1a40,0x228,0x228,0x228,0x228,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,
+0x181e,0x181e,0x228,0x228,0x228,0x228,0x181b,0x181b,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,
+0x183c,0x22b,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,
+0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x1839,0x1827,0x1827,0x1827,0x1827,
+0x1827,0x1827,0x1827,0x22b,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1839,0x182a,0x183c,0x183f,0x183f,0x1833,
+0x1830,0x1830,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x1836,0x1836,0x1836,0x1836,
+0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,
+0x182d,0x182d,0x182d,0x182d,0x182d,0x22b,0x22b,0x22b,0x184b,0x184e,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,
+0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,
+0x1842,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,
+0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x231,
+0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,
+0x1845,0x231,0x231,0x1845,0x1845,0x1845,0x1845,0x1845,0x1893,0x192f,0x1a9a,0x1a9d,0x1b45,0x234,0x234,0x234,
+0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1b42,0x1b42,0x234,0x234,0x234,0x234,0x234,0x234,
+0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,
+0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x237,0x237,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,
+0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x237,0x1851,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,
+0x1848,0x1851,0x1848,0x1848,0x1851,0x1848,0x1848,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,
+0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x23a,0x23a,0x23a,
0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,
-0x23a,0x23a,0x23a,0x23a,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,
-0x1845,0x1845,0x1845,0x1845,0x23d,0x23d,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,
-0x1839,0x1839,0x1839,0x1839,0x23d,0x1842,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1842,0x1839,0x1839,
-0x1842,0x1839,0x1839,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x1848,0x1848,0x1848,0x1848,
-0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x240,0x240,0x240,0x240,0x240,0x240,0x240,
-0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x1860,0x1860,0x1851,0x184b,
-0x184b,0x1860,0x184e,0x1863,0x1863,0x1863,0x1863,0x1866,0x1866,0x185a,0x1857,0x1854,0x185d,0x185d,0x185d,0x185d,
-0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x243,0x185a,0x243,0x1854,0x1983,0x1a34,0x243,0x243,0x243,0x243,
-0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,
-0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x186c,0x186c,0x186c,0x186c,
-0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,
-0x246,0x246,0x246,0x246,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,
-0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,
-0x246,0x246,0x246,0x246,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,
-0x188a,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x249,0x249,0x249,0x249,
-0x249,0x249,0x249,0x249,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,
-0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,
-0x24c,0x24c,0x24c,0x24c,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,
-0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,
-0x1929,0x1929,0x1929,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,
-0x24f,0x24f,0x24f,0x24f,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,
-0x291,0x291,0x291,0x291,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x252,0x18c9,0x18c9,0x252,0x18c9,
-0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,
-0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18bd,0x18bd,0x18bd,0x18bd,0x18bd,0x18bd,0x252,0x252,0x252,0x18bd,0x252,
-0x18bd,0x18bd,0x252,0x18bd,0x18bd,0x18bd,0x18c0,0x18bd,0x18c3,0x18c3,0x18cc,0x18bd,0x252,0x252,0x252,0x252,
-0x252,0x252,0x252,0x252,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x252,0x252,
-0x252,0x252,0x252,0x252,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
-0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
-0x255,0x255,0x255,0x255,0x18f9,0x18fc,0x190b,0x190b,0x18fc,0x18ff,0x18f9,0x18f6,0x25e,0x25e,0x25e,0x25e,
-0x25e,0x25e,0x25e,0x25e,0x18e4,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18e1,0x18e1,0x18cf,0x18cf,0x18cf,
-0x18e4,0x18e4,0x18e4,0x18e4,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,
-0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,
-0x261,0x261,0x261,0x261,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,
-0x1989,0x1989,0x261,0x261,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x294,0x294,0x294,0x294,0x1a9a,0x1a9a,0x1a9a,0x294,
-0x294,0x294,0x294,0x294,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,
-0x1998,0x1998,0x1998,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x1998,0x1992,0x198f,0x1995,
-0x264,0x264,0x264,0x264,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,
-0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x199e,0x267,
-0x267,0x199e,0x199e,0x199e,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x26a,0x19ad,0x19ad,0x26a,0x19ad,0x19ad,
+0x186f,0x186f,0x1860,0x185a,0x185a,0x186f,0x185d,0x1872,0x1872,0x1872,0x1872,0x1875,0x1875,0x1869,0x1866,0x1863,
+0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x1aee,0x1869,0x23d,0x1863,0x1992,0x1a43,
+0x1af1,0x1af1,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,
+0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,
+0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,
+0x187b,0x187b,0x187b,0x187b,0x240,0x240,0x240,0x240,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,
+0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,
+0x1878,0x1878,0x1878,0x1878,0x240,0x240,0x240,0x240,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
+0x1896,0x1896,0x1896,0x1896,0x1896,0x1a13,0x1a13,0x1a13,0x1a13,0x1a13,0x1aa0,0x1aa0,0x1aa0,0x1aa0,0x1aa0,0x1aa0,
+0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,
+0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,
+0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,
+0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,
+0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x249,
+0x18d5,0x18d5,0x249,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,
+0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x249,
+0x249,0x249,0x18c9,0x249,0x18c9,0x18c9,0x249,0x18c9,0x18c9,0x18c9,0x18cc,0x18c9,0x18cf,0x18cf,0x18d8,0x18c9,
+0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,
+0x18d2,0x18d2,0x249,0x249,0x249,0x249,0x249,0x249,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
+0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
+0x1938,0x1938,0x1938,0x1938,0x24c,0x24c,0x24c,0x24c,0x1905,0x1908,0x1917,0x1917,0x1908,0x190b,0x1905,0x1902,
+0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x18f0,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18ed,
+0x18ed,0x18db,0x18db,0x18db,0x18f0,0x18f0,0x18f0,0x18f0,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,
+0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x258,0x258,0x258,0x258,
+0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,
+0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x258,0x258,0x1aa9,0x1aa9,0x1aa9,0x1aa9,0x1b4b,0x28b,0x28b,0x28b,
+0x1aa9,0x1aa9,0x1aa9,0x28b,0x28b,0x28b,0x28b,0x28b,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,
+0x19aa,0x19aa,0x19aa,0x19aa,0x19a7,0x19a7,0x19a7,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,
+0x19a7,0x19a1,0x199e,0x19a4,0x25b,0x25b,0x25b,0x25b,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,
0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,
-0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x26a,0x19a1,0x19a1,0x26a,0x19aa,
-0x19aa,0x19a1,0x19aa,0x19a4,0x19ad,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x19b6,0x19b6,0x19b9,0x19b9,
-0x19b0,0x19b0,0x19b0,0x19b0,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x19b3,0x19b3,0x19b3,0x19b3,
-0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x19bc,0x19bc,0x19bc,0x19bc,
-0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bf,0x19bc,0x19bc,0x19bc,0x19bf,0x19bc,0x19bc,0x19bc,
-0x19bc,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x19c8,0x19c8,0x19c8,0x19c8,
-0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c2,
-0x19c2,0x19c5,0x19c5,0x19cb,0x19cb,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x19ce,0x19ce,0x19ce,0x19ce,
-0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,
-0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x19d1,0x19d1,0x19d1,0x19d1,
-0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,
-0x19d1,0x19d1,0x19d1,0x19d4,0x19dd,0x19d1,0x19d1,0x279,0x279,0x279,0x279,0x279,0x19e0,0x19e0,0x19e0,0x19e0,
-0x19e0,0x19e0,0x19e0,0x19e3,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x19ec,0x19ec,0x19ec,0x19ec,
-0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19e6,0x19e6,
-0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e9,0x19e9,0x19e9,0x19e9,0x19ef,0x19ef,0x19ef,
-0x19ef,0x19ef,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,
-0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x1a46,0x285,
-0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,
-0x288,0x288,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,
-0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a52,0x1a52,0x1a52,0x1a49,0x1a49,0x1a49,0x1a49,
-0x288,0x288,0x1a49,0x1a49,0x1a52,0x1a52,0x1a52,0x1a52,0x1a4c,0x1a55,0x1a4f,0x1a55,0x1a52,0x288,0x288,0x288,
+0x19ad,0x19ad,0x19ad,0x25e,0x25e,0x19ad,0x19ad,0x19ad,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x261,0x19bc,
+0x19bc,0x261,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,
+0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x261,
+0x19b0,0x19b0,0x261,0x19b9,0x19b9,0x19b0,0x19b9,0x19b3,0x19bc,0x261,0x261,0x261,0x261,0x261,0x261,0x261,
+0x19c5,0x19c5,0x19c8,0x19c8,0x19bf,0x19bf,0x19bf,0x19bf,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,
+0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x264,0x264,0x264,0x264,0x264,0x264,
+0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19ce,0x19cb,0x19cb,0x19cb,
+0x19ce,0x19cb,0x19cb,0x19cb,0x19cb,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,
+0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,
+0x19d7,0x19d7,0x19d7,0x19d1,0x19d1,0x19d4,0x19d4,0x19da,0x19da,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,
+0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,
+0x19dd,0x19dd,0x19dd,0x19dd,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,
+0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,
+0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e3,0x19ec,0x19e0,0x19e0,0x270,0x270,0x270,0x270,0x270,
+0x19ef,0x19ef,0x19ef,0x19ef,0x19ef,0x19ef,0x19ef,0x19f2,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,
+0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,
+0x19fb,0x19fb,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f8,0x19f8,0x19f8,
+0x19f8,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x276,0x276,0x276,0x276,0x276,0x276,0x1a55,0x1a55,0x1a55,0x1a55,
+0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,
+0x1a55,0x1a55,0x1a55,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x1a64,0x1a64,0x1a64,0x1a64,
+0x1a64,0x1a64,0x1a64,0x1a64,0x27f,0x27f,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,
+0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a61,0x1a61,0x1a61,
+0x1a58,0x1a58,0x1a58,0x1a58,0x27f,0x27f,0x1a58,0x1a58,0x1a61,0x1a61,0x1a61,0x1a61,0x1a5b,0x1a64,0x1a5e,0x1a64,
+0x1a61,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,
+0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x1a70,0x1a70,0x1a70,0x1a70,
+0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x282,0x282,0x282,0x1a67,0x1a67,0x1a67,0x1a67,
+0x1a67,0x1a67,0x1a67,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a73,0x1a73,0x282,0x282,0x285,0x1a76,0x1a76,0x1a76,
+0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,
+0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x285,0x285,
0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,
-0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,
-0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x28b,0x28b,0x28b,0x1a58,0x1a58,0x1a58,0x1a58,0x1a58,0x1a58,0x1a58,0x1a61,
-0x1a61,0x1a61,0x1a61,0x1a61,0x1a64,0x1a64,0x28b,0x28b,0x28e,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,
-0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,
-0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x28e,0x28e,0x291,0x291,0x291,0x291,
-0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x1a94,0x1a94,0x1a94,0x291,
-0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x1a97,0x1a97,0x1a97,0x1a97,
-0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
-0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x1a9a,0x1a9a,0x1a9a,0x294,0x294,0x294,0x294,0x294,
-0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x294,0x294,
+0x1aa3,0x1aa3,0x1aa3,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,
+0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x1938,0x1938,0x1938,0x1938,
+0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1aa9,0x1aa9,0x1aa9,0x1b4b,
+0x1b4b,0x1b4b,0x1b4b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x1aa9,0x1aa9,0x1aa9,0x1aa9,
+0x1aa9,0x1aa9,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x28b,0x28b,0x28b,
+0x28b,0x28b,0x28b,0x28b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x28b,0x28b,0x28b,0x28b,0x28b,
+0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x28b,
+0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,
+0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,
+0x1a7f,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,
+0x1a79,0x1a79,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x1a7c,
+0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a82,0x1a82,0x1a82,0x1a82,
+0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x291,0x291,0x291,0x291,0x291,0x1a85,
+0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af4,0x1af4,0x1af4,0x1af4,0x1af4,0x1af4,0x1af4,0x294,0x294,0x294,0x294,
0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,
-0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,
-0x1a70,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,
-0x1a6a,0x1a6a,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x1a6d,
-0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a73,0x1a73,0x1a73,0x1a73,
-0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x29a,0x29a,0x29a,0x29a,0x29a,0x1a76,
-0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x1926,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
-0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x972,0x972,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,
+0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x297,0x297,0x1b12,0x297,0x297,0x1b12,0x1b12,0x1b12,0x1b12,
+0x1b12,0x1b12,0x1b12,0x1b12,0x297,0x1b12,0x1b12,0x297,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,
+0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1afa,0x1b09,0x1b09,0x1b09,0x1b09,0x1b09,0x297,0x1b09,
+0x1b0c,0x297,0x297,0x1afa,0x1afa,0x1b0f,0x1b00,0x1b15,0x1b09,0x1b15,0x1b09,0x1afd,0x1b18,0x1b03,0x1b18,0x297,
+0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,
+0x1b06,0x1b06,0x297,0x297,0x297,0x297,0x297,0x297,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
+0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x29a,0x29a,
+0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
+0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
+0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
+0x1b1e,0x1b1e,0x1b1e,0x2a0,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
+0x1b1e,0x1b1e,0x1b1e,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
+0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,
+0x1b21,0x1b21,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,
+0x1b54,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
-0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0x12d8,0x12d8,0x12d8,0x2a6,0x2a6,
-0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,
-0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,
-0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,
-0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0xba3,0xba3,0xba3,0xba3,
-0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
-0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0x2ac,0x2ac,0x12ed,0x12ed,0x12ed,0x12ed,
-0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,
-0x12ed,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x140a,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x2b2,0x2b2,0x17d0,0x17d0,0x2b5,0x2b5,
-0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x1926,0x1926,0x1926,0x1926,
-0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x3c0,0x3b4,0x3b4,0x3b4,
-0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3c0,0x3c0,0x3c0,0x3c0,0x3ba,0x114c,0x1332,0x3c3,0x93c,0x93f,0x3b1,
-0x3b1,0x1149,0x132f,0x132f,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x1149,0x3b4,0x3b4,0x3c0,
-0xcd8,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,
-0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3b4,0x3b4,
-0x8c7,0x8ca,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x3bd,0xfae,0xfab,0x1335,
-0x1335,0x1335,0x1335,0x1335,0x14fa,0x114f,0x114f,0xf00,0xf00,0xdd1,0xf00,0xf00,0x3c3,0x3c3,0x3c3,0x3c3,
-0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c6,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c6,0x3c3,0x3c3,
-0x3c6,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x132f,0x1332,0x3b7,0x3c3,0x3c0,0x3c0,0x462,0x462,0x462,0x462,
-0x462,0x462,0x462,0x462,0x462,0x133b,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,
-0x462,0x462,0x462,0x462,0x462,0x462,0x133b,0x18a2,0x18a2,0xfcc,0x453,0x45c,0x49e,0x49e,0x49e,0x49e,
-0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,
-0x49e,0x49e,0x49e,0xbbe,0xbbe,0xddd,0xddd,0x8cd,0xde0,0x141c,0x141c,0x141c,0x4a1,0x4a1,0x4a1,0x4a1,
-0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,
-0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x4a7,0x4a7,0x4a7,0x1164,
-0x1164,0x1164,0x1164,0x1164,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
-0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,
-0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x4aa,0x4a7,0x4a7,0x4a7,
-0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,
-0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,
-0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,
-0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,
-0x4b3,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4b0,0x9b4,0xff9,0xff9,0xffc,0xff9,0x4b3,0x4ad,0x4b3,0x4ad,
-0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,
-0x4b3,0x4ad,0x4b3,0x4ad,0x4b3,0x4ad,0xffc,0xff9,0xffc,0xff9,0xffc,0xff9,0x4bf,0x4bf,0x4bf,0x4bf,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4bf,0x4bf,0x4bf,0x4bf,
-0x4bf,0x4bf,0x4bf,0x4bf,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x4c2,0x6a2,0x6a2,0x6a5,0x4dd,
-0x6b1,0x6ae,0x6ae,0x6ab,0x507,0x507,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0xb4f,0x6b4,0x4e9,0x6cc,0x6cf,
-0x4fe,0x6b4,0x4ec,0x4ec,0x4dd,0x4f8,0x4f8,0x6a2,0x504,0x501,0x6a8,0x4d7,0x4ce,0x4ce,0x4d1,0x4d1,
-0x4d1,0x4d1,0x4d1,0x4d4,0x4d1,0x4d1,0x4d1,0x4c8,0x510,0x50d,0x50a,0x50a,0x6c0,0x4f2,0x4ef,0x6bd,
-0x6ba,0x6b7,0x6c9,0x4e0,0x6c6,0x6c6,0x4f5,0x4f8,0x6c3,0x6c3,0x4f5,0x4f8,0x4da,0x4dd,0x4dd,0x4dd,
-0x4fb,0x4e6,0x4e3,0xbd3,0xae9,0xaec,0xae6,0xae6,0xae6,0xae6,0xbca,0xbca,0xbca,0xbca,0xbd0,0xd05,
-0xd02,0xdec,0xdef,0xbcd,0xdef,0xdef,0xdef,0xdef,0xdec,0xdef,0xdef,0xbc7,0x534,0x534,0x534,0x534,
-0x534,0x534,0x534,0x531,0x537,0x750,0x534,0x9b7,0x9d8,0xaef,0xaef,0xaef,0xbd9,0xbd9,0xdf5,0xdf5,
-0xdf5,0xdf5,0x116d,0x1170,0x1170,0x1350,0x14e8,0x1512,0x1515,0x1515,0x1728,0x18a5,0x543,0x543,0x55b,0x6de,
-0x540,0x6db,0x543,0x558,0x540,0x6de,0x552,0x55b,0x55b,0x55b,0x552,0x552,0x55b,0x55b,0x55b,0x6e7,
-0x540,0x55b,0x6e1,0x540,0x54f,0x55b,0x55b,0x55b,0x55b,0x55b,0x540,0x540,0x546,0x6db,0x6e4,0x540,
-0x55b,0x540,0x6ea,0x540,0x55b,0x549,0x561,0x6ed,0x55b,0x55b,0x54c,0x552,0x55b,0x55b,0x55e,0x55b,
-0x552,0x555,0x555,0x555,0x555,0xafb,0xaf8,0xd08,0xdfe,0xbee,0xbf1,0xbf1,0xbeb,0xbe8,0xbe8,0xbe8,
-0xbe8,0xbf1,0xbee,0xbee,0xbee,0xbee,0xbe5,0xbe8,0xdfb,0xf0c,0xf0f,0x1002,0x1173,0x1173,0x1173,0x6f3,
-0x6f0,0x564,0x567,0x567,0x567,0x567,0x567,0x6f0,0x6f3,0x6f3,0x6f0,0x567,0x6f9,0x6f9,0x6f9,0x6f9,
-0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x570,0x570,0x570,0x570,0x6f6,0x6f6,0x6f6,0x6f6,
-0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x576,0x576,0x576,0x576,
-0x576,0x576,0x576,0x576,0x573,0x57c,0x57c,0x576,0x576,0x576,0x579,0x573,0x576,0x576,0x573,0x573,
-0x573,0x573,0x576,0x576,0x6fc,0x6fc,0x573,0x573,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,
-0x576,0x576,0x576,0x576,0x576,0x579,0x579,0x579,0x576,0x576,0x6ff,0x576,0x6ff,0x576,0x576,0x576,
-0x576,0x576,0x576,0x576,0x573,0x576,0x573,0x573,0x573,0x573,0x573,0x573,0x576,0x576,0x573,0x6fc,
-0x573,0x573,0x573,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xbf4,0xbf4,0xbf4,0xbf4,
-0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0x705,0x57f,0x705,0x705,0x582,0x57f,0x57f,0x705,
-0x705,0x582,0x57f,0x705,0x582,0x57f,0x57f,0x705,0x57f,0x705,0x58e,0x58b,0x57f,0x705,0x57f,0x57f,
-0x57f,0x57f,0x705,0x57f,0x57f,0x705,0x705,0x705,0x705,0x57f,0x57f,0x705,0x582,0x705,0x582,0x705,
-0x705,0x705,0x705,0x705,0x70b,0x585,0x705,0x585,0x585,0x57f,0x57f,0x57f,0x705,0x705,0x705,0x705,
-0x57f,0x57f,0x57f,0x57f,0x705,0x705,0x57f,0x57f,0x57f,0x582,0x57f,0x57f,0x582,0x57f,0x57f,0x582,
-0x705,0x582,0x57f,0x57f,0x705,0x57f,0x57f,0x57f,0x57f,0x57f,0x705,0x57f,0x57f,0x57f,0x57f,0x57f,
-0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x708,0x705,0x582,0x57f,0x705,0x705,0x705,0x705,
-0x57f,0x57f,0x705,0x705,0x57f,0x582,0x708,0x708,0x582,0x582,0x57f,0x57f,0x582,0x582,0x57f,0x57f,
-0x582,0x582,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x582,0x582,0x705,0x705,0x582,0x582,0x705,0x705,
-0x582,0x582,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x705,0x57f,0x57f,
-0x57f,0x705,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x705,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,
-0x582,0x582,0x582,0x582,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,
-0x57f,0x57f,0x57f,0x705,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,
-0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,
-0x57f,0x57f,0x57f,0x57f,0x582,0x582,0x582,0x582,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x582,0x582,
-0x582,0x582,0x57f,0x588,0x57f,0x57f,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,
-0xbf7,0xbf7,0xbf7,0xbf7,0x591,0xb04,0x591,0x591,0x591,0x591,0x591,0x591,0x59d,0x59a,0x59d,0x59a,
-0x591,0x591,0x591,0x591,0x591,0x591,0x70e,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x813,0x813,
-0x591,0x591,0x591,0x591,0x597,0x597,0x591,0x591,0x591,0x591,0x591,0x591,0x594,0x819,0x816,0x591,
-0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,
-0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,
-0x591,0x591,0x591,0xb04,0xbfd,0xb04,0xb04,0xb04,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,
-0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,
-0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x5a0,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,
-0x717,0x717,0x5a6,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,
-0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xd80,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
-0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x5a9,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
-0x720,0x720,0x720,0x720,0x5ac,0x5ac,0x5ac,0x5ac,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
-0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,
-0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x5af,0x5af,0x723,0x723,0x723,0x723,0xc00,0xc00,
-0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0x729,0x729,0x5b2,0x726,0x726,0x726,0x726,0x726,
-0x726,0x726,0x5b5,0x5b5,0x5b2,0x5b2,0x5b8,0x5b8,0x5b8,0x5b8,0x729,0x729,0x5b8,0x5b8,0x72c,0x729,
-0x5b2,0x5b2,0x5b2,0x5b2,0x729,0x729,0x5b8,0x5b8,0x72c,0x729,0x5b2,0x5b2,0x5b2,0x5b2,0x729,0x729,
-0x726,0x5b2,0x5b8,0x729,0x5b2,0x5b2,0x726,0x729,0x729,0x729,0x5b8,0x5b8,0x5b2,0x5b2,0x5b2,0x5b2,
-0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x729,0x726,0x729,0x726,0x5b2,0x5b8,
-0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b2,0x5b2,0x726,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
-0xc03,0xc03,0xc03,0xc06,0xc06,0xc81,0xc81,0xc03,0x5c7,0x5c7,0x5c7,0x5c7,0x5c4,0x73e,0x73b,0x5be,
-0x5be,0x72f,0x5be,0x5be,0x5be,0x5be,0x735,0x72f,0x5be,0x5c4,0x5be,0x5bb,0xd89,0xd89,0xc0c,0xc0c,
-0xe0a,0xb10,0x5c1,0x5c1,0x732,0x5ca,0x732,0x5c1,0x5c4,0x5be,0x5c4,0x5c4,0x5be,0x5be,0x5c4,0x5be,
-0x5be,0x5be,0x5c4,0x5be,0x5be,0x5be,0x5c4,0x5c4,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,
-0x5c4,0x5c7,0x5c7,0x5c1,0x5be,0x5be,0x5be,0x5be,0x741,0x5be,0x741,0x5be,0x5be,0x5be,0x5be,0x5be,
-0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x5be,0x5be,0x5be,0x5be,
-0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5c4,0x741,0x73e,0x5cd,0x741,0x72f,0x735,0x5c4,0x72f,
-0x738,0x72f,0x72f,0x5be,0x72f,0x73e,0x5cd,0x73e,0xb10,0xb10,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,
-0xc0f,0xc0f,0xc0f,0xc12,0xc0f,0xc0f,0xe07,0xebe,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,
-0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x13da,0x13da,0x13da,
-0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x151e,0x5df,0x5e8,0x5df,0x5df,0x13da,0x5d3,0x5d3,
-0x5e8,0x5e8,0x13dd,0x13dd,0x5eb,0x5eb,0x5dc,0x5e2,0x5dc,0x5dc,0x5e2,0x5d3,0x5e2,0x5d3,0x5e2,0x5d3,
-0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5e2,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x13da,0x5d3,0x5d3,0x5d3,
-0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5e2,0x5e2,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,
-0x5d3,0x747,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5e2,0x5d3,0x5d3,0x5e2,0x5d3,0x5d3,0x5d3,0x5d3,
-0x13da,0x5d3,0x13da,0x5d3,0x5d3,0x5d3,0x5d3,0x13da,0x13da,0x13da,0x5d3,0x12d2,0x5d3,0x5d3,0x5d3,0x5d9,
-0x5d9,0x5d9,0x5d9,0x135c,0x135c,0x5d3,0x5d6,0x5e5,0x5e8,0x5dc,0x5dc,0x5dc,0xc18,0xc15,0xc18,0xc15,
-0xc18,0xc15,0xc18,0xc15,0xc18,0xc15,0xc18,0xc15,0xc18,0xc15,0x744,0x744,0x744,0x744,0x744,0x744,
-0x744,0x744,0x744,0x744,0x5d3,0x5e2,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,
-0x5d3,0x5d3,0x5d3,0x5d3,0x13da,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,
-0x5d3,0x5d3,0x5d3,0x13da,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,
-0x60c,0x612,0x603,0x606,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
-0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
-0x612,0x612,0x609,0x609,0x609,0x609,0x609,0x609,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,
-0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,
-0x60f,0x615,0x612,0x60c,0x612,0x60c,0x612,0x60c,0x612,0x60c,0x612,0x60c,0x612,0x60c,0x612,0x60c,
-0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,
-0x612,0x60c,0x60f,0x615,0x612,0x60c,0x612,0x60c,0x60f,0x615,0x612,0x60c,0x60f,0x615,0x612,0x60c,
-0x612,0x60c,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,
-0x612,0x60c,0x612,0x60c,0x612,0x60c,0x60f,0x615,0x60f,0x615,0x612,0x60c,0x612,0x60c,0x612,0x60c,
-0x612,0x60c,0x612,0x60c,0x612,0x60c,0x612,0x60c,0x60f,0x612,0x60c,0x60f,0x612,0x60c,0x60f,0x615,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,
-0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
-0x612,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60f,0x60f,0x60c,0x60f,0x60c,0x60f,0x60c,0x60c,0x60f,0x60c,0x60c,0x60f,0x60c,0x60f,0x60c,0x60c,
-0x60f,0x60c,0x60f,0x60f,0x60c,0x60c,0x60c,0x60f,0x60c,0x60c,0x60c,0x60c,0x60c,0x60f,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60c,0x60c,0x60c,0x60c,0x60f,0x60f,0x60c,0x60c,0x60f,0x60c,0x60f,0x60c,0x60c,0x60c,0x60c,0x60c,
-0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,
-0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,
-0x60f,0x60f,0x60f,0x615,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
-0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
-0x612,0x612,0x612,0x612,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,
-0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x615,0x612,0x612,0x612,0x612,0x612,0x612,0x612,
-0x612,0x612,0x612,0x612,0x618,0x618,0x618,0x618,0x100e,0x100e,0x100e,0x1521,0x1521,0x1521,0x1521,0x1521,
-0x1521,0x1521,0x172e,0x172e,0x879,0x87f,0x87f,0x88b,0x88b,0x87c,0x873,0x87c,0x873,0x87c,0x873,0x87c,
-0x873,0x87c,0x873,0x87c,0x627,0x627,0x621,0x627,0x621,0x627,0x621,0x627,0x621,0x627,0x621,0x624,
-0x62a,0x627,0x621,0x627,0x621,0x624,0x62a,0x627,0x621,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,
-0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x627,0x621,0x627,0x621,0x627,0x621,0x627,0x621,0x624,
-0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,
-0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,0x62a,0x627,0x621,0x624,
-0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,
-0x714,0x714,0x714,0x714,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,
-0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,
-0x711,0x711,0x711,0x711,0x711,0x711,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,
-0x71a,0x71a,0x71d,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,
-0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x717,
-0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
-0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
-0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,
-0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,0x74a,
-0xc6f,0x8df,0x8d9,0x8d6,0x8dc,0x8d3,0x75f,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,
-0x8e5,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
-0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,
-0x75f,0x75f,0x8e2,0x8e2,0x765,0x8f4,0x8f7,0x8fd,0x81f,0x82b,0x912,0x828,0x8eb,0x8e8,0x8eb,0x8e8,
-0x8f1,0x8ee,0x8f1,0x8ee,0x8eb,0x8e8,0x825,0x8fd,0x8eb,0x8e8,0x8eb,0x8e8,0x8eb,0x8e8,0x8eb,0x8e8,
-0x900,0x909,0x906,0x906,0x76b,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,
-0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x76e,
-0x789,0x768,0x78f,0x792,0x78c,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x79e,0x79e,0x79e,0x79e,0x79e,
-0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x76e,
-0x789,0x768,0x789,0xc72,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,
-0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,
-0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x810,0x825,0x828,0x828,0x828,
-0x828,0x828,0x828,0x828,0x828,0x828,0x948,0x948,0x948,0x948,0x82e,0x82e,0x903,0x90f,0x90f,0x90f,
-0x90f,0x90c,0x822,0x8fa,0xb34,0xb34,0xb34,0xc84,0xca2,0xc9f,0xb52,0x8d0,0x834,0x831,0x834,0x837,
-0x831,0x834,0x831,0x834,0x831,0x834,0x831,0x831,0x831,0x831,0x831,0x831,0x834,0x834,0x831,0x834,
-0x834,0x831,0x834,0x834,0x831,0x834,0x834,0x831,0x834,0x834,0x831,0x831,0xca5,0x846,0x840,0x846,
-0x840,0x846,0x840,0x846,0x840,0x846,0x840,0x840,0x843,0x840,0x843,0x840,0x843,0x840,0x843,0x840,
-0x843,0x840,0x843,0x840,0x843,0x840,0x843,0x840,0x843,0x840,0x843,0x840,0x843,0x840,0x843,0x846,
-0x840,0x843,0x840,0x843,0x840,0x843,0x840,0x840,0x840,0x840,0x840,0x840,0x843,0x843,0x840,0x843,
-0x843,0x840,0x843,0x843,0x840,0x843,0x843,0x840,0x843,0x843,0x840,0x840,0x840,0x840,0x840,0x846,
-0x840,0x846,0x840,0x846,0x840,0x840,0x840,0x840,0x840,0x840,0x846,0x840,0x840,0x840,0x840,0x840,
-0x843,0x846,0x846,0x843,0x843,0x843,0x843,0x918,0x91b,0x849,0x84c,0xc8d,0x852,0x852,0x852,0x852,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x855,0x852,0x852,0x852,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,
-0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
+0x2a3,0x2a3,0x2a3,0x2a3,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x2a6,0x1b24,
+0x1b24,0x1b27,0x2a6,0x2a6,0x1b2a,0x1b2a,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,
+0x2a6,0x2a6,0x2a6,0x2a6,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
+0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
+0x2a9,0x2a9,0x2a9,0x2a9,0x1932,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,
+0x2c1,0x2c1,0x2c1,0x2c1,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
+0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
+0x2a9,0x2a9,0x97b,0x97b,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x2c4,
+0x2c4,0x2c4,0x2c4,0x2c4,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
+0x2a9,0x2a9,0x2a9,0x2a9,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x1a04,
+0x1a04,0x1a04,0x1a04,0x1a04,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,
+0x1b33,0x2ac,0x2ac,0x2ac,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0x12e4,
+0x12e4,0x12e4,0x2af,0x2af,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
+0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0x2af,0x2af,
+0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,
+0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,
+0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x2b2,0x2b2,
+0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
+0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0x2b5,0x2b5,
+0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
+0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
+0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,
+0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x2bb,0x2bb,
+0x17dc,0x17dc,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,
+0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
+0x3cc,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3cc,0x3cc,0x3cc,0x3cc,0x3c6,0x1158,0x133e,
+0x3cf,0x945,0x948,0x3bd,0x3bd,0x1155,0x133b,0x133b,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,
+0x1155,0x3c0,0x3c0,0x3cc,0xce1,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
+0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
+0x3cf,0x3cf,0x3c0,0x3c0,0x8d0,0x8d3,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,
+0x3c9,0xfba,0xfb7,0x1341,0x1341,0x1341,0x1341,0x1341,0x1506,0x115b,0x115b,0xf0c,0xf0c,0xdda,0xf0c,0xf0c,
+0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3d2,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
+0x3cf,0x3d2,0x3cf,0x3cf,0x3d2,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x133b,0x133e,0x3c3,0x3cf,0x3cc,0x3cc,
+0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1347,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,
+0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1347,0x18ae,0x18ae,0xfd8,0x45f,0x468,
+0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
+0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0xbc7,0xbc7,0xde6,0xde6,0x8d6,0xde9,0x1428,0x1428,0x1428,
+0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
+0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
+0x4b3,0x4b3,0x4b3,0x1170,0x1170,0x1170,0x1170,0x1170,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,
+0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,
+0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x116d,0x116d,0x116d,0x116d,0x116d,0x116d,
+0x4b6,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,
+0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,
+0x4b3,0x4b3,0x4b3,0x4b3,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,
+0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,
+0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4bc,0x9bd,0x1005,0x1005,0x1008,0x1005,
+0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,
+0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x1008,0x1005,0x1008,0x1005,0x1008,0x1005,
+0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,
+0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,
+0x6ae,0x6ae,0x6b1,0x4e9,0x6bd,0x6ba,0x6ba,0x6b7,0x513,0x513,0x4d1,0x4d1,0x4d1,0x4d1,0x4d1,0xb58,
+0x6c0,0x4f5,0x6d8,0x6db,0x50a,0x6c0,0x4f8,0x4f8,0x4e9,0x504,0x504,0x6ae,0x510,0x50d,0x6b4,0x4e3,
+0x4da,0x4da,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4e0,0x4dd,0x4dd,0x4dd,0x4d4,0x51c,0x519,0x516,0x516,
+0x6cc,0x4fe,0x4fb,0x6c9,0x6c6,0x6c3,0x6d5,0x4ec,0x6d2,0x6d2,0x501,0x504,0x6cf,0x6cf,0x501,0x504,
+0x4e6,0x4e9,0x4e9,0x4e9,0x507,0x4f2,0x4ef,0xbdc,0xaf2,0xaf5,0xaef,0xaef,0xaef,0xaef,0xbd3,0xbd3,
+0xbd3,0xbd3,0xbd9,0xd0e,0xd0b,0xdf5,0xdf8,0xbd6,0xdf8,0xdf8,0xdf8,0xdf8,0xdf5,0xdf8,0xdf8,0xbd0,
+0x540,0x540,0x540,0x540,0x540,0x540,0x540,0x53d,0x543,0x75c,0x540,0x9c0,0x9e1,0xaf8,0xaf8,0xaf8,
+0xbe2,0xbe2,0xdfe,0xdfe,0xdfe,0xdfe,0x1179,0x117c,0x117c,0x135c,0x14f4,0x151e,0x1521,0x1521,0x1734,0x18b1,
+0x54f,0x54f,0x567,0x6ea,0x54c,0x6e7,0x54f,0x564,0x54c,0x6ea,0x55e,0x567,0x567,0x567,0x55e,0x55e,
+0x567,0x567,0x567,0x6f3,0x54c,0x567,0x6ed,0x54c,0x55b,0x567,0x567,0x567,0x567,0x567,0x54c,0x54c,
+0x552,0x6e7,0x6f0,0x54c,0x567,0x54c,0x6f6,0x54c,0x567,0x555,0x56d,0x6f9,0x567,0x567,0x558,0x55e,
+0x567,0x567,0x56a,0x567,0x55e,0x561,0x561,0x561,0x561,0xb04,0xb01,0xd11,0xe07,0xbf7,0xbfa,0xbfa,
+0xbf4,0xbf1,0xbf1,0xbf1,0xbf1,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbee,0xbf1,0xe04,0xf18,0xf1b,0x100e,
+0x117f,0x117f,0x117f,0x6ff,0x6fc,0x570,0x573,0x573,0x573,0x573,0x573,0x6fc,0x6ff,0x6ff,0x6fc,0x573,
+0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x57c,0x57c,0x57c,0x57c,
+0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x576,0x576,0x576,0x576,0x576,0x576,
+0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x57f,0x588,0x588,0x582,0x582,0x582,0x585,0x57f,
+0x582,0x582,0x57f,0x57f,0x57f,0x57f,0x582,0x582,0x708,0x708,0x57f,0x57f,0x582,0x582,0x582,0x582,
+0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x585,0x585,0x585,0x582,0x582,0x70b,0x582,
+0x70b,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x57f,0x582,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,
+0x582,0x582,0x57f,0x708,0x57f,0x57f,0x57f,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,
+0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0x711,0x58b,0x711,0x711,
+0x58e,0x58b,0x58b,0x711,0x711,0x58e,0x58b,0x711,0x58e,0x58b,0x58b,0x711,0x58b,0x711,0x59a,0x597,
+0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,0x711,0x711,0x711,0x711,0x58b,0x58b,0x711,
+0x58e,0x711,0x58e,0x711,0x711,0x711,0x711,0x711,0x717,0x591,0x711,0x591,0x591,0x58b,0x58b,0x58b,
+0x711,0x711,0x711,0x711,0x58b,0x58b,0x58b,0x58b,0x711,0x711,0x58b,0x58b,0x58b,0x58e,0x58b,0x58b,
+0x58e,0x58b,0x58b,0x58e,0x711,0x58e,0x58b,0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,
+0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x714,0x711,0x58e,0x58b,
+0x711,0x711,0x711,0x711,0x58b,0x58b,0x711,0x711,0x58b,0x58e,0x714,0x714,0x58e,0x58e,0x58b,0x58b,
+0x58e,0x58e,0x58b,0x58b,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x711,0x711,
+0x58e,0x58e,0x711,0x711,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
+0x58b,0x711,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,
+0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
+0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
+0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
+0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,
+0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58b,0x594,0x58b,0x58b,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,
+0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0x59d,0xb0d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
+0x5a9,0x5a6,0x5a9,0x5a6,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x71a,0x59d,0x59d,0x59d,0x59d,0x59d,
+0x59d,0x59d,0x81f,0x81f,0x59d,0x59d,0x59d,0x59d,0x5a3,0x5a3,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
+0x5a0,0x825,0x822,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
+0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
+0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0xb0d,0xc06,0xb0d,0xb0d,0xb0d,0x5ac,0x5ac,0x5ac,0x5ac,
+0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,
+0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x723,0x723,0x723,0x723,
+0x723,0x723,0x723,0x723,0x723,0x723,0x5b2,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,
+0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xd89,0x72c,0x72c,0x72c,0x72c,
+0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,
+0x5b5,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x72c,0x72c,0x72c,0x72c,
+0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x5b8,0x5b8,0x5b8,0x5b8,0x72c,0x72c,0x72c,0x72c,
+0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72f,0x72f,0x72f,0x72f,
+0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x5bb,0x5bb,0x72f,0x72f,
+0x72f,0x72f,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0x735,0x735,0x5be,0x732,
+0x732,0x732,0x732,0x732,0x732,0x732,0x5c1,0x5c1,0x5be,0x5be,0x5c4,0x5c4,0x5c4,0x5c4,0x735,0x735,
+0x5c4,0x5c4,0x738,0x735,0x5be,0x5be,0x5be,0x5be,0x735,0x735,0x5c4,0x5c4,0x738,0x735,0x5be,0x5be,
+0x5be,0x5be,0x735,0x735,0x732,0x5be,0x5c4,0x735,0x5be,0x5be,0x732,0x735,0x735,0x735,0x5c4,0x5c4,
+0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x735,0x732,
+0x735,0x732,0x5be,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5be,0x5be,0x732,0xb16,0xb16,0xb16,0xb16,
+0xb16,0xb16,0xb16,0xb16,0xc0c,0xc0c,0xc0c,0xc0f,0xc0f,0xc8a,0xc8a,0xc0c,0x5d3,0x5d3,0x5d3,0x5d3,
+0x5d0,0x74a,0x747,0x5ca,0x5ca,0x73b,0x5ca,0x5ca,0x5ca,0x5ca,0x741,0x73b,0x5ca,0x5d0,0x5ca,0x5c7,
+0xd92,0xd92,0xc15,0xc15,0xe13,0xb19,0x5cd,0x5cd,0x73e,0x5d6,0x73e,0x5cd,0x5d0,0x5ca,0x5d0,0x5d0,
+0x5ca,0x5ca,0x5d0,0x5ca,0x5ca,0x5ca,0x5d0,0x5ca,0x5ca,0x5ca,0x5d0,0x5d0,0x5ca,0x5ca,0x5ca,0x5ca,
+0x5ca,0x5ca,0x5ca,0x5ca,0x5d0,0x5d3,0x5d3,0x5cd,0x5ca,0x5ca,0x5ca,0x5ca,0x74d,0x5ca,0x74d,0x5ca,
+0x5ca,0x5ca,0x5ca,0x5ca,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
+0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5d0,0x74d,0x74a,0x5d9,0x74d,
+0x73b,0x741,0x5d0,0x73b,0x744,0x73b,0x73b,0x5ca,0x73b,0x74a,0x5d9,0x74a,0xb19,0xb19,0xc18,0xc18,
+0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc1b,0xc18,0xc18,0xe10,0xec7,0x5dc,0x5dc,0x5dc,0x5dc,
+0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,
+0x5df,0x13e6,0x13e6,0x13e6,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x152a,0x5eb,0x5f4,0x5eb,
+0x5eb,0x13e6,0x5df,0x5df,0x5f4,0x5f4,0x13e9,0x13e9,0x5f7,0x5f7,0x5e8,0x5ee,0x5e8,0x5e8,0x5ee,0x5df,
+0x5ee,0x5df,0x5ee,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5ee,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
+0x13e6,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5ee,0x5ee,0x5df,0x5df,0x5df,
+0x5df,0x5df,0x5df,0x5df,0x5df,0x753,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5ee,0x5df,0x5df,0x5ee,
+0x5df,0x5df,0x5df,0x5df,0x13e6,0x5df,0x13e6,0x5df,0x5df,0x5df,0x5df,0x13e6,0x13e6,0x13e6,0x5df,0x12de,
+0x5df,0x5df,0x5df,0x5e5,0x5e5,0x5e5,0x5e5,0x1368,0x1368,0x5df,0x5e2,0x5f1,0x5f4,0x5e8,0x5e8,0x5e8,
+0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0x750,0x750,
+0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x5df,0x5ee,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
+0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x13e6,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
+0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x13e6,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
+0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x621,0x621,0x621,0x621,
+0x621,0x621,0x621,0x621,0x618,0x61e,0x60f,0x612,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
+0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
+0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x615,0x615,0x615,0x615,0x615,0x615,0x618,0x618,0x618,0x618,
+0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
+0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
+0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
+0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,
+0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
+0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,
+0x61b,0x621,0x61e,0x618,0x61e,0x618,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,
+0x136b,0x136b,0x136b,0x136b,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61b,0x621,0x61e,0x618,
+0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61b,0x61e,0x618,0x61b,
+0x61e,0x618,0x61b,0x621,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
+0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,
+0x61b,0x61b,0x61b,0x61b,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
+0x61e,0x61e,0x61e,0x61e,0x61e,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
+0x618,0x618,0x618,0x618,0x61b,0x61b,0x618,0x61b,0x618,0x61b,0x618,0x618,0x61b,0x618,0x618,0x61b,
+0x618,0x61b,0x618,0x618,0x61b,0x618,0x61b,0x61b,0x618,0x618,0x618,0x61b,0x618,0x618,0x618,0x618,
+0x618,0x61b,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
+0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x618,0x618,0x61b,0x618,0x61b,0x618,
+0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,
+0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,
+0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x621,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
+0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
+0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,
+0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x61e,0x61e,0x61e,
+0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x624,0x624,0x624,0x624,0x101a,0x101a,0x101a,0x152d,
+0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x173a,0x173a,0x885,0x88b,0x88b,0x897,0x897,0x888,0x87f,0x888,
+0x87f,0x888,0x87f,0x888,0x87f,0x888,0x87f,0x888,0x633,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x633,
+0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x630,
+0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x633,
+0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,
+0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,
+0x636,0x633,0x62d,0x630,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
+0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,
+0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,
+0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x726,0x726,0x726,0x726,0x726,0x726,
+0x726,0x726,0x726,0x726,0x726,0x726,0x729,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,
+0x726,0x726,0x726,0x726,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,
+0x723,0x723,0x723,0x723,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,
+0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,
+0x72c,0x72c,0x72c,0x72c,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
+0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
+0x756,0x756,0x756,0x756,0xc78,0x8e8,0x8e2,0x8df,0x8e5,0x8dc,0x76b,0x76e,0x76e,0x76e,0x76e,0x76e,
+0x76e,0x76e,0x76e,0x76e,0x8ee,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
+0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
+0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x8eb,0x8eb,0x771,0x8fd,0x900,0x906,0x82b,0x837,0x91b,0x834,
+0x8f4,0x8f1,0x8f4,0x8f1,0x8fa,0x8f7,0x8fa,0x8f7,0x8f4,0x8f1,0x831,0x906,0x8f4,0x8f1,0x8f4,0x8f1,
+0x8f4,0x8f1,0x8f4,0x8f1,0x909,0x912,0x90f,0x90f,0x777,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7ad,
+0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,
+0x7ad,0x7ad,0x7ad,0x77a,0x795,0x774,0x79b,0x79e,0x798,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7aa,
+0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,
+0x7aa,0x7aa,0x7aa,0x77a,0x795,0x774,0x795,0xc7b,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,
+0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,
+0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x81c,
+0x831,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x951,0x951,0x951,0x951,0x83a,0x83a,
+0x90c,0x918,0x918,0x918,0x918,0x915,0x82e,0x903,0xb3d,0xb3d,0xb3d,0xc8d,0xcab,0xca8,0xb5b,0x8d9,
+0x840,0x83d,0x840,0x843,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,
+0x840,0x840,0x83d,0x840,0x840,0x83d,0x840,0x840,0x83d,0x840,0x840,0x83d,0x840,0x840,0x83d,0x83d,
+0xcae,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x84c,0x84f,0x84c,0x84f,0x84c,
+0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,
+0x84f,0x84c,0x84f,0x852,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,
+0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84c,
+0x84c,0x84c,0x84c,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x852,0x84c,
+0x84c,0x84c,0x84c,0x84c,0x84f,0x852,0x852,0x84f,0x84f,0x84f,0x84f,0x921,0x924,0x855,0x858,0xc96,
0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0xd92,0xd92,0xec1,0x858,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,
-0x924,0x924,0x924,0x924,0xd8c,0xd8c,0xd8c,0xd8c,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,
-0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,
-0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x1aa3,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x864,0x864,0x864,0x864,0x864,0x864,0xd95,
-0xd95,0xd95,0xd95,0x930,0x930,0x930,0x930,0x930,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,
-0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,
-0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0xd95,0xd95,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x92d,0x92d,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,
+0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
+0x861,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
+0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x86a,0x86a,0x86a,0x86a,
0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,
-0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,
-0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0xec4,0x1131,0x1131,0x1131,0x1131,
+0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0xd9b,0xd9b,0xeca,0x864,0x92d,0x92d,0x92d,0x92d,
+0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0xd95,0xd95,0xd95,0xd95,0x86d,0x86d,0x86d,0x86d,
0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x870,0x870,0x86d,0x870,0x86d,0x870,0x870,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x870,0x86d,0x870,0x86d,0x870,0x870,0x86d,0x86d,0x870,0x870,0x870,0x86d,0x86d,
-0x86d,0x86d,0x14d9,0x14d9,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
-0xc96,0xc96,0xc96,0xc96,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,
-0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,
-0x924,0x924,0x924,0x924,0x1311,0x1311,0x1311,0x1311,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,
-0xd8c,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,
-0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,
-0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x92a,0x927,0x92a,0x927,0x927,0x927,0x927,0x927,0x927,
-0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0xc90,0xc90,0xc90,
-0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0xc90,0x92d,0x92d,0x92d,0x92d,
+0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x1ab2,0x936,0x936,0x936,0x936,
+0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x870,0x870,0x870,
+0x870,0x870,0x870,0xd9e,0xd9e,0xd9e,0xd9e,0x939,0x939,0x939,0x939,0x939,0x870,0x870,0x870,0x870,
+0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,
+0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0xd9e,0xd9e,
+0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,
+0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,
+0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
+0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
+0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,
+0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,
+0x113d,0x113d,0x113d,0x113d,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,
+0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,
+0x879,0x879,0x879,0x879,0x879,0x879,0x87c,0x87c,0x879,0x87c,0x879,0x87c,0x87c,0x879,0x879,0x879,
+0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x87c,0x879,0x87c,0x879,0x87c,0x87c,0x879,0x879,0x87c,
+0x87c,0x87c,0x879,0x879,0x879,0x879,0x14e5,0x14e5,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,
+0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,
0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0xd95,0x9ae,0x990,0x990,0x990,
-0x990,0x98a,0x990,0x990,0x9a2,0x990,0x990,0x98d,0x999,0x99f,0x99f,0x99f,0x99f,0x99f,0x9a2,0x98a,
-0x996,0x98a,0x98a,0x98a,0x981,0x981,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x9a5,0x9a5,0x9a5,0x9a5,
-0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,
-0x98d,0x981,0x98a,0x981,0x98a,0x981,0x99c,0x993,0x99c,0x993,0x9ab,0x9ab,0x9ba,0x9ba,0x9ba,0x9ba,
-0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,
-0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9ba,0x9bd,0x9bd,0x9bd,0x9bd,
-0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,
-0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9c0,0x9c0,0x9c0,0x9c0,
-0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,
-0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c9,0x9c9,0x9c9,0x9c9,
+0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x131d,0x131d,0x131d,0x131d,0x12bd,0x12bd,0x12bd,0x12bd,
+0x12bd,0x12bd,0x12bd,0x12bd,0xd95,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
+0xc99,0xc99,0xc99,0xc99,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
+0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x933,0x930,0x933,0x930,0x930,
+0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
+0x930,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
+0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,
+0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0xd9e,
+0x9b7,0x999,0x999,0x999,0x999,0x993,0x999,0x999,0x9ab,0x999,0x999,0x996,0x9a2,0x9a8,0x9a8,0x9a8,
+0x9a8,0x9a8,0x9ab,0x993,0x99f,0x993,0x993,0x993,0x98a,0x98a,0x993,0x993,0x993,0x993,0x993,0x993,
+0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x993,0x993,0x993,0x993,0x993,0x993,
+0x993,0x993,0x993,0x993,0x996,0x98a,0x993,0x98a,0x993,0x98a,0x9a5,0x99c,0x9a5,0x99c,0x9b4,0x9b4,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
+0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
+0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
-0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c3,0x9c3,0x9cc,0x9cc,0x9cc,0x9cc,
-0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
-0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9c6,0x9c6,0x9c9,0x9c9,0x9c9,0x9c9,
0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
-0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9cc,0x9cc,0x9cc,0x9cc,
-0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,
-0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cf,0x9d2,0x9d2,0x9d2,
0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
-0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9cf,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
+0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9cc,0x9cc,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9cf,0x9cf,
+0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
-0x9d2,0x9d2,0x9d2,0x9d2,0xa5f,0xa5f,0xff3,0xa5f,0xa5f,0xa5f,0xa62,0xa5f,0xff3,0xa5f,0xa5f,0xfea,
-0xa59,0xa4d,0xa4d,0xa4d,0xa4d,0xa5c,0xa4d,0xfdb,0xfdb,0xfdb,0xa4d,0xa50,0xa59,0xa53,0xfe1,0xfed,
-0xfed,0xfdb,0xfdb,0xff3,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xa65,0xa65,
-0xa56,0xa56,0xa56,0xa56,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5c,0xa5c,0xa4d,0xa4d,0xff3,0xff3,
-0xff3,0xff3,0xfdb,0xfdb,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,
-0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,
-0xa5f,0xa5f,0xa5f,0xa5f,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xde9,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xde9,
-0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,
-0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
-0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,
-0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa7d,0xa83,0xa80,
-0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,
-0x1167,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,
-0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,
-0xa80,0xa80,0xa80,0xa80,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,
-0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,
-0xa95,0xa95,0xa95,0xa95,0xab9,0xab9,0xab9,0xabc,0xabc,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,
-0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xaa1,0xaa1,0xab6,0xa98,0xa98,0xa98,0xa98,0xa98,
-0xa98,0xa98,0xab6,0xab6,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,
-0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,
-0xab9,0xab9,0xab9,0xab9,0xada,0xada,0xada,0xada,0xada,0xac5,0xac5,0xada,0xada,0xada,0xada,0xada,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xadd,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,
-0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xb04,0xb04,0xb04,0xb04,
-0xb04,0xb04,0xb04,0xb04,0xb07,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,
-0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xb13,0xb13,0xb13,0xb13,
-0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,
-0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,
-0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb2b,0xb2b,0xb2b,0xb2b,
-0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,
-0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb3a,0xb3a,0xb3a,0xb3a,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,
-0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3d,0xb3d,0xb3d,0xb3d,
-0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,
-0xb3d,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,
-0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,
-0xb3d,0xb3d,0xb3d,0xb3d,0xb43,0xb43,0xc93,0xc93,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
-0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xc93,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
-0xb43,0xb43,0xb43,0xb43,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
-0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
-0xb67,0xb67,0xb67,0x1524,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xd1d,0xd1d,0xb6d,0xb6d,0xb6d,0xb6d,
-0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,
-0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xd1a,0xd1a,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
+0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
+0x9d8,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,
+0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9d8,0x9db,0x9db,0x9db,
+0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,
+0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0xa68,0xa68,0xfff,0xa68,0xa68,0xa68,0xa6b,0xa68,
+0xfff,0xa68,0xa68,0xff6,0xa62,0xa56,0xa56,0xa56,0xa56,0xa65,0xa56,0xfe7,0xfe7,0xfe7,0xa56,0xa59,
+0xa62,0xa5c,0xfed,0xff9,0xff9,0xfe7,0xfe7,0xfff,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,
+0xb61,0xb61,0xa6e,0xa6e,0xa5f,0xa5f,0xa5f,0xa5f,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa65,0xa65,
+0xa56,0xa56,0xfff,0xfff,0xfff,0xfff,0xfe7,0xfe7,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
+0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
+0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
+0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
+0xa7d,0xa7d,0xa7d,0xa7d,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
+0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
+0xa83,0xa83,0xa83,0xa83,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
+0xa89,0xa86,0xa8c,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0x1176,0x1176,0x1176,0x1176,0x1176,
+0x1176,0x1176,0x1176,0x1176,0x1173,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
+0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
+0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
+0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
+0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xac2,0xac2,0xac2,0xac5,0xac5,0xac2,0xac2,0xac2,
+0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xaaa,0xaaa,0xabf,0xaa1,
+0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xabf,0xabf,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
+0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
+0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xae3,0xae3,0xae3,0xae3,0xae3,0xace,0xace,0xae3,
+0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0xae3,0xae3,0xae3,0xae6,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
+0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb10,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
+0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xc06,0xc06,0xc06,0xc06,0xc06,
+0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
+0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
+0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
+0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
+0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
+0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
+0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,
+0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0x13ec,0x13ec,0x13ec,0x1b2d,0x1b2d,0x1b2d,0x1b2d,0x1b2d,
+0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
+0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
+0xb43,0xb43,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb49,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb46,0xb46,0xb46,0xb4c,0xb4c,0xc9c,0xc9c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
+0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xc9c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
+0xb4c,0xb4c,0xb4c,0xb4c,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
-0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
-0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
-0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb82,0xb82,0xb82,0xb82,0xb82,0xb79,0xb85,0xb8b,
-0xb8b,0xb8b,0xb7f,0xb7f,0xb7f,0xb88,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb76,0xb76,0xb76,0xb76,0xb76,
-0xb76,0xb76,0xb76,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb82,0xb82,0xb8b,0xb8b,0xb8b,0xb7f,
-0xb7f,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb8b,0xb8b,
-0xb8b,0xb8b,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb82,
-0xb82,0xb82,0xb82,0xb82,0xb82,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0x1731,0x1731,0xb97,0xb8e,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb8e,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb8e,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb8e,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb8e,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,
-0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,
-0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb91,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,
-0xb97,0xb97,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,
-0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xb97,0xb97,
-0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
+0xb70,0xb70,0xb70,0x1530,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xd26,0xd26,0xb76,0xb76,0xb76,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xd23,0xd23,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
+0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,
+0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,
+0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
+0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
+0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb82,0xb8e,0xb94,
+0xb94,0xb94,0xb88,0xb88,0xb88,0xb91,0xb85,0xb85,0xb85,0xb85,0xb85,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
+0xb7f,0xb7f,0xb7f,0xb94,0xb94,0xb94,0xb94,0xb94,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb94,0xb94,0xb94,0xb88,
+0xb88,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb94,0xb94,
+0xb94,0xb94,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,
+0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
+0xb88,0xb88,0x173d,0x173d,0xba0,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb97,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb97,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
+0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
+0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
+0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,
0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
-0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,
-0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfa,0xbfd,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,
-0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xd0b,0xd0e,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,
-0xe01,0xe01,0xe01,0xe01,0xf18,0xf18,0xf18,0xf18,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc09,0xc09,
-0xc09,0xc09,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd14,0xd14,0xe07,0xebb,0xe07,0xe07,0xe07,0xe07,
-0xe04,0xe07,0xe04,0xe07,0xe07,0x1008,0x12a2,0x12a2,0xe10,0xe10,0xe10,0xe10,0xe10,0xe16,0xe13,0xf2a,
-0xf2a,0xf2a,0xf2a,0x1422,0x101a,0x1422,0x1368,0x1368,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,
-0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc78,0xc75,0xc78,0xc75,0xc78,0xc75,
-0x112b,0x1128,0x1020,0x101d,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,
-0xc48,0xc48,0xc48,0xc48,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,
-0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,
-0xc4b,0xc4b,0xc4b,0xc4b,0xc4e,0xc4e,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,
-0xc51,0xc51,0xc51,0xc57,0xc54,0xc7e,0xc7b,0xc57,0xc54,0xc57,0xc54,0xc57,0xc54,0xc57,0xc54,0xc57,
-0xc54,0xc57,0xc54,0xc57,0xc54,0xc57,0xc54,0xc57,0xc54,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,
-0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,
-0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc57,0xc54,0xc57,0xc54,
-0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,
-0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc57,0xc54,0xc51,0xc51,
-0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc60,0xc5a,0xc5a,0xc5a,
-0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
+0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
+0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
+0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
+0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
+0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc03,0xc06,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,
+0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xd14,0xd17,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,
+0xe0a,0xe0a,0xe0a,0xe0a,0xf24,0xf24,0xf24,0xf24,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc12,0xc12,
+0xc12,0xc12,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1d,0xd1d,0xe10,0xec4,0xe10,0xe10,0xe10,0xe10,
+0xe0d,0xe10,0xe0d,0xe10,0xe10,0x1014,0x12ae,0x12ae,0xe19,0xe19,0xe19,0xe19,0xe19,0xe1f,0xe1c,0xf36,
+0xf36,0xf36,0xf36,0x142e,0x1026,0x142e,0x1374,0x1374,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,
+0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc81,0xc7e,0xc81,0xc7e,0xc81,0xc7e,
+0x1137,0x1134,0x102c,0x1029,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,
+0xc51,0xc51,0xc51,0xc51,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
+0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
+0xc54,0xc54,0xc54,0xc54,0xc57,0xc57,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
+0xc5a,0xc5a,0xc5a,0xc60,0xc5d,0xc87,0xc84,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,
+0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
-0xc60,0xc60,0xc60,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc60,0xc5d,0xc60,0xc5d,
0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
-0xc5d,0xc5a,0xc5a,0xc5a,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
-0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,
-0xc96,0xc96,0xc96,0xc96,0xd17,0xd86,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xebb,0xebb,
-0xe04,0xe04,0xe04,0xe04,0xe07,0xe07,0xf1b,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x1008,0x12cf,0x12cf,0x12a5,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
-0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
-0xd3b,0xd3b,0xd3b,0xd3b,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd41,0xd41,0xd41,0xd41,0xd41,0xd3e,
-0xd53,0xd53,0xd53,0xd4d,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd4d,
-0xd53,0xd53,0xd53,0xd53,0xd47,0xd47,0xd50,0xd50,0xd50,0xd50,0xd44,0xd44,0xd44,0xd44,0xd44,0xd4a,
-0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe19,0xe1c,0xe1c,0xe1c,
-0xe1c,0xe1c,0xe1c,0xe1c,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,
-0xd53,0xd53,0xd4d,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,
-0xd53,0xd47,0xd47,0xd47,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,
-0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,
-0xd4a,0xd4a,0xd4a,0xd4a,0xd56,0xd56,0xd56,0xd56,0xd56,0xd59,0xd59,0xd59,0xd56,0xd56,0xd56,0xd56,
-0xd56,0xd56,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0x1134,
-0x1134,0x1023,0x1023,0x1023,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd5c,0xd5c,0xd5c,0xd5c,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,
-0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,
-0xd62,0xd62,0xd62,0xd62,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc60,0xc5d,0xc5a,0xc5a,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc69,0xc63,0xc63,0xc63,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc69,0xc69,0xc69,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
+0xc66,0xc63,0xc63,0xc63,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,
+0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,
+0xc9f,0xc9f,0xc9f,0xc9f,0xd20,0xd8f,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe10,0xe0d,0xe0d,0xec4,0xec4,
+0xe0d,0xe0d,0xe0d,0xe0d,0xe10,0xe10,0xf27,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,
+0x1014,0x12db,0x12db,0x12b1,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,
+0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,
+0xd44,0xd44,0xd44,0xd44,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd47,
+0xd5c,0xd5c,0xd5c,0xd56,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd56,
+0xd5c,0xd5c,0xd5c,0xd5c,0xd50,0xd50,0xd59,0xd59,0xd59,0xd59,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd53,
+0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe22,0xe25,0xe25,0xe25,
+0xe25,0xe25,0xe25,0xe25,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd5c,0xd56,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
+0xd5c,0xd50,0xd50,0xd50,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,
+0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,
+0xd53,0xd53,0xd53,0xd53,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd62,0xd62,0xd62,0xd5f,0xd5f,0xd5f,0xd5f,
+0xd5f,0xd5f,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0x1140,
+0x1140,0x102f,0x102f,0x102f,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,
+0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,
+0xd65,0xd65,0xd65,0xd65,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,
-0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,
-0xd77,0xd77,0xd77,0xd77,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
-0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
-0xd83,0xd83,0xd83,0xd83,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,
-0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,
-0xe25,0xe25,0xe25,0xe25,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,
-0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,
-0xe28,0xe28,0xe28,0xe28,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,
-0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,
-0xe2b,0xe2b,0xe2b,0xe2b,0xee8,0xee8,0xe3d,0xe3d,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0x102f,
-0x102f,0x102f,0x102f,0x102f,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,
-0x102c,0x102c,0x102c,0x102c,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,
-0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,0xe4c,0xe49,
-0xe4c,0xe49,0xe4c,0xe49,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,
-0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,
-0xe58,0xe58,0xe58,0xe58,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,
-0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,
-0xe5e,0xe5e,0xe5e,0xe5e,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,
-0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xf33,0xf33,0xf33,0xf33,0x1032,
-0x1032,0x1032,0x1032,0x1032,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,
-0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,
-0xe7f,0xe7f,0xe7f,0xe7f,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
+0xd6b,0xd6b,0xd6b,0xd6b,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
+0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
+0xd74,0xd74,0xd74,0xd74,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
+0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
+0xd80,0xd80,0xd80,0xd80,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
+0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
+0xd8c,0xd8c,0xd8c,0xd8c,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
+0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
+0xe2e,0xe2e,0xe2e,0xe2e,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,
+0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,
+0xe31,0xe31,0xe31,0xe31,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,
+0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,
+0xe34,0xe34,0xe34,0xe34,0xef4,0xef4,0xe46,0xe46,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0x103b,
+0x103b,0x103b,0x103b,0x103b,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,
+0x1038,0x1038,0x1038,0x1038,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,
+0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,
+0xe55,0xe52,0xe55,0xe52,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,
+0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,
+0xe61,0xe61,0xe61,0xe61,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xe67,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xe7f,0xe7f,0xe7f,0xe7f,
+0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xf3f,0xf3f,0xf3f,0xf3f,0x103e,
+0x103e,0x103e,0x103e,0x103e,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
0xe88,0xe88,0xe88,0xe88,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,
0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,
-0xe91,0xe91,0xe91,0xe8b,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,
-0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe91,
0xe91,0xe91,0xe91,0xe91,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,
-0xe9a,0xe9a,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe94,0xe9d,0x103e,0x1038,0x1047,0x1035,
-0xe9a,0xe9a,0x1035,0x1035,0xeac,0xeac,0xea0,0xeac,0xeac,0xeac,0xea3,0xeac,0xeac,0xeac,0xeac,0xea0,
-0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,
-0xeac,0xeac,0xeac,0xeac,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,
-0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,
-0xeaf,0xeaf,0xeaf,0xeaf,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,
-0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,
-0xec7,0xec7,0xec7,0xec7,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,
-0xee5,0xee5,0xee5,0xee5,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,
-0x113d,0x113d,0x113d,0x113d,0xf18,0xf18,0xf18,0xf15,0xf15,0xf15,0xf15,0xf15,0x1176,0x13d1,0x13d1,0x13d1,
-0x13d1,0x1353,0x1353,0x1353,0x13d4,0x1356,0x1356,0x13d4,0x1518,0x1518,0x1518,0x1518,0x151b,0x151b,0x151b,0x17e2,
-0x17e2,0x17e2,0x17e2,0x18a8,0xf2d,0xf2d,0xf2d,0xf2d,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,
-0x1023,0x1023,0x1023,0x1023,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,
-0x1026,0x1026,0x1026,0x1026,0xf4e,0xf4e,0xf4e,0xf4e,0xf60,0xf69,0xf6c,0xf69,0xf6c,0xf69,0xf6c,0xf69,
-0xf6c,0xf69,0xf6c,0xf69,0xf69,0xf69,0xf6c,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,
-0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf51,0xf4e,0xf4e,0xf4e,
-0xf4e,0xf4e,0xf4e,0xf63,0xf4e,0xf63,0xf60,0xf60,0xf75,0xf72,0xf75,0xf75,0xf75,0xf72,0xf72,0xf75,
-0xf72,0xf75,0xf72,0xf75,0xf72,0x1059,0x1059,0x1059,0x1194,0x1050,0x1059,0x1050,0xf72,0xf75,0xf72,0xf72,
-0x1050,0x1050,0x1050,0x1050,0x1053,0x1056,0x1194,0x1194,0xf78,0xf78,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,
-0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x1062,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,
-0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,
-0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,
-0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,
-0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,
-0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0x1557,0x1557,0x1557,0x1557,0x1557,
-0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0xf93,0xf93,0xf93,0xf93,
-0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,
-0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xf93,0xfdb,0xff3,0xfea,0xff0,
-0xff0,0xff3,0xff3,0xfea,0xfea,0xff0,0xff0,0xff0,0xff0,0xff0,0xff3,0xff3,0xff3,0xfdb,0xfdb,0xfdb,
-0xfdb,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xfdb,0xfea,
-0xfed,0xfdb,0xfdb,0xff0,0xff0,0xff0,0xff0,0xff0,0xff0,0xfde,0xff3,0xff0,0xfe7,0xfe7,0xfe7,0xfe7,
-0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0x115e,0x115e,0x115b,0x1158,0xfe4,0xfe4,0x100b,0x100b,0x100b,0x100b,
-0x12cf,0x12cf,0x12a5,0x12a5,0x12ab,0x12a2,0x12a2,0x12a2,0x12a2,0x12a5,0x13d7,0x12ab,0x12a5,0x12ab,0x12a2,0x12ab,
-0x12cf,0x12a2,0x12a2,0x12a2,0x12a5,0x12a5,0x12a2,0x12a2,0x12a5,0x12a2,0x12a2,0x12a5,0x1026,0x1026,0x1026,0x1026,
-0x1026,0x1023,0x1023,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1530,0x1530,0x1530,0x1134,0x1023,0x1023,0x1023,
-0x1023,0x12db,0x12b4,0x12b4,0x12b4,0x12b4,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1044,0x1044,0x1041,0x103b,
-0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1038,0x1038,0x1038,0x1038,0x104d,0x104a,0x1038,0x1191,0x142e,0x1431,
-0x1431,0x142e,0x142e,0x142e,0x142e,0x142e,0x1434,0x1434,0x154b,0x153f,0x153f,0x153c,0x106b,0x1062,0x106b,0x1062,
-0x106b,0x1062,0x106b,0x1062,0x105f,0x105c,0x105c,0x106b,0x1062,0x1377,0x1374,0x173a,0x1377,0x1374,0x143d,0x143a,
-0x154e,0x154e,0x1554,0x154e,0x1554,0x154e,0x1554,0x154e,0x1554,0x154e,0x1554,0x154e,0x106b,0x1062,0x106b,0x1062,
-0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,
-0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x1062,0x1065,0x1062,0x1062,0x1062,
-0x1062,0x1062,0x1062,0x1062,0x1062,0x106b,0x1062,0x106b,0x1062,0x106b,0x106b,0x1062,0x106e,0x106e,0x1074,0x107a,
-0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,
-0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x1074,0x106e,0x106e,
-0x106e,0x106e,0x1074,0x1074,0x106e,0x106e,0x1077,0x1446,0x1443,0x1443,0x107a,0x107a,0x1071,0x1071,0x1071,0x1071,
-0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x108f,0x108f,0x108f,0x108f,
-0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,
-0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x1098,0x1098,0x1098,0x1098,
-0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,
-0x1098,0x1098,0x1098,0x1098,0x109b,0x109b,0x109b,0x109e,0x109b,0x109b,0x10a1,0x10a1,0x10a4,0x10a4,0x10a4,0x10a4,
+0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,
+0xe9a,0xe9a,0xe9a,0xe94,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,
+0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe9a,
+0xe9a,0xe9a,0xe9a,0xe9a,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,
+0xea3,0xea3,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xe9d,0xea6,0x104a,0x1044,0x1053,0x1041,
+0xea3,0xea3,0x1041,0x1041,0xeb5,0xeb5,0xea9,0xeb5,0xeb5,0xeb5,0xeac,0xeb5,0xeb5,0xeb5,0xeb5,0xea9,
+0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,
+0xeb5,0xeb5,0xeb5,0xeb5,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
+0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
+0xeb8,0xeb8,0xeb8,0xeb8,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
+0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
+0xed0,0xed0,0xed0,0xed0,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,
+0xef1,0xef1,0xef1,0xef1,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,
+0x1149,0x1149,0x1149,0x1149,0xf24,0xf24,0xf24,0xf21,0xf21,0xf21,0xf21,0xf21,0x1182,0x13dd,0x13dd,0x13dd,
+0x13dd,0x135f,0x135f,0x135f,0x13e0,0x1362,0x1362,0x13e0,0x1524,0x1524,0x1524,0x1524,0x1527,0x1527,0x1527,0x17ee,
+0x17ee,0x17ee,0x17ee,0x18b4,0xf39,0xf39,0xf39,0xf39,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,
+0x102f,0x102f,0x102f,0x102f,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,
+0x1032,0x1032,0x1032,0x1032,0xf5a,0xf5a,0xf5a,0xf5a,0xf6c,0xf75,0xf78,0xf75,0xf78,0xf75,0xf78,0xf75,
+0xf78,0xf75,0xf78,0xf75,0xf75,0xf75,0xf78,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,
+0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf5d,0xf5a,0xf5a,0xf5a,
+0xf5a,0xf5a,0xf5a,0xf6f,0xf5a,0xf6f,0xf6c,0xf6c,0xf81,0xf7e,0xf81,0xf81,0xf81,0xf7e,0xf7e,0xf81,
+0xf7e,0xf81,0xf7e,0xf81,0xf7e,0x1065,0x1065,0x1065,0x11a0,0x105c,0x1065,0x105c,0xf7e,0xf81,0xf7e,0xf7e,
+0x105c,0x105c,0x105c,0x105c,0x105f,0x1062,0x11a0,0x11a0,0xf84,0xf84,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,
+0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x106e,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,
+0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,
+0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,
+0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,
+0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,
+0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0x1563,0x1563,0x1563,0x1563,0x1563,
+0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0xf9f,0xf9f,0xf9f,0xf9f,
+0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,
+0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xfe7,0xfff,0xff6,0xffc,
+0xffc,0xfff,0xfff,0xff6,0xff6,0xffc,0xffc,0xffc,0xffc,0xffc,0xfff,0xfff,0xfff,0xfe7,0xfe7,0xfe7,
+0xfe7,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfe7,0xff6,
+0xff9,0xfe7,0xfe7,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0xfea,0xfff,0xffc,0xff3,0xff3,0xff3,0xff3,
+0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0x116a,0x116a,0x1167,0x1164,0xff0,0xff0,0x1017,0x1017,0x1017,0x1017,
+0x12db,0x12db,0x12b1,0x12b1,0x12b7,0x12ae,0x12ae,0x12ae,0x12ae,0x12b1,0x13e3,0x12b7,0x12b1,0x12b7,0x12ae,0x12b7,
+0x12db,0x12ae,0x12ae,0x12ae,0x12b1,0x12b1,0x12ae,0x12ae,0x12b1,0x12ae,0x12ae,0x12b1,0x1032,0x1032,0x1032,0x1032,
+0x1032,0x102f,0x102f,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x153c,0x153c,0x153c,0x1140,0x102f,0x102f,0x102f,
+0x102f,0x12e7,0x12c0,0x12c0,0x12c0,0x12c0,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x1050,0x1050,0x104d,0x1047,
+0x104d,0x1047,0x104d,0x1047,0x104d,0x1047,0x1044,0x1044,0x1044,0x1044,0x1059,0x1056,0x1044,0x119d,0x143a,0x143d,
+0x143d,0x143a,0x143a,0x143a,0x143a,0x143a,0x1440,0x1440,0x1557,0x154b,0x154b,0x1548,0x1077,0x106e,0x1077,0x106e,
+0x1077,0x106e,0x1077,0x106e,0x106b,0x1068,0x1068,0x1077,0x106e,0x1383,0x1380,0x1746,0x1383,0x1380,0x1449,0x1446,
+0x155a,0x155a,0x1560,0x155a,0x1560,0x155a,0x1560,0x155a,0x1560,0x155a,0x1560,0x155a,0x1077,0x106e,0x1077,0x106e,
+0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,
+0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1071,0x106e,0x106e,0x106e,
+0x106e,0x106e,0x106e,0x106e,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x1077,0x106e,0x107a,0x107a,0x1080,0x1086,
+0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,
+0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1080,0x107a,0x107a,
+0x107a,0x107a,0x1080,0x1080,0x107a,0x107a,0x1083,0x1452,0x144f,0x144f,0x1086,0x1086,0x107d,0x107d,0x107d,0x107d,
+0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x109b,0x109b,0x109b,0x109b,
+0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,
+0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x10a4,0x10a4,0x10a4,0x10a4,
0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,
-0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10ad,0x10ad,0x10ad,0x10ad,
-0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10b0,0x10a7,0x10b6,0x10b3,0x10ad,0x10ad,0x10ad,0x10ad,
-0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,
-0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x137d,0x137a,0x10c8,0x10c2,
-0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c5,0x1146,0x10b9,0x10b9,0x10b9,0x10bf,
-0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x10bc,0x10bc,0x10bf,0x10cb,0x10c8,0x10c2,0x10c8,0x10c2,
-0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,
-0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x10c8,0x10c2,0x1563,0x1560,0x1563,0x1560,
-0x1566,0x1566,0x1743,0x144c,0x10d4,0x10d4,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,
-0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,
-0x10d7,0x10d7,0x10d7,0x10d7,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,
-0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10e0,0x10e0,0x10e0,0x113a,0x10e9,
-0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,
-0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,
-0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,0x10e6,
-0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,
-0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,
-0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,
-0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,
-0x1122,0x1122,0x1122,0x1122,0x1137,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,
-0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,
+0x10a4,0x10a4,0x10a4,0x10a4,0x10a7,0x10a7,0x10a7,0x10aa,0x10a7,0x10a7,0x10ad,0x10ad,0x10b0,0x10b0,0x10b0,0x10b0,
+0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,
+0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b9,0x10b9,0x10b9,0x10b9,
+0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10bc,0x10b3,0x10c2,0x10bf,0x10b9,0x10b9,0x10b9,0x10b9,
+0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,
+0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x1389,0x1386,0x10d4,0x10ce,
+0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d1,0x1152,0x10c5,0x10c5,0x10c5,0x10cb,
+0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x10c8,0x10c8,0x10cb,0x10d7,0x10d4,0x10ce,0x10d4,0x10ce,
+0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,
+0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x156f,0x156c,0x156f,0x156c,
+0x1572,0x1572,0x174f,0x1458,0x10e0,0x10e0,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,
+0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,
+0x10e3,0x10e3,0x10e3,0x10e3,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,
+0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10ec,0x10ec,0x10ec,0x1146,0x10f5,
+0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,
+0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,
+0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,
+0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
+0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
-0x1131,0x1131,0x1131,0x1131,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x14d6,0x17c1,0x17c1,0x17c1,
-0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,
-0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,
-0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x119d,0x119d,0x11a0,0x11a0,0x11a6,0x119d,0x119d,0x119d,0x119d,0x119d,
-0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,
-0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,
-0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,
-0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,
+0x112e,0x112e,0x112e,0x112e,0x1143,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,
+0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,
+0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
+0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
+0x113d,0x113d,0x113d,0x113d,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x14e2,0x17cd,0x17cd,0x17cd,
+0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,
+0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,
+0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11a9,0x11a9,0x11ac,0x11ac,0x11b2,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
+0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
+0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
-0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d0,0x11d6,
-0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,
-0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,
-0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,
-0x11e8,0x1323,0x11ee,0x1326,0x11ee,0x11ee,0x11ee,0x11ee,0x11eb,0x11eb,0x11eb,0x11ee,0x1746,0x1749,0x196b,0x1968,
-0x11f1,0x11f1,0x11f1,0x1200,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,
-0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,
-0x1206,0x1206,0x1206,0x11f4,0x1200,0x1200,0x11f1,0x11f1,0x11f1,0x11f1,0x1200,0x1200,0x11f1,0x11f1,0x1200,0x1200,
+0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
+0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,
+0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11dc,0x11e2,
+0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
+0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
+0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,
+0x11f4,0x132f,0x11fa,0x1332,0x11fa,0x11fa,0x11fa,0x11fa,0x11f7,0x11f7,0x11f7,0x11fa,0x1752,0x1755,0x197a,0x1977,
+0x11fd,0x11fd,0x11fd,0x120c,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,
0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,
-0x1215,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x120c,0x120c,0x120c,0x1212,0x120f,0x156c,0x156f,0x1572,0x1572,
-0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,
-0x1218,0x1224,0x1218,0x1218,0x1218,0x122d,0x122d,0x1218,0x1218,0x122d,0x1224,0x122d,0x122d,0x1224,0x1218,0x121b,
-0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,
-0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,
-0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,
-0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,
-0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,
-0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1254,0x1254,0x1254,
-0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,
-0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,
-0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,
-0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,
-0x1275,0x1275,0x1284,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,
-0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x128a,0x1287,0x128a,0x1287,0x1287,0x1287,
-0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x128a,0x1287,0x1287,0x1287,0x1287,
-0x1284,0x1284,0x1284,0x1278,0x1278,0x1278,0x1278,0x1284,0x1284,0x127e,0x127b,0x1281,0x1281,0x1290,0x128d,0x128d,
-0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
-0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
-0x1299,0x1299,0x1299,0x1296,0x1296,0x1296,0x1293,0x1293,0x1293,0x1293,0x1296,0x1293,0x1293,0x1293,0x1299,0x1296,
-0x1299,0x1296,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
-0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1299,0x1296,0x1296,
-0x1293,0x1293,0x1293,0x1293,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12ba,0x12bd,
-0x12bd,0x12bd,0x129c,0x1971,0x13cb,0x12c6,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,
-0x13cb,0x12c6,0x13cb,0x12c6,0x12a5,0x12a5,0x1359,0x12a2,0x1359,0x1359,0x1359,0x1359,0x12a2,0x12a8,0x12cf,0x12a2,
-0x12a2,0x12a2,0x12a2,0x12a2,0x12a8,0x12ab,0x12cf,0x12cf,0x12ab,0x12cf,0x12a2,0x12ab,0x12ab,0x12ae,0x12cf,0x12a2,
-0x12a2,0x12cf,0x12a5,0x12a5,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x12b7,0x12b7,
-0x12b7,0x12b7,0x13e3,0x13c2,0x12c0,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x186f,
-0x186f,0x186f,0x186f,0x186f,0x13cb,0x13cb,0x12c6,0x13cb,0x13cb,0x13cb,0x12c6,0x13cb,0x13cb,0x13cb,0x12c0,0x12c0,
-0x12c0,0x12c0,0x12c0,0x13c5,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x12c3,0x13c8,0x13c8,0x13c8,0x13c8,
-0x13c8,0x13c8,0x13c8,0x12c3,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,
-0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,
-0x12ed,0x12ed,0x12ed,0x12ed,0x1377,0x1374,0x1377,0x1374,0x1377,0x1374,0x1377,0x1374,0x1377,0x1374,0x143d,0x1554,
-0x1554,0x1554,0x17ee,0x195f,0x1554,0x1554,0x173d,0x173d,0x173d,0x1737,0x173d,0x1737,0x1962,0x195f,0x1a1c,0x1a19,
-0x1a1c,0x1a19,0x1a1c,0x1a19,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,
-0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,
-0x139b,0x139b,0x139b,0x139b,0x13b0,0x13a1,0x13b0,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,
-0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,
-0x13b3,0x13b3,0x13b3,0x13b3,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13b9,0x13b9,0x13b9,0x13b9,
-0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,
-0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13bf,0x13bf,0x13bf,0x13bf,
+0x1212,0x1212,0x1212,0x1200,0x120c,0x120c,0x11fd,0x11fd,0x11fd,0x11fd,0x120c,0x120c,0x11fd,0x11fd,0x120c,0x120c,
+0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
+0x1221,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x1218,0x1218,0x1218,0x121e,0x121b,0x1578,0x157b,0x157e,0x157e,
+0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
+0x1224,0x1230,0x1224,0x1224,0x1224,0x1239,0x1239,0x1224,0x1224,0x1239,0x1230,0x1239,0x1239,0x1230,0x1224,0x1227,
+0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
+0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
+0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,
+0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,
+0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,
+0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1260,0x1260,0x1260,
+0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
+0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
+0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,
+0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,
+0x1281,0x1281,0x1290,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
+0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1296,0x1293,0x1296,0x1293,0x1293,0x1293,
+0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1296,0x1293,0x1293,0x1293,0x1293,
+0x1290,0x1290,0x1290,0x1284,0x1284,0x1284,0x1284,0x1290,0x1290,0x128a,0x1287,0x128d,0x128d,0x129c,0x1299,0x1299,
+0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
+0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
+0x12a5,0x12a5,0x12a5,0x12a2,0x12a2,0x12a2,0x129f,0x129f,0x129f,0x129f,0x12a2,0x129f,0x129f,0x129f,0x12a5,0x12a2,
+0x12a5,0x12a2,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
+0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x12a5,0x12a2,0x12a2,
+0x129f,0x129f,0x129f,0x129f,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c9,
+0x12c9,0x12c9,0x12a8,0x1980,0x13d7,0x12d2,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,
+0x13d7,0x12d2,0x13d7,0x12d2,0x12b1,0x12b1,0x1365,0x12ae,0x1365,0x1365,0x1365,0x1365,0x12ae,0x12b4,0x12db,0x12ae,
+0x12ae,0x12ae,0x12ae,0x12ae,0x12b4,0x12b7,0x12db,0x12db,0x12b7,0x12db,0x12ae,0x12b7,0x12b7,0x12ba,0x12db,0x12ae,
+0x12ae,0x12db,0x12b1,0x12b1,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x12c3,0x12c3,
+0x12c3,0x12c3,0x13ef,0x13ce,0x12cc,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x187e,
+0x187e,0x187e,0x187e,0x187e,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x1581,
+0x1581,0x1ad0,0x1ad0,0x1ad0,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,
+0x12c6,0x12c6,0x12c6,0x12c6,0x13d7,0x13d7,0x12d2,0x13d7,0x13d7,0x13d7,0x12d2,0x13d7,0x13d7,0x13d7,0x12cc,0x12cc,
+0x12cc,0x12cc,0x12cc,0x13d1,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x12cf,0x13d4,0x13d4,0x13d4,0x13d4,
+0x13d4,0x13d4,0x13d4,0x12cf,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x145b,0x145b,
+0x1a2e,0x1ad0,0x1ad0,0x1ad0,0x13da,0x13da,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x12cf,0x13d4,0x12cf,
+0x12cf,0x13d4,0x13da,0x12d5,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
+0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
+0x12f9,0x12f9,0x12f9,0x12f9,0x1383,0x1380,0x1383,0x1380,0x1383,0x1380,0x1383,0x1380,0x1383,0x1380,0x1449,0x1560,
+0x1560,0x1560,0x17fa,0x196e,0x1560,0x1560,0x1749,0x1749,0x1749,0x1743,0x1749,0x1743,0x1971,0x196e,0x1a2b,0x1a28,
+0x1a2b,0x1a28,0x1a2b,0x1a28,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,
+0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,
+0x13a7,0x13a7,0x13a7,0x13a7,0x13bc,0x13ad,0x13bc,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,
0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,
-0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13ef,0x13ec,0x1917,0x1917,
-0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,
-0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f5,0x13f5,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f5,0x13f8,0x13f8,0x13f8,0x13f5,0x13f8,0x13f5,0x13f8,
-0x13f5,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13fb,0x13f8,0x13f8,0x13f8,0x13f8,0x13f5,0x13f8,0x13f5,0x13f5,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f5,0x13f5,0x13f5,0x13f5,
-0x13f5,0x13f5,0x13f5,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,
-0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x157e,0x157e,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x158a,0x1584,0x1584,0x158a,0x158a,0x158a,0x158a,
-0x158a,0x158a,0x158a,0x158a,0x158a,0x17c4,0x17c4,0x17c4,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x158a,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x158a,0x17c4,0x17c4,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13fb,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x1584,0x1584,0x158a,0x158a,0x1584,0x158a,0x158a,0x158a,0x1581,0x1581,0x158a,0x158a,
-0x13f8,0x13f8,0x13fb,0x13fb,0x13fb,0x16f5,0x13f8,0x13fb,0x13f8,0x13f8,0x13fb,0x158d,0x158d,0x158a,0x158a,0x17c4,
-0x17c4,0x17c4,0x17c4,0x17c4,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x1584,0x1584,0x158a,0x16f5,0x158a,0x1584,0x158a,0x17c4,0x17c4,0x17c4,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x158a,
-0x13f8,0x158a,0x13fb,0x13fb,0x13f8,0x13f8,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,
-0x13fb,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,
-0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13f8,0x13f8,0x13f8,0x13fb,0x13f8,0x13f8,0x13f8,0x13f8,0x13fb,0x13fb,0x13fb,
-0x13f8,0x13fb,0x13fb,0x13fb,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13fb,0x13f8,0x13fb,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x16f5,0x13f8,0x13f8,0x13f8,0x13f8,0x158a,0x1584,0x17c4,
-0x1452,0x1452,0x1452,0x1452,0x157e,0x157e,0x1581,0x1581,0x1581,0x1587,0x158a,0x17c4,0x17c4,0x17c4,0x17c4,0x174c,
-0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
-0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x158a,0x158a,0x1584,0x1584,0x158a,0x158d,0x158d,0x158a,0x158a,
-0x158a,0x158a,0x1878,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x158a,0x1584,0x158a,0x1584,0x1584,0x1584,0x1584,
-0x158a,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x158a,0x1584,0x1584,0x1584,0x158a,0x1581,0x1581,0x1581,0x1581,
-0x1581,0x1581,0x158a,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x14dc,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,
-0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x14dc,0x13fe,0x13fe,0x13fe,0x14dc,0x13fe,0x14dc,
-0x13fe,0x14dc,0x13fe,0x14dc,0x13fe,0x13fe,0x13fe,0x14dc,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x14dc,0x14dc,
-0x13fe,0x13fe,0x13fe,0x13fe,0x14dc,0x13fe,0x14dc,0x14dc,0x13fe,0x13fe,0x13fe,0x13fe,0x14dc,0x13fe,0x13fe,0x13fe,
-0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x16fb,0x16fb,0x17ca,0x17ca,0x1401,0x1401,0x1401,
-0x13fe,0x13fe,0x13fe,0x1401,0x1401,0x1401,0x1401,0x1401,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,
-0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x13bf,0x13bf,0x13bf,0x13bf,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13c5,0x13c5,0x13c5,0x13c5,
+0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,
+0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13cb,0x13cb,0x13cb,0x13cb,
+0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,
+0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13fb,0x13f8,0x1923,0x1923,
+0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,
+0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1404,0x1404,0x1404,0x1404,
0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1407,0x1407,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x17f7,0x17f7,0x17f4,0x174f,0x1458,0x1458,0x1458,0x1458,
-0x1458,0x1458,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,
-0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1596,0x1464,0x1464,0x1464,0x1476,0x1476,0x1476,0x1476,0x1476,
-0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,
-0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,
-0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,
-0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,
-0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,
-0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1a25,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,
-0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,
-0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x14a0,0x14a0,0x14ac,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,
-0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,
-0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14ac,0x14ac,0x14ac,0x14a0,0x14a0,
-0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14ac,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,
-0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,
-0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x14d3,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,
-0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,
-0x1530,0x1530,0x1947,0x1947,0x1947,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,
-0x1530,0x1a13,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x18ae,0x1947,0x1947,0x1947,0x1947,0x1947,
-0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1584,0x1584,0x158a,0x158a,0x158a,0x1584,0x1584,0x1584,
-0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x158a,0x158a,0x158a,0x1581,0x1581,0x1581,0x1581,
-0x1581,0x1581,0x1581,0x1581,0x158a,0x158a,0x158a,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x158a,
-0x1584,0x1584,0x158a,0x158a,0x158a,0x158a,0x1584,0x1584,0x158d,0x1584,0x1584,0x1584,0x1584,0x16f8,0x16f8,0x1584,
-0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1875,0x158a,0x1584,0x1584,0x158a,0x1584,0x1584,0x1584,
-0x1584,0x1584,0x1584,0x1584,0x1584,0x158a,0x158a,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,
-0x158a,0x1584,0x1584,0x1584,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,
-0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,
-0x15ae,0x15ae,0x15ae,0x15ae,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,
-0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,
-0x15c0,0x15c0,0x15c0,0x15c0,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,
-0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,
-0x15c6,0x15c6,0x15c6,0x15c6,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,
-0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,
-0x15c9,0x15c9,0x15c9,0x15c9,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,
-0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,
-0x1608,0x1608,0x1608,0x15f9,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,
-0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x160b,
-0x1614,0x1614,0x1614,0x1614,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,
-0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,
-0x1617,0x1617,0x1617,0x1617,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1629,0x1632,0x1632,0x1632,
-0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,
-0x1632,0x1632,0x1632,0x1632,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,
-0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,
-0x163b,0x163b,0x163b,0x163b,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,
-0x164d,0x164d,0x164d,0x164d,0x164a,0x164a,0x164a,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x164a,
-0x164a,0x163e,0x164a,0x1641,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,
-0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,
-0x164d,0x164d,0x164d,0x164d,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,
-0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,
-0x1671,0x166e,0x166e,0x166e,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,
-0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x1680,0x1680,0x1680,0x167d,0x167d,0x167d,
-0x167a,0x167a,0x167a,0x167a,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
-0x168f,0x168f,0x168f,0x168f,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1695,0x1695,0x1689,0x1686,0x1686,
-0x1686,0x1686,0x1686,0x1686,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
-0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
-0x168f,0x168f,0x168f,0x168f,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
-0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x1698,0x1698,0x1698,0x1698,0x1698,
-0x1698,0x1698,0x1698,0x1698,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,
-0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,
-0x169e,0x169e,0x169e,0x169e,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,
-0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,
-0x16c2,0x16c2,0x16c2,0x16c2,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,
-0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,
-0x16cb,0x16cb,0x16cb,0x16cb,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,
-0x16e3,0x16e3,0x16e3,0x16e3,0x16ce,0x16dd,0x16dd,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16dd,0x16ce,0x16e0,
-0x16e0,0x16ce,0x16e0,0x16ce,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,
-0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,
-0x16e3,0x16e3,0x16e3,0x16e3,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,
-0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,0x16ec,
-0x16ec,0x16ec,0x16ec,0x16ec,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,
-0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,
-0x16f2,0x16f2,0x16f2,0x16f2,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,
-0x1734,0x1734,0x1734,0x1734,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,
-0x1947,0x1947,0x1947,0x1a13,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
-0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
-0x1755,0x1755,0x1755,0x1755,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,
-0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,
-0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1797,0x1794,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,
-0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
-0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,
-0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
+0x1404,0x1401,0x1401,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1404,0x1404,0x1404,0x1401,0x1404,0x1401,0x1404,
+0x1401,0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,0x1401,0x1404,0x1401,0x1401,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,
+0x1401,0x1401,0x1401,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,
+0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x158a,0x158a,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,0x1590,0x1590,0x1596,0x1596,0x1596,0x1596,
+0x1596,0x1596,0x1596,0x1596,0x1596,0x17d0,0x17d0,0x17d0,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,0x17d0,0x17d0,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1590,0x1590,0x1596,0x1596,0x1590,0x1596,0x1596,0x1596,0x158d,0x158d,0x1596,0x1596,
+0x1404,0x1404,0x1407,0x1407,0x1407,0x1701,0x1404,0x1407,0x1404,0x1404,0x1407,0x1599,0x1599,0x1596,0x1596,0x17d0,
+0x17d0,0x17d0,0x17d0,0x17d0,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1590,0x1590,0x1596,0x1701,0x1596,0x1590,0x1596,0x17d0,0x17d0,0x17d0,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,
+0x1404,0x1596,0x1407,0x1407,0x1404,0x1404,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,
+0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,
+0x1407,0x1407,0x1407,0x1407,0x1407,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,0x1407,0x1407,0x1407,
+0x1404,0x1407,0x1407,0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1407,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1701,0x1404,0x1404,0x1404,0x1404,0x1596,0x1590,0x17d0,
+0x145e,0x145e,0x145e,0x145e,0x158a,0x158a,0x158d,0x158d,0x158d,0x1593,0x1596,0x17d0,0x17d0,0x17d0,0x17d0,0x1758,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
+0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1596,0x1590,0x1590,0x1596,0x1599,0x1599,0x1596,0x1596,
+0x1596,0x1596,0x1887,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1590,0x1596,0x1590,0x1590,0x1590,0x1590,
+0x1596,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1590,0x1590,0x1590,0x1596,0x158d,0x158d,0x158d,0x158d,
+0x158d,0x158d,0x1596,0x1404,0x1404,0x1404,0x1404,0x1404,0x14e8,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
+0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x14e8,0x140a,0x140a,0x140a,0x14e8,0x140a,0x14e8,
+0x140a,0x14e8,0x140a,0x14e8,0x140a,0x140a,0x140a,0x14e8,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x14e8,0x14e8,
+0x140a,0x140a,0x140a,0x140a,0x14e8,0x140a,0x14e8,0x14e8,0x140a,0x140a,0x140a,0x140a,0x14e8,0x140a,0x140a,0x140a,
+0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x1707,0x1707,0x17d6,0x17d6,0x140d,0x140d,0x140d,
+0x140a,0x140a,0x140a,0x140d,0x140d,0x140d,0x140d,0x140d,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,
+0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,
+0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,
+0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1413,0x1410,0x1410,0x1410,0x1410,
+0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1413,0x1413,0x1413,0x1410,
+0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,
+0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,
+0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1803,0x1803,0x1800,0x175b,0x1464,0x1464,0x1464,0x1464,
+0x1464,0x1464,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,
+0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x15a2,0x1470,0x1470,0x1470,0x1482,0x1482,0x1482,0x1482,0x1482,
+0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,
+0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,
+0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,
+0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,
+0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,
+0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x1a34,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,
+0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,
+0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14ac,0x14ac,0x14b8,0x14be,0x14be,0x14be,0x14be,0x14be,
+0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,
+0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14b8,0x14b8,0x14b8,0x14ac,0x14ac,
+0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14b8,0x14bb,0x14be,0x14c1,0x14c1,0x14be,0x14c4,0x14c4,0x14af,
+0x14b2,0x1764,0x1767,0x1767,0x1767,0x15ab,0x1adc,0x1ad9,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,
+0x14b5,0x14b5,0x15a8,0x176d,0x1770,0x176a,0x1773,0x1773,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,
+0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,
+0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
+0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
+0x153c,0x153c,0x1956,0x1956,0x1956,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
+0x153c,0x1a22,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x18ba,0x1956,0x1956,0x1956,0x1956,0x1956,
+0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1590,0x1590,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,
+0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1596,0x1596,0x158d,0x158d,0x158d,0x158d,
+0x158d,0x158d,0x158d,0x158d,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,
+0x1590,0x1590,0x1596,0x1596,0x1596,0x1596,0x1590,0x1590,0x1599,0x1590,0x1590,0x1590,0x1590,0x1704,0x1704,0x1590,
+0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1884,0x1596,0x1590,0x1590,0x1596,0x1590,0x1590,0x1590,
+0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1596,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,
+0x1596,0x1590,0x1590,0x1590,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,
+0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,
+0x15ba,0x15ba,0x15ba,0x15ba,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,
+0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,
+0x15cc,0x15cc,0x15cc,0x15cc,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,
+0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,
+0x15d2,0x15d2,0x15d2,0x15d2,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
+0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
+0x15d5,0x15d5,0x15d5,0x15d5,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
+0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
+0x1614,0x1614,0x1614,0x1605,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,
+0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x1617,
+0x1620,0x1620,0x1620,0x1620,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
+0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
+0x1623,0x1623,0x1623,0x1623,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x1635,0x163e,0x163e,0x163e,
+0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,
+0x163e,0x163e,0x163e,0x163e,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,
+0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,
+0x1647,0x1647,0x1647,0x1647,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,
+0x1659,0x1659,0x1659,0x1659,0x1656,0x1656,0x1656,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x1656,
+0x1656,0x164a,0x1656,0x164d,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,
+0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,
+0x1659,0x1659,0x1659,0x1659,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,
+0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,
+0x167d,0x167a,0x167a,0x167a,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,
+0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x168c,0x168c,0x168c,0x1689,0x1689,0x1689,
+0x1686,0x1686,0x1686,0x1686,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
+0x169b,0x169b,0x169b,0x169b,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x16a1,0x16a1,0x1695,0x1692,0x1692,
+0x1692,0x1692,0x1692,0x1692,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
+0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
+0x169b,0x169b,0x169b,0x169b,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,
+0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a4,0x16a4,0x16a4,0x16a4,0x16a4,
+0x16a4,0x16a4,0x16a4,0x16a4,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
+0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
+0x16aa,0x16aa,0x16aa,0x16aa,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,
+0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,
+0x16ce,0x16ce,0x16ce,0x16ce,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
+0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
+0x16d7,0x16d7,0x16d7,0x16d7,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,
+0x16ef,0x16ef,0x16ef,0x16ef,0x16da,0x16e9,0x16e9,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16e9,0x16da,0x16ec,
+0x16ec,0x16da,0x16ec,0x16da,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,
+0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,
+0x16ef,0x16ef,0x16ef,0x16ef,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,
+0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,
+0x16f8,0x16f8,0x16f8,0x16f8,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,
+0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,
+0x16fe,0x16fe,0x16fe,0x16fe,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,
+0x1740,0x1740,0x1740,0x1740,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,
+0x1956,0x1956,0x1956,0x1a22,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,
+0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,
+0x1761,0x1761,0x1761,0x1761,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
-0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,
-0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,
-0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
-0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
-0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,
-0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,
-0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b8,0x17b8,0x17b8,0x17b8,0x17b5,
-0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b8,0x17b8,0x17b8,
-0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b5,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,
-0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,
-0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,
-0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,
-0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x1881,0x1881,0x1881,
-0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,
-0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x1815,0x1815,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
-0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
-0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,
-0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,
-0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,
-0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1860,0x1860,0x1860,
-0x184b,0x184b,0x184b,0x184b,0x184b,0x184b,0x184b,0x184b,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,
-0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,
-0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1884,0x1881,
-0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x1884,0x1920,0x1920,0x1884,0x1884,0x1884,0x1884,0x1884,
-0x1884,0x1884,0x1881,0x187e,0x1884,0x1884,0x1884,0x1a85,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x187e,0x1881,
-0x1881,0x1881,0x1881,0x1881,0x191d,0x19fb,0x19fb,0x19fb,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,
-0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x1881,0x191d,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,
-0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,
-0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,
-0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,
-0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x18e4,0x18e4,0x18e4,0x18e4,0x1a37,0x1a37,0x18e7,0x18e7,
-0x18e7,0x18e7,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18e1,
-0x18d2,0x18d5,0x18d8,0x18ea,0x18ea,0x1986,0x18db,0x18db,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,
-0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,
-0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,
-0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x18f0,0x18f6,0x18f3,0x18f3,0x18f3,
-0x18f3,0x1902,0x1908,0x18f3,0x18f3,0x18f3,0x18f3,0x18ff,0x1905,0x18f3,0x18f3,0x18f3,0x18f3,0x18f3,0x18f3,0x18f3,
-0x18f3,0x18f3,0x18f3,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,
-0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,
-0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,
-0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x19fb,
-0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,
-0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,
-0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,
-0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x1926,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
-0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
-0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,
-0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,
-0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,
-0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,
-0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,
-0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,
-0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,
-0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,
-0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,
-0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,
-0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19da,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,
-0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,
-0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e0,0x19e0,0x19e0,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,
-0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,
-0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a3a,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,
-0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,
-0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a61,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,
-0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1aa0,0x1aa0,0x1a6a,0x1aa0,0x1a6a,0x1a6a,0x1a6a,0x1a6a,
-0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a6a,0x1a70,0x1a70,0x1a70,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,
-0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,
-0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0x1a7c,0,0,0,0
+0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x17a3,0x17a0,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
+0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
+0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
+0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,
+0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,
+0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
+0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
+0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,
+0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,
+0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,
+0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,
+0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c4,0x17c4,0x17c4,0x17c4,0x17c1,
+0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c4,0x17c4,0x17c4,
+0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c1,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,
+0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,
+0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,
+0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,
+0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,
+0x18c6,0x18c6,0x18c6,0x18c6,0x1b3f,0x1a94,0x1a94,0x1a97,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,
+0x17e2,0x1890,0x1890,0x1890,0x1890,0x1890,0x1890,0x192c,0x17df,0x17df,0x17df,0x17df,0x17df,0x188d,0x188d,0x188d,
+0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,
+0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x1890,0x188d,
+0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1890,0x192c,0x192c,0x1890,0x1890,0x1890,0x1890,0x1890,
+0x1890,0x1890,0x188d,0x180f,0x1890,0x1890,0x1890,0x1a94,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x180f,0x188d,
+0x188d,0x188d,0x188d,0x188d,0x1929,0x1a0a,0x1a0a,0x1a0a,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,
+0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x1929,0x1824,0x1824,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,
+0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,
+0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,
+0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,
+0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,
+0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x186f,0x186f,0x186f,
+0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,
+0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,
+0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
+0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
+0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,
+0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,
+0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,
+0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x18f0,0x18f0,0x18f0,0x18f0,0x1a46,0x1a46,0x18f3,0x18f3,
+0x18f3,0x18f3,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18ed,
+0x18de,0x18e1,0x18e4,0x18f6,0x18f6,0x1995,0x18e7,0x18e7,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,
+0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,
+0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,
+0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x18fc,0x1902,0x18ff,0x18ff,0x18ff,
+0x18ff,0x190e,0x1914,0x18ff,0x18ff,0x18ff,0x18ff,0x190b,0x1911,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,
+0x18ff,0x18ff,0x18ff,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,
+0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,
+0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,
+0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1a0a,
+0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,
+0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
+0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
+0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
+0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
+0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,
+0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,
+0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,
+0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,
+0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,
+0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,
+0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,
+0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,
+0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,
+0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,
+0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,
+0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,
+0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19ef,0x19ef,0x19ef,0x1a0a,0x1a0a,0x1a0a,0x1b3c,0x1b3c,0x1a94,0x1a94,0x1a94,
+0x1a94,0x1a94,0x1a94,0x1b3c,0x1b3c,0x1b3c,0x1a94,0x1a94,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0a,0x1a10,0x1a10,0x1a0a,
+0x1a10,0x1a10,0x1a94,0x1a97,0x1a94,0x1a94,0x1a94,0x1a94,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,
+0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,
+0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,
+0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,
+0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,
+0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1aaf,0x1aaf,0x1a79,0x1aaf,0x1a79,0x1a79,0x1a79,0x1a79,
+0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a7f,0x1a7f,0x1a7f,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,
+0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,
+0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
+0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
+0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,
+0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,
+0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,
+0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,
+0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
+0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
+0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0,0,0,0
};
static const UTrie2 propsVectorsTrie={
propsVectorsTrie_index,
- propsVectorsTrie_index+4952,
+ propsVectorsTrie_index+5024,
NULL,
- 4952,
- 25636,
+ 5024,
+ 26204,
0xa40,
- 0x13d8,
+ 0x1420,
0x0,
0x0,
0x110000,
- 0x7778,
+ 0x79f8,
NULL, 0, FALSE, FALSE, 0, NULL
};
-static const uint32_t propsVectors[6822]={
+static const uint32_t propsVectors[6999]={
0x67,0,0,0x67,0,0x4e00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,
0,0,0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0,
0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,
@@ -3342,447 +3402,459 @@ static const uint32_t propsVectors[6822]={
0,0,0x1f67,0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0,
0,0x2567,0,0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000,
0x2b67,0,0,0x2d67,0,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67,0,0,0x3b67,
-0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,0x4367,0,
-0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0,0x5067,0,0,
-0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867,
-0,0,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000,
-0x20,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6f67,0,0,
-0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867,
-0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0,
-0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,0,0x8567,0,0,
-0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67,0,0,0x8c67,
-0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0,
-0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0,
-0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367,
-0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0,
-0,0xa967,0,0,0xaa67,0,0x4e00000,0xab67,0,0x4e00000,0xac67,0,0,0xad67,0,0,
-0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb467,0,0,0xb567,
-0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,0,0,0xbc67,0,
-0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0,0xc167,0,0,
-0xc267,0,0,0xc367,0,0x4e00000,0xc467,0,0x4e00000,0xc667,0,0,0xc767,0,0,0xc867,
-0,0,0xc967,0,0,0xca67,0,0,0xcc67,0,0x4e00000,0xcf67,0,0x4e00000,0xd067,0,
-0x4e00000,0xd267,0,0,0xd367,0,0,0xd467,0,0,0xd567,0,0,0xd667,0,0,
-0xd867,0,0,0xd967,0,0,0xda67,0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,
-0,0,0xde67,0,0,0xdf67,0,0,0xe067,0,0,0xe167,0,0,0xe267,0,
-0,0xe367,0,0x4e00000,0xe467,0,0,0xe567,0,0,0xe667,0,0,0xe767,0,0,
-0xe867,0,0,0xe967,0,0,0xea67,0,0,0xeb67,0,0,0xec67,0,0,0xed67,
-0,0,0xee67,0,0,0xef67,0,0,0xf167,0,0,0xf367,0,0,0xf567,0,
-0,0xf667,0,0,0xf767,0,0,0xf867,0,0,0xf967,0,0,0xfa67,0,0x4e00000,
-0xfb67,0,0,0xfc67,0,0,0xfd67,0,0,0xfe67,0,0,0x10167,0,0,0x10267,
-0,0,0x10367,0,0,0x10467,0,0,0x10567,0,0x4e00000,0x10667,0,0,0x10767,0,
-0,0x10867,0,0,0x10967,0,0,0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,
-0x10d67,0,0,0x10e67,0,0,0x10f67,0,0,0x11067,0,0,0x11167,0,0,0x11367,
-0,0,0x11467,0,0,0x11567,0,0,0x11667,0,0,0x11767,0,0,0x11867,0,
-0,0x11967,0,0x4e00000,0x11a67,0,0,0x11b67,0,0,0x11c67,0,0,0x11d67,0,0,
-0x11e67,0,0,0x11f67,0,0,0x12067,0,0,0x12167,0,0,0x12267,0,0,0x12367,
-0,0,0x12467,0,0,0x12567,0,0,0x12667,0,0,0x12767,0,0,0x12867,0,
-0,0x12967,0,0,0x12a67,0,0x4e00000,0x12b67,0,0,0x12c67,0,0,0xa0067,0,0xe00000,
-0xa4667,0,0xe00000,0xa4767,0,0xe00000,0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,
-0,0xe00000,0xad167,0,0xe00000,0xb0067,0,0xe00000,0xb1267,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,
-0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,
-0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x14200000,0x11000200,0x24000008,0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,
-0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,
-0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,
-0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,0x230400,0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,
-0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,
-0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,
-0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,
-0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,
-0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,
-0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x200400,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,
-0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,
-0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00,0x80000000,0x218960,0x11000c02,0x2802100,0x962460,
-0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,
-0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,
-0x230400,0x11000f01,0x2802400,0x962460,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,
-0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,
-0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,
-0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,
-0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,
-0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,
-0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,
-0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,
-0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,
-0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,
-0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,
-0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,
-0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,
-0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,
-0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,
-0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,
-0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,
-0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,
-0x445801,0x11002800,0x4000001,0x445802,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,
-0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,
-0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,
-0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x15248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0xaa65620,
-0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,
-0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,
-0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,
-0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,
-0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,
-0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,
-0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x14200000,0x11002f00,
-0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002,0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,
-0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x14200000,0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,
-0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,
-0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000,0x14200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,
-0x4200000,0x11003700,0x24000000,0x4e00000,0x11003700,0x24000000,0x14200000,0x11003700,0x24000000,0x14e00000,0x11003700,0x24000000,0x96800000,0x11003700,0x24000020,0x4200000,
-0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x4200000,0x11003800,
-0x24000000,0x4e00000,0x11003800,0x24000000,0x14200000,0x11003800,0x24000000,0x14b00000,0x11003800,0x24000000,0x14e00000,0x11003800,0x24000000,0x96800000,0x11005003,0x7c00100,
-0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,
-0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,
-0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,
-0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,
-0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,
-0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,
-0x14200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,
-0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,
-0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,
-0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,
-0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,
-0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,
-0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,
-0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,
-0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,
-0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1410000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,
-0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,
-0x24000020,0x100000,0x11022e00,0x24000020,0x14100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,
-0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x14150403,
-0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x14100000,0x11023700,
-0x24000000,0x4100000,0x11023700,0x24000000,0x4e00000,0x11023700,0x24000000,0x14100000,0x11023700,0x24000000,0x14e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020,
-0x4100000,0x11023700,0x24000020,0x14100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,
-0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,
-0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x445811,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,
-0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,
-0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,
-0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe29811,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,
-0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x19329800,
-0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,
-0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,
-0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,
-0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,
-0x44000001,0x1a45800,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,
-0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,
-0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x34e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000,0x34200000,0x110a3d00,
-0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,
-0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,
-0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,
-0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,
-0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,
-0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,
-0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,
-0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,
-0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,
-0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e,0x4000010,
-0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c17,0x7c00900,0x230400,0x11400f42,0xc000010,0x448000,0x11400f56,0xc000010,0x448000,0x11401d8b,0x4000000,0x200000,
-0x11403dbf,0x4000000,0xe00000,0x114457b4,0x4000004,0x120000a,0x114457b4,0x4000008,0x81000a,0x114457b4,0x4000008,0x141000a,0x114457b4,0x4000010,0x87000a,0x114457b4,
-0xc000010,0x84800a,0x114457bd,0x3802500,0x126246a,0x114457bd,0x7c00d00,0x2530c0a,0x114a3db4,0x24000000,0x810000,0x114a3db4,0x24000000,0x1410000,0x114a3db4,0x24000008,
-0x810000,0x114a3db4,0x24000008,0x1410000,0x114a3db4,0x24000010,0x870000,0x114a3db4,0x2c000010,0x848000,0x114a3dba,0x4000000,0xe00000,0x114a3dba,0x24000000,0xe00000,
-0x114a3dba,0x24000002,0x1200000,0x114a3dba,0x24000002,0x14e00000,0x114a3dba,0x24000008,0x810000,0x114a3dba,0x24000008,0x1410000,0x114a3dbd,0x7c00900,0x930c00,0x114a3dbd,
-0x7c00900,0xe30c00,0x114a3dbf,0x7c00300,0xe30000,0x114a3ebd,0x7000400,0x1200c02,0x114a3fb4,0x4000004,0x1200000,0x114a3fbd,0x7c00d00,0x2530c00,0x114a42bf,0x4000000,
-0xe00000,0x114a42bf,0x4000000,0xe0000f,0x114a44bf,0x4000000,0xe00002,0x114a44bf,0x4000000,0xe00003,0x114a44bf,0x4000000,0x14e00003,0x114a45bf,0x4000000,0xe00002,
-0x114a45bf,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c1f,0x2802100,0x962460,0x11800c1f,0x2802500,0x962460,0x11800f29,0x2802400,0x962460,0x11800f36,
-0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3dc0,0x2802400,0x962460,0x118a3ebd,0x2802400,0x962460,0x11c00904,0x2802400,
-0x962460,0x11c00908,0x2802400,0x962460,0x11c00c23,0x6800000,0x1329800,0x11c00c27,0xc000010,0xb48000,0x11c00f6f,0x6800000,0x1329800,0x11c01074,0x6800000,0x1329800,
-0x11c01178,0x6800000,0x1329800,0x11c0127c,0x6800000,0x1329800,0x11c01480,0x4000000,0x200000,0x11c01480,0x6800000,0x1329800,0x11c01684,0x6800000,0x1329800,0x11c05123,
-0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,
-0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,
-0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,
-0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,
-0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900000,0x20004c67,0,0x1900000,
-0x20004d67,0,0x1900000,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,
-0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,
-0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500,0x230400,
-0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,
-0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0x2802100,
-0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,
-0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,
-0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,
-0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,
-0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,
-0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,
-0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000000,0x200000,
-0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x445800,0x3000221d,
-0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,
-0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,
-0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,
-0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,
-0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,
-0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x15248002,0x30002a00,
-0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002b01,0x2000,0x8962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x14220405,0x30002d19,0x7c00100,
-0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003000,0x24000000,0x4200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,
-0x30003700,0x24000000,0x4200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701,
-0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,
-0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,
-0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x30402591,0x4000010,0x400000,0x30402591,0x4000010,0xb70000,0x30402591,0xc000010,0xb48000,0x304028af,
-0x4000001,0xc41c0b,0x304a3dbf,0x4000000,0xe00000,0x30800c1f,0x2802100,0x962460,0x30c01c89,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,
-0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,
-0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,
-0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,
-0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x8962460,0x31006000,0x180000,0x918820,
-0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,
-0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,
-0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x445802,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,
-0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,
-0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,
-0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,
-0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,0x24000020,0x14200000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x4100000,0x32003700,
-0x24000000,0x4200000,0x32003700,0x24000000,0x14200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,
-0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,
-0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,
-0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,
-0x14200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,
-0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32026c01,0x12882000,0x8962460,0x32065700,
-0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,
-0x1410000,0x320a3600,0x24000020,0x34200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,
-0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x3240638d,0xc000010,0x448000,0x324a3dc2,
-0x4000000,0x14e00000,0x324a3dc2,0x7c00100,0x1230400,0x324a3fbd,0x4000002,0x1200c00,0x324a53ba,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,
-0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,
-0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,
-0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,
-0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,
-0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,
-0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x14200000,0x40003000,0x24000020,
-0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x4200000,0x40003700,0x24000000,0x14200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,
-0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,
-0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,
-0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,
-0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x14200000,0x40007400,0x4000000,0x200000,0x40007531,
-0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,
-0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,
-0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x34200000,0x400a3700,0x24000000,0x34e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412,
-0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077f6,0x4000000,
-0x200000,0x404077f9,0x4000000,0x200000,0x404077f9,0x4000000,0x400000,0x40c01480,0x4000000,0x200000,0x40c05123,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,
-0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,
-0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0x1500000,0x41000c02,0xc000010,
-0xb48000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,
-0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802400,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,
-0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,
-0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x4200000,0x41003700,0x24000000,0x14200000,0x41003700,0x24000000,0x14e00000,0x41005d00,0x7c00120,0x220405,
-0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,
-0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,
-0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,
-0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,
-0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,
-0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,
-0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,0x4000400,0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,
-0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,
-0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,
-0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,
-0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x34200000,0x410a3700,0x24000000,
-0x34e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,
-0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,
-0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a82bf,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01480,0x6800000,0x1329800,0x50000419,0x7c00100,
-0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,
-0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,
-0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x4200000,0x50005d00,0x7c00120,
-0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,
-0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,
-0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,
-0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,
-0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,
-0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,
-0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,
-0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409abf,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,
-0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,
-0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,
-0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,
-0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802500,
-0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,
-0x51001c1c,0x6800500,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,
-0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x4200000,0x51003700,0x24000000,0x4e00000,0x51005201,0x2802400,
-0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,
-0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,
-0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,
-0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,
-0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000400,0x200400,0x51009500,
-0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,
-0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,
-0x51009c52,0x2802400,0x962460,0x51009c52,0x2802d00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,
-0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,
-0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,
-0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,
-0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,
-0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,
-0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,
-0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,
-0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,
-0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,
-0x7c00100,0x230400,0x5100aa00,0x4000000,0x4e00000,0x5100ab00,0x4000000,0x4e00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,
-0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x34200000,0x510aaa00,0x4000000,0x34e00000,0x5140a2f1,0x4000400,0x400000,0x514a82bf,0x4000000,0xe00000,
-0x51802bb1,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,
-0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800500,
-0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,
-0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,
-0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,
-0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,
-0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ac7e,0xc000010,0x248000,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,
-0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,
-0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,
-0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,
-0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,
-0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,
-0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,
-0x6800500,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,
-0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,
-0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,
-0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,
-0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,
-0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,
-0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,
-0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,
-0x5200c178,0x80000000,0x218960,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,
-0x4000000,0x100006,0x52023700,0x24000000,0x4100000,0x52023700,0x24000000,0x4e00000,0x52023700,0x24000000,0x14100000,0x52023700,0x24000000,0x14e00000,0x52023700,0x24000000,
-0x96800000,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,
-0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x14150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,
-0x24000000,0x34e00000,0x520a3800,0x24000000,0x34100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x34100000,0x520ab412,0x7c00100,
-0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x34e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,
-0x5240af93,0x7c00100,0x230400,0x5240af98,0x4000400,0x200000,0x5240af9a,0x6800400,0x962540,0x5240af9a,0x7c00100,0x230400,0x5240afa4,0x7c00100,0x230400,0x5240afa6,
-0x7c00100,0x230400,0x5240b2c5,0x4000000,0x200000,0x5240b2c5,0x4000000,0x1500000,0x5240b2d0,0x4000000,0x200000,0x5240b2de,0x4000000,0x200000,0x5240b5f4,0x7c00900,
-0x230400,0x524a44bf,0x4000000,0xe00003,0x5280af93,0x2802400,0x962460,0x5280af94,0x2802400,0x962460,0x5280af9a,0x2802400,0x962460,0x5280af9c,0x2802400,0x962460,
-0x5280af9e,0x2802400,0x962460,0x52c0b3eb,0x2802400,0x962460,0x52c0b3ef,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,
-0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,
-0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802400,0x962460,0x60002919,0x7c00100,0x22040e,
-0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x14200000,0x60003000,0x24000000,0x14e00000,0x60003700,0x24000000,0x4200000,0x60003800,0x24000000,0x1710000,0x60005102,
-0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,
-0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,
-0x6000c300,0x4000000,0x3a703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,
-0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,
-0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,
-0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0x4e00000,0x6000d000,
-0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,
-0x14150400,0x600a3000,0x24000000,0x34200000,0x600a3000,0x24000000,0x34e00000,0x600a3700,0x24000000,0x34200000,0x600a3800,0x24000000,0x34200000,0x600a3800,0x24000000,0xb6800000,
-0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x34100000,0x600ac400,0x4000000,0x14e0000d,0x600ac400,0x4000000,0x34e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,
-0x7c00100,0xe30c00,0x600acc00,0x4000000,0x34e00000,0x600acd00,0x4000000,0x34200000,0x600acd00,0x4000000,0x34e00000,0x600acd00,0x4000000,0xb6800000,0x600ace00,0x4000000,
-0x34e00000,0x600ace00,0x4000000,0xb6800000,0x600acf00,0x4000000,0x34e00000,0x600acf00,0x4000000,0xb6800000,0x600ad111,0x7c40300,0xe30000,0x604ac4bf,0x4000000,0x34e00003,
-0x61000a03,0x4000000,0x1600000,0x61000c02,0x80000000,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,
-0x7c00100,0x250400,0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,
-0x200000,0x61008e00,0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,
-0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,
-0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,
-0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,
-0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,
-0x2806400,0x962460,0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,
-0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c,0x2802500,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,
-0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,
-0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,
-0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,
-0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x34e00000,0x6140af98,
-0x7c00100,0x230400,0x6140af9a,0x7c00100,0x230400,0x6180af95,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c15,0x80000,
-0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400,
-0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320,
-0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x14200000,0x70003800,0x24000000,
-0x4e00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,
-0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,
-0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,
-0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400,
-0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802500,0x1862460,0x7000b61c,
-0x6800500,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0x4e00000,0x7000cd00,0x4000000,
-0x200000,0x7000cd00,0x4000000,0x4200000,0x7000cd00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x14200000,0x7000cd00,0x4000000,0x14e00000,0x7000cd00,0x4000000,0x96800000,
-0x7000cf00,0x4000000,0x4e00000,0x7000cf00,0x4000000,0x14e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,
-0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,
-0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,
-0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,
-0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,
-0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,
-0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,
-0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e,0x7c00100,
-0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,
-0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,
-0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,
-0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,
-0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802500,0x1862460,0x7000ee1c,
-0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,
-0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,
-0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802400,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,
-0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,
-0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,
-0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,
-0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,
-0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,
-0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,
-0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x34e00000,0x700acd00,0x4000000,0xb6800000,0x700ace00,0x4000000,0x34e00000,0x700acf00,0x4000000,
-0x34e00000,0x700acf00,0x4000000,0xb6800000,0x7040dffb,0x4000000,0x200000,0x7040f7ff,0x80000,0x918820,0x7080af98,0x2802400,0x962460,0x7080dffb,0x2802400,0x962460,
-0x70c0e4fd,0x2802100,0x962460,0x70c0e4fd,0x2802400,0x962460,0x70c0e4fd,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a,
-0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400,
-0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400,
-0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0x4e00000,0x8000d202,
-0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802000,0x962460,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,
-0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,
-0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,
-0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,
-0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,
-0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,
-0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010,
-0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x34e00000,0x800acd00,0x4000000,0x7a902460,0x800ace00,0x4000000,0x34e00000,0x800acf00,0x4000000,0x34e00000,
-0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x34e00000,0x800b0500,0x4000000,0xb6800000,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a,
-0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100,
-0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400,
-0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7,
-0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000,
-0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400,
-0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9,
-0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400,
-0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800,
-0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,
-0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x34e00000,0x900acd00,0x4000000,0xb6800000,0x900acf00,0x4000000,0x34e00000,0x900b0500,0x4000000,
-0xe00000,0x900b0500,0x4000000,0x34e00000,0x900b0500,0x4000000,0xb6800000,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000,
-0x90408e06,0x24000000,0x400000,0xa0001004,0x4000000,0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100,0x962460,0xa000120f,0x2802400,0x962460,0xa000171a,
-0x2802100,0x962460,0xa000171a,0x2806400,0x962460,0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000,0xa000581e,0x7c00100,0x230400,0xa0007300,0x24000000,
-0x200000,0xa0008301,0x2802400,0x962460,0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0x4e00000,0xa0010500,0x4000000,0x200000,0xa00114af,0x2802100,0x962460,
-0xa00114af,0x2802400,0x962460,0xa00114af,0x2806400,0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100,0x230400,0xa00114af,0x7c00100,0x230560,0xa00116b0,
-0x2802100,0x962460,0xa00116b0,0x2802800,0x962460,0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000,0xa00116b0,0x4000000,0x500000,0xa00116b0,0x4000010,
-0x400000,0xa00116b0,0x6800100,0x962540,0xa00116b0,0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0,0xc000010,0x448000,0xa0011722,0x7c00100,0x230400,
-0xa00118b1,0x2802000,0x962460,0xa00118b1,0x2802100,0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000,0x200000,0xa00118b1,0x4000000,0x400000,0xa00118b1,
-0x4000000,0x500000,0xa00118b1,0x6800100,0x962540,0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560,0xa00118b1,0xc000010,0x448000,0xa00a4005,0x7c00100,
-0xe30400,0xa00a4711,0x7c40300,0xe30000,0xa00ac400,0x4000000,0x4e00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00,0x4000000,0x34e00000,0xa00b0500,0x4000000,0x34e00000,
-0xa00b0500,0x4000000,0xb6800000,0xa00b0b96,0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100,0xe30000,0xa00b1596,0x7c00300,0xe30000,0xa040afae,
-0x6800400,0x962540,0xb0000a03,0x7c00100,0x220400,0xb0000b13,0x7c00100,0x2633800,0xb0001004,0x2802000,0x962460,0xb0001110,0x4000000,0x200000,0xb0001524,0x2802000,
-0x962460,0xb0001615,0x4000000,0x500000,0xb000251b,0x7c00100,0x230400,0xb0007300,0x24000000,0x200000,0xb0008939,0x4000000,0x200000,0xb0008939,0x7c00100,0x230400,
-0xb0008e00,0x24000000,0x200000,0xb0008e00,0x24000000,0x400000,0xb0008e00,0x24000010,0x400000,0xb0009257,0x2802000,0x962460,0xb0009257,0x4000000,0x1600000,0xb0009519,
-0x7c00100,0x220400,0xb0009519,0x7c00100,0x250400,0xb0009a00,0x4000000,0x200000,0xb000b30a,0x2802100,0x962460,0xb000b30a,0x7c00100,0x230400,0xb000c178,0x80000000,
-0x218960,0xb000c300,0x4000000,0x4200000,0xb000d202,0x2802000,0x962460,0xb000d476,0x6800100,0x962540,0xb000d476,0x7c00100,0x230400,0xb000e300,0x4000000,0x4e00000,
-0xb000fda1,0x7c00100,0x1830000,0xb0010eaa,0x2802000,0x962460,0xb00116b0,0x7c00100,0x230400,0xb0011900,0x4000000,0x4e00000,0xb0011ab2,0x2802100,0x962460,0xb0011ab2,
-0x2802400,0x962460,0xb0011ab2,0x2806400,0x962460,0xb0011ab2,0x4000000,0x200000,0xb0011ab2,0x6800100,0x962540,0xb0011ab2,0x7c00100,0x230400,0xb0011b0c,0x7c00100,
-0x230400,0xb0011cb3,0x2802100,0x962460,0xb0011cb3,0x2806400,0x962460,0xb0011cb3,0x6800000,0x1329800,0xb0011cb3,0x6800100,0x962540,0xb0011cb3,0x7c00100,0x230400,
-0xb0011db6,0x2802500,0x962460,0xb0011db6,0x6800000,0x1329800,0xb0011db6,0x7c00100,0x230400,0xb0011db6,0x7c00500,0x230400,0xb0011e00,0x4000000,0x200000,0xb0011e00,
-0x4000000,0x1500000,0xb0011fb4,0x2802100,0x962460,0xb0011fb4,0x6800100,0x962540,0xb0011fb4,0x7c00100,0x230400,0xb0011fb4,0xc000010,0x248000,0xb0012000,0x4000000,
-0x200000,0xb00121b5,0x4000000,0x200000,0xb00121b5,0x4000010,0x400000,0xb00121b5,0x7c00100,0x220400,0xb00121b5,0x7c00100,0x250400,0xb00121b5,0xc000010,0x448000,
-0xb00122b8,0x4000000,0x200000,0xb00122b8,0x7c00100,0x230400,0xb00123b7,0x2802400,0x962460,0xb00123b7,0x4000000,0x200000,0xb00123b7,0x7c00100,0x230400,0xb00123b7,
-0xc000010,0x248000,0xb00a4005,0x7c00100,0xe30400,0xb00a4711,0x7c40300,0xe30000,0xb00acf00,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x34e00000,0xb00b0500,0x4000000,
-0x3ce00000,0xb00b0500,0x4000000,0xb6800000,0xb00b109a,0x7c00300,0xe30000,0xb080e47e,0x2802000,0x962460,0xc0001524,0x4000000,0x500000,0xc0001a18,0x2806400,0x1862460,
-0xc0001a18,0x7c00100,0x1830000,0xc0007300,0x24000000,0x200000,0xc0008e00,0x24000010,0x400000,0xc0009519,0x7c00100,0x220400,0xc0009519,0x7c00100,0x250400,0xc000c300,
-0x4000000,0x420000f,0xc000d85c,0x2802100,0x962460,0xc000d85c,0x6800100,0x962540,0xc000d85c,0x7c00100,0x230400,0xc000dc99,0x7c00100,0x230400,0xc000e719,0x7c00100,
-0x220400,0xc00107a7,0x7c00100,0x230400,0xc0010eaa,0x7c00100,0x230400,0xc00116b0,0x7c00100,0x230560,0xc0011900,0x4000000,0x4200000,0xc0012447,0,0x818820,
-0xc0012447,0,0xc18820,0xc0012447,0,0x1418820,0xc00125b9,0x7c00100,0x230400,0xc00126bb,0x2802100,0x962460,0xc00126bb,0x2806400,0x962460,0xc00126bb,
-0x4000000,0x500000,0xc00126bb,0x6800100,0x962540,0xc00126bb,0x7c00100,0x230400,0xc00127ba,0x2802400,0x962460,0xc00127ba,0x4000000,0x200000,0xc00127ba,0x6800000,
-0x1329800,0xc00127ba,0x7c00100,0x230400,0xc00127ba,0x7c00900,0x230400,0xc0012800,0x4000000,0x200000,0xc0012b23,0x4000000,0x200000,0xc0012b23,0x4000000,0x400000,
-0xc0012b23,0x4000000,0x1500000,0xc0012cbc,0x2802400,0x962460,0xc0012cbc,0x4000000,0x1600000,0xc0012cbc,0x6800000,0x1329800,0xc0012cbc,0x7c00100,0x230400,0xc00acf00,
-0x4000000,0x34e00000,0xc00ae300,0x4000000,0x34e00000,0xc00b0500,0x4000000,0x34e00000,0xc00b0500,0x4000000,0xb6800000,0xc00b0b00,0x4000000,0x1200000,0xc00b0b00,0x7c00900,
-0x1230400,0xc00b109a,0x7c00300,0xe30000,0xc00b2914,0x7c00100,0x2530000,0xc00b2916,0x7c00100,0x2530c00,0xc00b2a00,0x4000000,0x34e00000,0xc040af55,0x7c00100,0x230400,
-0xc0c12b80,0x4000000,0x200000,0xc14a44bf,0x4000000,0xe0000d};
+0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,0x4467,0,
+0,0x4867,0,0,0x4967,0,0,0x4a67,0,0,0x5067,0,0,0x5167,0,0,
+0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867,0,0,0x5967,
+0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000,0x20,0x6267,0,
+0,0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6f67,0,0,0x7067,0,0,
+0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867,0,0,0x7a67,
+0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0,0,0x8167,0,
+0,0x8267,0,0,0x8367,0,0,0x8467,0,0,0x8567,0,0,0x8667,0,0,
+0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67,0,0,0x8c67,0,0,0x8e67,
+0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0,0,0x9367,0,
+0,0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0,0x9967,0,0,
+0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367,0,0,0xa467,
+0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0,0,0xa967,0,
+0,0xaa67,0,0x4e00000,0xab67,0,0x4e00000,0xac67,0,0,0xad67,0,0,0xae67,0,0,
+0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb467,0,0,0xb567,0,0,0xb767,
+0,0,0xb867,0,0,0xb967,0,0,0xba67,0,0,0xbc67,0,0,0xbd67,0,
+0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0,0xc167,0,0,0xc267,0,0,
+0xc367,0,0x4e00000,0xc467,0,0x4e00000,0xc667,0,0,0xc767,0,0,0xc867,0,0,0xc967,
+0,0,0xca67,0,0,0xcc67,0,0x4e00000,0xcf67,0,0x4e00000,0xd067,0,0x4e00000,0xd267,0,
+0,0xd367,0,0,0xd467,0,0,0xd567,0,0,0xd667,0,0,0xd867,0,0,
+0xda67,0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,0xde67,0,0,0xdf67,
+0,0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0x4e00000,0xe467,0,
+0,0xe567,0,0,0xe667,0,0,0xe767,0,0,0xe867,0,0,0xe967,0,0,
+0xea67,0,0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,0xee67,0,0,0xef67,
+0,0,0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,0,0,0xf767,0,
+0,0xf867,0,0,0xf967,0,0,0xfa67,0,0x4e00000,0xfb67,0,0,0xfc67,0,0,
+0xfd67,0,0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,0x10367,0,0,0x10467,
+0,0,0x10567,0,0x4e00000,0x10667,0,0,0x10767,0,0,0x10867,0,0,0x10967,0,
+0,0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,
+0x10f67,0,0,0x11067,0,0,0x11367,0,0,0x11467,0,0,0x11567,0,0,0x11667,
+0,0,0x11767,0,0,0x11867,0,0,0x11967,0,0x4e00000,0x11a67,0,0,0x11b67,0,
+0,0x11c67,0,0,0x11d67,0,0,0x11e67,0,0,0x11f67,0,0,0x12067,0,0,
+0x12167,0,0,0x12267,0,0,0x12367,0,0,0x12467,0,0,0x12567,0,0,0x12667,
+0,0,0x12767,0,0,0x12867,0,0,0x12967,0,0,0x12a67,0,0x4e00000,0x12b67,0,
+0,0x12c67,0,0,0x12d67,0,0,0x12f67,0,0,0x13067,0,0,0x13167,0,0,
+0x13267,0,0,0x13367,0,0,0x13467,0,0,0xa0067,0,0xe00000,0xa4767,0,0xe00000,0xa4f67,
+0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067,0,
+0xe00000,0xb1267,0,0xe00000,0xb2e67,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,
+0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,
+0x24000000,0x14200000,0x11000200,0x24000008,0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,
+0x220401,0x11000319,0x7c00100,0x220402,0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,
+0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,
+0x7c00100,0x220400,0x11000519,0x7c00100,0x230400,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,
+0x230400,0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,
+0x11000800,0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,
+0x4000400,0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,
+0x250400,0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,
+0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200400,0x11000a03,0x4000000,0x201000,0x11000a03,
+0x4000000,0x270000,0x11000a03,0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000a03,0xc000010,
+0x1049400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,
+0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00,0x80000000,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,
+0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,
+0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000f01,0x2802400,0x962460,
+0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,
+0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,
+0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,
+0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,
+0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,
+0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,
+0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,
+0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,
+0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,
+0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,
+0x2802100,0x962460,0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,
+0x230400,0x11001900,0x4000000,0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,
+0x11001926,0x4000010,0x400000,0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,
+0x7e00100,0x1830000,0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,
+0x1830000,0x11001a18,0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,
+0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,
+0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,
+0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x445801,0x11002800,0x4000001,0x445802,
+0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,
+0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,
+0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,
+0x11002800,0x2c000010,0x15248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0xaa65620,0x11002801,0x82000,0x962460,0x11002900,
+0x4000000,0x20000e,0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,
+0x81000f,0x11002900,0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,
+0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,
+0x4000000,0x200002,0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,
+0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,
+0x11002d00,0x4000000,0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,
+0x24000000,0x200000,0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x14200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,
+0x200001,0x11002f00,0x24000020,0x200002,0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,
+0x11003000,0x24000000,0x14200000,0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,
+0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,
+0x200000,0x11003600,0x24000000,0x14200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0x4200000,0x11003700,0x24000000,0x4e00000,
+0x11003700,0x24000000,0x14200000,0x11003700,0x24000000,0x14e00000,0x11003700,0x24000000,0x96800000,0x11003700,0x24000020,0x4200000,0x11003800,0x4000000,0x100000,0x11003800,
+0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x4200000,0x11003800,0x24000000,0x4e00000,0x11003800,0x24000000,
+0x14200000,0x11003800,0x24000000,0x14b00000,0x11003800,0x24000000,0x14e00000,0x11003800,0x24000000,0x96800000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,
+0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,
+0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,
+0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,
+0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,
+0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,
+0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x14200000,0x11020200,0x24000020,0x100000,
+0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,
+0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,
+0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200400,0x11020600,0x7c00500,0x130400,
+0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,
+0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,
+0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,
+0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,
+0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,
+0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,
+0x11022c00,0x4000000,0x1410000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,
+0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,
+0x14100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,
+0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x14150403,0x11023400,0x24000000,0x100000,0x11023500,
+0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x14100000,0x11023700,0x24000000,0x4100000,0x11023700,0x24000000,
+0x4e00000,0x11023700,0x24000000,0x14100000,0x11023700,0x24000000,0x14e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x4100000,0x11023700,0x24000020,0x14100000,
+0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,
+0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,
+0x2530c0a,0x11063d00,0x4000001,0x445811,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,
+0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,
+0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,
+0xe01c11,0x11065700,0x6800040,0xe29811,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,
+0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x19329800,0x11080100,0x24000000,0x200000,0x11080100,
+0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,
+0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,
+0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,
+0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a45800,0x11080119,0x7c00100,
+0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,
+0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,
+0x24000000,0x34e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000,0x34200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,
+0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,
+0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,
+0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,
+0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,
+0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,
+0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,
+0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,
+0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,
+0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,
+0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400c0c,0x4000010,0xb00000,0x11400c0c,0x4000010,0x1071400,0x11400c0c,0xc000010,0xb48000,0x11400c16,0x7c00900,0x230400,
+0x11400f40,0xc000010,0x448000,0x11400f54,0xc000010,0x448000,0x11401d89,0x4000000,0x200000,0x11403dbf,0x4000000,0xe00000,0x114457b4,0x4000004,0x120000a,0x114457b4,
+0x4000008,0x81000a,0x114457b4,0x4000008,0x141000a,0x114457b4,0x4000010,0x87000a,0x114457b4,0xc000010,0x84800a,0x114457bd,0x3802500,0x126246a,0x114457bd,0x7c00d00,
+0x2530c0a,0x114a3db4,0x24000000,0x810000,0x114a3db4,0x24000000,0x1410000,0x114a3db4,0x24000008,0x810000,0x114a3db4,0x24000008,0x1410000,0x114a3db4,0x24000010,0x870000,
+0x114a3db4,0x2c000010,0x848000,0x114a3dba,0x4000000,0xe00000,0x114a3dba,0x24000000,0xe00000,0x114a3dba,0x24000002,0x1200000,0x114a3dba,0x24000002,0x14e00000,0x114a3dba,
+0x24000008,0x810000,0x114a3dba,0x24000008,0x1410000,0x114a3dbd,0x7c00900,0x930c00,0x114a3dbd,0x7c00900,0xe30c00,0x114a3dbf,0x7c00300,0xe30000,0x114a3ebd,0x7000400,
+0x1200c02,0x114a3fb4,0x4000004,0x1200000,0x114a3fbd,0x7c00d00,0x2530c00,0x114a42bf,0x4000000,0xe00000,0x114a42bf,0x4000000,0xe0000f,0x114a44bf,0x4000000,0xe00002,
+0x114a44bf,0x4000000,0xe00003,0x114a44bf,0x4000000,0x14e00003,0x114a45bf,0x4000000,0xe00002,0x114a45bf,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c1e,
+0x2802100,0x962460,0x11800c1e,0x2802500,0x962460,0x11800f27,0x2802400,0x962460,0x11800f34,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,
+0x962460,0x118a3dc0,0x2802400,0x962460,0x118a3ebd,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c20,0xc000010,0xb48000,
+0x11c00c23,0x6800000,0x1329800,0x11c00f6d,0x6800000,0x1329800,0x11c01072,0x6800000,0x1329800,0x11c01176,0x6800000,0x1329800,0x11c0127a,0x6800000,0x1329800,0x11c0147e,
+0x4000000,0x200000,0x11c0147e,0x6800000,0x1329800,0x11c01682,0x6800000,0x1329800,0x11c051fa,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,
+0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,
+0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,
+0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,
+0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,
+0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900000,0x20004c67,0,0x1900000,0x20004d67,0,0x1900000,0x20006d67,0x1000,0,0x20006e67,
+0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,
+0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,
+0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200400,0x3000080e,0x7c00100,0x220400,0x30000908,
+0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,
+0x400400,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,
+0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,
+0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,
+0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,
+0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,
+0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,
+0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,
+0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000000,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,
+0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x445800,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,
+0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,
+0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,
+0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,
+0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,
+0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,
+0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x15248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002b01,0x2000,
+0x8962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x14220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,
+0x30003000,0x24000000,0x4200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x4200000,0x3000392e,0x24000000,0x200000,0x30005013,
+0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,
+0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,
+0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x3040258f,
+0x4000010,0x400000,0x3040258f,0x4000010,0xb70000,0x3040258f,0xc000010,0xb48000,0x304028af,0x4000001,0xc41c0b,0x304a3dbf,0x4000000,0xe00000,0x30800c1e,0x2802100,
+0x962460,0x30c01c87,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,
+0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,
+0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,
+0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,
+0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x8962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,
+0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,
+0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,
+0x32002800,0x4000001,0x445802,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,
+0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,
+0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,
+0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,
+0x24000020,0x14200000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x4100000,0x32003700,0x24000000,0x4200000,0x32003700,0x24000000,0x14200000,0x32003800,0x24000000,
+0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,
+0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,
+0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,
+0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x14200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,
+0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,
+0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32026c01,0x12882000,0x8962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,
+0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x34200000,0x320a3d11,0x7c00100,0x1230400,
+0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,
+0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x3240638b,0xc000010,0x448000,0x324a3dc2,0x4000000,0x14e00000,0x324a3dc2,0x7c00100,0x1230400,0x324a3fbd,0x4000002,
+0x1200c00,0x324a53ba,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,
+0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,
+0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,
+0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,
+0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,
+0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,
+0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x14200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x4200000,
+0x40003700,0x24000000,0x14200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,
+0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,
+0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,
+0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,
+0x24000000,0x200000,0x40007300,0x24000000,0x14200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,
+0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,
+0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,
+0x24000000,0x34200000,0x400a3700,0x24000000,0x34e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,
+0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077fc,0x4000000,0x200000,0x404077ff,0x4000000,0x200000,0x404077ff,0x4000000,0x400000,
+0x40c0147e,0x4000000,0x200000,0x40c051fa,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,
+0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,
+0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0x1500000,0x41000c02,0xc000010,0xb48000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,
+0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802400,0x962460,0x41001f0b,
+0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,
+0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x4200000,
+0x41003700,0x24000000,0x14200000,0x41003700,0x24000000,0x14e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,
+0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,
+0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,
+0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,
+0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,
+0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,
+0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,
+0x4000400,0x200400,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,
+0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,
+0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,
+0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,
+0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x34200000,0x410a3700,0x24000000,0x34e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,
+0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,
+0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x41408ac5,0x4000400,
+0x200000,0x414a82bf,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c0147e,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,
+0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,
+0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,
+0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x4200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,
+0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,
+0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,
+0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,
+0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,
+0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,
+0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,
+0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,
+0x7c00100,0x230400,0x50409abf,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,
+0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,
+0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,
+0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,
+0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802500,0x1862460,0x51001c1c,0x2806400,0x1862460,
+0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800500,0x1862400,0x51001c1c,
+0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,
+0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x4200000,0x51003700,0x24000000,0x4e00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,
+0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,
+0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,
+0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,
+0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,
+0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000400,0x200400,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,
+0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,
+0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,
+0x2802d00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,
+0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,
+0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,
+0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,
+0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,
+0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,
+0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,
+0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,
+0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,
+0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,
+0x4e00000,0x5100ab00,0x4000000,0x4e00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,
+0x510a7300,0x24000000,0x34200000,0x510aaa00,0x4000000,0x34e00000,0x5140a2f3,0x4000400,0x400000,0x514a82bf,0x4000000,0xe00000,0x51802bb1,0x2802000,0x962460,0x51c00908,
+0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,
+0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800500,0x1862400,0x52001e12,0x7c00100,0x2230500,
+0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,
+0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,
+0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,
+0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,
+0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ac7e,0xc000010,0x248000,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,
+0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,
+0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,
+0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,
+0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,
+0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,
+0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800500,0x1862400,0x5200b61c,0x7c00100,
+0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,
+0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,
+0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,
+0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,
+0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,
+0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,
+0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,
+0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c178,0x80000000,0x218960,0x5200c247,
+0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,
+0x4100000,0x52023700,0x24000000,0x4e00000,0x52023700,0x24000000,0x14100000,0x52023700,0x24000000,0x14e00000,0x52023700,0x24000000,0x96800000,0x52024400,0x4000000,0x100000,
+0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,
+0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x14150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0x34e00000,0x520a3800,0x24000000,
+0x34100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x34100000,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,
+0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x34e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af91,0x7c00100,0x230400,0x5240af96,
+0x4000400,0x200000,0x5240af98,0x6800400,0x962540,0x5240af98,0x7c00100,0x230400,0x5240afa2,0x7c00100,0x230400,0x5240afa4,0x7c00100,0x230400,0x5240b2c7,0x4000000,
+0x200000,0x5240b2c7,0x4000000,0x1500000,0x5240b2d2,0x4000000,0x200000,0x5240b2e0,0x4000000,0x200000,0x5240b5f6,0x7c00900,0x230400,0x524a44bf,0x4000000,0xe00003,
+0x5280af91,0x2802400,0x962460,0x5280af92,0x2802400,0x962460,0x5280af98,0x2802400,0x962460,0x5280af9a,0x2802400,0x962460,0x5280af9c,0x2802400,0x962460,0x52c0b3ed,
+0x2802400,0x962460,0x52c0b3f1,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,
+0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,
+0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802400,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,
+0x24000000,0x14200000,0x60003000,0x24000000,0x14e00000,0x60003700,0x24000000,0x4200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,
+0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,
+0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x3a703580,0x6000c654,
+0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,
+0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,
+0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,
+0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0x4e00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,
+0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x14150400,0x600a3000,0x24000000,0x34200000,
+0x600a3000,0x24000000,0x34e00000,0x600a3700,0x24000000,0x34200000,0x600a3800,0x24000000,0x34200000,0x600a3800,0x24000000,0xb6800000,0x600a4305,0x7c00100,0xe30400,0x600ac300,
+0x4000000,0x34100000,0x600ac400,0x4000000,0x14e0000d,0x600ac400,0x4000000,0x34e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,
+0x34e00000,0x600acd00,0x4000000,0x34200000,0x600acd00,0x4000000,0x34e00000,0x600acd00,0x4000000,0xb6800000,0x600ace00,0x4000000,0x34e00000,0x600ace00,0x4000000,0xb6800000,
+0x600acf00,0x4000000,0x34e00000,0x600acf00,0x4000000,0xb6800000,0x600ad111,0x7c40300,0xe30000,0x604ac4bf,0x4000000,0x34e00003,0x61000a03,0x4000000,0x1600000,0x61000c02,
+0x80000000,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,
+0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000,0x400000,
+0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,
+0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,
+0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,
+0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,
+0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,
+0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,
+0x6100d85c,0x2802500,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,
+0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,
+0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,
+0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,
+0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x34e00000,0x6140af96,0x7c00100,0x230400,0x6140af98,0x7c00100,
+0x230400,0x6180af93,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c14,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,
+0x70000a03,0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400,0x70001524,0x2802100,0x962460,0x70001524,
+0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,
+0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x14200000,0x70003800,0x24000000,0x4e00000,0x70005201,0x2802400,0x962460,
+0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,
+0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,
+0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,
+0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,
+0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802500,0x1862460,0x7000b61c,0x6800500,0x1862400,0x7000b61c,0x7c00100,
+0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0x4200000,
+0x7000cd00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x14200000,0x7000cd00,0x4000000,0x14e00000,0x7000cd00,0x4000000,0x96800000,0x7000cf00,0x4000000,0x4e00000,0x7000cf00,
+0x4000000,0x14e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,
+0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,
+0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,
+0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,
+0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,
+0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,
+0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,
+0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,
+0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,
+0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,
+0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,
+0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,
+0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802500,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,
+0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,
+0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,
+0x2802400,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,
+0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,
+0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,
+0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,
+0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,
+0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,
+0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,
+0x250400,0x700acd00,0x4000000,0x34e00000,0x700acd00,0x4000000,0xb6800000,0x700ace00,0x4000000,0x34e00000,0x700acf00,0x4000000,0x34e00000,0x700acf00,0x4000000,0xb6800000,
+0x7050df01,0x4000000,0x200000,0x7050f705,0x80000,0x918820,0x7080af96,0x2802400,0x962460,0x7090df01,0x2802400,0x962460,0x70d0e403,0x2802100,0x962460,0x70d0e403,
+0x2802400,0x962460,0x70d0e403,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,
+0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,
+0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,
+0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0x4e00000,0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,
+0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802000,0x962460,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x400000,0x8000d997,0x4000000,0x500000,
+0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100,0x220400,0x8000f8a6,
+0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460,0x8000fda1,0x4000000,
+0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,
+0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,
+0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,
+0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,
+0x800acd00,0x4000000,0x34e00000,0x800acd00,0x4000000,0x7a902460,0x800ace00,0x4000000,0x34e00000,0x800acf00,0x4000000,0x34e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,
+0x4000000,0x34e00000,0x800b0500,0x4000000,0xb6800000,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,
+0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,
+0x9000d200,0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400,0x9000e59d,0x2802100,0x962460,0x90010500,
+0x4000000,0xe00000,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7,0x6800000,
+0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000,0x200000,
+0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400,0x900108a8,
+0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9,0x4000010,
+0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400,0x962460,
+0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800,0x90010eaa,
+0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,
+0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x34e00000,0x900acd00,0x4000000,0xb6800000,0x900acf00,0x4000000,0x34e00000,0x900b0500,0x4000000,0x34e00000,
+0x900b0500,0x4000000,0xb6800000,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000,0x90408e06,0x24000000,0x400000,0xa0001004,
+0x4000000,0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100,0x962460,0xa000120f,0x2802400,0x962460,0xa000171a,0x2802100,0x962460,0xa000171a,0x2806400,
+0x962460,0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000,0xa000581e,0x7c00100,0x230400,0xa0007300,0x24000000,0x200000,0xa0008301,0x2802400,0x962460,
+0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0x4e00000,0xa0010500,0x4000000,0x200000,0xa00114af,0x2802100,0x962460,0xa00114af,0x2802400,0x962460,0xa00114af,
+0x2806400,0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100,0x230400,0xa00114af,0x7c00100,0x230560,0xa00116b0,0x2802100,0x962460,0xa00116b0,0x2802800,
+0x962460,0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000,0xa00116b0,0x4000000,0x500000,0xa00116b0,0x4000010,0x400000,0xa00116b0,0x6800100,0x962540,
+0xa00116b0,0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0,0xc000010,0x448000,0xa0011722,0x7c00100,0x230400,0xa00118b1,0x2802000,0x962460,0xa00118b1,
+0x2802100,0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000,0x200000,0xa00118b1,0x4000000,0x400000,0xa00118b1,0x4000000,0x500000,0xa00118b1,0x6800100,
+0x962540,0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560,0xa00118b1,0xc000010,0x448000,0xa00a4005,0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,
+0xa00ac400,0x4000000,0x4e00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00,0x4000000,0x34e00000,0xa00b0500,0x4000000,0x34e00000,0xa00b0500,0x4000000,0xb6800000,0xa00b0b96,
+0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100,0xe30000,0xa00b1596,0x7c00300,0xe30000,0xa040afac,0x6800400,0x962540,0xa08083ad,0x2802400,
+0x962460,0xb0000a03,0x7c00100,0x220400,0xb0000b13,0x7c00100,0x2633800,0xb0001004,0x2802000,0x962460,0xb0001110,0x4000000,0x200000,0xb0001524,0x2802000,0x962460,
+0xb0001615,0x4000000,0x500000,0xb000251b,0x7c00100,0x230400,0xb0007300,0x24000000,0x200000,0xb0008939,0x4000000,0x200000,0xb0008939,0x7c00100,0x230400,0xb0008e00,
+0x24000000,0x200000,0xb0008e00,0x24000000,0x400000,0xb0008e00,0x24000010,0x400000,0xb0009257,0x2802000,0x962460,0xb0009257,0x4000000,0x1600000,0xb0009519,0x7c00100,
+0x220400,0xb0009519,0x7c00100,0x250400,0xb0009a00,0x4000000,0x200000,0xb000b30a,0x2802100,0x962460,0xb000b30a,0x7c00100,0x230400,0xb000c178,0x80000000,0x218960,
+0xb000c300,0x4000000,0x4200000,0xb000d202,0x2802000,0x962460,0xb000d476,0x6800100,0x962540,0xb000d476,0x7c00100,0x230400,0xb000e300,0x4000000,0x4e00000,0xb000fda1,
+0x7c00100,0x1830000,0xb0010eaa,0x2802000,0x962460,0xb00116b0,0x7c00100,0x230400,0xb0011900,0x4000000,0x4e00000,0xb0011ab2,0x2802100,0x962460,0xb0011ab2,0x2802400,
+0x962460,0xb0011ab2,0x2806400,0x962460,0xb0011ab2,0x4000000,0x200000,0xb0011ab2,0x6800100,0x962540,0xb0011ab2,0x7c00100,0x230400,0xb0011b0c,0x7c00100,0x230400,
+0xb0011cb3,0x2802100,0x962460,0xb0011cb3,0x2806400,0x962460,0xb0011cb3,0x6800000,0x1329800,0xb0011cb3,0x6800100,0x962540,0xb0011cb3,0x7c00100,0x230400,0xb0011db6,
+0x2802500,0x962460,0xb0011db6,0x6800000,0x1329800,0xb0011db6,0x7c00100,0x230400,0xb0011db6,0x7c00500,0x230400,0xb0011e00,0x4000000,0x200000,0xb0011e00,0x4000000,
+0x1500000,0xb0011fb4,0x2802100,0x962460,0xb0011fb4,0x6800100,0x962540,0xb0011fb4,0x7c00100,0x230400,0xb0011fb4,0xc000010,0x248000,0xb0012000,0x4000000,0x200000,
+0xb00121b5,0x4000000,0x200000,0xb00121b5,0x4000010,0x400000,0xb00121b5,0x7c00100,0x220400,0xb00121b5,0x7c00100,0x250400,0xb00121b5,0xc000010,0x448000,0xb00122b8,
+0x4000000,0x200000,0xb00122b8,0x7c00100,0x230400,0xb00123b7,0x2802400,0x962460,0xb00123b7,0x4000000,0x200000,0xb00123b7,0x7c00100,0x230400,0xb00123b7,0xc000010,
+0x248000,0xb00a4005,0x7c00100,0xe30400,0xb00a4711,0x7c40300,0xe30000,0xb00acf00,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x3ce00000,
+0xb00b0500,0x4000000,0xb6800000,0xb00b109a,0x7c00300,0xe30000,0xb080e47c,0x2802000,0x962460,0xc0001524,0x4000000,0x500000,0xc0001a18,0x2806400,0x1862460,0xc0001a18,
+0x7c00100,0x1830000,0xc0007300,0x24000000,0x200000,0xc0008e00,0x24000010,0x400000,0xc0009519,0x7c00100,0x220400,0xc0009519,0x7c00100,0x250400,0xc000c300,0x4000000,
+0x420000f,0xc000d85c,0x2802100,0x962460,0xc000d85c,0x6800100,0x962540,0xc000d85c,0x7c00100,0x230400,0xc000dc99,0x7c00100,0x230400,0xc000e719,0x7c00100,0x220400,
+0xc00107a7,0x7c00100,0x230400,0xc0010eaa,0x7c00100,0x230400,0xc00116b0,0x7c00100,0x230560,0xc0011900,0x4000000,0x4200000,0xc0012447,0,0x818820,0xc0012447,
+0,0xc18820,0xc0012447,0,0x1418820,0xc00125b9,0x7c00100,0x230400,0xc00126bb,0x2802100,0x962460,0xc00126bb,0x2806400,0x962460,0xc00126bb,0x4000000,
+0x500000,0xc00126bb,0x6800100,0x962540,0xc00126bb,0x7c00100,0x230400,0xc00127ba,0x2802400,0x962460,0xc00127ba,0x4000000,0x200000,0xc00127ba,0x6800000,0x1329800,
+0xc00127ba,0x7c00100,0x230400,0xc00127ba,0x7c00900,0x230400,0xc0012800,0x4000000,0x200000,0xc0012b23,0x4000000,0x200000,0xc0012b23,0x4000000,0x400000,0xc0012b23,
+0x4000000,0x1500000,0xc0012cbc,0x2802400,0x962460,0xc0012cbc,0x4000000,0x1600000,0xc0012cbc,0x6800000,0x1329800,0xc0012cbc,0x7c00100,0x230400,0xc00acf00,0x4000000,
+0x34e00000,0xc00ae300,0x4000000,0x34e00000,0xc00b0500,0x4000000,0x34e00000,0xc00b0500,0x4000000,0xb6800000,0xc00b0b00,0x4000000,0x1200000,0xc00b0b00,0x7c00900,0x1230400,
+0xc00b109a,0x7c00300,0xe30000,0xc00b2914,0x7c00100,0x2530000,0xc00b2916,0x7c00100,0x2530c00,0xc00b2a00,0x4000000,0x34e00000,0xc040af53,0x7c00100,0x230400,0xc0c12b7e,
+0x4000000,0x200000,0xc14a44bf,0x4000000,0xe0000d,0xd000131f,0x2802c00,0x962460,0xd000171a,0x7c00100,0x230400,0xd0001821,0x2802100,0x962460,0xd0007300,0x24000000,
+0x200000,0xd0008e00,0x24000000,0x200000,0xd0008f3a,0x2806000,0x962460,0xd0009519,0x7c00100,0x220400,0xd0009519,0x7c00100,0x250400,0xd000a500,0x4000000,0x200000,
+0xd000c300,0x4000000,0x4e00000,0xd000d202,0x7c00100,0x230400,0xd000d476,0x7c00100,0x230400,0xd000d997,0x2802100,0x962460,0xd000d997,0x6800100,0x962540,0xd000e001,
+0x2802100,0x962460,0xd000e700,0x4000400,0x200000,0xd000e719,0x7c00100,0x220400,0xd000e719,0x7c00500,0x23040f,0xd000fa00,0x4000000,0x4e00000,0xd0010eaa,0x4000010,
+0x400000,0xd0010eaa,0x7c00100,0x230400,0xd0012dbd,0x4000000,0x200000,0xd0012dbd,0x7c00100,0x230400,0xd0012fbe,0x2802100,0x962460,0xd0012fbe,0x2802400,0x962460,
+0xd0012fbe,0x2806400,0x962460,0xd0012fbe,0x4000000,0x400000,0xd0012fbe,0x6800000,0x1329800,0xd0012fbe,0x6800100,0x962540,0xd0012fbe,0x6800100,0x962541,0xd0012fbe,
+0x6804400,0x962540,0xd0012fbe,0x7c00100,0x230400,0xd0012fbe,0x7c00100,0x230560,0xd0012fbe,0xc000010,0x448000,0xd0013183,0x7c00100,0x230400,0xd0013200,0x4000000,
+0x200000,0xd0013200,0x6800000,0x1329805,0xd00134c0,0x2802100,0x962460,0xd00134c0,0x4000002,0x400000,0xd00134c0,0x7c00100,0x230400,0xd00a4305,0x7c00100,0xe30400,
+0xd00a4611,0x7c40300,0xe30000,0xd00a4711,0x7c40300,0xe30000,0xd00a5e11,0x7c40300,0xe30000,0xd00acf00,0x4000000,0x34e00000,0xd00b0500,0x4000000,0x34e00000,0xd00b0500,
+0x4000000,0xb6800000,0xd00b0b11,0x6800500,0x962540,0xd00b0bbf,0x2802200,0xc62460,0xd00b119a,0x7c00300,0xe30000,0xd00b2a00,0x4000000,0x34e00000,0xd00b2e11,0x7c40300,
+0xe30000,0xd00b30bf,0x7c00300,0x230000,0xd00b339a,0x7c00300,0xe30000};
-static const int32_t countPropsVectors=6822;
+static const int32_t countPropsVectors=6999;
static const int32_t propsVectorsColumns=3;
-static const uint16_t scriptExtensions[256]={
-0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,3,0x800c,2,0x22,
-0x25,0x80b6,2,0x22,0x8025,2,0x12,2,0x22,0x54,0x79,0x7b,0xa7,0xb6,0x80b7,2,
-0x8022,2,0x8025,2,0x21,2,0x80b6,2,0x25,4,0xa,0xf,0x10,0x15,0x19,0x1a,
-0x1f,0x23,0x24,0x89,0x97,0x809e,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,
-0x89,0x809e,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91,0x99,
-0x9e,0xa0,0xaf,0xb2,0xb3,0x80bb,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,
-0x30,0x3a,0x89,0x91,0x99,0x9e,0xa0,0xaf,0xb2,0xb3,0x80bb,0xa,0x78,0xa0,0x80b2,0xa,
-0x6b,4,0x3a,0x8076,4,0x71,0x10,0x80a4,0x10,0x76,0xf,0x809d,0xf,0x7a,0x23,0x8089,
-0x23,0x7e,0x15,0x80bb,0x15,0x82,0x1c,0x34,0x8076,0x1c,0x86,0xc,0x8019,0x2a,0x2b,0x2c,
-0x802d,0x1b,0x805a,0x800a,4,0xa,0x15,0x8089,0xa,0x8089,4,0x800a,0xa,0x8097,0xa,0x15,
-0x1a,0x1f,0x23,0x8024,0xa,0x80bb,4,0xa,0x15,0x1f,0x24,0x89,0x9e,0x80bb,0x8004,0x19,
+static const uint16_t scriptExtensions[262]={
+0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,2,0x22,0x25,0xb6,
+0x80c0,2,0x22,0x8025,2,0x11,2,0x22,0x54,0x79,0x7b,0xa7,0xb6,0x80b7,2,0x8022,
+2,0x25,0x80c0,2,0x20,2,0x80b6,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,
+0x24,0x89,0x97,0x809e,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x809e,
+4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91,0x99,0x9e,0xa0,
+0xaf,0xb2,0xb3,0x80bb,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a,
+0x89,0x91,0x99,0x9e,0xa0,0xaf,0xb2,0xb3,0x80bb,0xa,0x78,0xa0,0x80b2,0xa,0x69,4,
+0x3a,0x8076,4,0x6f,0x10,0x80a4,0x10,0x74,0xf,0x809d,0xf,0x78,0x23,0x8089,0x23,0x7c,
+0x15,0x80bb,0x15,0x80,0x1c,0x34,0x8076,0x1c,0x84,0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,
+0x805a,0x800a,4,0xa,0x15,0x8089,0xa,0x8089,4,0x800a,0xa,0x8097,0xa,0x15,0x1a,0x1f,
+0x23,0x8024,0xa,0x80bb,4,0xa,0x15,0x1f,0x24,0x89,0x9e,0x80bb,0x8004,8,0x8022,0x19,
0x801b,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12,0x14,0x8016,0x8011,
-5,0x8011,0x11,0x14,0x8016,0xa,0xf,0x10,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0x80b2,
-0xa,0xf,0x10,0x15,0x1a,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,0xa,0xf,
-0x10,0x15,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,0xa,0x9a,0xa,0x8023,0xa,
-0xed,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x31,0x8053,0x2f,0x8031,2,0x8007,0x89,0x7e,0x8087};
+5,0x8011,0x11,0x14,0x8016,0x11,0x8019,0xa,0xf,0x10,0x78,0x91,0x99,0x9d,0x9e,0xa0,
+0xa3,0x80b2,0xa,0xf,0x10,0x15,0x1a,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,
+0xa,0xf,0x10,0x15,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,0xa,0x98,0xa,
+0x8023,0xa,0xef,0x19,0x1c,0x804f,0x37,0x804e,2,0x8025,2,0xf8,0x2f,0x31,0x8053,0x2f,
+0x8031,2,0x8007,0x89,0x7c,0x8087};
-static const int32_t indexes[UPROPS_INDEX_COUNT]={0x2afc,0x2afc,0x2afc,0x2afc,0x66be,3,0x8164,0x81e4,0x81e4,0x81e4,0xb2cbc,0x2a75a31,0,0,0,0};
+static const int32_t indexes[UPROPS_INDEX_COUNT]={0x2b96,0x2b96,0x2b96,0x2b96,0x6898,3,0x83ef,0x8472,0x8472,0x8472,0xb34c0,0x2a75a31,0,0,0,0};
#endif // INCLUDED_FROM_UCHAR_C
diff --git a/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h b/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
index b837fb94629..44b73e94da7 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
@@ -38,6 +38,8 @@ typedef enum ECleanupCommonType {
UCLN_COMMON_SERVICE,
UCLN_COMMON_LOCALE_KEY_TYPE,
UCLN_COMMON_LOCALE,
+ UCLN_COMMON_LOCALE_ALIAS,
+ UCLN_COMMON_LOCALE_KNOWN_CANONICALIZED,
UCLN_COMMON_LOCALE_AVAILABLE,
UCLN_COMMON_LIKELY_SUBTAGS,
UCLN_COMMON_LOCALE_DISTANCE,
diff --git a/Build/source/libs/icu/icu-src/source/common/ucln_imp.h b/Build/source/libs/icu/icu-src/source/common/ucln_imp.h
index 1bfcde0fb8e..63a54c86f62 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucln_imp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucln_imp.h
@@ -78,7 +78,7 @@
* Use the ANSI C 'atexit' function. Note that this mechanism does not
* guarantee the order of cleanup relative to other users of ICU!
*/
-static UBool gAutoCleanRegistered = FALSE;
+static UBool gAutoCleanRegistered = false;
static void ucln_atexit_handler()
{
@@ -88,7 +88,7 @@ static void ucln_atexit_handler()
static void ucln_registerAutomaticCleanup()
{
if(!gAutoCleanRegistered) {
- gAutoCleanRegistered = TRUE;
+ gAutoCleanRegistered = true;
atexit(&ucln_atexit_handler);
}
}
@@ -135,7 +135,7 @@ U_CAPI void U_EXPORT2 UCLN_FINI ()
*/
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
- BOOL status = TRUE;
+ BOOL status = true;
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv.cpp
index 856be708785..5dcf35e0438 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv.cpp
@@ -234,7 +234,7 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U
ptrdiff_t pointerAdjustment = aligned_p - p;
if (bufferSizeNeeded + pointerAdjustment <= stackBufferSize) {
stackBuffer = reinterpret_cast<void *>(aligned_p);
- stackBufferSize -= pointerAdjustment;
+ stackBufferSize -= static_cast<int32_t>(pointerAdjustment);
} else {
/* prevent using the stack buffer but keep the size > 0 so that we do not just preflight */
stackBufferSize = 1;
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
index dbc5bb7e07b..169ad4c5261 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
@@ -478,7 +478,7 @@ setInitialStateFromUnicodeKR(UConverter* converter,UConverterDataISO2022 *myConv
static void U_CALLCONV
_ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){
- char myLocale[6]={' ',' ',' ',' ',' ',' '};
+ char myLocale[7]={' ',' ',' ',' ',' ',' ', '\0'};
cnv->extraInfo = uprv_malloc (sizeof (UConverterDataISO2022));
if(cnv->extraInfo != NULL) {
@@ -493,7 +493,7 @@ _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){
myConverterData->currentType = ASCII1;
cnv->fromUnicodeStatus =FALSE;
if(pArgs->locale){
- uprv_strncpy(myLocale, pArgs->locale, sizeof(myLocale));
+ uprv_strncpy(myLocale, pArgs->locale, sizeof(myLocale)-1);
}
version = pArgs->options & UCNV_OPTIONS_VERSION_MASK;
myConverterData->version = version;
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
index 56fc3d6822f..0e198892f1b 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
@@ -224,7 +224,7 @@ static UBool gDefaultConverterContainsOption;
static const char DATA_TYPE[] = "cnv";
/* ucnv_flushAvailableConverterCache. This is only called from ucnv_cleanup().
- * If it is ever to be called from elsewhere, synchronization
+ * If it is ever to be called from elsewhere, synchronization
* will need to be considered.
*/
static void
@@ -262,7 +262,7 @@ static UBool U_CALLCONV ucnv_cleanup(void) {
}
U_CAPI void U_EXPORT2
-ucnv_enableCleanup() {
+ucnv_enableCleanup(void) {
ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup);
}
@@ -1309,7 +1309,7 @@ ucnv_setDefaultName(const char *converterName) {
/* The close may make the current name go away. */
ucnv_close(cnv);
-
+
/* reset the converter cache */
u_flushDefaultConverter();
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_bld.h b/Build/source/libs/icu/icu-src/source/common/ucnv_bld.h
index 18b3795e4d8..43e6c09ac0b 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_bld.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_bld.h
@@ -66,8 +66,8 @@ typedef struct UConverterImpl UConverterImpl;
typedef struct UConverterStaticData { /* +offset: size */
uint32_t structSize; /* +0: 4 Size of this structure */
-
- char name
+
+ char name
[UCNV_MAX_CONVERTER_NAME_LENGTH]; /* +4: 60 internal name of the converter- invariant chars */
int32_t codepage; /* +64: 4 codepage # (now IBM-$codepage) */
@@ -80,7 +80,7 @@ typedef struct UConverterStaticData { /* +offset: size */
uint8_t subChar[UCNV_MAX_SUBCHAR_LEN]; /* +72: 4 [note: 4 and 8 byte boundary] */
int8_t subCharLen; /* +76: 1 */
-
+
uint8_t hasToUnicodeFallback; /* +77: 1 UBool needs to be changed to UBool to be consistent across platform */
uint8_t hasFromUnicodeFallback; /* +78: 1 */
uint8_t unicodeMask; /* +79: 1 bit 0: has supplementary bit 1: has single surrogates */
@@ -101,8 +101,8 @@ struct UConverterSharedData {
const UConverterStaticData *staticData; /* pointer to the static (non changing) data. */
- UBool sharedDataCached; /* TRUE: shared data is in cache, don't destroy on ucnv_close() if 0 ref. FALSE: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */
- /** If FALSE, then referenceCounter is not used. Must not change after initialization. */
+ UBool sharedDataCached; /* true: shared data is in cache, don't destroy on ucnv_close() if 0 ref. false: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */
+ /** If false, then referenceCounter is not used. Must not change after initialization. */
UBool isReferenceCounted;
const UConverterImpl *impl; /* vtable-style struct of mostly function pointers */
@@ -128,7 +128,7 @@ struct UConverterSharedData {
#define UCNV_IMMUTABLE_SHARED_DATA_INITIALIZER(pStaticData, pImpl) \
{ \
sizeof(UConverterSharedData), ~((uint32_t)0), \
- NULL, pStaticData, FALSE, FALSE, pImpl, \
+ NULL, pStaticData, false, false, pImpl, \
0, UCNV_MBCS_TABLE_INITIALIZER \
}
@@ -181,9 +181,9 @@ struct UConverter {
uint32_t options; /* options flags from UConverterOpen, may contain additional bits */
- UBool sharedDataIsCached; /* TRUE: shared data is in cache, don't destroy on ucnv_close() if 0 ref. FALSE: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */
- UBool isCopyLocal; /* TRUE if UConverter is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */
- UBool isExtraLocal; /* TRUE if extraInfo is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */
+ UBool sharedDataIsCached; /* true: shared data is in cache, don't destroy on ucnv_close() if 0 ref. false: shared data isn't in the cache, do attempt to clean it up if the ref is 0 */
+ UBool isCopyLocal; /* true if UConverter is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */
+ UBool isExtraLocal; /* true if extraInfo is not owned and not released in ucnv_close() (stack-allocated, safeClone(), etc.) */
UBool useFallback;
int8_t toULength; /* number of bytes in toUBytes */
@@ -289,7 +289,7 @@ ucnv_swap(const UDataSwapper *ds,
UErrorCode *pErrorCode);
U_CAPI void U_EXPORT2
-ucnv_enableCleanup();
+ucnv_enableCleanup(void);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h b/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
index 2eed2c60df6..59be8bdb37b 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
@@ -59,7 +59,7 @@ typedef struct {
} UConverterLoadArgs;
#define UCNV_LOAD_ARGS_INITIALIZER \
- { (int32_t)sizeof(UConverterLoadArgs), 0, FALSE, FALSE, 0, 0, NULL, NULL, NULL }
+ { (int32_t)sizeof(UConverterLoadArgs), 0, false, false, 0, 0, NULL, NULL, NULL }
typedef void (*UConverterLoad) (UConverterSharedData *sharedData,
UConverterLoadArgs *pArgs,
@@ -267,8 +267,8 @@ extern const UConverterSharedData
U_CDECL_END
/** Always use fallbacks from codepage to Unicode */
-#define TO_U_USE_FALLBACK(useFallback) TRUE
-#define UCNV_TO_U_USE_FALLBACK(cnv) TRUE
+#define TO_U_USE_FALLBACK(useFallback) true
+#define UCNV_TO_U_USE_FALLBACK(cnv) true
/** Use fallbacks from Unicode to codepage when cnv->useFallback or for private-use code points */
#define IS_PRIVATE_USE(c) ((uint32_t)((c)-0xe000)<0x1900 || (uint32_t)((c)-0xf0000)<0x20000)
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp
index 9b518e08df6..1ef7fa2f02f 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp
@@ -707,9 +707,9 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs,
// Do not go back into the bytes that will be read for finishing a partial
// sequence from the previous buffer.
- int32_t length=count-toULimit;
+ int32_t length=count-toULength;
U8_TRUNCATE_IF_INCOMPLETE(source, 0, length);
- count=toULimit+length;
+ count=toULength+length;
}
if(c!=0) {
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h b/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h
index 209cdc532d4..c8f3b89a5e4 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h
@@ -420,7 +420,7 @@ typedef struct UConverterMBCSTable {
NULL, \
0, \
0, 0, \
- FALSE, \
+ false, \
0, \
\
/* roundtrips */ \
diff --git a/Build/source/libs/icu/icu-src/source/common/ucol_swp.h b/Build/source/libs/icu/icu-src/source/common/ucol_swp.h
index fd8be9aa54f..0c2990a85ec 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucol_swp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucol_swp.h
@@ -31,7 +31,7 @@
* Does the data look like a collation binary?
* @internal
*/
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucol_looksLikeCollationBinary(const UDataSwapper *ds,
const void *inData, int32_t length);
diff --git a/Build/source/libs/icu/icu-src/source/common/ucurr.cpp b/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
index dfee3bd3000..0e14cddcff3 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
@@ -91,6 +91,8 @@ static const char VAR_DELIM = '_';
// Tag for localized display names (symbols) of currencies
static const char CURRENCIES[] = "Currencies";
static const char CURRENCIES_NARROW[] = "Currencies%narrow";
+static const char CURRENCIES_FORMAL[] = "Currencies%formal";
+static const char CURRENCIES_VARIANT[] = "Currencies%variant";
static const char CURRENCYPLURALS[] = "CurrencyPlurals";
// ISO codes mapping table
@@ -649,7 +651,7 @@ ucurr_getName(const UChar* currency,
}
int32_t choice = (int32_t) nameStyle;
- if (choice < 0 || choice > 2) {
+ if (choice < 0 || choice > 4) {
*ec = U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
@@ -684,9 +686,22 @@ ucurr_getName(const UChar* currency,
ec2 = U_ZERO_ERROR;
LocalUResourceBundlePointer rb(ures_open(U_ICUDATA_CURR, loc, &ec2));
- if (nameStyle == UCURR_NARROW_SYMBOL_NAME) {
+ if (nameStyle == UCURR_NARROW_SYMBOL_NAME || nameStyle == UCURR_FORMAL_SYMBOL_NAME || nameStyle == UCURR_VARIANT_SYMBOL_NAME) {
CharString key;
- key.append(CURRENCIES_NARROW, ec2);
+ switch (nameStyle) {
+ case UCURR_NARROW_SYMBOL_NAME:
+ key.append(CURRENCIES_NARROW, ec2);
+ break;
+ case UCURR_FORMAL_SYMBOL_NAME:
+ key.append(CURRENCIES_FORMAL, ec2);
+ break;
+ case UCURR_VARIANT_SYMBOL_NAME:
+ key.append(CURRENCIES_VARIANT, ec2);
+ break;
+ default:
+ *ec = U_UNSUPPORTED_ERROR;
+ return 0;
+ }
key.append("/", ec2);
key.append(buf, ec2);
s = ures_getStringByKeyWithFallback(rb.getAlias(), key.data(), len, &ec2);
@@ -866,7 +881,7 @@ getCurrencyNameCount(const char* loc, int32_t* total_currency_name_count, int32_
*total_currency_name_count = 0;
*total_currency_symbol_count = 0;
const UChar* s = NULL;
- char locale[ULOC_FULLNAME_CAPACITY];
+ char locale[ULOC_FULLNAME_CAPACITY] = "";
uprv_strcpy(locale, loc);
const icu::Hashtable *currencySymbolsEquiv = getCurrSymbolsEquiv();
for (;;) {
@@ -941,7 +956,7 @@ collectCurrencyNames(const char* locale,
// Look up the Currencies resource for the given locale.
UErrorCode ec2 = U_ZERO_ERROR;
- char loc[ULOC_FULLNAME_CAPACITY];
+ char loc[ULOC_FULLNAME_CAPACITY] = "";
uloc_getName(locale, loc, sizeof(loc), &ec2);
if (U_FAILURE(ec2) || ec2 == U_STRING_NOT_TERMINATED_WARNING) {
ec = U_ILLEGAL_ARGUMENT_ERROR;
@@ -1610,7 +1625,7 @@ ucurr_getDefaultFractionDigits(const UChar* currency, UErrorCode* ec) {
return ucurr_getDefaultFractionDigitsForUsage(currency,UCURR_USAGE_STANDARD,ec);
}
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec) {
int32_t fracDigits = 0;
if (U_SUCCESS(*ec)) {
@@ -1633,7 +1648,7 @@ ucurr_getRoundingIncrement(const UChar* currency, UErrorCode* ec) {
return ucurr_getRoundingIncrementForUsage(currency, UCURR_USAGE_STANDARD, ec);
}
-U_DRAFT double U_EXPORT2
+U_CAPI double U_EXPORT2
ucurr_getRoundingIncrementForUsage(const UChar* currency, const UCurrencyUsage usage, UErrorCode* ec) {
double result = 0.0;
@@ -2259,7 +2274,6 @@ ucurr_countCurrencies(const char* locale,
// local variables
UErrorCode localStatus = U_ZERO_ERROR;
char id[ULOC_FULLNAME_CAPACITY];
- uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus);
// get country or country_variant in `id'
idForLocale(locale, id, sizeof(id), ec);
@@ -2375,7 +2389,6 @@ ucurr_forLocaleAndDate(const char* locale,
// local variables
UErrorCode localStatus = U_ZERO_ERROR;
char id[ULOC_FULLNAME_CAPACITY];
- resLen = uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus);
// get country or country_variant in `id'
idForLocale(locale, id, sizeof(id), ec);
diff --git a/Build/source/libs/icu/icu-src/source/common/uelement.h b/Build/source/libs/icu/icu-src/source/common/uelement.h
index 05f36a09825..88dd4d66fb9 100644
--- a/Build/source/libs/icu/icu-src/source/common/uelement.h
+++ b/Build/source/libs/icu/icu-src/source/common/uelement.h
@@ -46,7 +46,7 @@ typedef union UElement UElement;
* An element-equality (boolean) comparison function.
* @param e1 An element (object or integer)
* @param e2 An element (object or integer)
- * @return TRUE if the two elements are equal.
+ * @return true if the two elements are equal.
*/
typedef UBool U_CALLCONV UElementsAreEqual(const UElement e1, const UElement e2);
diff --git a/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp b/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp
index 05bcf10df48..52b89065685 100644
--- a/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp
@@ -579,7 +579,7 @@ uprv_ebcdicToLowercaseAscii(char c) {
return (char)lowercaseAsciiFromEbcdic[(uint8_t)c];
}
-U_INTERNAL uint8_t* U_EXPORT2
+U_CAPI uint8_t* U_EXPORT2
uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n)
{
uint8_t *orig_dst = dst;
@@ -600,7 +600,7 @@ uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n)
return orig_dst;
}
-U_INTERNAL uint8_t* U_EXPORT2
+U_CAPI uint8_t* U_EXPORT2
uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n)
{
uint8_t *orig_dst = dst;
diff --git a/Build/source/libs/icu/icu-src/source/common/uinvchar.h b/Build/source/libs/icu/icu-src/source/common/uinvchar.h
index a43cfcd9828..9b7a9bd1141 100644
--- a/Build/source/libs/icu/icu-src/source/common/uinvchar.h
+++ b/Build/source/libs/icu/icu-src/source/common/uinvchar.h
@@ -33,11 +33,11 @@
*
* @param s Input string pointer.
* @param length Length of the string, can be -1 if NUL-terminated.
- * @return TRUE if s contains only invariant characters.
+ * @return true if s contains only invariant characters.
*
* @internal (ICU 2.8)
*/
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uprv_isInvariantString(const char *s, int32_t length);
/**
@@ -46,11 +46,11 @@ uprv_isInvariantString(const char *s, int32_t length);
*
* @param s Input string pointer.
* @param length Length of the string, can be -1 if NUL-terminated.
- * @return TRUE if s contains only invariant characters.
+ * @return true if s contains only invariant characters.
*
* @internal (ICU 2.8)
*/
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uprv_isInvariantUString(const UChar *s, int32_t length);
/**
@@ -141,7 +141,7 @@ uprv_isEbcdicAtSign(char c);
* Compare two EBCDIC invariant-character strings in ASCII order.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uprv_compareInvEbcdicAsAscii(const char *s1, const char *s2);
/**
@@ -161,7 +161,7 @@ uprv_compareInvEbcdicAsAscii(const char *s1, const char *s2);
* Converts an EBCDIC invariant character to ASCII.
* @internal
*/
-U_INTERNAL char U_EXPORT2
+U_CAPI char U_EXPORT2
uprv_ebcdicToAscii(char c);
/**
@@ -181,7 +181,7 @@ uprv_ebcdicToAscii(char c);
* Converts an EBCDIC invariant character to lowercase ASCII.
* @internal
*/
-U_INTERNAL char U_EXPORT2
+U_CAPI char U_EXPORT2
uprv_ebcdicToLowercaseAscii(char c);
/**
@@ -202,7 +202,7 @@ uprv_ebcdicToLowercaseAscii(char c);
* @internal
* @see uprv_strncpy
*/
-U_INTERNAL uint8_t* U_EXPORT2
+U_CAPI uint8_t* U_EXPORT2
uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n);
@@ -211,7 +211,7 @@ uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n);
* @internal
* @see uprv_strncpy
*/
-U_INTERNAL uint8_t* U_EXPORT2
+U_CAPI uint8_t* U_EXPORT2
uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n);
diff --git a/Build/source/libs/icu/icu-src/source/common/uloc.cpp b/Build/source/libs/icu/icu-src/source/common/uloc.cpp
index 6a9bfcfbff5..ebfbb506508 100644
--- a/Build/source/libs/icu/icu-src/source/common/uloc.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uloc.cpp
@@ -30,10 +30,14 @@
l = lang, C = ctry, M = charmap, V = variant
*/
+#include "unicode/bytestream.h"
+#include "unicode/errorcode.h"
+#include "unicode/stringpiece.h"
#include "unicode/utypes.h"
#include "unicode/ustring.h"
#include "unicode/uloc.h"
+#include "bytesinkutil.h"
#include "putilimp.h"
#include "ustr_imp.h"
#include "ulocimp.h"
@@ -46,8 +50,6 @@
#include "uassert.h"
#include "charstr.h"
-#include <stdio.h> /* for sprintf */
-
U_NAMESPACE_USE
/* ### Declarations **************************************************/
@@ -55,13 +57,6 @@ U_NAMESPACE_USE
/* Locale stuff from locid.cpp */
U_CFUNC void locale_set_default(const char *id);
U_CFUNC const char *locale_get_default(void);
-U_CFUNC int32_t
-locale_getKeywords(const char *localeID,
- char prev,
- char *keywords, int32_t keywordCapacity,
- char *values, int32_t valuesCapacity, int32_t *valLen,
- UBool valuesToo,
- UErrorCode *status);
/* ### Data tables **************************************************/
@@ -157,7 +152,7 @@ static const char * const LANGUAGES[] = {
"nnh", "no", "nog", "non", "nov", "nqo", "nr", "nso",
"nus", "nv", "nwc", "ny", "nym", "nyn", "nyo", "nzi",
"oc", "oj", "om", "or", "os", "osa", "ota",
- "pa", "pag", "pal", "pam", "pap", "pau", "pcd", "pdc",
+ "pa", "pag", "pal", "pam", "pap", "pau", "pcd", "pcm", "pdc",
"pdt", "peo", "pfl", "phn", "pi", "pl", "pms", "pnt",
"pon", "prg", "pro", "ps", "pt",
"qu", "quc", "qug",
@@ -274,7 +269,7 @@ static const char * const LANGUAGES_3[] = {
"nnh", "nor", "nog", "non", "nov", "nqo", "nbl", "nso",
"nus", "nav", "nwc", "nya", "nym", "nyn", "nyo", "nzi",
"oci", "oji", "orm", "ori", "oss", "osa", "ota",
- "pan", "pag", "pal", "pam", "pap", "pau", "pcd", "pdc",
+ "pan", "pag", "pal", "pam", "pap", "pau", "pcd", "pcm", "pdc",
"pdt", "peo", "pfl", "phn", "pli", "pol", "pms", "pnt",
"pon", "prg", "pro", "pus", "por",
"que", "quc", "qug",
@@ -466,15 +461,16 @@ typedef struct CanonicalizationMap {
* different semantic kinds of transformations.
*/
static const CanonicalizationMap CANONICALIZE_MAP[] = {
- { "art_LOJBAN", "jbo" }, /* registered name */
+ { "art__LOJBAN", "jbo" }, /* registered name */
{ "hy__AREVELA", "hy" }, /* Registered IANA variant */
{ "hy__AREVMDA", "hyw" }, /* Registered IANA variant */
+ { "zh__GUOYU", "zh" }, /* registered name */
+ { "zh__HAKKA", "hak" }, /* registered name */
+ { "zh__XIANG", "hsn" }, /* registered name */
+ // subtags with 3 chars won't be treated as variants.
{ "zh_GAN", "gan" }, /* registered name */
- { "zh_GUOYU", "zh" }, /* registered name */
- { "zh_HAKKA", "hak" }, /* registered name */
{ "zh_MIN_NAN", "nan" }, /* registered name */
{ "zh_WUU", "wuu" }, /* registered name */
- { "zh_XIANG", "hsn" }, /* registered name */
{ "zh_YUE", "yue" }, /* registered name */
};
@@ -596,13 +592,12 @@ compareKeywordStructs(const void * /*context*/, const void *left, const void *ri
return uprv_strcmp(leftString, rightString);
}
-static int32_t
-_getKeywords(const char *localeID,
- char prev,
- char *keywords, int32_t keywordCapacity,
- char *values, int32_t valuesCapacity, int32_t *valLen,
- UBool valuesToo,
- UErrorCode *status)
+U_CFUNC void
+ulocimp_getKeywords(const char *localeID,
+ char prev,
+ ByteSink& sink,
+ UBool valuesToo,
+ UErrorCode *status)
{
KeywordStruct keywordList[ULOC_MAX_NO_KEYWORDS];
@@ -612,8 +607,6 @@ _getKeywords(const char *localeID,
const char* equalSign = NULL;
const char* semicolon = NULL;
int32_t i = 0, j, n;
- int32_t keywordsLen = 0;
- int32_t valuesLen = 0;
if(prev == '@') { /* start of keyword definition */
/* we will grab pairs, trim spaces, lowercase keywords, sort and return */
@@ -628,7 +621,7 @@ _getKeywords(const char *localeID,
}
if(numKeywords == maxKeywords) {
*status = U_INTERNAL_PROGRAM_ERROR;
- return 0;
+ return;
}
equalSign = uprv_strchr(pos, '=');
semicolon = uprv_strchr(pos, ';');
@@ -636,13 +629,13 @@ _getKeywords(const char *localeID,
/* ';' before '=' [foo@currency;collation=pinyin] is illegal */
if(!equalSign || (semicolon && semicolon<equalSign)) {
*status = U_INVALID_FORMAT_ERROR;
- return 0;
+ return;
}
/* need to normalize both keyword and keyword name */
if(equalSign - pos >= ULOC_KEYWORD_BUFFER_LEN) {
/* keyword name too long for internal buffer */
*status = U_INTERNAL_PROGRAM_ERROR;
- return 0;
+ return;
}
for(i = 0, n = 0; i < equalSign - pos; ++i) {
if (pos[i] != ' ') {
@@ -653,7 +646,7 @@ _getKeywords(const char *localeID,
/* zero-length keyword is an error. */
if (n == 0) {
*status = U_INVALID_FORMAT_ERROR;
- return 0;
+ return;
}
keywordList[numKeywords].keyword[n] = 0;
@@ -668,7 +661,7 @@ _getKeywords(const char *localeID,
/* Premature end or zero-length value */
if (!*equalSign || equalSign == semicolon) {
*status = U_INVALID_FORMAT_ERROR;
- return 0;
+ return;
}
keywordList[numKeywords].valueStart = equalSign;
@@ -706,71 +699,58 @@ _getKeywords(const char *localeID,
/* Now construct the keyword part */
for(i = 0; i < numKeywords; i++) {
- if(keywordsLen + keywordList[i].keywordLen + 1< keywordCapacity) {
- uprv_strcpy(keywords+keywordsLen, keywordList[i].keyword);
- if(valuesToo) {
- keywords[keywordsLen + keywordList[i].keywordLen] = '=';
- } else {
- keywords[keywordsLen + keywordList[i].keywordLen] = 0;
- }
- }
- keywordsLen += keywordList[i].keywordLen + 1;
+ sink.Append(keywordList[i].keyword, keywordList[i].keywordLen);
if(valuesToo) {
- if(keywordsLen + keywordList[i].valueLen <= keywordCapacity) {
- uprv_strncpy(keywords+keywordsLen, keywordList[i].valueStart, keywordList[i].valueLen);
- }
- keywordsLen += keywordList[i].valueLen;
-
+ sink.Append("=", 1);
+ sink.Append(keywordList[i].valueStart, keywordList[i].valueLen);
if(i < numKeywords - 1) {
- if(keywordsLen < keywordCapacity) {
- keywords[keywordsLen] = ';';
- }
- keywordsLen++;
+ sink.Append(";", 1);
}
- }
- if(values) {
- if(valuesLen + keywordList[i].valueLen + 1< valuesCapacity) {
- uprv_strcpy(values+valuesLen, keywordList[i].valueStart);
- values[valuesLen + keywordList[i].valueLen] = 0;
- }
- valuesLen += keywordList[i].valueLen + 1;
- }
- }
- if(values) {
- values[valuesLen] = 0;
- if(valLen) {
- *valLen = valuesLen;
+ } else {
+ sink.Append("\0", 1);
}
}
- return u_terminateChars(keywords, keywordCapacity, keywordsLen, status);
- } else {
- return 0;
}
}
-U_CFUNC int32_t
-locale_getKeywords(const char *localeID,
- char prev,
- char *keywords, int32_t keywordCapacity,
- char *values, int32_t valuesCapacity, int32_t *valLen,
- UBool valuesToo,
- UErrorCode *status) {
- return _getKeywords(localeID, prev, keywords, keywordCapacity,
- values, valuesCapacity, valLen, valuesToo,
- status);
-}
-
U_CAPI int32_t U_EXPORT2
uloc_getKeywordValue(const char* localeID,
const char* keywordName,
char* buffer, int32_t bufferCapacity,
UErrorCode* status)
{
+ if (U_FAILURE(*status)) {
+ return 0;
+ }
+
+ CheckedArrayByteSink sink(buffer, bufferCapacity);
+ ulocimp_getKeywordValue(localeID, keywordName, sink, status);
+
+ int32_t reslen = sink.NumberOfBytesAppended();
+
+ if (U_FAILURE(*status)) {
+ return reslen;
+ }
+
+ if (sink.Overflowed()) {
+ *status = U_BUFFER_OVERFLOW_ERROR;
+ } else {
+ u_terminateChars(buffer, bufferCapacity, reslen, status);
+ }
+
+ return reslen;
+}
+
+U_CAPI void U_EXPORT2
+ulocimp_getKeywordValue(const char* localeID,
+ const char* keywordName,
+ icu::ByteSink& sink,
+ UErrorCode* status)
+{
const char* startSearchHere = NULL;
const char* nextSeparator = NULL;
char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN];
char localeKeywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN];
- int32_t result = 0;
if(status && U_SUCCESS(*status) && localeID) {
char tempBuffer[ULOC_FULLNAME_CAPACITY];
@@ -778,12 +758,12 @@ uloc_getKeywordValue(const char* localeID,
if (keywordName == NULL || keywordName[0] == 0) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
- return 0;
+ return;
}
locale_canonKeywordName(keywordNameBuffer, keywordName, status);
if(U_FAILURE(*status)) {
- return 0;
+ return;
}
if (_hasBCP47Extension(localeID)) {
@@ -795,7 +775,7 @@ uloc_getKeywordValue(const char* localeID,
startSearchHere = locale_getKeywordsStart(tmpLocaleID);
if(startSearchHere == NULL) {
/* no keywords, return at once */
- return 0;
+ return;
}
/* find the first keyword */
@@ -807,7 +787,7 @@ uloc_getKeywordValue(const char* localeID,
nextSeparator = uprv_strchr(startSearchHere, '=');
if(!nextSeparator) {
*status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
- return 0;
+ return;
}
/* strip leading & trailing spaces (TC decided to tolerate these) */
while(*startSearchHere == ' ') {
@@ -821,20 +801,20 @@ uloc_getKeywordValue(const char* localeID,
/* copy & normalize keyName from locale */
if (startSearchHere == keyValueTail) {
*status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
- return 0;
+ return;
}
keyValueLen = 0;
while (startSearchHere < keyValueTail) {
if (!UPRV_ISALPHANUM(*startSearchHere)) {
*status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
- return 0;
+ return;
}
if (keyValueLen < ULOC_KEYWORD_BUFFER_LEN - 1) {
localeKeywordNameBuffer[keyValueLen++] = uprv_tolower(*startSearchHere++);
} else {
/* keyword name too long for internal buffer */
*status = U_INTERNAL_PROGRAM_ERROR;
- return 0;
+ return;
}
}
localeKeywordNameBuffer[keyValueLen] = 0; /* terminate */
@@ -855,28 +835,20 @@ uloc_getKeywordValue(const char* localeID,
/* Now copy the value, but check well-formedness */
if (nextSeparator == keyValueTail) {
*status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */
- return 0;
+ return;
}
- keyValueLen = 0;
while (nextSeparator < keyValueTail) {
if (!UPRV_ISALPHANUM(*nextSeparator) && !UPRV_OK_VALUE_PUNCTUATION(*nextSeparator)) {
*status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
- return 0;
- }
- if (keyValueLen < bufferCapacity) {
- /* Should we lowercase value to return here? Tests expect as-is. */
- buffer[keyValueLen++] = *nextSeparator++;
- } else { /* keep advancing so we return correct length in case of overflow */
- keyValueLen++;
- nextSeparator++;
+ return;
}
+ /* Should we lowercase value to return here? Tests expect as-is. */
+ sink.Append(nextSeparator++, 1);
}
- result = u_terminateChars(buffer, bufferCapacity, keyValueLen, status);
- return result;
+ return;
}
}
}
- return 0;
}
U_CAPI int32_t U_EXPORT2
@@ -899,13 +871,15 @@ uloc_setKeywordValue(const char* keywordName,
char* startSearchHere = NULL;
char* keywordStart = NULL;
CharString updatedKeysAndValues;
- int32_t updatedKeysAndValuesLen;
UBool handledInputKeyAndValue = FALSE;
char keyValuePrefix = '@';
if(U_FAILURE(*status)) {
return -1;
}
+ if (*status == U_STRING_NOT_TERMINATED_WARNING) {
+ *status = U_ZERO_ERROR;
+ }
if (keywordName == NULL || keywordName[0] == 0 || bufferCapacity <= 1) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
return 0;
@@ -943,6 +917,7 @@ uloc_setKeywordValue(const char* keywordName,
startSearchHere = (char*)locale_getKeywordsStart(buffer);
if(startSearchHere == NULL || (startSearchHere[1]==0)) {
if(keywordValueLen == 0) { /* no keywords = nothing to remove */
+ U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
return bufLen;
}
@@ -962,6 +937,7 @@ uloc_setKeywordValue(const char* keywordName,
startSearchHere += keywordNameLen;
*startSearchHere++ = '=';
uprv_strcpy(startSearchHere, keywordValueBuffer);
+ U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
return needLen;
} /* end shortcut - no @ */
@@ -1076,20 +1052,26 @@ uloc_setKeywordValue(const char* keywordName,
if (!handledInputKeyAndValue || U_FAILURE(*status)) {
/* if input key/value specified removal of a keyword not present in locale, or
* there was an error in CharString.append, leave original locale alone. */
+ U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
return bufLen;
}
- updatedKeysAndValuesLen = updatedKeysAndValues.length();
- /* needLen = length of the part before '@' + length of updated key-value part including '@' */
- needLen = (int32_t)(startSearchHere - buffer) + updatedKeysAndValuesLen;
- if(needLen >= bufferCapacity) {
+ // needLen = length of the part before '@'
+ needLen = (int32_t)(startSearchHere - buffer);
+ // Check to see can we fit the startSearchHere, if not, return
+ // U_BUFFER_OVERFLOW_ERROR without copy updatedKeysAndValues into it.
+ // We do this because this API function does not behave like most others:
+ // It promises never to set a U_STRING_NOT_TERMINATED_WARNING.
+ // When the contents fits but without the terminating NUL, in this case we need to not change
+ // the buffer contents and return with a buffer overflow error.
+ int32_t appendLength = updatedKeysAndValues.length();
+ if (appendLength >= bufferCapacity - needLen) {
*status = U_BUFFER_OVERFLOW_ERROR;
- return needLen; /* no change */
- }
- if (updatedKeysAndValuesLen > 0) {
- uprv_strncpy(startSearchHere, updatedKeysAndValues.data(), updatedKeysAndValuesLen);
+ return needLen + appendLength;
}
- buffer[needLen]=0;
+ needLen += updatedKeysAndValues.extract(
+ startSearchHere, bufferCapacity - needLen, *status);
+ U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
return needLen;
}
@@ -1131,26 +1113,6 @@ static int16_t _findIndex(const char* const* list, const char* key)
return -1;
}
-/* count the length of src while copying it to dest; return strlen(src) */
-static inline int32_t
-_copyCount(char *dest, int32_t destCapacity, const char *src) {
- const char *anchor;
- char c;
-
- anchor=src;
- for(;;) {
- if((c=*src)==0) {
- return (int32_t)(src-anchor);
- }
- if(destCapacity<=0) {
- return (int32_t)((src-anchor)+uprv_strlen(src));
- }
- ++src;
- *dest++=c;
- --destCapacity;
- }
-}
-
U_CFUNC const char*
uloc_getCurrentCountryID(const char* oldID){
int32_t offset = _findIndex(DEPRECATED_COUNTRIES, oldID);
@@ -1175,13 +1137,11 @@ uloc_getCurrentLanguageID(const char* oldID){
*
* TODO try to use this in Locale
*/
-U_CFUNC int32_t
+CharString U_EXPORT2
ulocimp_getLanguage(const char *localeID,
- char *language, int32_t languageCapacity,
- const char **pEnd) {
- int32_t i=0;
- int32_t offset;
- char lang[4]={ 0, 0, 0, 0 }; /* temporary buffer to hold language code for searching */
+ const char **pEnd,
+ UErrorCode &status) {
+ CharString result;
if (uprv_stricmp(localeID, "root") == 0) {
localeID += 4;
@@ -1195,48 +1155,38 @@ ulocimp_getLanguage(const char *localeID,
/* if it starts with i- or x- then copy that prefix */
if(_isIDPrefix(localeID)) {
- if(i<languageCapacity) {
- language[i]=(char)uprv_tolower(*localeID);
- }
- if(i<languageCapacity) {
- language[i+1]='-';
- }
- i+=2;
+ result.append((char)uprv_tolower(*localeID), status);
+ result.append('-', status);
localeID+=2;
}
/* copy the language as far as possible and count its length */
while(!_isTerminator(*localeID) && !_isIDSeparator(*localeID)) {
- if(i<languageCapacity) {
- language[i]=(char)uprv_tolower(*localeID);
- }
- if(i<3) {
- U_ASSERT(i>=0);
- lang[i]=(char)uprv_tolower(*localeID);
- }
- i++;
+ result.append((char)uprv_tolower(*localeID), status);
localeID++;
}
- if(i==3) {
+ if(result.length()==3) {
/* convert 3 character code to 2 character code if possible *CWB*/
- offset=_findIndex(LANGUAGES_3, lang);
+ int32_t offset = _findIndex(LANGUAGES_3, result.data());
if(offset>=0) {
- i=_copyCount(language, languageCapacity, LANGUAGES[offset]);
+ result.clear();
+ result.append(LANGUAGES[offset], status);
}
}
if(pEnd!=NULL) {
*pEnd=localeID;
}
- return i;
+
+ return result;
}
-U_CFUNC int32_t
+CharString U_EXPORT2
ulocimp_getScript(const char *localeID,
- char *script, int32_t scriptCapacity,
- const char **pEnd)
-{
+ const char **pEnd,
+ UErrorCode &status) {
+ CharString result;
int32_t idLen = 0;
if (pEnd != NULL) {
@@ -1255,139 +1205,99 @@ ulocimp_getScript(const char *localeID,
if (pEnd != NULL) {
*pEnd = localeID+idLen;
}
- if(idLen > scriptCapacity) {
- idLen = scriptCapacity;
- }
if (idLen >= 1) {
- script[0]=(char)uprv_toupper(*(localeID++));
+ result.append((char)uprv_toupper(*(localeID++)), status);
}
for (i = 1; i < idLen; i++) {
- script[i]=(char)uprv_tolower(*(localeID++));
+ result.append((char)uprv_tolower(*(localeID++)), status);
}
}
- else {
- idLen = 0;
- }
- return idLen;
+
+ return result;
}
-U_CFUNC int32_t
+CharString U_EXPORT2
ulocimp_getCountry(const char *localeID,
- char *country, int32_t countryCapacity,
- const char **pEnd)
-{
+ const char **pEnd,
+ UErrorCode &status) {
+ CharString result;
int32_t idLen=0;
- char cnty[ULOC_COUNTRY_CAPACITY]={ 0, 0, 0, 0 };
- int32_t offset;
/* copy the country as far as possible and count its length */
while(!_isTerminator(localeID[idLen]) && !_isIDSeparator(localeID[idLen])) {
- if(idLen<(ULOC_COUNTRY_CAPACITY-1)) { /*CWB*/
- cnty[idLen]=(char)uprv_toupper(localeID[idLen]);
- }
+ result.append((char)uprv_toupper(localeID[idLen]), status);
idLen++;
}
/* the country should be either length 2 or 3 */
if (idLen == 2 || idLen == 3) {
- UBool gotCountry = FALSE;
/* convert 3 character code to 2 character code if possible *CWB*/
if(idLen==3) {
- offset=_findIndex(COUNTRIES_3, cnty);
+ int32_t offset = _findIndex(COUNTRIES_3, result.data());
if(offset>=0) {
- idLen=_copyCount(country, countryCapacity, COUNTRIES[offset]);
- gotCountry = TRUE;
- }
- }
- if (!gotCountry) {
- int32_t i = 0;
- for (i = 0; i < idLen; i++) {
- if (i < countryCapacity) {
- country[i]=(char)uprv_toupper(localeID[i]);
- }
+ result.clear();
+ result.append(COUNTRIES[offset], status);
}
}
localeID+=idLen;
} else {
- idLen = 0;
+ result.clear();
}
if(pEnd!=NULL) {
*pEnd=localeID;
}
- return idLen;
+ return result;
}
/**
* @param needSeparator if true, then add leading '_' if any variants
* are added to 'variant'
*/
-static int32_t
-_getVariantEx(const char *localeID,
- char prev,
- char *variant, int32_t variantCapacity,
- UBool needSeparator) {
- int32_t i=0;
+static void
+_getVariant(const char *localeID,
+ char prev,
+ ByteSink& sink,
+ UBool needSeparator) {
+ UBool hasVariant = FALSE;
/* get one or more variant tags and separate them with '_' */
if(_isIDSeparator(prev)) {
/* get a variant string after a '-' or '_' */
while(!_isTerminator(*localeID)) {
if (needSeparator) {
- if (i<variantCapacity) {
- variant[i] = '_';
- }
- ++i;
+ sink.Append("_", 1);
needSeparator = FALSE;
}
- if(i<variantCapacity) {
- variant[i]=(char)uprv_toupper(*localeID);
- if(variant[i]=='-') {
- variant[i]='_';
- }
- }
- i++;
+ char c = (char)uprv_toupper(*localeID);
+ if (c == '-') c = '_';
+ sink.Append(&c, 1);
+ hasVariant = TRUE;
localeID++;
}
}
/* if there is no variant tag after a '-' or '_' then look for '@' */
- if(i==0) {
+ if(!hasVariant) {
if(prev=='@') {
/* keep localeID */
} else if((localeID=locale_getKeywordsStart(localeID))!=NULL) {
++localeID; /* point after the '@' */
} else {
- return 0;
+ return;
}
while(!_isTerminator(*localeID)) {
if (needSeparator) {
- if (i<variantCapacity) {
- variant[i] = '_';
- }
- ++i;
+ sink.Append("_", 1);
needSeparator = FALSE;
}
- if(i<variantCapacity) {
- variant[i]=(char)uprv_toupper(*localeID);
- if(variant[i]=='-' || variant[i]==',') {
- variant[i]='_';
- }
- }
- i++;
+ char c = (char)uprv_toupper(*localeID);
+ if (c == '-' || c == ',') c = '_';
+ sink.Append(&c, 1);
localeID++;
}
}
-
- return i;
-}
-
-static int32_t
-_getVariant(const char *localeID,
- char prev,
- char *variant, int32_t variantCapacity) {
- return _getVariantEx(localeID, prev, variant, variantCapacity, FALSE);
}
/* Keyword enumeration */
@@ -1486,9 +1396,6 @@ U_CAPI UEnumeration* U_EXPORT2
uloc_openKeywords(const char* localeID,
UErrorCode* status)
{
- int32_t i=0;
- char keywords[256];
- int32_t keywordsCapacity = 256;
char tempBuffer[ULOC_FULLNAME_CAPACITY];
const char* tmpLocaleID;
@@ -1506,34 +1413,42 @@ uloc_openKeywords(const char* localeID,
}
/* Skip the language */
- ulocimp_getLanguage(tmpLocaleID, NULL, 0, &tmpLocaleID);
+ ulocimp_getLanguage(tmpLocaleID, &tmpLocaleID, *status);
+ if (U_FAILURE(*status)) {
+ return 0;
+ }
+
if(_isIDSeparator(*tmpLocaleID)) {
const char *scriptID;
/* Skip the script if available */
- ulocimp_getScript(tmpLocaleID+1, NULL, 0, &scriptID);
+ ulocimp_getScript(tmpLocaleID+1, &scriptID, *status);
+ if (U_FAILURE(*status)) {
+ return 0;
+ }
if(scriptID != tmpLocaleID+1) {
/* Found optional script */
tmpLocaleID = scriptID;
}
/* Skip the Country */
if (_isIDSeparator(*tmpLocaleID)) {
- ulocimp_getCountry(tmpLocaleID+1, NULL, 0, &tmpLocaleID);
- if(_isIDSeparator(*tmpLocaleID)) {
- _getVariant(tmpLocaleID+1, *tmpLocaleID, NULL, 0);
+ ulocimp_getCountry(tmpLocaleID+1, &tmpLocaleID, *status);
+ if (U_FAILURE(*status)) {
+ return 0;
}
}
}
/* keywords are located after '@' */
if((tmpLocaleID = locale_getKeywordsStart(tmpLocaleID)) != NULL) {
- i=locale_getKeywords(tmpLocaleID+1, '@', keywords, keywordsCapacity, NULL, 0, NULL, FALSE, status);
- }
-
- if(i) {
- return uloc_openKeywordList(keywords, i, status);
- } else {
- return NULL;
+ CharString keywords;
+ CharStringByteSink sink(&keywords);
+ ulocimp_getKeywords(tmpLocaleID+1, '@', sink, FALSE, status);
+ if (U_FAILURE(*status)) {
+ return NULL;
+ }
+ return uloc_openKeywordList(keywords.data(), keywords.length(), status);
}
+ return NULL;
}
@@ -1553,24 +1468,20 @@ static const char i_default[] = {'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'};
*
* This is the code underlying uloc_getName and uloc_canonicalize.
*/
-static int32_t
+static void
_canonicalize(const char* localeID,
- char* result,
- int32_t resultCapacity,
+ ByteSink& sink,
uint32_t options,
UErrorCode* err) {
- int32_t j, len, fieldCount=0, scriptSize=0, variantSize=0, nameCapacity;
- char localeBuffer[ULOC_FULLNAME_CAPACITY];
+ int32_t j, fieldCount=0, scriptSize=0, variantSize=0;
char tempBuffer[ULOC_FULLNAME_CAPACITY];
const char* origLocaleID;
const char* tmpLocaleID;
const char* keywordAssign = NULL;
const char* separatorIndicator = NULL;
- char* name;
- char* variant = NULL; /* pointer into name, or NULL */
if (U_FAILURE(*err)) {
- return 0;
+ return;
}
if (_hasBCP47Extension(localeID)) {
@@ -1584,77 +1495,55 @@ _canonicalize(const char* localeID,
origLocaleID=tmpLocaleID;
- /* if we are doing a full canonicalization, then put results in
- localeBuffer, if necessary; otherwise send them to result. */
- if (/*OPTION_SET(options, _ULOC_CANONICALIZE) &&*/
- (result == NULL || resultCapacity < (int32_t)sizeof(localeBuffer))) {
- name = localeBuffer;
- nameCapacity = (int32_t)sizeof(localeBuffer);
- } else {
- name = result;
- nameCapacity = resultCapacity;
- }
-
/* get all pieces, one after another, and separate with '_' */
- len=ulocimp_getLanguage(tmpLocaleID, name, nameCapacity, &tmpLocaleID);
-
- if(len == I_DEFAULT_LENGTH && uprv_strncmp(origLocaleID, i_default, len) == 0) {
- const char *d = uloc_getDefault();
+ CharString tag = ulocimp_getLanguage(tmpLocaleID, &tmpLocaleID, *err);
- len = (int32_t)uprv_strlen(d);
-
- if (name != NULL) {
- uprv_memcpy(name, d, len);
- }
+ if (tag.length() == I_DEFAULT_LENGTH &&
+ uprv_strncmp(origLocaleID, i_default, I_DEFAULT_LENGTH) == 0) {
+ tag.clear();
+ tag.append(uloc_getDefault(), *err);
} else if(_isIDSeparator(*tmpLocaleID)) {
const char *scriptID;
++fieldCount;
- if(len<nameCapacity) {
- name[len]='_';
- }
- ++len;
+ tag.append('_', *err);
- scriptSize=ulocimp_getScript(tmpLocaleID+1,
- (len<nameCapacity ? name+len : NULL), nameCapacity-len, &scriptID);
+ CharString script = ulocimp_getScript(tmpLocaleID+1, &scriptID, *err);
+ tag.append(script, *err);
+ scriptSize = script.length();
if(scriptSize > 0) {
/* Found optional script */
tmpLocaleID = scriptID;
++fieldCount;
- len+=scriptSize;
if (_isIDSeparator(*tmpLocaleID)) {
/* If there is something else, then we add the _ */
- if(len<nameCapacity) {
- name[len]='_';
- }
- ++len;
+ tag.append('_', *err);
}
}
if (_isIDSeparator(*tmpLocaleID)) {
const char *cntryID;
- int32_t cntrySize = ulocimp_getCountry(tmpLocaleID+1,
- (len<nameCapacity ? name+len : NULL), nameCapacity-len, &cntryID);
- if (cntrySize > 0) {
+
+ CharString country = ulocimp_getCountry(tmpLocaleID+1, &cntryID, *err);
+ tag.append(country, *err);
+ if (!country.isEmpty()) {
/* Found optional country */
tmpLocaleID = cntryID;
- len+=cntrySize;
}
if(_isIDSeparator(*tmpLocaleID)) {
/* If there is something else, then we add the _ if we found country before. */
- if (cntrySize >= 0 && ! _isIDSeparator(*(tmpLocaleID+1)) ) {
+ if (!_isIDSeparator(*(tmpLocaleID+1))) {
++fieldCount;
- if(len<nameCapacity) {
- name[len]='_';
- }
- ++len;
+ tag.append('_', *err);
}
- variantSize = _getVariant(tmpLocaleID+1, *tmpLocaleID,
- (len<nameCapacity ? name+len : NULL), nameCapacity-len);
+ variantSize = -tag.length();
+ {
+ CharStringByteSink s(&tag);
+ _getVariant(tmpLocaleID+1, *tmpLocaleID, s, FALSE);
+ }
+ variantSize += tag.length();
if (variantSize > 0) {
- variant = len<nameCapacity ? name+len : NULL;
- len += variantSize;
tmpLocaleID += variantSize + 1; /* skip '_' and variant */
}
}
@@ -1672,10 +1561,7 @@ _canonicalize(const char* localeID,
done = TRUE;
break;
default:
- if (len<nameCapacity) {
- name[len] = c;
- }
- ++len;
+ tag.append(c, *err);
++tmpLocaleID;
break;
}
@@ -1697,10 +1583,7 @@ _canonicalize(const char* localeID,
if (c == 0) {
break;
}
- if (len<nameCapacity) {
- name[len] = c;
- }
- ++len;
+ tag.append(c, *err);
++tmpLocaleID;
}
}
@@ -1708,60 +1591,49 @@ _canonicalize(const char* localeID,
if (OPTION_SET(options, _ULOC_CANONICALIZE)) {
/* Handle @FOO variant if @ is present and not followed by = */
if (tmpLocaleID!=NULL && keywordAssign==NULL) {
- int32_t posixVariantSize;
/* Add missing '_' if needed */
if (fieldCount < 2 || (fieldCount < 3 && scriptSize > 0)) {
do {
- if(len<nameCapacity) {
- name[len]='_';
- }
- ++len;
+ tag.append('_', *err);
++fieldCount;
} while(fieldCount<2);
}
- posixVariantSize = _getVariantEx(tmpLocaleID+1, '@', name+len, nameCapacity-len,
- (UBool)(variantSize > 0));
+
+ int32_t posixVariantSize = -tag.length();
+ {
+ CharStringByteSink s(&tag);
+ _getVariant(tmpLocaleID+1, '@', s, (UBool)(variantSize > 0));
+ }
+ posixVariantSize += tag.length();
if (posixVariantSize > 0) {
- if (variant == NULL) {
- variant = name+len;
- }
- len += posixVariantSize;
variantSize += posixVariantSize;
}
}
/* Look up the ID in the canonicalization map */
for (j=0; j<UPRV_LENGTHOF(CANONICALIZE_MAP); j++) {
- const char* id = CANONICALIZE_MAP[j].id;
- int32_t n = (int32_t)uprv_strlen(id);
- if (len == n && uprv_strncmp(name, id, n) == 0) {
- if (n == 0 && tmpLocaleID != NULL) {
+ StringPiece id(CANONICALIZE_MAP[j].id);
+ if (tag == id) {
+ if (id.empty() && tmpLocaleID != NULL) {
break; /* Don't remap "" if keywords present */
}
- len = _copyCount(name, nameCapacity, CANONICALIZE_MAP[j].canonicalID);
+ tag.clear();
+ tag.append(CANONICALIZE_MAP[j].canonicalID, *err);
break;
}
}
}
+ sink.Append(tag.data(), tag.length());
+
if (!OPTION_SET(options, _ULOC_STRIP_KEYWORDS)) {
if (tmpLocaleID!=NULL && keywordAssign!=NULL &&
(!separatorIndicator || separatorIndicator > keywordAssign)) {
- if(len<nameCapacity) {
- name[len]='@';
- }
- ++len;
+ sink.Append("@", 1);
++fieldCount;
- len += _getKeywords(tmpLocaleID+1, '@', (len<nameCapacity ? name+len : NULL), nameCapacity-len,
- NULL, 0, NULL, TRUE, err);
+ ulocimp_getKeywords(tmpLocaleID+1, '@', sink, TRUE, err);
}
}
-
- if (U_SUCCESS(*err) && result != NULL && name == localeBuffer) {
- uprv_strncpy(result, localeBuffer, (len > resultCapacity) ? resultCapacity : len);
- }
-
- return u_terminateChars(result, resultCapacity, len, err);
}
/* ### ID parsing API **************************************************/
@@ -1808,7 +1680,6 @@ uloc_getLanguage(const char* localeID,
UErrorCode* err)
{
/* uloc_getLanguage will return a 2 character iso-639 code if one exists. *CWB*/
- int32_t i=0;
if (err==NULL || U_FAILURE(*err)) {
return 0;
@@ -1818,8 +1689,7 @@ uloc_getLanguage(const char* localeID,
localeID=uloc_getDefault();
}
- i=ulocimp_getLanguage(localeID, language, languageCapacity, NULL);
- return u_terminateChars(language, languageCapacity, i, err);
+ return ulocimp_getLanguage(localeID, NULL, *err).extract(language, languageCapacity, *err);
}
U_CAPI int32_t U_EXPORT2
@@ -1828,8 +1698,6 @@ uloc_getScript(const char* localeID,
int32_t scriptCapacity,
UErrorCode* err)
{
- int32_t i=0;
-
if(err==NULL || U_FAILURE(*err)) {
return 0;
}
@@ -1839,11 +1707,15 @@ uloc_getScript(const char* localeID,
}
/* skip the language */
- ulocimp_getLanguage(localeID, NULL, 0, &localeID);
+ ulocimp_getLanguage(localeID, &localeID, *err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
+
if(_isIDSeparator(*localeID)) {
- i=ulocimp_getScript(localeID+1, script, scriptCapacity, NULL);
+ return ulocimp_getScript(localeID+1, NULL, *err).extract(script, scriptCapacity, *err);
}
- return u_terminateChars(script, scriptCapacity, i, err);
+ return u_terminateChars(script, scriptCapacity, 0, err);
}
U_CAPI int32_t U_EXPORT2
@@ -1852,8 +1724,6 @@ uloc_getCountry(const char* localeID,
int32_t countryCapacity,
UErrorCode* err)
{
- int32_t i=0;
-
if(err==NULL || U_FAILURE(*err)) {
return 0;
}
@@ -1863,20 +1733,27 @@ uloc_getCountry(const char* localeID,
}
/* Skip the language */
- ulocimp_getLanguage(localeID, NULL, 0, &localeID);
+ ulocimp_getLanguage(localeID, &localeID, *err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
+
if(_isIDSeparator(*localeID)) {
const char *scriptID;
/* Skip the script if available */
- ulocimp_getScript(localeID+1, NULL, 0, &scriptID);
+ ulocimp_getScript(localeID+1, &scriptID, *err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
if(scriptID != localeID+1) {
/* Found optional script */
localeID = scriptID;
}
if(_isIDSeparator(*localeID)) {
- i=ulocimp_getCountry(localeID+1, country, countryCapacity, NULL);
+ return ulocimp_getCountry(localeID+1, NULL, *err).extract(country, countryCapacity, *err);
}
}
- return u_terminateChars(country, countryCapacity, i, err);
+ return u_terminateChars(country, countryCapacity, 0, err);
}
U_CAPI int32_t U_EXPORT2
@@ -1903,11 +1780,18 @@ uloc_getVariant(const char* localeID,
}
/* Skip the language */
- ulocimp_getLanguage(tmpLocaleID, NULL, 0, &tmpLocaleID);
+ ulocimp_getLanguage(tmpLocaleID, &tmpLocaleID, *err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
+
if(_isIDSeparator(*tmpLocaleID)) {
const char *scriptID;
/* Skip the script if available */
- ulocimp_getScript(tmpLocaleID+1, NULL, 0, &scriptID);
+ ulocimp_getScript(tmpLocaleID+1, &scriptID, *err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
if(scriptID != tmpLocaleID+1) {
/* Found optional script */
tmpLocaleID = scriptID;
@@ -1915,7 +1799,10 @@ uloc_getVariant(const char* localeID,
/* Skip the Country */
if (_isIDSeparator(*tmpLocaleID)) {
const char *cntryID;
- ulocimp_getCountry(tmpLocaleID+1, NULL, 0, &cntryID);
+ ulocimp_getCountry(tmpLocaleID+1, &cntryID, *err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
if (cntryID != tmpLocaleID+1) {
/* Found optional country */
tmpLocaleID = cntryID;
@@ -1925,18 +1812,24 @@ uloc_getVariant(const char* localeID,
if (tmpLocaleID != cntryID && _isIDSeparator(tmpLocaleID[1])) {
tmpLocaleID++;
}
- i=_getVariant(tmpLocaleID+1, *tmpLocaleID, variant, variantCapacity);
+
+ CheckedArrayByteSink sink(variant, variantCapacity);
+ _getVariant(tmpLocaleID+1, *tmpLocaleID, sink, FALSE);
+
+ i = sink.NumberOfBytesAppended();
+
+ if (U_FAILURE(*err)) {
+ return i;
+ }
+
+ if (sink.Overflowed()) {
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ return i;
+ }
}
}
}
- /* removed by weiv. We don't want to handle POSIX variants anymore. Use canonicalization function */
- /* if we do not have a variant tag yet then try a POSIX variant after '@' */
-/*
- if(!haveVariant && (localeID=uprv_strrchr(localeID, '@'))!=NULL) {
- i=_getVariant(localeID+1, '@', variant, variantCapacity);
- }
-*/
return u_terminateChars(variant, variantCapacity, i, err);
}
@@ -1946,7 +1839,34 @@ uloc_getName(const char* localeID,
int32_t nameCapacity,
UErrorCode* err)
{
- return _canonicalize(localeID, name, nameCapacity, 0, err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
+
+ CheckedArrayByteSink sink(name, nameCapacity);
+ ulocimp_getName(localeID, sink, err);
+
+ int32_t reslen = sink.NumberOfBytesAppended();
+
+ if (U_FAILURE(*err)) {
+ return reslen;
+ }
+
+ if (sink.Overflowed()) {
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ } else {
+ u_terminateChars(name, nameCapacity, reslen, err);
+ }
+
+ return reslen;
+}
+
+U_CAPI void U_EXPORT2
+ulocimp_getName(const char* localeID,
+ ByteSink& sink,
+ UErrorCode* err)
+{
+ _canonicalize(localeID, sink, 0, err);
}
U_CAPI int32_t U_EXPORT2
@@ -1955,7 +1875,34 @@ uloc_getBaseName(const char* localeID,
int32_t nameCapacity,
UErrorCode* err)
{
- return _canonicalize(localeID, name, nameCapacity, _ULOC_STRIP_KEYWORDS, err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
+
+ CheckedArrayByteSink sink(name, nameCapacity);
+ ulocimp_getBaseName(localeID, sink, err);
+
+ int32_t reslen = sink.NumberOfBytesAppended();
+
+ if (U_FAILURE(*err)) {
+ return reslen;
+ }
+
+ if (sink.Overflowed()) {
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ } else {
+ u_terminateChars(name, nameCapacity, reslen, err);
+ }
+
+ return reslen;
+}
+
+U_CAPI void U_EXPORT2
+ulocimp_getBaseName(const char* localeID,
+ ByteSink& sink,
+ UErrorCode* err)
+{
+ _canonicalize(localeID, sink, _ULOC_STRIP_KEYWORDS, err);
}
U_CAPI int32_t U_EXPORT2
@@ -1964,7 +1911,34 @@ uloc_canonicalize(const char* localeID,
int32_t nameCapacity,
UErrorCode* err)
{
- return _canonicalize(localeID, name, nameCapacity, _ULOC_CANONICALIZE, err);
+ if (U_FAILURE(*err)) {
+ return 0;
+ }
+
+ CheckedArrayByteSink sink(name, nameCapacity);
+ ulocimp_canonicalize(localeID, sink, err);
+
+ int32_t reslen = sink.NumberOfBytesAppended();
+
+ if (U_FAILURE(*err)) {
+ return reslen;
+ }
+
+ if (sink.Overflowed()) {
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ } else {
+ u_terminateChars(name, nameCapacity, reslen, err);
+ }
+
+ return reslen;
+}
+
+U_CAPI void U_EXPORT2
+ulocimp_canonicalize(const char* localeID,
+ ByteSink& sink,
+ UErrorCode* err)
+{
+ _canonicalize(localeID, sink, _ULOC_CANONICALIZE, err);
}
U_CAPI const char* U_EXPORT2
@@ -2040,22 +2014,22 @@ uloc_getLCID(const char* localeID)
// uprv_convertToLCID does not support keywords other than collation.
// Remove all keywords except collation.
int32_t len;
- char collVal[ULOC_KEYWORDS_CAPACITY];
char tmpLocaleID[ULOC_FULLNAME_CAPACITY];
- len = uloc_getKeywordValue(localeID, "collation", collVal,
- UPRV_LENGTHOF(collVal) - 1, &status);
-
- if (U_SUCCESS(status) && len > 0) {
- collVal[len] = 0;
+ CharString collVal;
+ {
+ CharStringByteSink sink(&collVal);
+ ulocimp_getKeywordValue(localeID, "collation", sink, &status);
+ }
+ if (U_SUCCESS(status) && !collVal.isEmpty()) {
len = uloc_getBaseName(localeID, tmpLocaleID,
UPRV_LENGTHOF(tmpLocaleID) - 1, &status);
if (U_SUCCESS(status) && len > 0) {
tmpLocaleID[len] = 0;
- len = uloc_setKeywordValue("collation", collVal, tmpLocaleID,
+ len = uloc_setKeywordValue("collation", collVal.data(), tmpLocaleID,
UPRV_LENGTHOF(tmpLocaleID) - len - 1, &status);
if (U_SUCCESS(status) && len > 0) {
@@ -2123,301 +2097,6 @@ uloc_getISOCountries()
return COUNTRIES;
}
-
-/* this function to be moved into cstring.c later */
-static char gDecimal = 0;
-
-static /* U_CAPI */
-double
-/* U_EXPORT2 */
-_uloc_strtod(const char *start, char **end) {
- char *decimal;
- char *myEnd;
- char buf[30];
- double rv;
- if (!gDecimal) {
- char rep[5];
- /* For machines that decide to change the decimal on you,
- and try to be too smart with localization.
- This normally should be just a '.'. */
- sprintf(rep, "%+1.1f", 1.0);
- gDecimal = rep[2];
- }
-
- if(gDecimal == '.') {
- return uprv_strtod(start, end); /* fall through to OS */
- } else {
- uprv_strncpy(buf, start, 29);
- buf[29]=0;
- decimal = uprv_strchr(buf, '.');
- if(decimal) {
- *decimal = gDecimal;
- } else {
- return uprv_strtod(start, end); /* no decimal point */
- }
- rv = uprv_strtod(buf, &myEnd);
- if(end) {
- *end = (char*)(start+(myEnd-buf)); /* cast away const (to follow uprv_strtod API.) */
- }
- return rv;
- }
-}
-
-typedef struct {
- float q;
- int32_t dummy; /* to avoid uninitialized memory copy from qsort */
- char locale[ULOC_FULLNAME_CAPACITY+1];
-} _acceptLangItem;
-
-static int32_t U_CALLCONV
-uloc_acceptLanguageCompare(const void * /*context*/, const void *a, const void *b)
-{
- const _acceptLangItem *aa = (const _acceptLangItem*)a;
- const _acceptLangItem *bb = (const _acceptLangItem*)b;
-
- int32_t rc = 0;
- if(bb->q < aa->q) {
- rc = -1; /* A > B */
- } else if(bb->q > aa->q) {
- rc = 1; /* A < B */
- } else {
- rc = 0; /* A = B */
- }
-
- if(rc==0) {
- rc = uprv_stricmp(aa->locale, bb->locale);
- }
-
-#if defined(ULOC_DEBUG)
- /* fprintf(stderr, "a:[%s:%g], b:[%s:%g] -> %d\n",
- aa->locale, aa->q,
- bb->locale, bb->q,
- rc);*/
-#endif
-
- return rc;
-}
-
-/*
-mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53
-*/
-
-U_CAPI int32_t U_EXPORT2
-uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult *outResult,
- const char *httpAcceptLanguage,
- UEnumeration* availableLocales,
- UErrorCode *status)
-{
- MaybeStackArray<_acceptLangItem, 4> items; // Struct for collecting items.
- char tmp[ULOC_FULLNAME_CAPACITY +1];
- int32_t n = 0;
- const char *itemEnd;
- const char *paramEnd;
- const char *s;
- const char *t;
- int32_t res;
- int32_t i;
- int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage);
-
- if(U_FAILURE(*status)) {
- return -1;
- }
-
- for(s=httpAcceptLanguage;s&&*s;) {
- while(isspace(*s)) /* eat space at the beginning */
- s++;
- itemEnd=uprv_strchr(s,',');
- paramEnd=uprv_strchr(s,';');
- if(!itemEnd) {
- itemEnd = httpAcceptLanguage+l; /* end of string */
- }
- if(paramEnd && paramEnd<itemEnd) {
- /* semicolon (;) is closer than end (,) */
- t = paramEnd+1;
- if(*t=='q') {
- t++;
- }
- while(isspace(*t)) {
- t++;
- }
- if(*t=='=') {
- t++;
- }
- while(isspace(*t)) {
- t++;
- }
- items[n].q = (float)_uloc_strtod(t,NULL);
- } else {
- /* no semicolon - it's 1.0 */
- items[n].q = 1.0f;
- paramEnd = itemEnd;
- }
- items[n].dummy=0;
- /* eat spaces prior to semi */
- for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--)
- ;
- int32_t slen = static_cast<int32_t>(((t+1)-s));
- if(slen > ULOC_FULLNAME_CAPACITY) {
- *status = U_BUFFER_OVERFLOW_ERROR;
- return -1; // too big
- }
- uprv_strncpy(items[n].locale, s, slen);
- items[n].locale[slen]=0; // terminate
- int32_t clen = uloc_canonicalize(items[n].locale, tmp, UPRV_LENGTHOF(tmp)-1, status);
- if(U_FAILURE(*status)) return -1;
- if((clen!=slen) || (uprv_strncmp(items[n].locale, tmp, slen))) {
- // canonicalization had an effect- copy back
- uprv_strncpy(items[n].locale, tmp, clen);
- items[n].locale[clen] = 0; // terminate
- }
-#if defined(ULOC_DEBUG)
- /*fprintf(stderr,"%d: s <%s> q <%g>\n", n, j[n].locale, j[n].q);*/
-#endif
- n++;
- s = itemEnd;
- while(*s==',') { /* eat duplicate commas */
- s++;
- }
- if(n>=items.getCapacity()) { // If we need more items
- if(NULL == items.resize(items.getCapacity()*2, items.getCapacity())) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return -1;
- }
-#if defined(ULOC_DEBUG)
- fprintf(stderr,"malloced at size %d\n", items.getCapacity());
-#endif
- }
- }
- uprv_sortArray(items.getAlias(), n, sizeof(items[0]), uloc_acceptLanguageCompare, NULL, TRUE, status);
- if (U_FAILURE(*status)) {
- return -1;
- }
- LocalMemory<const char*> strs(NULL);
- if (strs.allocateInsteadAndReset(n) == NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return -1;
- }
- for(i=0;i<n;i++) {
-#if defined(ULOC_DEBUG)
- /*fprintf(stderr,"%d: s <%s> q <%g>\n", i, j[i].locale, j[i].q);*/
-#endif
- strs[i]=items[i].locale;
- }
- res = uloc_acceptLanguage(result, resultAvailable, outResult,
- strs.getAlias(), n, availableLocales, status);
- return res;
-}
-
-
-U_CAPI int32_t U_EXPORT2
-uloc_acceptLanguage(char *result, int32_t resultAvailable,
- UAcceptResult *outResult, const char **acceptList,
- int32_t acceptListCount,
- UEnumeration* availableLocales,
- UErrorCode *status)
-{
- int32_t i,j;
- int32_t len;
- int32_t maxLen=0;
- char tmp[ULOC_FULLNAME_CAPACITY+1];
- const char *l;
- char **fallbackList;
- if(U_FAILURE(*status)) {
- return -1;
- }
- fallbackList = static_cast<char **>(uprv_malloc((size_t)(sizeof(fallbackList[0])*acceptListCount)));
- if(fallbackList==NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return -1;
- }
- for(i=0;i<acceptListCount;i++) {
-#if defined(ULOC_DEBUG)
- fprintf(stderr,"%02d: %s\n", i, acceptList[i]);
-#endif
- while((l=uenum_next(availableLocales, NULL, status)) != NULL) {
-#if defined(ULOC_DEBUG)
- fprintf(stderr," %s\n", l);
-#endif
- len = (int32_t)uprv_strlen(l);
- if(!uprv_strcmp(acceptList[i], l)) {
- if(outResult) {
- *outResult = ULOC_ACCEPT_VALID;
- }
-#if defined(ULOC_DEBUG)
- fprintf(stderr, "MATCH! %s\n", l);
-#endif
- if(len>0) {
- uprv_strncpy(result, l, uprv_min(len, resultAvailable));
- }
- for(j=0;j<i;j++) {
- uprv_free(fallbackList[j]);
- }
- uprv_free(fallbackList);
- return u_terminateChars(result, resultAvailable, len, status);
- }
- if(len>maxLen) {
- maxLen = len;
- }
- }
- uenum_reset(availableLocales, status);
- /* save off parent info */
- if(uloc_getParent(acceptList[i], tmp, UPRV_LENGTHOF(tmp), status)!=0) {
- fallbackList[i] = uprv_strdup(tmp);
- } else {
- fallbackList[i]=0;
- }
- }
-
- for(maxLen--;maxLen>0;maxLen--) {
- for(i=0;i<acceptListCount;i++) {
- if(fallbackList[i] && ((int32_t)uprv_strlen(fallbackList[i])==maxLen)) {
-#if defined(ULOC_DEBUG)
- fprintf(stderr,"Try: [%s]", fallbackList[i]);
-#endif
- while((l=uenum_next(availableLocales, NULL, status)) != NULL) {
-#if defined(ULOC_DEBUG)
- fprintf(stderr," %s\n", l);
-#endif
- len = (int32_t)uprv_strlen(l);
- if(!uprv_strcmp(fallbackList[i], l)) {
- if(outResult) {
- *outResult = ULOC_ACCEPT_FALLBACK;
- }
-#if defined(ULOC_DEBUG)
- fprintf(stderr, "fallback MATCH! %s\n", l);
-#endif
- if(len>0) {
- uprv_strncpy(result, l, uprv_min(len, resultAvailable));
- }
- for(j=0;j<acceptListCount;j++) {
- uprv_free(fallbackList[j]);
- }
- uprv_free(fallbackList);
- return u_terminateChars(result, resultAvailable, len, status);
- }
- }
- uenum_reset(availableLocales, status);
-
- if(uloc_getParent(fallbackList[i], tmp, UPRV_LENGTHOF(tmp), status)!=0) {
- uprv_free(fallbackList[i]);
- fallbackList[i] = uprv_strdup(tmp);
- } else {
- uprv_free(fallbackList[i]);
- fallbackList[i]=0;
- }
- }
- }
- if(outResult) {
- *outResult = ULOC_ACCEPT_FAILED;
- }
- }
- for(i=0;i<acceptListCount;i++) {
- uprv_free(fallbackList[i]);
- }
- uprv_free(fallbackList);
- return -1;
-}
-
U_CAPI const char* U_EXPORT2
uloc_toUnicodeLocaleKey(const char* keyword)
{
diff --git a/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp b/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
index 1c10c48182c..7f7fd9119e9 100644
--- a/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
@@ -15,6 +15,7 @@
#include "unicode/uenum.h"
#include "unicode/uloc.h"
#include "ustr_imp.h"
+#include "bytesinkutil.h"
#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
@@ -53,7 +54,7 @@ typedef struct ULanguageTag {
VariantListEntry *variants;
ExtensionListEntry *extensions;
const char *privateuse;
- const char *grandfathered;
+ const char *legacy;
} ULanguageTag;
#define MINLEN 2
@@ -85,8 +86,9 @@ static const char LOCALE_TYPE_YES[] = "yes";
Updated on 2018-09-12 from
https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry .
- This table has 2 parts. The parts for Grandfathered tags is generated by the
- following scripts from the IANA language tag registry.
+ This table has 2 parts. The part for
+ legacy language tags (marked as “Type: grandfathered†in BCP 47)
+ is generated by the following scripts from the IANA language tag registry.
curl https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry |\
egrep -A 7 'Type: grandfathered' | \
@@ -100,8 +102,8 @@ static const char LOCALE_TYPE_YES[] = "yes";
values. They may have to be removed for the strict BCP 47 compliance.
*/
-static const char* const GRANDFATHERED[] = {
-/* grandfathered preferred */
+static const char* const LEGACY[] = {
+/* legacy preferred */
"art-lojban", "jbo",
"en-gb-oed", "en-gb-oxendict",
"i-ami", "ami",
@@ -124,7 +126,7 @@ static const char* const GRANDFATHERED[] = {
"zh-min-nan", "nan",
"zh-xiang", "hsn",
- // Grandfathered tags with no preferred value in the IANA
+ // Legacy tags with no preferred value in the IANA
// registry. Kept for now for the backward compatibility
// because ICU has mapped them this way.
"cel-gaulish", "xtg-x-cel-gaulish",
@@ -346,7 +348,7 @@ ultag_getPrivateUse(const ULanguageTag* langtag);
#if 0
static const char*
-ultag_getGrandfathered(const ULanguageTag* langtag);
+ultag_getLegacy(const ULanguageTag* langtag);
#endif
U_NAMESPACE_BEGIN
@@ -986,7 +988,7 @@ _initializeULanguageTag(ULanguageTag* langtag) {
langtag->variants = NULL;
langtag->extensions = NULL;
- langtag->grandfathered = EMPTY;
+ langtag->legacy = EMPTY;
langtag->privateuse = EMPTY;
}
@@ -1110,6 +1112,19 @@ _appendRegionToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool stri
}
}
+static void _sortVariants(VariantListEntry* first) {
+ for (VariantListEntry* var1 = first; var1 != NULL; var1 = var1->next) {
+ for (VariantListEntry* var2 = var1->next; var2 != NULL; var2 = var2->next) {
+ // Swap var1->variant and var2->variant.
+ if (uprv_compareInvCharsAsAscii(var1->variant, var2->variant) > 0) {
+ const char* temp = var1->variant;
+ var1->variant = var2->variant;
+ var2->variant = temp;
+ }
+ }
+ }
+}
+
static void
_appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UBool *hadPosix, UErrorCode* status) {
char buf[ULOC_FULLNAME_CAPACITY];
@@ -1199,6 +1214,9 @@ _appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
if (varFirst != NULL) {
int32_t varLen;
+ /* per UTS35, we should sort the variants */
+ _sortVariants(varFirst);
+
/* write out validated/normalized variants to the target */
var = varFirst;
while (var != NULL) {
@@ -1252,35 +1270,17 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
UBool isBcpUExt;
while (TRUE) {
- icu::CharString buf;
key = uenum_next(keywordEnum.getAlias(), NULL, status);
if (key == NULL) {
break;
}
- char* buffer;
- int32_t resultCapacity = ULOC_KEYWORD_AND_VALUES_CAPACITY;
-
- for (;;) {
- buffer = buf.getAppendBuffer(
- /*minCapacity=*/resultCapacity,
- /*desiredCapacityHint=*/resultCapacity,
- resultCapacity,
- tmpStatus);
-
- if (U_FAILURE(tmpStatus)) {
- break;
- }
-
- len = uloc_getKeywordValue(
- localeID, key, buffer, resultCapacity, &tmpStatus);
-
- if (tmpStatus != U_BUFFER_OVERFLOW_ERROR) {
- break;
- }
- resultCapacity = len;
- tmpStatus = U_ZERO_ERROR;
+ icu::CharString buf;
+ {
+ icu::CharStringByteSink sink(&buf);
+ ulocimp_getKeywordValue(localeID, key, sink, &tmpStatus);
}
+ len = buf.length();
if (U_FAILURE(tmpStatus)) {
if (tmpStatus == U_MEMORY_ALLOCATION_ERROR) {
@@ -1296,11 +1296,6 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
continue;
}
- buf.append(buffer, len, tmpStatus);
- if (tmpStatus == U_STRING_NOT_TERMINATED_WARNING) {
- tmpStatus = U_ZERO_ERROR; // Terminators provided by CharString.
- }
-
keylen = (int32_t)uprv_strlen(key);
isBcpUExt = (keylen > 1);
@@ -1379,32 +1374,18 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
no known mapping. This implementation normalizes the
value to lower case
*/
- icu::CharString* extBuf = extBufPool.create();
+ icu::CharString* extBuf = extBufPool.create(buf, tmpStatus);
+
if (extBuf == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
break;
}
- int32_t bcpValueLen = static_cast<int32_t>(uprv_strlen(bcpValue));
- int32_t resultCapacity;
- char* pExtBuf = extBuf->getAppendBuffer(
- /*minCapacity=*/bcpValueLen,
- /*desiredCapacityHint=*/bcpValueLen,
- resultCapacity,
- tmpStatus);
- if (U_FAILURE(tmpStatus)) {
- *status = tmpStatus;
- break;
- }
-
- uprv_strcpy(pExtBuf, bcpValue);
- T_CString_toLowerCase(pExtBuf);
-
- extBuf->append(pExtBuf, bcpValueLen, tmpStatus);
if (U_FAILURE(tmpStatus)) {
*status = tmpStatus;
break;
}
+ T_CString_toLowerCase(extBuf->data());
bcpValue = extBuf->data();
}
} else {
@@ -1492,8 +1473,11 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
} else {
sink.Append("-", 1);
sink.Append(ext->key, static_cast<int32_t>(uprv_strlen(ext->key)));
- sink.Append("-", 1);
- sink.Append(ext->value, static_cast<int32_t>(uprv_strlen(ext->value)));
+ if (uprv_strcmp(ext->value, "true") != 0 &&
+ uprv_strcmp(ext->value, "yes") != 0) {
+ sink.Append("-", 1);
+ sink.Append(ext->value, static_cast<int32_t>(uprv_strlen(ext->value)));
+ }
}
}
}
@@ -1662,7 +1646,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
const char *pKey = NULL; /* LDML key */
const char *pType = NULL; /* LDML type */
- char bcpKeyBuf[9]; /* BCP key length is always 2 for now */
+ char bcpKeyBuf[3]; /* BCP key length is always 2 for now */
U_ASSERT(pBcpKey != NULL);
@@ -1671,6 +1655,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
*status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
+ U_ASSERT(bcpKeyLen <= 2);
uprv_strncpy(bcpKeyBuf, pBcpKey, bcpKeyLen);
bcpKeyBuf[bcpKeyLen] = 0;
@@ -2003,11 +1988,12 @@ _appendPrivateuseToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool
#define PRIV 0x0080
/**
- * Ticket #12705 - Visual Studio 2015 Update 3 contains a new code optimizer which has problems optimizing
- * this function. (See https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/ )
- * As a workaround, we will turn off optimization just for this function on VS2015 Update 3 and above.
+ * Ticket #12705 - The optimizer in Visual Studio 2015 Update 3 has problems optimizing this function.
+ * As a work-around, optimization is disabled for this function on VS2015 and VS2017.
+ * This work-around should be removed once the following versions of Visual Studio are no
+ * longer supported: All versions of VS2015/VS2017, and versions of VS2019 below 16.4.
*/
-#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210))
+#if defined(_MSC_VER) && (_MSC_VER >= 1900) && (_MSC_VER < 1924)
#pragma optimize( "", off )
#endif
@@ -2022,7 +2008,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
char *pExtValueSubtag, *pExtValueSubtagEnd;
int32_t i;
UBool privateuseVar = FALSE;
- int32_t grandfatheredLen = 0;
+ int32_t legacyLen = 0;
if (parsedLen != NULL) {
*parsedLen = 0;
@@ -2062,25 +2048,25 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
}
size_t parsedLenDelta = 0;
- // Grandfathered tag will be consider together. Grandfathered tag with intervening
+ // Legacy tag will be consider together. Legacy tag with intervening
// script and region such as art-DE-lojban or art-Latn-lojban won't be
// matched.
- /* check if the tag is grandfathered */
- for (i = 0; i < UPRV_LENGTHOF(GRANDFATHERED); i += 2) {
- int32_t checkGrandfatheredLen = static_cast<int32_t>(uprv_strlen(GRANDFATHERED[i]));
- if (tagLen < checkGrandfatheredLen) {
+ /* check if the tag is legacy */
+ for (i = 0; i < UPRV_LENGTHOF(LEGACY); i += 2) {
+ int32_t checkLegacyLen = static_cast<int32_t>(uprv_strlen(LEGACY[i]));
+ if (tagLen < checkLegacyLen) {
continue;
}
- if (tagLen > checkGrandfatheredLen && tagBuf[checkGrandfatheredLen] != '-') {
+ if (tagLen > checkLegacyLen && tagBuf[checkLegacyLen] != '-') {
// make sure next char is '-'.
continue;
}
- if (uprv_strnicmp(GRANDFATHERED[i], tagBuf, checkGrandfatheredLen) == 0) {
+ if (uprv_strnicmp(LEGACY[i], tagBuf, checkLegacyLen) == 0) {
int32_t newTagLength;
- grandfatheredLen = checkGrandfatheredLen; /* back up for output parsedLen */
- int32_t replacementLen = static_cast<int32_t>(uprv_strlen(GRANDFATHERED[i+1]));
- newTagLength = replacementLen + tagLen - checkGrandfatheredLen;
+ legacyLen = checkLegacyLen; /* back up for output parsedLen */
+ int32_t replacementLen = static_cast<int32_t>(uprv_strlen(LEGACY[i+1]));
+ newTagLength = replacementLen + tagLen - checkLegacyLen;
if (tagLen < newTagLength) {
uprv_free(tagBuf);
tagBuf = (char*)uprv_malloc(newTagLength + 1);
@@ -2091,16 +2077,16 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
t->buf = tagBuf;
tagLen = newTagLength;
}
- parsedLenDelta = checkGrandfatheredLen - replacementLen;
- uprv_strcpy(t->buf, GRANDFATHERED[i + 1]);
- if (checkGrandfatheredLen != tagLen) {
- uprv_strcpy(t->buf + replacementLen, tag + checkGrandfatheredLen);
+ parsedLenDelta = checkLegacyLen - replacementLen;
+ uprv_strcpy(t->buf, LEGACY[i + 1]);
+ if (checkLegacyLen != tagLen) {
+ uprv_strcpy(t->buf + replacementLen, tag + checkLegacyLen);
}
break;
}
}
- if (grandfatheredLen == 0) {
+ if (legacyLen == 0) {
for (i = 0; i < UPRV_LENGTHOF(REDUNDANT); i += 2) {
const char* redundantTag = REDUNDANT[i];
size_t redundantTagLen = uprv_strlen(redundantTag);
@@ -2420,10 +2406,8 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
return t.orphan();
}
-/**
-* Ticket #12705 - Turn optimization back on.
-*/
-#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210))
+// Ticket #12705 - Turn optimization back on.
+#if defined(_MSC_VER) && (_MSC_VER >= 1900) && (_MSC_VER < 1924)
#pragma optimize( "", on )
#endif
@@ -2588,8 +2572,8 @@ ultag_getPrivateUse(const ULanguageTag* langtag) {
#if 0
static const char*
-ultag_getGrandfathered(const ULanguageTag* langtag) {
- return langtag->grandfathered;
+ultag_getLegacy(const ULanguageTag* langtag) {
+ return langtag->legacy;
}
#endif
@@ -2700,14 +2684,17 @@ ulocimp_toLanguageTag(const char* localeID,
key = uenum_next(kwdEnum.getAlias(), &len, &tmpStatus);
if (len == 1 && *key == PRIVATEUSE) {
- char buf[ULOC_KEYWORD_AND_VALUES_CAPACITY];
- buf[0] = PRIVATEUSE;
- buf[1] = SEP;
- len = uloc_getKeywordValue(localeID, key, &buf[2], sizeof(buf) - 2, &tmpStatus);
+ icu::CharString buf;
+ {
+ icu::CharStringByteSink sink(&buf);
+ ulocimp_getKeywordValue(localeID, key, sink, &tmpStatus);
+ }
if (U_SUCCESS(tmpStatus)) {
- if (ultag_isPrivateuseValueSubtags(&buf[2], len)) {
+ if (ultag_isPrivateuseValueSubtags(buf.data(), buf.length())) {
/* return private use only tag */
- sink.Append(buf, len + 2);
+ static const char PREFIX[] = { PRIVATEUSE, SEP };
+ sink.Append(PREFIX, sizeof(PREFIX));
+ sink.Append(buf.data(), buf.length());
done = TRUE;
} else if (strict) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
@@ -2822,6 +2809,7 @@ ulocimp_forLanguageTag(const char* langtag,
}
/* variants */
+ _sortVariants(lt.getAlias()->variants);
n = ultag_getVariantsSize(lt.getAlias());
if (n > 0) {
if (noRegion) {
diff --git a/Build/source/libs/icu/icu-src/source/common/ulocimp.h b/Build/source/libs/icu/icu-src/source/common/ulocimp.h
index 31d3c44d0be..5691fe9a77f 100644
--- a/Build/source/libs/icu/icu-src/source/common/ulocimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ulocimp.h
@@ -13,6 +13,8 @@
#include "unicode/bytestream.h"
#include "unicode/uloc.h"
+#include "charstr.h"
+
/**
* Create an iterator over the specified keywords list
* @param keywordList double-null terminated list. Will be copied.
@@ -38,7 +40,7 @@ uloc_getTableStringWithFallback(
int32_t *pLength,
UErrorCode *pErrorCode);
-/*returns TRUE if a is an ID separator FALSE otherwise*/
+/*returns true if a is an ID separator false otherwise*/
#define _isIDSeparator(a) (a == '_' || a == '-')
U_CFUNC const char*
@@ -47,27 +49,55 @@ uloc_getCurrentCountryID(const char* oldID);
U_CFUNC const char*
uloc_getCurrentLanguageID(const char* oldID);
-U_CFUNC int32_t
+U_CFUNC void
+ulocimp_getKeywords(const char *localeID,
+ char prev,
+ icu::ByteSink& sink,
+ UBool valuesToo,
+ UErrorCode *status);
+
+icu::CharString U_EXPORT2
ulocimp_getLanguage(const char *localeID,
- char *language, int32_t languageCapacity,
- const char **pEnd);
+ const char **pEnd,
+ UErrorCode &status);
-U_CFUNC int32_t
+icu::CharString U_EXPORT2
ulocimp_getScript(const char *localeID,
- char *script, int32_t scriptCapacity,
- const char **pEnd);
+ const char **pEnd,
+ UErrorCode &status);
-U_CFUNC int32_t
+icu::CharString U_EXPORT2
ulocimp_getCountry(const char *localeID,
- char *country, int32_t countryCapacity,
- const char **pEnd);
+ const char **pEnd,
+ UErrorCode &status);
+
+U_CAPI void U_EXPORT2
+ulocimp_getName(const char* localeID,
+ icu::ByteSink& sink,
+ UErrorCode* err);
+
+U_CAPI void U_EXPORT2
+ulocimp_getBaseName(const char* localeID,
+ icu::ByteSink& sink,
+ UErrorCode* err);
+
+U_CAPI void U_EXPORT2
+ulocimp_canonicalize(const char* localeID,
+ icu::ByteSink& sink,
+ UErrorCode* err);
+
+U_CAPI void U_EXPORT2
+ulocimp_getKeywordValue(const char* localeID,
+ const char* keywordName,
+ icu::ByteSink& sink,
+ UErrorCode* status);
/**
* Writes a well-formed language tag for this locale ID.
*
- * **Note**: When `strict` is FALSE, any locale fields which do not satisfy the
+ * **Note**: When `strict` is false, any locale fields which do not satisfy the
* BCP47 syntax requirement will be omitted from the result. When `strict` is
- * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the `err` if any locale
+ * true, this function sets U_ILLEGAL_ARGUMENT_ERROR to the `err` if any locale
* fields do not satisfy the BCP47 syntax requirement.
*
* @param localeID the input locale ID
@@ -81,7 +111,7 @@ ulocimp_getCountry(const char *localeID,
*
* @internal ICU 64
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocimp_toLanguageTag(const char* localeID,
icu::ByteSink& sink,
UBool strict,
@@ -92,13 +122,17 @@ ulocimp_toLanguageTag(const char* localeID,
* If the specified language tag contains any ill-formed subtags,
* the first such subtag and all following subtags are ignored.
* <p>
- * This implements the 'Language-Tag' production of BCP47, and so
- * supports grandfathered (regular and irregular) as well as private
- * use language tags. Private use tags are represented as 'x-whatever',
- * and grandfathered tags are converted to their canonical replacements
- * where they exist. Note that a few grandfathered tags have no modern
- * replacement, these will be converted using the fallback described in
+ * This implements the 'Language-Tag' production of BCP 47, and so
+ * supports legacy language tags (marked as “Type: grandfathered†in BCP 47)
+ * (regular and irregular) as well as private use language tags.
+ *
+ * Private use tags are represented as 'x-whatever',
+ * and legacy tags are converted to their canonical replacements where they exist.
+ *
+ * Note that a few legacy tags have no modern replacement;
+ * these will be converted using the fallback described in
* the first paragraph, so some information might be lost.
+ *
* @param langtag the input BCP47 language tag.
* @param tagLen the length of langtag, or -1 to call uprv_strlen().
* @param sink the output sink receiving a locale ID for the
@@ -120,7 +154,7 @@ ulocimp_forLanguageTag(const char* langtag,
* Get the region to use for supplemental data lookup. Uses
* (1) any region specified by locale tag "rg"; if none then
* (2) any unicode_region_tag in the locale ID; if none then
- * (3) if inferRegion is TRUE, the region suggested by
+ * (3) if inferRegion is true, the region suggested by
* getLikelySubtags on the localeID.
* If no region is found, returns length 0.
*
@@ -128,7 +162,7 @@ ulocimp_forLanguageTag(const char* langtag,
* The complete locale ID (with keywords) from which
* to get the region to use for supplemental data.
* @param inferRegion
- * If TRUE, will try to infer region from localeID if
+ * If true, will try to infer region from localeID if
* no other region is found.
* @param region
* Buffer in which to put the region ID found; should
@@ -174,7 +208,7 @@ ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion,
* or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
* @internal ICU 64
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocimp_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
UErrorCode* err);
@@ -208,7 +242,7 @@ ulocimp_addLikelySubtags(const char* localeID,
* or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
* @internal ICU 64
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocimp_minimizeSubtags(const char* localeID,
icu::ByteSink& sink,
UErrorCode* err);
@@ -264,4 +298,10 @@ ulocimp_toBcpType(const char* key, const char* type, UBool* isKnownKey, UBool* i
U_CFUNC const char*
ulocimp_toLegacyType(const char* key, const char* type, UBool* isKnownKey, UBool* isSpecialType);
+/* Function for testing purpose */
+U_CAPI const char* const* ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* length);
+
+// Return true if the value is already canonicalized.
+U_CAPI bool ulocimp_isCanonicalizedLocaleForTest(const char* localeName);
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/umutex.h b/Build/source/libs/icu/icu-src/source/common/umutex.h
index 2503aa4a291..8d76b3f3e6f 100644
--- a/Build/source/libs/icu/icu-src/source/common/umutex.h
+++ b/Build/source/libs/icu/icu-src/source/common/umutex.h
@@ -262,13 +262,13 @@ private:
* the global ICU mutex. Recursive locks are an error
* and may cause a deadlock on some platforms.
*/
-U_INTERNAL void U_EXPORT2 umtx_lock(UMutex* mutex);
+U_CAPI void U_EXPORT2 umtx_lock(UMutex* mutex);
/* Unlock a mutex.
* @param mutex The given mutex to be unlocked. Pass NULL to specify
* the global ICU mutex.
*/
-U_INTERNAL void U_EXPORT2 umtx_unlock (UMutex* mutex);
+U_CAPI void U_EXPORT2 umtx_unlock (UMutex* mutex);
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/common/unames.cpp b/Build/source/libs/icu/icu-src/source/common/unames.cpp
index cde8b5ad7e5..5776058f957 100644
--- a/Build/source/libs/icu/icu-src/source/common/unames.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/unames.cpp
@@ -1519,7 +1519,8 @@ U_CAPI UChar32 U_EXPORT2
u_charFromName(UCharNameChoice nameChoice,
const char *name,
UErrorCode *pErrorCode) {
- char upper[120], lower[120];
+ char upper[120] = {0};
+ char lower[120] = {0};
FindName findName;
AlgorithmicRange *algRange;
uint32_t *p;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h b/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
index 4beacaf6583..fc99254de14 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
@@ -45,7 +45,7 @@ class UnicodeString;
*
* The methods do not take UErrorCode parameters.
* If an error occurs (e.g., out-of-memory),
- * in addition to returning FALSE from failing operations,
+ * in addition to returning false from failing operations,
* the implementation must prevent unexpected behavior (e.g., crashes)
* from further calls and should make the error condition available separately
* (e.g., store a UErrorCode, make/keep a UnicodeString bogus).
@@ -62,7 +62,7 @@ public:
/**
* Appends a 16-bit code unit.
* @param c code unit
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool appendCodeUnit(char16_t c) = 0;
@@ -71,7 +71,7 @@ public:
* Appends a code point.
* The default implementation calls appendCodeUnit(char16_t) once or twice.
* @param c code point 0..0x10ffff
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool appendCodePoint(UChar32 c);
@@ -81,7 +81,7 @@ public:
* The default implementation calls appendCodeUnit(char16_t) for each code unit.
* @param s string, must not be NULL if length!=0
* @param length string length, or -1 if NUL-terminated
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool appendString(const char16_t *s, int32_t length);
@@ -90,9 +90,9 @@ public:
* Tells the object that the caller is going to append roughly
* appendCapacity char16_ts. A subclass might use this to pre-allocate
* a larger buffer if necessary.
- * The default implementation does nothing. (It always returns TRUE.)
+ * The default implementation does nothing. (It always returns true.)
* @param appendCapacity estimated number of char16_ts that will be appended
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool reserveAppendCapacity(int32_t appendCapacity);
@@ -171,7 +171,7 @@ public:
/**
* Appends a 16-bit code unit to the string.
* @param c code unit
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool appendCodeUnit(char16_t c);
@@ -179,7 +179,7 @@ public:
/**
* Appends a code point to the string.
* @param c code point 0..0x10ffff
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool appendCodePoint(UChar32 c);
@@ -188,7 +188,7 @@ public:
* Appends a string to the UnicodeString.
* @param s string, must not be NULL if length!=0
* @param length string length, or -1 if NUL-terminated
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool appendString(const char16_t *s, int32_t length);
@@ -197,7 +197,7 @@ public:
* Tells the UnicodeString that the caller is going to append roughly
* appendCapacity char16_ts.
* @param appendCapacity estimated number of char16_ts that will be appended
- * @return TRUE if the operation succeeded
+ * @return true if the operation succeeded
* @stable ICU 4.8
*/
virtual UBool reserveAppendCapacity(int32_t appendCapacity);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h b/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
index b9444973454..9bba5fcccc3 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
@@ -564,7 +564,7 @@ public:
* BreakIterator::createXXXInstance to avoid undefined behavior.
* @param key the registry key returned by a previous call to registerInstance
* @param status the in/out status code, no special meanings are assigned
- * @return TRUE if the iterator for the key was successfully unregistered
+ * @return true if the iterator for the key was successfully unregistered
* @stable ICU 2.4
*/
static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
@@ -655,7 +655,7 @@ private:
inline UBool BreakIterator::isBufferClone()
{
- return FALSE;
+ return false;
}
#endif /* U_HIDE_DEPRECATED_API */
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h b/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
index 0d60492fe23..044f7a77e78 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
@@ -71,6 +71,40 @@ public:
*/
virtual void Append(const char* bytes, int32_t n) = 0;
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Appends n bytes to this. Same as Append().
+ * Call AppendU8() with u8"string literals" which are const char * in C++11
+ * but const char8_t * in C++20.
+ * If the compiler does support char8_t as a distinct type,
+ * then an AppendU8() overload for that is defined and will be chosen.
+ *
+ * @param bytes the pointer to the bytes
+ * @param n the number of bytes; must be non-negative
+ * @draft ICU 67
+ */
+ inline void AppendU8(const char* bytes, int32_t n) {
+ Append(bytes, n);
+ }
+
+#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
+ /**
+ * Appends n bytes to this. Same as Append() but for a const char8_t * pointer.
+ * Call AppendU8() with u8"string literals" which are const char * in C++11
+ * but const char8_t * in C++20.
+ * If the compiler does support char8_t as a distinct type,
+ * then this AppendU8() overload for that is defined and will be chosen.
+ *
+ * @param bytes the pointer to the bytes
+ * @param n the number of bytes; must be non-negative
+ * @draft ICU 67
+ */
+ inline void AppendU8(const char8_t* bytes, int32_t n) {
+ Append(reinterpret_cast<const char*>(bytes), n);
+ }
+#endif
+#endif // U_HIDE_DRAFT_API
+
/**
* Returns a writable buffer for appending and writes the buffer's capacity to
* *result_capacity. Guarantees *result_capacity>=min_capacity.
@@ -163,7 +197,7 @@ public:
* Returns the sink to its original state, without modifying the buffer.
* Useful for reusing both the buffer and the sink for multiple streams.
* Resets the state to NumberOfBytesWritten()=NumberOfBytesAppended()=0
- * and Overflowed()=FALSE.
+ * and Overflowed()=false.
* @return *this
* @stable ICU 4.6
*/
@@ -202,7 +236,7 @@ public:
/**
* Returns true if any bytes were discarded, i.e., if there was an
* attempt to write more than 'capacity' bytes.
- * @return TRUE if more than 'capacity' bytes were Append()ed
+ * @return true if more than 'capacity' bytes were Append()ed
* @stable ICU 4.2
*/
UBool Overflowed() const { return overflowed_; }
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
index 51405f64a10..85f802df420 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
@@ -97,14 +97,13 @@ public:
return *this;
}
-#ifndef U_HIDE_DRAFT_API
/**
* Returns the state of this trie as a 64-bit integer.
* The state value is never 0.
*
* @return opaque state value
* @see resetToState64
- * @draft ICU 65
+ * @stable ICU 65
*/
uint64_t getState64() const {
return (static_cast<uint64_t>(remainingMatchLength_ + 2) << kState64RemainingShift) |
@@ -123,14 +122,13 @@ public:
* @see getState64
* @see resetToState
* @see reset
- * @draft ICU 65
+ * @stable ICU 65
*/
BytesTrie &resetToState64(uint64_t state) {
remainingMatchLength_ = static_cast<int32_t>(state >> kState64RemainingShift) - 2;
pos_ = bytes_ + (state & kState64PosMask);
return *this;
}
-#endif /* U_HIDE_DRAFT_API */
/**
* BytesTrie state object, for saving a trie's current state
@@ -253,16 +251,16 @@ public:
/**
* Determines whether all byte sequences reachable from the current state
* map to the same value.
- * @param uniqueValue Receives the unique value, if this function returns TRUE.
+ * @param uniqueValue Receives the unique value, if this function returns true.
* (output-only)
- * @return TRUE if all byte sequences reachable from the current state
+ * @return true if all byte sequences reachable from the current state
* map to the same value.
* @stable ICU 4.8
*/
inline UBool hasUniqueValue(int32_t &uniqueValue) const {
const uint8_t *pos=pos_;
// Skip the rest of a pending linear-match node.
- return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue);
+ return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, false, uniqueValue);
}
/**
@@ -321,7 +319,7 @@ public:
Iterator &reset();
/**
- * @return TRUE if there are more elements.
+ * @return true if there are more elements.
* @stable ICU 4.8
*/
UBool hasNext() const;
@@ -337,7 +335,7 @@ public:
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if there is another element.
+ * @return true if there is another element.
* @stable ICU 4.8
*/
UBool next(UErrorCode &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
index b98374bb8fd..cae16e48b45 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
@@ -101,9 +101,10 @@ public:
* Multiple calls to buildStringPiece() return StringPieces referring to the
* builder's same byte array, without rebuilding.
* If buildStringPiece() is called after build(), the trie will be
- * re-serialized into a new array.
- * If build() is called after buildStringPiece(), the trie object will become
- * the owner of the previously returned array.
+ * re-serialized into a new array (because build() passes on ownership).
+ * If build() is called after buildStringPiece(), the trie object returned
+ * by build() will become the owner of the underlying string for the
+ * previously returned StringPiece.
* After clear() has been called, a new array will be used as well.
* @param buildOption Build option, see UStringTrieBuildOption.
* @param errorCode Standard ICU error code. Its input value must
@@ -139,7 +140,7 @@ private:
virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const;
virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const;
- virtual UBool matchNodesCanHaveValues() const { return FALSE; }
+ virtual UBool matchNodesCanHaveValues() const { return false; }
virtual int32_t getMaxBranchLinearSubNodeLength() const { return BytesTrie::kMaxBranchLinearSubNodeLength; }
virtual int32_t getMinLinearMatch() const { return BytesTrie::kMinLinearMatch; }
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h b/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
index 13e524ff6ad..4ed2b74b101 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
@@ -25,11 +25,11 @@
*/
/** Should permutation skip characters with combining class zero
- * Should be either TRUE or FALSE. This is a compile time option
+ * Should be either true or false. This is a compile time option
* @stable ICU 2.4
*/
#ifndef CANITER_SKIP_ZEROES
-#define CANITER_SKIP_ZEROES TRUE
+#define CANITER_SKIP_ZEROES true
#endif
U_NAMESPACE_BEGIN
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h b/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
index db86f79e42e..96dc5db7c9e 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
@@ -65,7 +65,7 @@ U_NAMESPACE_BEGIN
* check for the end of the iteration. When there are no more
* characters in the text object:
* <ul>
- * <li>The hasNext() function returns FALSE.</li>
+ * <li>The hasNext() function returns false.</li>
* <li>nextPostInc() and next32PostInc() return DONE
* when one attempts to read beyond the end of the text object.</li>
* </ul>
@@ -165,11 +165,11 @@ public:
virtual UChar32 next32PostInc(void) = 0;
/**
- * Returns FALSE if there are no more code units or code points
+ * Returns false if there are no more code units or code points
* at or after the current position in the iteration range.
* This is used with nextPostInc() or next32PostInc() in forward
* iteration.
- * @returns FALSE if there are no more code units or code points
+ * @returns false if there are no more code units or code points
* at or after the current position in the iteration range.
* @stable ICU 2.0
*/
@@ -535,12 +535,12 @@ public:
virtual UChar32 previous32(void) = 0;
/**
- * Returns FALSE if there are no more code units or code points
+ * Returns false if there are no more code units or code points
* before the current position in the iteration range.
* This is used with previous() or previous32() in backward
* iteration.
- * @return FALSE if there are no more code units or code points
- * before the current position in the iteration range, return TRUE otherwise.
+ * @return false if there are no more code units or code points
+ * before the current position in the iteration range, return true otherwise.
* @stable ICU 2.0
*/
virtual UBool hasPrevious() = 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h b/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
index 704139a85ed..edcb5d4e835 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
@@ -53,10 +53,10 @@
*
* <h2>Architecture (User's Guide)</h2>
* <ul>
- * <li><a href="http://userguide.icu-project.org/">Introduction</a></li>
- * <li><a href="http://userguide.icu-project.org/i18n">Internationalization</a></li>
- * <li><a href="http://userguide.icu-project.org/design">Locale Model, Multithreading, Error Handling, etc.</a></li>
- * <li><a href="http://userguide.icu-project.org/conversion">Conversion</a></li>
+ * <li><a href="https://unicode-org.github.io/icu/userguide/">Introduction</a></li>
+ * <li><a href="https://unicode-org.github.io/icu/userguide/i18n">Internationalization</a></li>
+ * <li><a href="https://unicode-org.github.io/icu/userguide/design">Locale Model, Multithreading, Error Handling, etc.</a></li>
+ * <li><a href="https://unicode-org.github.io/icu/userguide/conversion">Conversion</a></li>
* </ul>
*
* <hr>
@@ -143,13 +143,18 @@
* <td>icu::MessageFormat</td>
* </tr>
* <tr>
+ * <td>List Formatting</td>
+ * <td>ulistformatter.h</td>
+ * <td>icu::ListFormatter</td>
+ * </tr>
+ * <tr>
* <td>Number Formatting<br/>(includes currency and unit formatting)</td>
* <td>unumberformatter.h, unum.h</td>
* <td>icu::number::NumberFormatter (ICU 60+) or icu::NumberFormat (older versions)</td>
* </tr>
* <tr>
* <td>Number Range Formatting<br />(includes currency and unit ranges)</td>
- * <td>(no C API)</td>
+ * <td>unumberrangeformatter.h</td>
* <td>icu::number::NumberRangeFormatter</td>
* </tr>
* <tr>
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h b/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
index 15e15c9d405..4f4b6bf7f40 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
@@ -106,14 +106,14 @@ public:
/**
* Equality operator.
- * @return TRUE if the two DateIntervals are the same
+ * @return true if the two DateIntervals are the same
* @stable ICU 4.0
*/
virtual UBool operator==(const DateInterval& other) const;
/**
* Non-equality operator
- * @return TRUE if the two DateIntervals are not the same
+ * @return true if the two DateIntervals are not the same
* @stable ICU 4.0
*/
inline UBool operator!=(const DateInterval& other) const;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/edits.h b/Build/source/libs/icu/icu-src/source/common/unicode/edits.h
index c3ceaccb3b3..bfa07fa6765 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/edits.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/edits.h
@@ -159,7 +159,7 @@ public:
* @param outErrorCode Set to an error code if it does not contain one already
* and an error occurred while recording edits.
* Otherwise unchanged.
- * @return TRUE if U_FAILURE(outErrorCode)
+ * @return true if U_FAILURE(outErrorCode)
* @stable ICU 59
*/
UBool copyErrorTo(UErrorCode &outErrorCode) const;
@@ -171,7 +171,7 @@ public:
*/
int32_t lengthDelta() const { return delta; }
/**
- * @return TRUE if there are any change edits
+ * @return true if there are any change edits
* @stable ICU 59
*/
UBool hasChanges() const { return numChanges != 0; }
@@ -207,8 +207,8 @@ public:
*/
Iterator() :
array(nullptr), index(0), length(0),
- remaining(0), onlyChanges_(FALSE), coarse(FALSE),
- dir(0), changed(FALSE), oldLength_(0), newLength_(0),
+ remaining(0), onlyChanges_(false), coarse(false),
+ dir(0), changed(false), oldLength_(0), newLength_(0),
srcIndex(0), replIndex(0), destIndex(0) {}
/**
* Copy constructor.
@@ -226,7 +226,7 @@ public:
* @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test,
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
- * @return TRUE if there is another edit
+ * @return true if there is another edit
* @stable ICU 59
*/
UBool next(UErrorCode &errorCode) { return next(onlyChanges_, errorCode); }
@@ -247,11 +247,11 @@ public:
* @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test,
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
- * @return TRUE if the edit for the source index was found
+ * @return true if the edit for the source index was found
* @stable ICU 59
*/
UBool findSourceIndex(int32_t i, UErrorCode &errorCode) {
- return findIndex(i, TRUE, errorCode) == 0;
+ return findIndex(i, true, errorCode) == 0;
}
/**
@@ -270,11 +270,11 @@ public:
* @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test,
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
- * @return TRUE if the edit for the destination index was found
+ * @return true if the edit for the destination index was found
* @stable ICU 60
*/
UBool findDestinationIndex(int32_t i, UErrorCode &errorCode) {
- return findIndex(i, FALSE, errorCode) == 0;
+ return findIndex(i, false, errorCode) == 0;
}
/**
@@ -328,8 +328,8 @@ public:
/**
* Returns whether the edit currently represented by the iterator is a change edit.
*
- * @return TRUE if this edit replaces oldLength() units with newLength() different ones.
- * FALSE if oldLength units remain unchanged.
+ * @return true if this edit replaces oldLength() units with newLength() different ones.
+ * false if oldLength units remain unchanged.
* @stable ICU 59
*/
UBool hasChange() const { return changed; }
@@ -347,8 +347,8 @@ public:
* {@link #destinationIndex}, or in the replacement string, which starts at
* {@link #replacementIndex}.
*
- * @return the number of units in the modified string, if hasChange() is TRUE.
- * Same as oldLength if hasChange() is FALSE.
+ * @return the number of units in the modified string, if hasChange() is true.
+ * Same as oldLength if hasChange() is false.
* @stable ICU 59
*/
int32_t newLength() const { return newLength_; }
@@ -436,7 +436,7 @@ public:
* @stable ICU 59
*/
Iterator getCoarseChangesIterator() const {
- return Iterator(array, length, TRUE, TRUE);
+ return Iterator(array, length, true, true);
}
/**
@@ -448,7 +448,7 @@ public:
* @stable ICU 59
*/
Iterator getCoarseIterator() const {
- return Iterator(array, length, FALSE, TRUE);
+ return Iterator(array, length, false, true);
}
/**
@@ -460,7 +460,7 @@ public:
* @stable ICU 59
*/
Iterator getFineChangesIterator() const {
- return Iterator(array, length, TRUE, FALSE);
+ return Iterator(array, length, true, false);
}
/**
@@ -471,7 +471,7 @@ public:
* @stable ICU 59
*/
Iterator getFineIterator() const {
- return Iterator(array, length, FALSE, FALSE);
+ return Iterator(array, length, false, false);
}
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h b/Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h
index 42936763259..8b07e39ae12 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h
@@ -85,8 +85,8 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject {
* by the iterator.
* @param string the string to suppress, such as "Mr."
* @param status error code
- * @return returns TRUE if the string was not present and now added,
- * FALSE if the call was a no-op because the string was already being suppressed.
+ * @return returns true if the string was not present and now added,
+ * false if the call was a no-op because the string was already being suppressed.
* @stable ICU 56
*/
virtual UBool suppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0;
@@ -98,8 +98,8 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject {
* locale data which may be suppressing certain strings.
* @param string the exception to remove
* @param status error code
- * @return returns TRUE if the string was present and now removed,
- * FALSE if the call was a no-op because the string was not being suppressed.
+ * @return returns true if the string was present and now removed,
+ * false if the call was a no-op because the string was not being suppressed.
* @stable ICU 56
*/
virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h b/Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h
index 1cb202e3d45..f218ed8ebcc 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h
@@ -38,6 +38,6 @@
*
* @stable ICU 49
*/
-U_STABLE void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status);
+U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h b/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
index 2e57b149e14..52f810da57d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
@@ -208,7 +208,7 @@ typedef UPlugTokenReturn (U_EXPORT2 UPlugEntrypoint) (
* @param dontUnload set true if this plugin can't be unloaded
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload);
/**
@@ -217,7 +217,7 @@ uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload);
* @param level the level of this plugin
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_setPlugLevel(UPlugData *plug, UPlugLevel level);
/**
@@ -226,7 +226,7 @@ uplug_setPlugLevel(UPlugData *plug, UPlugLevel level);
* @return the level of this plugin
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL UPlugLevel U_EXPORT2
+U_CAPI UPlugLevel U_EXPORT2
uplug_getPlugLevel(UPlugData *plug);
/**
@@ -236,7 +236,7 @@ uplug_getPlugLevel(UPlugData *plug);
* @return the lowest level of plug which can currently load
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL UPlugLevel U_EXPORT2
+U_CAPI UPlugLevel U_EXPORT2
uplug_getCurrentLevel(void);
@@ -245,7 +245,7 @@ uplug_getCurrentLevel(void);
* @return The error code of this plugin's load attempt.
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL UErrorCode U_EXPORT2
+U_CAPI UErrorCode U_EXPORT2
uplug_getPlugLoadStatus(UPlugData *plug);
/**
@@ -254,7 +254,7 @@ uplug_getPlugLoadStatus(UPlugData *plug);
* @param name the name of this plugin. The first UPLUG_NAME_MAX characters willi be copied into a new buffer.
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_setPlugName(UPlugData *plug, const char *name);
/**
@@ -263,7 +263,7 @@ uplug_setPlugName(UPlugData *plug, const char *name);
* @return the name of this plugin
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
uplug_getPlugName(UPlugData *plug);
/**
@@ -272,7 +272,7 @@ uplug_getPlugName(UPlugData *plug);
* @return the symbol name, or NULL
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
uplug_getSymbolName(UPlugData *plug);
/**
@@ -282,7 +282,7 @@ uplug_getSymbolName(UPlugData *plug);
* @return the library name, or NULL
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
uplug_getLibraryName(UPlugData *plug, UErrorCode *status);
/**
@@ -292,7 +292,7 @@ uplug_getLibraryName(UPlugData *plug, UErrorCode *status);
* @return the library, or NULL
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uplug_getLibrary(UPlugData *plug);
/**
@@ -301,7 +301,7 @@ uplug_getLibrary(UPlugData *plug);
* @return the context, or NULL if not set
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void * U_EXPORT2
+U_CAPI void * U_EXPORT2
uplug_getContext(UPlugData *plug);
/**
@@ -310,7 +310,7 @@ uplug_getContext(UPlugData *plug);
* @param context new context to set
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_setContext(UPlugData *plug, void *context);
@@ -321,7 +321,7 @@ uplug_setContext(UPlugData *plug, void *context);
* @return configuration string, or else null.
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
uplug_getConfiguration(UPlugData *plug);
/**
@@ -339,7 +339,7 @@ uplug_getConfiguration(UPlugData *plug);
* @return the next oldest plugin, or NULL if no more.
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL UPlugData* U_EXPORT2
+U_CAPI UPlugData* U_EXPORT2
uplug_nextPlug(UPlugData *prior);
/**
@@ -354,7 +354,7 @@ uplug_nextPlug(UPlugData *prior);
* @return the new UPlugData associated with this plugin, or NULL if error.
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL UPlugData* U_EXPORT2
+U_CAPI UPlugData* U_EXPORT2
uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UErrorCode *status);
@@ -368,7 +368,7 @@ uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UE
* @return the new UPlugData associated with this plugin, or NULL if error.
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL UPlugData* U_EXPORT2
+U_CAPI UPlugData* U_EXPORT2
uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status);
/**
@@ -378,7 +378,7 @@ uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *conf
* @param status error result
* @internal ICU 4.4 Technology Preview
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
uplug_removePlug(UPlugData *plug, UErrorCode *status);
#endif /* U_HIDE_INTERNAL_API */
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/idna.h b/Build/source/libs/icu/icu-src/source/common/unicode/idna.h
index 6dfcfe48db2..1305dc60484 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/idna.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/idna.h
@@ -95,7 +95,7 @@ public:
/**
* Converts a single domain name label into its ASCII form for DNS lookup.
- * If any processing step fails, then info.hasErrors() will be TRUE and
+ * If any processing step fails, then info.hasErrors() will be true and
* the result might not be an ASCII string.
* The label might be modified according to the types of errors.
* Labels with severe errors will be left in (or turned into) their Unicode form.
@@ -119,7 +119,7 @@ public:
/**
* Converts a single domain name label into its Unicode form for human-readable display.
- * If any processing step fails, then info.hasErrors() will be TRUE.
+ * If any processing step fails, then info.hasErrors() will be true.
* The label might be modified according to the types of errors.
*
* The UErrorCode indicates an error only in exceptional cases,
@@ -141,7 +141,7 @@ public:
/**
* Converts a whole domain name into its ASCII form for DNS lookup.
- * If any processing step fails, then info.hasErrors() will be TRUE and
+ * If any processing step fails, then info.hasErrors() will be true and
* the result might not be an ASCII string.
* The domain name might be modified according to the types of errors.
* Labels with severe errors will be left in (or turned into) their Unicode form.
@@ -165,7 +165,7 @@ public:
/**
* Converts a whole domain name into its Unicode form for human-readable display.
- * If any processing step fails, then info.hasErrors() will be TRUE.
+ * If any processing step fails, then info.hasErrors() will be true.
* The domain name might be modified according to the types of errors.
*
* The UErrorCode indicates an error only in exceptional cases,
@@ -273,10 +273,10 @@ public:
* Constructor for stack allocation.
* @stable ICU 4.6
*/
- IDNAInfo() : errors(0), labelErrors(0), isTransDiff(FALSE), isBiDi(FALSE), isOkBiDi(TRUE) {}
+ IDNAInfo() : errors(0), labelErrors(0), isTransDiff(false), isBiDi(false), isOkBiDi(true) {}
/**
* Were there IDNA processing errors?
- * @return TRUE if there were processing errors
+ * @return true if there were processing errors
* @stable ICU 4.6
*/
UBool hasErrors() const { return errors!=0; }
@@ -288,7 +288,7 @@ public:
*/
uint32_t getErrors() const { return errors; }
/**
- * Returns TRUE if transitional and nontransitional processing produce different results.
+ * Returns true if transitional and nontransitional processing produce different results.
* This is the case when the input label or domain name contains
* one or more deviation characters outside a Punycode label (see UTS #46).
* <ul>
@@ -297,7 +297,7 @@ public:
* <li>With transitional processing, such characters are
* mapped (sharp s/sigma) or removed (joiner/nonjoiner).
* </ul>
- * @return TRUE if transitional and nontransitional processing produce different results
+ * @return true if transitional and nontransitional processing produce different results
* @stable ICU 4.6
*/
UBool isTransitionalDifferent() const { return isTransDiff; }
@@ -310,9 +310,9 @@ private:
void reset() {
errors=labelErrors=0;
- isTransDiff=FALSE;
- isBiDi=FALSE;
- isOkBiDi=TRUE;
+ isTransDiff=false;
+ isBiDi=false;
+ isOkBiDi=true;
}
uint32_t errors, labelErrors;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h
index 19e10f1c070..27a894de101 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h
@@ -1,5 +1,5 @@
// © 2018 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
#ifndef __LOCALEBUILDER_H__
#define __LOCALEBUILDER_H__
@@ -12,7 +12,6 @@
#include "unicode/stringpiece.h"
#include "unicode/uobject.h"
-#ifndef U_HIDE_DRAFT_API
/**
* \file
* \brief C++ API: Builder API for Locale
@@ -57,7 +56,7 @@ class CharString;
* UErrorCode, then track the error of the validation of the input parameter
* into the internal UErrorCode.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
class U_COMMON_API LocaleBuilder : public UObject {
public:
@@ -66,13 +65,13 @@ public:
* fields, extensions, and private use information is the
* empty string.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder();
/**
* Destructor
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual ~LocaleBuilder();
@@ -86,25 +85,26 @@ public:
* @param locale the locale
* @return This builder.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setLocale(const Locale& locale);
/**
* Resets the LocaleBuilder to match the provided
* [Unicode Locale Identifier](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id) .
- * Discards the existing state. the empty string cause the builder to be
- * reset, like {@link #clear}. Grandfathered tags are converted to their
- * canonical form before being processed. Otherwise, the <code>language
- * tag</code> must be well-formed, or else the build() method will later
- * report an U_ILLEGAL_ARGUMENT_ERROR.
+ * Discards the existing state.
+ * The empty string causes the builder to be reset, like {@link #clear}.
+ * Legacy language tags (marked as “Type: grandfathered†in BCP 47)
+ * are converted to their canonical form before being processed.
+ * Otherwise, the <code>language tag</code> must be well-formed,
+ * or else the build() method will later report an U_ILLEGAL_ARGUMENT_ERROR.
*
* <p>This method clears the internal UErrorCode.
*
* @param tag the language tag, defined as
* [unicode_locale_id](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id).
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setLanguageTag(StringPiece tag);
@@ -119,7 +119,7 @@ public:
*
* @param language the language
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setLanguage(StringPiece language);
@@ -135,7 +135,7 @@ public:
*
* @param script the script
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setScript(StringPiece script);
@@ -154,7 +154,7 @@ public:
*
* @param region the region
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setRegion(StringPiece region);
@@ -175,7 +175,7 @@ public:
*
* @param variant the variant
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setVariant(StringPiece variant);
@@ -196,7 +196,7 @@ public:
* @param key the extension key
* @param value the extension value
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setExtension(char key, StringPiece value);
@@ -216,7 +216,7 @@ public:
* @param key the Unicode locale key
* @param type the Unicode locale type
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& setUnicodeLocaleKeyword(
StringPiece key, StringPiece type);
@@ -229,7 +229,7 @@ public:
*
* @param attribute the attribute
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& addUnicodeLocaleAttribute(StringPiece attribute);
@@ -242,7 +242,7 @@ public:
*
* @param attribute the attribute
* @return This builder.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& removeUnicodeLocaleAttribute(StringPiece attribute);
@@ -251,7 +251,7 @@ public:
* <p>This method clears the internal UErrorCode.
*
* @return this builder
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& clear();
@@ -260,7 +260,7 @@ public:
* Language, script, region and variant are unchanged.
*
* @return this builder
- * @draft ICU 64
+ * @stable ICU 64
*/
LocaleBuilder& clearExtensions();
@@ -275,22 +275,20 @@ public:
* the same builder to build more locales.
*
* @return a new Locale
- * @draft ICU 64
+ * @stable ICU 64
*/
Locale build(UErrorCode& status);
-#ifndef U_HIDE_DRAFT_API
/**
* Sets the UErrorCode if an error occurred while recording sets.
* Preserves older error codes in the outErrorCode.
* @param outErrorCode Set to an error code that occurred while setting subtags.
* Unchanged if there is no such error or if outErrorCode
* already contained an error.
- * @return TRUE if U_FAILURE(outErrorCode)
- * @draft ICU 65
+ * @return true if U_FAILURE(outErrorCode)
+ * @stable ICU 65
*/
UBool copyErrorTo(UErrorCode &outErrorCode) const;
-#endif /* U_HIDE_DRAFT_API */
private:
friend class LocaleMatcher::Result;
@@ -308,8 +306,6 @@ private:
U_NAMESPACE_END
-#endif // U_HIDE_DRAFT_API
-
#endif /* U_SHOW_CPLUSPLUS_API */
#endif // __LOCALEBUILDER_H__
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h b/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
index 701123f750b..63a68b0b7fb 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
@@ -1,5 +1,5 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// localematcher.h
// created: 2019may08 Markus W. Scherer
@@ -20,26 +20,24 @@
* \brief C++ API: Locale matcher: User's desired locales vs. application's supported locales.
*/
-#ifndef U_HIDE_DRAFT_API
-
/**
* Builder option for whether the language subtag or the script subtag is most important.
*
- * @see Builder#setFavorSubtag(FavorSubtag)
- * @draft ICU 65
+ * @see LocaleMatcher::Builder#setFavorSubtag(ULocMatchFavorSubtag)
+ * @stable ICU 65
*/
enum ULocMatchFavorSubtag {
/**
* Language differences are most important, then script differences, then region differences.
* (This is the default behavior.)
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOCMATCH_FAVOR_LANGUAGE,
/**
* Makes script differences matter relatively more than language differences.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOCMATCH_FAVOR_SCRIPT
};
@@ -51,14 +49,14 @@ typedef enum ULocMatchFavorSubtag ULocMatchFavorSubtag;
* Builder option for whether all desired locales are treated equally or
* earlier ones are preferred.
*
- * @see Builder#setDemotionPerDesiredLocale(Demotion)
- * @draft ICU 65
+ * @see LocaleMatcher::Builder#setDemotionPerDesiredLocale(ULocMatchDemotion)
+ * @stable ICU 65
*/
enum ULocMatchDemotion {
/**
* All desired locales are treated equally.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOCMATCH_DEMOTION_NONE,
/**
@@ -85,7 +83,7 @@ enum ULocMatchDemotion {
* this is possible in future versions of the data.)
* </ul>
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOCMATCH_DEMOTION_REGION
};
@@ -93,6 +91,46 @@ enum ULocMatchDemotion {
typedef enum ULocMatchDemotion ULocMatchDemotion;
#endif
+#ifndef U_FORCE_HIDE_DRAFT_API
+
+/**
+ * Builder option for whether to include or ignore one-way (fallback) match data.
+ * The LocaleMatcher uses CLDR languageMatch data which includes fallback (oneway=true) entries.
+ * Sometimes it is desirable to ignore those.
+ *
+ * <p>For example, consider a web application with the UI in a given language,
+ * with a link to another, related web app.
+ * The link should include the UI language, and the target server may also use
+ * the client’s Accept-Language header data.
+ * The target server has its own list of supported languages.
+ * One may want to favor UI language consistency, that is,
+ * if there is a decent match for the original UI language, we want to use it,
+ * but not if it is merely a fallback.
+ *
+ * @see LocaleMatcher::Builder#setDirection(ULocMatchDirection)
+ * @draft ICU 67
+ */
+enum ULocMatchDirection {
+ /**
+ * Locale matching includes one-way matches such as Breton→French. (default)
+ *
+ * @draft ICU 67
+ */
+ ULOCMATCH_DIRECTION_WITH_ONE_WAY,
+ /**
+ * Locale matching limited to two-way matches including e.g. Danish↔Norwegian
+ * but ignoring one-way matches.
+ *
+ * @draft ICU 67
+ */
+ ULOCMATCH_DIRECTION_ONLY_TWO_WAY
+};
+#ifndef U_IN_DOXYGEN
+typedef enum ULocMatchDirection ULocMatchDirection;
+#endif
+
+#endif // U_FORCE_HIDE_DRAFT_API
+
struct UHashtable;
U_NAMESPACE_BEGIN
@@ -145,7 +183,7 @@ class XLikelySubtags;
*
* <p>This class is not intended for public subclassing.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
class U_COMMON_API LocaleMatcher : public UMemory {
public:
@@ -153,7 +191,7 @@ public:
* Data for the best-matching pair of a desired and a supported locale.
* Movable but not copyable.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
class U_COMMON_API Result : public UMemory {
public:
@@ -162,14 +200,14 @@ public:
* This object will have the same contents that the source object had.
*
* @param src Result to move contents from.
- * @draft ICU 65
+ * @stable ICU 65
*/
Result(Result &&src) U_NOEXCEPT;
/**
* Destructor.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
~Result();
@@ -178,7 +216,7 @@ public:
* This object will have the same contents that the source object had.
*
* @param src Result to move contents from.
- * @draft ICU 65
+ * @stable ICU 65
*/
Result &operator=(Result &&src) U_NOEXCEPT;
@@ -187,18 +225,18 @@ public:
* nullptr if the list of desired locales is empty or if none matched well enough.
*
* @return the best-matching desired locale, or nullptr.
- * @draft ICU 65
+ * @stable ICU 65
*/
inline const Locale *getDesiredLocale() const { return desiredLocale; }
/**
* Returns the best-matching supported locale.
* If none matched well enough, this is the default locale.
- * The default locale is nullptr if the list of supported locales is empty and
- * no explicit default locale is set.
+ * The default locale is nullptr if Builder::setNoDefaultLocale() was called,
+ * or if the list of supported locales is empty and no explicit default locale is set.
*
* @return the best-matching supported locale, or nullptr.
- * @draft ICU 65
+ * @stable ICU 65
*/
inline const Locale *getSupportedLocale() const { return supportedLocale; }
@@ -207,7 +245,7 @@ public:
* -1 if the list of desired locales is empty or if none matched well enough.
*
* @return the index of the best-matching desired locale, or -1.
- * @draft ICU 65
+ * @stable ICU 65
*/
inline int32_t getDesiredIndex() const { return desiredIndex; }
@@ -219,7 +257,7 @@ public:
* -1 if the list of supported locales is empty or if none matched well enough.
*
* @return the index of the best-matching supported locale, or -1.
- * @draft ICU 65
+ * @stable ICU 65
*/
inline int32_t getSupportedIndex() const { return supportedIndex; }
@@ -233,7 +271,7 @@ public:
* <p>Example: desired=ar-SA-u-nu-latn, supported=ar-EG, resolved locale=ar-SA-u-nu-latn
*
* @return a locale combining the best-matching desired and supported locales.
- * @draft ICU 65
+ * @stable ICU 65
*/
Locale makeResolvedLocale(UErrorCode &errorCode) const;
@@ -260,8 +298,7 @@ public:
* LocaleMatcher builder.
* Movable but not copyable.
*
- * @see LocaleMatcher#builder()
- * @draft ICU 65
+ * @stable ICU 65
*/
class U_COMMON_API Builder : public UMemory {
public:
@@ -269,7 +306,7 @@ public:
* Constructs a builder used in chaining parameters for building a LocaleMatcher.
*
* @return a new Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder() {}
@@ -278,14 +315,14 @@ public:
* This builder will have the same contents that the source builder had.
*
* @param src Builder to move contents from.
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder(Builder &&src) U_NOEXCEPT;
/**
* Destructor.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
~Builder();
@@ -294,7 +331,7 @@ public:
* This builder will have the same contents that the source builder had.
*
* @param src Builder to move contents from.
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &operator=(Builder &&src) U_NOEXCEPT;
@@ -307,7 +344,7 @@ public:
*
* @param locales the Accept-Language string of locales to set
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &setSupportedLocalesFromListString(StringPiece locales);
@@ -318,7 +355,7 @@ public:
*
* @param locales the list of locale
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &setSupportedLocales(Locale::Iterator &locales);
@@ -333,7 +370,7 @@ public:
* @param begin Start of range.
* @param end Exclusive end of range.
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
template<typename Iter>
Builder &setSupportedLocales(Iter begin, Iter end) {
@@ -358,7 +395,7 @@ public:
* @param end Exclusive end of range.
* @param converter Converter from *begin to const Locale & or compatible.
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
template<typename Iter, typename Conv>
Builder &setSupportedLocalesViaConverter(Iter begin, Iter end, Conv converter) {
@@ -376,17 +413,31 @@ public:
*
* @param locale another locale
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &addSupportedLocale(const Locale &locale);
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Sets no default locale.
+ * There will be no explicit or implicit default locale.
+ * If there is no good match, then the matcher will return nullptr for the
+ * best supported locale.
+ *
+ * @draft ICU 68
+ */
+ Builder &setNoDefaultLocale();
+#endif // U_HIDE_DRAFT_API
+
/**
* Sets the default locale; if nullptr, or if it is not set explicitly,
* then the first supported locale is used as the default locale.
+ * There is no default locale at all (nullptr will be returned instead)
+ * if setNoDefaultLocale() is called.
*
* @param defaultLocale the default locale (will be copied)
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &setDefaultLocale(const Locale *defaultLocale);
@@ -398,7 +449,7 @@ public:
*
* @param subtag the subtag to favor
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &setFavorSubtag(ULocMatchFavorSubtag subtag);
@@ -408,10 +459,52 @@ public:
*
* @param demotion the demotion per desired locale to set.
* @return this Builder object
- * @draft ICU 65
+ * @stable ICU 65
*/
Builder &setDemotionPerDesiredLocale(ULocMatchDemotion demotion);
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Option for whether to include or ignore one-way (fallback) match data.
+ * By default, they are included.
+ *
+ * @param direction the match direction to set.
+ * @return this Builder object
+ * @draft ICU 67
+ */
+ Builder &setDirection(ULocMatchDirection direction) {
+ if (U_SUCCESS(errorCode_)) {
+ direction_ = direction;
+ }
+ return *this;
+ }
+#endif // U_HIDE_DRAFT_API
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Sets the maximum distance for an acceptable match.
+ * The matcher will return a match for a pair of locales only if
+ * they match at least as well as the pair given here.
+ *
+ * For example, setMaxDistance(en-US, en-GB) limits matches to ones where the
+ * (desired, support) locales have a distance no greater than a region subtag difference.
+ * This is much stricter than the CLDR default.
+ *
+ * The details of locale matching are subject to changes in
+ * CLDR data and in the algorithm.
+ * Specifying a maximum distance in relative terms via a sample pair of locales
+ * insulates from changes that affect all distance metrics similarly,
+ * but some changes will necessarily affect relative distances between
+ * different pairs of locales.
+ *
+ * @param desired the desired locale for distance comparison.
+ * @param supported the supported locale for distance comparison.
+ * @return this Builder object
+ * @draft ICU 68
+ */
+ Builder &setMaxDistance(const Locale &desired, const Locale &supported);
+#endif // U_HIDE_DRAFT_API
+
/**
* Sets the UErrorCode if an error occurred while setting parameters.
* Preserves older error codes in the outErrorCode.
@@ -419,8 +512,8 @@ public:
* @param outErrorCode Set to an error code if it does not contain one already
* and an error occurred while setting parameters.
* Otherwise unchanged.
- * @return TRUE if U_FAILURE(outErrorCode)
- * @draft ICU 65
+ * @return true if U_FAILURE(outErrorCode)
+ * @stable ICU 65
*/
UBool copyErrorTo(UErrorCode &outErrorCode) const;
@@ -431,8 +524,8 @@ public:
* @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test,
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
- * @return new LocaleMatcher.
- * @draft ICU 65
+ * @return LocaleMatcher
+ * @stable ICU 65
*/
LocaleMatcher build(UErrorCode &errorCode) const;
@@ -450,7 +543,11 @@ public:
int32_t thresholdDistance_ = -1;
ULocMatchDemotion demotion_ = ULOCMATCH_DEMOTION_REGION;
Locale *defaultLocale_ = nullptr;
+ bool withDefault_ = true;
ULocMatchFavorSubtag favor_ = ULOCMATCH_FAVOR_LANGUAGE;
+ ULocMatchDirection direction_ = ULOCMATCH_DIRECTION_WITH_ONE_WAY;
+ Locale *maxDistanceDesired_ = nullptr;
+ Locale *maxDistanceSupported_ = nullptr;
};
// FYI No public LocaleMatcher constructors in C++; use the Builder.
@@ -459,13 +556,13 @@ public:
* Move copy constructor; might modify the source.
* This matcher will have the same settings that the source matcher had.
* @param src source matcher
- * @draft ICU 65
+ * @stable ICU 65
*/
LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT;
/**
* Destructor.
- * @draft ICU 65
+ * @stable ICU 65
*/
~LocaleMatcher();
@@ -475,7 +572,7 @@ public:
* The behavior is undefined if *this and src are the same object.
* @param src source matcher
* @return *this
- * @draft ICU 65
+ * @stable ICU 65
*/
LocaleMatcher &operator=(LocaleMatcher &&src) U_NOEXCEPT;
@@ -487,7 +584,7 @@ public:
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
* @return the best-matching supported locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
const Locale *getBestMatch(const Locale &desiredLocale, UErrorCode &errorCode) const;
@@ -499,7 +596,7 @@ public:
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
* @return the best-matching supported locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
const Locale *getBestMatch(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const;
@@ -515,7 +612,7 @@ public:
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
* @return the best-matching supported locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
const Locale *getBestMatchForListString(StringPiece desiredLocaleList, UErrorCode &errorCode) const;
@@ -529,7 +626,7 @@ public:
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
* @return the best-matching pair of the desired and a supported locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
Result getBestMatchResult(const Locale &desiredLocale, UErrorCode &errorCode) const;
@@ -543,10 +640,27 @@ public:
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
* @return the best-matching pair of a desired and a supported locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
Result getBestMatchResult(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const;
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns true if the pair of locales matches acceptably.
+ * This is influenced by Builder options such as setDirection(), setFavorSubtag(),
+ * and setMaxDistance().
+ *
+ * @param desired The desired locale.
+ * @param supported The supported locale.
+ * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test,
+ * or else the function returns immediately. Check for U_FAILURE()
+ * on output or use with function chaining. (See User Guide for details.)
+ * @return true if the pair of locales matches acceptably.
+ * @draft ICU 68
+ */
+ UBool isMatch(const Locale &desired, const Locale &supported, UErrorCode &errorCode) const;
+#endif // U_HIDE_DRAFT_API
+
#ifndef U_HIDE_INTERNAL_API
/**
* Returns a fraction between 0 and 1, where 1 means that the languages are a
@@ -574,6 +688,8 @@ private:
LocaleMatcher(const LocaleMatcher &other) = delete;
LocaleMatcher &operator=(const LocaleMatcher &other) = delete;
+ int32_t putIfAbsent(const LSR &lsr, int32_t i, int32_t suppLength, UErrorCode &errorCode);
+
int32_t getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remainingIter, UErrorCode &errorCode) const;
const XLikelySubtags &likelySubtags;
@@ -581,6 +697,7 @@ private:
int32_t thresholdDistance;
int32_t demotionPerDesiredLocale;
ULocMatchFavorSubtag favorSubtag;
+ ULocMatchDirection direction;
// These are in input order.
const Locale ** supportedLocales;
@@ -595,11 +712,9 @@ private:
int32_t supportedLSRsLength;
Locale *ownedDefaultLocale;
const Locale *defaultLocale;
- int32_t defaultLocaleIndex;
};
U_NAMESPACE_END
-#endif // U_HIDE_DRAFT_API
#endif // U_SHOW_CPLUSPLUS_API
#endif // __LOCALEMATCHER_H__
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h b/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
index e011688b1a5..2a65f2d382d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
@@ -88,13 +88,13 @@ public:
~LocalPointerBase() { /* delete ptr; */ }
/**
* NULL check.
- * @return TRUE if ==NULL
+ * @return true if ==NULL
* @stable ICU 4.4
*/
UBool isNull() const { return ptr==NULL; }
/**
* NULL check.
- * @return TRUE if !=NULL
+ * @return true if !=NULL
* @stable ICU 4.4
*/
UBool isValid() const { return ptr!=NULL; }
@@ -225,7 +225,6 @@ public:
src.ptr=NULL;
}
-#ifndef U_HIDE_DRAFT_API
/**
* Constructs a LocalPointer from a C++11 std::unique_ptr.
* The LocalPointer steals the object owned by the std::unique_ptr.
@@ -234,11 +233,10 @@ public:
* in a local variable, you must use std::move.
*
* @param p The std::unique_ptr from which the pointer will be stolen.
- * @draft ICU 64
+ * @stable ICU 64
*/
explicit LocalPointer(std::unique_ptr<T> &&p)
: LocalPointerBase<T>(p.release()) {}
-#endif /* U_HIDE_DRAFT_API */
/**
* Destructor deletes the object it owns.
@@ -261,20 +259,18 @@ public:
return *this;
}
-#ifndef U_HIDE_DRAFT_API
/**
* Move-assign from an std::unique_ptr to this LocalPointer.
* Steals the pointer from the std::unique_ptr.
*
* @param p The std::unique_ptr from which the pointer will be stolen.
* @return *this
- * @draft ICU 64
+ * @stable ICU 64
*/
LocalPointer<T> &operator=(std::unique_ptr<T> &&p) U_NOEXCEPT {
adoptInstead(p.release());
return *this;
}
-#endif /* U_HIDE_DRAFT_API */
/**
* Swap pointers.
@@ -332,7 +328,6 @@ public:
}
}
-#ifndef U_HIDE_DRAFT_API
/**
* Conversion operator to a C++11 std::unique_ptr.
* Disowns the object and gives it to the returned std::unique_ptr.
@@ -342,12 +337,11 @@ public:
*
* @return An std::unique_ptr owning the pointer previously owned by this
* icu::LocalPointer.
- * @draft ICU 64
+ * @stable ICU 64
*/
operator std::unique_ptr<T> () && {
return std::unique_ptr<T>(LocalPointerBase<T>::orphan());
}
-#endif /* U_HIDE_DRAFT_API */
};
/**
@@ -406,7 +400,6 @@ public:
src.ptr=NULL;
}
-#ifndef U_HIDE_DRAFT_API
/**
* Constructs a LocalArray from a C++11 std::unique_ptr of an array type.
* The LocalPointer steals the array owned by the std::unique_ptr.
@@ -415,11 +408,10 @@ public:
* in a local variable, you must use std::move.
*
* @param p The std::unique_ptr from which the array will be stolen.
- * @draft ICU 64
+ * @stable ICU 64
*/
explicit LocalArray(std::unique_ptr<T[]> &&p)
: LocalPointerBase<T>(p.release()) {}
-#endif /* U_HIDE_DRAFT_API */
/**
* Destructor deletes the array it owns.
@@ -442,20 +434,18 @@ public:
return *this;
}
-#ifndef U_HIDE_DRAFT_API
/**
* Move-assign from an std::unique_ptr to this LocalPointer.
* Steals the array from the std::unique_ptr.
*
* @param p The std::unique_ptr from which the array will be stolen.
* @return *this
- * @draft ICU 64
+ * @stable ICU 64
*/
LocalArray<T> &operator=(std::unique_ptr<T[]> &&p) U_NOEXCEPT {
adoptInstead(p.release());
return *this;
}
-#endif /* U_HIDE_DRAFT_API */
/**
* Swap pointers.
@@ -521,7 +511,6 @@ public:
*/
T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
-#ifndef U_HIDE_DRAFT_API
/**
* Conversion operator to a C++11 std::unique_ptr.
* Disowns the object and gives it to the returned std::unique_ptr.
@@ -531,12 +520,11 @@ public:
*
* @return An std::unique_ptr owning the pointer previously owned by this
* icu::LocalPointer.
- * @draft ICU 64
+ * @stable ICU 64
*/
operator std::unique_ptr<T[]> () && {
return std::unique_ptr<T[]>(LocalPointerBase<T>::orphan());
}
-#endif /* U_HIDE_DRAFT_API */
};
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/locid.h b/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
index 57c669b3343..ba858d702af 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
@@ -253,7 +253,7 @@ public:
/**
* Construct a locale from language, country, variant.
* If an error occurs, then the constructed object will be "bogus"
- * (isBogus() will return TRUE).
+ * (isBogus() will return true).
*
* @param language Lowercase two-letter or three-letter ISO-639 code.
* This parameter can instead be an ICU style C locale (e.g. "en_US"),
@@ -393,13 +393,17 @@ public:
* If the specified language tag contains any ill-formed subtags,
* the first such subtag and all following subtags are ignored.
* <p>
- * This implements the 'Language-Tag' production of BCP47, and so
- * supports grandfathered (regular and irregular) as well as private
- * use language tags. Private use tags are represented as 'x-whatever',
- * and grandfathered tags are converted to their canonical replacements
- * where they exist. Note that a few grandfathered tags have no modern
- * replacement, these will be converted using the fallback described in
+ * This implements the 'Language-Tag' production of BCP 47, and so
+ * supports legacy language tags (marked as “Type: grandfathered†in BCP 47)
+ * (regular and irregular) as well as private use language tags.
+ *
+ * Private use tags are represented as 'x-whatever',
+ * and legacy tags are converted to their canonical replacements where they exist.
+ *
+ * Note that a few legacy tags have no modern replacement;
+ * these will be converted using the fallback described in
* the first paragraph, so some information might be lost.
+ *
* @param tag the input BCP47 language tag.
* @param status error information if creating the Locale failed.
* @return the Locale for the specified BCP47 language tag.
@@ -448,7 +452,7 @@ public:
/**
* Creates a locale from the given string after canonicalizing
- * the string by calling uloc_canonicalize().
+ * the string according to CLDR by calling uloc_canonicalize().
* @param name the locale ID to create from. Must not be NULL.
* @return a new locale object corresponding to the given name
* @stable ICU 3.0
@@ -567,6 +571,16 @@ public:
*/
void minimizeSubtags(UErrorCode& status);
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Canonicalize the locale ID of this object according to CLDR.
+ * @param status the status code
+ * @draft ICU 67
+ * @see createCanonical
+ */
+ void canonicalize(UErrorCode& status);
+#endif // U_HIDE_DRAFT_API
+
/**
* Gets the list of keywords for the specified locale.
*
@@ -785,14 +799,14 @@ public:
/**
* Returns whether this locale's script is written right-to-left.
* If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags().
- * If no likely script is known, then FALSE is returned.
+ * If no likely script is known, then false is returned.
*
* A script is right-to-left according to the CLDR script metadata
* which corresponds to whether the script's letters have Bidi_Class=R or AL.
*
- * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl".
+ * Returns true for "ar" and "en-Hebr", false for "zh" and "fa-Cyrl".
*
- * @return TRUE if the locale's script is written right-to-left
+ * @return true if the locale's script is written right-to-left
* @stable ICU 54
*/
UBool isRightToLeft() const;
@@ -946,7 +960,7 @@ public:
/**
* Gets the bogus state. Locale object can be bogus if it doesn't exist
- * @return FALSE if it is a real locale, TRUE if it is a bogus locale
+ * @return false if it is a real locale, true if it is a bogus locale
* @stable ICU 2.1
*/
inline UBool isBogus(void) const;
@@ -995,32 +1009,31 @@ public:
*/
virtual UClassID getDynamicClassID() const;
-#ifndef U_HIDE_DRAFT_API
/**
* A Locale iterator interface similar to a Java Iterator<Locale>.
- * @draft ICU 65
+ * @stable ICU 65
*/
class U_COMMON_API Iterator /* not : public UObject because this is an interface/mixin class */ {
public:
- /** @draft ICU 65 */
+ /** @stable ICU 65 */
virtual ~Iterator();
/**
- * @return TRUE if next() can be called again.
- * @draft ICU 65
+ * @return true if next() can be called again.
+ * @stable ICU 65
*/
virtual UBool hasNext() const = 0;
/**
* @return the next locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
virtual const Locale &next() = 0;
};
/**
* A generic Locale iterator implementation over Locale input iterators.
- * @draft ICU 65
+ * @stable ICU 65
*/
template<typename Iter>
class RangeIterator : public Iterator, public UMemory {
@@ -1032,19 +1045,19 @@ public:
*
* @param begin Start of range.
* @param end Exclusive end of range.
- * @draft ICU 65
+ * @stable ICU 65
*/
RangeIterator(Iter begin, Iter end) : it_(begin), end_(end) {}
/**
- * @return TRUE if next() can be called again.
- * @draft ICU 65
+ * @return true if next() can be called again.
+ * @stable ICU 65
*/
UBool hasNext() const override { return it_ != end_; }
/**
* @return the next locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
const Locale &next() override { return *it_++; }
@@ -1056,7 +1069,7 @@ public:
/**
* A generic Locale iterator implementation over Locale input iterators.
* Calls the converter to convert each *begin to a const Locale &.
- * @draft ICU 65
+ * @stable ICU 65
*/
template<typename Iter, typename Conv>
class ConvertingIterator : public Iterator, public UMemory {
@@ -1069,20 +1082,20 @@ public:
* @param begin Start of range.
* @param end Exclusive end of range.
* @param converter Converter from *begin to const Locale & or compatible.
- * @draft ICU 65
+ * @stable ICU 65
*/
ConvertingIterator(Iter begin, Iter end, Conv converter) :
it_(begin), end_(end), converter_(converter) {}
/**
- * @return TRUE if next() can be called again.
- * @draft ICU 65
+ * @return true if next() can be called again.
+ * @stable ICU 65
*/
UBool hasNext() const override { return it_ != end_; }
/**
* @return the next locale.
- * @draft ICU 65
+ * @stable ICU 65
*/
const Locale &next() override { return converter_(*it_++); }
@@ -1091,7 +1104,6 @@ public:
const Iter end_;
Conv converter_;
};
-#endif // U_HIDE_DRAFT_API
protected: /* only protected for testing purposes. DO NOT USE. */
#ifndef U_HIDE_INTERNAL_API
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h b/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
index 04f00a8757d..98e7b70b1fc 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
@@ -265,7 +265,7 @@ typedef enum UMessagePatternArgType UMessagePatternArgType;
/**
* \def UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE
- * Returns TRUE if the argument type has a plural style part sequence and semantics,
+ * Returns true if the argument type has a plural style part sequence and semantics,
* for example UMSGPAT_ARG_TYPE_PLURAL and UMSGPAT_ARG_TYPE_SELECTORDINAL.
* @stable ICU 50
*/
@@ -523,14 +523,14 @@ public:
/**
* @param other another object to compare with.
- * @return TRUE if this object is equivalent to the other one.
+ * @return true if this object is equivalent to the other one.
* @stable ICU 4.8
*/
UBool operator==(const MessagePattern &other) const;
/**
* @param other another object to compare with.
- * @return FALSE if this object is equivalent to the other one.
+ * @return false if this object is equivalent to the other one.
* @stable ICU 4.8
*/
inline UBool operator!=(const MessagePattern &other) const {
@@ -564,7 +564,7 @@ public:
/**
* Does the parsed pattern have named arguments like {first_name}?
- * @return TRUE if the parsed pattern has at least one named argument.
+ * @return true if the parsed pattern has at least one named argument.
* @stable ICU 4.8
*/
UBool hasNamedArguments() const {
@@ -573,7 +573,7 @@ public:
/**
* Does the parsed pattern have numbered arguments like {2}?
- * @return TRUE if the parsed pattern has at least one numbered argument.
+ * @return true if the parsed pattern has at least one numbered argument.
* @stable ICU 4.8
*/
UBool hasNumberedArguments() const {
@@ -664,7 +664,7 @@ public:
* Compares the part's substring with the input string s.
* @param part a part of this MessagePattern.
* @param s a string.
- * @return TRUE if getSubstring(part).equals(s).
+ * @return true if getSubstring(part).equals(s).
* @stable ICU 4.8
*/
UBool partSubstringMatches(const Part &part, const UnicodeString &s) const {
@@ -785,7 +785,7 @@ public:
* Indicates whether the Part type has a numeric value.
* If so, then that numeric value can be retrieved via MessagePattern.getNumericValue().
* @param type The Part type to be tested.
- * @return TRUE if the Part type has a numeric value.
+ * @return true if the Part type has a numeric value.
* @stable ICU 4.8
*/
static UBool hasNumericValue(UMessagePatternPartType type) {
@@ -794,14 +794,14 @@ public:
/**
* @param other another object to compare with.
- * @return TRUE if this object is equivalent to the other one.
+ * @return true if this object is equivalent to the other one.
* @stable ICU 4.8
*/
UBool operator==(const Part &other) const;
/**
* @param other another object to compare with.
- * @return FALSE if this object is equivalent to the other one.
+ * @return false if this object is equivalent to the other one.
* @stable ICU 4.8
*/
inline UBool operator!=(const Part &other) const {
@@ -869,7 +869,7 @@ private:
* Parses a number from the specified message substring.
* @param start start index into the message string
* @param limit limit index into the message string, must be start<limit
- * @param allowInfinity TRUE if U+221E is allowed (for ChoiceFormat)
+ * @param allowInfinity true if U+221E is allowed (for ChoiceFormat)
* @param parseError
* @param errorCode
*/
@@ -900,13 +900,13 @@ private:
UBool isOrdinal(int32_t index);
/**
- * @return TRUE if we are inside a MessageFormat (sub-)pattern,
+ * @return true if we are inside a MessageFormat (sub-)pattern,
* as opposed to inside a top-level choice/plural/select pattern.
*/
UBool inMessageFormatPattern(int32_t nestingLevel);
/**
- * @return TRUE if we are in a MessageFormat sub-pattern
+ * @return true if we are in a MessageFormat sub-pattern
* of a top-level ChoiceFormat pattern.
*/
UBool inTopLevelChoiceMessage(int32_t nestingLevel, UMessagePatternArgType parentType);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h b/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
index 4aeb3bb3d82..5eb1d95cafb 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
@@ -290,13 +290,13 @@ public:
* Gets the decomposition mapping of c.
* Roughly equivalent to normalizing the String form of c
* on a UNORM2_DECOMPOSE Normalizer2 instance, but much faster, and except that this function
- * returns FALSE and does not write a string
+ * returns false and does not write a string
* if c does not have a decomposition mapping in this instance's data.
* This function is independent of the mode of the Normalizer2.
* @param c code point
* @param decomposition String object which will be set to c's
* decomposition mapping, if there is one.
- * @return TRUE if c has a decomposition, otherwise FALSE
+ * @return true if c has a decomposition, otherwise false
* @stable ICU 4.6
*/
virtual UBool
@@ -319,11 +319,11 @@ public:
* in this case, the result contains either one or two code points (=1..4 char16_ts).
*
* This function is independent of the mode of the Normalizer2.
- * The default implementation returns FALSE.
+ * The default implementation returns false.
* @param c code point
* @param decomposition String object which will be set to c's
* raw decomposition mapping, if there is one.
- * @return TRUE if c has a decomposition, otherwise FALSE
+ * @return true if c has a decomposition, otherwise false
* @stable ICU 49
*/
virtual UBool
@@ -369,7 +369,7 @@ public:
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if s is normalized
+ * @return true if s is normalized
* @stable ICU 4.4
*/
virtual UBool
@@ -392,7 +392,7 @@ public:
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if s is normalized
+ * @return true if s is normalized
* @stable ICU 60
*/
virtual UBool
@@ -452,7 +452,7 @@ public:
* character independently.
* This is used for iterative normalization. See the class documentation for details.
* @param c character to test
- * @return TRUE if c has a normalization boundary before it
+ * @return true if c has a normalization boundary before it
* @stable ICU 4.4
*/
virtual UBool hasBoundaryBefore(UChar32 c) const = 0;
@@ -468,7 +468,7 @@ public:
* This is used for iterative normalization. See the class documentation for details.
* Note that this operation may be significantly slower than hasBoundaryBefore().
* @param c character to test
- * @return TRUE if c has a normalization boundary after it
+ * @return true if c has a normalization boundary after it
* @stable ICU 4.4
*/
virtual UBool hasBoundaryAfter(UChar32 c) const = 0;
@@ -483,7 +483,7 @@ public:
* This is used for iterative normalization. See the class documentation for details.
* Note that this operation may be significantly slower than hasBoundaryBefore().
* @param c character to test
- * @return TRUE if c is normalization-inert
+ * @return true if c is normalization-inert
* @stable ICU 4.4
*/
virtual UBool isInert(UChar32 c) const = 0;
@@ -612,7 +612,7 @@ public:
* @param c code point
* @param decomposition String object which will be set to c's
* decomposition mapping, if there is one.
- * @return TRUE if c has a decomposition, otherwise FALSE
+ * @return true if c has a decomposition, otherwise false
* @stable ICU 4.6
*/
virtual UBool
@@ -626,7 +626,7 @@ public:
* @param c code point
* @param decomposition String object which will be set to c's
* raw decomposition mapping, if there is one.
- * @return TRUE if c has a decomposition, otherwise FALSE
+ * @return true if c has a decomposition, otherwise false
* @stable ICU 49
*/
virtual UBool
@@ -664,7 +664,7 @@ public:
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if s is normalized
+ * @return true if s is normalized
* @stable ICU 4.4
*/
virtual UBool
@@ -687,7 +687,7 @@ public:
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if s is normalized
+ * @return true if s is normalized
* @stable ICU 60
*/
virtual UBool
@@ -724,7 +724,7 @@ public:
* regardless of context.
* For details see the Normalizer2 base class documentation.
* @param c character to test
- * @return TRUE if c has a normalization boundary before it
+ * @return true if c has a normalization boundary before it
* @stable ICU 4.4
*/
virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE;
@@ -734,7 +734,7 @@ public:
* regardless of context.
* For details see the Normalizer2 base class documentation.
* @param c character to test
- * @return TRUE if c has a normalization boundary after it
+ * @return true if c has a normalization boundary after it
* @stable ICU 4.4
*/
virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE;
@@ -743,7 +743,7 @@ public:
* Tests if the character is normalization-inert.
* For details see the Normalizer2 base class documentation.
* @param c character to test
- * @return TRUE if c is normalization-inert
+ * @return true if c is normalization-inert
* @stable ICU 4.4
*/
virtual UBool isInert(UChar32 c) const U_OVERRIDE;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h b/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
index 07a596bd11b..3352983cdcc 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
@@ -234,7 +234,7 @@ public:
*
* @param source the string to be composed.
* @param compat Perform compatibility decomposition before composition.
- * If this argument is <code>FALSE</code>, only canonical
+ * If this argument is <code>false</code>, only canonical
* decomposition will be performed.
* @param options the optional features to be enabled (0 for no options)
* @param result The composed string (on output).
@@ -256,7 +256,7 @@ public:
*
* @param source the string to be decomposed.
* @param compat Perform compatibility decomposition.
- * If this argument is <code>FALSE</code>, only canonical
+ * If this argument is <code>false</code>, only canonical
* decomposition will be performed.
* @param options the optional features to be enabled (0 for no options)
* @param result The decomposed string (on output).
@@ -315,7 +315,7 @@ public:
* never a "maybe".
* For NFD, NFKD, and FCD, both functions work exactly the same.
* For NFC and NFKC where quickCheck may return "maybe", this function will
- * perform further tests to arrive at a TRUE/FALSE result.
+ * perform further tests to arrive at a true/false result.
*
* @param src String that is to be tested if it is in a normalization format.
* @param mode Which normalization form to test for.
@@ -577,7 +577,7 @@ public:
int32_t endIndex(void) const;
/**
- * Returns TRUE when both iterators refer to the same character in the same
+ * Returns true when both iterators refer to the same character in the same
* input text.
*
* @param that a Normalizer object to compare this one to
@@ -587,7 +587,7 @@ public:
UBool operator==(const Normalizer& that) const;
/**
- * Returns FALSE when both iterators refer to the same character in the same
+ * Returns false when both iterators refer to the same character in the same
* input text.
*
* @param that a Normalizer object to compare this one to
@@ -655,8 +655,8 @@ public:
* It is possible to specify multiple options that are all turned on or off.
*
* @param option the option(s) whose value is/are to be set.
- * @param value the new setting for the option. Use <code>TRUE</code> to
- * turn the option(s) on and <code>FALSE</code> to turn it/them off.
+ * @param value the new setting for the option. Use <code>true</code> to
+ * turn the option(s) on and <code>false</code> to turn it/them off.
*
* @see #getOption
* @deprecated ICU 56 Use Normalizer2 instead.
@@ -666,11 +666,11 @@ public:
/**
* Determine whether an option is turned on or off.
- * If multiple options are specified, then the result is TRUE if any
+ * If multiple options are specified, then the result is true if any
* of them are set.
* <p>
* @param option the option(s) that are to be checked
- * @return TRUE if any of the option(s) are set
+ * @return true if any of the option(s) are set
* @see #setOption
* @deprecated ICU 56 Use Normalizer2 instead.
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h b/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
index 909d288d48d..260ed4cbb86 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
@@ -97,14 +97,14 @@ public:
/**
* Equality operator.
- * @return TRUE if the two parse positions are equal, FALSE otherwise.
+ * @return true if the two parse positions are equal, false otherwise.
* @stable ICU 2.0
*/
inline UBool operator==(const ParsePosition& that) const;
/**
* Equality operator.
- * @return TRUE if the two parse positions are not equal, FALSE otherwise.
+ * @return true if the two parse positions are not equal, false otherwise.
* @stable ICU 2.0
*/
inline UBool operator!=(const ParsePosition& that) const;
@@ -196,9 +196,9 @@ inline UBool
ParsePosition::operator==(const ParsePosition& copy) const
{
if(index != copy.index || errorIndex != copy.errorIndex)
- return FALSE;
+ return false;
else
- return TRUE;
+ return true;
}
inline UBool
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/platform.h b/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
index ad75b298a42..2bb2f8b318d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
@@ -828,7 +828,7 @@ namespace std {
# define U_EXPORT
#endif
-/* U_CALLCONV is releated to U_EXPORT2 */
+/* U_CALLCONV is related to U_EXPORT2 */
#ifdef U_EXPORT2
/* Use the predefined value. */
#elif defined(_MSC_VER)
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/putil.h b/Build/source/libs/icu/icu-src/source/common/unicode/putil.h
index 759b136c13e..500c21252fc 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/putil.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/putil.h
@@ -66,7 +66,7 @@
*
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2 u_getDataDirectory(void);
+U_CAPI const char* U_EXPORT2 u_getDataDirectory(void);
/**
@@ -88,7 +88,7 @@ U_STABLE const char* U_EXPORT2 u_getDataDirectory(void);
* @see u_init
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory);
+U_CAPI void U_EXPORT2 u_setDataDirectory(const char *directory);
#ifndef U_HIDE_INTERNAL_API
/**
@@ -99,7 +99,7 @@ U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory);
* @return the time zone data override directory.
* @internal
*/
-U_INTERNAL const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status);
+U_CAPI const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status);
/**
* Set the time zone files override directory.
@@ -109,7 +109,7 @@ U_INTERNAL const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status
* will access the time zone data.
* @internal
*/
-U_INTERNAL void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCode *status);
+U_CAPI void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCode *status);
#endif /* U_HIDE_INTERNAL_API */
@@ -155,7 +155,7 @@ U_INTERNAL void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCo
* @see U_CHARSET_FAMILY
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_charsToUChars(const char *cs, UChar *us, int32_t length);
/**
@@ -177,7 +177,7 @@ u_charsToUChars(const char *cs, UChar *us, int32_t length);
* @see U_CHARSET_FAMILY
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_UCharsToChars(const UChar *us, char *cs, int32_t length);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h b/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
index 7825f603a51..65117f616cd 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
@@ -32,6 +32,8 @@
#include "unicode/parseerr.h"
#include "unicode/schriter.h"
+struct UCPTrie;
+
U_NAMESPACE_BEGIN
/** @internal */
@@ -140,6 +142,11 @@ private:
*/
UBool fDone;
+ /**
+ * Array of look-ahead tentative results.
+ */
+ int32_t *fLookAheadMatches;
+
//=======================================================================
// constructors
//=======================================================================
@@ -246,20 +253,20 @@ public:
RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that);
/**
- * Equality operator. Returns TRUE if both BreakIterators are of the
+ * Equality operator. Returns true if both BreakIterators are of the
* same class, have the same behavior, and iterate over the same text.
* @param that The BreakIterator to be compared for equality
- * @return TRUE if both BreakIterators are of the
+ * @return true if both BreakIterators are of the
* same class, have the same behavior, and iterate over the same text.
* @stable ICU 2.0
*/
virtual UBool operator==(const BreakIterator& that) const;
/**
- * Not-equal operator. If operator== returns TRUE, this returns FALSE,
+ * Not-equal operator. If operator== returns true, this returns false,
* and vice versa.
* @param that The BreakIterator to be compared for inequality
- * @return TRUE if both BreakIterators are not same.
+ * @return true if both BreakIterators are not same.
* @stable ICU 2.0
*/
inline UBool operator!=(const BreakIterator& that) const;
@@ -659,6 +666,28 @@ private:
*/
int32_t handleNext();
+ /*
+ * Templatized version of handleNext() and handleSafePrevious().
+ *
+ * There will be exactly four instantiations, two each for 8 and 16 bit tables,
+ * two each for 8 and 16 bit trie.
+ * Having separate instantiations for the table types keeps conditional tests of
+ * the table type out of the inner loops, at the expense of replicated code.
+ *
+ * The template parameter for the Trie access function is a value, not a type.
+ * Doing it this way, the compiler will inline the Trie function in the
+ * expanded functions. (Both the 8 and 16 bit access functions have the same type
+ * signature)
+ */
+
+ typedef uint16_t (*PTrieFunc)(const UCPTrie *, UChar32);
+
+ template<typename RowType, PTrieFunc trieFunc>
+ int32_t handleSafePrevious(int32_t fromPosition);
+
+ template<typename RowType, PTrieFunc trieFunc>
+ int32_t handleNext();
+
/**
* This function returns the appropriate LanguageBreakEngine for a
@@ -681,7 +710,6 @@ private:
* @internal
*/
void dumpTables();
-
#endif /* U_HIDE_INTERNAL_API */
};
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h b/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
index 28940675287..37738e277b5 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
@@ -286,7 +286,7 @@ public:
/**
* Checks whether the resource has another element to iterate over.
*
- * @return TRUE if there are more elements, FALSE if there is no more elements
+ * @return true if there are more elements, false if there is no more elements
* @stable ICU 2.0
*/
UBool
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h b/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h
index 9414bca3085..6d9c04ace23 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h
@@ -125,7 +125,7 @@ public:
* @param errorCode ICU error code in/out parameter.
* Must fulfill U_SUCCESS before the function call.
* Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax.
- * @return TRUE if U_SUCCESS(errorCode).
+ * @return true if U_SUCCESS(errorCode).
* @stable ICU 57
*/
UBool applyPattern(const UnicodeString &pattern, UErrorCode &errorCode) {
@@ -144,7 +144,7 @@ public:
* Must fulfill U_SUCCESS before the function call.
* Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax and
* too few or too many arguments.
- * @return TRUE if U_SUCCESS(errorCode).
+ * @return true if U_SUCCESS(errorCode).
* @stable ICU 57
*/
UBool applyPatternMinMaxArguments(const UnicodeString &pattern,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h b/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
index 8601f1f7c40..df72b4b7e84 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
@@ -196,7 +196,7 @@ public:
* Compares this enumeration to other to check if both are equal
*
* @param that The other string enumeration to compare this object to
- * @return TRUE if the enumerations are equal. FALSE if not.
+ * @return true if the enumerations are equal. false if not.
* @stable ICU 3.6
*/
virtual UBool operator==(const StringEnumeration& that)const;
@@ -204,7 +204,7 @@ public:
* Compares this enumeration to other to check if both are not equal
*
* @param that The other string enumeration to compare this object to
- * @return TRUE if the enumerations are equal. FALSE if not.
+ * @return true if the enumerations are equal. false if not.
* @stable ICU 3.6
*/
virtual UBool operator!=(const StringEnumeration& that)const;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h b/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
index f581091f872..7d7d871e1f7 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
@@ -67,13 +67,32 @@ class U_COMMON_API StringPiece : public UMemory {
* Default constructor, creates an empty StringPiece.
* @stable ICU 4.2
*/
- StringPiece() : ptr_(NULL), length_(0) { }
+ StringPiece() : ptr_(nullptr), length_(0) { }
+
/**
* Constructs from a NUL-terminated const char * pointer.
* @param str a NUL-terminated const char * pointer
* @stable ICU 4.2
*/
StringPiece(const char* str);
+#ifndef U_HIDE_DRAFT_API
+#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
+ /**
+ * Constructs from a NUL-terminated const char8_t * pointer.
+ * @param str a NUL-terminated const char8_t * pointer
+ * @draft ICU 67
+ */
+ StringPiece(const char8_t* str) : StringPiece(reinterpret_cast<const char*>(str)) {}
+#endif
+ /**
+ * Constructs an empty StringPiece.
+ * Needed for type disambiguation from multiple other overloads.
+ * @param p nullptr
+ * @draft ICU 67
+ */
+ StringPiece(std::nullptr_t p) : ptr_(p), length_(0) {}
+#endif // U_HIDE_DRAFT_API
+
/**
* Constructs from a std::string.
* @stable ICU 4.2
@@ -81,6 +100,17 @@ class U_COMMON_API StringPiece : public UMemory {
StringPiece(const std::string& str)
: ptr_(str.data()), length_(static_cast<int32_t>(str.size())) { }
#ifndef U_HIDE_DRAFT_API
+#if defined(__cpp_lib_char8_t) || defined(U_IN_DOXYGEN)
+ /**
+ * Constructs from a std::u8string.
+ * @draft ICU 67
+ */
+ StringPiece(const std::u8string& str)
+ : ptr_(reinterpret_cast<const char*>(str.data())),
+ length_(static_cast<int32_t>(str.size())) { }
+#endif
+#endif // U_HIDE_DRAFT_API
+
/**
* Constructs from some other implementation of a string piece class, from any
* C++ record type that has these two methods:
@@ -88,7 +118,7 @@ class U_COMMON_API StringPiece : public UMemory {
* \code{.cpp}
*
* struct OtherStringPieceClass {
- * const char* data();
+ * const char* data(); // or const char8_t*
* size_t size();
* };
*
@@ -97,16 +127,24 @@ class U_COMMON_API StringPiece : public UMemory {
* The other string piece class will typically be std::string_view from C++17
* or absl::string_view from Abseil.
*
+ * Starting with C++20, data() may also return a const char8_t* pointer,
+ * as from std::u8string_view.
+ *
* @param str the other string piece
- * @draft ICU 65
+ * @stable ICU 65
*/
template <typename T,
typename = typename std::enable_if<
- std::is_same<decltype(T().data()), const char*>::value &&
+ (std::is_same<decltype(T().data()), const char*>::value
+#if defined(__cpp_char8_t)
+ || std::is_same<decltype(T().data()), const char8_t*>::value
+#endif
+ ) &&
std::is_same<decltype(T().size()), size_t>::value>::type>
StringPiece(T str)
- : ptr_(str.data()), length_(static_cast<int32_t>(str.size())) {}
-#endif // U_HIDE_DRAFT_API
+ : ptr_(reinterpret_cast<const char*>(str.data())),
+ length_(static_cast<int32_t>(str.size())) {}
+
/**
* Constructs from a const char * pointer and a specified length.
* @param offset a const char * pointer (need not be terminated)
@@ -114,6 +152,19 @@ class U_COMMON_API StringPiece : public UMemory {
* @stable ICU 4.2
*/
StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { }
+#ifndef U_HIDE_DRAFT_API
+#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
+ /**
+ * Constructs from a const char8_t * pointer and a specified length.
+ * @param str a const char8_t * pointer (need not be terminated)
+ * @param len the length of the string; must be non-negative
+ * @draft ICU 67
+ */
+ StringPiece(const char8_t* str, int32_t len) :
+ StringPiece(reinterpret_cast<const char*>(str), len) {}
+#endif
+#endif // U_HIDE_DRAFT_API
+
/**
* Substring of another StringPiece.
* @param x the other StringPiece
@@ -132,7 +183,7 @@ class U_COMMON_API StringPiece : public UMemory {
StringPiece(const StringPiece& x, int32_t pos, int32_t len);
/**
- * Returns the string pointer. May be NULL if it is empty.
+ * Returns the string pointer. May be nullptr if it is empty.
*
* data() may return a pointer to a buffer with embedded NULs, and the
* returned buffer may or may not be null terminated. Therefore it is
@@ -156,7 +207,7 @@ class U_COMMON_API StringPiece : public UMemory {
int32_t length() const { return length_; }
/**
* Returns whether the string is empty.
- * @return TRUE if the string is empty
+ * @return true if the string is empty
* @stable ICU 4.2
*/
UBool empty() const { return length_ == 0; }
@@ -165,7 +216,7 @@ class U_COMMON_API StringPiece : public UMemory {
* Sets to an empty string.
* @stable ICU 4.2
*/
- void clear() { ptr_ = NULL; length_ = 0; }
+ void clear() { ptr_ = nullptr; length_ = 0; }
/**
* Reset the stringpiece to refer to new data.
@@ -182,6 +233,29 @@ class U_COMMON_API StringPiece : public UMemory {
*/
void set(const char* str);
+#ifndef U_HIDE_DRAFT_API
+#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
+ /**
+ * Resets the stringpiece to refer to new data.
+ * @param xdata pointer the new string data. Need not be NUL-terminated.
+ * @param len the length of the new data
+ * @draft ICU 67
+ */
+ inline void set(const char8_t* xdata, int32_t len) {
+ set(reinterpret_cast<const char*>(xdata), len);
+ }
+
+ /**
+ * Resets the stringpiece to refer to new data.
+ * @param str a pointer to a NUL-terminated string.
+ * @draft ICU 67
+ */
+ inline void set(const char8_t* str) {
+ set(reinterpret_cast<const char*>(str));
+ }
+#endif
+#endif // U_HIDE_DRAFT_API
+
/**
* Removes the first n string units.
* @param n prefix length, must be non-negative and <=length()
@@ -212,6 +286,26 @@ class U_COMMON_API StringPiece : public UMemory {
}
}
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Searches the StringPiece for the given search string (needle);
+ * @param needle The string for which to search.
+ * @param offset Where to start searching within this string (haystack).
+ * @return The offset of needle in haystack, or -1 if not found.
+ * @draft ICU 67
+ */
+ int32_t find(StringPiece needle, int32_t offset);
+
+ /**
+ * Compares this StringPiece with the other StringPiece, with semantics
+ * similar to std::string::compare().
+ * @param other The string to compare to.
+ * @return below zero if this < other; above zero if this > other; 0 if this == other.
+ * @draft ICU 67
+ */
+ int32_t compare(StringPiece other);
+#endif // U_HIDE_DRAFT_API
+
/**
* Maximum integer, used as a default value for substring methods.
* @stable ICU 4.2
@@ -235,7 +329,7 @@ class U_COMMON_API StringPiece : public UMemory {
* Global operator == for StringPiece
* @param x The first StringPiece to compare.
* @param y The second StringPiece to compare.
- * @return TRUE if the string data is equal
+ * @return true if the string data is equal
* @stable ICU 4.8
*/
U_EXPORT UBool U_EXPORT2
@@ -245,7 +339,7 @@ operator==(const StringPiece& x, const StringPiece& y);
* Global operator != for StringPiece
* @param x The first StringPiece to compare.
* @param y The second StringPiece to compare.
- * @return TRUE if the string data is not equal
+ * @return true if the string data is not equal
* @stable ICU 4.8
*/
inline UBool operator!=(const StringPiece& x, const StringPiece& y) {
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
index 2c47dd415b1..fe471bbbf9c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
@@ -279,10 +279,10 @@ protected:
*/
class ValueNode : public Node {
public:
- ValueNode(int32_t initialHash) : Node(initialHash), hasValue(FALSE), value(0) {}
+ ValueNode(int32_t initialHash) : Node(initialHash), hasValue(false), value(0) {}
virtual UBool operator==(const Node &other) const;
void setValue(int32_t v) {
- hasValue=TRUE;
+ hasValue=true;
value=v;
hash=hash*37u+v;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h b/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
index f4875c8801e..63d0e45cb7f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
@@ -21,7 +21,10 @@
#include "unicode/utypes.h"
#include "unicode/uchar.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
*\file
@@ -496,7 +499,7 @@ typedef struct UBiDi UBiDi;
* @return An empty <code>UBiDi</code> object.
* @stable ICU 2.0
*/
-U_STABLE UBiDi * U_EXPORT2
+U_CAPI UBiDi * U_EXPORT2
ubidi_open(void);
/**
@@ -533,7 +536,7 @@ ubidi_open(void);
* @return An empty <code>UBiDi</code> object with preallocated memory.
* @stable ICU 2.0
*/
-U_STABLE UBiDi * U_EXPORT2
+U_CAPI UBiDi * U_EXPORT2
ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode);
/**
@@ -556,7 +559,7 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode);
* @see ubidi_setLine
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_close(UBiDi *pBiDi);
#if U_SHOW_CPLUSPLUS_API
@@ -594,7 +597,7 @@ U_NAMESPACE_END
* this "inverse Bidi" and that the current implementation provides only an
* approximation of "inverse Bidi".</p>
*
- * <p>With <code>isInverse</code> set to <code>TRUE</code>,
+ * <p>With <code>isInverse</code> set to <code>true</code>,
* this function changes the behavior of some of the subsequent functions
* in a way that they can be used for the inverse Bidi algorithm.
* Specifically, runs of text with numeric characters will be treated in a
@@ -607,12 +610,12 @@ U_NAMESPACE_END
* the runs of the logically ordered output.</p>
*
* <p>Calling this function with argument <code>isInverse</code> set to
- * <code>TRUE</code> is equivalent to calling
+ * <code>true</code> is equivalent to calling
* <code>ubidi_setReorderingMode</code> with argument
* <code>reorderingMode</code>
* set to <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
* Calling this function with argument <code>isInverse</code> set to
- * <code>FALSE</code> is equivalent to calling
+ * <code>false</code> is equivalent to calling
* <code>ubidi_setReorderingMode</code> with argument
* <code>reorderingMode</code>
* set to <code>#UBIDI_REORDER_DEFAULT</code>.
@@ -626,18 +629,18 @@ U_NAMESPACE_END
* @see ubidi_setReorderingMode
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
/**
* Is this Bidi object set to perform the inverse Bidi algorithm?
* <p>Note: calling this function after setting the reordering mode with
- * <code>ubidi_setReorderingMode</code> will return <code>TRUE</code> if the
+ * <code>ubidi_setReorderingMode</code> will return <code>true</code> if the
* reordering mode was set to <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code>,
- * <code>FALSE</code> for all other values.</p>
+ * <code>false</code> for all other values.</p>
*
* @param pBiDi is a <code>UBiDi</code> object.
- * @return TRUE if the Bidi object is set to perform the inverse Bidi algorithm
+ * @return true if the Bidi object is set to perform the inverse Bidi algorithm
* by handling numbers as L.
*
* @see ubidi_setInverse
@@ -645,7 +648,7 @@ ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ubidi_isInverse(UBiDi *pBiDi);
/**
@@ -668,7 +671,7 @@ ubidi_isInverse(UBiDi *pBiDi);
* @see ubidi_setPara
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
/**
@@ -676,13 +679,13 @@ ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
* successive paragraphs progress from left to right?
*
* @param pBiDi is a <code>UBiDi</code> object.
- * @return TRUE if the Bidi object is set to allocate level 0 to block
+ * @return true if the Bidi object is set to allocate level 0 to block
* separators.
*
* @see ubidi_orderParagraphsLTR
* @stable ICU 3.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ubidi_isOrderParagraphsLTR(UBiDi *pBiDi);
/**
@@ -714,7 +717,7 @@ typedef enum UBiDiReorderingMode {
* @stable ICU 3.6 */
UBIDI_REORDER_RUNS_ONLY,
/** Visual to Logical algorithm which handles numbers like L
- * (same algorithm as selected by <code>ubidi_setInverse(TRUE)</code>.
+ * (same algorithm as selected by <code>ubidi_setInverse(true)</code>.
* @see ubidi_setInverse
* @stable ICU 3.6 */
UBIDI_REORDER_INVERSE_NUMBERS_AS_L,
@@ -833,7 +836,7 @@ typedef enum UBiDiReorderingMode {
* reordered sequence (the option <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code> can
* be used with function <code>ubidi_writeReordered</code> to this end. This
* mode is equivalent to calling <code>ubidi_setInverse()</code> with
- * argument <code>isInverse</code> set to <code>TRUE</code>.</li>
+ * argument <code>isInverse</code> set to <code>true</code>.</li>
*
* <li>When the reordering mode is set to
* <code>#UBIDI_REORDER_INVERSE_LIKE_DIRECT</code>, the "direct" Logical to Visual
@@ -886,7 +889,7 @@ typedef enum UBiDiReorderingMode {
* @see ubidi_writeReordered
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode);
/**
@@ -897,7 +900,7 @@ ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode);
* @see ubidi_setReorderingMode
* @stable ICU 3.6
*/
-U_STABLE UBiDiReorderingMode U_EXPORT2
+U_CAPI UBiDiReorderingMode U_EXPORT2
ubidi_getReorderingMode(UBiDi *pBiDi);
/**
@@ -935,7 +938,7 @@ typedef enum UBiDiReorderingOption {
*
* <p>If this option is set in conjunction with reordering mode
* <code>#UBIDI_REORDER_INVERSE_NUMBERS_AS_L</code> or with calling
- * <code>ubidi_setInverse(TRUE)</code>, it implies
+ * <code>ubidi_setInverse(true)</code>, it implies
* option <code>#UBIDI_INSERT_LRM_FOR_NUMERIC</code>
* in calls to function <code>ubidi_writeReordered()</code>.</p>
*
@@ -1016,7 +1019,7 @@ typedef enum UBiDiReorderingOption {
*
* <p>When the <code>UBIDI_OPTION_STREAMING</code> option is used,
* it is recommended to call <code>ubidi_orderParagraphsLTR()</code> with
- * argument <code>orderParagraphsLTR</code> set to <code>TRUE</code> before
+ * argument <code>orderParagraphsLTR</code> set to <code>true</code> before
* calling <code>ubidi_setPara</code> so that later paragraphs may be
* concatenated to previous paragraphs on the right.</p>
*
@@ -1042,7 +1045,7 @@ typedef enum UBiDiReorderingOption {
* @see ubidi_getReorderingOptions
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
/**
@@ -1053,7 +1056,7 @@ ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
* @see ubidi_setReorderingOptions
* @stable ICU 3.6
*/
-U_STABLE uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
ubidi_getReorderingOptions(UBiDi *pBiDi);
/**
@@ -1140,7 +1143,7 @@ ubidi_getReorderingOptions(UBiDi *pBiDi);
* @see ubidi_setPara
* @stable ICU 4.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setContext(UBiDi *pBiDi,
const UChar *prologue, int32_t proLength,
const UChar *epilogue, int32_t epiLength,
@@ -1228,7 +1231,7 @@ ubidi_setContext(UBiDi *pBiDi,
* @param pErrorCode must be a valid pointer to an error code value.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
UErrorCode *pErrorCode);
@@ -1279,7 +1282,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
* @see ubidi_getProcessedLength
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setLine(const UBiDi *pParaBiDi,
int32_t start, int32_t limit,
UBiDi *pLineBiDi,
@@ -1300,7 +1303,7 @@ ubidi_setLine(const UBiDi *pParaBiDi,
* @see UBiDiDirection
* @stable ICU 2.0
*/
-U_STABLE UBiDiDirection U_EXPORT2
+U_CAPI UBiDiDirection U_EXPORT2
ubidi_getDirection(const UBiDi *pBiDi);
/**
@@ -1330,7 +1333,7 @@ ubidi_getDirection(const UBiDi *pBiDi);
* @see UBiDiDirection
* @stable ICU 4.6
*/
-U_STABLE UBiDiDirection U_EXPORT2
+U_CAPI UBiDiDirection U_EXPORT2
ubidi_getBaseDirection(const UChar *text, int32_t length );
/**
@@ -1344,7 +1347,7 @@ ubidi_getBaseDirection(const UChar *text, int32_t length );
* @see ubidi_setLine
* @stable ICU 2.0
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
ubidi_getText(const UBiDi *pBiDi);
/**
@@ -1355,7 +1358,7 @@ ubidi_getText(const UBiDi *pBiDi);
* @return The length of the text that the UBiDi object was created for.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_getLength(const UBiDi *pBiDi);
/**
@@ -1373,7 +1376,7 @@ ubidi_getLength(const UBiDi *pBiDi);
* @see ubidi_getParagraphByIndex
* @stable ICU 2.0
*/
-U_STABLE UBiDiLevel U_EXPORT2
+U_CAPI UBiDiLevel U_EXPORT2
ubidi_getParaLevel(const UBiDi *pBiDi);
/**
@@ -1384,7 +1387,7 @@ ubidi_getParaLevel(const UBiDi *pBiDi);
* @return The number of paragraphs.
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_countParagraphs(UBiDi *pBiDi);
/**
@@ -1421,7 +1424,7 @@ ubidi_countParagraphs(UBiDi *pBiDi);
* @see ubidi_getProcessedLength
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart,
int32_t *pParaLimit, UBiDiLevel *pParaLevel,
UErrorCode *pErrorCode);
@@ -1453,7 +1456,7 @@ ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart,
*
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
int32_t *pParaStart, int32_t *pParaLimit,
UBiDiLevel *pParaLevel, UErrorCode *pErrorCode);
@@ -1473,7 +1476,7 @@ ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
* @see ubidi_getProcessedLength
* @stable ICU 2.0
*/
-U_STABLE UBiDiLevel U_EXPORT2
+U_CAPI UBiDiLevel U_EXPORT2
ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex);
/**
@@ -1494,7 +1497,7 @@ ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex);
* @see ubidi_getProcessedLength
* @stable ICU 2.0
*/
-U_STABLE const UBiDiLevel * U_EXPORT2
+U_CAPI const UBiDiLevel * U_EXPORT2
ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
/**
@@ -1521,7 +1524,7 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
* @see ubidi_getProcessedLength
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
int32_t *pLogicalLimit, UBiDiLevel *pLevel);
@@ -1540,7 +1543,7 @@ ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
* @return The number of runs.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
/**
@@ -1599,7 +1602,7 @@ ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
* to avoid these issues.
* @stable ICU 2.0
*/
-U_STABLE UBiDiDirection U_EXPORT2
+U_CAPI UBiDiDirection U_EXPORT2
ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
int32_t *pLogicalStart, int32_t *pLength);
@@ -1640,7 +1643,7 @@ ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
* @see ubidi_getProcessedLength
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode);
/**
@@ -1675,7 +1678,7 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode)
* @see ubidi_getResultLength
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode);
/**
@@ -1718,7 +1721,7 @@ ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode)
* @see ubidi_getResultLength
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
/**
@@ -1754,7 +1757,7 @@ ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
* @see ubidi_getResultLength
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
/**
@@ -1777,7 +1780,7 @@ ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
* The index map will result in <code>indexMap[logicalIndex]==visualIndex</code>.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
/**
@@ -1800,7 +1803,7 @@ ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap
* The index map will result in <code>indexMap[visualIndex]==logicalIndex</code>.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
/**
@@ -1835,7 +1838,7 @@ ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
* @see UBIDI_MAP_NOWHERE
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
/** option flags for ubidi_writeReordered() */
@@ -1940,7 +1943,7 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
* @see UBIDI_OPTION_STREAMING
* @stable ICU 3.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_getProcessedLength(const UBiDi *pBiDi);
/**
@@ -1970,7 +1973,7 @@ ubidi_getProcessedLength(const UBiDi *pBiDi);
* @see UBIDI_OPTION_REMOVE_CONTROLS
* @stable ICU 3.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_getResultLength(const UBiDi *pBiDi);
U_CDECL_BEGIN
@@ -2028,7 +2031,7 @@ U_CDECL_END
* @see UBiDiClassCallback
* @stable ICU 3.6
*/
-U_STABLE UCharDirection U_EXPORT2
+U_CAPI UCharDirection U_EXPORT2
ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c);
/**
@@ -2058,7 +2061,7 @@ ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c);
* @see ubidi_getClassCallback
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
const void *newContext, UBiDiClassCallback **oldFn,
const void **oldContext, UErrorCode *pErrorCode);
@@ -2075,7 +2078,7 @@ ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
* @see ubidi_setClassCallback
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context);
/**
@@ -2143,7 +2146,7 @@ ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **conte
* @see ubidi_getProcessedLength
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_writeReordered(UBiDi *pBiDi,
UChar *dest, int32_t destSize,
uint16_t options,
@@ -2195,7 +2198,7 @@ ubidi_writeReordered(UBiDi *pBiDi,
* @return The length of the output string.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubidi_writeReverse(const UChar *src, int32_t srcLength,
UChar *dest, int32_t destSize,
uint16_t options,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h b/Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h
index 5c08ed5df0f..2dd7564010d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h
@@ -21,7 +21,10 @@
#include "unicode/utypes.h"
#include "unicode/ubidi.h"
#include "unicode/uchar.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -147,10 +150,10 @@ typedef struct UBiDiTransform UBiDiTransform;
* calling <code>ubidi_setPara</code> with
* <code>paraLevel == UBIDI_DEFAULT_RTL</code>,</li>
* <li><Visual LTR, Logical LTR>: this is equivalent to
- * calling <code>ubidi_setInverse(UBiDi*, TRUE)</code> and then
+ * calling <code>ubidi_setInverse(UBiDi*, true)</code> and then
* <code>ubidi_setPara</code> with <code>paraLevel == UBIDI_LTR</code>,</li>
* <li><Visual LTR, Logical RTL>: this is equivalent to
- * calling <code>ubidi_setInverse(UBiDi*, TRUE)</code> and then
+ * calling <code>ubidi_setInverse(UBiDi*, true)</code> and then
* <code>ubidi_setPara</code> with <code>paraLevel == UBIDI_RTL</code>.</li>
* </ul>
* All combinations that involve the Visual RTL scheme are unsupported by
@@ -245,7 +248,7 @@ typedef struct UBiDiTransform UBiDiTransform;
* @see u_shapeArabic
* @stable ICU 58
*/
-U_STABLE uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
ubiditransform_transform(UBiDiTransform *pBiDiTransform,
const UChar *src, int32_t srcLength,
UChar *dest, int32_t destSize,
@@ -291,14 +294,14 @@ ubiditransform_transform(UBiDiTransform *pBiDiTransform,
* @return An empty <code>UBiDiTransform</code> object.
* @stable ICU 58
*/
-U_STABLE UBiDiTransform* U_EXPORT2
+U_CAPI UBiDiTransform* U_EXPORT2
ubiditransform_open(UErrorCode *pErrorCode);
/**
* Deallocates the given <code>UBiDiTransform</code> object.
* @stable ICU 58
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubiditransform_close(UBiDiTransform *pBidiTransform);
#if U_SHOW_CPLUSPLUS_API
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h b/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
index 73c1553b243..37189a85984 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
@@ -13,7 +13,10 @@
#include "unicode/utypes.h"
#include "unicode/uloc.h"
#include "unicode/utext.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* A text-break iterator.
@@ -238,7 +241,7 @@ typedef enum USentenceBreakTag {
* @see ubrk_openRules
* @stable ICU 2.0
*/
-U_STABLE UBreakIterator* U_EXPORT2
+U_CAPI UBreakIterator* U_EXPORT2
ubrk_open(UBreakIteratorType type,
const char *locale,
const UChar *text,
@@ -260,7 +263,7 @@ ubrk_open(UBreakIteratorType type,
* @see ubrk_open
* @stable ICU 2.2
*/
-U_STABLE UBreakIterator* U_EXPORT2
+U_CAPI UBreakIterator* U_EXPORT2
ubrk_openRules(const UChar *rules,
int32_t rulesLength,
const UChar *text,
@@ -288,7 +291,7 @@ ubrk_openRules(const UChar *rules,
* @see ubrk_getBinaryRules
* @stable ICU 59
*/
-U_STABLE UBreakIterator* U_EXPORT2
+U_CAPI UBreakIterator* U_EXPORT2
ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength,
const UChar * text, int32_t textLength,
UErrorCode * status);
@@ -311,7 +314,7 @@ ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength,
* @return pointer to the new clone
* @stable ICU 2.0
*/
-U_STABLE UBreakIterator * U_EXPORT2
+U_CAPI UBreakIterator * U_EXPORT2
ubrk_safeClone(
const UBreakIterator *bi,
void *stackBuffer,
@@ -334,7 +337,7 @@ ubrk_safeClone(
* @param bi The break iterator to close.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubrk_close(UBreakIterator *bi);
#if U_SHOW_CPLUSPLUS_API
@@ -368,7 +371,7 @@ U_NAMESPACE_END
* @param status The error code
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubrk_setText(UBreakIterator* bi,
const UChar* text,
int32_t textLength,
@@ -392,7 +395,7 @@ ubrk_setText(UBreakIterator* bi,
* @param status The error code
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubrk_setUText(UBreakIterator* bi,
UText* text,
UErrorCode* status);
@@ -407,7 +410,7 @@ ubrk_setUText(UBreakIterator* bi,
* \ref ubrk_first, or \ref ubrk_last.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_current(const UBreakIterator *bi);
/**
@@ -419,7 +422,7 @@ ubrk_current(const UBreakIterator *bi);
* @see ubrk_previous
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_next(UBreakIterator *bi);
/**
@@ -431,7 +434,7 @@ ubrk_next(UBreakIterator *bi);
* @see ubrk_next
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_previous(UBreakIterator *bi);
/**
@@ -441,7 +444,7 @@ ubrk_previous(UBreakIterator *bi);
* @see ubrk_last
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_first(UBreakIterator *bi);
/**
@@ -453,7 +456,7 @@ ubrk_first(UBreakIterator *bi);
* @see ubrk_first
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_last(UBreakIterator *bi);
/**
@@ -465,7 +468,7 @@ ubrk_last(UBreakIterator *bi);
* @see ubrk_following
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_preceding(UBreakIterator *bi,
int32_t offset);
@@ -478,7 +481,7 @@ ubrk_preceding(UBreakIterator *bi,
* @see ubrk_preceding
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_following(UBreakIterator *bi,
int32_t offset);
@@ -491,7 +494,7 @@ ubrk_following(UBreakIterator *bi,
* @see ubrk_countAvailable
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ubrk_getAvailable(int32_t index);
/**
@@ -502,7 +505,7 @@ ubrk_getAvailable(int32_t index);
* @see ubrk_getAvailable
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_countAvailable(void);
@@ -515,7 +518,7 @@ ubrk_countAvailable(void);
* @return True if "offset" is a boundary position.
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ubrk_isBoundary(UBreakIterator *bi, int32_t offset);
/**
@@ -527,7 +530,7 @@ ubrk_isBoundary(UBreakIterator *bi, int32_t offset);
* For word break iterators, the possible values are defined in enum UWordBreak.
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_getRuleStatus(UBreakIterator *bi);
/**
@@ -547,7 +550,7 @@ ubrk_getRuleStatus(UBreakIterator *bi);
* the most recent boundary returned by the break iterator.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status);
/**
@@ -559,7 +562,7 @@ ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity,
* @return locale string
* @stable ICU 2.8
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCode* status);
/**
@@ -587,7 +590,7 @@ ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCo
*
* @stable ICU 49
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ubrk_refreshUText(UBreakIterator *bi,
UText *text,
UErrorCode *status);
@@ -618,7 +621,7 @@ ubrk_refreshUText(UBreakIterator *bi,
* @see ubrk_openBinaryRules
* @stable ICU 59
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ubrk_getBinaryRules(UBreakIterator *bi,
uint8_t * binaryRules, int32_t rulesCapacity,
UErrorCode * status);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h
index 6b253e3d638..d1c1b483ab3 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h
@@ -22,10 +22,13 @@
#define __UCASEMAP_H__
#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
#include "unicode/stringoptions.h"
#include "unicode/ustring.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: Unicode case mapping functions using a UCaseMap service object.
@@ -69,7 +72,7 @@ typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @stable IC
* @see U_TITLECASE_NO_BREAK_ADJUSTMENT
* @stable ICU 3.4
*/
-U_STABLE UCaseMap * U_EXPORT2
+U_CAPI UCaseMap * U_EXPORT2
ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode);
/**
@@ -77,7 +80,7 @@ ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode);
* @param csm Object to be closed.
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_close(UCaseMap *csm);
#if U_SHOW_CPLUSPLUS_API
@@ -105,7 +108,7 @@ U_NAMESPACE_END
* @return locale ID
* @stable ICU 3.4
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucasemap_getLocale(const UCaseMap *csm);
/**
@@ -114,7 +117,7 @@ ucasemap_getLocale(const UCaseMap *csm);
* @return options bit set
* @stable ICU 3.4
*/
-U_STABLE uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
ucasemap_getOptions(const UCaseMap *csm);
/**
@@ -128,7 +131,7 @@ ucasemap_getOptions(const UCaseMap *csm);
* @see ucasemap_open
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode);
/**
@@ -142,7 +145,7 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode);
* @see ucasemap_open
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode);
#if !UCONFIG_NO_BREAK_ITERATION
@@ -154,7 +157,7 @@ ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode);
* @return titlecasing break iterator
* @stable ICU 3.8
*/
-U_STABLE const UBreakIterator * U_EXPORT2
+U_CAPI const UBreakIterator * U_EXPORT2
ucasemap_getBreakIterator(const UCaseMap *csm);
/**
@@ -177,7 +180,7 @@ ucasemap_getBreakIterator(const UCaseMap *csm);
* @see ucasemap_utf8ToTitle
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode);
/**
@@ -226,7 +229,7 @@ ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode
* @see u_strToTitle
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_toTitle(UCaseMap *csm,
UChar *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
@@ -257,7 +260,7 @@ ucasemap_toTitle(UCaseMap *csm,
* @see u_strToLower
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_utf8ToLower(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -286,7 +289,7 @@ ucasemap_utf8ToLower(const UCaseMap *csm,
* @see u_strToUpper
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_utf8ToUpper(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -338,7 +341,7 @@ ucasemap_utf8ToUpper(const UCaseMap *csm,
* @see U_TITLECASE_NO_BREAK_ADJUSTMENT
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_utf8ToTitle(UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -376,7 +379,7 @@ ucasemap_utf8ToTitle(UCaseMap *csm,
* @see U_FOLD_CASE_EXCLUDE_SPECIAL_I
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucasemap_utf8FoldCase(const UCaseMap *csm,
char *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucat.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucat.h
index 4d1ff3f6b28..93850348fff 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucat.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucat.h
@@ -103,7 +103,7 @@ typedef UResourceBundle* u_nl_catd;
*
* @stable ICU 2.6
*/
-U_STABLE u_nl_catd U_EXPORT2
+U_CAPI u_nl_catd U_EXPORT2
u_catopen(const char* name, const char* locale, UErrorCode* ec);
/**
@@ -114,7 +114,7 @@ u_catopen(const char* name, const char* locale, UErrorCode* ec);
*
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_catclose(u_nl_catd catd);
/**
@@ -149,7 +149,7 @@ u_catclose(u_nl_catd catd);
*
* @stable ICU 2.6
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num,
const UChar* s,
int32_t* len, UErrorCode* ec);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h b/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
index 1b7ee099be7..1e0f82e706c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
@@ -60,7 +60,7 @@ U_CDECL_BEGIN
* @see u_getUnicodeVersion
* @stable ICU 2.0
*/
-#define U_UNICODE_VERSION "12.1"
+#define U_UNICODE_VERSION "13.0"
/**
* \file
@@ -80,7 +80,7 @@ U_CDECL_BEGIN
* and the ICU User Guide chapter on Properties (http://icu-project.org/userguide/properties.html).
*
* Many properties are accessible via generic functions that take a UProperty selector.
- * - u_hasBinaryProperty() returns a binary value (TRUE/FALSE) per property and code point.
+ * - u_hasBinaryProperty() returns a binary value (true/false) per property and code point.
* - u_getIntPropertyValue() returns an integer value per property and code point.
* For each supported enumerated or catalog property, there is
* an enum type for all of the property's values, and
@@ -1788,6 +1788,25 @@ enum UBlockCode {
/** @stable ICU 64 */
UBLOCK_WANCHO = 300, /*[1E2C0]*/
+ // New blocks in Unicode 13.0
+
+ /** @stable ICU 66 */
+ UBLOCK_CHORASMIAN = 301, /*[10FB0]*/
+ /** @stable ICU 66 */
+ UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G = 302, /*[30000]*/
+ /** @stable ICU 66 */
+ UBLOCK_DIVES_AKURU = 303, /*[11900]*/
+ /** @stable ICU 66 */
+ UBLOCK_KHITAN_SMALL_SCRIPT = 304, /*[18B00]*/
+ /** @stable ICU 66 */
+ UBLOCK_LISU_SUPPLEMENT = 305, /*[11FB0]*/
+ /** @stable ICU 66 */
+ UBLOCK_SYMBOLS_FOR_LEGACY_COMPUTING = 306, /*[1FB00]*/
+ /** @stable ICU 66 */
+ UBLOCK_TANGUT_SUPPLEMENT = 307, /*[18D00]*/
+ /** @stable ICU 66 */
+ UBLOCK_YEZIDI = 308, /*[10E80]*/
+
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal UBlockCode value.
@@ -1795,7 +1814,7 @@ enum UBlockCode {
*
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- UBLOCK_COUNT = 301,
+ UBLOCK_COUNT = 309,
#endif // U_HIDE_DEPRECATED_API
/** @stable ICU 2.0 */
@@ -2436,6 +2455,8 @@ typedef enum UIndicPositionalCategory {
U_INPC_TOP_AND_RIGHT,
/** @stable ICU 63 */
U_INPC_VISUAL_ORDER_LEFT,
+ /** @stable ICU 66 */
+ U_INPC_TOP_AND_BOTTOM_AND_LEFT,
} UIndicPositionalCategory;
/**
@@ -2565,8 +2586,8 @@ typedef enum UVerticalOrientation {
* @param c Code point to test.
* @param which UProperty selector constant, identifies which binary property to check.
* Must be UCHAR_BINARY_START<=which<UCHAR_BINARY_LIMIT.
- * @return TRUE or FALSE according to the binary Unicode property value for c.
- * Also FALSE if 'which' is out of bounds or if the Unicode version
+ * @return true or false according to the binary Unicode property value for c.
+ * Also false if 'which' is out of bounds or if the Unicode version
* does not have data for the property at all, or not for this code point.
*
* @see UProperty
@@ -2575,7 +2596,7 @@ typedef enum UVerticalOrientation {
* @see u_getUnicodeVersion
* @stable ICU 2.1
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_hasBinaryProperty(UChar32 c, UProperty which);
/**
@@ -2608,7 +2629,7 @@ u_getBinaryPropertySet(UProperty property, UErrorCode *pErrorCode);
* @see u_hasBinaryProperty
* @stable ICU 2.1
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isUAlphabetic(UChar32 c);
/**
@@ -2623,7 +2644,7 @@ u_isUAlphabetic(UChar32 c);
* @see u_hasBinaryProperty
* @stable ICU 2.1
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isULowercase(UChar32 c);
/**
@@ -2638,7 +2659,7 @@ u_isULowercase(UChar32 c);
* @see u_hasBinaryProperty
* @stable ICU 2.1
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isUUppercase(UChar32 c);
/**
@@ -2659,7 +2680,7 @@ u_isUUppercase(UChar32 c);
* @see u_hasBinaryProperty
* @stable ICU 2.1
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isUWhiteSpace(UChar32 c);
/**
@@ -2687,7 +2708,7 @@ u_isUWhiteSpace(UChar32 c);
* for enumerated properties, corresponds to the numeric value of the enumerated
* constant of the respective property value enumeration type
* (cast to enum type if necessary).
- * Returns 0 or 1 (for FALSE/TRUE) for binary Unicode properties.
+ * Returns 0 or 1 (for false/true) for binary Unicode properties.
* Returns a bit-mask for mask properties.
* Returns 0 if 'which' is out of bounds or if the Unicode version
* does not have data for the property at all, or not for this code point.
@@ -2700,7 +2721,7 @@ u_isUWhiteSpace(UChar32 c);
* @see u_getUnicodeVersion
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_getIntPropertyValue(UChar32 c, UProperty which);
/**
@@ -2721,7 +2742,7 @@ u_getIntPropertyValue(UChar32 c, UProperty which);
* @see u_getIntPropertyValue
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_getIntPropertyMinValue(UProperty which);
/**
@@ -2733,7 +2754,7 @@ u_getIntPropertyMinValue(UProperty which);
*
* - UCHAR_BIDI_CLASS: 0/18 (U_LEFT_TO_RIGHT/U_BOUNDARY_NEUTRAL)
* - UCHAR_SCRIPT: 0/45 (USCRIPT_COMMON/USCRIPT_TAGBANWA)
- * - UCHAR_IDEOGRAPHIC: 0/1 (FALSE/TRUE)
+ * - UCHAR_IDEOGRAPHIC: 0/1 (false/true)
*
* For undefined UProperty constant values, min/max values will be 0/-1.
*
@@ -2750,7 +2771,7 @@ u_getIntPropertyMinValue(UProperty which);
* @see u_getIntPropertyValue
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_getIntPropertyMaxValue(UProperty which);
/**
@@ -2793,7 +2814,7 @@ u_getIntPropertyMap(UProperty property, UErrorCode *pErrorCode);
* @see U_NO_NUMERIC_VALUE
* @stable ICU 2.2
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
u_getNumericValue(UChar32 c);
/**
@@ -2821,14 +2842,14 @@ u_getNumericValue(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is an Ll lowercase letter
+ * @return true if the code point is an Ll lowercase letter
*
* @see UCHAR_LOWERCASE
* @see u_isupper
* @see u_istitle
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_islower(UChar32 c);
/**
@@ -2847,7 +2868,7 @@ u_islower(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is an Lu uppercase letter
+ * @return true if the code point is an Lu uppercase letter
*
* @see UCHAR_UPPERCASE
* @see u_islower
@@ -2855,7 +2876,7 @@ u_islower(UChar32 c);
* @see u_tolower
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isupper(UChar32 c);
/**
@@ -2865,14 +2886,14 @@ u_isupper(UChar32 c);
* Same as java.lang.Character.isTitleCase().
*
* @param c the code point to be tested
- * @return TRUE if the code point is an Lt titlecase letter
+ * @return true if the code point is an Lt titlecase letter
*
* @see u_isupper
* @see u_islower
* @see u_totitle
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_istitle(UChar32 c);
/**
@@ -2889,11 +2910,11 @@ u_istitle(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a digit character according to Character.isDigit()
+ * @return true if the code point is a digit character according to Character.isDigit()
*
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isdigit(UChar32 c);
/**
@@ -2908,13 +2929,13 @@ u_isdigit(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a letter character
+ * @return true if the code point is a letter character
*
* @see u_isdigit
* @see u_isalnum
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isalpha(UChar32 c);
/**
@@ -2931,11 +2952,11 @@ u_isalpha(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is an alphanumeric character according to Character.isLetterOrDigit()
+ * @return true if the code point is an alphanumeric character according to Character.isLetterOrDigit()
*
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isalnum(UChar32 c);
/**
@@ -2954,11 +2975,11 @@ u_isalnum(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a hexadecimal digit
+ * @return true if the code point is a hexadecimal digit
*
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isxdigit(UChar32 c);
/**
@@ -2970,17 +2991,17 @@ u_isxdigit(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a punctuation character
+ * @return true if the code point is a punctuation character
*
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_ispunct(UChar32 c);
/**
* Determines whether the specified code point is a "graphic" character
* (printable, excluding spaces).
- * TRUE for all characters except those with general categories
+ * true for all characters except those with general categories
* "Cc" (control codes), "Cf" (format controls), "Cs" (surrogates),
* "Cn" (unassigned), and "Z" (separators).
*
@@ -2989,11 +3010,11 @@ u_ispunct(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a "graphic" character
+ * @return true if the code point is a "graphic" character
*
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isgraph(UChar32 c);
/**
@@ -3001,13 +3022,13 @@ u_isgraph(UChar32 c);
* a character that visibly separates words on a line.
* The following are equivalent definitions:
*
- * TRUE for Unicode White_Space characters except for "vertical space controls"
+ * true for Unicode White_Space characters except for "vertical space controls"
* where "vertical space controls" are the following characters:
* U+000A (LF) U+000B (VT) U+000C (FF) U+000D (CR) U+0085 (NEL) U+2028 (LS) U+2029 (PS)
*
* same as
*
- * TRUE for U+0009 (TAB) and characters with general category "Zs" (space separators).
+ * true for U+0009 (TAB) and characters with general category "Zs" (space separators).
*
* Note: There are several ICU whitespace functions; please see the uchar.h
* file documentation for a detailed comparison.
@@ -3017,11 +3038,11 @@ u_isgraph(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a "blank"
+ * @return true if the code point is a "blank"
*
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isblank(UChar32 c);
/**
@@ -3036,7 +3057,7 @@ u_isblank(UChar32 c);
* Same as java.lang.Character.isDefined().
*
* @param c the code point to be tested
- * @return TRUE if the code point is assigned a character
+ * @return true if the code point is assigned a character
*
* @see u_isdigit
* @see u_isalpha
@@ -3046,7 +3067,7 @@ u_isblank(UChar32 c);
* @see u_istitle
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isdefined(UChar32 c);
/**
@@ -3067,7 +3088,7 @@ u_isdefined(UChar32 c);
* @see u_isUWhiteSpace
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isspace(UChar32 c);
/**
@@ -3081,14 +3102,14 @@ u_isspace(UChar32 c);
* file documentation for a detailed comparison.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a space character according to Character.isSpaceChar()
+ * @return true if the code point is a space character according to Character.isSpaceChar()
*
* @see u_isspace
* @see u_isWhitespace
* @see u_isUWhiteSpace
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isJavaSpaceChar(UChar32 c);
/**
@@ -3121,14 +3142,14 @@ u_isJavaSpaceChar(UChar32 c);
* file documentation for a detailed comparison.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a whitespace character according to Java/ICU
+ * @return true if the code point is a whitespace character according to Java/ICU
*
* @see u_isspace
* @see u_isJavaSpaceChar
* @see u_isUWhiteSpace
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isWhitespace(UChar32 c);
/**
@@ -3146,13 +3167,13 @@ u_isWhitespace(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a control character
+ * @return true if the code point is a control character
*
* @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT
* @see u_isprint
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_iscntrl(UChar32 c);
/**
@@ -3162,12 +3183,12 @@ u_iscntrl(UChar32 c);
* Same as java.lang.Character.isISOControl().
*
* @param c the code point to be tested
- * @return TRUE if the code point is an ISO control code
+ * @return true if the code point is an ISO control code
*
* @see u_iscntrl
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isISOControl(UChar32 c);
/**
@@ -3179,13 +3200,13 @@ u_isISOControl(UChar32 c);
* documentation at the top of this header file.
*
* @param c the code point to be tested
- * @return TRUE if the code point is a printable character
+ * @return true if the code point is a printable character
*
* @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT
* @see u_iscntrl
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isprint(UChar32 c);
/**
@@ -3199,13 +3220,13 @@ u_isprint(UChar32 c);
* Letter (L), Number (N), Punctuation (P), Symbol (S), or Space Separator (Zs).
*
* @param c the code point to be tested
- * @return TRUE if the code point is a base character according to this function
+ * @return true if the code point is a base character according to this function
*
* @see u_isalpha
* @see u_isdigit
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isbase(UChar32 c);
/**
@@ -3224,7 +3245,7 @@ u_isbase(UChar32 c);
* @see UCharDirection
* @stable ICU 2.0
*/
-U_STABLE UCharDirection U_EXPORT2
+U_CAPI UCharDirection U_EXPORT2
u_charDirection(UChar32 c);
/**
@@ -3237,12 +3258,12 @@ u_charDirection(UChar32 c);
* Same as UCHAR_BIDI_MIRRORED
*
* @param c the code point to be tested
- * @return TRUE if the character has the Bidi_Mirrored property
+ * @return true if the character has the Bidi_Mirrored property
*
* @see UCHAR_BIDI_MIRRORED
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isMirrored(UChar32 c);
/**
@@ -3264,7 +3285,7 @@ u_isMirrored(UChar32 c);
* @see u_isMirrored
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_charMirror(UChar32 c);
/**
@@ -3283,7 +3304,7 @@ u_charMirror(UChar32 c);
* @see u_charMirror
* @stable ICU 52
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_getBidiPairedBracket(UChar32 c);
/**
@@ -3297,7 +3318,7 @@ u_getBidiPairedBracket(UChar32 c);
* @see UCharCategory
* @stable ICU 2.0
*/
-U_STABLE int8_t U_EXPORT2
+U_CAPI int8_t U_EXPORT2
u_charType(UChar32 c);
/**
@@ -3320,13 +3341,13 @@ u_charType(UChar32 c);
* of code points c (where start<=c<limit)
* with the same Unicode general category ("character type").
*
- * The callback function can stop the enumeration by returning FALSE.
+ * The callback function can stop the enumeration by returning false.
*
* @param context an opaque pointer, as passed into utrie_enum()
* @param start the first code point in a contiguous range with value
* @param limit one past the last code point in a contiguous range with value
* @param type the general category for all code points in [start..limit[
- * @return FALSE to stop the enumeration
+ * @return false to stop the enumeration
*
* @stable ICU 2.1
* @see UCharCategory
@@ -3354,7 +3375,7 @@ UCharEnumTypeRange(const void *context, UChar32 start, UChar32 limit, UCharCateg
* @see UCharCategory
* @see UCharEnumTypeRange
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context);
#if !UCONFIG_NO_NORMALIZATION
@@ -3366,7 +3387,7 @@ u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context);
* @return the combining class of the character
* @stable ICU 2.0
*/
-U_STABLE uint8_t U_EXPORT2
+U_CAPI uint8_t U_EXPORT2
u_getCombiningClass(UChar32 c);
#endif
@@ -3394,7 +3415,7 @@ u_getCombiningClass(UChar32 c);
* @see u_getNumericValue
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_charDigitValue(UChar32 c);
/**
@@ -3406,7 +3427,7 @@ u_charDigitValue(UChar32 c);
* @see UBlockCode
* @stable ICU 2.0
*/
-U_STABLE UBlockCode U_EXPORT2
+U_CAPI UBlockCode U_EXPORT2
ublock_getCode(UChar32 c);
/**
@@ -3441,7 +3462,7 @@ ublock_getCode(UChar32 c);
* @see u_enumCharNames
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_charName(UChar32 code, UCharNameChoice nameChoice,
char *buffer, int32_t bufferLength,
UErrorCode *pErrorCode);
@@ -3491,7 +3512,7 @@ u_getISOComment(UChar32 c,
* @see u_enumCharNames
* @stable ICU 1.7
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_charFromName(UCharNameChoice nameChoice,
const char *name,
UErrorCode *pErrorCode);
@@ -3500,14 +3521,14 @@ u_charFromName(UCharNameChoice nameChoice,
* Type of a callback function for u_enumCharNames() that gets called
* for each Unicode character with the code point value and
* the character name.
- * If such a function returns FALSE, then the enumeration is stopped.
+ * If such a function returns false, then the enumeration is stopped.
*
* @param context The context pointer that was passed to u_enumCharNames().
* @param code The Unicode code point for the character with this name.
* @param nameChoice Selector for which kind of names is enumerated.
* @param name The character's name, zero-terminated.
* @param length The length of the name.
- * @return TRUE if the enumeration should continue, FALSE to stop it.
+ * @return true if the enumeration should continue, false to stop it.
*
* @see UCharNameChoice
* @see u_enumCharNames
@@ -3540,7 +3561,7 @@ typedef UBool U_CALLCONV UEnumCharNamesFn(void *context,
* @see u_charFromName
* @stable ICU 1.7
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_enumCharNames(UChar32 start, UChar32 limit,
UEnumCharNamesFn *fn,
void *context,
@@ -3578,7 +3599,7 @@ u_enumCharNames(UChar32 start, UChar32 limit,
* @see UPropertyNameChoice
* @stable ICU 2.4
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
u_getPropertyName(UProperty property,
UPropertyNameChoice nameChoice);
@@ -3601,7 +3622,7 @@ u_getPropertyName(UProperty property,
* @see UProperty
* @stable ICU 2.4
*/
-U_STABLE UProperty U_EXPORT2
+U_CAPI UProperty U_EXPORT2
u_getPropertyEnum(const char* alias);
/**
@@ -3651,7 +3672,7 @@ u_getPropertyEnum(const char* alias);
* @see UPropertyNameChoice
* @stable ICU 2.4
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
u_getPropertyValueName(UProperty property,
int32_t value,
UPropertyNameChoice nameChoice);
@@ -3687,7 +3708,7 @@ u_getPropertyValueName(UProperty property,
* @see UProperty
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_getPropertyValueEnum(UProperty property,
const char* alias);
@@ -3701,14 +3722,14 @@ u_getPropertyValueEnum(UProperty property,
* Same as UCHAR_ID_START
*
* @param c the code point to be tested
- * @return TRUE if the code point may start an identifier
+ * @return true if the code point may start an identifier
*
* @see UCHAR_ID_START
* @see u_isalpha
* @see u_isIDPart
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isIDStart(UChar32 c);
/**
@@ -3725,14 +3746,14 @@ u_isIDStart(UChar32 c);
* u_isIDIgnorable(c).
*
* @param c the code point to be tested
- * @return TRUE if the code point may occur in an identifier according to Java
+ * @return true if the code point may occur in an identifier according to Java
*
* @see UCHAR_ID_CONTINUE
* @see u_isIDStart
* @see u_isIDIgnorable
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isIDPart(UChar32 c);
/**
@@ -3748,14 +3769,14 @@ u_isIDPart(UChar32 c);
* Note that Unicode just recommends to ignore Cf (format controls).
*
* @param c the code point to be tested
- * @return TRUE if the code point is ignorable in identifiers according to Java
+ * @return true if the code point is ignorable in identifiers according to Java
*
* @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT
* @see u_isIDStart
* @see u_isIDPart
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isIDIgnorable(UChar32 c);
/**
@@ -3767,14 +3788,14 @@ u_isIDIgnorable(UChar32 c);
* Same as java.lang.Character.isJavaIdentifierStart().
*
* @param c the code point to be tested
- * @return TRUE if the code point may start a Java identifier
+ * @return true if the code point may start a Java identifier
*
* @see u_isJavaIDPart
* @see u_isalpha
* @see u_isIDStart
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isJavaIDStart(UChar32 c);
/**
@@ -3786,7 +3807,7 @@ u_isJavaIDStart(UChar32 c);
* Same as java.lang.Character.isJavaIdentifierPart().
*
* @param c the code point to be tested
- * @return TRUE if the code point may occur in a Java identifier
+ * @return true if the code point may occur in a Java identifier
*
* @see u_isIDIgnorable
* @see u_isJavaIDStart
@@ -3795,7 +3816,7 @@ u_isJavaIDStart(UChar32 c);
* @see u_isIDPart
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_isJavaIDPart(UChar32 c);
/**
@@ -3820,7 +3841,7 @@ u_isJavaIDPart(UChar32 c);
* otherwise the code point itself.
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_tolower(UChar32 c);
/**
@@ -3845,7 +3866,7 @@ u_tolower(UChar32 c);
* otherwise the code point itself.
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_toupper(UChar32 c);
/**
@@ -3870,7 +3891,7 @@ u_toupper(UChar32 c);
* otherwise the code point itself.
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_totitle(UChar32 c);
/**
@@ -3895,7 +3916,7 @@ u_totitle(UChar32 c);
* otherwise the code point itself.
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_foldCase(UChar32 c, uint32_t options);
/**
@@ -3936,7 +3957,7 @@ u_foldCase(UChar32 c, uint32_t options);
* @see u_isdigit
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_digit(UChar32 ch, int8_t radix);
/**
@@ -3967,7 +3988,7 @@ u_digit(UChar32 ch, int8_t radix);
* @see u_isdigit
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_forDigit(int32_t digit, int8_t radix);
/**
@@ -3984,7 +4005,7 @@ u_forDigit(int32_t digit, int8_t radix);
*
* @stable ICU 2.1
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_charAge(UChar32 c, UVersionInfo versionArray);
/**
@@ -3998,7 +4019,7 @@ u_charAge(UChar32 c, UVersionInfo versionArray);
* the Unicode version number
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_getUnicodeVersion(UVersionInfo versionArray);
#if !UCONFIG_NO_NORMALIZATION
@@ -4023,7 +4044,7 @@ u_getUnicodeVersion(UVersionInfo versionArray);
*
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_getFC_NFKC_Closure(UChar32 c, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h
index d5729d944ee..b6f9e3e075c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h
@@ -97,14 +97,13 @@ public:
return *this;
}
-#ifndef U_HIDE_DRAFT_API
/**
* Returns the state of this trie as a 64-bit integer.
* The state value is never 0.
*
* @return opaque state value
* @see resetToState64
- * @draft ICU 65
+ * @stable ICU 65
*/
uint64_t getState64() const {
return (static_cast<uint64_t>(remainingMatchLength_ + 2) << kState64RemainingShift) |
@@ -123,14 +122,13 @@ public:
* @see getState64
* @see resetToState
* @see reset
- * @draft ICU 65
+ * @stable ICU 65
*/
UCharsTrie &resetToState64(uint64_t state) {
remainingMatchLength_ = static_cast<int32_t>(state >> kState64RemainingShift) - 2;
pos_ = uchars_ + (state & kState64PosMask);
return *this;
}
-#endif /* U_HIDE_DRAFT_API */
/**
* UCharsTrie state object, for saving a trie's current state
@@ -268,16 +266,16 @@ public:
/**
* Determines whether all strings reachable from the current state
* map to the same value.
- * @param uniqueValue Receives the unique value, if this function returns TRUE.
+ * @param uniqueValue Receives the unique value, if this function returns true.
* (output-only)
- * @return TRUE if all strings reachable from the current state
+ * @return true if all strings reachable from the current state
* map to the same value.
* @stable ICU 4.8
*/
inline UBool hasUniqueValue(int32_t &uniqueValue) const {
const char16_t *pos=pos_;
// Skip the rest of a pending linear-match node.
- return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue);
+ return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, false, uniqueValue);
}
/**
@@ -335,7 +333,7 @@ public:
Iterator &reset();
/**
- * @return TRUE if there are more elements.
+ * @return true if there are more elements.
* @stable ICU 4.8
*/
UBool hasNext() const;
@@ -351,7 +349,7 @@ public:
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if there is another element.
+ * @return true if there is another element.
* @stable ICU 4.8
*/
UBool next(UErrorCode &errorCode);
@@ -371,7 +369,7 @@ public:
UBool truncateAndStop() {
pos_=NULL;
value_=-1; // no real value for str
- return TRUE;
+ return true;
}
const char16_t *branchNext(const char16_t *pos, int32_t length, UErrorCode &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
index 540dcc047fd..15657702f9d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
@@ -101,9 +101,10 @@ public:
* Multiple calls to buildUnicodeString() set the UnicodeStrings to the
* builder's same char16_t array, without rebuilding.
* If buildUnicodeString() is called after build(), the trie will be
- * re-serialized into a new array.
- * If build() is called after buildUnicodeString(), the trie object will become
- * the owner of the previously returned array.
+ * re-serialized into a new array (because build() passes on ownership).
+ * If build() is called after buildUnicodeString(), the trie object returned
+ * by build() will become the owner of the underlying data for the
+ * previously returned UnicodeString.
* After clear() has been called, a new array will be used as well.
* @param buildOption Build option, see UStringTrieBuildOption.
* @param result A UnicodeString which will be set to the char16_t-serialized
@@ -147,7 +148,7 @@ private:
virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const;
virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const;
- virtual UBool matchNodesCanHaveValues() const { return TRUE; }
+ virtual UBool matchNodesCanHaveValues() const { return true; }
virtual int32_t getMaxBranchLinearSubNodeLength() const { return UCharsTrie::kMaxBranchLinearSubNodeLength; }
virtual int32_t getMinLinearMatch() const { return UCharsTrie::kMinLinearMatch; }
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h b/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
index a485259b808..f5083561a86 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
@@ -274,11 +274,11 @@ public:
virtual UChar32 next32PostInc(void);
/**
- * Returns FALSE if there are no more code units or code points
+ * Returns false if there are no more code units or code points
* at or after the current position in the iteration range.
* This is used with nextPostInc() or next32PostInc() in forward
* iteration.
- * @return FALSE if there are no more code units or code points
+ * @return false if there are no more code units or code points
* at or after the current position in the iteration range.
* @stable ICU 2.0
*/
@@ -303,11 +303,11 @@ public:
virtual UChar32 previous32(void);
/**
- * Returns FALSE if there are no more code units or code points
+ * Returns false if there are no more code units or code points
* before the current position in the iteration range.
* This is used with previous() or previous32() in backward
* iteration.
- * @return FALSE if there are no more code units or code points
+ * @return false if there are no more code units or code points
* before the current position in the iteration range.
* @stable ICU 2.0
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h b/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h
index 7cef6dba68b..c2d920a16ef 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h
@@ -49,7 +49,7 @@
*
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_init(UErrorCode *status);
#ifndef U_HIDE_SYSTEM_API
@@ -98,7 +98,7 @@ u_init(UErrorCode *status);
* @stable ICU 2.0
* @system
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_cleanup(void);
U_CDECL_BEGIN
@@ -148,7 +148,7 @@ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem);
* @stable ICU 2.8
* @system
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_setMemoryFunctions(const void *context, UMemAllocFn * U_CALLCONV_FPTR a, UMemReallocFn * U_CALLCONV_FPTR r, UMemFreeFn * U_CALLCONV_FPTR f,
UErrorCode *status);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
index ec7c5f350b4..58f271cfb5a 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
@@ -51,7 +51,10 @@
#include "unicode/ucnv_err.h"
#include "unicode/uenum.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
#if !defined(USET_DEFINED) && !defined(U_IN_DOXYGEN)
@@ -308,7 +311,7 @@ U_CDECL_END
* lexically follows name2.
* @stable ICU 2.0
*/
-U_STABLE int U_EXPORT2
+U_CAPI int U_EXPORT2
ucnv_compareNames(const char *name1, const char *name2);
@@ -362,7 +365,7 @@ ucnv_compareNames(const char *name1, const char *name2);
* @see ucnv_compareNames
* @stable ICU 2.0
*/
-U_STABLE UConverter* U_EXPORT2
+U_CAPI UConverter* U_EXPORT2
ucnv_open(const char *converterName, UErrorCode *err);
@@ -392,7 +395,7 @@ ucnv_open(const char *converterName, UErrorCode *err);
* @see ucnv_compareNames
* @stable ICU 2.0
*/
-U_STABLE UConverter* U_EXPORT2
+U_CAPI UConverter* U_EXPORT2
ucnv_openU(const UChar *name,
UErrorCode *err);
@@ -460,7 +463,7 @@ ucnv_openU(const UChar *name,
* @see UConverterPlatform
* @stable ICU 2.0
*/
-U_STABLE UConverter* U_EXPORT2
+U_CAPI UConverter* U_EXPORT2
ucnv_openCCSID(int32_t codepage,
UConverterPlatform platform,
UErrorCode * err);
@@ -476,7 +479,7 @@ ucnv_openCCSID(int32_t codepage,
* <p>The name will NOT be looked up in the alias mechanism, nor will the converter be
* stored in the converter cache or the alias table. The only way to open further converters
* is call this function multiple times, or use the ucnv_safeClone() function to clone a
- * 'master' converter.</p>
+ * 'primary' converter.</p>
*
* <p>A future version of ICU may add alias table lookups and/or caching
* to this function.</p>
@@ -495,7 +498,7 @@ ucnv_openCCSID(int32_t codepage,
* @see ucnv_close
* @stable ICU 2.2
*/
-U_STABLE UConverter* U_EXPORT2
+U_CAPI UConverter* U_EXPORT2
ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err);
/**
@@ -537,7 +540,7 @@ ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode
* @return pointer to the new clone
* @stable ICU 2.0
*/
-U_STABLE UConverter * U_EXPORT2
+U_CAPI UConverter * U_EXPORT2
ucnv_safeClone(const UConverter *cnv,
void *stackBuffer,
int32_t *pBufferSize,
@@ -566,7 +569,7 @@ ucnv_safeClone(const UConverter *cnv,
* @see ucnv_openCCSID
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_close(UConverter * converter);
#if U_SHOW_CPLUSPLUS_API
@@ -605,7 +608,7 @@ U_NAMESPACE_END
* @see ucnv_setSubstChars
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getSubstChars(const UConverter *converter,
char *subChars,
int8_t *len,
@@ -630,7 +633,7 @@ ucnv_getSubstChars(const UConverter *converter,
* @see ucnv_getSubstChars
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setSubstChars(UConverter *converter,
const char *subChars,
int8_t len,
@@ -663,7 +666,7 @@ ucnv_setSubstChars(UConverter *converter,
* @see ucnv_getSubstChars
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setSubstString(UConverter *cnv,
const UChar *s,
int32_t length,
@@ -682,7 +685,7 @@ ucnv_setSubstString(UConverter *cnv,
* <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT> will be returned.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getInvalidChars(const UConverter *converter,
char *errBytes,
int8_t *len,
@@ -701,7 +704,7 @@ ucnv_getInvalidChars(const UConverter *converter,
* <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT> will be returned.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getInvalidUChars(const UConverter *converter,
UChar *errUChars,
int8_t *len,
@@ -714,7 +717,7 @@ ucnv_getInvalidUChars(const UConverter *converter,
* @param converter the Unicode converter
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_reset(UConverter *converter);
/**
@@ -725,7 +728,7 @@ ucnv_reset(UConverter *converter);
* @param converter the Unicode converter
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_resetToUnicode(UConverter *converter);
/**
@@ -736,7 +739,7 @@ ucnv_resetToUnicode(UConverter *converter);
* @param converter the Unicode converter
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_resetFromUnicode(UConverter *converter);
/**
@@ -789,7 +792,7 @@ ucnv_resetFromUnicode(UConverter *converter);
* @see ucnv_getMinCharSize
* @stable ICU 2.0
*/
-U_STABLE int8_t U_EXPORT2
+U_CAPI int8_t U_EXPORT2
ucnv_getMaxCharSize(const UConverter *converter);
/**
@@ -822,7 +825,7 @@ ucnv_getMaxCharSize(const UConverter *converter);
* @see ucnv_getMaxCharSize
* @stable ICU 2.0
*/
-U_STABLE int8_t U_EXPORT2
+U_CAPI int8_t U_EXPORT2
ucnv_getMinCharSize(const UConverter *converter);
/**
@@ -839,7 +842,7 @@ ucnv_getMinCharSize(const UConverter *converter);
* @see ucnv_getName
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_getDisplayName(const UConverter *converter,
const char *displayLocale,
UChar *displayName,
@@ -856,7 +859,7 @@ ucnv_getDisplayName(const UConverter *converter,
* @see ucnv_getDisplayName
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucnv_getName(const UConverter *converter, UErrorCode *err);
/**
@@ -882,7 +885,7 @@ ucnv_getName(const UConverter *converter, UErrorCode *err);
* @see ucnv_getPlatform
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_getCCSID(const UConverter *converter,
UErrorCode *err);
@@ -896,7 +899,7 @@ ucnv_getCCSID(const UConverter *converter,
* @return The codepage platform
* @stable ICU 2.0
*/
-U_STABLE UConverterPlatform U_EXPORT2
+U_CAPI UConverterPlatform U_EXPORT2
ucnv_getPlatform(const UConverter *converter,
UErrorCode *err);
@@ -908,14 +911,14 @@ ucnv_getPlatform(const UConverter *converter,
* @return the type of the converter
* @stable ICU 2.0
*/
-U_STABLE UConverterType U_EXPORT2
+U_CAPI UConverterType U_EXPORT2
ucnv_getType(const UConverter * converter);
/**
* Gets the "starter" (lead) bytes for converters of type MBCS.
* Will fill in an <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> if converter passed in
* is not MBCS. Fills in an array of type UBool, with the value of the byte
- * as offset to the array. For example, if (starters[0x20] == TRUE) at return,
+ * as offset to the array. For example, if (starters[0x20] == true) at return,
* it means that the byte 0x20 is a starter byte in this converter.
* Context pointers are always owned by the caller.
*
@@ -926,7 +929,7 @@ ucnv_getType(const UConverter * converter);
* @see ucnv_getType
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getStarters(const UConverter* converter,
UBool starters[256],
UErrorCode* err);
@@ -997,7 +1000,7 @@ typedef enum UConverterUnicodeSet {
* @see uset_close
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getUnicodeSet(const UConverter *cnv,
USet *setFillIn,
UConverterUnicodeSet whichSet,
@@ -1014,7 +1017,7 @@ ucnv_getUnicodeSet(const UConverter *cnv,
* @see ucnv_setToUCallBack
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getToUCallBack (const UConverter * converter,
UConverterToUCallback *action,
const void **context);
@@ -1030,7 +1033,7 @@ ucnv_getToUCallBack (const UConverter * converter,
* @see ucnv_setFromUCallBack
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getFromUCallBack (const UConverter * converter,
UConverterFromUCallback *action,
const void **context);
@@ -1050,7 +1053,7 @@ ucnv_getFromUCallBack (const UConverter * converter,
* @see ucnv_getToUCallBack
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setToUCallBack (UConverter * converter,
UConverterToUCallback newAction,
const void* newContext,
@@ -1073,7 +1076,7 @@ ucnv_setToUCallBack (UConverter * converter,
* @see ucnv_getFromUCallBack
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setFromUCallBack (UConverter * converter,
UConverterFromUCallback newAction,
const void *newContext,
@@ -1100,7 +1103,7 @@ ucnv_setFromUCallBack (UConverter * converter,
* consumed. At that point, the caller should reset the source and
* sourceLimit pointers to point to the next chunk.
*
- * At the end of the stream (flush==TRUE), the input is completely consumed
+ * At the end of the stream (flush==true), the input is completely consumed
* when *source==sourceLimit and no error code is set.
* The converter object is then automatically reset by this function.
* (This means that a converter need not be reset explicitly between data
@@ -1125,9 +1128,9 @@ ucnv_setFromUCallBack (UConverter * converter,
* e.g: <TT>offsets[3]</TT> is equal to 6, it means that the <TT>target[3]</TT> was a result of transcoding <TT>source[6]</TT>
* For output data carried across calls, and other data without a specific source character
* (such as from escape sequences or callbacks) -1 will be placed for offsets.
- * @param flush set to <TT>TRUE</TT> if the current source buffer is the last available
- * chunk of the source, <TT>FALSE</TT> otherwise. Note that if a failing status is returned,
- * this function may have to be called multiple times with flush set to <TT>TRUE</TT> until
+ * @param flush set to <TT>true</TT> if the current source buffer is the last available
+ * chunk of the source, <TT>false</TT> otherwise. Note that if a failing status is returned,
+ * this function may have to be called multiple times with flush set to <TT>true</TT> until
* the source buffer is consumed.
* @param err the error status. <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> will be set if the
* converter is <TT>NULL</TT>.
@@ -1139,7 +1142,7 @@ ucnv_setFromUCallBack (UConverter * converter,
* @see ucnv_setToUCallBack
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_fromUnicode (UConverter * converter,
char **target,
const char *targetLimit,
@@ -1169,7 +1172,7 @@ ucnv_fromUnicode (UConverter * converter,
* consumed. At that point, the caller should reset the source and
* sourceLimit pointers to point to the next chunk.
*
- * At the end of the stream (flush==TRUE), the input is completely consumed
+ * At the end of the stream (flush==true), the input is completely consumed
* when *source==sourceLimit and no error code is set
* The converter object is then automatically reset by this function.
* (This means that a converter need not be reset explicitly between data
@@ -1193,9 +1196,9 @@ ucnv_fromUnicode (UConverter * converter,
* e.g: <TT>offsets[3]</TT> is equal to 6, it means that the <TT>target[3]</TT> was a result of transcoding <TT>source[6]</TT>
* For output data carried across calls, and other data without a specific source character
* (such as from escape sequences or callbacks) -1 will be placed for offsets.
- * @param flush set to <TT>TRUE</TT> if the current source buffer is the last available
- * chunk of the source, <TT>FALSE</TT> otherwise. Note that if a failing status is returned,
- * this function may have to be called multiple times with flush set to <TT>TRUE</TT> until
+ * @param flush set to <TT>true</TT> if the current source buffer is the last available
+ * chunk of the source, <TT>false</TT> otherwise. Note that if a failing status is returned,
+ * this function may have to be called multiple times with flush set to <TT>true</TT> until
* the source buffer is consumed.
* @param err the error status. <TT>U_ILLEGAL_ARGUMENT_ERROR</TT> will be set if the
* converter is <TT>NULL</TT>.
@@ -1208,7 +1211,7 @@ ucnv_fromUnicode (UConverter * converter,
* @see ucnv_getNextUChar
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_toUnicode(UConverter *converter,
UChar **target,
const UChar *targetLimit,
@@ -1245,7 +1248,7 @@ ucnv_toUnicode(UConverter *converter,
* @see UCNV_GET_MAX_BYTES_FOR_STRING
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_fromUChars(UConverter *cnv,
char *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
@@ -1277,7 +1280,7 @@ ucnv_fromUChars(UConverter *cnv,
* @see ucnv_convert
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_toUChars(UConverter *cnv,
UChar *dest, int32_t destCapacity,
const char *src, int32_t srcLength,
@@ -1295,7 +1298,7 @@ ucnv_toUChars(UConverter *cnv,
* - Convenient.
*
* Limitations compared to ucnv_toUnicode():
- * - Always assumes flush=TRUE.
+ * - Always assumes flush=true.
* This makes ucnv_getNextUChar() unsuitable for "streaming" conversion,
* that is, for where the input is supplied in multiple buffers,
* because ucnv_getNextUChar() will assume the end of the input at the end
@@ -1306,7 +1309,7 @@ ucnv_toUChars(UConverter *cnv,
* ucnv_getNextUChar() uses the current state of the converter
* (unlike ucnv_toUChars() which always resets first).
* However, if ucnv_getNextUChar() is called after ucnv_toUnicode()
- * stopped in the middle of a character sequence (with flush=FALSE),
+ * stopped in the middle of a character sequence (with flush=false),
* then ucnv_getNextUChar() will always use the slower ucnv_toUnicode()
* internally until the next character boundary.
* (This is new in ICU 2.6. In earlier releases, ucnv_getNextUChar() had to
@@ -1353,7 +1356,7 @@ ucnv_toUChars(UConverter *cnv,
* @see ucnv_convert
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
ucnv_getNextUChar(UConverter * converter,
const char **source,
const char * sourceLimit,
@@ -1385,7 +1388,7 @@ ucnv_getNextUChar(UConverter * converter,
*
* ucnv_convertEx() also provides further convenience:
* - an option to reset the converters at the beginning
- * (if reset==TRUE, see parameters;
+ * (if reset==true, see parameters;
* also sets *pivotTarget=*pivotSource=pivotStart)
* - allow NUL-terminated input
* (only a single NUL byte, will not work for charsets with multi-byte NULs)
@@ -1442,7 +1445,7 @@ ucnv_getNextUChar(UConverter * converter,
* &target, u8+capacity,
* &s, s+length,
* NULL, NULL, NULL, NULL,
- * TRUE, TRUE,
+ * true, true,
* pErrorCode);
*
* myReleaseCachedUTF8Converter(utf8Cnv);
@@ -1474,7 +1477,7 @@ ucnv_getNextUChar(UConverter * converter,
* It must be pivotStart<=*pivotSource<=*pivotTarget<=pivotLimit
* and pivotStart<pivotLimit (unless pivotStart==NULL).
* @param pivotLimit Pointer to the first unit after the pivot buffer.
- * @param reset If TRUE, then ucnv_resetToUnicode(sourceCnv) and
+ * @param reset If true, then ucnv_resetToUnicode(sourceCnv) and
* ucnv_resetFromUnicode(targetCnv) are called, and the
* pivot pointers are reset (*pivotTarget=*pivotSource=pivotStart).
* @param flush If true, indicates the end of the input.
@@ -1497,7 +1500,7 @@ ucnv_getNextUChar(UConverter * converter,
* @see ucnv_toUChars
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
char **target, const char *targetLimit,
const char **source, const char *sourceLimit,
@@ -1561,7 +1564,7 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv,
* @see ucnv_getNextUChar
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_convert(const char *toConverterName,
const char *fromConverterName,
char *target,
@@ -1615,7 +1618,7 @@ ucnv_convert(const char *toConverterName,
* @see ucnv_toUChars
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_toAlgorithmic(UConverterType algorithmicType,
UConverter *cnv,
char *target, int32_t targetCapacity,
@@ -1667,7 +1670,7 @@ ucnv_toAlgorithmic(UConverterType algorithmicType,
* @see ucnv_toUChars
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_fromAlgorithmic(UConverter *cnv,
UConverterType algorithmicType,
char *target, int32_t targetCapacity,
@@ -1681,7 +1684,7 @@ ucnv_fromAlgorithmic(UConverter *cnv,
* @see ucnv_close
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_flushCache(void);
/**
@@ -1691,7 +1694,7 @@ ucnv_flushCache(void);
* @see ucnv_getAvailableName
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_countAvailable(void);
/**
@@ -1704,7 +1707,7 @@ ucnv_countAvailable(void);
* @see ucnv_countAvailable
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ucnv_getAvailableName(int32_t n);
/**
@@ -1719,7 +1722,7 @@ ucnv_getAvailableName(int32_t n);
* @see uenum_next
* @stable ICU 2.4
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucnv_openAllNames(UErrorCode *pErrorCode);
/**
@@ -1732,7 +1735,7 @@ ucnv_openAllNames(UErrorCode *pErrorCode);
* @return number of names on alias list for given alias
* @stable ICU 2.0
*/
-U_STABLE uint16_t U_EXPORT2
+U_CAPI uint16_t U_EXPORT2
ucnv_countAliases(const char *alias, UErrorCode *pErrorCode);
/**
@@ -1747,7 +1750,7 @@ ucnv_countAliases(const char *alias, UErrorCode *pErrorCode);
* @see ucnv_countAliases
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode);
/**
@@ -1763,7 +1766,7 @@ ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode);
* @param pErrorCode result of operation
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode);
/**
@@ -1789,7 +1792,7 @@ ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode)
* @see uenum_next
* @stable ICU 2.2
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucnv_openStandardNames(const char *convName,
const char *standard,
UErrorCode *pErrorCode);
@@ -1799,7 +1802,7 @@ ucnv_openStandardNames(const char *convName,
* @return number of standards
* @stable ICU 2.0
*/
-U_STABLE uint16_t U_EXPORT2
+U_CAPI uint16_t U_EXPORT2
ucnv_countStandards(void);
/**
@@ -1809,7 +1812,7 @@ ucnv_countStandards(void);
* @return returns the name of the standard at given index. Owned by the library.
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucnv_getStandard(uint16_t n, UErrorCode *pErrorCode);
/**
@@ -1831,7 +1834,7 @@ ucnv_getStandard(uint16_t n, UErrorCode *pErrorCode);
* then <code>NULL</code> is returned. Owned by the library.
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorCode);
/**
@@ -1853,7 +1856,7 @@ ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorC
* @see ucnv_getStandardName
* @stable ICU 2.4
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode);
/**
@@ -1870,7 +1873,7 @@ ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErro
* @see ucnv_setDefaultName
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucnv_getDefaultName(void);
#ifndef U_HIDE_SYSTEM_API
@@ -1890,7 +1893,7 @@ ucnv_getDefaultName(void);
* @system
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setDefaultName(const char *name);
#endif /* U_HIDE_SYSTEM_API */
@@ -1911,18 +1914,18 @@ ucnv_setDefaultName(const char *name);
* @see ucnv_isAmbiguous
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_fixFileSeparator(const UConverter *cnv, UChar *source, int32_t sourceLen);
/**
* Determines if the converter contains ambiguous mappings of the same
* character or not.
* @param cnv the converter to be tested
- * @return TRUE if the converter contains ambiguous mapping of the same
- * character, FALSE otherwise.
+ * @return true if the converter contains ambiguous mapping of the same
+ * character, false otherwise.
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucnv_isAmbiguous(const UConverter *cnv);
/**
@@ -1935,12 +1938,12 @@ ucnv_isAmbiguous(const UConverter *cnv);
* http://www.icu-project.org/userguide/conversion-data.html#ucmformat
*
* @param cnv The converter to set the fallback mapping usage on.
- * @param usesFallback TRUE if the user wants the converter to take advantage of the fallback
- * mapping, FALSE otherwise.
+ * @param usesFallback true if the user wants the converter to take advantage of the fallback
+ * mapping, false otherwise.
* @stable ICU 2.0
* @see ucnv_usesFallback
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_setFallback(UConverter *cnv, UBool usesFallback);
/**
@@ -1948,11 +1951,11 @@ ucnv_setFallback(UConverter *cnv, UBool usesFallback);
* This flag has restrictions, see ucnv_setFallback().
*
* @param cnv The converter to be tested
- * @return TRUE if the converter uses fallback, FALSE otherwise.
+ * @return true if the converter uses fallback, false otherwise.
* @stable ICU 2.0
* @see ucnv_setFallback
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucnv_usesFallback(const UConverter *cnv);
/**
@@ -1984,7 +1987,7 @@ ucnv_usesFallback(const UConverter *cnv);
* @return The name of the encoding detected. NULL if encoding is not detected.
* @stable ICU 2.4
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ucnv_detectUnicodeSignature(const char* source,
int32_t sourceLength,
int32_t *signatureLength,
@@ -2001,7 +2004,7 @@ ucnv_detectUnicodeSignature(const char* source,
* @return The number of UChars in the state. -1 if an error is encountered.
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status);
/**
@@ -2015,7 +2018,7 @@ ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status);
* @return The number of chars in the state. -1 if an error is encountered.
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status);
/**
@@ -2027,13 +2030,13 @@ ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status);
* but a UTF-32 converter encodes each code point with 4 bytes.
* Note: This method is not intended to be used to determine whether the charset has a
* fixed ratio of bytes to Unicode codes <i>units</i> for any particular Unicode encoding form.
- * FALSE is returned with the UErrorCode if error occurs or cnv is NULL.
+ * false is returned with the UErrorCode if error occurs or cnv is NULL.
* @param cnv The converter to be tested
* @param status ICU error code in/out paramter
- * @return TRUE if the converter is fixed-width
+ * @return true if the converter is fixed-width
* @stable ICU 4.8
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucnv_isFixedWidth(UConverter *cnv, UErrorCode *status);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h
index 14169ed61c1..41845d1bcae 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h
@@ -84,7 +84,7 @@
* @see ucnv_cbFromUWriteSub
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args,
const char* source,
int32_t length,
@@ -104,7 +104,7 @@ ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args,
* @see ucnv_cbFromUWriteBytes
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args,
int32_t offsetIndex,
UErrorCode * err);
@@ -121,7 +121,7 @@ ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args,
* @see ucnv_cbToUWriteSub
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args,
+U_CAPI void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args,
const UChar** source,
const UChar* sourceLimit,
int32_t offsetIndex,
@@ -140,7 +140,7 @@ U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args,
* @see ucnv_cbToUWriteSub
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args,
+U_CAPI void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args,
const UChar* source,
int32_t length,
int32_t offsetIndex,
@@ -156,7 +156,7 @@ U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args,
* @see ucnv_cbToUWriteUChars
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args,
+U_CAPI void U_EXPORT2 ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args,
int32_t offsetIndex,
UErrorCode * err);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
index d234710a8b1..7209ba5f7b8 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
@@ -193,7 +193,7 @@ typedef enum {
*/
typedef struct {
uint16_t size; /**< The size of this struct. @stable ICU 2.0 */
- UBool flush; /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0 */
+ UBool flush; /**< The internal state of converter will be reset and data flushed if set to true. @stable ICU 2.0 */
UConverter *converter; /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */
const UChar *source; /**< Pointer to the source source buffer. @stable ICU 2.0 */
const UChar *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */
@@ -209,7 +209,7 @@ typedef struct {
*/
typedef struct {
uint16_t size; /**< The size of this struct @stable ICU 2.0 */
- UBool flush; /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0 */
+ UBool flush; /**< The internal state of converter will be reset and data flushed if set to true. @stable ICU 2.0 */
UConverter *converter; /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */
const char *source; /**< Pointer to the source source buffer. @stable ICU 2.0 */
const char *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */
@@ -233,7 +233,7 @@ typedef struct {
* @param err This should always be set to a failure status prior to calling.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP (
+U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP (
const void *context,
UConverterFromUnicodeArgs *fromUArgs,
const UChar* codeUnits,
@@ -257,7 +257,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP (
* @param err This should always be set to a failure status prior to calling.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP (
+U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP (
const void *context,
UConverterToUnicodeArgs *toUArgs,
const char* codeUnits,
@@ -284,7 +284,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP (
* otherwise this value will be set to a failure status.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP (
+U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP (
const void *context,
UConverterFromUnicodeArgs *fromUArgs,
const UChar* codeUnits,
@@ -314,7 +314,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP (
* @see ucnv_setSubstChars
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
+U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
const void *context,
UConverterFromUnicodeArgs *fromUArgs,
const UChar* codeUnits,
@@ -370,7 +370,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
* otherwise this value will be set to a failure status.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE (
+U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE (
const void *context,
UConverterFromUnicodeArgs *fromUArgs,
const UChar* codeUnits,
@@ -398,7 +398,7 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE (
* otherwise this value will be set to a failure status.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP (
+U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP (
const void *context,
UConverterToUnicodeArgs *toUArgs,
const char* codeUnits,
@@ -424,7 +424,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP (
* otherwise this value will be set to a failure status.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE (
+U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE (
const void *context,
UConverterToUnicodeArgs *toUArgs,
const char* codeUnits,
@@ -450,7 +450,7 @@ U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE (
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE (
+U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE (
const void *context,
UConverterToUnicodeArgs *toUArgs,
const char* codeUnits,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
index d423845ceb6..5e0a71cf351 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
@@ -29,7 +29,10 @@
#include "unicode/utf16.h"
#include "unicode/uenum.h"
#include "unicode/ucnv.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -72,7 +75,7 @@ typedef struct UConverterSelector UConverterSelector;
*
* @stable ICU 4.2
*/
-U_STABLE UConverterSelector* U_EXPORT2
+U_CAPI UConverterSelector* U_EXPORT2
ucnvsel_open(const char* const* converterList, int32_t converterListSize,
const USet* excludedCodePoints,
const UConverterUnicodeSet whichSet, UErrorCode* status);
@@ -90,7 +93,7 @@ ucnvsel_open(const char* const* converterList, int32_t converterListSize,
*
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucnvsel_close(UConverterSelector *sel);
#if U_SHOW_CPLUSPLUS_API
@@ -127,7 +130,7 @@ U_NAMESPACE_END
*
* @stable ICU 4.2
*/
-U_STABLE UConverterSelector* U_EXPORT2
+U_CAPI UConverterSelector* U_EXPORT2
ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* status);
/**
@@ -144,7 +147,7 @@ ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* statu
*
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucnvsel_serialize(const UConverterSelector* sel,
void* buffer, int32_t bufferCapacity, UErrorCode* status);
@@ -162,7 +165,7 @@ ucnvsel_serialize(const UConverterSelector* sel,
*
* @stable ICU 4.2
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucnvsel_selectForString(const UConverterSelector* sel,
const UChar *s, int32_t length, UErrorCode *status);
@@ -180,7 +183,7 @@ ucnvsel_selectForString(const UConverterSelector* sel,
*
* @stable ICU 4.2
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucnvsel_selectForUTF8(const UConverterSelector* sel,
const char *s, int32_t length, UErrorCode *status);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h
index be06a227928..b95491b183e 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h
@@ -8,11 +8,13 @@
#define __UCPTRIE_H__
#include "unicode/utypes.h"
-
-#include "unicode/localpointer.h"
#include "unicode/ucpmap.h"
#include "unicode/utf8.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
U_CDECL_BEGIN
/**
@@ -580,11 +582,11 @@ enum {
// Do not conditionalize with #ifndef U_HIDE_INTERNAL_API, needed for public API
/** @internal */
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucptrie_internalSmallIndex(const UCPTrie *trie, UChar32 c);
/** @internal */
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucptrie_internalSmallU8Index(const UCPTrie *trie, int32_t lt1, uint8_t t2, uint8_t t3);
/**
@@ -592,7 +594,7 @@ ucptrie_internalSmallU8Index(const UCPTrie *trie, int32_t lt1, uint8_t t2, uint8
* Do not call directly.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucptrie_internalU8PrevIndex(const UCPTrie *trie, UChar32 c,
const uint8_t *start, const uint8_t *src);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
index f91cc0df7c6..35c2a393897 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
@@ -78,7 +78,7 @@ typedef enum UCurrencyUsage UCurrencyUsage;
* invalid.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_forLocale(const char* locale,
UChar* buff,
int32_t buffCapacity,
@@ -113,7 +113,29 @@ typedef enum UCurrNameStyle {
*
* @stable ICU 61
*/
- UCURR_NARROW_SYMBOL_NAME
+ UCURR_NARROW_SYMBOL_NAME,
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Selector for getName() indicating the formal currency symbol.
+ * The formal currency symbol is similar to the regular currency
+ * symbol, but it always takes the form used in formal settings
+ * such as banking; for example, "NT$" instead of "$" for TWD in zh-TW.
+ *
+ * @draft ICU 68
+ */
+ UCURR_FORMAL_SYMBOL_NAME,
+
+ /**
+ * Selector for getName() indicating the variant currency symbol.
+ * The variant symbol for a currency is an alternative symbol
+ * that is not necessarily as widely used as the regular symbol.
+ *
+ * @draft ICU 68
+ */
+ UCURR_VARIANT_SYMBOL_NAME
+#endif // U_HIDE_DRAFT_API
+
} UCurrNameStyle;
#if !UCONFIG_NO_SERVICE
@@ -133,7 +155,7 @@ typedef const void* UCurrRegistryKey;
* if there was an error.
* @stable ICU 2.6
*/
-U_STABLE UCurrRegistryKey U_EXPORT2
+U_CAPI UCurrRegistryKey U_EXPORT2
ucurr_register(const UChar* isoCode,
const char* locale,
UErrorCode* status);
@@ -145,10 +167,10 @@ ucurr_register(const UChar* isoCode,
* restored.
* @param key the registry key returned by a previous call to ucurr_register
* @param status the in/out status code, no special meanings are assigned
- * @return TRUE if the currency for this key was successfully unregistered
+ * @return true if the currency for this key was successfully unregistered
* @stable ICU 2.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucurr_unregister(UCurrRegistryKey key, UErrorCode* status);
#endif /* UCONFIG_NO_SERVICE */
@@ -159,7 +181,7 @@ ucurr_unregister(UCurrRegistryKey key, UErrorCode* status);
* @param currency null-terminated 3-letter ISO 4217 code
* @param locale locale in which to display currency
* @param nameStyle selector for which kind of name to return
- * @param isChoiceFormat always set to FALSE, or can be NULL;
+ * @param isChoiceFormat always set to false, or can be NULL;
* display names are static strings;
* since ICU 4.4, ChoiceFormat patterns are no longer supported
* @param len fill-in parameter to receive length of result
@@ -169,7 +191,7 @@ ucurr_unregister(UCurrRegistryKey key, UErrorCode* status);
* returned.
* @stable ICU 2.6
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ucurr_getName(const UChar* currency,
const char* locale,
UCurrNameStyle nameStyle,
@@ -183,7 +205,7 @@ ucurr_getName(const UChar* currency,
* currency object in the en_US locale is "US dollar" or "US dollars".
* @param currency null-terminated 3-letter ISO 4217 code
* @param locale locale in which to display currency
- * @param isChoiceFormat always set to FALSE, or can be NULL;
+ * @param isChoiceFormat always set to false, or can be NULL;
* display names are static strings;
* since ICU 4.4, ChoiceFormat patterns are no longer supported
* @param pluralCount plural count
@@ -194,7 +216,7 @@ ucurr_getName(const UChar* currency,
* returned.
* @stable ICU 4.2
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ucurr_getPluralName(const UChar* currency,
const char* locale,
UBool* isChoiceFormat,
@@ -219,7 +241,7 @@ ucurr_getPluralName(const UChar* currency,
* displayed, or 0 if there is an error
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_getDefaultFractionDigits(const UChar* currency,
UErrorCode* ec);
@@ -240,7 +262,7 @@ ucurr_getDefaultFractionDigits(const UChar* currency,
* displayed, or 0 if there is an error
* @stable ICU 54
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_getDefaultFractionDigitsForUsage(const UChar* currency,
const UCurrencyUsage usage,
UErrorCode* ec);
@@ -255,7 +277,7 @@ ucurr_getDefaultFractionDigitsForUsage(const UChar* currency,
* or 0.0 if there is an error
* @stable ICU 3.0
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
ucurr_getRoundingIncrement(const UChar* currency,
UErrorCode* ec);
@@ -269,7 +291,7 @@ ucurr_getRoundingIncrement(const UChar* currency,
* or 0.0 if there is an error
* @stable ICU 54
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
ucurr_getRoundingIncrementForUsage(const UChar* currency,
const UCurrencyUsage usage,
UErrorCode* ec);
@@ -326,7 +348,7 @@ typedef enum UCurrCurrencyType {
* @param pErrorCode Error code
* @stable ICU 3.2
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode);
/**
@@ -351,11 +373,11 @@ ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode);
* @param errorCode
* ICU error code
*
- * @return TRUE if the given ISO 4217 3-letter code is supported on the specified date range.
+ * @return true if the given ISO 4217 3-letter code is supported on the specified date range.
*
* @stable ICU 4.8
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucurr_isAvailable(const UChar* isoCode,
UDate from,
UDate to,
@@ -375,7 +397,7 @@ ucurr_isAvailable(const UChar* isoCode,
* values are invalid.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_countCurrencies(const char* locale,
UDate date,
UErrorCode* ec);
@@ -399,7 +421,7 @@ ucurr_countCurrencies(const char* locale,
* invalid.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_forLocaleAndDate(const char* locale,
UDate date,
int32_t index,
@@ -423,7 +445,7 @@ ucurr_forLocaleAndDate(const char* locale,
* @return a string enumeration over keyword values for the given key and the locale.
* @stable ICU 4.2
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucurr_getKeywordValuesForLocale(const char* key,
const char* locale,
UBool commonlyUsed,
@@ -438,7 +460,7 @@ ucurr_getKeywordValuesForLocale(const char* key,
* @return The ISO 4217 numeric code of the currency
* @stable ICU 49
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucurr_getNumericCode(const UChar* currency);
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/udata.h b/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
index 325ffcf17db..6caa849c42f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
@@ -20,7 +20,10 @@
#define __UDATA_H__
#include "unicode/utypes.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
U_CDECL_BEGIN
@@ -166,8 +169,8 @@ typedef struct UDataMemory UDataMemory;
* @param pInfo A pointer to the <code>UDataInfo</code> structure
* of data that has been loaded and will be returned
* by <code>udata_openChoice()</code> if this function
- * returns <code>TRUE</code>.
- * @return TRUE if the current data memory is acceptable
+ * returns <code>true</code>.
+ * @return true if the current data memory is acceptable
* @stable ICU 2.0
*/
typedef UBool U_CALLCONV
@@ -197,7 +200,7 @@ UDataMemoryIsAcceptable(void *context,
* @see udata_openChoice
* @stable ICU 2.0
*/
-U_STABLE UDataMemory * U_EXPORT2
+U_CAPI UDataMemory * U_EXPORT2
udata_open(const char *path, const char *type, const char *name,
UErrorCode *pErrorCode);
@@ -239,7 +242,7 @@ udata_open(const char *path, const char *type, const char *name,
* This may be <code>NULL</code> or empty.
* @param name A string that specifies the name of the data.
* @param isAcceptable This function is called to verify that loaded data
- * is useful for the client code. If it returns FALSE
+ * is useful for the client code. If it returns false
* for all data items, then <code>udata_openChoice()</code>
* will return with an error.
* @param context Arbitrary parameter to be passed into isAcceptable.
@@ -249,7 +252,7 @@ udata_open(const char *path, const char *type, const char *name,
* to get a pointer to the actual data.
* @stable ICU 2.0
*/
-U_STABLE UDataMemory * U_EXPORT2
+U_CAPI UDataMemory * U_EXPORT2
udata_openChoice(const char *path, const char *type, const char *name,
UDataMemoryIsAcceptable *isAcceptable, void *context,
UErrorCode *pErrorCode);
@@ -261,7 +264,7 @@ udata_openChoice(const char *path, const char *type, const char *name,
* @param pData The pointer to data memory object
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udata_close(UDataMemory *pData);
/**
@@ -273,7 +276,7 @@ udata_close(UDataMemory *pData);
* @param pData The pointer to data memory object
* @stable ICU 2.0
*/
-U_STABLE const void * U_EXPORT2
+U_CAPI const void * U_EXPORT2
udata_getMemory(UDataMemory *pData);
/**
@@ -294,7 +297,7 @@ udata_getMemory(UDataMemory *pData);
* adjusted and only part of the structure will be filled.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udata_getInfo(UDataMemory *pData, UDataInfo *pInfo);
/**
@@ -303,7 +306,7 @@ udata_getInfo(UDataMemory *pData, UDataInfo *pInfo);
* area in memory.
*
* ICU data must be at least 8-aligned, and should be 16-aligned.
- * See http://userguide.icu-project.org/icudata
+ * See https://unicode-org.github.io/icu/userguide/icudata
*
* The format of this data is that of the icu common data file, as is
* generated by the pkgdata tool with mode=common or mode=dll.
@@ -340,7 +343,7 @@ udata_getInfo(UDataMemory *pData, UDataInfo *pInfo);
* @param err outgoing error status <code>U_USING_DEFAULT_WARNING, U_UNSUPPORTED_ERROR</code>
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udata_setCommonData(const void *data, UErrorCode *err);
@@ -350,7 +353,7 @@ udata_setCommonData(const void *data, UErrorCode *err);
* pointer.
*
* ICU data must be at least 8-aligned, and should be 16-aligned.
- * See http://userguide.icu-project.org/icudata
+ * See https://unicode-org.github.io/icu/userguide/icudata
*
* The format of this data is that of the icu common data file, like 'icudt26l.dat'
* or the corresponding shared library (DLL) file.
@@ -371,7 +374,7 @@ udata_setCommonData(const void *data, UErrorCode *err);
* @see udata_setCommonData
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udata_setAppData(const char *packageName, const void *data, UErrorCode *err);
/**
@@ -410,7 +413,7 @@ typedef enum UDataFileAccess {
* @see UDataFileAccess
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udata_setFileAccess(UDataFileAccess access, UErrorCode *status);
U_CDECL_END
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h b/Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h
index 398481c6812..6e142179805 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h
@@ -156,7 +156,8 @@ enum UDisplayContext {
UDISPCTX_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 0,
/**
* A possible setting for SUBSTITUTE_HANDLING:
- * Returns a null value when no data is available.
+ * Returns a null value with error code set to U_ILLEGAL_ARGUMENT_ERROR when no
+ * data is available.
* @stable ICU 58
*/
UDISPCTX_NO_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 1
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uenum.h b/Build/source/libs/icu/icu-src/source/common/unicode/uenum.h
index c670eeafb16..d9c893e06d9 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uenum.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uenum.h
@@ -20,13 +20,14 @@
#define __UENUM_H
#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+
U_NAMESPACE_BEGIN
class StringEnumeration;
U_NAMESPACE_END
-#endif
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -49,7 +50,7 @@ typedef struct UEnumeration UEnumeration;
* @param en UEnumeration structure pointer
* @stable ICU 2.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uenum_close(UEnumeration* en);
#if U_SHOW_CPLUSPLUS_API
@@ -85,7 +86,7 @@ U_NAMESPACE_END
* @return number of elements in the iterator
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uenum_count(UEnumeration* en, UErrorCode* status);
/**
@@ -109,7 +110,7 @@ uenum_count(UEnumeration* en, UErrorCode* status);
* traversed, returns NULL.
* @stable ICU 2.2
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
uenum_unext(UEnumeration* en,
int32_t* resultLength,
UErrorCode* status);
@@ -142,7 +143,7 @@ uenum_unext(UEnumeration* en,
* traversed, returns NULL.
* @stable ICU 2.2
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uenum_next(UEnumeration* en,
int32_t* resultLength,
UErrorCode* status);
@@ -156,7 +157,7 @@ uenum_next(UEnumeration* en,
* the iterator is out of sync with its service.
* @stable ICU 2.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uenum_reset(UEnumeration* en, UErrorCode* status);
#if U_SHOW_CPLUSPLUS_API
@@ -170,7 +171,7 @@ uenum_reset(UEnumeration* en, UErrorCode* status);
* @return a UEnumeration wrapping the adopted StringEnumeration.
* @stable ICU 4.2
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec);
#endif
@@ -186,7 +187,7 @@ uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec)
* @see uenum_close
* @stable ICU 50
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uenum_openUCharStringsEnumeration(const UChar* const strings[], int32_t count,
UErrorCode* ec);
@@ -201,7 +202,7 @@ uenum_openUCharStringsEnumeration(const UChar* const strings[], int32_t count,
* @see uenum_close
* @stable ICU 50
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uenum_openCharStringsEnumeration(const char* const strings[], int32_t count,
UErrorCode* ec);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uidna.h b/Build/source/libs/icu/icu-src/source/common/unicode/uidna.h
index 0dafb762017..24a81ceaddf 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uidna.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uidna.h
@@ -23,9 +23,13 @@
#if !UCONFIG_NO_IDNA
-#include "unicode/localpointer.h"
+#include <stdbool.h>
#include "unicode/parseerr.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: Internationalizing Domain Names in Applications (IDNA)
@@ -138,7 +142,7 @@ typedef struct UIDNA UIDNA; /**< C typedef for struct UIDNA. @stable ICU 4.6 */
* @return the UTS #46 UIDNA instance, if successful
* @stable ICU 4.6
*/
-U_STABLE UIDNA * U_EXPORT2
+U_CAPI UIDNA * U_EXPORT2
uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode);
/**
@@ -146,7 +150,7 @@ uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode);
* @param idna UIDNA instance to be closed
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uidna_close(UIDNA *idna);
#if U_SHOW_CPLUSPLUS_API
@@ -182,7 +186,7 @@ typedef struct UIDNAInfo {
/** sizeof(UIDNAInfo) @stable ICU 4.6 */
int16_t size;
/**
- * Set to TRUE if transitional and nontransitional processing produce different results.
+ * Set to true if transitional and nontransitional processing produce different results.
* For details see C++ IDNAInfo::isTransitionalDifferent().
* @stable ICU 4.6
*/
@@ -204,7 +208,7 @@ typedef struct UIDNAInfo {
*/
#define UIDNA_INFO_INITIALIZER { \
(int16_t)sizeof(UIDNAInfo), \
- FALSE, FALSE, \
+ false, false, \
0, 0, 0 }
/**
@@ -230,7 +234,7 @@ typedef struct UIDNAInfo {
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_labelToASCII(const UIDNA *idna,
const UChar *label, int32_t length,
UChar *dest, int32_t capacity,
@@ -257,7 +261,7 @@ uidna_labelToASCII(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_labelToUnicode(const UIDNA *idna,
const UChar *label, int32_t length,
UChar *dest, int32_t capacity,
@@ -286,7 +290,7 @@ uidna_labelToUnicode(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_nameToASCII(const UIDNA *idna,
const UChar *name, int32_t length,
UChar *dest, int32_t capacity,
@@ -313,7 +317,7 @@ uidna_nameToASCII(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_nameToUnicode(const UIDNA *idna,
const UChar *name, int32_t length,
UChar *dest, int32_t capacity,
@@ -338,7 +342,7 @@ uidna_nameToUnicode(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_labelToASCII_UTF8(const UIDNA *idna,
const char *label, int32_t length,
char *dest, int32_t capacity,
@@ -361,7 +365,7 @@ uidna_labelToASCII_UTF8(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_labelToUnicodeUTF8(const UIDNA *idna,
const char *label, int32_t length,
char *dest, int32_t capacity,
@@ -384,7 +388,7 @@ uidna_labelToUnicodeUTF8(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_nameToASCII_UTF8(const UIDNA *idna,
const char *name, int32_t length,
char *dest, int32_t capacity,
@@ -407,7 +411,7 @@ uidna_nameToASCII_UTF8(const UIDNA *idna,
* @return destination string length
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uidna_nameToUnicodeUTF8(const UIDNA *idna,
const char *name, int32_t length,
char *dest, int32_t capacity,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uiter.h b/Build/source/libs/icu/icu-src/source/common/unicode/uiter.h
index 11ad75acd51..be232c774dc 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uiter.h
@@ -492,7 +492,7 @@ struct UCharIterator {
* @see UnicodeString::char32At()
* @stable ICU 2.1
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
uiter_current32(UCharIterator *iter);
/**
@@ -509,7 +509,7 @@ uiter_current32(UCharIterator *iter);
* @see U16_NEXT
* @stable ICU 2.1
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
uiter_next32(UCharIterator *iter);
/**
@@ -526,7 +526,7 @@ uiter_next32(UCharIterator *iter);
* @see U16_PREV
* @stable ICU 2.1
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
uiter_previous32(UCharIterator *iter);
/**
@@ -547,7 +547,7 @@ uiter_previous32(UCharIterator *iter);
* @see UITER_NO_STATE
* @stable ICU 2.6
*/
-U_STABLE uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
uiter_getState(const UCharIterator *iter);
/**
@@ -565,7 +565,7 @@ uiter_getState(const UCharIterator *iter);
* @see UCharIteratorSetState
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode);
/**
@@ -590,7 +590,7 @@ uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode);
* @see UCharIterator
* @stable ICU 2.1
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uiter_setString(UCharIterator *iter, const UChar *s, int32_t length);
/**
@@ -613,7 +613,7 @@ uiter_setString(UCharIterator *iter, const UChar *s, int32_t length);
* @see uiter_setString
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length);
/**
@@ -649,7 +649,7 @@ uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length);
* @see UCharIterator
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length);
#if U_SHOW_CPLUSPLUS_API
@@ -674,7 +674,7 @@ uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length);
* @see UCharIterator
* @stable ICU 2.1
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uiter_setCharacterIterator(UCharIterator *iter, icu::CharacterIterator *charIter);
/**
@@ -699,7 +699,7 @@ uiter_setCharacterIterator(UCharIterator *iter, icu::CharacterIterator *charIter
* @see UCharIterator
* @stable ICU 2.1
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uiter_setReplaceable(UCharIterator *iter, const icu::Replaceable *rep);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h b/Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h
index 3ebffa23db5..47b047ece97 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h
@@ -16,10 +16,13 @@
*/
#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
#include "unicode/uscript.h"
#include "unicode/udisplaycontext.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* Enum used in LocaleDisplayNames::createInstance.
* @stable ICU 4.4
@@ -65,7 +68,7 @@ typedef struct ULocaleDisplayNames ULocaleDisplayNames;
* @param pErrorCode the status code
* @stable ICU 4.4
*/
-U_STABLE ULocaleDisplayNames * U_EXPORT2
+U_CAPI ULocaleDisplayNames * U_EXPORT2
uldn_open(const char * locale,
UDialectHandling dialectHandling,
UErrorCode *pErrorCode);
@@ -75,7 +78,7 @@ uldn_open(const char * locale,
* @param ldn the ULocaleDisplayNames instance to be closed
* @stable ICU 4.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uldn_close(ULocaleDisplayNames *ldn);
#if U_SHOW_CPLUSPLUS_API
@@ -106,7 +109,7 @@ U_NAMESPACE_END
* @return the display locale
* @stable ICU 4.4
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
uldn_getLocale(const ULocaleDisplayNames *ldn);
/**
@@ -115,7 +118,7 @@ uldn_getLocale(const ULocaleDisplayNames *ldn);
* @return the dialect handling enum
* @stable ICU 4.4
*/
-U_STABLE UDialectHandling U_EXPORT2
+U_CAPI UDialectHandling U_EXPORT2
uldn_getDialectHandling(const ULocaleDisplayNames *ldn);
/* names for entire locales */
@@ -131,7 +134,7 @@ uldn_getDialectHandling(const ULocaleDisplayNames *ldn);
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_localeDisplayName(const ULocaleDisplayNames *ldn,
const char *locale,
UChar *result,
@@ -151,7 +154,7 @@ uldn_localeDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_languageDisplayName(const ULocaleDisplayNames *ldn,
const char *lang,
UChar *result,
@@ -169,7 +172,7 @@ uldn_languageDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_scriptDisplayName(const ULocaleDisplayNames *ldn,
const char *script,
UChar *result,
@@ -187,7 +190,7 @@ uldn_scriptDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn,
UScriptCode scriptCode,
UChar *result,
@@ -205,7 +208,7 @@ uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_regionDisplayName(const ULocaleDisplayNames *ldn,
const char *region,
UChar *result,
@@ -223,7 +226,7 @@ uldn_regionDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_variantDisplayName(const ULocaleDisplayNames *ldn,
const char *variant,
UChar *result,
@@ -241,7 +244,7 @@ uldn_variantDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_keyDisplayName(const ULocaleDisplayNames *ldn,
const char *key,
UChar *result,
@@ -260,7 +263,7 @@ uldn_keyDisplayName(const ULocaleDisplayNames *ldn,
* greater than maxResultSize, the returned name will be truncated.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn,
const char *key,
const char *value,
@@ -282,7 +285,7 @@ uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn,
* @return a ULocaleDisplayNames instance
* @stable ICU 51
*/
-U_STABLE ULocaleDisplayNames * U_EXPORT2
+U_CAPI ULocaleDisplayNames * U_EXPORT2
uldn_openForContext(const char * locale, UDisplayContext *contexts,
int32_t length, UErrorCode *pErrorCode);
@@ -296,7 +299,7 @@ uldn_openForContext(const char * locale, UDisplayContext *contexts,
* @return the UDisplayContextValue for the specified type.
* @stable ICU 51
*/
-U_STABLE UDisplayContext U_EXPORT2
+U_CAPI UDisplayContext U_EXPORT2
uldn_getContext(const ULocaleDisplayNames *ldn, UDisplayContextType type,
UErrorCode *pErrorCode);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h b/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
index c45edad9e09..3addb847e7f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
@@ -371,7 +371,7 @@ typedef enum {
* @system
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_getDefault(void);
/**
@@ -391,7 +391,7 @@ uloc_getDefault(void);
* @system
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uloc_setDefault(const char* localeID,
UErrorCode* status);
#endif /* U_HIDE_SYSTEM_API */
@@ -408,7 +408,7 @@ uloc_setDefault(const char* localeID,
* than languageCapacity, the returned language code will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getLanguage(const char* localeID,
char* language,
int32_t languageCapacity,
@@ -426,7 +426,7 @@ uloc_getLanguage(const char* localeID,
* than scriptCapacity, the returned language code will be truncated.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getScript(const char* localeID,
char* script,
int32_t scriptCapacity,
@@ -444,7 +444,7 @@ uloc_getScript(const char* localeID,
* than countryCapacity, the returned country code will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getCountry(const char* localeID,
char* country,
int32_t countryCapacity,
@@ -462,7 +462,7 @@ uloc_getCountry(const char* localeID,
* than variantCapacity, the returned variant code will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getVariant(const char* localeID,
char* variant,
int32_t variantCapacity,
@@ -485,7 +485,7 @@ uloc_getVariant(const char* localeID,
* than nameCapacity, the returned full name will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getName(const char* localeID,
char* name,
int32_t nameCapacity,
@@ -508,7 +508,7 @@ uloc_getName(const char* localeID,
* than nameCapacity, the returned full name will be truncated.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_canonicalize(const char* localeID,
char* name,
int32_t nameCapacity,
@@ -521,7 +521,7 @@ uloc_canonicalize(const char* localeID,
* @return language the ISO language code for localeID
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_getISO3Language(const char* localeID);
@@ -532,7 +532,7 @@ uloc_getISO3Language(const char* localeID);
* @return country the ISO country code for localeID
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_getISO3Country(const char* localeID);
/**
@@ -546,26 +546,31 @@ uloc_getISO3Country(const char* localeID);
* @return country the Win32 LCID for localeID
* @stable ICU 2.0
*/
-U_STABLE uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
uloc_getLCID(const char* localeID);
/**
* Gets the language name suitable for display for the specified locale.
*
* @param locale the locale to get the ISO language code with
- * @param displayLocale Specifies the locale to be used to display the name. In other words,
- * if the locale's language code is "en", passing Locale::getFrench() for
- * inLocale would result in "Anglais", while passing Locale::getGerman()
- * for inLocale would result in "Englisch".
+ * @param displayLocale Specifies the locale to be used to display the name. In
+ * other words, if the locale's language code is "en", passing
+ * Locale::getFrench() for inLocale would result in "Anglais",
+ * while passing Locale::getGerman() for inLocale would result
+ * in "Englisch".
* @param language the displayable language code for localeID
- * @param languageCapacity the size of the language buffer to store the
- * displayable language code with
- * @param status error information if retrieving the displayable language code failed
- * @return the actual buffer size needed for the displayable language code. If it's greater
- * than languageCapacity, the returned language code will be truncated.
+ * @param languageCapacity the size of the language buffer to store the
+ * displayable language code with.
+ * @param status error information if retrieving the displayable language code
+ * failed. U_USING_DEFAULT_WARNING indicates that no data was
+ * found from the locale resources and a case canonicalized
+ * language code is placed into language as fallback.
+ * @return the actual buffer size needed for the displayable language code. If
+ * it's greater than languageCapacity, the returned language
+ * code will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayLanguage(const char* locale,
const char* displayLocale,
UChar* language,
@@ -575,20 +580,26 @@ uloc_getDisplayLanguage(const char* locale,
/**
* Gets the script name suitable for display for the specified locale.
*
- * @param locale the locale to get the displayable script code with. NULL may be used to specify the default.
- * @param displayLocale Specifies the locale to be used to display the name. In other words,
- * if the locale's language code is "en", passing Locale::getFrench() for
- * inLocale would result in "", while passing Locale::getGerman()
- * for inLocale would result in "". NULL may be used to specify the default.
- * @param script the displayable script for the localeID
- * @param scriptCapacity the size of the script buffer to store the
- * displayable script code with
- * @param status error information if retrieving the displayable script code failed
- * @return the actual buffer size needed for the displayable script code. If it's greater
- * than scriptCapacity, the returned displayable script code will be truncated.
+ * @param locale the locale to get the displayable script code with. NULL may be
+ * used to specify the default.
+ * @param displayLocale Specifies the locale to be used to display the name. In
+ * other words, if the locale's language code is "en", passing
+ * Locale::getFrench() for inLocale would result in "", while
+ * passing Locale::getGerman() for inLocale would result in "".
+ * NULL may be used to specify the default.
+ * @param script the displayable script for the localeID.
+ * @param scriptCapacity the size of the script buffer to store the displayable
+ * script code with.
+ * @param status error information if retrieving the displayable script code
+ * failed. U_USING_DEFAULT_WARNING indicates that no data was
+ * found from the locale resources and a case canonicalized
+ * script code is placed into script as fallback.
+ * @return the actual buffer size needed for the displayable script code. If
+ * it's greater than scriptCapacity, the returned displayable
+ * script code will be truncated.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayScript(const char* locale,
const char* displayLocale,
UChar* script,
@@ -597,23 +608,30 @@ uloc_getDisplayScript(const char* locale,
/**
* Gets the country name suitable for display for the specified locale.
- * Warning: this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
- * To get the display name for a region alone, or for other options, use ULocaleDisplayNames instead.
- *
- * @param locale the locale to get the displayable country code with. NULL may be used to specify the default.
- * @param displayLocale Specifies the locale to be used to display the name. In other words,
- * if the locale's language code is "en", passing Locale::getFrench() for
- * inLocale would result in "Anglais", while passing Locale::getGerman()
- * for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param country the displayable country code for localeID
- * @param countryCapacity the size of the country buffer to store the
- * displayable country code with
- * @param status error information if retrieving the displayable country code failed
- * @return the actual buffer size needed for the displayable country code. If it's greater
- * than countryCapacity, the returned displayable country code will be truncated.
+ * Warning: this is for the region part of a valid locale ID; it cannot just be
+ * the region code (like "FR"). To get the display name for a region alone, or
+ * for other options, use ULocaleDisplayNames instead.
+ *
+ * @param locale the locale to get the displayable country code with. NULL may
+ * be used to specify the default.
+ * @param displayLocale Specifies the locale to be used to display the name. In
+ * other words, if the locale's language code is "en", passing
+ * Locale::getFrench() for inLocale would result in "Anglais",
+ * while passing Locale::getGerman() for inLocale would result
+ * in "Englisch". NULL may be used to specify the default.
+ * @param country the displayable country code for localeID.
+ * @param countryCapacity the size of the country buffer to store the
+ * displayable country code with.
+ * @param status error information if retrieving the displayable country code
+ * failed. U_USING_DEFAULT_WARNING indicates that no data was
+ * found from the locale resources and a case canonicalized
+ * country code is placed into country as fallback.
+ * @return the actual buffer size needed for the displayable country code. If
+ * it's greater than countryCapacity, the returned displayable
+ * country code will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayCountry(const char* locale,
const char* displayLocale,
UChar* country,
@@ -624,20 +642,26 @@ uloc_getDisplayCountry(const char* locale,
/**
* Gets the variant name suitable for display for the specified locale.
*
- * @param locale the locale to get the displayable variant code with. NULL may be used to specify the default.
- * @param displayLocale Specifies the locale to be used to display the name. In other words,
- * if the locale's language code is "en", passing Locale::getFrench() for
- * inLocale would result in "Anglais", while passing Locale::getGerman()
- * for inLocale would result in "Englisch". NULL may be used to specify the default.
- * @param variant the displayable variant code for localeID
- * @param variantCapacity the size of the variant buffer to store the
- * displayable variant code with
- * @param status error information if retrieving the displayable variant code failed
- * @return the actual buffer size needed for the displayable variant code. If it's greater
- * than variantCapacity, the returned displayable variant code will be truncated.
+ * @param locale the locale to get the displayable variant code with. NULL may
+ * be used to specify the default.
+ * @param displayLocale Specifies the locale to be used to display the name. In
+ * other words, if the locale's language code is "en", passing
+ * Locale::getFrench() for inLocale would result in "Anglais",
+ * while passing Locale::getGerman() for inLocale would result
+ * in "Englisch". NULL may be used to specify the default.
+ * @param variant the displayable variant code for localeID.
+ * @param variantCapacity the size of the variant buffer to store the
+ * displayable variant code with.
+ * @param status error information if retrieving the displayable variant code
+ * failed. U_USING_DEFAULT_WARNING indicates that no data was
+ * found from the locale resources and a case canonicalized
+ * variant code is placed into variant as fallback.
+ * @return the actual buffer size needed for the displayable variant code. If
+ * it's greater than variantCapacity, the returned displayable
+ * variant code will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayVariant(const char* locale,
const char* displayLocale,
UChar* variant,
@@ -645,9 +669,9 @@ uloc_getDisplayVariant(const char* locale,
UErrorCode* status);
/**
- * Gets the keyword name suitable for display for the specified locale.
- * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display
- * string for the keyword collation.
+ * Gets the keyword name suitable for display for the specified locale. E.g:
+ * for the locale string de_DE\@collation=PHONEBOOK, this API gets the display
+ * string for the keyword collation.
* Usage:
* <code>
* UErrorCode status = U_ZERO_ERROR;
@@ -676,15 +700,17 @@ uloc_getDisplayVariant(const char* locale,
* for inLocale would result in "Englisch". NULL may be used to specify the default.
* @param dest the buffer to which the displayable keyword should be written.
* @param destCapacity The size of the buffer (number of UChars). If it is 0, then
- * dest may be NULL and the function will only return the length of the
+ * dest may be NULL and the function will only return the length of the
* result without writing any of the result string (pre-flighting).
- * @param status error information if retrieving the displayable string failed.
+ * @param status error information if retrieving the displayable string failed.
* Should not be NULL and should not indicate failure on entry.
- * @return the actual buffer size needed for the displayable variant code.
+ * U_USING_DEFAULT_WARNING indicates that no data was found from the locale
+ * resources and the keyword is placed into dest as fallback.
+ * @return the actual buffer size needed for the displayable variant code.
* @see #uloc_openKeywords
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayKeyword(const char* keyword,
const char* displayLocale,
UChar* dest,
@@ -692,7 +718,7 @@ uloc_getDisplayKeyword(const char* keyword,
UErrorCode* status);
/**
* Gets the value of the keyword suitable for display for the specified locale.
- * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display
+ * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display
* string for PHONEBOOK, in the display locale, when "collation" is specified as the keyword.
*
* @param locale The locale to get the displayable variant code with. NULL may be used to specify the default.
@@ -703,14 +729,16 @@ uloc_getDisplayKeyword(const char* keyword,
* for inLocale would result in "Englisch". NULL may be used to specify the default.
* @param dest the buffer to which the displayable keyword should be written.
* @param destCapacity The size of the buffer (number of UChars). If it is 0, then
- * dest may be NULL and the function will only return the length of the
+ * dest may be NULL and the function will only return the length of the
* result without writing any of the result string (pre-flighting).
- * @param status error information if retrieving the displayable string failed.
+ * @param status error information if retrieving the displayable string failed.
* Should not be NULL and must not indicate failure on entry.
- * @return the actual buffer size needed for the displayable variant code.
+ * U_USING_DEFAULT_WARNING indicates that no data was found from the locale
+ * resources and the value of the keyword is placed into dest as fallback.
+ * @return the actual buffer size needed for the displayable variant code.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayKeywordValue( const char* locale,
const char* keyword,
const char* displayLocale,
@@ -733,7 +761,7 @@ uloc_getDisplayKeywordValue( const char* locale,
* than maxResultSize, the returned displayable name will be truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getDisplayName(const char* localeID,
const char* inLocaleID,
UChar* result,
@@ -757,7 +785,7 @@ uloc_getDisplayName(const char* localeID,
* @return a specified locale name of all available locales
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_getAvailable(int32_t n);
/**
@@ -766,21 +794,19 @@ uloc_getAvailable(int32_t n);
* @return the size of the locale list
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2 uloc_countAvailable(void);
-
-#ifndef U_HIDE_DRAFT_API
+U_CAPI int32_t U_EXPORT2 uloc_countAvailable(void);
/**
* Types for uloc_getAvailableByType and uloc_countAvailableByType.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
typedef enum ULocAvailableType {
/**
* Locales that return data when passed to ICU APIs,
* but not including legacy or alias locales.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOC_AVAILABLE_DEFAULT,
@@ -798,7 +824,7 @@ typedef enum ULocAvailableType {
* ULOC_AVAILABLE_DEFAULT. To get both sets at the same time, use
* ULOC_AVAILABLE_WITH_LEGACY_ALIASES.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOC_AVAILABLE_ONLY_LEGACY_ALIASES,
@@ -806,7 +832,7 @@ typedef enum ULocAvailableType {
* The union of the locales in ULOC_AVAILABLE_DEFAULT and
* ULOC_AVAILABLE_ONLY_LEGACY_ALIAS.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
ULOC_AVAILABLE_WITH_LEGACY_ALIASES,
@@ -827,13 +853,11 @@ typedef enum ULocAvailableType {
* @param type Type choice from ULocAvailableType.
* @param status Set if an error occurred.
* @return a UEnumeration owned by the caller, or nullptr on failure.
- * @draft ICU 65
+ * @stable ICU 65
*/
-U_DRAFT UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uloc_openAvailableByType(ULocAvailableType type, UErrorCode* status);
-#endif // U_HIDE_DRAFT_API
-
/**
*
* Gets a list of all available 2-letter language codes defined in ISO 639,
@@ -845,7 +869,7 @@ uloc_openAvailableByType(ULocAvailableType type, UErrorCode* status);
* @return a list of all available language codes
* @stable ICU 2.0
*/
-U_STABLE const char* const* U_EXPORT2
+U_CAPI const char* const* U_EXPORT2
uloc_getISOLanguages(void);
/**
@@ -857,7 +881,7 @@ uloc_getISOLanguages(void);
* @return a list of all available country codes
* @stable ICU 2.0
*/
-U_STABLE const char* const* U_EXPORT2
+U_CAPI const char* const* U_EXPORT2
uloc_getISOCountries(void);
/**
@@ -873,7 +897,7 @@ uloc_getISOCountries(void);
* @return The length of the parent locale ID.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getParent(const char* localeID,
char* parent,
int32_t parentCapacity,
@@ -904,7 +928,7 @@ uloc_getParent(const char* localeID,
* than nameCapacity, the returned full name will be truncated.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getBaseName(const char* localeID,
char* name,
int32_t nameCapacity,
@@ -919,7 +943,7 @@ uloc_getBaseName(const char* localeID,
* @return enumeration of keywords or NULL if there are no keywords.
* @stable ICU 2.8
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uloc_openKeywords(const char* localeID,
UErrorCode* status);
@@ -936,7 +960,7 @@ uloc_openKeywords(const char* localeID,
* @return the length of keyword value
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getKeywordValue(const char* localeID,
const char* keywordName,
char* buffer, int32_t bufferCapacity,
@@ -973,7 +997,7 @@ uloc_getKeywordValue(const char* localeID,
* @see uloc_getKeywordValue
* @stable ICU 3.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_setKeywordValue(const char* keywordName,
const char* keywordValue,
char* buffer, int32_t bufferCapacity,
@@ -982,18 +1006,18 @@ uloc_setKeywordValue(const char* keywordName,
/**
* Returns whether the locale's script is written right-to-left.
* If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags().
- * If no likely script is known, then FALSE is returned.
+ * If no likely script is known, then false is returned.
*
* A script is right-to-left according to the CLDR script metadata
* which corresponds to whether the script's letters have Bidi_Class=R or AL.
*
- * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl".
+ * Returns true for "ar" and "en-Hebr", false for "zh" and "fa-Cyrl".
*
* @param locale input locale ID
- * @return TRUE if the locale's script is written right-to-left
+ * @return true if the locale's script is written right-to-left
* @stable ICU 54
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uloc_isRightToLeft(const char *locale);
/**
@@ -1017,7 +1041,7 @@ typedef enum {
* @return an enum indicating the layout orientation for characters.
* @stable ICU 4.0
*/
-U_STABLE ULayoutType U_EXPORT2
+U_CAPI ULayoutType U_EXPORT2
uloc_getCharacterOrientation(const char* localeId,
UErrorCode *status);
@@ -1029,38 +1053,54 @@ uloc_getCharacterOrientation(const char* localeId,
* @return an enum indicating the layout orientation for lines.
* @stable ICU 4.0
*/
-U_STABLE ULayoutType U_EXPORT2
+U_CAPI ULayoutType U_EXPORT2
uloc_getLineOrientation(const char* localeId,
UErrorCode *status);
/**
- * enums for the 'outResult' parameter return value
+ * Output values which uloc_acceptLanguage() writes to the 'outResult' parameter.
+ *
* @see uloc_acceptLanguageFromHTTP
* @see uloc_acceptLanguage
* @stable ICU 3.2
*/
typedef enum {
- ULOC_ACCEPT_FAILED = 0, /* No exact match was found. */
- ULOC_ACCEPT_VALID = 1, /* An exact match was found. */
- ULOC_ACCEPT_FALLBACK = 2 /* A fallback was found, for example,
- Accept list contained 'ja_JP'
- which matched available locale 'ja'. */
+ /**
+ * No exact match was found.
+ * @stable ICU 3.2
+ */
+ ULOC_ACCEPT_FAILED = 0,
+ /**
+ * An exact match was found.
+ * @stable ICU 3.2
+ */
+ ULOC_ACCEPT_VALID = 1,
+ /**
+ * A fallback was found. For example, the Accept-Language list includes 'ja_JP'
+ * and is matched with available locale 'ja'.
+ * @stable ICU 3.2
+ */
+ ULOC_ACCEPT_FALLBACK = 2 /* */
} UAcceptResult;
-
/**
* Based on a HTTP header from a web browser and a list of available locales,
* determine an acceptable locale for the user.
+ *
+ * This is a thin wrapper over C++ class LocaleMatcher.
+ *
* @param result - buffer to accept the result locale
* @param resultAvailable the size of the result buffer.
* @param outResult - An out parameter that contains the fallback status
* @param httpAcceptLanguage - "Accept-Language:" header as per HTTP.
* @param availableLocales - list of available locales to match
- * @param status Error status, may be BUFFER_OVERFLOW_ERROR
+ * @param status ICU error code. Its input value must pass the U_SUCCESS() test,
+ * or else the function returns immediately. Check for U_FAILURE()
+ * on output or use with function chaining. (See User Guide for details.)
* @return length needed for the locale.
* @stable ICU 3.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable,
UAcceptResult *outResult,
const char *httpAcceptLanguage,
@@ -1070,17 +1110,22 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable,
/**
* Based on a list of available locales,
* determine an acceptable locale for the user.
+ *
+ * This is a thin wrapper over C++ class LocaleMatcher.
+ *
* @param result - buffer to accept the result locale
* @param resultAvailable the size of the result buffer.
* @param outResult - An out parameter that contains the fallback status
* @param acceptList - list of acceptable languages
* @param acceptListCount - count of acceptList items
* @param availableLocales - list of available locales to match
- * @param status Error status, may be BUFFER_OVERFLOW_ERROR
+ * @param status ICU error code. Its input value must pass the U_SUCCESS() test,
+ * or else the function returns immediately. Check for U_FAILURE()
+ * on output or use with function chaining. (See User Guide for details.)
* @return length needed for the locale.
* @stable ICU 3.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_acceptLanguage(char *result, int32_t resultAvailable,
UAcceptResult *outResult, const char **acceptList,
int32_t acceptListCount,
@@ -1100,7 +1145,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable,
* @return actual the actual size of the locale ID, not including NUL-termination
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity,
UErrorCode *status);
@@ -1138,7 +1183,7 @@ uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity,
* On error, the return value is -1.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_addLikelySubtags(const char* localeID,
char* maximizedLocaleID,
int32_t maximizedLocaleIDCapacity,
@@ -1178,7 +1223,7 @@ uloc_addLikelySubtags(const char* localeID,
* On error, the return value is -1.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_minimizeSubtags(const char* localeID,
char* minimizedLocaleID,
int32_t minimizedLocaleIDCapacity,
@@ -1188,14 +1233,18 @@ uloc_minimizeSubtags(const char* localeID,
* Returns a locale ID for the specified BCP47 language tag string.
* If the specified language tag contains any ill-formed subtags,
* the first such subtag and all following subtags are ignored.
- * <p>
- * This implements the 'Language-Tag' production of BCP47, and so
- * supports grandfathered (regular and irregular) as well as private
- * use language tags. Private use tags are represented as 'x-whatever',
- * and grandfathered tags are converted to their canonical replacements
- * where they exist. Note that a few grandfathered tags have no modern
- * replacement, these will be converted using the fallback described in
+ * <p>
+ * This implements the 'Language-Tag' production of BCP 47, and so
+ * supports legacy language tags (marked as “Type: grandfathered†in BCP 47)
+ * (regular and irregular) as well as private use language tags.
+ *
+ * Private use tags are represented as 'x-whatever',
+ * and legacy tags are converted to their canonical replacements where they exist.
+ *
+ * Note that a few legacy tags have no modern replacement;
+ * these will be converted using the fallback described in
* the first paragraph, so some information might be lost.
+ *
* @param langtag the input BCP47 language tag.
* @param localeID the output buffer receiving a locale ID for the
* specified BCP47 language tag.
@@ -1207,7 +1256,7 @@ uloc_minimizeSubtags(const char* localeID,
* @return the length of the locale ID.
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_forLanguageTag(const char* langtag,
char* localeID,
int32_t localeIDCapacity,
@@ -1217,10 +1266,10 @@ uloc_forLanguageTag(const char* langtag,
/**
* Returns a well-formed language tag for this locale ID.
* <p>
- * <b>Note</b>: When <code>strict</code> is FALSE, any locale
+ * <b>Note</b>: When <code>strict</code> is false, any locale
* fields which do not satisfy the BCP47 syntax requirement will
* be omitted from the result. When <code>strict</code> is
- * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the
+ * true, this function sets U_ILLEGAL_ARGUMENT_ERROR to the
* <code>err</code> if any locale fields do not satisfy the
* BCP47 syntax requirement.
* @param localeID the input locale ID
@@ -1235,7 +1284,7 @@ uloc_forLanguageTag(const char* langtag,
* @return The length of the BCP47 language tag.
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uloc_toLanguageTag(const char* localeID,
char* langtag,
int32_t langtagCapacity,
@@ -1263,7 +1312,7 @@ uloc_toLanguageTag(const char* localeID,
* @see uloc_toLegacyKey
* @stable ICU 54
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_toUnicodeLocaleKey(const char* keyword);
/**
@@ -1294,7 +1343,7 @@ uloc_toUnicodeLocaleKey(const char* keyword);
* @see uloc_toLegacyType
* @stable ICU 54
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_toUnicodeLocaleType(const char* keyword, const char* value);
/**
@@ -1309,7 +1358,7 @@ uloc_toUnicodeLocaleType(const char* keyword, const char* value);
* @see toUnicodeLocaleKey
* @stable ICU 54
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_toLegacyKey(const char* keyword);
/**
@@ -1338,7 +1387,7 @@ uloc_toLegacyKey(const char* keyword);
* @see toUnicodeLocaleType
* @stable ICU 54
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uloc_toLegacyType(const char* keyword, const char* value);
#endif /*_ULOC*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h b/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h
index c52984cef39..09c887c80ef 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h
@@ -49,12 +49,13 @@
* ANSI C headers:
* stddef.h defines wchar_t
*/
+#include <stdbool.h>
#include <stddef.h>
/*==========================================================================*/
-/* For C wrappers, we use the symbol U_STABLE. */
+/* For C wrappers, we use the symbol U_CAPI. */
/* This works properly if the includer is C or C++. */
-/* Functions are declared U_STABLE return-type U_EXPORT2 function-name()... */
+/* Functions are declared U_CAPI return-type U_EXPORT2 function-name()... */
/*==========================================================================*/
/**
@@ -107,15 +108,15 @@
/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/
#define U_CAPI U_CFUNC U_EXPORT
-/** This is used to declare a function as a stable public ICU C API*/
+/** Obsolete/same as U_CAPI; was used to declare a function as a stable public ICU C API*/
#define U_STABLE U_CAPI
-/** This is used to declare a function as a draft public ICU C API */
+/** Obsolete/same as U_CAPI; was used to declare a function as a draft public ICU C API */
#define U_DRAFT U_CAPI
/** This is used to declare a function as a deprecated public ICU C API */
#define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED
-/** This is used to declare a function as an obsolete public ICU C API */
+/** Obsolete/same as U_CAPI; was used to declare a function as an obsolete public ICU C API */
#define U_OBSOLETE U_CAPI
-/** This is used to declare a function as an internal ICU C API */
+/** Obsolete/same as U_CAPI; was used to declare a function as an internal ICU C API */
#define U_INTERNAL U_CAPI
/**
@@ -170,11 +171,11 @@
/**
* \def UPRV_BLOCK_MACRO_END
- * Defined as "while (FALSE)" by default.
+ * Defined as "while (false)" by default.
* @internal
*/
#ifndef UPRV_BLOCK_MACRO_END
-#define UPRV_BLOCK_MACRO_END while (FALSE)
+#define UPRV_BLOCK_MACRO_END while (false)
#endif
/*==========================================================================*/
@@ -257,18 +258,59 @@
/* Boolean data type */
/*==========================================================================*/
-/** The ICU boolean type @stable ICU 2.0 */
+/**
+ * The ICU boolean type, a signed-byte integer.
+ * ICU-specific for historical reasons: The C and C++ standards used to not define type bool.
+ * Also provides a fixed type definition, as opposed to
+ * type bool whose details (e.g., sizeof) may vary by compiler and between C and C++.
+ *
+ * @stable ICU 2.0
+ */
typedef int8_t UBool;
+/**
+ * \def U_DEFINE_FALSE_AND_TRUE
+ * Normally turns off defining macros FALSE=0 & TRUE=1 in public ICU headers.
+ * These obsolete macros sometimes break compilation of other code that
+ * defines enum constants or similar with these names.
+ * C++ has long defined bool/false/true.
+ * C99 also added definitions for these, although as macros; see stdbool.h.
+ *
+ * You may transitionally define U_DEFINE_FALSE_AND_TRUE=1 if you need time to migrate code.
+ *
+ * @internal ICU 68
+ */
+#ifdef U_DEFINE_FALSE_AND_TRUE
+ // Use the predefined value.
+#elif defined(U_COMBINED_IMPLEMENTATION) || \
+ defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || \
+ defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || \
+ defined(U_TOOLUTIL_IMPLEMENTATION)
+ // Inside ICU: Keep FALSE & TRUE available.
+# define U_DEFINE_FALSE_AND_TRUE 1
+#else
+ // Outside ICU: Avoid collision with non-macro definitions of FALSE & TRUE.
+# define U_DEFINE_FALSE_AND_TRUE 0
+#endif
+
+#if U_DEFINE_FALSE_AND_TRUE || defined(U_IN_DOXYGEN)
#ifndef TRUE
-/** The TRUE value of a UBool @stable ICU 2.0 */
+/**
+ * The TRUE value of a UBool.
+ *
+ * @deprecated ICU 68 Use standard "true" instead.
+ */
# define TRUE 1
#endif
#ifndef FALSE
-/** The FALSE value of a UBool @stable ICU 2.0 */
+/**
+ * The FALSE value of a UBool.
+ *
+ * @deprecated ICU 68 Use standard "false" instead.
+ */
# define FALSE 0
#endif
-
+#endif // U_DEFINE_FALSE_AND_TRUE
/*==========================================================================*/
/* Unicode data types */
@@ -372,7 +414,7 @@ typedef int8_t UBool;
typedef char16_t UChar;
#elif defined(UCHAR_TYPE)
typedef UCHAR_TYPE UChar;
-#elif defined(__cplusplus)
+#elif (U_CPLUSPLUS_VERSION >= 11)
typedef char16_t UChar;
#else
typedef uint16_t UChar;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h
index 13e71ef25e8..5325d58147a 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h
@@ -9,11 +9,14 @@
#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
#include "unicode/ucpmap.h"
#include "unicode/ucptrie.h"
#include "unicode/utf8.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
U_CDECL_BEGIN
/**
@@ -83,25 +86,6 @@ umutablecptrie_clone(const UMutableCPTrie *other, UErrorCode *pErrorCode);
U_CAPI void U_EXPORT2
umutablecptrie_close(UMutableCPTrie *trie);
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUMutableCPTriePointer
- * "Smart pointer" class, closes a UMutableCPTrie via umutablecptrie_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 63
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUMutableCPTriePointer, UMutableCPTrie, umutablecptrie_close);
-
-U_NAMESPACE_END
-
-#endif
-
/**
* Creates a mutable trie with the same contents as the UCPMap.
* You must umutablecptrie_close() the mutable trie once you are done using it.
@@ -235,4 +219,23 @@ umutablecptrie_buildImmutable(UMutableCPTrie *trie, UCPTrieType type, UCPTrieVal
U_CDECL_END
+#if U_SHOW_CPLUSPLUS_API
+
+U_NAMESPACE_BEGIN
+
+/**
+ * \class LocalUMutableCPTriePointer
+ * "Smart pointer" class, closes a UMutableCPTrie via umutablecptrie_close().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * @stable ICU 63
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUMutableCPTriePointer, UMutableCPTrie, umutablecptrie_close);
+
+U_NAMESPACE_END
+
+#endif
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h b/Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h
index 5a192b1b427..302332f4558 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h
@@ -115,11 +115,11 @@ public:
* considered for matching will be text.charAt(limit-1) in the
* forward direction or text.charAt(limit+1) in the backward
* direction.
- * @param incremental if TRUE, then assume further characters may
+ * @param incremental if true, then assume further characters may
* be inserted at limit and check for partial matching. Otherwise
* assume the text as given is complete.
* @return a match degree value indicating a full match, a partial
- * match, or a mismatch. If incremental is FALSE then
+ * match, or a mismatch. If incremental is false then
* U_PARTIAL_MATCH should never be returned.
* @stable ICU 2.4
*/
@@ -134,17 +134,17 @@ public:
* will produce another matcher that is equal to this one.
* @param result the string to receive the pattern. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \\uxxxx or
* \\Uxxxxxxxx. Unprintable characters are those other than
* U+000A, U+0020..U+007E.
* @stable ICU 2.4
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = FALSE) const = 0;
+ UBool escapeUnprintable = false) const = 0;
/**
- * Returns TRUE if this matcher will match a character c, where c
+ * Returns true if this matcher will match a character c, where c
* & 0xFF == v, at offset, in the forward direction (with limit >
* offset). This is used by <tt>RuleBasedTransliterator</tt> for
* indexing.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h b/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
index 97423110035..50b6360f3a7 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
@@ -325,7 +325,7 @@ public:
* A bogus set has no value. It is different from an empty set.
* It can be used to indicate that no set value is available.
*
- * @return TRUE if the set is bogus/invalid, FALSE otherwise
+ * @return true if the set is bogus/invalid, false otherwise
* @see setToBogus()
* @stable ICU 4.0
*/
@@ -333,7 +333,7 @@ public:
/**
* Make this UnicodeSet object invalid.
- * The string will test TRUE with isBogus().
+ * The string will test true with isBogus().
*
* A bogus set has no value. It is different from an empty set.
* It can be used to indicate that no set value is available.
@@ -563,7 +563,7 @@ public:
/**
* Determines whether the set has been frozen (made immutable) or not.
* See the ICU4J Freezable interface for details.
- * @return TRUE/FALSE for whether the set has been frozen
+ * @return true/false for whether the set has been frozen
* @see freeze
* @see cloneAsThawed
* @stable ICU 3.8
@@ -700,14 +700,14 @@ public:
* A frozen set will not be modified.
* @param result the string to receive the rules. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \\uxxxx or
* \\Uxxxxxxxx. Unprintable characters are those other than
* U+000A, U+0020..U+007E.
* @stable ICU 2.0
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = FALSE) const;
+ UBool escapeUnprintable = false) const;
/**
* Modifies this set to contain those code points which have the given value
@@ -1636,7 +1636,7 @@ private:
static const UnicodeSet* getInclusions(int32_t src, UErrorCode &status);
/**
- * A filter that returns TRUE if the given code point should be
+ * A filter that returns true if the given code point should be
* included in the UnicodeSet being constructed.
*/
typedef UBool (*Filter)(UChar32 codePoint, void* context);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h b/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
index da79053765a..456389f265f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
@@ -45,7 +45,7 @@ struct UConverter; // unicode/ucnv.h
/**
* \ingroup ustring_ustrlen
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strlen(const UChar *s);
#endif
@@ -113,9 +113,9 @@ class UnicodeStringAppendable; // unicode/appendable.h
* @stable ICU 2.0
*/
#if !U_CHAR16_IS_TYPEDEF
-# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, u ## cs, _length)
+# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, u ## cs, _length)
#else
-# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t*)u ## cs, _length)
+# define UNICODE_STRING(cs, _length) icu::UnicodeString(true, (const char16_t*)u ## cs, _length)
#endif
/**
@@ -227,7 +227,7 @@ class UnicodeStringAppendable; // unicode/appendable.h
* The UnicodeString class is not suitable for subclassing.
*
* For an overview of Unicode strings in C and C++ see the
- * [User Guide Strings chapter](http://userguide.icu-project.org/strings#TOC-Strings-in-C-C-).
+ * [User Guide Strings chapter](https://unicode-org.github.io/icu/userguide/strings#strings-in-cc).
*
* In ICU, a Unicode string consists of 16-bit Unicode *code units*.
* A Unicode character may be stored with either one code unit
@@ -285,7 +285,7 @@ class UnicodeStringAppendable; // unicode/appendable.h
* significant performance improvements.
* Also, the internal buffer is accessible via special functions.
* For details see the
- * [User Guide Strings chapter](http://userguide.icu-project.org/strings#TOC-Maximizing-Performance-with-the-UnicodeString-Storage-Model).
+ * [User Guide Strings chapter](https://unicode-org.github.io/icu/userguide/strings#maximizing-performance-with-the-unicodestring-storage-model).
*
* @see utf.h
* @see CharacterIterator
@@ -320,8 +320,8 @@ public:
/**
* Equality operator. Performs only bitwise comparison.
* @param text The UnicodeString to compare to this one.
- * @return TRUE if `text` contains the same characters as this one,
- * FALSE otherwise.
+ * @return true if `text` contains the same characters as this one,
+ * false otherwise.
* @stable ICU 2.0
*/
inline UBool operator== (const UnicodeString& text) const;
@@ -329,8 +329,8 @@ public:
/**
* Inequality operator. Performs only bitwise comparison.
* @param text The UnicodeString to compare to this one.
- * @return FALSE if `text` contains the same characters as this one,
- * TRUE otherwise.
+ * @return false if `text` contains the same characters as this one,
+ * true otherwise.
* @stable ICU 2.0
*/
inline UBool operator!= (const UnicodeString& text) const;
@@ -338,8 +338,8 @@ public:
/**
* Greater than operator. Performs only bitwise comparison.
* @param text The UnicodeString to compare to this one.
- * @return TRUE if the characters in this are bitwise
- * greater than the characters in `text`, FALSE otherwise
+ * @return true if the characters in this are bitwise
+ * greater than the characters in `text`, false otherwise
* @stable ICU 2.0
*/
inline UBool operator> (const UnicodeString& text) const;
@@ -347,8 +347,8 @@ public:
/**
* Less than operator. Performs only bitwise comparison.
* @param text The UnicodeString to compare to this one.
- * @return TRUE if the characters in this are bitwise
- * less than the characters in `text`, FALSE otherwise
+ * @return true if the characters in this are bitwise
+ * less than the characters in `text`, false otherwise
* @stable ICU 2.0
*/
inline UBool operator< (const UnicodeString& text) const;
@@ -356,8 +356,8 @@ public:
/**
* Greater than or equal operator. Performs only bitwise comparison.
* @param text The UnicodeString to compare to this one.
- * @return TRUE if the characters in this are bitwise
- * greater than or equal to the characters in `text`, FALSE otherwise
+ * @return true if the characters in this are bitwise
+ * greater than or equal to the characters in `text`, false otherwise
* @stable ICU 2.0
*/
inline UBool operator>= (const UnicodeString& text) const;
@@ -365,8 +365,8 @@ public:
/**
* Less than or equal operator. Performs only bitwise comparison.
* @param text The UnicodeString to compare to this one.
- * @return TRUE if the characters in this are bitwise
- * less than or equal to the characters in `text`, FALSE otherwise
+ * @return true if the characters in this are bitwise
+ * less than or equal to the characters in `text`, false otherwise
* @stable ICU 2.0
*/
inline UBool operator<= (const UnicodeString& text) const;
@@ -855,8 +855,8 @@ public:
/**
* Determine if this starts with the characters in `text`
* @param text The text to match.
- * @return TRUE if this starts with the characters in `text`,
- * FALSE otherwise
+ * @return true if this starts with the characters in `text`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool startsWith(const UnicodeString& text) const;
@@ -867,8 +867,8 @@ public:
* @param srcText The text to match.
* @param srcStart the offset into `srcText` to start matching
* @param srcLength the number of characters in `srcText` to match
- * @return TRUE if this starts with the characters in `text`,
- * FALSE otherwise
+ * @return true if this starts with the characters in `text`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool startsWith(const UnicodeString& srcText,
@@ -879,8 +879,8 @@ public:
* Determine if this starts with the characters in `srcChars`
* @param srcChars The characters to match.
* @param srcLength the number of characters in `srcChars`
- * @return TRUE if this starts with the characters in `srcChars`,
- * FALSE otherwise
+ * @return true if this starts with the characters in `srcChars`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool startsWith(ConstChar16Ptr srcChars,
@@ -892,7 +892,7 @@ public:
* @param srcChars The characters to match.
* @param srcStart the offset into `srcText` to start matching
* @param srcLength the number of characters in `srcChars` to match
- * @return TRUE if this ends with the characters in `srcChars`, FALSE otherwise
+ * @return true if this ends with the characters in `srcChars`, false otherwise
* @stable ICU 2.0
*/
inline UBool startsWith(const char16_t *srcChars,
@@ -902,8 +902,8 @@ public:
/**
* Determine if this ends with the characters in `text`
* @param text The text to match.
- * @return TRUE if this ends with the characters in `text`,
- * FALSE otherwise
+ * @return true if this ends with the characters in `text`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool endsWith(const UnicodeString& text) const;
@@ -914,8 +914,8 @@ public:
* @param srcText The text to match.
* @param srcStart the offset into `srcText` to start matching
* @param srcLength the number of characters in `srcText` to match
- * @return TRUE if this ends with the characters in `text`,
- * FALSE otherwise
+ * @return true if this ends with the characters in `text`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool endsWith(const UnicodeString& srcText,
@@ -926,8 +926,8 @@ public:
* Determine if this ends with the characters in `srcChars`
* @param srcChars The characters to match.
* @param srcLength the number of characters in `srcChars`
- * @return TRUE if this ends with the characters in `srcChars`,
- * FALSE otherwise
+ * @return true if this ends with the characters in `srcChars`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool endsWith(ConstChar16Ptr srcChars,
@@ -939,8 +939,8 @@ public:
* @param srcChars The characters to match.
* @param srcStart the offset into `srcText` to start matching
* @param srcLength the number of characters in `srcChars` to match
- * @return TRUE if this ends with the characters in `srcChars`,
- * FALSE otherwise
+ * @return true if this ends with the characters in `srcChars`,
+ * false otherwise
* @stable ICU 2.0
*/
inline UBool endsWith(const char16_t *srcChars,
@@ -1804,7 +1804,7 @@ public:
/**
* Determine if this string is empty.
- * @return TRUE if this string contains 0 characters, FALSE otherwise.
+ * @return true if this string contains 0 characters, false otherwise.
* @stable ICU 2.0
*/
inline UBool isEmpty(void) const;
@@ -1832,12 +1832,12 @@ public:
/**
* Determine if this object contains a valid string.
* A bogus string has no value. It is different from an empty string,
- * although in both cases isEmpty() returns TRUE and length() returns 0.
+ * although in both cases isEmpty() returns true and length() returns 0.
* setToBogus() and isBogus() can be used to indicate that no string value is available.
* For a bogus string, getBuffer() and getTerminatedBuffer() return NULL, and
* length() returns 0.
*
- * @return TRUE if the string is bogus/invalid, FALSE otherwise
+ * @return true if the string is bogus/invalid, false otherwise
* @see setToBogus()
* @stable ICU 2.0
*/
@@ -2067,7 +2067,7 @@ public:
/**
* Make this UnicodeString object invalid.
- * The string will test TRUE with isBogus().
+ * The string will test true with isBogus().
*
* A bogus string has no value. It is different from an empty string.
* It can be used to indicate that no string value is available.
@@ -2459,7 +2459,7 @@ public:
/**
* Replaceable API
- * @return TRUE if it has MetaData
+ * @return true if it has MetaData
* @stable ICU 2.4
*/
virtual UBool hasMetaData() const;
@@ -2590,7 +2590,7 @@ public:
* @param targetLength the desired length of the string
* @param padChar the character to use for padding. Defaults to
* space (U+0020)
- * @return TRUE if the text was padded, FALSE otherwise.
+ * @return true if the text was padded, false otherwise.
* @stable ICU 2.0
*/
UBool padLeading(int32_t targetLength,
@@ -2604,7 +2604,7 @@ public:
* @param targetLength the desired length of the string
* @param padChar the character to use for padding. Defaults to
* space (U+0020)
- * @return TRUE if the text was padded, FALSE otherwise.
+ * @return true if the text was padded, false otherwise.
* @stable ICU 2.0
*/
UBool padTrailing(int32_t targetLength,
@@ -2613,7 +2613,7 @@ public:
/**
* Truncate this UnicodeString to the `targetLength`.
* @param targetLength the desired length of this UnicodeString.
- * @return TRUE if the text was truncated, FALSE otherwise
+ * @return true if the text was truncated, false otherwise
* @stable ICU 2.0
*/
inline UBool truncate(int32_t targetLength);
@@ -3615,7 +3615,7 @@ private:
void unBogus();
// implements assigment operator, copy constructor, and fastCopyFrom()
- UnicodeString &copyFrom(const UnicodeString &src, UBool fastCopy=FALSE);
+ UnicodeString &copyFrom(const UnicodeString &src, UBool fastCopy=false);
// Copies just the fields without memory management.
void copyFieldsFrom(UnicodeString &src, UBool setSrcToBogus) U_NOEXCEPT;
@@ -3668,13 +3668,13 @@ private:
* the buffer is refCounted (shared), and refCount>1, or
* the buffer is too small.
*
- * Return FALSE if memory could not be allocated.
+ * Return false if memory could not be allocated.
*/
UBool cloneArrayIfNeeded(int32_t newCapacity = -1,
int32_t growCapacity = -1,
- UBool doCopyArray = TRUE,
+ UBool doCopyArray = true,
int32_t **pBufferToDelete = 0,
- UBool forceClone = FALSE);
+ UBool forceClone = false);
/**
* Common function for UnicodeString case mappings.
@@ -4732,12 +4732,12 @@ UnicodeString::truncate(int32_t targetLength)
if(isBogus() && targetLength == 0) {
// truncate(0) of a bogus string makes the string empty and non-bogus
unBogus();
- return FALSE;
+ return false;
} else if((uint32_t)targetLength < (uint32_t)length()) {
setLength(targetLength);
- return TRUE;
+ return true;
} else {
- return FALSE;
+ return false;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h b/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
index 09dd366a968..c3c57582d44 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
@@ -274,7 +274,7 @@ unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength,
* never a "maybe".
* For NFD, NFKD, and FCD, both functions work exactly the same.
* For NFC and NFKC where quickCheck may return "maybe", this function will
- * perform further tests to arrive at a TRUE/FALSE result.
+ * perform further tests to arrive at a true/false result.
*
* @param src String that is to be tested if it is in a normalization format.
* @param srcLength Length of source to test, or -1 if NUL-terminated.
@@ -358,10 +358,10 @@ unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength,
* It is useful for operations like a normalizing transliterator, where one would
* not want to replace a piece of text if it is not modified.
*
- * If doNormalize==TRUE and pNeededToNormalize!=NULL then *pNeeded... is set TRUE
+ * If doNormalize==true and pNeededToNormalize!=NULL then *pNeeded... is set true
* if the normalization was necessary.
*
- * If doNormalize==FALSE then *pNeededToNormalize will be set to FALSE.
+ * If doNormalize==false then *pNeededToNormalize will be set to false.
*
* If the buffer overflows, then *pNeededToNormalize will be undefined;
* essentially, whenever U_FAILURE is true (like in buffer overflows), this result
@@ -373,11 +373,11 @@ unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength,
* @param mode The normalization mode.
* @param options The normalization options, ORed together (0 for no options).
* @param doNormalize Indicates if the source text up to the next boundary
- * is to be normalized (TRUE) or just copied (FALSE).
+ * is to be normalized (true) or just copied (false).
* @param pNeededToNormalize Output flag indicating if the normalization resulted in
* different text from the input.
* Not defined if an error occurs including buffer overflow.
- * Always FALSE if !doNormalize.
+ * Always false if !doNormalize.
* @param pErrorCode ICU error code in/out parameter.
* Must fulfill U_SUCCESS before the function call.
* @return Length of output (number of UChars) when successful or buffer overflow.
@@ -406,11 +406,11 @@ unorm_next(UCharIterator *src,
* @param mode The normalization mode.
* @param options The normalization options, ORed together (0 for no options).
* @param doNormalize Indicates if the source text up to the next boundary
- * is to be normalized (TRUE) or just copied (FALSE).
+ * is to be normalized (true) or just copied (false).
* @param pNeededToNormalize Output flag indicating if the normalization resulted in
* different text from the input.
* Not defined if an error occurs including buffer overflow.
- * Always FALSE if !doNormalize.
+ * Always false if !doNormalize.
* @param pErrorCode ICU error code in/out parameter.
* Must fulfill U_SUCCESS before the function call.
* @return Length of output (number of UChars) when successful or buffer overflow.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h b/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h
index a9bd02f2563..24417b7103c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h
@@ -31,10 +31,13 @@
*/
#include "unicode/utypes.h"
-#include "unicode/localpointer.h"
#include "unicode/stringoptions.h"
#include "unicode/uset.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* Constants for normalization modes.
* For details about standard Unicode normalization forms
@@ -132,7 +135,7 @@ typedef struct UNormalizer2 UNormalizer2; /**< C typedef for struct UNormalizer
* @return the requested Normalizer2, if successful
* @stable ICU 49
*/
-U_STABLE const UNormalizer2 * U_EXPORT2
+U_CAPI const UNormalizer2 * U_EXPORT2
unorm2_getNFCInstance(UErrorCode *pErrorCode);
/**
@@ -146,7 +149,7 @@ unorm2_getNFCInstance(UErrorCode *pErrorCode);
* @return the requested Normalizer2, if successful
* @stable ICU 49
*/
-U_STABLE const UNormalizer2 * U_EXPORT2
+U_CAPI const UNormalizer2 * U_EXPORT2
unorm2_getNFDInstance(UErrorCode *pErrorCode);
/**
@@ -160,7 +163,7 @@ unorm2_getNFDInstance(UErrorCode *pErrorCode);
* @return the requested Normalizer2, if successful
* @stable ICU 49
*/
-U_STABLE const UNormalizer2 * U_EXPORT2
+U_CAPI const UNormalizer2 * U_EXPORT2
unorm2_getNFKCInstance(UErrorCode *pErrorCode);
/**
@@ -174,7 +177,7 @@ unorm2_getNFKCInstance(UErrorCode *pErrorCode);
* @return the requested Normalizer2, if successful
* @stable ICU 49
*/
-U_STABLE const UNormalizer2 * U_EXPORT2
+U_CAPI const UNormalizer2 * U_EXPORT2
unorm2_getNFKDInstance(UErrorCode *pErrorCode);
/**
@@ -188,7 +191,7 @@ unorm2_getNFKDInstance(UErrorCode *pErrorCode);
* @return the requested Normalizer2, if successful
* @stable ICU 49
*/
-U_STABLE const UNormalizer2 * U_EXPORT2
+U_CAPI const UNormalizer2 * U_EXPORT2
unorm2_getNFKCCasefoldInstance(UErrorCode *pErrorCode);
/**
@@ -212,7 +215,7 @@ unorm2_getNFKCCasefoldInstance(UErrorCode *pErrorCode);
* @return the requested UNormalizer2, if successful
* @stable ICU 4.4
*/
-U_STABLE const UNormalizer2 * U_EXPORT2
+U_CAPI const UNormalizer2 * U_EXPORT2
unorm2_getInstance(const char *packageName,
const char *name,
UNormalization2Mode mode,
@@ -233,7 +236,7 @@ unorm2_getInstance(const char *packageName,
* @return the requested UNormalizer2, if successful
* @stable ICU 4.4
*/
-U_STABLE UNormalizer2 * U_EXPORT2
+U_CAPI UNormalizer2 * U_EXPORT2
unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode *pErrorCode);
/**
@@ -242,7 +245,7 @@ unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode
* @param norm2 UNormalizer2 instance to be closed
* @stable ICU 4.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unorm2_close(UNormalizer2 *norm2);
#if U_SHOW_CPLUSPLUS_API
@@ -280,7 +283,7 @@ U_NAMESPACE_END
* @return dest
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm2_normalize(const UNormalizer2 *norm2,
const UChar *src, int32_t length,
UChar *dest, int32_t capacity,
@@ -303,7 +306,7 @@ unorm2_normalize(const UNormalizer2 *norm2,
* @return first
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2,
UChar *first, int32_t firstLength, int32_t firstCapacity,
const UChar *second, int32_t secondLength,
@@ -326,7 +329,7 @@ unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2,
* @return first
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm2_append(const UNormalizer2 *norm2,
UChar *first, int32_t firstLength, int32_t firstCapacity,
const UChar *second, int32_t secondLength,
@@ -351,7 +354,7 @@ unorm2_append(const UNormalizer2 *norm2,
* @return the non-negative length of c's decomposition, if there is one; otherwise a negative value
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm2_getDecomposition(const UNormalizer2 *norm2,
UChar32 c, UChar *decomposition, int32_t capacity,
UErrorCode *pErrorCode);
@@ -385,7 +388,7 @@ unorm2_getDecomposition(const UNormalizer2 *norm2,
* @return the non-negative length of c's raw decomposition, if there is one; otherwise a negative value
* @stable ICU 49
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm2_getRawDecomposition(const UNormalizer2 *norm2,
UChar32 c, UChar *decomposition, int32_t capacity,
UErrorCode *pErrorCode);
@@ -405,7 +408,7 @@ unorm2_getRawDecomposition(const UNormalizer2 *norm2,
* @return The non-negative composite code point if there is one; otherwise a negative value.
* @stable ICU 49
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
unorm2_composePair(const UNormalizer2 *norm2, UChar32 a, UChar32 b);
/**
@@ -417,7 +420,7 @@ unorm2_composePair(const UNormalizer2 *norm2, UChar32 a, UChar32 b);
* @return c's combining class
* @stable ICU 49
*/
-U_STABLE uint8_t U_EXPORT2
+U_CAPI uint8_t U_EXPORT2
unorm2_getCombiningClass(const UNormalizer2 *norm2, UChar32 c);
/**
@@ -433,10 +436,10 @@ unorm2_getCombiningClass(const UNormalizer2 *norm2, UChar32 c);
* pass the U_SUCCESS() test, or else the function returns
* immediately. Check for U_FAILURE() on output or use with
* function chaining. (See User Guide for details.)
- * @return TRUE if s is normalized
+ * @return true if s is normalized
* @stable ICU 4.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
unorm2_isNormalized(const UNormalizer2 *norm2,
const UChar *s, int32_t length,
UErrorCode *pErrorCode);
@@ -458,7 +461,7 @@ unorm2_isNormalized(const UNormalizer2 *norm2,
* @return UNormalizationCheckResult
* @stable ICU 4.4
*/
-U_STABLE UNormalizationCheckResult U_EXPORT2
+U_CAPI UNormalizationCheckResult U_EXPORT2
unorm2_quickCheck(const UNormalizer2 *norm2,
const UChar *s, int32_t length,
UErrorCode *pErrorCode);
@@ -487,7 +490,7 @@ unorm2_quickCheck(const UNormalizer2 *norm2,
* @return "yes" span end index
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm2_spanQuickCheckYes(const UNormalizer2 *norm2,
const UChar *s, int32_t length,
UErrorCode *pErrorCode);
@@ -498,10 +501,10 @@ unorm2_spanQuickCheckYes(const UNormalizer2 *norm2,
* For details see the Normalizer2 base class documentation.
* @param norm2 UNormalizer2 instance
* @param c character to test
- * @return TRUE if c has a normalization boundary before it
+ * @return true if c has a normalization boundary before it
* @stable ICU 4.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c);
/**
@@ -510,10 +513,10 @@ unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c);
* For details see the Normalizer2 base class documentation.
* @param norm2 UNormalizer2 instance
* @param c character to test
- * @return TRUE if c has a normalization boundary after it
+ * @return true if c has a normalization boundary after it
* @stable ICU 4.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c);
/**
@@ -521,10 +524,10 @@ unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c);
* For details see the Normalizer2 base class documentation.
* @param norm2 UNormalizer2 instance
* @param c character to test
- * @return TRUE if c is normalization-inert
+ * @return true if c is normalization-inert
* @stable ICU 4.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
unorm2_isInert(const UNormalizer2 *norm2, UChar32 c);
/**
@@ -593,7 +596,7 @@ unorm2_isInert(const UNormalizer2 *norm2, UChar32 c);
*
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unorm_compare(const UChar *s1, int32_t length1,
const UChar *s2, int32_t length2,
uint32_t options,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/urename.h b/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
index e302bf0976e..fe59fdd893d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
@@ -130,11 +130,11 @@
#define izrule_getStaticClassID U_ICU_ENTRY_POINT_RENAME(izrule_getStaticClassID)
#define izrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(izrule_isEquivalentTo)
#define izrule_open U_ICU_ENTRY_POINT_RENAME(izrule_open)
-#define locale_getKeywords U_ICU_ENTRY_POINT_RENAME(locale_getKeywords)
#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
#define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default)
#define locale_set_default U_ICU_ENTRY_POINT_RENAME(locale_set_default)
#define numSysCleanup U_ICU_ENTRY_POINT_RENAME(numSysCleanup)
+#define rbbi_cleanup U_ICU_ENTRY_POINT_RENAME(rbbi_cleanup)
#define pl_addFontRun U_ICU_ENTRY_POINT_RENAME(pl_addFontRun)
#define pl_addLocaleRun U_ICU_ENTRY_POINT_RENAME(pl_addLocaleRun)
#define pl_addValueRun U_ICU_ENTRY_POINT_RENAME(pl_addValueRun)
@@ -192,13 +192,10 @@
#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource)
#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias)
#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem)
-#define res_getBinary U_ICU_ENTRY_POINT_RENAME(res_getBinary)
#define res_getBinaryNoTrace U_ICU_ENTRY_POINT_RENAME(res_getBinaryNoTrace)
-#define res_getIntVector U_ICU_ENTRY_POINT_RENAME(res_getIntVector)
#define res_getIntVectorNoTrace U_ICU_ENTRY_POINT_RENAME(res_getIntVectorNoTrace)
#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType)
#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource)
-#define res_getString U_ICU_ENTRY_POINT_RENAME(res_getString)
#define res_getStringNoTrace U_ICU_ENTRY_POINT_RENAME(res_getStringNoTrace)
#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex)
#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey)
@@ -206,6 +203,7 @@
#define res_read U_ICU_ENTRY_POINT_RENAME(res_read)
#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
+#define u_asciiToUpper U_ICU_ENTRY_POINT_RENAME(u_asciiToUpper)
#define u_austrcpy U_ICU_ENTRY_POINT_RENAME(u_austrcpy)
#define u_austrncpy U_ICU_ENTRY_POINT_RENAME(u_austrncpy)
#define u_caseInsensitivePrefixMatch U_ICU_ENTRY_POINT_RENAME(u_caseInsensitivePrefixMatch)
@@ -899,6 +897,7 @@
#define udatpg_getBestPatternWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPatternWithOptions)
#define udatpg_getDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormat)
#define udatpg_getDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_getDecimal)
+#define udatpg_getDefaultHourCycle U_ICU_ENTRY_POINT_RENAME(udatpg_getDefaultHourCycle)
#define udatpg_getFieldDisplayName U_ICU_ENTRY_POINT_RENAME(udatpg_getFieldDisplayName)
#define udatpg_getPatternForSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getPatternForSkeleton)
#define udatpg_getSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getSkeleton)
@@ -916,10 +915,13 @@
#define udtitvfmt_close U_ICU_ENTRY_POINT_RENAME(udtitvfmt_close)
#define udtitvfmt_closeResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_closeResult)
#define udtitvfmt_format U_ICU_ENTRY_POINT_RENAME(udtitvfmt_format)
+#define udtitvfmt_formatCalendarToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatCalendarToResult)
#define udtitvfmt_formatToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatToResult)
+#define udtitvfmt_getContext U_ICU_ENTRY_POINT_RENAME(udtitvfmt_getContext)
#define udtitvfmt_open U_ICU_ENTRY_POINT_RENAME(udtitvfmt_open)
#define udtitvfmt_openResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_openResult)
#define udtitvfmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(udtitvfmt_resultAsValue)
+#define udtitvfmt_setContext U_ICU_ENTRY_POINT_RENAME(udtitvfmt_setContext)
#define uenum_close U_ICU_ENTRY_POINT_RENAME(uenum_close)
#define uenum_count U_ICU_ENTRY_POINT_RENAME(uenum_count)
#define uenum_next U_ICU_ENTRY_POINT_RENAME(uenum_next)
@@ -1056,6 +1058,7 @@
#define ulistfmt_format U_ICU_ENTRY_POINT_RENAME(ulistfmt_format)
#define ulistfmt_formatStringsToResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_formatStringsToResult)
#define ulistfmt_open U_ICU_ENTRY_POINT_RENAME(ulistfmt_open)
+#define ulistfmt_openForType U_ICU_ENTRY_POINT_RENAME(ulistfmt_openForType)
#define ulistfmt_openResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_openResult)
#define ulistfmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(ulistfmt_resultAsValue)
#define uloc_acceptLanguage U_ICU_ENTRY_POINT_RENAME(uloc_acceptLanguage)
@@ -1077,7 +1080,6 @@
#define uloc_getDisplayLanguage U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayLanguage)
#define uloc_getDisplayName U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayName)
#define uloc_getDisplayScript U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScript)
-#define uloc_getDisplayScriptInContext U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScriptInContext)
#define uloc_getDisplayVariant U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayVariant)
#define uloc_getISO3Country U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Country)
#define uloc_getISO3Language U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Language)
@@ -1117,17 +1119,25 @@
#define ulocdata_open U_ICU_ENTRY_POINT_RENAME(ulocdata_open)
#define ulocdata_setNoSubstitute U_ICU_ENTRY_POINT_RENAME(ulocdata_setNoSubstitute)
#define ulocimp_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_addLikelySubtags)
+#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
+#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
#define ulocimp_getCountry U_ICU_ENTRY_POINT_RENAME(ulocimp_getCountry)
+#define ulocimp_getKeywordValue U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywordValue)
+#define ulocimp_getKeywords U_ICU_ENTRY_POINT_RENAME(ulocimp_getKeywords)
+#define ulocimp_getKnownCanonicalizedLocaleForTest U_ICU_ENTRY_POINT_RENAME(ulocimp_getKnownCanonicalizedLocaleForTest)
#define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage)
+#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
#define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData)
#define ulocimp_getScript U_ICU_ENTRY_POINT_RENAME(ulocimp_getScript)
+#define ulocimp_isCanonicalizedLocaleForTest U_ICU_ENTRY_POINT_RENAME(ulocimp_isCanonicalizedLocaleForTest)
#define ulocimp_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_minimizeSubtags)
#define ulocimp_toBcpKey U_ICU_ENTRY_POINT_RENAME(ulocimp_toBcpKey)
#define ulocimp_toBcpType U_ICU_ENTRY_POINT_RENAME(ulocimp_toBcpType)
#define ulocimp_toLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_toLanguageTag)
#define ulocimp_toLegacyKey U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyKey)
#define ulocimp_toLegacyType U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyType)
+#define ultag_getTKeyStart U_ICU_ENTRY_POINT_RENAME(ultag_getTKeyStart)
#define ultag_isExtensionSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isExtensionSubtags)
#define ultag_isLanguageSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isLanguageSubtag)
#define ultag_isPrivateuseValueSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isPrivateuseValueSubtags)
@@ -1240,7 +1250,18 @@
#define unumf_resultAsValue U_ICU_ENTRY_POINT_RENAME(unumf_resultAsValue)
#define unumf_resultGetAllFieldPositions U_ICU_ENTRY_POINT_RENAME(unumf_resultGetAllFieldPositions)
#define unumf_resultNextFieldPosition U_ICU_ENTRY_POINT_RENAME(unumf_resultNextFieldPosition)
+#define unumf_resultToDecimalNumber U_ICU_ENTRY_POINT_RENAME(unumf_resultToDecimalNumber)
#define unumf_resultToString U_ICU_ENTRY_POINT_RENAME(unumf_resultToString)
+#define unumrf_close U_ICU_ENTRY_POINT_RENAME(unumrf_close)
+#define unumrf_closeResult U_ICU_ENTRY_POINT_RENAME(unumrf_closeResult)
+#define unumrf_formatDecimalRange U_ICU_ENTRY_POINT_RENAME(unumrf_formatDecimalRange)
+#define unumrf_formatDoubleRange U_ICU_ENTRY_POINT_RENAME(unumrf_formatDoubleRange)
+#define unumrf_openForSkeletonWithCollapseAndIdentityFallback U_ICU_ENTRY_POINT_RENAME(unumrf_openForSkeletonWithCollapseAndIdentityFallback)
+#define unumrf_openResult U_ICU_ENTRY_POINT_RENAME(unumrf_openResult)
+#define unumrf_resultAsValue U_ICU_ENTRY_POINT_RENAME(unumrf_resultAsValue)
+#define unumrf_resultGetFirstDecimalNumber U_ICU_ENTRY_POINT_RENAME(unumrf_resultGetFirstDecimalNumber)
+#define unumrf_resultGetIdentityResult U_ICU_ENTRY_POINT_RENAME(unumrf_resultGetIdentityResult)
+#define unumrf_resultGetSecondDecimalNumber U_ICU_ENTRY_POINT_RENAME(unumrf_resultGetSecondDecimalNumber)
#define unumsys_close U_ICU_ENTRY_POINT_RENAME(unumsys_close)
#define unumsys_getDescription U_ICU_ENTRY_POINT_RENAME(unumsys_getDescription)
#define unumsys_getName U_ICU_ENTRY_POINT_RENAME(unumsys_getName)
@@ -1254,6 +1275,7 @@
#define uplrules_open U_ICU_ENTRY_POINT_RENAME(uplrules_open)
#define uplrules_openForType U_ICU_ENTRY_POINT_RENAME(uplrules_openForType)
#define uplrules_select U_ICU_ENTRY_POINT_RENAME(uplrules_select)
+#define uplrules_selectForRange U_ICU_ENTRY_POINT_RENAME(uplrules_selectForRange)
#define uplrules_selectFormatted U_ICU_ENTRY_POINT_RENAME(uplrules_selectFormatted)
#define uplrules_selectWithFormat U_ICU_ENTRY_POINT_RENAME(uplrules_selectWithFormat)
#define uplug_closeLibrary U_ICU_ENTRY_POINT_RENAME(uplug_closeLibrary)
@@ -1298,7 +1320,6 @@
#define uprv_convertToPosix U_ICU_ENTRY_POINT_RENAME(uprv_convertToPosix)
#define uprv_copyAscii U_ICU_ENTRY_POINT_RENAME(uprv_copyAscii)
#define uprv_copyEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_copyEbcdic)
-#define uprv_currencyLeads U_ICU_ENTRY_POINT_RENAME(uprv_currencyLeads)
#define uprv_decContextClearStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextClearStatus)
#define uprv_decContextDefault U_ICU_ENTRY_POINT_RENAME(uprv_decContextDefault)
#define uprv_decContextGetRounding U_ICU_ENTRY_POINT_RENAME(uprv_decContextGetRounding)
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ures.h b/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
index 839779fada8..fff84043e84 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
@@ -27,7 +27,10 @@
#include "unicode/utypes.h"
#include "unicode/uloc.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -163,7 +166,7 @@ typedef enum {
* @see ures_close
* @stable ICU 2.0
*/
-U_STABLE UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_open(const char* packageName,
const char* locale,
UErrorCode* status);
@@ -186,7 +189,7 @@ ures_open(const char* packageName,
* @see ures_close
* @stable ICU 2.0
*/
-U_STABLE UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_openDirect(const char* packageName,
const char* locale,
UErrorCode* status);
@@ -209,7 +212,7 @@ ures_openDirect(const char* packageName,
* @see ures_open
* @stable ICU 2.0
*/
-U_STABLE UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_openU(const UChar* packageName,
const char* locale,
UErrorCode* status);
@@ -245,7 +248,7 @@ ures_countArrayItems(const UResourceBundle* resourceBundle,
* @see ures_open
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_close(UResourceBundle* resourceBundle);
#if U_SHOW_CPLUSPLUS_API
@@ -291,7 +294,7 @@ ures_getVersionNumber(const UResourceBundle* resourceBundle);
* as specified in the resource bundle or its parent.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_getVersion(const UResourceBundle* resB,
UVersionInfo versionInfo);
@@ -325,7 +328,7 @@ ures_getLocale(const UResourceBundle* resourceBundle,
* @return A Locale name
* @stable ICU 2.8
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ures_getLocaleByType(const UResourceBundle* resourceBundle,
ULocDataLocaleType type,
UErrorCode* status);
@@ -348,7 +351,7 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle,
* @param status The error code.
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_openFillIn(UResourceBundle *r,
const char* packageName,
const char* localeID,
@@ -372,7 +375,7 @@ ures_openFillIn(UResourceBundle *r,
* @see ures_getUInt
* @stable ICU 2.0
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ures_getString(const UResourceBundle* resourceBundle,
int32_t* len,
UErrorCode* status);
@@ -383,10 +386,10 @@ ures_getString(const UResourceBundle* resourceBundle,
* it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
* or equivalent.
*
- * If forceCopy==TRUE, then the string is always written to the dest buffer
+ * If forceCopy==true, then the string is always written to the dest buffer
* and dest is returned.
*
- * If forceCopy==FALSE, then the string is returned as a pointer if possible,
+ * If forceCopy==false, then the string is returned as a pointer if possible,
* without needing a dest buffer (it can be NULL). If the string needs to be
* copied or transformed, then it may be placed into dest at an arbitrary offset.
*
@@ -404,10 +407,10 @@ ures_getString(const UResourceBundle* resourceBundle,
* terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
* Can be NULL, meaning capacity=0 and the string length is not
* returned to the caller.
- * @param forceCopy If TRUE, then the output string will always be written to
+ * @param forceCopy If true, then the output string will always be written to
* dest, with U_BUFFER_OVERFLOW_ERROR and
* U_STRING_NOT_TERMINATED_WARNING set if appropriate.
- * If FALSE, then the dest buffer may or may not contain a
+ * If false, then the dest buffer may or may not contain a
* copy of the string. dest may or may not be modified.
* If a copy needs to be written, then the UErrorCode parameter
* indicates overflow etc. as usual.
@@ -424,7 +427,7 @@ ures_getString(const UResourceBundle* resourceBundle,
* @see u_strToUTF8
* @stable ICU 3.6
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getUTF8String(const UResourceBundle *resB,
char *dest, int32_t *length,
UBool forceCopy,
@@ -447,7 +450,7 @@ ures_getUTF8String(const UResourceBundle *resB,
* @see ures_getUInt
* @stable ICU 2.0
*/
-U_STABLE const uint8_t* U_EXPORT2
+U_CAPI const uint8_t* U_EXPORT2
ures_getBinary(const UResourceBundle* resourceBundle,
int32_t* len,
UErrorCode* status);
@@ -469,7 +472,7 @@ ures_getBinary(const UResourceBundle* resourceBundle,
* @see ures_getUInt
* @stable ICU 2.0
*/
-U_STABLE const int32_t* U_EXPORT2
+U_CAPI const int32_t* U_EXPORT2
ures_getIntVector(const UResourceBundle* resourceBundle,
int32_t* len,
UErrorCode* status);
@@ -490,7 +493,7 @@ ures_getIntVector(const UResourceBundle* resourceBundle,
* @see ures_getString
* @stable ICU 2.0
*/
-U_STABLE uint32_t U_EXPORT2
+U_CAPI uint32_t U_EXPORT2
ures_getUInt(const UResourceBundle* resourceBundle,
UErrorCode *status);
@@ -510,7 +513,7 @@ ures_getUInt(const UResourceBundle* resourceBundle,
* @see ures_getString
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ures_getInt(const UResourceBundle* resourceBundle,
UErrorCode *status);
@@ -524,7 +527,7 @@ ures_getInt(const UResourceBundle* resourceBundle,
* @return number of resources in a given resource.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ures_getSize(const UResourceBundle *resourceBundle);
/**
@@ -535,7 +538,7 @@ ures_getSize(const UResourceBundle *resourceBundle);
* @see UResType
* @stable ICU 2.0
*/
-U_STABLE UResType U_EXPORT2
+U_CAPI UResType U_EXPORT2
ures_getType(const UResourceBundle *resourceBundle);
/**
@@ -546,7 +549,7 @@ ures_getType(const UResourceBundle *resourceBundle);
* @return a key associated to this resource, or NULL if it doesn't have a key
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getKey(const UResourceBundle *resourceBundle);
/* ITERATION API
@@ -559,17 +562,17 @@ ures_getKey(const UResourceBundle *resourceBundle);
* @param resourceBundle a resource
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_resetIterator(UResourceBundle *resourceBundle);
/**
* Checks whether the given resource has another element to iterate over.
*
* @param resourceBundle a resource
- * @return TRUE if there are more elements, FALSE if there is no more elements
+ * @return true if there are more elements, false if there is no more elements
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ures_hasNext(const UResourceBundle *resourceBundle);
/**
@@ -584,7 +587,7 @@ ures_hasNext(const UResourceBundle *resourceBundle);
* @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
* @stable ICU 2.0
*/
-U_STABLE UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_getNextResource(UResourceBundle *resourceBundle,
UResourceBundle *fillIn,
UErrorCode *status);
@@ -601,7 +604,7 @@ ures_getNextResource(UResourceBundle *resourceBundle,
* @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
* @stable ICU 2.0
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ures_getNextString(UResourceBundle *resourceBundle,
int32_t* len,
const char ** key,
@@ -619,7 +622,7 @@ ures_getNextString(UResourceBundle *resourceBundle,
* @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
* @stable ICU 2.0
*/
-U_STABLE UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_getByIndex(const UResourceBundle *resourceBundle,
int32_t indexR,
UResourceBundle *fillIn,
@@ -636,7 +639,7 @@ ures_getByIndex(const UResourceBundle *resourceBundle,
* @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
* @stable ICU 2.0
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ures_getStringByIndex(const UResourceBundle *resourceBundle,
int32_t indexS,
int32_t* len,
@@ -648,10 +651,10 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle,
* it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
* or equivalent.
*
- * If forceCopy==TRUE, then the string is always written to the dest buffer
+ * If forceCopy==true, then the string is always written to the dest buffer
* and dest is returned.
*
- * If forceCopy==FALSE, then the string is returned as a pointer if possible,
+ * If forceCopy==false, then the string is returned as a pointer if possible,
* without needing a dest buffer (it can be NULL). If the string needs to be
* copied or transformed, then it may be placed into dest at an arbitrary offset.
*
@@ -670,10 +673,10 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle,
* terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
* Can be NULL, meaning capacity=0 and the string length is not
* returned to the caller.
- * @param forceCopy If TRUE, then the output string will always be written to
+ * @param forceCopy If true, then the output string will always be written to
* dest, with U_BUFFER_OVERFLOW_ERROR and
* U_STRING_NOT_TERMINATED_WARNING set if appropriate.
- * If FALSE, then the dest buffer may or may not contain a
+ * If false, then the dest buffer may or may not contain a
* copy of the string. dest may or may not be modified.
* If a copy needs to be written, then the UErrorCode parameter
* indicates overflow etc. as usual.
@@ -690,7 +693,7 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle,
* @see u_strToUTF8
* @stable ICU 3.6
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getUTF8StringByIndex(const UResourceBundle *resB,
int32_t stringIndex,
char *dest, int32_t *pLength,
@@ -709,7 +712,7 @@ ures_getUTF8StringByIndex(const UResourceBundle *resB,
* @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
* @stable ICU 2.0
*/
-U_STABLE UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_getByKey(const UResourceBundle *resourceBundle,
const char* key,
UResourceBundle *fillIn,
@@ -727,7 +730,7 @@ ures_getByKey(const UResourceBundle *resourceBundle,
* @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
* @stable ICU 2.0
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ures_getStringByKey(const UResourceBundle *resB,
const char* key,
int32_t* len,
@@ -741,10 +744,10 @@ ures_getStringByKey(const UResourceBundle *resB,
* it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
* or equivalent.
*
- * If forceCopy==TRUE, then the string is always written to the dest buffer
+ * If forceCopy==true, then the string is always written to the dest buffer
* and dest is returned.
*
- * If forceCopy==FALSE, then the string is returned as a pointer if possible,
+ * If forceCopy==false, then the string is returned as a pointer if possible,
* without needing a dest buffer (it can be NULL). If the string needs to be
* copied or transformed, then it may be placed into dest at an arbitrary offset.
*
@@ -763,10 +766,10 @@ ures_getStringByKey(const UResourceBundle *resB,
* terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
* Can be NULL, meaning capacity=0 and the string length is not
* returned to the caller.
- * @param forceCopy If TRUE, then the output string will always be written to
+ * @param forceCopy If true, then the output string will always be written to
* dest, with U_BUFFER_OVERFLOW_ERROR and
* U_STRING_NOT_TERMINATED_WARNING set if appropriate.
- * If FALSE, then the dest buffer may or may not contain a
+ * If false, then the dest buffer may or may not contain a
* copy of the string. dest may or may not be modified.
* If a copy needs to be written, then the UErrorCode parameter
* indicates overflow etc. as usual.
@@ -783,7 +786,7 @@ ures_getStringByKey(const UResourceBundle *resB,
* @see u_strToUTF8
* @stable ICU 3.6
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ures_getUTF8StringByKey(const UResourceBundle *resB,
const char *key,
char *dest, int32_t *pLength,
@@ -811,7 +814,7 @@ ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) {
int32_t len = 0;
const UChar *r = ures_getString(resB, &len, status);
if(U_SUCCESS(*status)) {
- result.setTo(TRUE, r, len);
+ result.setTo(true, r, len);
} else {
result.setToBogus();
}
@@ -836,7 +839,7 @@ ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode*
int32_t len = 0;
const UChar* r = ures_getNextString(resB, &len, key, status);
if(U_SUCCESS(*status)) {
- result.setTo(TRUE, r, len);
+ result.setTo(true, r, len);
} else {
result.setToBogus();
}
@@ -858,7 +861,7 @@ ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UError
int32_t len = 0;
const UChar* r = ures_getStringByIndex(resB, indexS, &len, status);
if(U_SUCCESS(*status)) {
- result.setTo(TRUE, r, len);
+ result.setTo(true, r, len);
} else {
result.setToBogus();
}
@@ -881,7 +884,7 @@ ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorC
int32_t len = 0;
const UChar* r = ures_getStringByKey(resB, key, &len, status);
if(U_SUCCESS(*status)) {
- result.setTo(TRUE, r, len);
+ result.setTo(true, r, len);
} else {
result.setToBogus();
}
@@ -900,7 +903,7 @@ U_NAMESPACE_END
* @param status error code
* @stable ICU 3.2
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ures_openAvailableLocales(const char *packageName, UErrorCode *status);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h b/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
index c8babdf0306..8448afda761 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
@@ -475,6 +475,15 @@ typedef enum UScriptCode {
/** @stable ICU 64 */
USCRIPT_WANCHO = 188,/* Wcho */
+ /** @stable ICU 66 */
+ USCRIPT_CHORASMIAN = 189,/* Chrs */
+ /** @stable ICU 66 */
+ USCRIPT_DIVES_AKURU = 190,/* Diak */
+ /** @stable ICU 66 */
+ USCRIPT_KHITAN_SMALL_SCRIPT = 191,/* Kits */
+ /** @stable ICU 66 */
+ USCRIPT_YEZIDI = 192,/* Yezi */
+
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal UScriptCode value.
@@ -482,7 +491,7 @@ typedef enum UScriptCode {
*
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- USCRIPT_CODE_LIMIT = 189
+ USCRIPT_CODE_LIMIT = 193
#endif // U_HIDE_DEPRECATED_API
} UScriptCode;
@@ -505,7 +514,7 @@ typedef enum UScriptCode {
* @return The number of script codes filled in the buffer passed in
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uscript_getCode(const char* nameOrAbbrOrLocale,UScriptCode* fillIn,int32_t capacity,UErrorCode *err);
/**
@@ -518,7 +527,7 @@ uscript_getCode(const char* nameOrAbbrOrLocale,UScriptCode* fillIn,int32_t capac
* or NULL if scriptCode is invalid
* @stable ICU 2.4
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uscript_getName(UScriptCode scriptCode);
/**
@@ -530,7 +539,7 @@ uscript_getName(UScriptCode scriptCode);
* @return short script name (4-letter code), or NULL if scriptCode is invalid
* @stable ICU 2.4
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uscript_getShortName(UScriptCode scriptCode);
/**
@@ -541,7 +550,7 @@ uscript_getShortName(UScriptCode scriptCode);
* @return The UScriptCode, or 0 if codepoint is invalid
* @stable ICU 2.4
*/
-U_STABLE UScriptCode U_EXPORT2
+U_CAPI UScriptCode U_EXPORT2
uscript_getScript(UChar32 codepoint, UErrorCode *err);
/**
@@ -553,10 +562,10 @@ uscript_getScript(UChar32 codepoint, UErrorCode *err);
* For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
* @param c code point
* @param sc script code
- * @return TRUE if sc is in Script_Extensions(c)
+ * @return true if sc is in Script_Extensions(c)
* @stable ICU 49
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uscript_hasScript(UChar32 c, UScriptCode sc);
/**
@@ -588,7 +597,7 @@ uscript_hasScript(UChar32 c, UScriptCode sc);
* written to scripts unless U_BUFFER_OVERFLOW_ERROR indicates insufficient capacity
* @stable ICU 49
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uscript_getScriptExtensions(UChar32 c,
UScriptCode *scripts, int32_t capacity,
UErrorCode *errorCode);
@@ -627,7 +636,7 @@ typedef enum UScriptUsage {
* @return the string length, even if U_BUFFER_OVERFLOW_ERROR
* @stable ICU 51
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uscript_getSampleString(UScriptCode script, UChar *dest, int32_t capacity, UErrorCode *pErrorCode);
#if U_SHOW_CPLUSPLUS_API
@@ -659,41 +668,41 @@ uscript_getSampleUnicodeString(UScriptCode script);
* @see UScriptUsage
* @stable ICU 51
*/
-U_STABLE UScriptUsage U_EXPORT2
+U_CAPI UScriptUsage U_EXPORT2
uscript_getUsage(UScriptCode script);
/**
- * Returns TRUE if the script is written right-to-left.
+ * Returns true if the script is written right-to-left.
* For example, Arab and Hebr.
*
* @param script script code
- * @return TRUE if the script is right-to-left
+ * @return true if the script is right-to-left
* @stable ICU 51
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uscript_isRightToLeft(UScriptCode script);
/**
- * Returns TRUE if the script allows line breaks between letters (excluding hyphenation).
+ * Returns true if the script allows line breaks between letters (excluding hyphenation).
* Such a script typically requires dictionary-based line breaking.
* For example, Hani and Thai.
*
* @param script script code
- * @return TRUE if the script allows line breaks between letters
+ * @return true if the script allows line breaks between letters
* @stable ICU 51
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uscript_breaksBetweenLetters(UScriptCode script);
/**
- * Returns TRUE if in modern (or most recent) usage of the script case distinctions are customary.
+ * Returns true if in modern (or most recent) usage of the script case distinctions are customary.
* For example, Latn and Cyrl.
*
* @param script script code
- * @return TRUE if the script is cased
+ * @return true if the script is cased
* @stable ICU 51
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uscript_isCased(UScriptCode script);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uset.h b/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
index 18482c10e73..502ea8dc147 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
@@ -31,7 +31,10 @@
#include "unicode/utypes.h"
#include "unicode/uchar.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
#ifndef USET_DEFINED
@@ -158,7 +161,7 @@ typedef enum USetSpanCondition {
* Continues a span() while there is no set element at the current position.
* Increments by one code point at a time.
* Stops before the first set element (character or string).
- * (For code points only, this is like while contains(current)==FALSE).
+ * (For code points only, this is like while contains(current)==false).
*
* When span() returns, the substring between where it started and the position
* it returned consists only of characters that are not in the set,
@@ -169,7 +172,7 @@ typedef enum USetSpanCondition {
USET_SPAN_NOT_CONTAINED = 0,
/**
* Spans the longest substring that is a concatenation of set elements (characters or strings).
- * (For characters only, this is like while contains(current)==TRUE).
+ * (For characters only, this is like while contains(current)==true).
*
* When span() returns, the substring between where it started and the position
* it returned consists only of set elements (characters or strings) that are in the set.
@@ -185,7 +188,7 @@ typedef enum USetSpanCondition {
/**
* Continues a span() while there is a set element at the current position.
* Increments by the longest matching element at each position.
- * (For characters only, this is like while contains(current)==TRUE).
+ * (For characters only, this is like while contains(current)==true).
*
* When span() returns, the substring between where it started and the position
* it returned consists only of set elements (characters or strings) that are in the set.
@@ -260,7 +263,7 @@ typedef struct USerializedSet {
* it when done.
* @stable ICU 4.2
*/
-U_STABLE USet* U_EXPORT2
+U_CAPI USet* U_EXPORT2
uset_openEmpty(void);
/**
@@ -273,7 +276,7 @@ uset_openEmpty(void);
* it when done.
* @stable ICU 2.4
*/
-U_STABLE USet* U_EXPORT2
+U_CAPI USet* U_EXPORT2
uset_open(UChar32 start, UChar32 end);
/**
@@ -285,7 +288,7 @@ uset_open(UChar32 start, UChar32 end);
* @param ec the error code
* @stable ICU 2.4
*/
-U_STABLE USet* U_EXPORT2
+U_CAPI USet* U_EXPORT2
uset_openPattern(const UChar* pattern, int32_t patternLength,
UErrorCode* ec);
@@ -300,7 +303,7 @@ uset_openPattern(const UChar* pattern, int32_t patternLength,
* @param ec the error code
* @stable ICU 2.4
*/
-U_STABLE USet* U_EXPORT2
+U_CAPI USet* U_EXPORT2
uset_openPatternOptions(const UChar* pattern, int32_t patternLength,
uint32_t options,
UErrorCode* ec);
@@ -311,7 +314,7 @@ uset_openPatternOptions(const UChar* pattern, int32_t patternLength,
* @param set the object to dispose of
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_close(USet* set);
#if U_SHOW_CPLUSPLUS_API
@@ -342,19 +345,19 @@ U_NAMESPACE_END
* @see uset_cloneAsThawed
* @stable ICU 3.8
*/
-U_STABLE USet * U_EXPORT2
+U_CAPI USet * U_EXPORT2
uset_clone(const USet *set);
/**
* Determines whether the set has been frozen (made immutable) or not.
* See the ICU4J Freezable interface for details.
* @param set the set
- * @return TRUE/FALSE for whether the set has been frozen
+ * @return true/false for whether the set has been frozen
* @see uset_freeze
* @see uset_cloneAsThawed
* @stable ICU 3.8
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_isFrozen(const USet *set);
/**
@@ -371,7 +374,7 @@ uset_isFrozen(const USet *set);
* @see uset_cloneAsThawed
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_freeze(USet *set);
/**
@@ -384,7 +387,7 @@ uset_freeze(USet *set);
* @see uset_clone
* @stable ICU 3.8
*/
-U_STABLE USet * U_EXPORT2
+U_CAPI USet * U_EXPORT2
uset_cloneAsThawed(const USet *set);
/**
@@ -396,7 +399,7 @@ uset_cloneAsThawed(const USet *set);
* @param end last character in the set, inclusive
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_set(USet* set,
UChar32 start, UChar32 end);
@@ -421,7 +424,7 @@ uset_set(USet* set,
*
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_applyPattern(USet *set,
const UChar *pattern, int32_t patternLength,
uint32_t options,
@@ -449,7 +452,7 @@ uset_applyPattern(USet *set,
*
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_applyIntPropertyValue(USet* set,
UProperty prop, int32_t value, UErrorCode* ec);
@@ -488,7 +491,7 @@ uset_applyIntPropertyValue(USet* set,
*
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_applyPropertyAlias(USet* set,
const UChar *prop, int32_t propLength,
const UChar *value, int32_t valueLength,
@@ -503,7 +506,7 @@ uset_applyPropertyAlias(USet* set,
* @param pos the given position
* @stable ICU 3.2
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_resemblesPattern(const UChar *pattern, int32_t patternLength,
int32_t pos);
@@ -514,7 +517,7 @@ uset_resemblesPattern(const UChar *pattern, int32_t patternLength,
* @param set the set
* @param result the string to receive the rules, may be NULL
* @param resultCapacity the capacity of result, may be 0 if result is NULL
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \\uxxxx or
* \\Uxxxxxxxx. Unprintable characters are those other than
* U+000A, U+0020..U+007E.
@@ -522,7 +525,7 @@ uset_resemblesPattern(const UChar *pattern, int32_t patternLength,
* @return length of string, possibly larger than resultCapacity
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_toPattern(const USet* set,
UChar* result, int32_t resultCapacity,
UBool escapeUnprintable,
@@ -530,13 +533,13 @@ uset_toPattern(const USet* set,
/**
* Adds the given character to the given USet. After this call,
- * uset_contains(set, c) will return TRUE.
+ * uset_contains(set, c) will return true.
* A frozen set will not be modified.
* @param set the object to which to add the character
* @param c the character to add
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_add(USet* set, UChar32 c);
/**
@@ -551,31 +554,31 @@ uset_add(USet* set, UChar32 c);
* @param additionalSet the source set whose elements are to be added to this set.
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_addAll(USet* set, const USet *additionalSet);
/**
* Adds the given range of characters to the given USet. After this call,
- * uset_contains(set, start, end) will return TRUE.
+ * uset_contains(set, start, end) will return true.
* A frozen set will not be modified.
* @param set the object to which to add the character
* @param start the first character of the range to add, inclusive
* @param end the last character of the range to add, inclusive
* @stable ICU 2.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_addRange(USet* set, UChar32 start, UChar32 end);
/**
* Adds the given string to the given USet. After this call,
- * uset_containsString(set, str, strLen) will return TRUE.
+ * uset_containsString(set, str, strLen) will return true.
* A frozen set will not be modified.
* @param set the object to which to add the character
* @param str the string to add
* @param strLen the length of the string or -1 if null terminated.
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_addString(USet* set, const UChar* str, int32_t strLen);
/**
@@ -587,42 +590,42 @@ uset_addString(USet* set, const UChar* str, int32_t strLen);
* @param strLen the length of the string or -1 if null terminated.
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen);
/**
* Removes the given character from the given USet. After this call,
- * uset_contains(set, c) will return FALSE.
+ * uset_contains(set, c) will return false.
* A frozen set will not be modified.
* @param set the object from which to remove the character
* @param c the character to remove
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_remove(USet* set, UChar32 c);
/**
* Removes the given range of characters from the given USet. After this call,
- * uset_contains(set, start, end) will return FALSE.
+ * uset_contains(set, start, end) will return false.
* A frozen set will not be modified.
* @param set the object to which to add the character
* @param start the first character of the range to remove, inclusive
* @param end the last character of the range to remove, inclusive
* @stable ICU 2.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_removeRange(USet* set, UChar32 start, UChar32 end);
/**
* Removes the given string to the given USet. After this call,
- * uset_containsString(set, str, strLen) will return FALSE.
+ * uset_containsString(set, str, strLen) will return false.
* A frozen set will not be modified.
* @param set the object to which to add the character
* @param str the string to remove
* @param strLen the length of the string or -1 if null terminated.
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_removeString(USet* set, const UChar* str, int32_t strLen);
/**
@@ -636,7 +639,7 @@ uset_removeString(USet* set, const UChar* str, int32_t strLen);
* removed from this set
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_removeAll(USet* set, const USet* removeSet);
/**
@@ -653,7 +656,7 @@ uset_removeAll(USet* set, const USet* removeSet);
* to this set.
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_retain(USet* set, UChar32 start, UChar32 end);
/**
@@ -668,7 +671,7 @@ uset_retain(USet* set, UChar32 start, UChar32 end);
* @param retain set that defines which elements this set will retain
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_retainAll(USet* set, const USet* retain);
/**
@@ -679,7 +682,7 @@ uset_retainAll(USet* set, const USet* retain);
* @param set the object on which to perfrom the compact
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_compact(USet* set);
/**
@@ -690,7 +693,7 @@ uset_compact(USet* set);
* @param set the set
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_complement(USet* set);
/**
@@ -704,7 +707,7 @@ uset_complement(USet* set);
* from this set.
* @stable ICU 3.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_complementAll(USet* set, const USet* complement);
/**
@@ -714,7 +717,7 @@ uset_complementAll(USet* set, const USet* complement);
* @param set the set
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_clear(USet* set);
/**
@@ -743,7 +746,7 @@ uset_clear(USet* set);
* are ignored.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_closeOver(USet* set, int32_t attributes);
/**
@@ -752,51 +755,51 @@ uset_closeOver(USet* set, int32_t attributes);
* @param set the set
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_removeAllStrings(USet* set);
/**
- * Returns TRUE if the given USet contains no characters and no
+ * Returns true if the given USet contains no characters and no
* strings.
* @param set the set
* @return true if set is empty
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_isEmpty(const USet* set);
/**
- * Returns TRUE if the given USet contains the given character.
+ * Returns true if the given USet contains the given character.
* This function works faster with a frozen set.
* @param set the set
* @param c The codepoint to check for within the set
* @return true if set contains c
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_contains(const USet* set, UChar32 c);
/**
- * Returns TRUE if the given USet contains all characters c
+ * Returns true if the given USet contains all characters c
* where start <= c && c <= end.
* @param set the set
* @param start the first character of the range to test, inclusive
* @param end the last character of the range to test, inclusive
- * @return TRUE if set contains the range
+ * @return true if set contains the range
* @stable ICU 2.2
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_containsRange(const USet* set, UChar32 start, UChar32 end);
/**
- * Returns TRUE if the given USet contains the given string.
+ * Returns true if the given USet contains the given string.
* @param set the set
* @param str the string
* @param strLen the length of the string or -1 if null terminated.
* @return true if set contains str
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_containsString(const USet* set, const UChar* str, int32_t strLen);
/**
@@ -809,7 +812,7 @@ uset_containsString(const USet* set, const UChar* str, int32_t strLen);
* @return an index from 0..size()-1, or -1
* @stable ICU 3.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_indexOf(const USet* set, UChar32 c);
/**
@@ -822,7 +825,7 @@ uset_indexOf(const USet* set, UChar32 c);
* @return the character at the given index, or (UChar32)-1.
* @stable ICU 3.2
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
uset_charAt(const USet* set, int32_t charIndex);
/**
@@ -833,7 +836,7 @@ uset_charAt(const USet* set, int32_t charIndex);
* contained in set
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_size(const USet* set);
/**
@@ -844,7 +847,7 @@ uset_size(const USet* set);
* and/or strings contained in set
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_getItemCount(const USet* set);
/**
@@ -865,7 +868,7 @@ uset_getItemCount(const USet* set);
* itemIndex is out of range
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_getItem(const USet* set, int32_t itemIndex,
UChar32* start, UChar32* end,
UChar* str, int32_t strCapacity,
@@ -879,7 +882,7 @@ uset_getItem(const USet* set, int32_t itemIndex,
* @return true if the test condition is met
* @stable ICU 3.2
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_containsAll(const USet* set1, const USet* set2);
/**
@@ -892,7 +895,7 @@ uset_containsAll(const USet* set1, const USet* set2);
* @return true if the test condition is met
* @stable ICU 3.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen);
/**
@@ -903,7 +906,7 @@ uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen);
* @return true if the test condition is met
* @stable ICU 3.2
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_containsNone(const USet* set1, const USet* set2);
/**
@@ -914,7 +917,7 @@ uset_containsNone(const USet* set1, const USet* set2);
* @return true if the test condition is met
* @stable ICU 3.2
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_containsSome(const USet* set1, const USet* set2);
/**
@@ -936,7 +939,7 @@ uset_containsSome(const USet* set1, const USet* set2);
* @stable ICU 3.8
* @see USetSpanCondition
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition);
/**
@@ -957,7 +960,7 @@ uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spa
* @stable ICU 3.8
* @see USetSpanCondition
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition);
/**
@@ -979,7 +982,7 @@ uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition
* @stable ICU 3.8
* @see USetSpanCondition
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition);
/**
@@ -1000,7 +1003,7 @@ uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition
* @stable ICU 3.8
* @see USetSpanCondition
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition);
/**
@@ -1011,7 +1014,7 @@ uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondit
* @return true if the test condition is met
* @stable ICU 3.2
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_equals(const USet* set1, const USet* set2);
/*********************************************************************
@@ -1067,7 +1070,7 @@ uset_equals(const USet* set1, const USet* set2);
* than U_BUFFER_OVERFLOW_ERROR.
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode* pErrorCode);
/**
@@ -1078,7 +1081,7 @@ uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode
* @return true if the given array is valid, otherwise false
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcLength);
/**
@@ -1088,18 +1091,18 @@ uset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcL
* @param c The codepoint to set
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uset_setSerializedToOne(USerializedSet* fillSet, UChar32 c);
/**
- * Returns TRUE if the given USerializedSet contains the given
+ * Returns true if the given USerializedSet contains the given
* character.
* @param set the serialized set
* @param c The codepoint to check for within the set
* @return true if set contains c
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_serializedContains(const USerializedSet* set, UChar32 c);
/**
@@ -1111,7 +1114,7 @@ uset_serializedContains(const USerializedSet* set, UChar32 c);
* contained in set
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uset_getSerializedRangeCount(const USerializedSet* set);
/**
@@ -1127,7 +1130,7 @@ uset_getSerializedRangeCount(const USerializedSet* set);
* @return true if rangeIndex is valid, otherwise false
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex,
UChar32* pStart, UChar32* pEnd);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h b/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
index c6396fd76c7..a817ef72b3a 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
@@ -176,7 +176,7 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
* If there are no more elements in the set, return false.
*
* <p>
- * If <tt>isString() == TRUE</tt>, the value is a
+ * If <tt>isString() == true</tt>, the value is a
* string, otherwise the value is a
* single code point. Elements of either type can be retrieved
* with the function <tt>getString()</tt>, while elements of
@@ -197,7 +197,7 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
/**
* Returns the next element in the set, either a code point range
* or a string. If there are no more elements in the set, return
- * false. If <tt>isString() == TRUE</tt>, the value is a
+ * false. If <tt>isString() == true</tt>, the value is a
* string and can be accessed with <tt>getString()</tt>. Otherwise the value is a
* range of one or more code points from <tt>getCodepoint()</tt> to
* <tt>getCodepointeEnd()</tt> inclusive.
@@ -205,7 +205,7 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
* <p>The order of iteration is all code points ranges in sorted
* order, followed by all strings sorted order. Ranges are
* disjoint and non-contiguous. The value returned from <tt>getString()</tt>
- * is undefined unless <tt>isString() == TRUE</tt>. Do not mix calls to
+ * is undefined unless <tt>isString() == true</tt>. Do not mix calls to
* <tt>next()</tt> and <tt>nextRange()</tt> without calling
* <tt>reset()</tt> between them. The results of doing so are
* undefined.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h b/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
index 78b4d027a83..fed4869abdb 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
@@ -98,7 +98,7 @@
* the return value indicates the necessary destination buffer size.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_shapeArabic(const UChar *source, int32_t sourceLength,
UChar *dest, int32_t destSize,
uint32_t options,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/usprep.h b/Build/source/libs/icu/icu-src/source/common/unicode/usprep.h
index 914eb84871b..f8a0f58e0de 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/usprep.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/usprep.h
@@ -25,7 +25,10 @@
*/
#include "unicode/utypes.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
*
@@ -181,7 +184,7 @@ typedef enum UStringPrepProfileType {
* @see usprep_close()
* @stable ICU 2.8
*/
-U_STABLE UStringPrepProfile* U_EXPORT2
+U_CAPI UStringPrepProfile* U_EXPORT2
usprep_open(const char* path,
const char* fileName,
UErrorCode* status);
@@ -197,7 +200,7 @@ usprep_open(const char* path,
* @see usprep_close()
* @stable ICU 4.2
*/
-U_STABLE UStringPrepProfile* U_EXPORT2
+U_CAPI UStringPrepProfile* U_EXPORT2
usprep_openByType(UStringPrepProfileType type,
UErrorCode* status);
@@ -206,7 +209,7 @@ usprep_openByType(UStringPrepProfileType type,
* @param profile The profile to close
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
usprep_close(UStringPrepProfile* profile);
#if U_SHOW_CPLUSPLUS_API
@@ -257,7 +260,7 @@ U_NAMESPACE_END
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
usprep_prepare( const UStringPrepProfile* prep,
const UChar* src, int32_t srcLength,
UChar* dest, int32_t destCapacity,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h b/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
index 245b766545a..10ea45ead1d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
@@ -89,7 +89,7 @@
* @return The number of UChars in <code>chars</code>, minus the terminator.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strlen(const UChar *s);
/*@}*/
@@ -106,7 +106,7 @@ u_strlen(const UChar *s);
* @return The number of code points in the specified code units.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_countChar32(const UChar *s, int32_t length);
/**
@@ -127,7 +127,7 @@ u_countChar32(const UChar *s, int32_t length);
* than 'number'. Same as (u_countChar32(s, length)>number).
* @stable ICU 2.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number);
/**
@@ -140,7 +140,7 @@ u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number);
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strcat(UChar *dst,
const UChar *src);
@@ -158,7 +158,7 @@ u_strcat(UChar *dst,
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strncat(UChar *dst,
const UChar *src,
int32_t n);
@@ -183,7 +183,7 @@ u_strncat(UChar *dst,
* @see u_strFindFirst
* @see u_strFindLast
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strstr(const UChar *s, const UChar *substring);
/**
@@ -207,7 +207,7 @@ u_strstr(const UChar *s, const UChar *substring);
* @see u_strstr
* @see u_strFindLast
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strFindFirst(const UChar *s, int32_t length, const UChar *substring, int32_t subLength);
/**
@@ -227,7 +227,7 @@ u_strFindFirst(const UChar *s, int32_t length, const UChar *substring, int32_t s
* @see u_strstr
* @see u_strFindFirst
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strchr(const UChar *s, UChar c);
/**
@@ -247,7 +247,7 @@ u_strchr(const UChar *s, UChar c);
* @see u_strstr
* @see u_strFindFirst
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strchr32(const UChar *s, UChar32 c);
/**
@@ -270,7 +270,7 @@ u_strchr32(const UChar *s, UChar32 c);
* @see u_strFindFirst
* @see u_strFindLast
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strrstr(const UChar *s, const UChar *substring);
/**
@@ -294,7 +294,7 @@ u_strrstr(const UChar *s, const UChar *substring);
* @see u_strstr
* @see u_strFindLast
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strFindLast(const UChar *s, int32_t length, const UChar *substring, int32_t subLength);
/**
@@ -314,7 +314,7 @@ u_strFindLast(const UChar *s, int32_t length, const UChar *substring, int32_t su
* @see u_strrstr
* @see u_strFindLast
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strrchr(const UChar *s, UChar c);
/**
@@ -334,7 +334,7 @@ u_strrchr(const UChar *s, UChar c);
* @see u_strrstr
* @see u_strFindLast
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strrchr32(const UChar *s, UChar32 c);
/**
@@ -349,7 +349,7 @@ u_strrchr32(const UChar *s, UChar32 c);
* characters in <code>matchSet</code>, or NULL if no such character is found.
* @stable ICU 2.0
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strpbrk(const UChar *string, const UChar *matchSet);
/**
@@ -365,7 +365,7 @@ u_strpbrk(const UChar *string, const UChar *matchSet);
* @see u_strspn
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strcspn(const UChar *string, const UChar *matchSet);
/**
@@ -381,7 +381,7 @@ u_strcspn(const UChar *string, const UChar *matchSet);
* @see u_strcspn
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strspn(const UChar *string, const UChar *matchSet);
/**
@@ -409,7 +409,7 @@ u_strspn(const UChar *string, const UChar *matchSet);
* when there are no more tokens.
* @stable ICU 2.0
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strtok_r(UChar *src,
const UChar *delim,
UChar **saveState);
@@ -424,7 +424,7 @@ u_strtok_r(UChar *src,
* value if <code>s1</code> is bitwise greater than <code>s2</code>.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strcmp(const UChar *s1,
const UChar *s2);
@@ -439,7 +439,7 @@ u_strcmp(const UChar *s1,
* in code point order
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strcmpCodePointOrder(const UChar *s1, const UChar *s2);
/**
@@ -462,14 +462,14 @@ u_strcmpCodePointOrder(const UChar *s1, const UChar *s2);
* @param s2 Second source string.
* @param length2 Length of second source string, or -1 if NUL-terminated.
*
- * @param codePointOrder Choose between code unit order (FALSE)
- * and code point order (TRUE).
+ * @param codePointOrder Choose between code unit order (false)
+ * and code point order (true).
*
* @return <0 or 0 or >0 as usual for string comparisons
*
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strCompare(const UChar *s1, int32_t length1,
const UChar *s2, int32_t length2,
UBool codePointOrder);
@@ -485,8 +485,8 @@ u_strCompare(const UChar *s1, int32_t length1,
*
* @param iter1 First source string iterator.
* @param iter2 Second source string iterator.
- * @param codePointOrder Choose between code unit order (FALSE)
- * and code point order (TRUE).
+ * @param codePointOrder Choose between code unit order (false)
+ * and code point order (true).
*
* @return <0 or 0 or >0 as usual for string comparisons
*
@@ -494,7 +494,7 @@ u_strCompare(const UChar *s1, int32_t length1,
*
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrder);
/**
@@ -537,7 +537,7 @@ u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrde
*
* @stable ICU 2.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strCaseCompare(const UChar *s1, int32_t length1,
const UChar *s2, int32_t length2,
uint32_t options,
@@ -555,7 +555,7 @@ u_strCaseCompare(const UChar *s1, int32_t length1,
* value if <code>s1</code> is bitwise greater than <code>s2</code>.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strncmp(const UChar *ucs1,
const UChar *ucs2,
int32_t n);
@@ -573,7 +573,7 @@ u_strncmp(const UChar *ucs1,
* in code point order
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n);
/**
@@ -595,7 +595,7 @@ u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n);
* @return A negative, zero, or positive integer indicating the comparison result.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strcasecmp(const UChar *s1, const UChar *s2, uint32_t options);
/**
@@ -619,7 +619,7 @@ u_strcasecmp(const UChar *s1, const UChar *s2, uint32_t options);
* @return A negative, zero, or positive integer indicating the comparison result.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strncasecmp(const UChar *s1, const UChar *s2, int32_t n, uint32_t options);
/**
@@ -643,7 +643,7 @@ u_strncasecmp(const UChar *s1, const UChar *s2, int32_t n, uint32_t options);
* @return A negative, zero, or positive integer indicating the comparison result.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options);
/**
@@ -654,7 +654,7 @@ u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options)
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strcpy(UChar *dst,
const UChar *src);
@@ -669,7 +669,7 @@ u_strcpy(UChar *dst,
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strncpy(UChar *dst,
const UChar *src,
int32_t n);
@@ -686,7 +686,7 @@ u_strncpy(UChar *dst,
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2 u_uastrcpy(UChar *dst,
+U_CAPI UChar* U_EXPORT2 u_uastrcpy(UChar *dst,
const char *src );
/**
@@ -701,7 +701,7 @@ U_STABLE UChar* U_EXPORT2 u_uastrcpy(UChar *dst,
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2 u_uastrncpy(UChar *dst,
+U_CAPI UChar* U_EXPORT2 u_uastrncpy(UChar *dst,
const char *src,
int32_t n);
@@ -715,7 +715,7 @@ U_STABLE UChar* U_EXPORT2 u_uastrncpy(UChar *dst,
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE char* U_EXPORT2 u_austrcpy(char *dst,
+U_CAPI char* U_EXPORT2 u_austrcpy(char *dst,
const UChar *src );
/**
@@ -730,7 +730,7 @@ U_STABLE char* U_EXPORT2 u_austrcpy(char *dst,
* @return A pointer to <code>dst</code>.
* @stable ICU 2.0
*/
-U_STABLE char* U_EXPORT2 u_austrncpy(char *dst,
+U_CAPI char* U_EXPORT2 u_austrncpy(char *dst,
const UChar *src,
int32_t n );
@@ -744,7 +744,7 @@ U_STABLE char* U_EXPORT2 u_austrncpy(char *dst,
* @return A pointer to <code>dest</code>
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memcpy(UChar *dest, const UChar *src, int32_t count);
/**
@@ -755,7 +755,7 @@ u_memcpy(UChar *dest, const UChar *src, int32_t count);
* @return A pointer to <code>dest</code>
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memmove(UChar *dest, const UChar *src, int32_t count);
/**
@@ -767,7 +767,7 @@ u_memmove(UChar *dest, const UChar *src, int32_t count);
* @return A pointer to <code>dest</code>.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memset(UChar *dest, UChar c, int32_t count);
/**
@@ -781,7 +781,7 @@ u_memset(UChar *dest, UChar c, int32_t count);
* When buf1 > buf2, a positive number is returned.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_memcmp(const UChar *buf1, const UChar *buf2, int32_t count);
/**
@@ -797,7 +797,7 @@ u_memcmp(const UChar *buf1, const UChar *buf2, int32_t count);
* in code point order
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_memcmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t count);
/**
@@ -817,7 +817,7 @@ u_memcmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t count);
* @see u_memchr32
* @see u_strFindFirst
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memchr(const UChar *s, UChar c, int32_t count);
/**
@@ -837,7 +837,7 @@ u_memchr(const UChar *s, UChar c, int32_t count);
* @see u_memchr
* @see u_strFindFirst
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memchr32(const UChar *s, UChar32 c, int32_t count);
/**
@@ -857,7 +857,7 @@ u_memchr32(const UChar *s, UChar32 c, int32_t count);
* @see u_memrchr32
* @see u_strFindLast
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memrchr(const UChar *s, UChar c, int32_t count);
/**
@@ -877,7 +877,7 @@ u_memrchr(const UChar *s, UChar c, int32_t count);
* @see u_memrchr
* @see u_strFindLast
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_memrchr32(const UChar *s, UChar32 c, int32_t count);
/**
@@ -903,13 +903,13 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count);
*
* U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11);
* U_STRING_DECL(ustringVar2, "jumps 5%", 8);
- * static UBool didInit=FALSE;
+ * static UBool didInit=false;
*
* int32_t function() {
* if(!didInit) {
* U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11);
* U_STRING_INIT(ustringVar2, "jumps 5%", 8);
- * didInit=TRUE;
+ * didInit=true;
* }
* return u_strcmp(ustringVar1, ustringVar2);
* }
@@ -992,7 +992,7 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count);
* @see UnicodeString#unescapeAt()
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_unescape(const char *src,
UChar *dest, int32_t destCapacity);
@@ -1040,7 +1040,7 @@ U_CDECL_END
* @see UnicodeString#unescapeAt()
* @stable ICU 2.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_unescapeAt(UNESCAPE_CHAR_AT charAt,
int32_t *offset,
int32_t length,
@@ -1066,7 +1066,7 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
* only some of the result was written to the destination buffer.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strToUpper(UChar *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
const char *locale,
@@ -1092,7 +1092,7 @@ u_strToUpper(UChar *dest, int32_t destCapacity,
* only some of the result was written to the destination buffer.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strToLower(UChar *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
const char *locale,
@@ -1138,7 +1138,7 @@ u_strToLower(UChar *dest, int32_t destCapacity,
* only some of the result was written to the destination buffer.
* @stable ICU 2.1
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strToTitle(UChar *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
UBreakIterator *titleIter,
@@ -1171,7 +1171,7 @@ u_strToTitle(UChar *dest, int32_t destCapacity,
* only some of the result was written to the destination buffer.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_strFoldCase(UChar *dest, int32_t destCapacity,
const UChar *src, int32_t srcLength,
uint32_t options,
@@ -1200,7 +1200,7 @@ u_strFoldCase(UChar *dest, int32_t destCapacity,
* @return The pointer to destination buffer.
* @stable ICU 2.0
*/
-U_STABLE wchar_t* U_EXPORT2
+U_CAPI wchar_t* U_EXPORT2
u_strToWCS(wchar_t *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1229,7 +1229,7 @@ u_strToWCS(wchar_t *dest,
* @return The pointer to destination buffer.
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strFromWCS(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1260,7 +1260,7 @@ u_strFromWCS(UChar *dest,
* @see u_strToUTF8WithSub
* @see u_strFromUTF8
*/
-U_STABLE char* U_EXPORT2
+U_CAPI char* U_EXPORT2
u_strToUTF8(char *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1290,7 +1290,7 @@ u_strToUTF8(char *dest,
* @see u_strFromUTF8WithSub
* @see u_strFromUTF8Lenient
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strFromUTF8(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1333,7 +1333,7 @@ u_strFromUTF8(UChar *dest,
* @see u_strFromUTF8WithSub
* @stable ICU 3.6
*/
-U_STABLE char* U_EXPORT2
+U_CAPI char* U_EXPORT2
u_strToUTF8WithSub(char *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1378,7 +1378,7 @@ u_strToUTF8WithSub(char *dest,
* @see u_strToUTF8WithSub
* @stable ICU 3.6
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strFromUTF8WithSub(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1438,7 +1438,7 @@ u_strFromUTF8WithSub(UChar *dest,
* @see u_strToUTF8WithSub
* @stable ICU 3.6
*/
-U_STABLE UChar * U_EXPORT2
+U_CAPI UChar * U_EXPORT2
u_strFromUTF8Lenient(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1468,7 +1468,7 @@ u_strFromUTF8Lenient(UChar *dest,
* @see u_strFromUTF32
* @stable ICU 2.0
*/
-U_STABLE UChar32* U_EXPORT2
+U_CAPI UChar32* U_EXPORT2
u_strToUTF32(UChar32 *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1498,7 +1498,7 @@ u_strToUTF32(UChar32 *dest,
* @see u_strToUTF32
* @stable ICU 2.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strFromUTF32(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1541,7 +1541,7 @@ u_strFromUTF32(UChar *dest,
* @see u_strFromUTF32WithSub
* @stable ICU 4.2
*/
-U_STABLE UChar32* U_EXPORT2
+U_CAPI UChar32* U_EXPORT2
u_strToUTF32WithSub(UChar32 *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1585,7 +1585,7 @@ u_strToUTF32WithSub(UChar32 *dest,
* @see u_strToUTF32WithSub
* @stable ICU 4.2
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strFromUTF32WithSub(UChar *dest,
int32_t destCapacity,
int32_t *pDestLength,
@@ -1626,7 +1626,7 @@ u_strFromUTF32WithSub(UChar *dest,
* @see u_strToUTF8WithSub
* @see u_strFromJavaModifiedUTF8WithSub
*/
-U_STABLE char* U_EXPORT2
+U_CAPI char* U_EXPORT2
u_strToJavaModifiedUTF8(
char *dest,
int32_t destCapacity,
@@ -1676,7 +1676,7 @@ u_strToJavaModifiedUTF8(
* @see u_strToJavaModifiedUTF8
* @stable ICU 4.4
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_strFromJavaModifiedUTF8WithSub(
UChar *dest,
int32_t destCapacity,
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utext.h b/Build/source/libs/icu/icu-src/source/common/unicode/utext.h
index 196056bfb89..c6d1e53a8ce 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utext.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utext.h
@@ -180,28 +180,9 @@ typedef struct UText UText; /**< C typedef for struct UText. @stable ICU 3.6 */
*
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_close(UText *ut);
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUTextPointer
- * "Smart pointer" class, closes a UText via utext_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUTextPointer, UText, utext_close);
-
-U_NAMESPACE_END
-
-#endif
-
/**
* Open a read-only UText implementation for UTF-8 strings.
*
@@ -223,7 +204,7 @@ U_NAMESPACE_END
* will always be used and returned.
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status);
@@ -241,7 +222,7 @@ utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status);
* will always be used and returned.
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status);
@@ -258,7 +239,7 @@ utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status);
* will always be used and returned.
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_openUnicodeString(UText *ut, icu::UnicodeString *s, UErrorCode *status);
@@ -274,7 +255,7 @@ utext_openUnicodeString(UText *ut, icu::UnicodeString *s, UErrorCode *status);
* will always be used and returned.
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_openConstUnicodeString(UText *ut, const icu::UnicodeString *s, UErrorCode *status);
@@ -290,7 +271,7 @@ utext_openConstUnicodeString(UText *ut, const icu::UnicodeString *s, UErrorCode
* @see Replaceable
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_openReplaceable(UText *ut, icu::Replaceable *rep, UErrorCode *status);
/**
@@ -305,7 +286,7 @@ utext_openReplaceable(UText *ut, icu::Replaceable *rep, UErrorCode *status);
* @see Replaceable
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *status);
#endif
@@ -342,7 +323,7 @@ utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *s
* shallow clones provide some protection against errors of this type by
* disabling text modification via the cloned UText.
*
- * A shallow clone made with the readOnly parameter == FALSE will preserve the
+ * A shallow clone made with the readOnly parameter == false will preserve the
* utext_isWritable() state of the source object. Note, however, that
* write operations must be avoided while more than one UText exists that refer
* to the same underlying text.
@@ -358,8 +339,8 @@ utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *s
* If non-NULL, must refer to an already existing UText, which will then
* be reset to become the clone.
* @param src The UText to be cloned.
- * @param deep TRUE to request a deep clone, FALSE for a shallow clone.
- * @param readOnly TRUE to request that the cloned UText have read only access to the
+ * @param deep true to request a deep clone, false for a shallow clone.
+ * @param readOnly true to request that the cloned UText have read only access to the
* underlying text.
* @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR
@@ -368,7 +349,7 @@ utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *s
* @return The newly created clone, or NULL if the clone operation failed.
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status);
@@ -376,14 +357,14 @@ utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCod
* Compare two UText objects for equality.
* UTexts are equal if they are iterating over the same text, and
* have the same iteration position within the text.
- * If either or both of the parameters are NULL, the comparison is FALSE.
+ * If either or both of the parameters are NULL, the comparison is false.
*
* @param a The first of the two UTexts to compare.
* @param b The other UText to be compared.
- * @return TRUE if the two UTexts are equal.
+ * @return true if the two UTexts are equal.
* @stable ICU 3.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
utext_equals(const UText *a, const UText *b);
@@ -404,11 +385,11 @@ utext_equals(const UText *a, const UText *b);
*
* @stable ICU 3.4
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
utext_nativeLength(UText *ut);
/**
- * Return TRUE if calculating the length of the text could be expensive.
+ * Return true if calculating the length of the text could be expensive.
* Finding the length of NUL terminated strings is considered to be expensive.
*
* Note that the value of this function may change
@@ -417,10 +398,10 @@ utext_nativeLength(UText *ut);
* be expensive to report it.
*
* @param ut the text to be accessed.
- * @return TRUE if determining the length of the text could be time consuming.
+ * @return true if determining the length of the text could be time consuming.
* @stable ICU 3.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
utext_isLengthExpensive(const UText *ut);
/**
@@ -448,7 +429,7 @@ utext_isLengthExpensive(const UText *ut);
* @return the code point at the specified index.
* @stable ICU 3.4
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utext_char32At(UText *ut, int64_t nativeIndex);
@@ -462,7 +443,7 @@ utext_char32At(UText *ut, int64_t nativeIndex);
* @return the Unicode code point at the current iterator position.
* @stable ICU 3.4
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utext_current32(UText *ut);
@@ -484,7 +465,7 @@ utext_current32(UText *ut);
* @see UTEXT_NEXT32
* @stable ICU 3.4
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utext_next32(UText *ut);
@@ -505,7 +486,7 @@ utext_next32(UText *ut);
* @see UTEXT_PREVIOUS32
* @stable ICU 3.4
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utext_previous32(UText *ut);
@@ -527,7 +508,7 @@ utext_previous32(UText *ut);
* or U_SENTINEL (-1) if it is out of bounds.
* @stable ICU 3.4
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utext_next32From(UText *ut, int64_t nativeIndex);
@@ -547,7 +528,7 @@ utext_next32From(UText *ut, int64_t nativeIndex);
*
* @stable ICU 3.4
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utext_previous32From(UText *ut, int64_t nativeIndex);
/**
@@ -562,7 +543,7 @@ utext_previous32From(UText *ut, int64_t nativeIndex);
* @return the current index position, in the native units of the text provider.
* @stable ICU 3.4
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
utext_getNativeIndex(const UText *ut);
/**
@@ -588,7 +569,7 @@ utext_getNativeIndex(const UText *ut);
* @param nativeIndex the native unit index of the new iteration position.
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utext_setNativeIndex(UText *ut, int64_t nativeIndex);
/**
@@ -603,11 +584,11 @@ utext_setNativeIndex(UText *ut, int64_t nativeIndex);
*
* @param ut the text to be accessed.
* @param delta the signed number of code points to move the iteration position.
- * @return TRUE if the position could be moved the requested number of positions while
+ * @return true if the position could be moved the requested number of positions while
* staying within the range [0 - text length].
* @stable ICU 3.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
utext_moveIndex32(UText *ut, int32_t delta);
/**
@@ -632,7 +613,7 @@ utext_moveIndex32(UText *ut, int32_t delta);
* or zero if the current position is at the start of the text.
* @stable ICU 3.6
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
utext_getPreviousNativeIndex(UText *ut);
@@ -670,7 +651,7 @@ utext_getPreviousNativeIndex(UText *ut);
*
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utext_extract(UText *ut,
int64_t nativeStart, int64_t nativeLimit,
UChar *dest, int32_t destCapacity,
@@ -787,16 +768,16 @@ utext_extract(UText *ut,
/**
- * Return TRUE if the text can be written (modified) with utext_replace() or
+ * Return true if the text can be written (modified) with utext_replace() or
* utext_copy(). For the text to be writable, the text provider must
* be of a type that supports writing and the UText must not be frozen.
*
- * Attempting to modify text when utext_isWriteable() is FALSE will fail -
+ * Attempting to modify text when utext_isWriteable() is false will fail -
* the text will not be modified, and an error will be returned from the function
* that attempted the modification.
*
* @param ut the UText to be tested.
- * @return TRUE if the text is modifiable.
+ * @return true if the text is modifiable.
*
* @see utext_freeze()
* @see utext_replace()
@@ -804,7 +785,7 @@ utext_extract(UText *ut,
* @stable ICU 3.4
*
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
utext_isWritable(const UText *ut);
@@ -813,10 +794,10 @@ utext_isWritable(const UText *ut);
* @see Replaceable::hasMetaData()
*
* @param ut The UText to be tested
- * @return TRUE if the underlying text includes meta data.
+ * @return true if the underlying text includes meta data.
* @stable ICU 3.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
utext_hasMetaData(const UText *ut);
@@ -827,7 +808,7 @@ utext_hasMetaData(const UText *ut);
* newly inserted replacement text.
*
* This function is only available on UText types that support writing,
- * that is, ones where utext_isWritable() returns TRUE.
+ * that is, ones where utext_isWritable() returns true.
*
* When using this function, there should be only a single UText opened onto the
* underlying native text string. Behavior after a replace operation
@@ -847,7 +828,7 @@ utext_hasMetaData(const UText *ut);
*
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utext_replace(UText *ut,
int64_t nativeStart, int64_t nativeLimit,
const UChar *replacementText, int32_t replacementLength,
@@ -869,7 +850,7 @@ utext_replace(UText *ut,
* at the destination position.
*
* This function is only available on UText types that support writing,
- * that is, ones where utext_isWritable() returns TRUE.
+ * that is, ones where utext_isWritable() returns true.
*
* When using this function, there should be only a single UText opened onto the
* underlying native text string. Behavior after a copy operation
@@ -882,12 +863,12 @@ utext_replace(UText *ut,
* to be copied.
* @param destIndex The native destination index to which the source substring is
* copied or moved.
- * @param move If TRUE, then the substring is moved, not copied/duplicated.
+ * @param move If true, then the substring is moved, not copied/duplicated.
* @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION
*
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utext_copy(UText *ut,
int64_t nativeStart, int64_t nativeLimit,
int64_t destIndex,
@@ -916,7 +897,7 @@ utext_copy(UText *ut,
* @see utext_isWritable()
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utext_freeze(UText *ut);
@@ -991,7 +972,7 @@ enum {
* @param dest A UText struct to be filled in with the result of the clone operation,
* or NULL if the clone function should heap-allocate a new UText struct.
* @param src The UText to be cloned.
- * @param deep TRUE to request a deep clone, FALSE for a shallow clone.
+ * @param deep true to request a deep clone, false for a shallow clone.
* @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR
* should be returned if the text provider is unable to clone the
* original text.
@@ -1027,9 +1008,9 @@ UTextNativeLength(UText *ut);
*
* @param ut the UText being accessed.
* @param nativeIndex Requested index of the text to be accessed.
- * @param forward If TRUE, then the returned chunk must contain text
+ * @param forward If true, then the returned chunk must contain text
* starting from the index, so that start<=index<limit.
- * If FALSE, then the returned chunk must contain text
+ * If false, then the returned chunk must contain text
* before the index, so that start<index<=limit.
* @return True if the requested index could be accessed. The chunk
* will contain the requested text.
@@ -1133,7 +1114,7 @@ UTextReplace(UText *ut,
* @param nativeStart The index of the start of the region to be copied or moved
* @param nativeLimit The index of the character following the region to be replaced.
* @param nativeDest The destination index to which the source substring is copied or moved.
- * @param move If TRUE, then the substring is moved, not copied/duplicated.
+ * @param move If true, then the substring is moved, not copied/duplicated.
* @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION
*
* @stable ICU 3.4
@@ -1554,7 +1535,7 @@ struct UText {
* @return pointer to the UText, allocated if necessary, with extra space set up if requested.
* @stable ICU 3.4
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status);
// do not use #ifndef U_HIDE_INTERNAL_API around the following!
@@ -1599,5 +1580,24 @@ enum {
U_CDECL_END
+#if U_SHOW_CPLUSPLUS_API
+
+U_NAMESPACE_BEGIN
+
+/**
+ * \class LocalUTextPointer
+ * "Smart pointer" class, closes a UText via utext_close().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * @stable ICU 4.4
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUTextPointer, UText, utext_close);
+
+U_NAMESPACE_END
+
+#endif
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utf.h b/Build/source/libs/icu/icu-src/source/common/unicode/utf.h
index ef512997f05..c9d5f5785c5 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utf.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utf.h
@@ -103,7 +103,7 @@
* code point values (0..U+10ffff). They are indicated with negative values instead.
*
* For more information see the ICU User Guide Strings chapter
- * (http://userguide.icu-project.org/strings).
+ * (https://unicode-org.github.io/icu/userguide/strings).
*
* <em>Usage:</em>
* ICU coding guidelines for if() statements should be followed when using these macros.
@@ -124,7 +124,7 @@
/**
* Is this code point a Unicode noncharacter?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U_IS_UNICODE_NONCHAR(c) \
@@ -145,7 +145,7 @@
* and that boundary is tested first for performance.
*
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U_IS_UNICODE_CHAR(c) \
@@ -155,7 +155,7 @@
/**
* Is this code point a BMP code point (U+0000..U+ffff)?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.8
*/
#define U_IS_BMP(c) ((uint32_t)(c)<=0xffff)
@@ -163,7 +163,7 @@
/**
* Is this code point a supplementary code point (U+10000..U+10ffff)?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.8
*/
#define U_IS_SUPPLEMENTARY(c) ((uint32_t)((c)-0x10000)<=0xfffff)
@@ -171,7 +171,7 @@
/**
* Is this code point a lead surrogate (U+d800..U+dbff)?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
@@ -179,7 +179,7 @@
/**
* Is this code point a trail surrogate (U+dc00..U+dfff)?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
@@ -187,7 +187,7 @@
/**
* Is this code point a surrogate (U+d800..U+dfff)?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
@@ -196,7 +196,7 @@
* Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
* is it a lead surrogate?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
@@ -205,7 +205,7 @@
* Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
* is it a trail surrogate?
* @param c 32-bit code point
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 4.2
*/
#define U_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0)
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utf16.h b/Build/source/libs/icu/icu-src/source/common/unicode/utf16.h
index 9fd7d5c8a77..3902c60e95e 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utf16.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utf16.h
@@ -23,7 +23,7 @@
* This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings.
*
* For more information see utf.h and the ICU User Guide Strings chapter
- * (http://userguide.icu-project.org/strings).
+ * (https://unicode-org.github.io/icu/userguide/strings).
*
* <em>Usage:</em>
* ICU coding guidelines for if() statements should be followed when using these macros.
@@ -34,6 +34,7 @@
#ifndef __UTF16_H__
#define __UTF16_H__
+#include <stdbool.h>
#include "unicode/umachine.h"
#ifndef __UTF_H__
# include "unicode/utf.h"
@@ -44,7 +45,7 @@
/**
* Does this code unit alone encode a code point (BMP, not a surrogate)?
* @param c 16-bit code unit
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U16_IS_SINGLE(c) !U_IS_SURROGATE(c)
@@ -52,7 +53,7 @@
/**
* Is this code unit a lead surrogate (U+d800..U+dbff)?
* @param c 16-bit code unit
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
@@ -60,7 +61,7 @@
/**
* Is this code unit a trail surrogate (U+dc00..U+dfff)?
* @param c 16-bit code unit
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
@@ -68,7 +69,7 @@
/**
* Is this code unit a surrogate (U+d800..U+dfff)?
* @param c 16-bit code unit
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
@@ -77,7 +78,7 @@
* Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
* is it a lead surrogate?
* @param c 16-bit code unit
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
@@ -86,7 +87,7 @@
* Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
* is it a trail surrogate?
* @param c 16-bit code unit
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 4.2
*/
#define U16_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0)
@@ -379,13 +380,13 @@
* "Safe" macro, checks for a valid code point.
* If a surrogate pair is written, checks for sufficient space in the string.
* If the code point is not valid or a trail surrogate does not fit,
- * then isError is set to TRUE.
+ * then isError is set to true.
*
* @param s const UChar * string buffer
* @param i string offset, must be i<capacity
* @param capacity size of the string buffer
* @param c code point to append
- * @param isError output UBool set to TRUE if an error occurs, otherwise not modified
+ * @param isError output UBool set to true if an error occurs, otherwise not modified
* @see U16_APPEND_UNSAFE
* @stable ICU 2.4
*/
@@ -396,7 +397,7 @@
(s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
(s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
} else /* c>0x10ffff or not enough space */ { \
- (isError)=TRUE; \
+ (isError)=true; \
} \
} UPRV_BLOCK_MACRO_END
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utf8.h b/Build/source/libs/icu/icu-src/source/common/unicode/utf8.h
index 4987a00e8e0..5a07435fcf6 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utf8.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utf8.h
@@ -23,7 +23,7 @@
* This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings.
*
* For more information see utf.h and the ICU User Guide Strings chapter
- * (http://userguide.icu-project.org/strings).
+ * (https://unicode-org.github.io/icu/userguide/strings).
*
* <em>Usage:</em>
* ICU coding guidelines for if() statements should be followed when using these macros.
@@ -34,6 +34,7 @@
#ifndef __UTF8_H__
#define __UTF8_H__
+#include <stdbool.h>
#include "unicode/umachine.h"
#ifndef __UTF_H__
# include "unicode/utf.h"
@@ -117,48 +118,48 @@
* Function for handling "next code point" with error-checking.
*
* This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
+ * however it is called by public macros in this
* file and thus must remain stable, and should not be hidden when other internal
* functions are hidden (otherwise public macros would fail to compile).
* @internal
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict);
/**
* Function for handling "append code point" with error-checking.
*
* This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
+ * however it is called by public macros in this
* file and thus must remain stable, and should not be hidden when other internal
* functions are hidden (otherwise public macros would fail to compile).
* @internal
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError);
/**
* Function for handling "previous code point" with error-checking.
*
* This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
+ * however it is called by public macros in this
* file and thus must remain stable, and should not be hidden when other internal
* functions are hidden (otherwise public macros would fail to compile).
* @internal
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict);
/**
* Function for handling "skip backward one code point" with error-checking.
*
* This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
+ * however it is called by public macros in this
* file and thus must remain stable, and should not be hidden when other internal
* functions are hidden (otherwise public macros would fail to compile).
* @internal
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
/* single-code point definitions -------------------------------------------- */
@@ -166,7 +167,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
/**
* Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)?
* @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U8_IS_SINGLE(c) (((c)&0x80)==0)
@@ -174,7 +175,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
/**
* Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4)
* @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32)
@@ -183,7 +184,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
/**
* Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF)
* @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
+ * @return true or false
* @stable ICU 2.4
*/
#define U8_IS_TRAIL(c) ((int8_t)(c)<-0x40)
@@ -445,13 +446,13 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
* "Safe" macro, checks for a valid code point.
* If a non-ASCII code point is written, checks for sufficient space in the string.
* If the code point is not valid or trail bytes do not fit,
- * then isError is set to TRUE.
+ * then isError is set to true.
*
* @param s const uint8_t * string buffer
* @param i int32_t string offset, must be i<capacity
* @param capacity int32_t size of the string buffer
* @param c UChar32 code point to append
- * @param isError output UBool set to TRUE if an error occurs, otherwise not modified
+ * @param isError output UBool set to true if an error occurs, otherwise not modified
* @see U8_APPEND_UNSAFE
* @stable ICU 2.4
*/
@@ -472,7 +473,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
(s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \
(s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \
} else { \
- (isError)=TRUE; \
+ (isError)=true; \
} \
} UPRV_BLOCK_MACRO_END
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h b/Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h
index b2428e6b31e..160f5ad0a9f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h
@@ -109,7 +109,7 @@
* Where such a distinction is useful, there are two versions of the macros, "unsafe" and "safe"
* ones with ..._UNSAFE and ..._SAFE suffixes. The unsafe macros are fast but may cause
* program failures if the strings are not well-formed. The safe macros have an additional, boolean
- * parameter "strict". If strict is FALSE, then only illegal sequences are detected.
+ * parameter "strict". If strict is false, then only illegal sequences are detected.
* Otherwise, irregular sequences and non-characters are detected as well (like single surrogates).
* Safe macros return special error code points for illegal/irregular sequences:
* Typically, U+ffff, or values that would result in a code unit sequence of the same length
@@ -181,7 +181,7 @@ typedef int32_t UTextOffset;
/**
* The default choice for general Unicode string macros is to use the ..._SAFE macro implementations
- * with strict=FALSE.
+ * with strict=false.
*
* @deprecated ICU 2.4. Obsolete, see utf_old.h.
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h b/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
index 5afcd9f4490..28c313c582f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
@@ -112,11 +112,9 @@ typedef enum UTraceFunctionNumber {
UTRACE_COLLATION_LIMIT,
#endif // U_HIDE_DEPRECATED_API
-#ifndef U_HIDE_DRAFT_API
-
/**
* The lowest resource/data location.
- * @draft ICU 65
+ * @stable ICU 65
*/
UTRACE_UDATA_START=0x3000,
@@ -133,7 +131,7 @@ typedef enum UTraceFunctionNumber {
* - "get" (a path was loaded, but the value was not accessed)
* - "getalias" (a path was loaded, and an alias was resolved)
*
- * @draft ICU 65
+ * @stable ICU 65
*/
UTRACE_UDATA_RESOURCE=UTRACE_UDATA_START,
@@ -141,7 +139,7 @@ typedef enum UTraceFunctionNumber {
* Indicates that a resource bundle was opened.
*
* Provides one C-style string to UTraceData: file name.
- * @draft ICU 65
+ * @stable ICU 65
*/
UTRACE_UDATA_BUNDLE,
@@ -150,7 +148,7 @@ typedef enum UTraceFunctionNumber {
*
* Provides one C-style string to UTraceData: file name.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
UTRACE_UDATA_DATA_FILE,
@@ -163,12 +161,10 @@ typedef enum UTraceFunctionNumber {
*
* Provides one C-style string to UTraceData: file name.
*
- * @draft ICU 65
+ * @stable ICU 65
*/
UTRACE_UDATA_RES_FILE,
-#endif // U_HIDE_DRAFT_API
-
#ifndef U_HIDE_INTERNAL_API
/**
* One more than the highest normal resource/data trace location.
@@ -177,6 +173,71 @@ typedef enum UTraceFunctionNumber {
UTRACE_RES_DATA_LIMIT,
#endif // U_HIDE_INTERNAL_API
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * The lowest break iterator location.
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_START=0x4000,
+
+ /**
+ * Indicates that a character instance of break iterator was created.
+ *
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_CREATE_CHARACTER = UTRACE_UBRK_START,
+
+ /**
+ * Indicates that a word instance of break iterator was created.
+ *
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_CREATE_WORD,
+
+ /**
+ * Indicates that a line instance of break iterator was created.
+ *
+ * Provides one C-style string to UTraceData: the lb value ("",
+ * "loose", "strict", or "normal").
+ *
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_CREATE_LINE,
+
+ /**
+ * Indicates that a sentence instance of break iterator was created.
+ *
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_CREATE_SENTENCE,
+
+ /**
+ * Indicates that a title instance of break iterator was created.
+ *
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_CREATE_TITLE,
+
+ /**
+ * Indicates that an internal dictionary break engine was created.
+ *
+ * Provides one C-style string to UTraceData: the script code of what
+ * the break engine cover ("Hani", "Khmr", "Laoo", "Mymr", or "Thai").
+ *
+ * @draft ICU 67
+ */
+ UTRACE_UBRK_CREATE_BREAK_ENGINE,
+
+#endif // U_HIDE_DRAFT_API
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * One more than the highest normal break iterator trace location.
+ * @internal The numeric value may change over time, see ICU ticket #12420.
+ */
+ UTRACE_UBRK_LIMIT,
+#endif // U_HIDE_INTERNAL_API
+
} UTraceFunctionNumber;
/**
@@ -184,7 +245,7 @@ typedef enum UTraceFunctionNumber {
* @param traceLevel A UTraceLevel value.
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrace_setLevel(int32_t traceLevel);
/**
@@ -192,7 +253,7 @@ utrace_setLevel(int32_t traceLevel);
* @return The UTraceLevel value being used by ICU.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrace_getLevel(void);
/* Trace function pointers types ----------------------------- */
@@ -266,7 +327,7 @@ UTraceData(const void *context, int32_t fnNumber, int32_t level,
*
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrace_setFunctions(const void *context,
UTraceEntry *e, UTraceExit *x, UTraceData *d);
@@ -280,7 +341,7 @@ utrace_setFunctions(const void *context,
* @param d The currently installed UTraceData function.
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrace_getFunctions(const void **context,
UTraceEntry **e, UTraceExit **x, UTraceData **d);
@@ -402,7 +463,7 @@ utrace_getFunctions(const void **context,
* If buffer capacity is insufficient, the required capacity is returned.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrace_vformat(char *outBuf, int32_t capacity,
int32_t indent, const char *fmt, va_list args);
@@ -423,7 +484,7 @@ utrace_vformat(char *outBuf, int32_t capacity,
* If buffer capacity is insufficient, the required capacity is returned.
* @stable ICU 2.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrace_format(char *outBuf, int32_t capacity,
int32_t indent, const char *fmt, ...);
@@ -440,7 +501,7 @@ utrace_format(char *outBuf, int32_t capacity,
* @see UTraceFunctionNumber
* @stable ICU 2.8
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
utrace_functionName(int32_t fnNumber);
U_CDECL_END
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h b/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
index 8d8f54764e0..7c4ea7ac28d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
@@ -479,13 +479,23 @@ typedef enum UErrorCode {
U_COLLATOR_VERSION_MISMATCH = 28, /**< Collator version is not compatible with the base version */
U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */
U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * The input is impractically long for an operation.
+ * It is rejected because it may lead to problems such as excessive
+ * processing time, stack depth, or heap memory requirements.
+ *
+ * @draft ICU 68
+ */
+ U_INPUT_TOO_LONG_ERROR = 31,
+#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest standard error code.
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- U_STANDARD_ERROR_LIMIT,
+ U_STANDARD_ERROR_LIMIT = 32,
#endif // U_HIDE_DEPRECATED_API
/*
@@ -715,7 +725,7 @@ typedef enum UErrorCode {
* in the UErrorCode enum above.
* @stable ICU 2.0
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
u_errorName(UErrorCode code);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h b/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
index 0923c1d9189..a46481a3fe6 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
@@ -60,13 +60,13 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION_MAJOR_NUM 65
+#define U_ICU_VERSION_MAJOR_NUM 68
/** The current ICU minor version as an integer.
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_MINOR_NUM 1
+#define U_ICU_VERSION_MINOR_NUM 2
/** The current ICU patchlevel version as an integer.
* This value will change in the subsequent releases of ICU
@@ -86,7 +86,7 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_SUFFIX _65
+#define U_ICU_VERSION_SUFFIX _68
/**
* \def U_DEF2_ICU_ENTRY_POINT_RENAME
@@ -139,7 +139,7 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION "65.1"
+#define U_ICU_VERSION "68.2"
/**
* The current ICU library major version number as a string, for library name suffixes.
@@ -148,17 +148,17 @@
* Until ICU 4.8, this was the combination of the single-digit major and minor ICU version numbers
* into one string without dots ("48").
* Since ICU 49, it is the double-digit major ICU version number.
- * See http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU
+ * See https://unicode-org.github.io/icu/userguide/design#version-numbers-in-icu
*
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_SHORT "65"
+#define U_ICU_VERSION_SHORT "68"
#ifndef U_HIDE_INTERNAL_API
/** Data version in ICU4C.
* @internal ICU 4.4 Internal Use Only
**/
-#define U_ICU_DATA_VERSION "65.1"
+#define U_ICU_DATA_VERSION "68.2"
#endif /* U_HIDE_INTERNAL_API */
/*===========================================================================
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uversion.h b/Build/source/libs/icu/icu-src/source/common/unicode/uversion.h
index 5700f62cbff..113568df8c1 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uversion.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uversion.h
@@ -141,7 +141,7 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH];
* values of up to 255 each.
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_versionFromString(UVersionInfo versionArray, const char *versionString);
/**
@@ -155,7 +155,7 @@ u_versionFromString(UVersionInfo versionArray, const char *versionString);
* fields with values of up to 255 each.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_versionFromUString(UVersionInfo versionArray, const UChar *versionString);
@@ -171,7 +171,7 @@ u_versionFromUString(UVersionInfo versionArray, const UChar *versionString);
* The buffer size must be at least U_MAX_VERSION_STRING_LENGTH.
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_versionToString(const UVersionInfo versionArray, char *versionString);
/**
@@ -182,6 +182,6 @@ u_versionToString(const UVersionInfo versionArray, char *versionString);
* @param versionArray the version # information, the result will be filled in
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_getVersion(UVersionInfo versionArray);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp b/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp
index f2dd9165595..493ab79f6d9 100644
--- a/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp
@@ -311,7 +311,7 @@ void UnifiedCache::_putNew(
}
keyToAdopt->fCreationStatus = creationStatus;
if (value->softRefCount == 0) {
- _registerMaster(keyToAdopt, value);
+ _registerPrimary(keyToAdopt, value);
}
void *oldValue = uhash_put(fHashtable, keyToAdopt, (void *) value, &status);
U_ASSERT(oldValue == nullptr);
@@ -338,7 +338,7 @@ void UnifiedCache::_putIfAbsentAndGet(
} else {
_put(element, value, status);
}
- // Run an eviction slice. This will run even if we added a master entry
+ // Run an eviction slice. This will run even if we added a primary entry
// which doesn't increase the unused count, but that is still o.k
_runEvictionSlice();
}
@@ -403,9 +403,9 @@ void UnifiedCache::_get(
}
}
-void UnifiedCache::_registerMaster(
+void UnifiedCache::_registerPrimary(
const CacheKeyBase *theKey, const SharedObject *value) const {
- theKey->fIsMaster = true;
+ theKey->fIsPrimary = true;
value->cachePtr = this;
++fNumValuesTotal;
++fNumValuesInUse;
@@ -420,7 +420,7 @@ void UnifiedCache::_put(
const SharedObject *oldValue = (const SharedObject *) element->value.pointer;
theKey->fCreationStatus = status;
if (value->softRefCount == 0) {
- _registerMaster(theKey, value);
+ _registerPrimary(theKey, value);
}
value->softRefCount++;
UHashElement *ptr = const_cast<UHashElement *>(element);
@@ -474,9 +474,9 @@ UBool UnifiedCache::_isEvictable(const UHashElement *element) const
return FALSE;
}
- // We can evict entries that are either not a master or have just
+ // We can evict entries that are either not a primary or have just
// one reference (The one reference being from the cache itself).
- return (!theKey->fIsMaster || (theValue->softRefCount == 1 && theValue->noHardReferences()));
+ return (!theKey->fIsPrimary || (theValue->softRefCount == 1 && theValue->noHardReferences()));
}
void UnifiedCache::removeSoftRef(const SharedObject *value) const {
diff --git a/Build/source/libs/icu/icu-src/source/common/unifiedcache.h b/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
index d6c9945126c..a31998db206 100644
--- a/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
+++ b/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
@@ -34,13 +34,13 @@ class UnifiedCache;
*/
class U_COMMON_API CacheKeyBase : public UObject {
public:
- CacheKeyBase() : fCreationStatus(U_ZERO_ERROR), fIsMaster(FALSE) {}
+ CacheKeyBase() : fCreationStatus(U_ZERO_ERROR), fIsPrimary(false) {}
/**
* Copy constructor. Needed to support cloning.
*/
CacheKeyBase(const CacheKeyBase &other)
- : UObject(other), fCreationStatus(other.fCreationStatus), fIsMaster(FALSE) { }
+ : UObject(other), fCreationStatus(other.fCreationStatus), fIsPrimary(false) { }
virtual ~CacheKeyBase();
/**
@@ -88,7 +88,7 @@ class U_COMMON_API CacheKeyBase : public UObject {
}
private:
mutable UErrorCode fCreationStatus;
- mutable UBool fIsMaster;
+ mutable UBool fIsPrimary;
friend class UnifiedCache;
};
@@ -147,10 +147,10 @@ class LocaleCacheKey : public CacheKey<T> {
virtual UBool operator == (const CacheKeyBase &other) const {
// reflexive
if (this == &other) {
- return TRUE;
+ return true;
}
if (!CacheKey<T>::operator == (other)) {
- return FALSE;
+ return false;
}
// We know this and other are of same class because operator== on
// CacheKey returned true.
@@ -359,7 +359,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
/**
* Flushes the contents of the cache. If cache values hold references to other
- * cache values then _flush should be called in a loop until it returns FALSE.
+ * cache values then _flush should be called in a loop until it returns false.
*
* On entry, gCacheMutex must be held.
* On exit, those values with are evictable are flushed.
@@ -370,7 +370,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
* hard (external) references are not deleted, but are detached from
* the cache, so that a subsequent removeRefs can delete them.
* _flush is not thread safe when all is true.
- * @return TRUE if any value in cache was flushed or FALSE otherwise.
+ * @return true if any value in cache was flushed or false otherwise.
*/
UBool _flush(UBool all) const;
@@ -395,11 +395,11 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
* Attempts to fetch value and status for key from cache.
* On entry, gCacheMutex must not be held value must be NULL and status must
* be U_ZERO_ERROR.
- * On exit, either returns FALSE (In this
- * case caller should try to create the object) or returns TRUE with value
+ * On exit, either returns false (In this
+ * case caller should try to create the object) or returns true with value
* pointing to the fetched value and status set to fetched status. When
- * FALSE is returned status may be set to failure if an in progress hash
- * entry could not be made but value will remain unchanged. When TRUE is
+ * false is returned status may be set to failure if an in progress hash
+ * entry could not be made but value will remain unchanged. When true is
* returned, caller must call removeRef() on value.
*/
UBool _poll(
@@ -463,17 +463,17 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
void _runEvictionSlice() const;
/**
- * Register a master cache entry. A master key is the first key to create
+ * Register a primary cache entry. A primary key is the first key to create
* a given SharedObject value. Subsequent keys whose create function
- * produce referneces to an already existing SharedObject are not masters -
+ * produce referneces to an already existing SharedObject are not primary -
* they can be evicted and subsequently recreated.
*
* On entry, gCacheMutex must be held.
- * On exit, items in use count incremented, entry is marked as a master
+ * On exit, items in use count incremented, entry is marked as a primary
* entry, and value registered with cache so that subsequent calls to
* addRef() and removeRef() on it correctly interact with the cache.
*/
- void _registerMaster(const CacheKeyBase *theKey, const SharedObject *value) const;
+ void _registerPrimary(const CacheKeyBase *theKey, const SharedObject *value) const;
/**
* Store a value and creation error status in given hash entry.
diff --git a/Build/source/libs/icu/icu-src/source/common/uniquecharstr.h b/Build/source/libs/icu/icu-src/source/common/uniquecharstr.h
new file mode 100644
index 00000000000..10cc924f7f9
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/uniquecharstr.h
@@ -0,0 +1,98 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// uniquecharstr.h
+// created: 2020sep01 Frank Yung-Fong Tang
+
+#ifndef __UNIQUECHARSTR_H__
+#define __UNIQUECHARSTR_H__
+
+#include "charstr.h"
+#include "uassert.h"
+#include "uhash.h"
+
+U_NAMESPACE_BEGIN
+
+/**
+ * Stores NUL-terminated strings with duplicate elimination.
+ * Checks for unique UTF-16 string pointers and converts to invariant characters.
+ *
+ * Intended to be stack-allocated. Add strings, get a unique number for each,
+ * freeze the object, get a char * pointer for each string,
+ * call orphanCharStrings() to capture the string storage, and let this object go out of scope.
+ */
+class UniqueCharStrings {
+public:
+ UniqueCharStrings(UErrorCode &errorCode) : strings(nullptr) {
+ // Note: We hash on string contents but store stable char16_t * pointers.
+ // If the strings are stored in resource bundles which should be built with
+ // duplicate elimination, then we should be able to hash on just the pointer values.
+ uhash_init(&map, uhash_hashUChars, uhash_compareUChars, uhash_compareLong, &errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ strings = new CharString();
+ if (strings == nullptr) {
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ }
+ }
+ ~UniqueCharStrings() {
+ uhash_close(&map);
+ delete strings;
+ }
+
+ /** Returns/orphans the CharString that contains all strings. */
+ CharString *orphanCharStrings() {
+ CharString *result = strings;
+ strings = nullptr;
+ return result;
+ }
+
+ /**
+ * Adds a string and returns a unique number for it.
+ * The string's buffer contents must not change, nor move around in memory,
+ * while this UniqueCharStrings is in use.
+ * The string contents must be NUL-terminated exactly at s.length().
+ *
+ * Best used with read-only-alias UnicodeString objects that point to
+ * stable storage, such as strings returned by resource bundle functions.
+ */
+ int32_t add(const UnicodeString &s, UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return 0; }
+ if (isFrozen) {
+ errorCode = U_NO_WRITE_PERMISSION;
+ return 0;
+ }
+ // The string points into the resource bundle.
+ const char16_t *p = s.getBuffer();
+ int32_t oldIndex = uhash_geti(&map, p);
+ if (oldIndex != 0) { // found duplicate
+ return oldIndex;
+ }
+ // Explicit NUL terminator for the previous string.
+ // The strings object is also terminated with one implicit NUL.
+ strings->append(0, errorCode);
+ int32_t newIndex = strings->length();
+ strings->appendInvariantChars(s, errorCode);
+ uhash_puti(&map, const_cast<char16_t *>(p), newIndex, &errorCode);
+ return newIndex;
+ }
+
+ void freeze() { isFrozen = true; }
+
+ /**
+ * Returns a string pointer for its unique number, if this object is frozen.
+ * Otherwise nullptr.
+ */
+ const char *get(int32_t i) const {
+ U_ASSERT(isFrozen);
+ return isFrozen && i > 0 ? strings->data() + i : nullptr;
+ }
+
+private:
+ UHashtable map;
+ CharString *strings;
+ bool isFrozen = false;
+};
+
+U_NAMESPACE_END
+
+#endif // __UNIQUECHARSTR_H__
diff --git a/Build/source/libs/icu/icu-src/source/common/unisetspan.h b/Build/source/libs/icu/icu-src/source/common/unisetspan.h
index f1e78ff3ee2..9a1307a9078 100644
--- a/Build/source/libs/icu/icu-src/source/common/unisetspan.h
+++ b/Build/source/libs/icu/icu-src/source/common/unisetspan.h
@@ -65,8 +65,8 @@ public:
/*
* Do the strings need to be checked in span() etc.?
- * @return TRUE if strings need to be checked (call span() here),
- * FALSE if not (use a BMPSet for best performance).
+ * @return true if strings need to be checked (call span() here),
+ * false if not (use a BMPSet for best performance).
*/
inline UBool needsStringSpanUTF16();
inline UBool needsStringSpanUTF8();
diff --git a/Build/source/libs/icu/icu-src/source/common/unistr.cpp b/Build/source/libs/icu/icu-src/source/common/unistr.cpp
index 901bb3358ba..077b4d6ef20 100644
--- a/Build/source/libs/icu/icu-src/source/common/unistr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/unistr.cpp
@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng
}
int32_t oldLength = length();
- int32_t newLength = oldLength + srcLength;
+ int32_t newLength;
+ if (uprv_add32_overflow(oldLength, srcLength, &newLength)) {
+ setToBogus();
+ return *this;
+ }
// Check for append onto ourself
const UChar* oldArray = getArrayStart();
diff --git a/Build/source/libs/icu/icu-src/source/common/unormimp.h b/Build/source/libs/icu/icu-src/source/common/unormimp.h
index 88c7975cc4e..d2604adb4a9 100644
--- a/Build/source/libs/icu/icu-src/source/common/unormimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/unormimp.h
@@ -418,7 +418,7 @@ enum {
* The same bit is used for NFC and NFKC; (c) differs for them.
* As usual, we build the "not skippable" flags so that unassigned
* code points get a 0 bit.
- * This bit is only valid after (a)..(e) test FALSE; test NFD_NO before (f) as well.
+ * This bit is only valid after (a)..(e) test false; test NFD_NO before (f) as well.
* Test Hangul LV syllables entirely in code.
*
*
diff --git a/Build/source/libs/icu/icu-src/source/common/uposixdefs.h b/Build/source/libs/icu/icu-src/source/common/uposixdefs.h
index d1c27855840..4a0de995762 100644
--- a/Build/source/libs/icu/icu-src/source/common/uposixdefs.h
+++ b/Build/source/libs/icu/icu-src/source/common/uposixdefs.h
@@ -71,6 +71,12 @@
# define _STDC_C99
#endif
+#if !defined _POSIX_C_SOURCE && \
+ defined(__APPLE__) && defined(__MACH__) && !defined(__clang__)
+// Needed to prevent EOWNERDEAD issues with GCC on Mac
+#define _POSIX_C_SOURCE 200809L
+#endif
+
#if defined(__cplusplus) && defined(__NetBSD__)
#define _ISOC99_SOURCE
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/uprops.cpp b/Build/source/libs/icu/icu-src/source/common/uprops.cpp
index 7d99675220e..1604ad9a179 100644
--- a/Build/source/libs/icu/icu-src/source/common/uprops.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uprops.cpp
@@ -480,6 +480,11 @@ static int32_t getScript(const IntProperty &/*prop*/, UChar32 c, UProperty /*whi
return (int32_t)uscript_getScript(c, &errorCode);
}
+static int32_t scriptGetMaxValue(const IntProperty &/*prop*/, UProperty /*which*/) {
+ uint32_t scriptX=uprv_getMaxValues(0)&UPROPS_SCRIPT_X_MASK;
+ return uprops_mergeScriptCodeOrIndex(scriptX);
+}
+
/*
* Map some of the Grapheme Cluster Break values to Hangul Syllable Types.
* Hangul_Syllable_Type is fully redundant with a subset of Grapheme_Cluster_Break.
@@ -586,7 +591,7 @@ static const IntProperty intProps[UCHAR_INT_LIMIT-UCHAR_INT_START]={
{ UPROPS_SRC_BIDI, 0, 0, getJoiningType, biDiGetMaxValue },
{ 2, UPROPS_LB_MASK, UPROPS_LB_SHIFT, defaultGetValue, defaultGetMaxValue },
{ UPROPS_SRC_CHAR, 0, (int32_t)U_NT_COUNT-1, getNumericType, getMaxValueFromShift },
- { 0, UPROPS_SCRIPT_MASK, 0, getScript, defaultGetMaxValue },
+ { UPROPS_SRC_PROPSVEC, 0, 0, getScript, scriptGetMaxValue },
{ UPROPS_SRC_PROPSVEC, 0, (int32_t)U_HST_COUNT-1, getHangulSyllableType, getMaxValueFromShift },
// UCHAR_NFD_QUICK_CHECK: max=1=YES -- never "maybe", only "no" or "yes"
{ UPROPS_SRC_NFC, 0, (int32_t)UNORM_YES, getNormQuickCheck, getMaxValueFromShift },
diff --git a/Build/source/libs/icu/icu-src/source/common/uprops.h b/Build/source/libs/icu/icu-src/source/common/uprops.h
index c7d648694ee..8bf929919f2 100644
--- a/Build/source/libs/icu/icu-src/source/common/uprops.h
+++ b/Build/source/libs/icu/icu-src/source/common/uprops.h
@@ -121,12 +121,12 @@ enum {
* Properties in vector word 0
* Bits
* 31..24 DerivedAge version major/minor one nibble each
- * 23..22 3..1: Bits 7..0 = Script_Extensions index
+ * 23..22 3..1: Bits 21..20 & 7..0 = Script_Extensions index
* 3: Script value from Script_Extensions
* 2: Script=Inherited
* 1: Script=Common
- * 0: Script=bits 7..0
- * 21..20 reserved
+ * 0: Script=bits 21..20 & 7..0
+ * 21..20 Bits 9..8 of the UScriptCode, or index to Script_Extensions
* 19..17 East Asian Width
* 16.. 8 UBlockCode
* 7.. 0 UScriptCode, or index to Script_Extensions
@@ -137,22 +137,43 @@ enum {
#define UPROPS_AGE_SHIFT 24
/* Script_Extensions: mask includes Script */
-#define UPROPS_SCRIPT_X_MASK 0x00c000ff
+#define UPROPS_SCRIPT_X_MASK 0x00f000ff
#define UPROPS_SCRIPT_X_SHIFT 22
+// The UScriptCode or Script_Extensions index is split across two bit fields.
+// (Starting with Unicode 13/ICU 66/2019 due to more varied Script_Extensions.)
+// Shift the high bits right by 12 to assemble the full value.
+#define UPROPS_SCRIPT_HIGH_MASK 0x00300000
+#define UPROPS_SCRIPT_HIGH_SHIFT 12
+#define UPROPS_MAX_SCRIPT 0x3ff
+
#define UPROPS_EA_MASK 0x000e0000
#define UPROPS_EA_SHIFT 17
#define UPROPS_BLOCK_MASK 0x0001ff00
#define UPROPS_BLOCK_SHIFT 8
-#define UPROPS_SCRIPT_MASK 0x000000ff
+#define UPROPS_SCRIPT_LOW_MASK 0x000000ff
/* UPROPS_SCRIPT_X_WITH_COMMON must be the lowest value that involves Script_Extensions. */
#define UPROPS_SCRIPT_X_WITH_COMMON 0x400000
#define UPROPS_SCRIPT_X_WITH_INHERITED 0x800000
#define UPROPS_SCRIPT_X_WITH_OTHER 0xc00000
+#ifdef __cplusplus
+
+namespace {
+
+inline uint32_t uprops_mergeScriptCodeOrIndex(uint32_t scriptX) {
+ return
+ ((scriptX & UPROPS_SCRIPT_HIGH_MASK) >> UPROPS_SCRIPT_HIGH_SHIFT) |
+ (scriptX & UPROPS_SCRIPT_LOW_MASK);
+}
+
+} // namespace
+
+#endif // __cplusplus
+
/*
* Properties in vector word 1
* Each bit encodes one binary property.
diff --git a/Build/source/libs/icu/icu-src/source/common/uresbund.cpp b/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
index 6c0e760389d..2ece87897d7 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
@@ -1792,7 +1792,7 @@ ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *f
return result;
}
-U_INTERNAL const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ures_getStringByKeyWithFallback(const UResourceBundle *resB,
const char* inKey,
int32_t* len,
@@ -2210,7 +2210,7 @@ ures_getUTF8StringByKey(const UResourceBundle *resB,
* INTERNAL: Get the name of the first real locale (not placeholder)
* that has resource bundle data.
*/
-U_INTERNAL const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ures_getLocaleInternal(const UResourceBundle* resourceBundle, UErrorCode* status)
{
if (status==NULL || U_FAILURE(*status)) {
@@ -2357,7 +2357,7 @@ ures_openDirect(const char* path, const char* localeID, UErrorCode* status) {
*
* Same as ures_open(), but uses the fill-in parameter and does not allocate a new bundle.
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_openFillIn(UResourceBundle *r, const char* path,
const char* localeID, UErrorCode* status) {
if(U_SUCCESS(*status) && r == NULL) {
@@ -2370,7 +2370,7 @@ ures_openFillIn(UResourceBundle *r, const char* path,
/**
* Same as ures_openDirect(), but uses the fill-in parameter and does not allocate a new bundle.
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_openDirectFillIn(UResourceBundle *r, const char* path, const char* localeID, UErrorCode* status) {
if(U_SUCCESS(*status) && r == NULL) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
@@ -2420,7 +2420,7 @@ ures_countArrayItems(const UResourceBundle* resourceBundle,
* @see ures_getVersion
* @internal
*/
-U_INTERNAL const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ures_getVersionNumberInternal(const UResourceBundle *resourceBundle)
{
if (!resourceBundle) return NULL;
@@ -2611,8 +2611,8 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
char defVal[1024] = ""; /* default value for given locale */
char defLoc[1024] = ""; /* default value for given locale */
char base[1024] = ""; /* base locale */
- char found[1024];
- char parent[1024];
+ char found[1024] = "";
+ char parent[1024] = "";
char full[1024] = "";
UResourceBundle bund1, bund2;
UResourceBundle *res = NULL;
@@ -3016,7 +3016,7 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status)
}
#if 0
/* This code isn't needed, and given the documentation warnings the implementation is suspect */
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){
if(res1==NULL || res2==NULL){
return res1==res2; /* pointer comparision */
@@ -3052,7 +3052,7 @@ ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){
}
return TRUE;
}
-U_INTERNAL UResourceBundle* U_EXPORT2
+U_CAPI UResourceBundle* U_EXPORT2
ures_clone(const UResourceBundle* res, UErrorCode* status){
UResourceBundle* bundle = NULL;
UResourceBundle* ret = NULL;
@@ -3068,7 +3068,7 @@ ures_clone(const UResourceBundle* res, UErrorCode* status){
}
return ret;
}
-U_INTERNAL const UResourceBundle* U_EXPORT2
+U_CAPI const UResourceBundle* U_EXPORT2
ures_getParentBundle(const UResourceBundle* res){
if(res==NULL){
return NULL;
@@ -3077,7 +3077,7 @@ ures_getParentBundle(const UResourceBundle* res){
}
#endif
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
ures_getVersionByKey(const UResourceBundle* res, const char *key, UVersionInfo ver, UErrorCode *status) {
const UChar *str;
int32_t len;
diff --git a/Build/source/libs/icu/icu-src/source/common/uresdata.cpp b/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
index b3c2e2e27cc..ae731e45442 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
@@ -963,7 +963,7 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch
if(t2 == RES_BOGUS) {
/* if we fail to get the resource by key, maybe we got an index */
indexR = uprv_strtol(pathP, &closeIndex, 10);
- if(indexR >= 0 && *closeIndex == 0) {
+ if(indexR >= 0 && *closeIndex == 0 && (*pathP != '0' || closeIndex - pathP == 1)) {
/* if we indeed have an index, try to get the item by index */
t2 = res_getTableItemByIndex(pResData, t1, indexR, key);
} // else t2 is already RES_BOGUS
diff --git a/Build/source/libs/icu/icu-src/source/common/uresdata.h b/Build/source/libs/icu/icu-src/source/common/uresdata.h
index d1b67babf29..7c2152e57b5 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresdata.h
+++ b/Build/source/libs/icu/icu-src/source/common/uresdata.h
@@ -402,7 +402,7 @@ typedef struct ResourceData {
/*
* Read a resource bundle from memory.
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
res_read(ResourceData *pResData,
const UDataInfo *pInfo, const void *inBytes, int32_t length,
UErrorCode *errorCode);
@@ -422,7 +422,7 @@ res_load(ResourceData *pResData,
U_CFUNC void
res_unload(ResourceData *pResData);
-U_INTERNAL UResType U_EXPORT2
+U_CAPI UResType U_EXPORT2
res_getPublicType(Resource res);
///////////////////////////////////////////////////////////////////////////
@@ -434,31 +434,31 @@ res_getPublicType(Resource res);
* and set its length in *pLength.
* Returns NULL if not found.
*/
-U_INTERNAL const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
res_getStringNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength);
-U_INTERNAL const uint8_t * U_EXPORT2
+U_CAPI const uint8_t * U_EXPORT2
res_getBinaryNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength);
-U_INTERNAL const int32_t * U_EXPORT2
+U_CAPI const int32_t * U_EXPORT2
res_getIntVectorNoTrace(const ResourceData *pResData, Resource res, int32_t *pLength);
-U_INTERNAL const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
res_getAlias(const ResourceData *pResData, Resource res, int32_t *pLength);
-U_INTERNAL Resource U_EXPORT2
+U_CAPI Resource U_EXPORT2
res_getResource(const ResourceData *pResData, const char *key);
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
res_countArrayItems(const ResourceData *pResData, Resource res);
-U_INTERNAL Resource U_EXPORT2
+U_CAPI Resource U_EXPORT2
res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexS);
-U_INTERNAL Resource U_EXPORT2
+U_CAPI Resource U_EXPORT2
res_getTableItemByIndex(const ResourceData *pResData, Resource table, int32_t indexS, const char ** key);
-U_INTERNAL Resource U_EXPORT2
+U_CAPI Resource U_EXPORT2
res_getTableItemByKey(const ResourceData *pResData, Resource table, int32_t *indexS, const char* * key);
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/uresimp.h b/Build/source/libs/icu/icu-src/source/common/uresimp.h
index f453ddc004a..69d82566fe0 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/uresimp.h
@@ -157,7 +157,7 @@ U_CFUNC const char* ures_getName(const UResourceBundle* resB);
U_CFUNC const char* ures_getPath(const UResourceBundle* resB);
/**
* If anything was in the RB cache, dump it to the screen.
- * @return TRUE if there was anything into the cache
+ * @return true if there was anything into the cache
*/
U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void);
#endif
@@ -218,7 +218,7 @@ ures_findSubResource(const UResourceBundle *resB,
* @param isAvailable If non-null, pointer to fillin parameter that indicates whether the
* requested locale was available. The locale is defined as 'available' if it physically
* exists within the specified tree.
- * @param omitDefault if TRUE, omit keyword and value if default. 'de_DE\@collation=standard' -> 'de_DE'
+ * @param omitDefault if true, omit keyword and value if default. 'de_DE\@collation=standard' -> 'de_DE'
* @param status error code
* @return the actual buffer size needed for the full locale. If it's greater
* than resultCapacity, the returned full name will be truncated and an error code will be returned.
diff --git a/Build/source/libs/icu/icu-src/source/common/uscript.cpp b/Build/source/libs/icu/icu-src/source/common/uscript.cpp
index 98528c158b4..f8bd7e7fdd1 100644
--- a/Build/source/libs/icu/icu-src/source/common/uscript.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uscript.cpp
@@ -58,8 +58,8 @@ static int32_t
getCodesFromLocale(const char *locale,
UScriptCode *scripts, int32_t capacity, UErrorCode *err) {
UErrorCode internalErrorCode = U_ZERO_ERROR;
- char lang[8];
- char script[8];
+ char lang[8] = {0};
+ char script[8] = {0};
int32_t scriptLength;
if(U_FAILURE(*err)) { return 0; }
// Multi-script languages, equivalent to the LocaleScript data
diff --git a/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp b/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
index ee120b4ca1d..25d287b57a3 100644
--- a/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
@@ -233,6 +233,10 @@ const int32_t SCRIPT_PROPS[] = {
0x1E108 | LIMITED_USE, // Hmnp
0x119CE | EXCLUSION, // Nand
0x1E2E1 | LIMITED_USE, // Wcho
+ 0x10FBF | EXCLUSION | RTL, // Chrs
+ 0x1190C | EXCLUSION, // Diak
+ 0x18C65 | EXCLUSION | LB_LETTERS, // Kits
+ 0x10E88 | EXCLUSION | RTL, // Yezi
// End copy-paste from parsescriptmetadata.py
};
diff --git a/Build/source/libs/icu/icu-src/source/common/ustr_imp.h b/Build/source/libs/icu/icu-src/source/common/ustr_imp.h
index c555ee37ea8..3c4b9cc2a53 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustr_imp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ustr_imp.h
@@ -29,7 +29,7 @@
/**
* Compare two strings in code point order or code unit order.
* Works in strcmp style (both lengths -1),
- * strncmp style (lengths equal and >=0, flag TRUE),
+ * strncmp style (lengths equal and >=0, flag true),
* and memcmp/UnicodeString style (at least one length >=0).
*/
U_CFUNC int32_t U_EXPORT2
@@ -47,6 +47,18 @@ U_CAPI int32_t U_EXPORT2
ustr_hashICharsN(const char *str, int32_t length);
/**
+ * Convert an ASCII-range lowercase character to uppercase.
+ *
+ * @param c A UChar.
+ * @return If UChar is a lowercase ASCII character, returns the uppercase version.
+ * Otherwise, returns the input character.
+ */
+U_CAPI UChar U_EXPORT2
+u_asciiToUpper(UChar c);
+
+// TODO: Add u_asciiToLower if/when there is a need for it.
+
+/**
* NUL-terminate a UChar * string if possible.
* If length < destCapacity then NUL-terminate.
* If length == destCapacity then do not terminate but set U_STRING_NOT_TERMINATED_WARNING.
@@ -121,7 +133,7 @@ public:
* @param t The i-th byte following the lead byte.
* @param i The index (1..3) of byte t in the byte sequence. 0<i<length
* @param length The length (2..4) of the byte sequence according to the lead byte.
- * @return TRUE if t is a valid trail byte in this context.
+ * @return true if t is a valid trail byte in this context.
*/
static inline UBool isValidTrail(int32_t prev, uint8_t t, int32_t i, int32_t length) {
// The first trail byte after a 3- or 4-byte lead byte
diff --git a/Build/source/libs/icu/icu-src/source/common/ustring.cpp b/Build/source/libs/icu/icu-src/source/common/ustring.cpp
index 67cb4544b9a..bba2d45c4e8 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustring.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustring.cpp
@@ -45,7 +45,7 @@ isMatchAtCPBoundary(const UChar *start, const UChar *match, const UChar *matchLi
/* the leading edge of the match is in the middle of a surrogate pair */
return FALSE;
}
- if(U16_IS_LEAD(*(matchLimit-1)) && match!=limit && U16_IS_TRAIL(*matchLimit)) {
+ if(U16_IS_LEAD(*(matchLimit-1)) && matchLimit!=limit && U16_IS_TRAIL(*matchLimit)) {
/* the trailing edge of the match is in the middle of a surrogate pair */
return FALSE;
}
@@ -1294,7 +1294,15 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
int32_t ahead = *offset + 1;
c = charAt(*offset, context);
if (c == 0x5C /*'\\'*/ && ahead < length) {
- c = (UChar) u_unescapeAt(charAt, &ahead, length, context);
+ // Calling u_unescapeAt recursively may cause a stack overflow if
+ // we have repeated surrogate lead after that. Limit the
+ // length to 5 ('u' and 4 hex) after ahead.
+ int32_t tailLimit = ahead + 5;
+ if (tailLimit > length) {
+ tailLimit = length;
+ }
+ c = (UChar) u_unescapeAt(charAt, &ahead, tailLimit,
+ context);
}
if (U16_IS_TRAIL(c)) {
*offset = ahead;
@@ -1451,6 +1459,14 @@ u_unescape(const char *src, UChar *dest, int32_t destCapacity) {
} \
} UPRV_BLOCK_MACRO_END
+U_CAPI UChar U_EXPORT2
+u_asciiToUpper(UChar c) {
+ if (u'a' <= c && c <= u'z') {
+ c = c + u'A' - u'a';
+ }
+ return c;
+}
+
U_CAPI int32_t U_EXPORT2
u_terminateUChars(UChar *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode) {
__TERMINATE_STRING(dest, destCapacity, length, pErrorCode);
diff --git a/Build/source/libs/icu/icu-src/source/common/utext.cpp b/Build/source/libs/icu/icu-src/source/common/utext.cpp
index 9a77228cfc6..e95632dfade 100644
--- a/Build/source/libs/icu/icu-src/source/common/utext.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/utext.cpp
@@ -16,6 +16,8 @@
* created by: Markus W. Scherer
*/
+#include <cstddef>
+
#include "unicode/utypes.h"
#include "unicode/ustring.h"
#include "unicode/unistr.h"
@@ -566,7 +568,7 @@ enum {
// when a provider asks for a UText to be allocated with extra storage.
struct ExtendedUText {
- UText ut;
+ UText ut;
max_align_t extension;
};
diff --git a/Build/source/libs/icu/icu-src/source/common/util.h b/Build/source/libs/icu/icu-src/source/common/util.h
index f3f71dce458..9c3b76d9ed5 100644
--- a/Build/source/libs/icu/icu-src/source/common/util.h
+++ b/Build/source/libs/icu/icu-src/source/common/util.h
@@ -64,8 +64,8 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s
/**
* Escape unprintable characters using \uxxxx notation for U+0000 to
* U+FFFF and \Uxxxxxxxx for U+10000 and above. If the character is
- * printable ASCII, then do nothing and return FALSE. Otherwise,
- * append the escaped notation and return TRUE.
+ * printable ASCII, then do nothing and return false. Otherwise,
+ * append the escaped notation and return true.
*/
static UBool escapeUnprintable(UnicodeString& result, UChar32 c);
@@ -95,7 +95,7 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s
* after pos, or str.length(), if there is none.
*/
static int32_t skipWhitespace(const UnicodeString& str, int32_t& pos,
- UBool advance = FALSE);
+ UBool advance = false);
/**
* Skip over Pattern_White_Space in a Replaceable.
diff --git a/Build/source/libs/icu/icu-src/source/common/utrie.h b/Build/source/libs/icu/icu-src/source/common/utrie.h
index 532ba778eb6..2fd2c461ffb 100644
--- a/Build/source/libs/icu/icu-src/source/common/utrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/utrie.h
@@ -460,13 +460,13 @@ UTrieEnumValue(const void *context, uint32_t value);
* of code points with the same value as retrieved from the trie and
* transformed by the UTrieEnumValue function.
*
- * The callback function can stop the enumeration by returning FALSE.
+ * The callback function can stop the enumeration by returning false.
*
* @param context an opaque pointer, as passed into utrie_enum()
* @param start the first code point in a contiguous range with value
* @param limit one past the last code point in a contiguous range with value
* @param value the value that is set for all code points in [start..limit[
- * @return FALSE to stop the enumeration
+ * @return false to stop the enumeration
*/
typedef UBool U_CALLCONV
UTrieEnumRange(const void *context, UChar32 start, UChar32 limit, uint32_t value);
@@ -667,7 +667,7 @@ utrie_getData(UNewTrie *trie, int32_t *pLength);
* @param trie the build-time trie
* @param c the code point
* @param value the value
- * @return FALSE if a failure occurred (illegal argument or data array overrun)
+ * @return false if a failure occurred (illegal argument or data array overrun)
*/
U_CAPI UBool U_EXPORT2
utrie_set32(UNewTrie *trie, UChar32 c, uint32_t value);
@@ -677,7 +677,7 @@ utrie_set32(UNewTrie *trie, UChar32 c, uint32_t value);
*
* @param trie the build-time trie
* @param c the code point
- * @param pInBlockZero if not NULL, then *pInBlockZero is set to TRUE
+ * @param pInBlockZero if not NULL, then *pInBlockZero is set to true
* iff the value is retrieved from block 0;
* block 0 is the all-initial-value initial block
* @return the value
@@ -688,14 +688,14 @@ utrie_get32(UNewTrie *trie, UChar32 c, UBool *pInBlockZero);
/**
* Set a value in a range of code points [start..limit[.
* All code points c with start<=c<limit will get the value if
- * overwrite is TRUE or if the old value is 0.
+ * overwrite is true or if the old value is 0.
*
* @param trie the build-time trie
* @param start the first code point to get the value
* @param limit one past the last code point to get the value
* @param value the value
* @param overwrite flag for whether old non-initial values are to be overwritten
- * @return FALSE if a failure occurred (illegal argument or data array overrun)
+ * @return false if a failure occurred (illegal argument or data array overrun)
*/
U_CAPI UBool U_EXPORT2
utrie_setRange32(UNewTrie *trie, UChar32 start, UChar32 limit, uint32_t value, UBool overwrite);
diff --git a/Build/source/libs/icu/icu-src/source/common/utrie2.h b/Build/source/libs/icu/icu-src/source/common/utrie2.h
index 671f44e16a6..d1e1e15a6e0 100644
--- a/Build/source/libs/icu/icu-src/source/common/utrie2.h
+++ b/Build/source/libs/icu/icu-src/source/common/utrie2.h
@@ -161,13 +161,13 @@ UTrie2EnumValue(const void *context, uint32_t value);
* of code points with the same value as retrieved from the trie and
* transformed by the UTrie2EnumValue function.
*
- * The callback function can stop the enumeration by returning FALSE.
+ * The callback function can stop the enumeration by returning false.
*
* @param context an opaque pointer, as passed into utrie2_enum()
* @param start the first code point in a contiguous range with value
* @param end the last code point in a contiguous range with value (inclusive)
* @param value the value that is set for all code points in [start..end]
- * @return FALSE to stop the enumeration
+ * @return false to stop the enumeration
*/
typedef UBool U_CALLCONV
UTrie2EnumRange(const void *context, UChar32 start, UChar32 end, uint32_t value);
@@ -256,7 +256,7 @@ utrie2_set32(UTrie2 *trie, UChar32 c, uint32_t value, UErrorCode *pErrorCode);
/**
* Set a value in a range of code points [start..end].
* All code points c with start<=c<=end will get the value if
- * overwrite is TRUE or if the old value is the initial value.
+ * overwrite is true or if the old value is the initial value.
*
* @param trie the unfrozen trie
* @param start the first code point to get the value
@@ -298,7 +298,7 @@ utrie2_freeze(UTrie2 *trie, UTrie2ValueBits valueBits, UErrorCode *pErrorCode);
* Test if the trie is frozen. (See utrie2_freeze().)
*
* @param trie the trie
- * @return TRUE if the trie is frozen, that is, immutable, ready for serialization
+ * @return true if the trie is frozen, that is, immutable, ready for serialization
* and for use with fast macros
*/
U_CAPI UBool U_EXPORT2
@@ -670,7 +670,7 @@ struct UTrie2 {
/* private: used by builder and unserialization functions */
void *memory; /* serialized bytes; NULL if not frozen yet */
int32_t length; /* number of serialized bytes at memory; 0 if not frozen yet */
- UBool isMemoryOwned; /* TRUE if the trie owns the memory */
+ UBool isMemoryOwned; /* true if the trie owns the memory */
UBool padding1;
int16_t padding2;
UNewTrie2 *newTrie; /* builder object; NULL when frozen */
@@ -796,7 +796,7 @@ enum {
* Do not call directly.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrie2_internalU8NextIndex(const UTrie2 *trie, UChar32 c,
const uint8_t *src, const uint8_t *limit);
@@ -805,7 +805,7 @@ utrie2_internalU8NextIndex(const UTrie2 *trie, UChar32 c,
* Do not call directly.
* @internal
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrie2_internalU8PrevIndex(const UTrie2 *trie, UChar32 c,
const uint8_t *start, const uint8_t *src);
diff --git a/Build/source/libs/icu/icu-src/source/common/utrie_swap.cpp b/Build/source/libs/icu/icu-src/source/common/utrie_swap.cpp
index 5abe7bd5d77..6e8b1383945 100644
--- a/Build/source/libs/icu/icu-src/source/common/utrie_swap.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/utrie_swap.cpp
@@ -256,20 +256,24 @@ ucptrie_swap(const UDataSwapper *ds,
ds->swapArray32(ds, &inTrie->signature, 4, &outTrie->signature, pErrorCode);
ds->swapArray16(ds, &inTrie->options, 12, &outTrie->options, pErrorCode);
- /* swap the index and the data */
+ /* swap the index */
+ const uint16_t *inIndex=reinterpret_cast<const uint16_t *>(inTrie+1);
+ uint16_t *outIndex=reinterpret_cast<uint16_t *>(outTrie+1);
+ ds->swapArray16(ds, inIndex, trie.indexLength*2, outIndex, pErrorCode);
+
+ /* swap the data */
+ const uint16_t *inData=inIndex+trie.indexLength;
+ uint16_t *outData=outIndex+trie.indexLength;
switch(valueWidth) {
case UCPTRIE_VALUE_BITS_16:
- ds->swapArray16(ds, inTrie+1, (trie.indexLength+dataLength)*2, outTrie+1, pErrorCode);
+ ds->swapArray16(ds, inData, dataLength*2, outData, pErrorCode);
break;
case UCPTRIE_VALUE_BITS_32:
- ds->swapArray16(ds, inTrie+1, trie.indexLength*2, outTrie+1, pErrorCode);
- ds->swapArray32(ds, (const uint16_t *)(inTrie+1)+trie.indexLength, dataLength*4,
- (uint16_t *)(outTrie+1)+trie.indexLength, pErrorCode);
+ ds->swapArray32(ds, inData, dataLength*4, outData, pErrorCode);
break;
case UCPTRIE_VALUE_BITS_8:
- ds->swapArray16(ds, inTrie+1, trie.indexLength*2, outTrie+1, pErrorCode);
if(inTrie!=outTrie) {
- uprv_memmove((outTrie+1)+trie.indexLength, (inTrie+1)+trie.indexLength, dataLength);
+ uprv_memmove(outData, inData, dataLength);
}
break;
default:
diff --git a/Build/source/libs/icu/icu-src/source/common/uts46.cpp b/Build/source/libs/icu/icu-src/source/common/uts46.cpp
index b9e6cb023bb..f25b4e12f12 100644
--- a/Build/source/libs/icu/icu-src/source/common/uts46.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uts46.cpp
@@ -714,6 +714,16 @@ UTS46::processLabel(UnicodeString &dest,
UBool wasPunycode;
if(labelLength>=4 && label[0]==0x78 && label[1]==0x6e && label[2]==0x2d && label[3]==0x2d) {
// Label starts with "xn--", try to un-Punycode it.
+ // In IDNA2008, labels like "xn--" (decodes to an empty string) and
+ // "xn--ASCII-" (decodes to just "ASCII") fail the round-trip validation from
+ // comparing the ToUnicode input with the back-to-ToASCII output.
+ // They are alternate encodings of the respective ASCII labels.
+ // Ignore "xn---" here: It will fail Punycode.decode() which logically comes before
+ // the round-trip verification.
+ if(labelLength==4 || (labelLength>5 && label[labelLength-1]==u'-')) {
+ info.labelErrors|=UIDNA_ERROR_INVALID_ACE_LABEL;
+ return markBadACELabel(dest, labelStart, labelLength, toASCII, info, errorCode);
+ }
wasPunycode=TRUE;
UChar *unicodeBuffer=fromPunycode.getBuffer(-1); // capacity==-1: most labels should fit
if(unicodeBuffer==NULL) {
@@ -925,10 +935,10 @@ UTS46::markBadACELabel(UnicodeString &dest,
UBool isASCII=TRUE;
UBool onlyLDH=TRUE;
const UChar *label=dest.getBuffer()+labelStart;
- // Ok to cast away const because we own the UnicodeString.
- UChar *s=(UChar *)label+4; // After the initial "xn--".
const UChar *limit=label+labelLength;
- do {
+ // Start after the initial "xn--".
+ // Ok to cast away const because we own the UnicodeString.
+ for(UChar *s=const_cast<UChar *>(label+4); s<limit; ++s) {
UChar c=*s;
if(c<=0x7f) {
if(c==0x2e) {
@@ -945,7 +955,7 @@ UTS46::markBadACELabel(UnicodeString &dest,
} else {
isASCII=onlyLDH=FALSE;
}
- } while(++s<limit);
+ }
if(onlyLDH) {
dest.insert(labelStart+labelLength, (UChar)0xfffd);
if(dest.isBogus()) {
diff --git a/Build/source/libs/icu/icu-src/source/common/utypes.cpp b/Build/source/libs/icu/icu-src/source/common/utypes.cpp
index 7531e465683..63e05b1249b 100644
--- a/Build/source/libs/icu/icu-src/source/common/utypes.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/utypes.cpp
@@ -104,7 +104,8 @@ _uErrorName[U_STANDARD_ERROR_LIMIT]={
"U_INVALID_STATE_ERROR",
"U_COLLATOR_VERSION_MISMATCH",
"U_USELESS_COLLATOR_ERROR",
- "U_NO_WRITE_PERMISSION"
+ "U_NO_WRITE_PERMISSION",
+ "U_INPUT_TOO_LONG_ERROR"
};
static const char * const
_uFmtErrorName[U_FMT_PARSE_ERROR_LIMIT - U_FMT_PARSE_ERROR_START] = {
diff --git a/Build/source/libs/icu/icu-src/source/common/uvector.h b/Build/source/libs/icu/icu-src/source/common/uvector.h
index 98318d14c60..a2bef923aff 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvector.h
+++ b/Build/source/libs/icu/icu-src/source/common/uvector.h
@@ -64,7 +64,7 @@ U_NAMESPACE_BEGIN
* uses a comparison function, or "comparer." If the comparer is not
* set, or is set to zero, then all such methods will act as if the
* vector contains no element. That is, indexOf() will always return
- * -1, contains() will always return FALSE, etc.
+ * -1, contains() will always return false, etc.
*
* <p><b>To do</b>
*
diff --git a/Build/source/libs/icu/icu-src/source/common/uvectr32.h b/Build/source/libs/icu/icu-src/source/common/uvectr32.h
index ba47daa75f1..0d81dfb5c1c 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvectr32.h
+++ b/Build/source/libs/icu/icu-src/source/common/uvectr32.h
@@ -214,7 +214,7 @@ public:
inline UBool UVector32::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
if ((minimumCapacity >= 0) && (capacity >= minimumCapacity)) {
- return TRUE;
+ return true;
} else {
return expandCapacity(minimumCapacity, status);
}
@@ -233,7 +233,7 @@ inline void UVector32::addElement(int32_t elem, UErrorCode &status) {
}
inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) {
- if (ensureCapacity(count+size, status) == FALSE) {
+ if (ensureCapacity(count+size, status) == false) {
return NULL;
}
int32_t *rp = elements+count;
diff --git a/Build/source/libs/icu/icu-src/source/common/uvectr64.h b/Build/source/libs/icu/icu-src/source/common/uvectr64.h
index 1cc9a501917..15c9b3f830c 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvectr64.h
+++ b/Build/source/libs/icu/icu-src/source/common/uvectr64.h
@@ -203,7 +203,7 @@ public:
inline UBool UVector64::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
if ((minimumCapacity >= 0) && (capacity >= minimumCapacity)) {
- return TRUE;
+ return true;
} else {
return expandCapacity(minimumCapacity, status);
}
@@ -222,7 +222,7 @@ inline void UVector64::addElement(int64_t elem, UErrorCode &status) {
}
inline int64_t *UVector64::reserveBlock(int32_t size, UErrorCode &status) {
- if (ensureCapacity(count+size, status) == FALSE) {
+ if (ensureCapacity(count+size, status) == false) {
return NULL;
}
int64_t *rp = elements+count;
diff --git a/Build/source/libs/icu/icu-src/source/common/wintz.cpp b/Build/source/libs/icu/icu-src/source/common/wintz.cpp
index 115512e704c..580cedadb67 100644
--- a/Build/source/libs/icu/icu-src/source/common/wintz.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/wintz.cpp
@@ -16,11 +16,12 @@
#if U_PLATFORM_USES_ONLY_WIN32_API
#include "wintz.h"
+#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
#include "unicode/ures.h"
-#include "unicode/ustring.h"
+#include "unicode/unistr.h"
#include "uresimp.h"
#ifndef WIN32_LEAN_AND_MEAN
@@ -35,89 +36,279 @@
U_NAMESPACE_BEGIN
-// The max size of TimeZoneKeyName is 128, defined in DYNAMIC_TIME_ZONE_INFORMATION
-#define MAX_TIMEZONE_ID_LENGTH 128
+// Note these constants and the struct are only used when dealing with the fallback path for RDP sesssions.
+
+// This is the location of the time zones in the registry on Vista+ systems.
+// See: https://docs.microsoft.com/windows/win32/api/timezoneapi/ns-timezoneapi-dynamic_time_zone_information
+#define WINDOWS_TIMEZONES_REG_KEY_PATH L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones"
+
+// Max length for a registry key is 255. +1 for null.
+// See: https://docs.microsoft.com/windows/win32/sysinfo/registry-element-size-limits
+#define WINDOWS_MAX_REG_KEY_LENGTH 256
+
+#if U_PLATFORM_HAS_WINUWP_API == 0
+
+// This is the layout of the TZI binary value in the registry.
+// See: https://docs.microsoft.com/windows/win32/api/timezoneapi/ns-timezoneapi-time_zone_information
+typedef struct _REG_TZI_FORMAT {
+ LONG Bias;
+ LONG StandardBias;
+ LONG DaylightBias;
+ SYSTEMTIME StandardDate;
+ SYSTEMTIME DaylightDate;
+} REG_TZI_FORMAT;
+
+#endif // U_PLATFORM_HAS_WINUWP_API
/**
-* Main Windows time zone detection function.
-* Returns the Windows time zone converted to an ICU time zone as a heap-allocated buffer, or nullptr upon failure.
-* Note: We use the Win32 API GetDynamicTimeZoneInformation to get the current time zone info.
-* This API returns a non-localized time zone name, which we can then map to an ICU time zone name.
+* This is main Windows time zone detection function.
+*
+* It returns the Windows time zone converted to an ICU time zone as a heap-allocated buffer, or nullptr upon failure.
+*
+* We use the Win32 API GetDynamicTimeZoneInformation (which is available since Vista) to get the current time zone info,
+* as this API returns a non-localized time zone name which can be then mapped to an ICU time zone.
+*
+* However, in some RDP/terminal services situations, this struct isn't always fully complete, and the TimeZoneKeyName
+* field of the struct might be NULL. This can happen with some 3rd party RDP clients, and also when using older versions
+* of the RDP protocol, which don't send the newer TimeZoneKeyNamei information and only send the StandardName and DaylightName.
+*
+* Since these 3rd party clients and older RDP clients only send the pre-Vista time zone information to the server, this means that we
+* need to fallback on using the pre-Vista methods to determine the time zone. This unfortunately requires examining the registry directly
+* in order to try and determine the current time zone.
+*
+* Note that this can however still fail in some cases though if the client and server are using different languages, as the StandardName
+* that is sent by client is localized in the client's language. However, we must compare this to the names that are on the server, which
+* are localized in registry using the server's language. Despite that, this is the best we can do.
+*
+* Note: This fallback method won't work for the UWP version though, as we can't use the registry APIs in UWP.
+*
+* Once we have the current Windows time zone, then we can then map it to an ICU time zone ID (~ Olsen ID).
*/
-U_INTERNAL const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uprv_detectWindowsTimeZone()
{
- UErrorCode status = U_ZERO_ERROR;
- char* icuid = nullptr;
- char dynamicTZKeyName[MAX_TIMEZONE_ID_LENGTH];
- char tmpid[MAX_TIMEZONE_ID_LENGTH];
- int32_t len;
- int id = GEOID_NOT_AVAILABLE;
- int errorCode;
- wchar_t ISOcodeW[3] = {}; /* 2 letter ISO code in UTF-16 */
- char ISOcode[3] = {}; /* 2 letter ISO code in UTF-8 */
-
+ // We first try to obtain the time zone directly by using the TimeZoneKeyName field of the DYNAMIC_TIME_ZONE_INFORMATION struct.
DYNAMIC_TIME_ZONE_INFORMATION dynamicTZI;
uprv_memset(&dynamicTZI, 0, sizeof(dynamicTZI));
- uprv_memset(dynamicTZKeyName, 0, sizeof(dynamicTZKeyName));
- uprv_memset(tmpid, 0, sizeof(tmpid));
+ SYSTEMTIME systemTimeAllZero;
+ uprv_memset(&systemTimeAllZero, 0, sizeof(systemTimeAllZero));
- /* Obtain TIME_ZONE_INFORMATION from the API and get the non-localized time zone name. */
- if (TIME_ZONE_ID_INVALID == GetDynamicTimeZoneInformation(&dynamicTZI)) {
+ if (GetDynamicTimeZoneInformation(&dynamicTZI) == TIME_ZONE_ID_INVALID) {
return nullptr;
}
- id = GetUserGeoID(GEOCLASS_NATION);
- errorCode = GetGeoInfoW(id, GEO_ISO2, ISOcodeW, 3, 0);
+ // If the DST setting has been turned off in the Control Panel, then return "Etc/GMT<offset>".
+ //
+ // Note: This logic is based on how the Control Panel itself determines if DST is 'off' on Windows.
+ // The code is somewhat convoluted; in a sort of pseudo-code it looks like this:
+ //
+ // IF (GetDynamicTimeZoneInformation != TIME_ZONE_ID_INVALID) && (DynamicDaylightTimeDisabled != 0) &&
+ // (StandardDate == DaylightDate) &&
+ // (
+ // (TimeZoneKeyName != Empty && StandardDate == 0) ||
+ // (TimeZoneKeyName == Empty && StandardDate != 0)
+ // )
+ // THEN
+ // DST setting is "Disabled".
+ //
+ if (dynamicTZI.DynamicDaylightTimeDisabled != 0 &&
+ uprv_memcmp(&dynamicTZI.StandardDate, &dynamicTZI.DaylightDate, sizeof(dynamicTZI.StandardDate)) == 0 &&
+ ((dynamicTZI.TimeZoneKeyName[0] != L'\0' && uprv_memcmp(&dynamicTZI.StandardDate, &systemTimeAllZero, sizeof(systemTimeAllZero)) == 0) ||
+ (dynamicTZI.TimeZoneKeyName[0] == L'\0' && uprv_memcmp(&dynamicTZI.StandardDate, &systemTimeAllZero, sizeof(systemTimeAllZero)) != 0)))
+ {
+ LONG utcOffsetMins = dynamicTZI.Bias;
+ if (utcOffsetMins == 0) {
+ return uprv_strdup("Etc/UTC");
+ }
- // convert from wchar_t* (UTF-16 on Windows) to char* (UTF-8).
- u_strToUTF8(ISOcode, UPRV_LENGTHOF(ISOcode), nullptr,
- reinterpret_cast<const UChar*>(ISOcodeW), UPRV_LENGTHOF(ISOcodeW), &status);
+ // No way to support when DST is turned off and the offset in minutes is not a multiple of 60.
+ if (utcOffsetMins % 60 == 0) {
+ char gmtOffsetTz[11] = {}; // "Etc/GMT+dd" is 11-char long with a terminal null.
+ // Note '-' before 'utcOffsetMin'. The timezone ID's sign convention
+ // is that a timezone ahead of UTC is Etc/GMT-<offset> and a timezone
+ // behind UTC is Etc/GMT+<offset>.
+ int ret = snprintf(gmtOffsetTz, UPRV_LENGTHOF(gmtOffsetTz), "Etc/GMT%+ld", -utcOffsetMins / 60);
+ if (ret > 0 && ret < UPRV_LENGTHOF(gmtOffsetTz)) {
+ return uprv_strdup(gmtOffsetTz);
+ }
+ }
+ }
- LocalUResourceBundlePointer bundle(ures_openDirect(nullptr, "windowsZones", &status));
- ures_getByKey(bundle.getAlias(), "mapTimezones", bundle.getAlias(), &status);
+ // If DST is NOT disabled, but the TimeZoneKeyName field of the struct is NULL, then we may be dealing with a
+ // RDP/terminal services session where the 'Time Zone Redirection' feature is enabled. However, either the RDP
+ // client sent the server incomplete info (some 3rd party RDP clients only send the StandardName and DaylightName,
+ // but do not send the important TimeZoneKeyName), or if the RDP server has not appropriately populated the struct correctly.
+ //
+ // In this case we unfortunately have no choice but to fallback to using the pre-Vista method of determining the
+ // time zone, which requires examining the registry directly.
+ //
+ // Note that this can however still fail though if the client and server are using different languages, as the StandardName
+ // that is sent by client is *localized* in the client's language. However, we must compare this to the names that are
+ // on the server, which are *localized* in registry using the server's language.
+ //
+ // One other note is that this fallback method doesn't work for the UWP version, as we can't use the registry APIs.
- // convert from wchar_t* (UTF-16 on Windows) to char* (UTF-8).
- u_strToUTF8(dynamicTZKeyName, UPRV_LENGTHOF(dynamicTZKeyName), nullptr,
- reinterpret_cast<const UChar*>(dynamicTZI.TimeZoneKeyName), -1, &status);
+ // windowsTimeZoneName will point at timezoneSubKeyName if we had to fallback to using the registry, and we found a match.
+ WCHAR timezoneSubKeyName[WINDOWS_MAX_REG_KEY_LENGTH];
+ WCHAR *windowsTimeZoneName = dynamicTZI.TimeZoneKeyName;
- if (U_FAILURE(status)) {
+ if (dynamicTZI.TimeZoneKeyName[0] == 0) {
+
+// We can't use the registry APIs in the UWP version.
+#if U_PLATFORM_HAS_WINUWP_API == 1
+ (void)timezoneSubKeyName; // suppress unused variable warnings.
return nullptr;
- }
+#else
+ // Open the path to the time zones in the Windows registry.
+ LONG ret;
+ HKEY hKeyAllTimeZones = nullptr;
+ ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, WINDOWS_TIMEZONES_REG_KEY_PATH, 0, KEY_READ,
+ reinterpret_cast<PHKEY>(&hKeyAllTimeZones));
+
+ if (ret != ERROR_SUCCESS) {
+ // If we can't open the key, then we can't do much, so fail.
+ return nullptr;
+ }
+
+ // Read the number of subkeys under the time zone registry path.
+ DWORD numTimeZoneSubKeys;
+ ret = RegQueryInfoKeyW(hKeyAllTimeZones, nullptr, nullptr, nullptr, &numTimeZoneSubKeys,
+ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
+
+ if (ret != ERROR_SUCCESS) {
+ RegCloseKey(hKeyAllTimeZones);
+ return nullptr;
+ }
+
+ // Examine each of the subkeys to try and find a match for the localized standard name ("Std").
+ //
+ // Note: The name of the time zone subkey itself is not localized, but the "Std" name is localized. This means
+ // that we could fail to find a match if the RDP client and RDP server are using different languages, but unfortunately
+ // there isn't much we can do about it.
+ HKEY hKeyTimeZoneSubKey = nullptr;
+ ULONG registryValueType;
+ WCHAR registryStandardName[WINDOWS_MAX_REG_KEY_LENGTH];
- if (dynamicTZI.TimeZoneKeyName[0] != 0) {
- StackUResourceBundle winTZ;
- ures_getByKey(bundle.getAlias(), dynamicTZKeyName, winTZ.getAlias(), &status);
+ for (DWORD i = 0; i < numTimeZoneSubKeys; i++) {
+ // Note: RegEnumKeyExW wants the size of the buffer in characters.
+ DWORD size = UPRV_LENGTHOF(timezoneSubKeyName);
+ ret = RegEnumKeyExW(hKeyAllTimeZones, i, timezoneSubKeyName, &size, nullptr, nullptr, nullptr, nullptr);
- if (U_SUCCESS(status)) {
- const UChar* icuTZ = nullptr;
- if (errorCode != 0) {
- icuTZ = ures_getStringByKey(winTZ.getAlias(), ISOcode, &len, &status);
+ if (ret != ERROR_SUCCESS) {
+ RegCloseKey(hKeyAllTimeZones);
+ return nullptr;
}
- if (errorCode == 0 || icuTZ == nullptr) {
- /* fallback to default "001" and reset status */
- status = U_ZERO_ERROR;
- icuTZ = ures_getStringByKey(winTZ.getAlias(), "001", &len, &status);
+
+ ret = RegOpenKeyExW(hKeyAllTimeZones, timezoneSubKeyName, 0, KEY_READ,
+ reinterpret_cast<PHKEY>(&hKeyTimeZoneSubKey));
+
+ if (ret != ERROR_SUCCESS) {
+ RegCloseKey(hKeyAllTimeZones);
+ return nullptr;
}
- if (U_SUCCESS(status)) {
- int index = 0;
+ // Note: RegQueryValueExW wants the size of the buffer in bytes.
+ size = sizeof(registryStandardName);
+ ret = RegQueryValueExW(hKeyTimeZoneSubKey, L"Std", nullptr, &registryValueType,
+ reinterpret_cast<LPBYTE>(registryStandardName), &size);
+
+ if (ret != ERROR_SUCCESS || registryValueType != REG_SZ) {
+ RegCloseKey(hKeyTimeZoneSubKey);
+ RegCloseKey(hKeyAllTimeZones);
+ return nullptr;
+ }
+
+ // Note: wcscmp does an ordinal (byte) comparison.
+ if (wcscmp(reinterpret_cast<WCHAR *>(registryStandardName), dynamicTZI.StandardName) == 0) {
+ // Since we are comparing the *localized* time zone name, it's possible that some languages might use
+ // the same string for more than one time zone. Thus we need to examine the TZI data in the registry to
+ // compare the GMT offset (the bias), and the DST transition dates, to ensure it's the same time zone
+ // as the currently reported one.
+ REG_TZI_FORMAT registryTziValue;
+ uprv_memset(&registryTziValue, 0, sizeof(registryTziValue));
+
+ // Note: RegQueryValueExW wants the size of the buffer in bytes.
+ DWORD timezoneTziValueSize = sizeof(registryTziValue);
+ ret = RegQueryValueExW(hKeyTimeZoneSubKey, L"TZI", nullptr, &registryValueType,
+ reinterpret_cast<LPBYTE>(&registryTziValue), &timezoneTziValueSize);
- while (!(*icuTZ == '\0' || *icuTZ == ' ')) {
- // time zone IDs only contain ASCII invariant characters.
- tmpid[index++] = (char)(*icuTZ++);
+ if (ret == ERROR_SUCCESS) {
+ if ((dynamicTZI.Bias == registryTziValue.Bias) &&
+ (memcmp((const void *)&dynamicTZI.StandardDate, (const void *)&registryTziValue.StandardDate, sizeof(SYSTEMTIME)) == 0) &&
+ (memcmp((const void *)&dynamicTZI.DaylightDate, (const void *)&registryTziValue.DaylightDate, sizeof(SYSTEMTIME)) == 0))
+ {
+ // We found a matching time zone.
+ windowsTimeZoneName = timezoneSubKeyName;
+ break;
+ }
}
- tmpid[index] = '\0';
}
+ RegCloseKey(hKeyTimeZoneSubKey);
+ hKeyTimeZoneSubKey = nullptr;
+ }
+
+ if (hKeyTimeZoneSubKey != nullptr) {
+ RegCloseKey(hKeyTimeZoneSubKey);
}
+ if (hKeyAllTimeZones != nullptr) {
+ RegCloseKey(hKeyAllTimeZones);
+ }
+#endif // U_PLATFORM_HAS_WINUWP_API
}
- // Copy the timezone ID to icuid to be returned.
- if (tmpid[0] != 0) {
- icuid = uprv_strdup(tmpid);
+ CharString winTZ;
+ UErrorCode status = U_ZERO_ERROR;
+ winTZ.appendInvariantChars(UnicodeString(TRUE, windowsTimeZoneName, -1), status);
+
+ // Map Windows Timezone name (non-localized) to ICU timezone ID (~ Olson timezone id).
+ StackUResourceBundle winTZBundle;
+ ures_openDirectFillIn(winTZBundle.getAlias(), nullptr, "windowsZones", &status);
+ ures_getByKey(winTZBundle.getAlias(), "mapTimezones", winTZBundle.getAlias(), &status);
+ ures_getByKey(winTZBundle.getAlias(), winTZ.data(), winTZBundle.getAlias(), &status);
+
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+
+ // Note: Since the ISO 3166 country/region codes are all invariant ASCII chars, we can
+ // directly downcast from wchar_t to do the conversion.
+ // We could call the A version of the GetGeoInfo API, but that would be slightly slower than calling the W API,
+ // as the A version of the API will end up calling MultiByteToWideChar anyways internally.
+ wchar_t regionCodeW[3] = {};
+ char regionCode[3] = {}; // 2 letter ISO 3166 country/region code made entirely of invariant chars.
+ int geoId = GetUserGeoID(GEOCLASS_NATION);
+ int regionCodeLen = GetGeoInfoW(geoId, GEO_ISO2, regionCodeW, UPRV_LENGTHOF(regionCodeW), 0);
+
+ const UChar *icuTZ16 = nullptr;
+ int32_t tzListLen = 0;
+
+ if (regionCodeLen != 0) {
+ for (int i = 0; i < UPRV_LENGTHOF(regionCodeW); i++) {
+ regionCode[i] = static_cast<char>(regionCodeW[i]);
+ }
+ icuTZ16 = ures_getStringByKey(winTZBundle.getAlias(), regionCode, &tzListLen, &status);
+ }
+ if (regionCodeLen == 0 || U_FAILURE(status)) {
+ // fallback to default "001" (world)
+ status = U_ZERO_ERROR;
+ icuTZ16 = ures_getStringByKey(winTZBundle.getAlias(), "001", &tzListLen, &status);
+ }
+
+ // Note: We want the first entry in the string returned by ures_getStringByKey.
+ // However this string can be a space delimited list of timezones:
+ // Ex: "America/New_York America/Detroit America/Indiana/Petersburg ..."
+ // We need to stop at the first space, so we pass tzLen (instead of tzListLen) to appendInvariantChars below.
+ int32_t tzLen = 0;
+ if (tzListLen > 0) {
+ while (!(icuTZ16[tzLen] == u'\0' || icuTZ16[tzLen] == u' ')) {
+ tzLen++;
+ }
}
- return icuid;
+ // Note: cloneData returns nullptr if the status is a failure, so this
+ // will return nullptr if the above look-up fails.
+ CharString icuTZStr;
+ return icuTZStr.appendInvariantChars(icuTZ16, tzLen, status).cloneData(status);
}
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/common/wintz.h b/Build/source/libs/icu/icu-src/source/common/wintz.h
index cd8565eef1e..ce9c1e90192 100644
--- a/Build/source/libs/icu/icu-src/source/common/wintz.h
+++ b/Build/source/libs/icu/icu-src/source/common/wintz.h
@@ -28,7 +28,7 @@ U_CDECL_BEGIN
typedef struct _TIME_ZONE_INFORMATION TIME_ZONE_INFORMATION;
U_CDECL_END
-U_INTERNAL const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uprv_detectWindowsTimeZone();
#endif /* U_PLATFORM_USES_ONLY_WIN32_API */
diff --git a/Build/source/libs/icu/icu-src/source/config/dist-data.sh b/Build/source/libs/icu/icu-src/source/config/dist-data.sh
new file mode 100755
index 00000000000..442267108ba
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/config/dist-data.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+# Copyright (C) 2020 and later: Unicode, Inc. and others.
+
+# set VERSION to the ICU version. set top_srcdir to the parent of icurc
+# Note: You need to set LD_LIBRARY_PATH/etc before calling this script.
+export LD_LIBRARY_PATH=./lib:${LD_LIBRARY_PATH-/lib:/usr/lib:/usr/local/lib}
+export DYLD_LIBRARY_PATH=./lib:${DYLD_LIBRARY_PATH-/lib:/usr/lib:/usr/local/lib}
+
+if [ ! -d "${top_srcdir}" ]
+then
+ echo >&2 "$0: please set 'top_srcdir' to the icu/icu4c/source dir"
+ exit 1
+fi
+LICENSE=${LICENSE-${top_srcdir}/../LICENSE}
+
+if [ ! -f "${LICENSE}" ]
+then
+ echo >&2 "$0: could not load license file ${LICENSE}"
+ exit 1
+fi
+
+DATFILE=${DATFILE-$(ls data/out/tmp/icudt*.dat| head -1)}
+
+if [ ! -f "${DATFILE}" ]
+then
+ echo >&2 "$0: could not find DATFILE ${DATFILE}"
+ exit 1
+fi
+
+VERS=$(echo ${DATFILE} | tr -d a-z/.)
+VERSION=${VERSION-unknown}
+
+if [[ "${VERSION}" = "unknown" ]];
+then
+ VERSION=${VERS}.0
+ echo "$0: VERSION not set, using ${VERSION}"
+else
+ if [[ "${VERS}" != $(echo ${VERSION} | cut -d. -f1) ]]
+ then
+ echo >&2 "$0: Warning: Expected version ${VERSION} to start with ${VERS}..."
+ fi
+fi
+
+# yeah, override ENDIANS if you want a different flavor.
+#ENDIANS="b l e"
+ENDIANS=${ENDIANS-"b l"}
+DISTY_DIR=${DISTY_DIR-./dist/}
+
+if [ ! -x ./bin/icupkg ]
+then
+ echo >&2 "$0: could not find executable ./bin/icupkg"
+ exit 1
+fi
+
+echo "# Packing ${DATFILE} into data zips in dist/ for version ${VERSION}"
+mkdir -p ${DISTY_DIR}/tmp
+
+for endian in $ENDIANS;
+do
+ base=icu4c-${VERSION}-data-bin-${endian}.zip
+ filename=icudt${VERS}${endian}.dat
+ if [ -f ${DISTY_DIR}/${base} ];
+ then
+ echo ${DISTY_DIR}/${base} exists, skipping
+ continue
+ fi
+ rm -f ${DISTY_DIR}/tmp/${filename}
+ echo ./bin/icupkg -t${endian} ${DATFILE} ${DISTY_DIR}/tmp/${filename}
+ ./bin/icupkg -t${endian} ${DATFILE} ${DISTY_DIR}/tmp/${filename}
+ README=icu4c-${VERSION}-data-bin-${endian}-README.md
+ cat >> ${DISTY_DIR}/tmp/${README} <<EOF
+# ICU Data Zip for ${VERSION}
+
+For information on Unicode ICU, see [http://icu-project.org](http://icu-project.org)
+
+## Contents
+
+This .zip file contains:
+
+- this README
+- [LICENSE](./LICENSE)
+- ${filename}
+
+## How to use this file
+
+This file contains prebuilt data in form **${endian}**.
+("l" for Little Endian, "b" for Big Endian, "e" for EBCDIC.)
+It may be used to simplify build and installation of ICU.
+See [http://icu-project.org](http://icu-project.org) for further information.
+
+## License
+
+See [LICENSE](./LICENSE).
+
+> Copyright © 2016 and later Unicode, Inc. and others. All Rights Reserved.
+Unicode and the Unicode Logo are registered trademarks
+of Unicode, Inc. in the U.S. and other countries.
+[Terms of Use and License](http://www.unicode.org/copyright.html)
+
+EOF
+ zip -v -j ${DISTY_DIR}/${base} \
+ ${LICENSE} \
+ ${DISTY_DIR}/tmp/${README} \
+ ${DISTY_DIR}/tmp/${filename}
+ ls -lh ${DISTY_DIR}/${base}
+done
diff --git a/Build/source/libs/icu/icu-src/source/config/dist.mk b/Build/source/libs/icu/icu-src/source/config/dist.mk
index a990181cec6..f45133eddb5 100644
--- a/Build/source/libs/icu/icu-src/source/config/dist.mk
+++ b/Build/source/libs/icu/icu-src/source/config/dist.mk
@@ -83,8 +83,8 @@ $(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) $(DISTY_DATA_ZIP): $(DISTY_DAT) $(DISTY_TMP
ln -f $(DISTY_DATA_ZIP) $(DISTY_FILE_DIR)/icu4c-$(DISTY_VER)-data.zip
ls -l $(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) $(DISTY_DATA_ZIP)
-
dist-local: $(DISTY_FILES)
+ VERSION=$(VERSION) $(SHELL) $(top_srcdir)/config/dist-data.sh
distcheck: distcheck-tgz
diff --git a/Build/source/libs/icu/icu-src/source/config/icu-config-bottom b/Build/source/libs/icu/icu-src/source/config/icu-config-bottom
index 20d0cdd8b64..b0e55af6e85 100644
--- a/Build/source/libs/icu/icu-src/source/config/icu-config-bottom
+++ b/Build/source/libs/icu/icu-src/source/config/icu-config-bottom
@@ -5,7 +5,13 @@
## Copyright (c) 2002-2013, International Business Machines Corporation and
## others. All Rights Reserved.
-ICUUC_FILE="${libdir}/${ICULIBS_COMMON_LIB_NAME}"
+# For MinGW do we want the common DLL to go into the bin location?
+if [ "$MINGW_MOVEDLLSTOBINDIR" = "YES" ]; then
+ ICUUC_FILE="${bindir}/${ICULIBS_COMMON_LIB_NAME}"
+else
+ ICUUC_FILE="${libdir}/${ICULIBS_COMMON_LIB_NAME}"
+fi
+
ICUUC_FILE_A="${libdir}/${ICULIBS_COMMON_LIB_NAME_A}"
# echo ENABLE RPATH $ENABLE_RPATH and RPATHLDFLAGS=${RPATH_LDFLAGS}
@@ -92,7 +98,7 @@ usage()
echo "Copyright (c) 2002-2013, International Business Machines Corporation and others. All Rights Reserved."
echo
echo "NOTE: Please consider using the pkg-config (.pc) files instead of icu-config."
- echo " See: <http://userguide.icu-project.org/howtouseicu#TOC-pkg-config> "
+ echo " See: <https://unicode-org.github.io/icu/userguide/howtouseicu> "
}
## Check the sanity of current variables
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-cygwin b/Build/source/libs/icu/icu-src/source/config/mh-cygwin
index 1b09a5bf928..3e457d53d51 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-cygwin
+++ b/Build/source/libs/icu/icu-src/source/config/mh-cygwin
@@ -105,7 +105,7 @@ ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR)
#%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
# $(RM) $@ && cp ${<F} $@
%.$(SO): %$(SO_TARGET_VERSION_MAJOR).$(SO)
- $(RM) $(subst cyg,lib,$@).$(A) && ln -s $(subst cyg,lib,${<F}).$(A) $(subst cyg,lib,$@).$(A)
+ ln -fs $(subst cyg,lib,${<F}).$(A) $(subst cyg,lib,$@).$(A)
## Install libraries as executable
INSTALL-L=$(INSTALL_PROGRAM)
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-cygwin64 b/Build/source/libs/icu/icu-src/source/config/mh-cygwin64
index 0eee4736846..4aa2505f1e7 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-cygwin64
+++ b/Build/source/libs/icu/icu-src/source/config/mh-cygwin64
@@ -105,7 +105,7 @@ ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR)
#%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
# $(RM) $@ && cp ${<F} $@
%.$(SO): %$(SO_TARGET_VERSION_MAJOR).$(SO)
- $(RM) $(subst cyg,lib,$@).$(A) && ln -s $(subst cyg,lib,${<F}).$(A) $(subst cyg,lib,$@).$(A)
+ ln -fs $(subst cyg,lib,${<F}).$(A) $(subst cyg,lib,$@).$(A)
## Install libraries as executable
INSTALL-L=$(INSTALL_PROGRAM)
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-mingw b/Build/source/libs/icu/icu-src/source/config/mh-mingw
index e2a49d77905..a53c8797b41 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-mingw
+++ b/Build/source/libs/icu/icu-src/source/config/mh-mingw
@@ -10,6 +10,11 @@
# This file is similar to mh-mingw64
# Any changes made here may also need to be made in mh-mingw64
+# On Windows we generally have the DLLs in the bin directory rather than the lib directory.
+# This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
+# If you prefer to have the DLLs in the lib folder, then set this to NO instead.
+MINGW_MOVEDLLSTOBINDIR = YES
+
# We install sbin tools into the same bin directory because
# pkgdata needs some of the tools in sbin, and we can't always depend on
# icu-config working on Windows.
@@ -79,7 +84,10 @@ IMPORT_LIB_EXT = .dll.a
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-#SH#ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
#SH#
#SH## ICULIBS is the set of libraries your application should link
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
@@ -145,8 +153,6 @@ MIDDLE_IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
## Special pkgdata information that is needed
PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
-#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M#
-#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M#
## Versioned libraries rules
#%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-mingw64 b/Build/source/libs/icu/icu-src/source/config/mh-mingw64
index 456997a5e94..afe2c0e80cd 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-mingw64
+++ b/Build/source/libs/icu/icu-src/source/config/mh-mingw64
@@ -7,6 +7,11 @@
# TODO: Finish the rest of this port. This platform port is incomplete.
+# On Windows we generally have the DLLs in the bin directory rather than the lib directory.
+# This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
+# If you prefer to have the DLLs in the lib folder, then set this to NO instead.
+MINGW_MOVEDLLSTOBINDIR = YES
+
# This file is similar to mh-mingw
# Any changes made here may also need to be made in mh-mingw
@@ -97,7 +102,10 @@ LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-#SH#ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
#SH#
#SH## ICULIBS is the set of libraries your application should link
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
@@ -163,8 +171,6 @@ MIDDLE_IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
## Special pkgdata information that is needed
PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
-#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M#
-#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M#
## Versioned libraries rules
#%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
diff --git a/Build/source/libs/icu/icu-src/source/configure b/Build/source/libs/icu/icu-src/source/configure
index ed5c8745ca7..7df8e6270d6 100755
--- a/Build/source/libs/icu/icu-src/source/configure
+++ b/Build/source/libs/icu/icu-src/source/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ICU 65.1.
+# Generated by GNU Autoconf 2.69 for ICU 68.2.
#
# Report bugs to <http://icu-project.org/bugs>.
#
@@ -582,8 +582,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ICU'
PACKAGE_TARNAME='International Components for Unicode'
-PACKAGE_VERSION='65.1'
-PACKAGE_STRING='ICU 65.1'
+PACKAGE_VERSION='68.2'
+PACKAGE_STRING='ICU 68.2'
PACKAGE_BUGREPORT='http://icu-project.org/bugs'
PACKAGE_URL='http://icu-project.org'
@@ -645,6 +645,8 @@ ICULIBSUFFIX
DATA_PACKAGING_MODE
thepkgicudatadir
pkgicudatadir
+U_HAVE_DATA
+DATA_TRUE
U_HAVE_FUZZER
FUZZER_TRUE
U_HAVE_TOOLS
@@ -1362,7 +1364,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ICU 65.1 to adapt to many kinds of systems.
+\`configure' configures ICU 68.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1428,7 +1430,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ICU 65.1:";;
+ short | recursive ) echo "Configuration of ICU 68.2:";;
esac
cat <<\_ACEOF
@@ -1475,7 +1477,7 @@ Optional Packages:
library shared library (.dll/.so/etc.)
static static library (.a/.lib/etc.)
auto build shared if possible (default)
- See http://userguide.icu-project.org/icudata for more info.
+ See https://unicode-org.github.io/icu/userguide/icudata for more info.
--with-library-suffix=suffix tag a suffix to the library names default=
Some influential environment variables:
@@ -1566,7 +1568,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ICU configure 65.1
+ICU configure 68.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2312,7 +2314,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ICU $as_me 65.1, which was
+It was created by ICU $as_me 68.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -7770,6 +7772,16 @@ else
fi
+
+if test "$tools" = true || test "$cross_compiling" = "yes"; then
+ DATA_TRUE=
+ U_HAVE_DATA=1
+else
+ DATA_TRUE='#'
+ U_HAVE_DATA=0
+fi
+
+
# Check whether --with-data-packaging was given.
if test "${with_data_packaging+set}" = set; then :
withval=$with_data_packaging; case "${withval}" in
@@ -7988,7 +8000,7 @@ echo "CXXFLAGS=$CXXFLAGS"
# output the Makefiles
-ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile tools/escapesrc/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile test/fuzzer/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile"
+ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile tools/escapesrc/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/localecanperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile test/fuzzer/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -8533,7 +8545,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by ICU $as_me 65.1, which was
+This file was extended by ICU $as_me 68.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -8587,7 +8599,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-ICU config.status 65.1
+ICU config.status 68.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -8751,6 +8763,7 @@ do
"test/perf/ubrkperf/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/ubrkperf/Makefile" ;;
"test/perf/charperf/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/charperf/Makefile" ;;
"test/perf/convperf/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/convperf/Makefile" ;;
+ "test/perf/localecanperf/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/localecanperf/Makefile" ;;
"test/perf/normperf/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/normperf/Makefile" ;;
"test/perf/DateFmtPerf/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/DateFmtPerf/Makefile" ;;
"test/perf/howExpensiveIs/Makefile") CONFIG_FILES="$CONFIG_FILES test/perf/howExpensiveIs/Makefile" ;;
diff --git a/Build/source/libs/icu/icu-src/source/configure.ac b/Build/source/libs/icu/icu-src/source/configure.ac
index b3467ccd4ea..1796ca07555 100644
--- a/Build/source/libs/icu/icu-src/source/configure.ac
+++ b/Build/source/libs/icu/icu-src/source/configure.ac
@@ -16,6 +16,10 @@ AC_INIT([ICU],
[International Components for Unicode],
[http://icu-project.org])
+# Instruct Python to never write any byte code to the ICU source tree.
+PYTHONDONTWRITEBYTECODE=1
+export PYTHONDONTWRITEBYTECODE
+
AC_CONFIG_MACRO_DIR([config/m4])
AC_CONFIG_SRCDIR([common/unicode/utypes.h])
@@ -143,10 +147,10 @@ AC_SUBST(ENABLE_RELEASE)
: ${CXXFLAGS=""}
# Checks for compilers
-AC_PROG_CC([gcc cc clang c99 c89 xlc_r xlc cl.exe icc])
+AC_PROG_CC([clang gcc cc c99 c89 xlc_r xlc cl.exe icc])
# Make sure that we try clang++ first, which provides C++11 support.
# The g++ compiler is less likely to support C++11.
-AC_PROG_CXX([g++ c++ clang++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC])
+AC_PROG_CXX([clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC])
# pkg-config is needed for harfbuzz support
PKG_PROG_PKG_CONFIG([0.20])
@@ -195,7 +199,9 @@ fi
#AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true)
#AC_CHECK_PROG(STRIP, strip, strip, true)
-AC_CHECK_PROGS(PYTHON3, python3)
+# TODO(ICU-20301): Remove fallback to Python 2.
+AC_CHECK_PROGS(PYTHON, python3 "py -3" python "py")
+AC_SUBST(PYTHON)
# Check for the platform make
AC_PATH_PROGS(U_MAKE, gmake gnumake, make)
@@ -521,12 +527,11 @@ if [[ "$GXX" = yes ]]; then
else
CXXFLAGS="$OLD_CXXFLAGS"
fi
-# TL: why? http://bugs.icu-project.org/trac/ticket/13543
-# case "${host}" in
-# *-*-solaris*)
-# CXXFLAGS="$OLD_CXXFLAGS"
-# ;;
-# esac
+ case "${host}" in
+ *-*-solaris*)
+ CXXFLAGS="$OLD_CXXFLAGS"
+ ;;
+ esac
fi
fi
@@ -898,6 +903,14 @@ else
fi
AC_SUBST(U_HAVE_STRTOD_L)
+# Check if C++17 std::string_view is available.
+AC_LANG_PUSH([C++])
+AC_CHECK_TYPE(std::string_view, [], [], [[#include <string_view>]])
+if test "x$ac_cv_type_std__string_view" = xyes; then :
+ CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRING_VIEW=1"
+fi
+AC_LANG_POP([C++])
+
# Checks for typedefs
AC_CHECK_TYPE(int8_t,signed char)
AC_CHECK_TYPE(uint8_t,unsigned char)
@@ -1119,6 +1132,19 @@ AC_ARG_ENABLE(tools,
tools=true)
ICU_CONDITIONAL(TOOLS, test "$tools" = true)
+# Enable/disable fuzzer target tests.
+AC_ARG_ENABLE(fuzzer,
+ [ --enable-fuzzer build ICU's fuzzer test targets [default=no]],
+ [case "${enableval}" in
+ yes) fuzzer=true ;;
+ no) fuzzer=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-fuzzer) ;;
+ esac],
+ fuzzer=false)
+ICU_CONDITIONAL(FUZZER, test "$fuzzer" = true)
+
+ICU_CONDITIONAL(DATA, test "$tools" = true || test "$cross_compiling" = "yes")
+
AC_ARG_WITH(data-packaging,
[ --with-data-packaging specify how to package ICU data. Possible values:
files raw files (.res, etc)
@@ -1126,7 +1152,7 @@ AC_ARG_WITH(data-packaging,
library shared library (.dll/.so/etc.)
static static library (.a/.lib/etc.)
auto build shared if possible (default)
- See http://userguide.icu-project.org/icudata for more info.],
+ See https://unicode-org.github.io/icu/userguide/icudata for more info.],
[case "${withval}" in
files|archive|library) datapackaging=$withval ;;
auto) datapackaging=$withval ;;
@@ -1291,14 +1317,15 @@ fi
# Now that we're done using CPPFLAGS etc. for tests, we can change it
# for build.
-if test "${CC}" == "clang"; then
+if test "${CC}" = "clang"; then
CLANGCFLAGS="-Qunused-arguments -Wno-parentheses-equality"
else
CLANGCFLAGS=""
fi
-if test "${CXX}" == "clang++"; then
+if test "${CXX}" = "clang++"; then
CLANGCXXFLAGS="-Qunused-arguments -Wno-parentheses-equality"
+ LIBCXXFLAGS="$LIBCXXFLAGS -Wglobal-constructors"
else
CLANGCXXFLAGS=""
fi
@@ -1382,10 +1409,46 @@ AC_CONFIG_FILES([icudefs.mk \
test/perf/utfperf/Makefile \
test/perf/utrie2perf/Makefile \
test/perf/leperf/Makefile \
+ test/fuzzer/Makefile \
samples/Makefile samples/date/Makefile \
samples/cal/Makefile samples/layout/Makefile])
AC_OUTPUT
+if test -z "$PYTHON";
+then
+ echo "" > data/rules.mk
+ echo "" > test/testdata/rules.mk
+else
+ if test -f "$srcdir/data/locales/root.txt";
+ then
+ echo "Spawning Python to generate data/rules.mk..."
+ PYTHONPATH="$srcdir/python" \
+ $PYTHON -m icutools.databuilder \
+ --mode gnumake \
+ --seqmode parallel \
+ --src_dir "$srcdir/data" \
+ --filter_file "$ICU_DATA_FILTER_FILE" \
+ $ICU_DATA_BUILDTOOL_OPTS \
+ > data/rules.mk
+ if test "$?" != "0"; then
+ AC_MSG_ERROR(Python failed to run; see above error.)
+ fi
+ else
+ echo "Not rebuilding data/rules.mk, assuming prebuilt data in data/in"
+ touch data/rules.mk
+ fi
+ echo "Spawning Python to generate test/testdata/rules.mk..."
+ PYTHONPATH="$srcdir/python" \
+ $PYTHON -m icutools.databuilder \
+ --mode gnumake \
+ --seqmode parallel \
+ --src_dir "$srcdir/test/testdata" \
+ > test/testdata/rules.mk
+ if test "$?" != "0"; then
+ AC_MSG_ERROR(Python failed to run; see above error.)
+ fi
+fi
+
echo
echo "ICU for C/C++ $VERSION is ready to be built."
echo "=== Important Notes: ==="
@@ -1465,17 +1528,9 @@ then
echo "## Expect build failures in the 'data', 'test', and other directories."
fi
-if test -z "$PYTHON3";
+if test -z "$PYTHON";
then
- echo ""
- echo "NOTICE: Unable to find Python 3. ICU versions 64 and later will require Python 3 to build."
- echo "See ICU-10923 for more information: https://unicode-org.atlassian.net/browse/ICU-10923"
- echo ""
-else
- echo ""
- echo "Found Python 3. You are all set for ICU 64, which will require Python 3 to build."
- echo "For more info on Python 3 requirement, see: https://unicode-org.atlassian.net/browse/ICU-10923"
- echo ""
+ echo "** Note: Python not found. You will not be able to build data from source or run tests."
fi
$as_unset _CXX_CXXSUFFIX
diff --git a/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py b/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
index 08091ee8092..063de7cd88e 100644
--- a/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
+++ b/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
@@ -6,7 +6,6 @@
from __future__ import print_function
from icutools.databuilder import *
-from icutools.databuilder import locale_dependencies
from icutools.databuilder import utils
from icutools.databuilder.request_types import *
@@ -14,76 +13,70 @@ import os
import sys
-def generate(config, glob, common_vars):
+def generate(config, io, common_vars):
requests = []
- if len(glob("misc/*")) == 0:
+ if len(io.glob("misc/*")) == 0:
print("Error: Cannot find data directory; please specify --src_dir", file=sys.stderr)
exit(1)
- requests += generate_cnvalias(config, glob, common_vars)
- requests += generate_ulayout(config, glob, common_vars)
- requests += generate_confusables(config, glob, common_vars)
- requests += generate_conversion_mappings(config, glob, common_vars)
- requests += generate_brkitr_brk(config, glob, common_vars)
- requests += generate_stringprep(config, glob, common_vars)
- requests += generate_brkitr_dictionaries(config, glob, common_vars)
- requests += generate_normalization(config, glob, common_vars)
- requests += generate_coll_ucadata(config, glob, common_vars)
- requests += generate_full_unicore_data(config, glob, common_vars)
- requests += generate_unames(config, glob, common_vars)
- requests += generate_misc(config, glob, common_vars)
- requests += generate_curr_supplemental(config, glob, common_vars)
- requests += generate_translit(config, glob, common_vars)
+ requests += generate_cnvalias(config, io, common_vars)
+ requests += generate_ulayout(config, io, common_vars)
+ requests += generate_confusables(config, io, common_vars)
+ requests += generate_conversion_mappings(config, io, common_vars)
+ requests += generate_brkitr_brk(config, io, common_vars)
+ requests += generate_stringprep(config, io, common_vars)
+ requests += generate_brkitr_dictionaries(config, io, common_vars)
+ requests += generate_normalization(config, io, common_vars)
+ requests += generate_coll_ucadata(config, io, common_vars)
+ requests += generate_full_unicore_data(config, io, common_vars)
+ requests += generate_unames(config, io, common_vars)
+ requests += generate_misc(config, io, common_vars)
+ requests += generate_curr_supplemental(config, io, common_vars)
+ requests += generate_zone_supplemental(config, io, common_vars)
+ requests += generate_translit(config, io, common_vars)
# Res Tree Files
# (input dirname, output dirname, resfiles.mk path, mk version var, mk source var, use pool file, dep files)
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"locales",
None,
- "icu-locale-deprecates.xml",
config.use_pool_bundle,
[])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"curr",
"curr",
- "icu-locale-deprecates.xml",
config.use_pool_bundle,
[])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"lang",
"lang",
- "icu-locale-deprecates.xml",
config.use_pool_bundle,
[])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"region",
"region",
- "icu-locale-deprecates.xml",
config.use_pool_bundle,
[])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"zone",
"zone",
- "icu-locale-deprecates.xml",
config.use_pool_bundle,
[])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"unit",
"unit",
- "icu-locale-deprecates.xml",
config.use_pool_bundle,
[])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"coll",
"coll",
- "icu-coll-deprecates.xml",
# Never use pool bundle for coll, brkitr, or rbnf
False,
# Depends on timezoneTypes.res and keyTypeData.res.
@@ -91,18 +84,16 @@ def generate(config, glob, common_vars):
# TODO: Bake keyTypeData.res into the common library?
[DepTarget("coll_ucadata"), DepTarget("misc_res"), InFile("unidata/UCARules.txt")])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"brkitr",
"brkitr",
- "icu-locale-deprecates.xml",
# Never use pool bundle for coll, brkitr, or rbnf
False,
[DepTarget("brkitr_brk"), DepTarget("dictionaries")])
- requests += generate_tree(config, glob, common_vars,
+ requests += generate_tree(config, io, common_vars,
"rbnf",
"rbnf",
- "icu-rbnf-deprecates.xml",
# Never use pool bundle for coll, brkitr, or rbnf
False,
[])
@@ -119,7 +110,7 @@ def generate(config, glob, common_vars):
return requests
-def generate_cnvalias(config, glob, common_vars):
+def generate_cnvalias(config, io, common_vars):
# UConv Name Aliases
input_file = InFile("mappings/convrtrs.txt")
output_file = OutFile("cnvalias.icu")
@@ -138,7 +129,7 @@ def generate_cnvalias(config, glob, common_vars):
]
-def generate_confusables(config, glob, common_vars):
+def generate_confusables(config, io, common_vars):
# CONFUSABLES
txt1 = InFile("unidata/confusables.txt")
txt2 = InFile("unidata/confusablesWholeScript.txt")
@@ -159,9 +150,9 @@ def generate_confusables(config, glob, common_vars):
]
-def generate_conversion_mappings(config, glob, common_vars):
+def generate_conversion_mappings(config, io, common_vars):
# UConv Conversion Table Files
- input_files = [InFile(filename) for filename in glob("mappings/*.ucm")]
+ input_files = [InFile(filename) for filename in io.glob("mappings/*.ucm")]
output_files = [OutFile("%s.cnv" % v.filename[9:-4]) for v in input_files]
# TODO: handle BUILD_SPECIAL_CNV_FILES? Means to add --ignore-siso-check flag to makeconv
return [
@@ -181,9 +172,9 @@ def generate_conversion_mappings(config, glob, common_vars):
]
-def generate_brkitr_brk(config, glob, common_vars):
+def generate_brkitr_brk(config, io, common_vars):
# BRK Files
- input_files = [InFile(filename) for filename in glob("brkitr/rules/*.txt")]
+ input_files = [InFile(filename) for filename in io.glob("brkitr/rules/*.txt")]
output_files = [OutFile("brkitr/%s.brk" % v.filename[13:-4]) for v in input_files]
return [
RepeatedExecutionRequest(
@@ -202,9 +193,9 @@ def generate_brkitr_brk(config, glob, common_vars):
]
-def generate_stringprep(config, glob, common_vars):
+def generate_stringprep(config, io, common_vars):
# SPP FILES
- input_files = [InFile(filename) for filename in glob("sprep/*.txt")]
+ input_files = [InFile(filename) for filename in io.glob("sprep/*.txt")]
output_files = [OutFile("%s.spp" % v.filename[6:-4]) for v in input_files]
bundle_names = [v.filename[6:-4] for v in input_files]
return [
@@ -225,9 +216,9 @@ def generate_stringprep(config, glob, common_vars):
]
-def generate_brkitr_dictionaries(config, glob, common_vars):
+def generate_brkitr_dictionaries(config, io, common_vars):
# Dict Files
- input_files = [InFile(filename) for filename in glob("brkitr/dictionaries/*.txt")]
+ input_files = [InFile(filename) for filename in io.glob("brkitr/dictionaries/*.txt")]
output_files = [OutFile("brkitr/%s.dict" % v.filename[20:-4]) for v in input_files]
extra_options_map = {
"brkitr/dictionaries/burmesedict.txt": "--bytes --transform offset-0x1000",
@@ -256,9 +247,9 @@ def generate_brkitr_dictionaries(config, glob, common_vars):
]
-def generate_normalization(config, glob, common_vars):
+def generate_normalization(config, io, common_vars):
# NRM Files
- input_files = [InFile(filename) for filename in glob("in/*.nrm")]
+ input_files = [InFile(filename) for filename in io.glob("in/*.nrm")]
# nfc.nrm is pre-compiled into C++; see generate_full_unicore_data
input_files.remove(InFile("in/nfc.nrm"))
output_files = [OutFile(v.filename[3:]) for v in input_files]
@@ -277,7 +268,7 @@ def generate_normalization(config, glob, common_vars):
]
-def generate_coll_ucadata(config, glob, common_vars):
+def generate_coll_ucadata(config, io, common_vars):
# Collation Dependency File (ucadata.icu)
input_file = InFile("in/coll/ucadata-%s.icu" % config.coll_han_type)
output_file = OutFile("coll/ucadata.icu")
@@ -295,7 +286,7 @@ def generate_coll_ucadata(config, glob, common_vars):
]
-def generate_full_unicore_data(config, glob, common_vars):
+def generate_full_unicore_data(config, io, common_vars):
# The core Unicode properties files (pnames.icu, uprops.icu, ucase.icu, ubidi.icu)
# are hardcoded in the common DLL and therefore not included in the data package any more.
# They are not built by default but need to be built for ICU4J data,
@@ -325,7 +316,7 @@ def generate_full_unicore_data(config, glob, common_vars):
]
-def generate_unames(config, glob, common_vars):
+def generate_unames(config, io, common_vars):
# Unicode Character Names
input_file = InFile("in/unames.icu")
output_file = OutFile("unames.icu")
@@ -343,7 +334,7 @@ def generate_unames(config, glob, common_vars):
]
-def generate_ulayout(config, glob, common_vars):
+def generate_ulayout(config, io, common_vars):
# Unicode text layout properties
basename = "ulayout"
input_file = InFile("in/%s.icu" % basename)
@@ -362,16 +353,16 @@ def generate_ulayout(config, glob, common_vars):
]
-def generate_misc(config, glob, common_vars):
+def generate_misc(config, io, common_vars):
# Misc Data Res Files
- input_files = [InFile(filename) for filename in glob("misc/*.txt")]
+ input_files = [InFile(filename) for filename in io.glob("misc/*.txt")]
input_basenames = [v.filename[5:] for v in input_files]
output_files = [OutFile("%s.res" % v[:-4]) for v in input_basenames]
return [
RepeatedExecutionRequest(
name = "misc_res",
category = "misc",
- dep_targets = [],
+ dep_targets = [DepTarget("cnvalias")], # ICU-21175
input_files = input_files,
output_files = output_files,
tool = IcuTool("genrb"),
@@ -386,7 +377,7 @@ def generate_misc(config, glob, common_vars):
]
-def generate_curr_supplemental(config, glob, common_vars):
+def generate_curr_supplemental(config, io, common_vars):
# Currency Supplemental Res File
input_file = InFile("curr/supplementalData.txt")
input_basename = "supplementalData.txt"
@@ -409,13 +400,36 @@ def generate_curr_supplemental(config, glob, common_vars):
]
-def generate_translit(config, glob, common_vars):
+def generate_zone_supplemental(config, io, common_vars):
+ # tzdbNames Res File
+ input_file = InFile("zone/tzdbNames.txt")
+ input_basename = "tzdbNames.txt"
+ output_file = OutFile("zone/tzdbNames.res")
+ return [
+ SingleExecutionRequest(
+ name = "zone_supplemental_res",
+ category = "zone_supplemental",
+ dep_targets = [],
+ input_files = [input_file],
+ output_files = [output_file],
+ tool = IcuTool("genrb"),
+ args = "-s {IN_DIR}/zone -d {OUT_DIR}/zone -i {OUT_DIR} "
+ "-k "
+ "{INPUT_BASENAME}",
+ format_with = {
+ "INPUT_BASENAME": input_basename
+ }
+ )
+ ]
+
+
+def generate_translit(config, io, common_vars):
input_files = [
InFile("translit/root.txt"),
InFile("translit/en.txt"),
InFile("translit/el.txt")
]
- dep_files = set(InFile(filename) for filename in glob("translit/*.txt"))
+ dep_files = set(InFile(filename) for filename in io.glob("translit/*.txt"))
dep_files -= set(input_files)
dep_files = list(sorted(dep_files))
input_basenames = [v.filename[9:] for v in input_files]
@@ -445,20 +459,20 @@ def generate_translit(config, glob, common_vars):
def generate_tree(
config,
- glob,
+ io,
common_vars,
sub_dir,
out_sub_dir,
- xml_filename,
use_pool_bundle,
dep_targets):
requests = []
category = "%s_tree" % sub_dir
out_prefix = "%s/" % out_sub_dir if out_sub_dir else ""
- # TODO: Clean this up for curr
- input_files = [InFile(filename) for filename in glob("%s/*.txt" % sub_dir)]
+ input_files = [InFile(filename) for filename in io.glob("%s/*.txt" % sub_dir)]
if sub_dir == "curr":
input_files.remove(InFile("curr/supplementalData.txt"))
+ if sub_dir == "zone":
+ input_files.remove(InFile("zone/tzdbNames.txt"))
input_basenames = [v.filename[len(sub_dir)+1:] for v in input_files]
output_files = [
OutFile("%s%s.res" % (out_prefix, v[:-4]))
@@ -532,7 +546,11 @@ def generate_tree(
"root",
])
# Put alias locales in a separate structure; see ICU-20627
- alias_locales = set(locale_dependencies.data["aliases"].keys())
+ dependency_data = io.read_locale_deps(sub_dir)
+ if "aliases" in dependency_data:
+ alias_locales = set(dependency_data["aliases"].keys())
+ else:
+ alias_locales = set()
alias_files = []
installed_files = []
for f in input_files:
@@ -541,7 +559,7 @@ def generate_tree(
continue
destination = alias_files if file_stem in alias_locales else installed_files
destination.append(f)
- cldr_version = locale_dependencies.data["cldrVersion"] if sub_dir == "locales" else None
+ cldr_version = dependency_data["cldrVersion"] if sub_dir == "locales" else None
index_file_txt = TmpFile("{IN_SUB_DIR}/{INDEX_NAME}.txt".format(
IN_SUB_DIR = sub_dir,
**common_vars
diff --git a/Build/source/libs/icu/icu-src/source/data/Makefile.in b/Build/source/libs/icu/icu-src/source/data/Makefile.in
index 347c106d632..f020bc82a88 100644
--- a/Build/source/libs/icu/icu-src/source/data/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/data/Makefile.in
@@ -151,6 +151,10 @@ ICUDATA_SOURCE_ARCHIVE = $(OUTDIR)/$(ICUDATA_PLATFORM_NAME).dat
$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE)
$(MKINSTALLDIRS) $(OUTDIR)
$(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $(ICUDATA_ARCHIVE) $(ICUDATA_SOURCE_ARCHIVE)
+
+$(OUTDIR):
+ mkdir -p $(OUTDIR)
+
endif
else
ifneq ($(ENABLE_STATIC),YES)
@@ -192,11 +196,21 @@ ifeq ($(PKGDATA_MODE),files)
endif
ifneq ($(ENABLE_STATIC),)
ifeq ($(PKGDATA_MODE),dll)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(DESTDIR)$(bindir)
+else
$(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_LIBDIR)
endif
endif
+endif
ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(DESTDIR)$(bindir)
+else
$(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_DIR)
+endif
else
$(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(DESTDIR)$(ICUPKGDATA_DIR)
endif
@@ -226,7 +240,7 @@ include $(top_builddir)/$(subdir)/rules.mk
ifeq ($(ENABLE_SO_VERSION_DATA),1)
ifeq ($(PKGDATA_MODE),dll)
SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res
-$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc
+$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc | $(TMP_DIR)/dirs.timestamp
ifeq ($(MSYS_RC_MODE),1)
rc.exe -i$(srcdir)/../common -i$(top_builddir)/common -fo$@ $(CPPFLAGS) $<
else
diff --git a/Build/source/libs/icu/icu-src/source/data/build.xml b/Build/source/libs/icu/icu-src/source/data/build.xml
index 9d0fa70bfb9..ffee73d34b8 100644
--- a/Build/source/libs/icu/icu-src/source/data/build.xml
+++ b/Build/source/libs/icu/icu-src/source/data/build.xml
@@ -56,14 +56,6 @@
<echo message="cldr.prod.dir (production data): ${cldr.prod.dir}"/>
</target>
<target name="setup" depends="init">
- <taskdef name="cldr-build" classname="org.unicode.cldr.ant.CLDRBuild">
- <classpath>
- <pathelement path="${java.class.path}/"/>
- <pathelement path="${env.CLDR_CLASSES}"/>
- <pathelement location="${cldrtools.jar}"/>
- <fileset dir="${cldrtools.dir}/libs" includes="*.jar"/>
- </classpath>
- </taskdef>
<mkdir dir="${env.CLDR_TMP_DIR}"/> <!-- make sure parent dir exists -->
<condition property="cldrprod.exists">
<available file="${cldr.prod.dir}" type="dir"/>
@@ -84,393 +76,4 @@
could set '-s' / '-d' for explicit source/dest -->
</java>
</target>
-
- <!-- target for generating ICU data -->
- <target name="all" depends="locales, collation, rbnf, supplementalData, metadata, metaZones, windowsZones, likelySubtags, plurals, pluralRanges, numberingSystems, translit, brkitr, keyTypeData, genderList, dayPeriods" />
- <!-- parallel target -->
- <target name="pall" depends="init,setup,proddata">
- <parallel threadsPerProcessor ="1">
- <sequential>
- <ant target='locales' />
- </sequential>
- <sequential>
- <ant target='collation'>
- </ant>
- </sequential>
- <sequential>
- <ant target='rbnf'>
- </ant>
- </sequential>
- <ant target='supplementalData'>
- </ant>
- <sequential>
- <ant target='brkitr'>
- </ant>
- </sequential>
- <sequential>
- <ant target='translit'>
- </ant>
- <!--<ant target='trnsfiles'></ant> Not ANT-built - see
- note below. -->
- </sequential>
- <sequential>
- <ant target='keyTypeData'/>
- </sequential>
- <sequential>
- <ant target='genderList'/>
- </sequential>
- <sequential>
- <ant target='dayPeriods'/>
- </sequential>
- </parallel>
- </target>
-
- <target name="locales" depends="init,setup,proddata" description="builds locale files in ICU text format">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" srcFile=".*xml" destFile=".*txt">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="--sourcedir" value="${cldr.prod.dir}/common/main" />
- <arg name="--destdir" value="${env.ICU4C_DIR}/source/data/locales"/>
- <arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/main"/>
- <arg name="--supplementaldir" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="--type" value="locales"/>
- <arg name="--depgraphfile" value="../../python/icutools/databuilder/locale_dependencies.py"/>
- </args>
- <remapper>
- <remap sourcePath="/Keys" targetDir="lang" />
- <remap sourcePath="/Languages" targetDir="lang" />
- <remap sourcePath="/Languages%long" targetDir="lang" />
- <remap sourcePath="/Languages%menu" targetDir="lang" />
- <remap sourcePath="/Languages%short" targetDir="lang" />
- <remap sourcePath="/Languages%secondary" targetDir="lang" />
- <remap sourcePath="/Languages%variant" targetDir="lang" />
- <remap sourcePath="/Scripts" targetDir="lang" />
- <remap sourcePath="/Scripts%secondary" targetDir="lang" />
- <remap sourcePath="/Scripts%short" targetDir="lang" />
- <remap sourcePath="/Scripts%stand-alone" targetDir="lang" />
- <remap sourcePath="/Scripts%variant" targetDir="lang" />
- <remap sourcePath="/Types" targetDir="lang" />
- <remap sourcePath="/Types%short" targetDir="lang" />
- <remap sourcePath="/Variants" targetDir="lang" />
- <remap sourcePath="/Variants%secondary" targetDir="lang" />
- <remap sourcePath="/characterLabelPattern" targetDir="lang" />
- <remap sourcePath="/codePatterns" targetDir="lang" />
- <remap sourcePath="/localeDisplayPattern" targetDir="lang" />
- <remap sourcePath="/Countries" targetDir="region" />
- <remap sourcePath="/Countries%variant" targetDir="region" />
- <remap sourcePath="/Countries%short" targetDir="region" />
- <remap sourcePath="/Currencies" targetDir="curr" />
- <remap sourcePath="/Currencies%formal" targetDir="curr" />
- <remap sourcePath="/Currencies%narrow" targetDir="curr" />
- <remap sourcePath="/Currencies%variant" targetDir="curr" />
- <remap sourcePath="/CurrencyPlurals" targetDir="curr" />
- <remap sourcePath="/CurrencyUnitPatterns" targetDir="curr" />
- <remap sourcePath="/currencySpacing" targetDir="curr" />
- <remap sourcePath="/zoneStrings" targetDir="zone" />
- <remap sourcePath="/durationUnits" targetDir="unit" />
- <remap sourcePath="/units" targetDir="unit" />
- <remap sourcePath="/unitsShort" targetDir="unit" />
- <remap sourcePath="/unitsNarrow" targetDir="unit" />
- </remapper>
- <!-- http://ant.apache.org/faq.html#xml-entity-include -->
- &icu-config;
- &icu-locale-deprecates;
- </run>
- </cldr-build>
- </target>
- <target name="collation" depends="init,setup,proddata" description="builds collation files in ICU text format">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" srcFile=".*xml" destFile=".*txt">
- <run>
- <args>
- <arg name="--sourcedir" value="${cldr.prod.dir}/common/collation" />
- <arg name="--destdir" value="${env.ICU4C_DIR}/source/data/coll"/>
- <arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/collation"/>
- <arg name="--type" value="collation"/>
- </args>
- <!-- http://ant.apache.org/faq.html#xml-entity-include -->
- &icu-config;
- &icu-coll-deprecates;
- </run>
- </cldr-build>
- </target>
- <target name="rbnf" depends="init,setup,proddata" description="builds rbnf files in ICU text format">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" srcFile=".*xml" destFile=".*txt">
- <run>
- <args>
- <arg name="--sourcedir" value="${cldr.prod.dir}/common/rbnf" />
- <arg name="--destdir" value="${env.ICU4C_DIR}/source/data/rbnf"/>
- <arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/rbnf"/>
- <arg name="--type" value="rbnf" />
- </args>
- <!-- http://ant.apache.org/faq.html#xml-entity-include -->
- &icu-config;
- &icu-rbnf-deprecates;
- </run>
- </cldr-build>
- </target>
- <target name="supplementalData" depends="init,setup,proddata" description="builds supplementalData.txt from supplementalData.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="supplementalData.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="supplementalData"/>
- </args>
- <remapper>
- <remap sourcePath="/CurrencyMap" targetDir="curr" />
- <remap sourcePath="/CurrencyMeta" targetDir="curr" />
- </remapper>
- </run>
- </cldr-build>
- </target>
- <target name="metadata" depends="init,setup,proddata" description="builds metadata.txt from supplementalMetadata.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="metadata.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="metadata"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="metaZones" depends="init,setup,proddata" description="builds metaZones.txt from metaZones.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="metaZones.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="metaZones"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="windowsZones" depends="init,setup,proddata" description="builds windowsZones.txt from windowsZones.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="windowsZones.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="windowsZones"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="likelySubtags" depends="init,setup,proddata" description="builds likelySubtags.txt from likelySubtags.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="likelySubtags.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="likelySubtags"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="plurals" depends="init,setup,proddata" description="builds plurals.txt from plurals.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="plurals.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="plurals"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="pluralRanges" depends="init,setup,proddata" description="builds pluralRanges.txt from pluralRanges.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="pluralRanges.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="pluralRanges"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="numberingSystems" depends="init,setup,proddata" description="builds numberingSystems.txt from numberingSystems.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="numberingSystems.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="numberingSystems"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="genderList" depends="init,setup,proddata" description="builds genderList.txt from genderList.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="genderList.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="genderList"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="dayPeriods" depends="init,setup,proddata" description="builds dayPeriods.txt from dayPeriods.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" destFile="dayPeriods.txt" noArgs="true">
- <!-- launch the tool and generate the data after reading the config file -->
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/supplemental" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="dayPeriods"/>
- </args>
- </run>
- </cldr-build>
- </target>
- <target name="brkitr" depends="init,setup,proddata" description="builds break iterator files in ICU text format">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" srcFile=".*xml" destFile=".*txt">
- <run>
- <args>
- <arg name="--sourcedir" value="${cldr.prod.dir}/common/segments"/>
- <arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/brkitr"/>
- <arg name="--destdir" value="${env.ICU4C_DIR}/source/data/brkitr"/>
- <arg name="--type" value="brkitr" />
- </args>
- <!-- The entity include is not required for this target -->
- <!-- http://ant.apache.org/faq.html#xml-entity-include
- &icu-config;
- -->
- </run>
- </cldr-build>
- </target>
-
- <target name="keyTypeData" depends="init,setup,proddata" description="builds keyTypeData.txt and timezoneTypes.txt from bcp47/*.xml">
- <cldr-build toolName="org.unicode.cldr.icu.NewLdml2IcuConverter" noArgs="true">
- <run>
- <args>
- <arg name="-s" value="${cldr.prod.dir}/common/bcp47" />
- <arg name="-d" value="${env.ICU4C_DIR}/source/data/misc"/>
- <arg name="-t" value="keyTypeData"/>
- </args>
- </run>
- </cldr-build>
- </target>
-
- <target name="translit" depends="init,setup,proddata" description="builds collation files in ICU text format">
- <cldr-build toolName="org.unicode.cldr.icu.ConvertTransforms" srcFile=".*xml" destFile=".*txt">
- <run>
- <args>
- <arg name="-m" value="((?!.*(Canadian|Ethiopic|ug-Latin).*).*)" />
- <arg name="--sourcedir" value="${cldr.prod.dir}/common/transforms" />
- <arg name="--destdir" value="${env.ICU4C_DIR}/source/data/translit"/>
- <arg name="--commentSkip"/>
- <arg name="--approvedOnly"/>
- </args>
- <!-- http://ant.apache.org/faq.html#xml-entity-include -->
-
- </run>
- </cldr-build>
- </target>
- <!-- we don't generate en.txt or el.txt - so don't change trnsfiles.mk for now. -->
-<!--
- <target name="trnsfiles" depends="init, setup,proddata" description="builds trnsfiles.mk">
- <cldr-build toolName="org.unicode.cldr.icu.ConvertTransforms" srcFile=".*xml" destFile="trnsfiles.mk" noArgs="true">
- <run>
- <args> [ double hyphen not allowed in comments - transpose -" to fix below ]
- <arg name=-"-sourcedir" value="${cldr.prod.dir}/common/transforms" />
- <arg name=-"-destdir" value="${env.ICU4C_DIR}/source/data/translit"/>
- <arg name=-"-commentSkip"/>
- <arg name=-"-writeIndex"/>
- </args>
- </run>
- </cldr-build>
- </target> -->
- <target name="clean" depends="init, setup, cleanprod" description="deletes all txt files and mk files from coll and locales directories">
- <delete>
- <fileset id="locales" dir="${env.ICU4C_DIR}/source/data/locales">
- <include name="*.txt" />
- </fileset>
- <fileset id="resfiles" dir="${env.ICU4C_DIR}/source/data/locales">
- <include name="resfiles.mk" />
- </fileset>
- <fileset id="dependencies_py" dir="${env.ICU4C_DIR}/source/python/icutools/databuilder">
- <include name="locale_dependencies.py" />
- </fileset>
- <fileset id="locales_split" dir="${env.ICU4C_DIR}/source/data">
- <include name="curr/*.txt" />
- <include name="curr/resfiles.mk" />
- <include name="lang/*.txt" />
- <include name="lang/resfiles.mk" />
- <include name="region/*.txt" />
- <include name="region/resfiles.mk" />
- <include name="zone/*.txt" />
- <include name="zone/resfiles.mk" />
- <exclude name="zone/tzdbNames.txt" />
- <include name="unit/*.txt" />
- <include name="unit/resfiles.mk" />
- </fileset>
- <fileset id="collation" dir="${env.ICU4C_DIR}/source/data/coll">
- <include name="*.txt" />
- </fileset>
- <fileset id="colfiles" dir="${env.ICU4C_DIR}/source/data/coll">
- <include name="colfiles.mk" />
- </fileset>
- <fileset id="translit" dir="${env.ICU4C_DIR}/source/data/translit">
- <include name="*_*.txt" />
- <include name="root.txt" />
- </fileset>
- <fileset id="brkitr" dir="${env.ICU4C_DIR}/source/data/brkitr">
- <include name="*.txt"/>
- </fileset>
- <fileset id="brkfiles" dir="${env.ICU4C_DIR}/source/data/brkitr">
- <include name="brkfiles.mk" />
- </fileset>
- <fileset id="supplementalData" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="supplementalData.txt" />
- </fileset>
- <fileset id="rbnf" dir="${env.ICU4C_DIR}/source/data/rbnf">
- <include name="*.txt" />
- </fileset>
- <fileset id="rbnffiles" dir="${env.ICU4C_DIR}/source/data/rbnf">
- <include name="rbnffiles.mk" />
- </fileset>
- <fileset id="metadata" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="metadata.txt" />
- </fileset>
- <fileset id="metaZones" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="metaZones.txt" />
- </fileset>
- <fileset id="windowsZones" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="windowsZones.txt" />
- </fileset>
- <fileset id="likelySubtags" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="likelySubtags.txt" />
- </fileset>
- <fileset id="plurals" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="plurals.txt" />
- </fileset>
- <fileset id="pluralRanges" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="pluralRanges.txt" />
- </fileset>
- <fileset id="numberingSystems" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="numberingSystems.txt" />
- </fileset>
- <fileset id="keyTypeData" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="keyTypeData.txt" />
- <include name="timezoneTypes.txt" />
- </fileset>
- <fileset id="genderList" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="genderList.txt" />
- </fileset>
- <fileset id="dayPeriods" dir="${env.ICU4C_DIR}/source/data/misc">
- <include name="dayPeriods.txt" />
- </fileset>
- </delete>
- </target>
</project>
diff --git a/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt b/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
index 6d194416199..93b9ef391a7 100644
--- a/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
+++ b/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
@@ -3,12 +3,17 @@
# Copyright (C) 2010-2014, International Business Machines Corporation and others.
# All Rights Reserved.
#
-# Commands for regenerating ICU4C locale data (.txt files) from CLDR.
+# Commands for regenerating ICU4C locale data (.txt files) from CLDR,
+# updated to apply to CLDR 37 / ICU 67 and later versions.
#
# The process requires local copies of
# - CLDR (the source of most of the data, and some Java tools)
-# - ICU4J (used only for checking the converted data)
-# - ICU4C (the destination for the new data, and the source for some of it)
+# - The complete ICU source tree, including:
+# tools - includes the LdmlConverter build tool and associated config files
+# icu4c - the target for converted CLDR data, and source for ICU4J data;
+# includes tests for the converted data
+# icu4j - the target for updated data jars; includes tests for the converted
+# data
#
# For an official CLDR data integration into ICU, these should be clean, freshly
# checked-out. For released CLDR sources, an alternative to checking out sources
@@ -17,10 +22,10 @@
# [http://cldr.unicode.org/index/downloads].
#
# The versions of each of these must match. Included with the release notes for
-# ICU is the version number and/or a CLDR svn tag name for the revision of CLDR
+# ICU is the version number and/or a CLDR git tag name for the revision of CLDR
# that was the source of the data for that release of ICU.
#
-# Besides a standard JDK, the process also requires ant
+# Besides a standard JDK, the process also requires ant and maven
# (http://ant.apache.org/),
# plus the xml-apis.jar from the Apache xalan package
# (http://xml.apache.org/xalan-j/downloads.html).
@@ -50,17 +55,19 @@
#
# b) CLDR-related variables
#
-# CLDR_DIR: Path to root of CLDR sources, below which are the common and
-# tools directories.
+# CLDR_DIR: This is the path to the to root of standard CLDR sources, below
+# which are the common and tools directories.
+#
# CLDR_CLASSES: Path to the CLDR Tools classes directory. If not set, defaults
# to $CLDR_DIR/tools/java/classes
#
# CLDR_TMP_DIR: Parent of temporary CLDR production data.
# Defaults to $CLDR_DIR/../cldr-aux (sibling to CLDR_DIR).
#
-# *** NOTE ***: In CLDR release-36-beta, the GenerateProductionData
-# tool no longer generates data into $CLDR_TMP_DIR/production; instead
-# it generates data into $CLDR_DIR/../cldr-staging/production. However
+# *** NOTE ***: In CLDR 36 and 37, the GenerateProductionData tool
+# no longer generates data by default into $CLDR_TMP_DIR/production;
+# instead it generates data into $CLDR_DIR/../cldr-staging/production
+# (though there is a command-line option to override this). However
# the rest of the build still assumes that the generated data is in
# $CLDR_TMP_DIR/production. So CLDR_TMP_DIR must be defined to be
# $CLDR_DIR/../cldr-staging
@@ -73,6 +80,9 @@
#
# ICU4J_ROOT: Path to root of ICU4J sources, below which is the main dir.
#
+# TOOLS_ROOT: Path to root of ICU tools directory, below which is (e.g.) the
+# cldr and unicodetools dirs.
+#
#----
#
# If you are adding or removing locales, or specific kinds of locale data,
@@ -80,29 +90,9 @@
# files are used in addition to the CLDR files as inputs to the CLDR data build
# process for ICU):
#
-# icu4c/source/data/icu-config.xml - Update <locales> to add or remove
-# CLDR locales for inclusion in ICU. Update <paths> to prefer
-# alt forms for certain paths, or to exclude certain paths; note
-# that <paths> items can only have draft or alt attributes.
-#
-# Note that if a language-only locale (e.g. "de") is included in
-# <locales>, then all region sublocales for that language that
-# are present in CLDR data (e.g. "de_AT", "de_BE", "de_CH", etc.)
-# should also be included in <locales>, per PMC policy decision
-# 2012-05-02 (see http://bugs.icu-project.org/trac/ticket/9298).
-#
-# icu4c/source/data/build.xml - If you are adding or removing break
-# iterators, you need to update <fileset id="brkitr" ...> under
-# <target name="clean" ...> to clean the correct set of files.
+# The primary file to edit for ICU 67 and later is
#
-# If there are new CLDR resource bundle types, you may need to
-# updated the <remapper> sections to put these in the correct
-# data subfolder for ICU.
-#
-# icu4c/source/data/xml/ - If you are adding a new locale, break
-# iterator, collation tailoring, or rule-based number formatter,
-# you may need to add a corresponding xml file in (respectively)
-# the main/, brkitr/, collation/, or rbnf/ subdirectory here.
+# $TOOLS_ROOT/cldr/cldr-to-icu/build-icu-data.xml
#
#----
#
@@ -123,8 +113,8 @@
# keyboards/dtd/ldmlKeyboard.dtd - update cldrVersion
# tools/java/org/unicode/cldr/util/CLDRFile.java - update GEN_VERSION
#
-# c) After everything is committed, you will need to tag the CLDR, ICU4J, and
-# ICU4C sources that ended up being used for the integration; see step 17
+# c) After everything is committed, you will need to tag the CLDR and ICU
+# sources that ended up being used for the integration; see step 16
# below.
#
################################################################################
@@ -132,7 +122,7 @@
# 1a. Java and ant variables, adjust for your system
export JAVA_HOME=`/usr/libexec/java_home`
-export ANT_OPTS="-Xmx4096m
+export ANT_OPTS="-Xmx4096m"
# 1b. CLDR variables, adjust for your setup; with cygwin it might be e.g.
# CLDR_DIR=`cygpath -wp /build/cldr`
@@ -143,12 +133,15 @@ export CLDR_DIR=$HOME/cldr-myfork
export ICU4C_DIR=$HOME/icu-myfork/icu4c
export ICU4J_ROOT=$HOME/icu-myfork/icu4j
+export TOOLS_ROOT=$HOME/icu-myfork/tools
+
+# 2. Build and install the CLDR jar
-# 2. Build the CLDR Java tools and jar
+cd $TOOLS_ROOT/cldr
+ant install-cldr-libs
-cd $CLDR_DIR/tools/java
-ant all
-ant jar
+See the $TOOLS_ROOT/cldr/lib/README.txt file for more information on the CLDR
+jar and the install-cldr-jars.sh script.
# 3. Configure ICU4C, build and test without new data first, to verify that
# there are no pre-existing errors. Here <platform> is the runConfigureICU
@@ -156,43 +149,71 @@ ant jar
cd $ICU4C_DIR/source
./runConfigureICU <platform>
-make all 2>&1 | tee /tmp/icu4c-oldData-makeAll.txt
+make clean
make check 2>&1 | tee /tmp/icu4c-oldData-makeCheck.txt
-# 4. Build the new ICU4C data files; these include .txt files and .py files.
-# These new files will replace whatever was already present in the ICU4C sources.
-# This process uses ant with ICU's data/build.xml and data/icu-config.xml to
-# operate (via CLDR's ant/CLDRConverterTool.java and ant/CLDRBuild.java) the
-# necessary CLDR tools including LDML2ICUConverter, ConvertTransforms, etc.
-# This process will take several minutes.
-# Keep a log so you can investigate anything that looks suspicious.
+# 4a. Generate the CLDR production data. This process uses ant with ICU's
+# data/build.xml
+#
+# Running "ant cleanprod" is necessary to clean out the production data directory
+# (usually $CLDR_TMP_DIR/production ), required if any CLDR data has changed.
#
# Running "ant setup" is not required, but it will print useful errors to
# debug issues with your path when it fails.
-#
cd $ICU4C_DIR/source/data
+ant cleanprod
ant setup
-ant clean
-ant all 2>&1 | tee /tmp/cldr-newData-buildLog.txt
+ant proddata 2>&1 | tee /tmp/cldr-newData-proddataLog.txt
+
+# 4b. Build the new ICU4C data files; these include .txt files and .py files.
+# These new files will replace whatever was already present in the ICU4C sources.
+# This process uses the LdmlConverter in $TOOLS_ROOT/cldr/cldr-to-icu/;
+# see $TOOLS_ROOT/cldr/cldr-to-icu/README.txt
+#
+# This process will take several minutes, during most of which there will be no log
+# output (so do not assume nothing is happening). Keep a log so you can investigate
+# anything that looks suspicious.
+#
+# Note that "ant clean" should not be run before this. The build-icu-data.xml process
+# will automatically run its own "clean" step to delete files it cannot determine to
+# be ones that it would generate, except for pasts listed in <retain> elements such as
+# coll/de__PHONEBOOK.txt, coll/de_.txt, etc.
+#
+# Before running Ant to regenerate the data, make any necessary changes to the
+# build-icu-data.xml file, such as adding new locales etc.
-# NOTE: if you change the CLDR data, please run "ant cleanprod" to clean out the
-# temporary production data directory (usually $CLDR_DIR/../cldr-aux/production )
+cd $TOOLS_ROOT/cldr/cldr-to-icu
+ant -f build-icu-data.xml -DcldrDataDir="$CLDR_TMP_DIR/production" | tee /tmp/cldr-newData-builddataLog.txt
+
+# 4c. Update the CLDR testData files needed by ICU4C and ICU4J tests, ensuring
+# they're representative of the newest CLDR data.
+
+cd $TOOLS_ROOT/cldr
+ant copy-cldr-testdata
+
+# 4d. Copy from CLDR common/testData/localeIdentifiers/localeCanonicalization.txt
+# into icu4c/source/test/testdata/localeCanonicalization.txt
+# and icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode/localeCanonicalization.txt
+# and add the following line to the begginning of these two files
+# # File copied from cldr common/testData/localeIdentifiers/localeCanonicalization.txt
# 5. Check which data files have modifications, which have been added or removed
# (if there are no changes, you may not need to proceed further). Make sure the
# list seems reasonable.
+cd $ICU4C_DIR/source/data
+git status
+
+# 5a. You may also want to check which files were modified in CLDR production data:
+
+cd $CLDR_TMP_DIR
git status
-# 6. Fix any errors, investigate any warnings. Currently for example there are
-# a few warnings of the following form in rbnf files:
-# [cldr-build] Warning: no version match with: $Revision☹$
+# 6. Fix any errors, investigate any warnings.
#
-# Fixing may entail modifying CLDR source data or tools - for example,
-# updating the validSubLocales for collation data (file a bug if appropriate).
-# Repeat steps 4-5 until there are no build errors and no unexpected
-# warnings.
+# Fixing may entail modifying CLDR source data or TOOLS_ROOT config files or
+# tooling.
# 7. Now rebuild ICU4C with the new data and run make check tests.
# Again, keep a log so you can investigate the errors.
@@ -217,7 +238,11 @@ make check 2>&1 | tee /tmp/icu4c-newData-makeCheck.txt
# may fail.
# Repeat steps 4-7 until there are no errors.
-# 9. Now run the make check tests in exhaustive mode:
+# 9. You can also run the make check tests in exhaustive mode. As an alternative
+# you can run them as part of the pre-merge tests by adding the following as a
+# comment in the pull request: "/azp run CI-Exhaustive". You should do one or the
+# other; the exhaustive tests are *not* run automatically on each pull request,
+# and are only run occasionally on the default branch.
cd $ICU4C_DIR/source
export INTLTEST_OPTS="-e"
@@ -232,7 +257,6 @@ make check 2>&1 | tee /tmp/icu4c-newData-makeCheckEx.txt
# as a base for comparison):
cd $ICU4J_ROOT
-ant all 2>&1 | tee /tmp/icu4j-oldData-antAll.txt
ant check 2>&1 | tee /tmp/icu4j-oldData-antCheck.txt
# 12. Transfer the data to ICU4J:
@@ -244,8 +268,8 @@ ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU <platform>
# 12b. Now build the jar files.
cd $ICU4C_DIR/source/data
# The following 2 lines are required to include the unicore data:
- make clean
- make -j6
+make clean
+make -j6
make icu4j-data-install
cd $ICU4C_DIR/source/test/testdata
make icu4j-data-install
@@ -283,18 +307,29 @@ ant check 2>&1 | tee /tmp/icu4j-newData-antCheck.txt
cd $HOME/icu/
cd ..
git status
-# add or remove as necessary
+# git add or remove as necessary
# commit
# 16. For an official CLDR data integration into ICU, now tag the CLDR and
# ICU sources with an appropriate CLDR milestone (you can check previous
# tags for format), e.g.:
-svn copy svn+ssh://unicode.org/repos/cldr/trunk \
-svn+ssh://unicode.org/repos/cldr/tags/release-NNN \
---parents -m "cldrbug nnnn: tag cldr sources for NNN"
+cd $CLDR_DIR
+git tag ...
+git push --tags
-cd $HOME/icu/
+cd $HOME/icu
git tag ...
+git push --tags
+
+# 17. You should also commit and tag the update production data in CLDR_TMP_DIR
+# using the same tag as for CLDR_DIR above:
+
+cd $CLDR_TMP_DIR
+# git add or remove as necessary
+# commit
+git tag ...
+git push --tags
+
diff --git a/Build/source/libs/icu/icu-src/source/data/icu-coll-deprecates.xml b/Build/source/libs/icu/icu-src/source/data/icu-coll-deprecates.xml
deleted file mode 100644
index 09efac23674..00000000000
--- a/Build/source/libs/icu/icu-src/source/data/icu-coll-deprecates.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
-/*
-* Copyright (C) 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html
-*******************************************************************************
-* Copyright (C) 2015, International Business Machines Corporation and *
-* others. All Rights Reserved. *
-*******************************************************************************
-*/
--->
-<deprecates>
- <alias from="ars" to="ar"/>
- <alias from="de__PHONEBOOK" to="de" rbpath="/collations/default" value="phonebook"/>
- <alias from="es__TRADITIONAL" to="es" rbpath="/collations/default" value="traditional"/>
- <alias from="in" to="id" />
- <alias from="in_ID" to="id_ID" />
- <alias from="iw" to="he" />
- <alias from="iw_IL" to="he_IL" />
- <alias from="mo" to="ro" />
- <alias from="no" to="nb" />
- <alias from="no_NO" to="nb_NO" />
- <alias from="pa_IN" to="pa_Guru_IN" />
- <alias from="sh" to="sr_Latn" />
- <alias from="sh_BA" to="sr_Latn_BA" />
- <alias from="sh_CS" to="sr_Latn_RS" />
- <alias from="sh_YU" to="sr_Latn_RS" />
- <alias from="sr_BA" to="sr_Cyrl_BA" />
- <alias from="sr_ME" to="sr_Cyrl_ME" />
- <alias from="sr_RS" to="sr_Cyrl_RS" />
- <alias from="yue" to="zh_Hant" />
- <alias from="yue_CN" to="zh_Hans" />
- <alias from="yue_Hans" to="zh_Hans" />
- <alias from="zh_CN" to="zh_Hans_CN" />
- <alias from="zh_SG" to="zh_Hans_SG" />
- <alias from="zh_HK" to="zh_Hant_HK" />
- <alias from="zh_MO" to="zh_Hant_MO" />
- <alias from="zh_TW" to="zh_Hant_TW" />
- <emptyLocale locale="de_" />
- <emptyLocale locale="es_" />
- <emptyLocale locale="pa_Guru" />
- <emptyLocale locale="sr_Cyrl" />
- <emptyLocale locale="zh_Hans" />
-</deprecates>
diff --git a/Build/source/libs/icu/icu-src/source/data/icu-config.xml b/Build/source/libs/icu/icu-src/source/data/icu-config.xml
deleted file mode 100644
index 2cb593a9407..00000000000
--- a/Build/source/libs/icu/icu-src/source/data/icu-config.xml
+++ /dev/null
@@ -1,809 +0,0 @@
-<!--
-/*
-* Copyright (C) 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html
-*******************************************************************************
-* Copyright (C) 2005-2016, International Business Machines Corporation and *
-* others. All Rights Reserved. *
-*******************************************************************************
-*/
--->
-<config type="icu-config">
- <!-- This is used by CLDRBuild.java and CLDRConverterTool.java in org/unicode/cldr/ant/ -->
- <locales>
- <include locales="af"/>
- <include locales="af_NA"/>
- <include locales="af_ZA"/>
- <include locales="agq"/>
- <include locales="agq_CM"/>
- <include locales="ak"/>
- <include locales="ak_GH"/>
- <include locales="am"/>
- <include locales="am_ET"/>
- <include locales="ar"/>
- <include locales="ar_001"/>
- <include locales="ar_AE"/>
- <include locales="ar_BH"/>
- <include locales="ar_DJ"/>
- <include locales="ar_DZ"/>
- <include locales="ar_EG"/>
- <include locales="ar_EH"/>
- <include locales="ar_ER"/>
- <include locales="ar_IL"/>
- <include locales="ar_IQ"/>
- <include locales="ar_JO"/>
- <include locales="ar_KM"/>
- <include locales="ar_KW"/>
- <include locales="ar_LB"/>
- <include locales="ar_LY"/>
- <include locales="ar_MA"/>
- <include locales="ar_MR"/>
- <include locales="ar_OM"/>
- <include locales="ar_PS"/>
- <include locales="ar_QA"/>
- <include locales="ar_SA"/>
- <include locales="ar_SD"/>
- <include locales="ar_SO"/>
- <include locales="ar_SS"/>
- <include locales="ar_SY"/>
- <include locales="ar_TD"/>
- <include locales="ar_TN"/>
- <include locales="ar_YE"/>
- <include locales="ars"/>
- <include locales="as"/>
- <include locales="as_IN"/>
- <include locales="asa"/>
- <include locales="asa_TZ"/>
- <include locales="ast"/>
- <include locales="ast_ES"/>
- <include locales="az"/>
- <include locales="az_AZ"/>
- <include locales="az_Cyrl"/>
- <include locales="az_Cyrl_AZ"/>
- <include locales="az_Latn"/>
- <include locales="az_Latn_AZ"/>
- <include locales="bas"/>
- <include locales="bas_CM"/>
- <include locales="be"/>
- <include locales="be_BY"/>
- <include locales="bem"/>
- <include locales="bem_ZM"/>
- <include locales="bez"/>
- <include locales="bez_TZ"/>
- <include locales="bg"/>
- <include locales="bg_BG"/>
- <include locales="bm"/>
- <include locales="bm_ML"/>
- <include locales="bn"/>
- <include locales="bn_BD"/>
- <include locales="bn_IN"/>
- <include locales="bo"/>
- <include locales="bo_CN"/>
- <include locales="bo_IN"/>
- <include locales="br"/>
- <include locales="br_FR"/>
- <include locales="brx"/>
- <include locales="brx_IN"/>
- <include locales="bs"/>
- <include locales="bs_Cyrl"/>
- <include locales="bs_Cyrl_BA"/>
- <include locales="bs_Latn"/>
- <include locales="bs_Latn_BA"/>
- <include locales="bs_BA"/>
- <include locales="ca"/>
- <include locales="ca_AD"/>
- <include locales="ca_ES"/>
- <include locales="ca_FR"/>
- <include locales="ca_IT"/>
- <include locales="ccp"/>
- <include locales="ccp_BD"/>
- <include locales="ccp_IN"/>
- <include locales="ce"/>
- <include locales="ce_RU"/>
- <include locales="ceb"/>
- <include locales="ceb_PH"/>
- <include locales="cgg"/>
- <include locales="cgg_UG"/>
- <include locales="chr"/>
- <include locales="chr_US"/>
- <include locales="ckb"/>
- <include locales="ckb_IQ"/>
- <include locales="ckb_IR"/>
- <include locales="cs"/>
- <include locales="cs_CZ"/>
- <include locales="cy"/>
- <include locales="cy_GB"/>
- <include locales="da"/>
- <include locales="da_DK"/>
- <include locales="da_GL"/>
- <include locales="dav"/>
- <include locales="dav_KE"/>
- <include locales="de"/>
- <include locales="de_AT"/>
- <include locales="de_BE"/>
- <include locales="de_CH"/>
- <include locales="de_DE"/>
- <include locales="de_IT"/>
- <include locales="de_LI"/>
- <include locales="de_LU"/>
- <include locales="dje"/>
- <include locales="dje_NE"/>
- <include locales="dsb"/>
- <include locales="dsb_DE"/>
- <include locales="dua"/>
- <include locales="dua_CM"/>
- <include locales="dyo"/>
- <include locales="dyo_SN"/>
- <include locales="dz"/>
- <include locales="dz_BT"/>
- <include locales="ebu"/>
- <include locales="ebu_KE"/>
- <include locales="ee"/>
- <include locales="ee_GH"/>
- <include locales="ee_TG"/>
- <include locales="el"/>
- <include locales="el_CY"/>
- <include locales="el_GR"/>
- <include locales="en"/>
- <include locales="en_001"/>
- <include locales="en_150"/>
- <include locales="en_AE"/>
- <include locales="en_AG"/>
- <include locales="en_AI"/>
- <include locales="en_AS"/>
- <include locales="en_AT"/>
- <include locales="en_AU"/>
- <include locales="en_BB"/>
- <include locales="en_BE"/>
- <include locales="en_BI"/>
- <include locales="en_BM"/>
- <include locales="en_BS"/>
- <include locales="en_BW"/>
- <include locales="en_BZ"/>
- <include locales="en_CA"/>
- <include locales="en_CC"/>
- <include locales="en_CH"/>
- <include locales="en_CK"/>
- <include locales="en_CM"/>
- <include locales="en_CX"/>
- <include locales="en_CY"/>
- <include locales="en_DE"/>
- <include locales="en_DG"/>
- <include locales="en_DK"/>
- <include locales="en_DM"/>
- <include locales="en_ER"/>
- <include locales="en_FI"/>
- <include locales="en_FJ"/>
- <include locales="en_FK"/>
- <include locales="en_FM"/>
- <include locales="en_GB"/>
- <include locales="en_GD"/>
- <include locales="en_GG"/>
- <include locales="en_GH"/>
- <include locales="en_GI"/>
- <include locales="en_GM"/>
- <include locales="en_GU"/>
- <include locales="en_GY"/>
- <include locales="en_HK"/>
- <include locales="en_IE"/>
- <include locales="en_IL"/>
- <include locales="en_IM"/>
- <include locales="en_IN"/>
- <include locales="en_IO"/>
- <include locales="en_JE"/>
- <include locales="en_JM"/>
- <include locales="en_KE"/>
- <include locales="en_KI"/>
- <include locales="en_KN"/>
- <include locales="en_KY"/>
- <include locales="en_LC"/>
- <include locales="en_LR"/>
- <include locales="en_LS"/>
- <include locales="en_MG"/>
- <include locales="en_MH"/>
- <include locales="en_MO"/>
- <include locales="en_MP"/>
- <include locales="en_MS"/>
- <include locales="en_MT"/>
- <include locales="en_MU"/>
- <include locales="en_MW"/>
- <include locales="en_MY"/>
- <include locales="en_NA"/>
- <include locales="en_NF"/>
- <include locales="en_NG"/>
- <include locales="en_NL"/>
- <include locales="en_NR"/>
- <include locales="en_NU"/>
- <include locales="en_NZ"/>
- <include locales="en_PG"/>
- <include locales="en_PH"/>
- <include locales="en_PK"/>
- <include locales="en_PN"/>
- <include locales="en_PR"/>
- <include locales="en_PW"/>
- <include locales="en_RH"/>
- <include locales="en_RW"/>
- <include locales="en_SB"/>
- <include locales="en_SC"/>
- <include locales="en_SD"/>
- <include locales="en_SE"/>
- <include locales="en_SG"/>
- <include locales="en_SH"/>
- <include locales="en_SI"/>
- <include locales="en_SL"/>
- <include locales="en_SS"/>
- <include locales="en_SX"/>
- <include locales="en_SZ"/>
- <include locales="en_TC"/>
- <include locales="en_TK"/>
- <include locales="en_TO"/>
- <include locales="en_TT"/>
- <include locales="en_TV"/>
- <include locales="en_TZ"/>
- <include locales="en_UG"/>
- <include locales="en_UM"/>
- <include locales="en_US"/>
- <include locales="en_US_POSIX"/>
- <include locales="en_VC"/>
- <include locales="en_VG"/>
- <include locales="en_VI"/>
- <include locales="en_VU"/>
- <include locales="en_WS"/>
- <include locales="en_ZA"/>
- <include locales="en_ZM"/>
- <include locales="en_ZW"/>
- <include locales="eo"/>
- <include locales="eo_001"/>
- <include locales="es"/>
- <include locales="es_003"/>
- <include locales="es_419"/>
- <include locales="es_AR"/>
- <include locales="es_BO"/>
- <include locales="es_BR"/>
- <include locales="es_BZ"/>
- <include locales="es_CL"/>
- <include locales="es_CO"/>
- <include locales="es_CR"/>
- <include locales="es_CU"/>
- <include locales="es_DO"/>
- <include locales="es_EA"/>
- <include locales="es_EC"/>
- <include locales="es_ES"/>
- <include locales="es_GQ"/>
- <include locales="es_GT"/>
- <include locales="es_HN"/>
- <include locales="es_IC"/>
- <include locales="es_MX"/>
- <include locales="es_NI"/>
- <include locales="es_PA"/>
- <include locales="es_PE"/>
- <include locales="es_PH"/>
- <include locales="es_PR"/>
- <include locales="es_PY"/>
- <include locales="es_SV"/>
- <include locales="es_US"/>
- <include locales="es_UY"/>
- <include locales="es_VE"/>
- <include locales="et"/>
- <include locales="et_EE"/>
- <include locales="eu"/>
- <include locales="eu_ES"/>
- <include locales="ewo"/>
- <include locales="ewo_CM"/>
- <include locales="fa"/>
- <include locales="fa_AF"/>
- <include locales="fa_IR"/>
- <include locales="ff"/>
- <include locales="ff_CM"/>
- <include locales="ff_GN"/>
- <include locales="ff_Latn"/>
- <include locales="ff_Latn_BF"/>
- <include locales="ff_Latn_CM"/>
- <include locales="ff_Latn_GH"/>
- <include locales="ff_Latn_GM"/>
- <include locales="ff_Latn_GN"/>
- <include locales="ff_Latn_GW"/>
- <include locales="ff_Latn_LR"/>
- <include locales="ff_Latn_MR"/>
- <include locales="ff_Latn_NE"/>
- <include locales="ff_Latn_NG"/>
- <include locales="ff_Latn_SL"/>
- <include locales="ff_Latn_SN"/>
- <include locales="ff_MR"/>
- <include locales="ff_SN"/>
- <include locales="fi"/>
- <include locales="fi_FI"/>
- <include locales="fil"/>
- <include locales="fil_PH"/>
- <include locales="fo"/>
- <include locales="fo_DK"/>
- <include locales="fo_FO"/>
- <include locales="fr"/>
- <include locales="fr_BE"/>
- <include locales="fr_BF"/>
- <include locales="fr_BI"/>
- <include locales="fr_BJ"/>
- <include locales="fr_BL"/>
- <include locales="fr_CA"/>
- <include locales="fr_CD"/>
- <include locales="fr_CF"/>
- <include locales="fr_CG"/>
- <include locales="fr_CH"/>
- <include locales="fr_CI"/>
- <include locales="fr_CM"/>
- <include locales="fr_DJ"/>
- <include locales="fr_DZ"/>
- <include locales="fr_FR"/>
- <include locales="fr_GA"/>
- <include locales="fr_GF"/>
- <include locales="fr_GN"/>
- <include locales="fr_GP"/>
- <include locales="fr_GQ"/>
- <include locales="fr_HT"/>
- <include locales="fr_KM"/>
- <include locales="fr_LU"/>
- <include locales="fr_MA"/>
- <include locales="fr_MC"/>
- <include locales="fr_MF"/>
- <include locales="fr_MG"/>
- <include locales="fr_ML"/>
- <include locales="fr_MQ"/>
- <include locales="fr_MR"/>
- <include locales="fr_MU"/>
- <include locales="fr_NC"/>
- <include locales="fr_NE"/>
- <include locales="fr_PF"/>
- <include locales="fr_PM"/>
- <include locales="fr_RE"/>
- <include locales="fr_RW"/>
- <include locales="fr_SC"/>
- <include locales="fr_SN"/>
- <include locales="fr_SY"/>
- <include locales="fr_TD"/>
- <include locales="fr_TG"/>
- <include locales="fr_TN"/>
- <include locales="fr_VU"/>
- <include locales="fr_WF"/>
- <include locales="fr_YT"/>
- <include locales="fur"/>
- <include locales="fur_IT"/>
- <include locales="fy"/>
- <include locales="fy_NL"/>
- <include locales="ga"/>
- <include locales="ga_GB"/>
- <include locales="ga_IE"/>
- <include locales="gd"/>
- <include locales="gd_GB"/>
- <include locales="gl"/>
- <include locales="gl_ES"/>
- <include locales="gsw"/>
- <include locales="gsw_CH"/>
- <include locales="gsw_FR"/>
- <include locales="gsw_LI"/>
- <include locales="gu"/>
- <include locales="gu_IN"/>
- <include locales="guz"/>
- <include locales="guz_KE"/>
- <include locales="gv"/>
- <include locales="gv_IM"/>
- <include locales="ha"/>
- <include locales="ha_GH"/>
- <include locales="ha_NE"/>
- <include locales="ha_NG"/>
- <include locales="haw"/>
- <include locales="haw_US"/>
- <include locales="he"/>
- <include locales="he_IL"/>
- <include locales="hi"/>
- <include locales="hi_IN"/>
- <include locales="hr"/>
- <include locales="hr_BA"/>
- <include locales="hr_HR"/>
- <include locales="hsb"/>
- <include locales="hsb_DE"/>
- <include locales="hu"/>
- <include locales="hu_HU"/>
- <include locales="hy"/>
- <include locales="hy_AM"/>
- <include locales="ia"/>
- <include locales="ia_001"/>
- <include locales="id"/>
- <include locales="id_ID"/>
- <include locales="ig"/>
- <include locales="ig_NG"/>
- <include locales="ii"/>
- <include locales="ii_CN"/>
- <include locales="in"/>
- <include locales="in_ID"/>
- <include locales="is"/>
- <include locales="is_IS"/>
- <include locales="it"/>
- <include locales="it_CH"/>
- <include locales="it_IT"/>
- <include locales="it_SM"/>
- <include locales="it_VA"/>
- <include locales="iw"/>
- <include locales="iw_IL"/>
- <include locales="ja"/>
- <include locales="ja_JP"/>
- <include locales="jgo"/>
- <include locales="jgo_CM"/>
- <include locales="jmc"/>
- <include locales="jmc_TZ"/>
- <include locales="jv"/>
- <include locales="jv_ID"/>
- <include locales="ka"/>
- <include locales="ka_GE"/>
- <include locales="kab"/>
- <include locales="kab_DZ"/>
- <include locales="kam"/>
- <include locales="kam_KE"/>
- <include locales="kde"/>
- <include locales="kde_TZ"/>
- <include locales="kea"/>
- <include locales="kea_CV"/>
- <include locales="khq"/>
- <include locales="khq_ML"/>
- <include locales="ki"/>
- <include locales="ki_KE"/>
- <include locales="kk"/>
- <include locales="kk_KZ"/>
- <include locales="kkj"/>
- <include locales="kkj_CM"/>
- <include locales="kl"/>
- <include locales="kl_GL"/>
- <include locales="kln"/>
- <include locales="kln_KE"/>
- <include locales="km"/>
- <include locales="km_KH"/>
- <include locales="kn"/>
- <include locales="kn_IN"/>
- <include locales="ko"/>
- <include locales="ko_KP"/>
- <include locales="ko_KR"/>
- <include locales="kok"/>
- <include locales="kok_IN"/>
- <include locales="ks"/>
- <include locales="ks_IN"/>
- <include locales="ksb"/>
- <include locales="ksb_TZ"/>
- <include locales="ksf"/>
- <include locales="ksf_CM"/>
- <include locales="ksh"/>
- <include locales="ksh_DE"/>
- <include locales="ku"/>
- <include locales="ku_TR"/>
- <include locales="kw"/>
- <include locales="kw_GB"/>
- <include locales="ky"/>
- <include locales="ky_KG"/>
- <include locales="lag"/>
- <include locales="lag_TZ"/>
- <include locales="lb"/>
- <include locales="lb_LU"/>
- <include locales="lg"/>
- <include locales="lg_UG"/>
- <include locales="lkt"/>
- <include locales="lkt_US"/>
- <include locales="ln"/>
- <include locales="ln_AO"/>
- <include locales="ln_CD"/>
- <include locales="ln_CF"/>
- <include locales="ln_CG"/>
- <include locales="lo"/>
- <include locales="lo_LA"/>
- <include locales="lrc"/>
- <include locales="lrc_IQ"/>
- <include locales="lrc_IR"/>
- <include locales="lt"/>
- <include locales="lt_LT"/>
- <include locales="lu"/>
- <include locales="lu_CD"/>
- <include locales="luo"/>
- <include locales="luo_KE"/>
- <include locales="luy"/>
- <include locales="luy_KE"/>
- <include locales="lv"/>
- <include locales="lv_LV"/>
- <include locales="mas"/>
- <include locales="mas_KE"/>
- <include locales="mas_TZ"/>
- <include locales="mer"/>
- <include locales="mer_KE"/>
- <include locales="mfe"/>
- <include locales="mfe_MU"/>
- <include locales="mg"/>
- <include locales="mg_MG"/>
- <include locales="mgh"/>
- <include locales="mgh_MZ"/>
- <include locales="mgo"/>
- <include locales="mgo_CM"/>
- <include locales="mi"/>
- <include locales="mi_NZ"/>
- <include locales="mk"/>
- <include locales="mk_MK"/>
- <include locales="ml"/>
- <include locales="ml_IN"/>
- <include locales="mn"/>
- <include locales="mn_MN"/>
- <include locales="mo"/>
- <include locales="mr"/>
- <include locales="mr_IN"/>
- <include locales="ms"/>
- <include locales="ms_BN"/>
- <include locales="ms_MY"/>
- <include locales="ms_SG"/>
- <include locales="mt"/>
- <include locales="mt_MT"/>
- <include locales="mua"/>
- <include locales="mua_CM"/>
- <include locales="my"/>
- <include locales="my_MM"/>
- <include locales="mzn"/>
- <include locales="mzn_IR"/>
- <include locales="naq"/>
- <include locales="naq_NA"/>
- <include locales="nb"/>
- <include locales="nb_NO"/>
- <include locales="nb_SJ"/>
- <include locales="nd"/>
- <include locales="nd_ZW"/>
- <include locales="nds"/>
- <include locales="nds_DE"/>
- <include locales="nds_NL"/>
- <include locales="ne"/>
- <include locales="ne_IN"/>
- <include locales="ne_NP"/>
- <include locales="nl"/>
- <include locales="nl_AW"/>
- <include locales="nl_BE"/>
- <include locales="nl_BQ"/>
- <include locales="nl_CW"/>
- <include locales="nl_NL"/>
- <include locales="nl_SR"/>
- <include locales="nl_SX"/>
- <include locales="nmg"/>
- <include locales="nmg_CM"/>
- <include locales="nn"/>
- <include locales="nn_NO"/>
- <include locales="nnh"/>
- <include locales="nnh_CM"/>
- <include locales="no"/>
- <include locales="no_NO"/>
- <include locales="nus"/>
- <include locales="nus_SS"/>
- <include locales="nyn"/>
- <include locales="nyn_UG"/>
- <include locales="om"/>
- <include locales="om_ET"/>
- <include locales="om_KE"/>
- <include locales="or"/>
- <include locales="or_IN"/>
- <include locales="os"/>
- <include locales="os_GE"/>
- <include locales="os_RU"/>
- <include locales="pa"/>
- <include locales="pa_Arab"/>
- <include locales="pa_Arab_PK"/>
- <include locales="pa_Guru"/>
- <include locales="pa_Guru_IN"/>
- <include locales="pa_IN"/>
- <include locales="pa_PK"/>
- <include locales="pl"/>
- <include locales="pl_PL"/>
- <include locales="ps"/>
- <include locales="ps_AF"/>
- <include locales="ps_PK"/>
- <include locales="pt"/>
- <include locales="pt_AO"/>
- <include locales="pt_BR"/>
- <include locales="pt_CH"/>
- <include locales="pt_CV"/>
- <include locales="pt_GQ"/>
- <include locales="pt_GW"/>
- <include locales="pt_LU"/>
- <include locales="pt_MO"/>
- <include locales="pt_MZ"/>
- <include locales="pt_PT"/>
- <include locales="pt_ST"/>
- <include locales="pt_TL"/>
- <include locales="qu"/>
- <include locales="qu_BO"/>
- <include locales="qu_EC"/>
- <include locales="qu_PE"/>
- <include locales="rm"/>
- <include locales="rm_CH"/>
- <include locales="rn"/>
- <include locales="rn_BI"/>
- <include locales="ro"/>
- <include locales="ro_MD"/>
- <include locales="ro_RO"/>
- <include locales="rof"/>
- <include locales="rof_TZ"/>
- <include locales="root"/>
- <include locales="ru"/>
- <include locales="ru_BY"/>
- <include locales="ru_KG"/>
- <include locales="ru_KZ"/>
- <include locales="ru_MD"/>
- <include locales="ru_RU"/>
- <include locales="ru_UA"/>
- <include locales="rw"/>
- <include locales="rw_RW"/>
- <include locales="rwk"/>
- <include locales="rwk_TZ"/>
- <include locales="sah"/>
- <include locales="sah_RU"/>
- <include locales="saq"/>
- <include locales="saq_KE"/>
- <include locales="sbp"/>
- <include locales="sbp_TZ"/>
- <include locales="sd"/>
- <include locales="sd_PK"/>
- <include locales="se"/>
- <include locales="se_FI"/>
- <include locales="se_NO"/>
- <include locales="se_SE"/>
- <include locales="seh"/>
- <include locales="seh_MZ"/>
- <include locales="ses"/>
- <include locales="ses_ML"/>
- <include locales="sg"/>
- <include locales="sg_CF"/>
- <include locales="sh"/>
- <include locales="sh_BA"/>
- <include locales="sh_CS"/>
- <include locales="sh_YU"/>
- <include locales="shi"/>
- <include locales="shi_Latn"/>
- <include locales="shi_Latn_MA"/>
- <include locales="shi_Tfng"/>
- <include locales="shi_Tfng_MA"/>
- <include locales="shi_MA"/>
- <include locales="si"/>
- <include locales="si_LK"/>
- <include locales="sk"/>
- <include locales="sk_SK"/>
- <include locales="sl"/>
- <include locales="sl_SI"/>
- <include locales="smn"/>
- <include locales="smn_FI"/>
- <include locales="sn"/>
- <include locales="sn_ZW"/>
- <include locales="so"/>
- <include locales="so_DJ"/>
- <include locales="so_ET"/>
- <include locales="so_KE"/>
- <include locales="so_SO"/>
- <include locales="sq"/>
- <include locales="sq_AL"/>
- <include locales="sq_MK"/>
- <include locales="sq_XK"/>
- <include locales="sr"/>
- <include locales="sr_Cyrl"/>
- <include locales="sr_Cyrl_BA"/>
- <include locales="sr_Cyrl_ME"/>
- <include locales="sr_Cyrl_RS"/>
- <include locales="sr_Cyrl_CS"/>
- <include locales="sr_Cyrl_XK"/>
- <include locales="sr_Cyrl_YU"/>
- <include locales="sr_Latn"/>
- <include locales="sr_Latn_BA"/>
- <include locales="sr_Latn_ME"/>
- <include locales="sr_Latn_RS"/>
- <include locales="sr_Latn_CS"/>
- <include locales="sr_Latn_XK"/>
- <include locales="sr_Latn_YU"/>
- <include locales="sr_BA"/>
- <include locales="sr_ME"/>
- <include locales="sr_RS"/>
- <include locales="sr_CS"/>
- <include locales="sr_YU"/>
- <include locales="sv"/>
- <include locales="sv_AX"/>
- <include locales="sv_FI"/>
- <include locales="sv_SE"/>
- <include locales="sw"/>
- <include locales="sw_CD"/>
- <include locales="sw_KE"/>
- <include locales="sw_TZ"/>
- <include locales="sw_UG"/>
- <include locales="ta"/>
- <include locales="ta_IN"/>
- <include locales="ta_LK"/>
- <include locales="ta_MY"/>
- <include locales="ta_SG"/>
- <include locales="te"/>
- <include locales="te_IN"/>
- <include locales="teo"/>
- <include locales="teo_KE"/>
- <include locales="teo_UG"/>
- <include locales="tg"/>
- <include locales="tg_TJ"/>
- <include locales="th"/>
- <include locales="th_TH"/>
- <include locales="ti"/>
- <include locales="ti_ER"/>
- <include locales="ti_ET"/>
- <include locales="tk"/>
- <include locales="tk_TM"/>
- <include locales="tl"/>
- <include locales="tl_PH"/>
- <include locales="to"/>
- <include locales="to_TO"/>
- <include locales="tr"/>
- <include locales="tr_CY"/>
- <include locales="tr_TR"/>
- <include locales="tt"/>
- <include locales="tt_RU"/>
- <include locales="twq"/>
- <include locales="twq_NE"/>
- <include locales="tzm"/>
- <include locales="tzm_MA"/>
- <include locales="ug"/>
- <include locales="ug_CN"/>
- <include locales="uk"/>
- <include locales="uk_UA"/>
- <include locales="ur"/>
- <include locales="ur_IN"/>
- <include locales="ur_PK"/>
- <include locales="uz"/>
- <include locales="uz_AF"/>
- <include locales="uz_Arab"/>
- <include locales="uz_Arab_AF"/>
- <include locales="uz_Cyrl"/>
- <include locales="uz_Cyrl_UZ"/>
- <include locales="uz_Latn"/>
- <include locales="uz_Latn_UZ"/>
- <include locales="uz_UZ"/>
- <include locales="vai"/>
- <include locales="vai_Latn"/>
- <include locales="vai_Latn_LR"/>
- <include locales="vai_LR"/>
- <include locales="vai_Vaii"/>
- <include locales="vai_Vaii_LR"/>
- <include locales="vi"/>
- <include locales="vi_VN"/>
- <include locales="vun"/>
- <include locales="vun_TZ"/>
- <include locales="wae"/>
- <include locales="wae_CH"/>
- <include locales="wo"/>
- <include locales="wo_SN"/>
- <include locales="xh"/>
- <include locales="xh_ZA"/>
- <include locales="xog"/>
- <include locales="xog_UG"/>
- <include locales="yav"/>
- <include locales="yav_CM"/>
- <include locales="yi"/>
- <include locales="yi_001"/>
- <include locales="yo"/>
- <include locales="yo_BJ"/>
- <include locales="yo_NG"/>
- <include locales="yue"/>
- <include locales="yue_Hans"/>
- <include locales="yue_Hans_CN"/>
- <include locales="yue_Hant"/>
- <include locales="yue_Hant_HK"/>
- <include locales="zgh"/>
- <include locales="zgh_MA"/>
- <include locales="zh"/>
- <include locales="zh_Hans"/>
- <include locales="zh_Hans_CN"/>
- <include locales="zh_Hans_HK"/>
- <include locales="zh_Hans_MO"/>
- <include locales="zh_Hans_SG"/>
- <include locales="zh_Hant"/>
- <include locales="zh_Hant_HK"/>
- <include locales="zh_Hant_MO"/>
- <include locales="zh_Hant_TW"/>
- <include locales="zh_CN"/>
- <include locales="zh_HK"/>
- <include locales="zh_MO"/>
- <include locales="zh_SG"/>
- <include locales="zh_TW"/>
- <include locales="zu"/>
- <include locales="zu_ZA"/>
- </locales>
-</config>
diff --git a/Build/source/libs/icu/icu-src/source/data/icu-locale-deprecates.xml b/Build/source/libs/icu/icu-src/source/data/icu-locale-deprecates.xml
deleted file mode 100644
index d2ec74166c4..00000000000
--- a/Build/source/libs/icu/icu-src/source/data/icu-locale-deprecates.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
-/*
-* Copyright (C) 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html
-*******************************************************************************
-* Copyright (C) 2009-2015, International Business Machines Corporation and *
-* others. All Rights Reserved. *
-*******************************************************************************
-*/
--->
-<deprecates>
- <alias from="ars" to="ar_SA"/>
- <alias from="az_AZ" to="az_Latn_AZ"/>
- <alias from="bs_BA" to="bs_Latn_BA" />
- <alias from="en_NH" to="en_VU"/>
- <alias from="en_RH" to="en_ZW"/>
- <alias from="ff_CM" to="ff_Latn_CM"/>
- <alias from="ff_GN" to="ff_Latn_GN"/>
- <alias from="ff_MR" to="ff_Latn_MR"/>
- <alias from="ff_SN" to="ff_Latn_SN"/>
- <alias from="in" to="id"/>
- <alias from="in_ID" to="id_ID"/>
- <alias from="iw" to="he"/>
- <alias from="iw_IL" to="he_IL"/>
- <alias from="ja_JP_TRADITIONAL" to="ja_JP" rbpath="/calendar/default" value="japanese"/>
- <alias from="mo" to="ro"/>
- <alias from="no_NO" to="nb_NO"/>
- <alias from="no_NO_NY" to="nn_NO"/>
- <alias from="no" to="nb"/>
- <alias from="pa_IN" to="pa_Guru_IN"/>
- <alias from="pa_PK" to="pa_Arab_PK"/>
- <alias from="sh" to="sr_Latn"/>
- <alias from="sh_BA" to="sr_Latn_BA"/>
- <alias from="sh_CS" to="sr_Latn_RS"/>
- <alias from="sh_YU" to="sr_Latn_RS"/>
- <alias from="shi_MA" to="shi_Tfng_MA"/>
- <alias from="sr_BA" to="sr_Cyrl_BA"/>
- <alias from="sr_CS" to="sr_Cyrl_RS"/>
- <alias from="sr_ME" to="sr_Latn_ME"/>
- <alias from="sr_RS" to="sr_Cyrl_RS"/>
- <alias from="sr_XK" to="sr_Cyrl_XK"/>
- <alias from="sr_YU" to="sr_Cyrl_RS"/>
- <alias from="sr_Cyrl_YU" to="sr_Cyrl_RS"/>
- <alias from="sr_Cyrl_CS" to="sr_Cyrl_RS"/>
- <alias from="sr_Latn_YU" to="sr_Latn_RS"/>
- <alias from="sr_Latn_CS" to="sr_Latn_RS"/>
- <alias from="th_TH_TRADITIONAL" to="th_TH" rbpath="/calendar/default" value="buddhist"/>
- <alias from="tl" to="fil"/>
- <alias from="tl_PH" to="fil_PH"/>
- <alias from="uz_AF" to="uz_Arab_AF"/>
- <alias from="uz_UZ" to="uz_Latn_UZ"/>
- <alias from="vai_LR" to="vai_Vaii_LR"/>
- <alias from="yue_CN" to="yue_Hans_CN"/>
- <alias from="yue_HK" to="yue_Hant_HK"/>
- <alias from="zh_CN" to="zh_Hans_CN"/>
- <alias from="zh_HK" to="zh_Hant_HK"/>
- <alias from="zh_MO" to="zh_Hant_MO"/>
- <alias from="zh_SG" to="zh_Hans_SG"/>
- <alias from="zh_TW" to="zh_Hant_TW"/>
-</deprecates>
diff --git a/Build/source/libs/icu/icu-src/source/data/icu-rbnf-deprecates.xml b/Build/source/libs/icu/icu-src/source/data/icu-rbnf-deprecates.xml
deleted file mode 100644
index d933a2d4906..00000000000
--- a/Build/source/libs/icu/icu-src/source/data/icu-rbnf-deprecates.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-/*
-* Copyright (C) 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html
-*******************************************************************************
-* Copyright (C) 2015-2016, International Business Machines Corporation and *
-* others. All Rights Reserved. *
-*******************************************************************************
-*/
--->
-<!--
-TODO: Most of these aliases are CLDR parent locales. Is this separate list
-necessary and can we just use the main list in icu-locale-deprecates.xml?
--->
-<deprecates>
- <alias from="ars" to="ar" />
- <alias from="es_DO" to="es_419" />
- <alias from="es_GT" to="es_419" />
- <alias from="es_HN" to="es_419" />
- <alias from="es_MX" to="es_419" />
- <alias from="es_NI" to="es_419" />
- <alias from="es_PA" to="es_419" />
- <alias from="es_PR" to="es_419" />
- <alias from="es_SV" to="es_419" />
- <alias from="es_US" to="es_419" />
- <alias from="in" to="id" />
- <alias from="iw" to="he" />
- <alias from="no" to="nb" />
- <alias from="sh" to="sr_Latn" />
- <alias from="zh_Hant_HK" to="yue" />
- <alias from="zh_HK" to="yue" />
- <alias from="zh_MO" to="yue" />
- <alias from="zh_TW" to="zh_Hant" />
-</deprecates>
diff --git a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
index 296515d1ece..26ca796d1d8 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
index 3c86fd12dd4..53ac32a4bf6 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/icudt65l.dat b/Build/source/libs/icu/icu-src/source/data/in/icudt68l.dat
index 288bf20dbf9..1b472b51769 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/icudt65l.dat
+++ b/Build/source/libs/icu/icu-src/source/data/in/icudt68l.dat
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm b/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
index 5691b2bcb61..a1254c0aa75 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm b/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
index b0f4405451f..2e6e3dda074 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm b/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
index eef4e62e583..a3a40833a91 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/pnames.icu b/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
index 443a8e45e7c..58af6c0157a 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu b/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
index df3bbb8fad7..bc85f3d3502 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/ucase.icu b/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
index cb65fe77397..011e6053f79 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu b/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
index c129d1ba0df..598d347cc1e 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/unames.icu b/Build/source/libs/icu/icu-src/source/data/in/unames.icu
index 77ff1fd4687..55a2267fd5b 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/unames.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/unames.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/uprops.icu b/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
index 4a16695e31f..245db9a0584 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm b/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
index 210b4d6a6da..72b266adf7a 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/makedata.mak b/Build/source/libs/icu/icu-src/source/data/makedata.mak
index dfd6273931a..daa66ef6c52 100644
--- a/Build/source/libs/icu/icu-src/source/data/makedata.mak
+++ b/Build/source/libs/icu/icu-src/source/data/makedata.mak
@@ -12,14 +12,14 @@
##############################################################################
# Keep the following in sync with the version - see common/unicode/uvernum.h
-U_ICUDATA_NAME=icudt65
+U_ICUDATA_NAME=icudt68
##############################################################################
!IF "$(UWP)" == "UWP"
# Optionally change the name of the data file for the UWP version.
-U_ICUDATA_NAME=icudt65
+U_ICUDATA_NAME=icudt68
!ENDIF
U_ICUDATA_ENDIAN_SUFFIX=l
-UNICODE_VERSION=12.1
+UNICODE_VERSION=13.0
ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll
# ICUMAKE
@@ -161,15 +161,22 @@ ARM_CROSSBUILD_TS=$(ICUTMP)\$(ARM_CROSS_BUILD).timestamp
#
# TOOLS CFG PATH
# Generally the tools want to run on the same architecture as is being built.
-# Thus ARM and ARM64 need to use another build of the other tools, so make sure to get an usable cfg path.
+# Thus ARM and ARM64 need to use another build of the other tools, so make sure to get an usable CFG path.
# Since tools, particularly pkggen, have architecture built-in, we made x64 on
-# Windows be machine-independent and use those tools.
+# Windows be machine-independent and use those tools for both ARM and ARM64.
+# Note: If we're building ARM/ARM64 Debug, then we'll use the x64 Debug tools.
+# If we're building ARM/ARM64 Release, then we'll use the x64 Release tools.
#
!IF "$(ARM_CROSS_BUILD)" == ""
CFGTOOLS=$(CFG)
!ELSE
+!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM64\Release"
CFGTOOLS=x64\Release
!ENDIF
+!IF "$(CFG)" == "ARM\Debug" || "$(CFG)" == "ARM64\Debug"
+CFGTOOLS=x64\Debug
+!ENDIF
+!ENDIF
!MESSAGE ICU tools CFG subpath is $(CFGTOOLS)
@@ -214,6 +221,9 @@ COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $(
!IF "$(UWP)" == "UWP"
COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -u
!ENDIF
+!IF "$(CFG)" == "x64\Release" || "$(CFG)" == "x64\Debug"
+COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -a X64
+!ENDIF
!IF "$(CFG)" == "ARM\Release" || "$(CFG)" == "ARM\Debug"
COMMON_ICUDATA_ARGUMENTS=$(COMMON_ICUDATA_ARGUMENTS) -a ARM
!ENDIF
@@ -245,6 +255,13 @@ ALL : GODATA "$(ICU_LIB_TARGET)" "$(TESTDATAOUT)\testdata.dat" $(ARM_CROSSBUILD_
!ENDIF
+# Verbose output when building the data for Debug builds.
+!IF "$(DEBUG)" == "true"
+ICU_DATA_BUILD_VERBOSE=--verbose
+!ELSE
+ICU_DATA_BUILD_VERBOSE=
+!ENDIF
+
# Three main targets: tools, core data, and test data.
# Keep track of whether they are built via timestamp files.
@@ -270,10 +287,11 @@ $(COREDATA_TS):
--mode windows-exec \
--src_dir "$(ICUSRCDATA)" \
--tool_dir "$(ICUTOOLS)" \
- --tool_cfg "$(CFG)" \
+ --tool_cfg "$(CFGTOOLS)" \
--out_dir "$(ICUBLD_PKG)" \
--tmp_dir "$(ICUTMP)" \
--filter_file "$(ICU_DATA_FILTER_FILE)" \
+ $(ICU_DATA_BUILD_VERBOSE) \
$(ICU_DATA_BUILDTOOL_OPTS)
@echo "timestamp" > $(COREDATA_TS)
@@ -375,7 +393,7 @@ icu4j-data-install :
#
# testdata - nmake will invoke pkgdata, which will create testdata.dat
#
-"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" $(TOOLS_TS) $(COREDATA_TS)
+"$(TESTDATAOUT)\testdata.dat": "$(TESTDATA)\*" $(TOOLS_TS)
@cd "$(TESTDATA)"
@echo building testdata...
nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUPBIN="$(ICUPBIN)" ICUP="$(ICUP)" CFG=$(CFGTOOLS) TESTDATAOUT="$(TESTDATAOUT)" TESTDATABLD="$(TESTDATABLD)" ICUSRCDATA="$(ICUSRCDATA)" DLL_OUTPUT="$(DLL_OUTPUT)"
diff --git a/Build/source/libs/icu/icu-src/source/data/makedata.vcxproj b/Build/source/libs/icu/icu-src/source/data/makedata.vcxproj
index 71ccafbc280..4309f430ecb 100644
--- a/Build/source/libs/icu/icu-src/source/data/makedata.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/data/makedata.vcxproj
@@ -12,21 +12,18 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir>.\data\tmp\$(Platform)\</OutDir>
<IntDir>.\data\build\</IntDir>
<MakeCFG>$(Platform)\$(Configuration)</MakeCFG>
+ <DebugBuild Condition="'$(Configuration)'=='Debug'">true</DebugBuild>
<!-- The ICU projects use "Win32" to mean "x86", so we need to special case it. -->
<OutDir Condition="'$(Platform)'=='Win32'">.\data\tmp\x86\</OutDir>
<MakeCFG Condition="'$(Platform)'=='Win32'">x86\$(Configuration)</MakeCFG>
<!-- NMake -->
- <NMakeBuildCommandLine>NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=$(MakeCFG)</NMakeBuildCommandLine>
+ <NMakeBuildCommandLine>NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=$(MakeCFG) DEBUG=$(DebugBuild)</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=$(MakeCFG) clean all</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>NMAKE /f makedata.mak ICUMAKE="$(ProjectDir)\" CFG=$(MakeCFG) clean</NMakeCleanCommandLine>
<NMakeOutput/>
diff --git a/Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj b/Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj
index f89bac014b7..7b4ae4d9a4b 100644
--- a/Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj
@@ -47,10 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt b/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
index 7eeb915abfd..033788b253f 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
@@ -1,5 +1,5 @@
-# CaseFolding-12.1.0.txt
-# Date: 2019-03-10, 10:53:00 GMT
+# CaseFolding-13.0.0.txt
+# Date: 2019-09-08, 23:30:59 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -1234,6 +1234,9 @@ A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W
A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK
A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK
A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H
AB70; C; 13A0; # CHEROKEE SMALL LETTER A
AB71; C; 13A1; # CHEROKEE SMALL LETTER E
AB72; C; 13A2; # CHEROKEE SMALL LETTER I
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
index 7856f2b40ab..d67ba023380 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
@@ -1,6 +1,6 @@
-# DerivedCoreProperties-12.1.0.txt
-# Date: 2019-03-10, 10:53:06 GMT
-# © 2019 Unicode®, Inc.
+# DerivedCoreProperties-13.0.0.txt
+# Date: 2020-01-22, 00:07:19 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -342,7 +342,7 @@ FFE9..FFEC ; Math
0840..0858 ; Alphabetic
0860..086A ; Alphabetic
08A0..08B4 ; Alphabetic
-08B6..08BD ; Alphabetic
+08B6..08C7 ; Alphabetic
08D4..08DF ; Alphabetic
08E3..08E9 ; Alphabetic
08F0..0902 ; Alphabetic
@@ -496,7 +496,7 @@ FFE9..FFEC ; Math
0CF1..0CF2 ; Alphabetic
0D00..0D01 ; Alphabetic
0D02..0D03 ; Alphabetic
-0D05..0D0C ; Alphabetic
+0D04..0D0C ; Alphabetic
0D0E..0D10 ; Alphabetic
0D12..0D3A ; Alphabetic
0D3D ; Alphabetic
@@ -510,6 +510,7 @@ FFE9..FFEC ; Math
0D5F..0D61 ; Alphabetic
0D62..0D63 ; Alphabetic
0D7A..0D7F ; Alphabetic
+0D81 ; Alphabetic
0D82..0D83 ; Alphabetic
0D85..0D96 ; Alphabetic
0D9A..0DB1 ; Alphabetic
@@ -668,6 +669,7 @@ FFE9..FFEC ; Math
1A6D..1A72 ; Alphabetic
1A73..1A74 ; Alphabetic
1AA7 ; Alphabetic
+1ABF..1AC0 ; Alphabetic
1B00..1B03 ; Alphabetic
1B04 ; Alphabetic
1B05..1B33 ; Alphabetic
@@ -797,10 +799,10 @@ FFE9..FFEC ; Math
30FF ; Alphabetic
3105..312F ; Alphabetic
3131..318E ; Alphabetic
-31A0..31BA ; Alphabetic
+31A0..31BF ; Alphabetic
31F0..31FF ; Alphabetic
-3400..4DB5 ; Alphabetic
-4E00..9FEF ; Alphabetic
+3400..4DBF ; Alphabetic
+4E00..9FFC ; Alphabetic
A000..A014 ; Alphabetic
A015 ; Alphabetic
A016..A48C ; Alphabetic
@@ -827,7 +829,8 @@ A788 ; Alphabetic
A78B..A78E ; Alphabetic
A78F ; Alphabetic
A790..A7BF ; Alphabetic
-A7C2..A7C6 ; Alphabetic
+A7C2..A7CA ; Alphabetic
+A7F5..A7F6 ; Alphabetic
A7F7 ; Alphabetic
A7F8..A7F9 ; Alphabetic
A7FA ; Alphabetic
@@ -913,7 +916,8 @@ AB20..AB26 ; Alphabetic
AB28..AB2E ; Alphabetic
AB30..AB5A ; Alphabetic
AB5C..AB5F ; Alphabetic
-AB60..AB67 ; Alphabetic
+AB60..AB68 ; Alphabetic
+AB69 ; Alphabetic
AB70..ABBF ; Alphabetic
ABC0..ABE2 ; Alphabetic
ABE3..ABE4 ; Alphabetic
@@ -1018,9 +1022,13 @@ FFDA..FFDC ; Alphabetic
10CC0..10CF2 ; Alphabetic
10D00..10D23 ; Alphabetic
10D24..10D27 ; Alphabetic
+10E80..10EA9 ; Alphabetic
+10EAB..10EAC ; Alphabetic
+10EB0..10EB1 ; Alphabetic
10F00..10F1C ; Alphabetic
10F27 ; Alphabetic
10F30..10F45 ; Alphabetic
+10FB0..10FC4 ; Alphabetic
10FE0..10FF6 ; Alphabetic
11000 ; Alphabetic
11001 ; Alphabetic
@@ -1040,6 +1048,7 @@ FFDA..FFDC ; Alphabetic
1112D..11132 ; Alphabetic
11144 ; Alphabetic
11145..11146 ; Alphabetic
+11147 ; Alphabetic
11150..11172 ; Alphabetic
11176 ; Alphabetic
11180..11181 ; Alphabetic
@@ -1049,6 +1058,8 @@ FFDA..FFDC ; Alphabetic
111B6..111BE ; Alphabetic
111BF ; Alphabetic
111C1..111C4 ; Alphabetic
+111CE ; Alphabetic
+111CF ; Alphabetic
111DA ; Alphabetic
111DC ; Alphabetic
11200..11211 ; Alphabetic
@@ -1093,7 +1104,7 @@ FFDA..FFDC ; Alphabetic
11443..11444 ; Alphabetic
11445 ; Alphabetic
11447..1144A ; Alphabetic
-1145F ; Alphabetic
+1145F..11461 ; Alphabetic
11480..114AF ; Alphabetic
114B0..114B2 ; Alphabetic
114B3..114B8 ; Alphabetic
@@ -1138,7 +1149,18 @@ FFDA..FFDC ; Alphabetic
1182F..11837 ; Alphabetic
11838 ; Alphabetic
118A0..118DF ; Alphabetic
-118FF ; Alphabetic
+118FF..11906 ; Alphabetic
+11909 ; Alphabetic
+1190C..11913 ; Alphabetic
+11915..11916 ; Alphabetic
+11918..1192F ; Alphabetic
+11930..11935 ; Alphabetic
+11937..11938 ; Alphabetic
+1193B..1193C ; Alphabetic
+1193F ; Alphabetic
+11940 ; Alphabetic
+11941 ; Alphabetic
+11942 ; Alphabetic
119A0..119A7 ; Alphabetic
119AA..119D0 ; Alphabetic
119D1..119D3 ; Alphabetic
@@ -1201,6 +1223,7 @@ FFDA..FFDC ; Alphabetic
11EE0..11EF2 ; Alphabetic
11EF3..11EF4 ; Alphabetic
11EF5..11EF6 ; Alphabetic
+11FB0 ; Alphabetic
12000..12399 ; Alphabetic
12400..1246E ; Alphabetic
12480..12543 ; Alphabetic
@@ -1222,8 +1245,10 @@ FFDA..FFDC ; Alphabetic
16F93..16F9F ; Alphabetic
16FE0..16FE1 ; Alphabetic
16FE3 ; Alphabetic
+16FF0..16FF1 ; Alphabetic
17000..187F7 ; Alphabetic
-18800..18AF2 ; Alphabetic
+18800..18CD5 ; Alphabetic
+18D00..18D08 ; Alphabetic
1B000..1B11E ; Alphabetic
1B150..1B152 ; Alphabetic
1B164..1B167 ; Alphabetic
@@ -1312,14 +1337,15 @@ FFDA..FFDC ; Alphabetic
1F130..1F149 ; Alphabetic
1F150..1F169 ; Alphabetic
1F170..1F189 ; Alphabetic
-20000..2A6D6 ; Alphabetic
+20000..2A6DD ; Alphabetic
2A700..2B734 ; Alphabetic
2B740..2B81D ; Alphabetic
2B820..2CEA1 ; Alphabetic
2CEB0..2EBE0 ; Alphabetic
2F800..2FA1D ; Alphabetic
+30000..3134A ; Alphabetic
-# Total code points: 127256
+# Total code points: 132875
# ================================================
@@ -1945,11 +1971,14 @@ A7BB ; Lowercase
A7BD ; Lowercase
A7BF ; Lowercase
A7C3 ; Lowercase
+A7C8 ; Lowercase
+A7CA ; Lowercase
+A7F6 ; Lowercase
A7F8..A7F9 ; Lowercase
A7FA ; Lowercase
AB30..AB5A ; Lowercase
AB5C..AB5F ; Lowercase
-AB60..AB67 ; Lowercase
+AB60..AB68 ; Lowercase
AB70..ABBF ; Lowercase
FB00..FB06 ; Lowercase
FB13..FB17 ; Lowercase
@@ -1989,7 +2018,7 @@ FF41..FF5A ; Lowercase
1D7CB ; Lowercase
1E922..1E943 ; Lowercase
-# Total code points: 2340
+# Total code points: 2344
# ================================================
@@ -2595,7 +2624,9 @@ A7BA ; Uppercase
A7BC ; Uppercase
A7BE ; Uppercase
A7C2 ; Uppercase
-A7C4..A7C6 ; Uppercase
+A7C4..A7C7 ; Uppercase
+A7C9 ; Uppercase
+A7F5 ; Uppercase
FF21..FF3A ; Uppercase
10400..10427 ; Uppercase
104B0..104D3 ; Uppercase
@@ -2638,7 +2669,7 @@ FF21..FF3A ; Uppercase
1F150..1F169 ; Uppercase
1F170..1F189 ; Uppercase
-# Total code points: 1908
+# Total code points: 1911
# ================================================
@@ -2748,12 +2779,13 @@ A770 ; Cased
A771..A787 ; Cased
A78B..A78E ; Cased
A790..A7BF ; Cased
-A7C2..A7C6 ; Cased
+A7C2..A7CA ; Cased
+A7F5..A7F6 ; Cased
A7F8..A7F9 ; Cased
A7FA ; Cased
AB30..AB5A ; Cased
AB5C..AB5F ; Cased
-AB60..AB67 ; Cased
+AB60..AB68 ; Cased
AB70..ABBF ; Cased
FB00..FB06 ; Cased
FB13..FB17 ; Cased
@@ -2801,7 +2833,7 @@ FF41..FF5A ; Cased
1F150..1F169 ; Cased
1F170..1F189 ; Cased
-# Total code points: 4279
+# Total code points: 4286
# ================================================
@@ -2841,6 +2873,7 @@ FF41..FF5A ; Cased
0483..0487 ; Case_Ignorable
0488..0489 ; Case_Ignorable
0559 ; Case_Ignorable
+055F ; Case_Ignorable
0591..05BD ; Case_Ignorable
05BF ; Case_Ignorable
05C1..05C2 ; Case_Ignorable
@@ -2911,7 +2944,7 @@ FF41..FF5A ; Cased
0B3F ; Case_Ignorable
0B41..0B44 ; Case_Ignorable
0B4D ; Case_Ignorable
-0B56 ; Case_Ignorable
+0B55..0B56 ; Case_Ignorable
0B62..0B63 ; Case_Ignorable
0B82 ; Case_Ignorable
0BC0 ; Case_Ignorable
@@ -2934,6 +2967,7 @@ FF41..FF5A ; Cased
0D41..0D44 ; Case_Ignorable
0D4D ; Case_Ignorable
0D62..0D63 ; Case_Ignorable
+0D81 ; Case_Ignorable
0DCA ; Case_Ignorable
0DD2..0DD4 ; Case_Ignorable
0DD6 ; Case_Ignorable
@@ -2999,6 +3033,7 @@ FF41..FF5A ; Cased
1AA7 ; Case_Ignorable
1AB0..1ABD ; Case_Ignorable
1ABE ; Case_Ignorable
+1ABF..1AC0 ; Case_Ignorable
1B00..1B03 ; Case_Ignorable
1B34 ; Case_Ignorable
1B36..1B3A ; Case_Ignorable
@@ -3084,6 +3119,7 @@ A802 ; Case_Ignorable
A806 ; Case_Ignorable
A80B ; Case_Ignorable
A825..A826 ; Case_Ignorable
+A82C ; Case_Ignorable
A8C4..A8C5 ; Case_Ignorable
A8E0..A8F1 ; Case_Ignorable
A8FF ; Case_Ignorable
@@ -3114,6 +3150,8 @@ AAF3..AAF4 ; Case_Ignorable
AAF6 ; Case_Ignorable
AB5B ; Case_Ignorable
AB5C..AB5F ; Case_Ignorable
+AB69 ; Case_Ignorable
+AB6A..AB6B ; Case_Ignorable
ABE5 ; Case_Ignorable
ABE8 ; Case_Ignorable
ABED ; Case_Ignorable
@@ -3144,6 +3182,7 @@ FFF9..FFFB ; Case_Ignorable
10A3F ; Case_Ignorable
10AE5..10AE6 ; Case_Ignorable
10D24..10D27 ; Case_Ignorable
+10EAB..10EAC ; Case_Ignorable
10F46..10F50 ; Case_Ignorable
11001 ; Case_Ignorable
11038..11046 ; Case_Ignorable
@@ -3159,6 +3198,7 @@ FFF9..FFFB ; Case_Ignorable
11180..11181 ; Case_Ignorable
111B6..111BE ; Case_Ignorable
111C9..111CC ; Case_Ignorable
+111CF ; Case_Ignorable
1122F..11231 ; Case_Ignorable
11234 ; Case_Ignorable
11236..11237 ; Case_Ignorable
@@ -3194,6 +3234,9 @@ FFF9..FFFB ; Case_Ignorable
11727..1172B ; Case_Ignorable
1182F..11837 ; Case_Ignorable
11839..1183A ; Case_Ignorable
+1193B..1193C ; Case_Ignorable
+1193E ; Case_Ignorable
+11943 ; Case_Ignorable
119D4..119D7 ; Case_Ignorable
119DA..119DB ; Case_Ignorable
119E0 ; Case_Ignorable
@@ -3230,6 +3273,7 @@ FFF9..FFFB ; Case_Ignorable
16F93..16F9F ; Case_Ignorable
16FE0..16FE1 ; Case_Ignorable
16FE3 ; Case_Ignorable
+16FE4 ; Case_Ignorable
1BC9D..1BC9E ; Case_Ignorable
1BCA0..1BCA3 ; Case_Ignorable
1D167..1D169 ; Case_Ignorable
@@ -3260,7 +3304,7 @@ E0001 ; Case_Ignorable
E0020..E007F ; Case_Ignorable
E0100..E01EF ; Case_Ignorable
-# Total code points: 2396
+# Total code points: 2413
# ================================================
@@ -3860,7 +3904,9 @@ A7BA ; Changes_When_Lowercased
A7BC ; Changes_When_Lowercased
A7BE ; Changes_When_Lowercased
A7C2 ; Changes_When_Lowercased
-A7C4..A7C6 ; Changes_When_Lowercased
+A7C4..A7C7 ; Changes_When_Lowercased
+A7C9 ; Changes_When_Lowercased
+A7F5 ; Changes_When_Lowercased
FF21..FF3A ; Changes_When_Lowercased
10400..10427 ; Changes_When_Lowercased
104B0..104D3 ; Changes_When_Lowercased
@@ -3869,7 +3915,7 @@ FF21..FF3A ; Changes_When_Lowercased
16E40..16E5F ; Changes_When_Lowercased
1E900..1E921 ; Changes_When_Lowercased
-# Total code points: 1390
+# Total code points: 1393
# ================================================
@@ -4483,6 +4529,9 @@ A7BB ; Changes_When_Uppercased
A7BD ; Changes_When_Uppercased
A7BF ; Changes_When_Uppercased
A7C3 ; Changes_When_Uppercased
+A7C8 ; Changes_When_Uppercased
+A7CA ; Changes_When_Uppercased
+A7F6 ; Changes_When_Uppercased
AB53 ; Changes_When_Uppercased
AB70..ABBF ; Changes_When_Uppercased
FB00..FB06 ; Changes_When_Uppercased
@@ -4495,7 +4544,7 @@ FF41..FF5A ; Changes_When_Uppercased
16E60..16E7F ; Changes_When_Uppercased
1E922..1E943 ; Changes_When_Uppercased
-# Total code points: 1482
+# Total code points: 1485
# ================================================
@@ -5108,6 +5157,9 @@ A7BB ; Changes_When_Titlecased
A7BD ; Changes_When_Titlecased
A7BF ; Changes_When_Titlecased
A7C3 ; Changes_When_Titlecased
+A7C8 ; Changes_When_Titlecased
+A7CA ; Changes_When_Titlecased
+A7F6 ; Changes_When_Titlecased
AB53 ; Changes_When_Titlecased
AB70..ABBF ; Changes_When_Titlecased
FB00..FB06 ; Changes_When_Titlecased
@@ -5120,7 +5172,7 @@ FF41..FF5A ; Changes_When_Titlecased
16E60..16E7F ; Changes_When_Titlecased
1E922..1E943 ; Changes_When_Titlecased
-# Total code points: 1409
+# Total code points: 1412
# ================================================
@@ -5730,7 +5782,9 @@ A7BA ; Changes_When_Casefolded
A7BC ; Changes_When_Casefolded
A7BE ; Changes_When_Casefolded
A7C2 ; Changes_When_Casefolded
-A7C4..A7C6 ; Changes_When_Casefolded
+A7C4..A7C7 ; Changes_When_Casefolded
+A7C9 ; Changes_When_Casefolded
+A7F5 ; Changes_When_Casefolded
AB70..ABBF ; Changes_When_Casefolded
FB00..FB06 ; Changes_When_Casefolded
FB13..FB17 ; Changes_When_Casefolded
@@ -5742,7 +5796,7 @@ FF21..FF3A ; Changes_When_Casefolded
16E40..16E5F ; Changes_When_Casefolded
1E900..1E921 ; Changes_When_Casefolded
-# Total code points: 1463
+# Total code points: 1466
# ================================================
@@ -5859,7 +5913,8 @@ A78B..A78D ; Changes_When_Casemapped
A790..A794 ; Changes_When_Casemapped
A796..A7AE ; Changes_When_Casemapped
A7B0..A7BF ; Changes_When_Casemapped
-A7C2..A7C6 ; Changes_When_Casemapped
+A7C2..A7CA ; Changes_When_Casemapped
+A7F5..A7F6 ; Changes_When_Casemapped
AB53 ; Changes_When_Casemapped
AB70..ABBF ; Changes_When_Casemapped
FB00..FB06 ; Changes_When_Casemapped
@@ -5875,7 +5930,7 @@ FF41..FF5A ; Changes_When_Casemapped
16E40..16E7F ; Changes_When_Casemapped
1E900..1E943 ; Changes_When_Casemapped
-# Total code points: 2841
+# Total code points: 2847
# ================================================
@@ -5949,7 +6004,7 @@ FF41..FF5A ; Changes_When_Casemapped
0840..0858 ; ID_Start
0860..086A ; ID_Start
08A0..08B4 ; ID_Start
-08B6..08BD ; ID_Start
+08B6..08C7 ; ID_Start
0904..0939 ; ID_Start
093D ; ID_Start
0950 ; ID_Start
@@ -6026,7 +6081,7 @@ FF41..FF5A ; Changes_When_Casemapped
0CDE ; ID_Start
0CE0..0CE1 ; ID_Start
0CF1..0CF2 ; ID_Start
-0D05..0D0C ; ID_Start
+0D04..0D0C ; ID_Start
0D0E..0D10 ; ID_Start
0D12..0D3A ; ID_Start
0D3D ; ID_Start
@@ -6225,10 +6280,10 @@ FF41..FF5A ; Changes_When_Casemapped
30FF ; ID_Start
3105..312F ; ID_Start
3131..318E ; ID_Start
-31A0..31BA ; ID_Start
+31A0..31BF ; ID_Start
31F0..31FF ; ID_Start
-3400..4DB5 ; ID_Start
-4E00..9FEF ; ID_Start
+3400..4DBF ; ID_Start
+4E00..9FFC ; ID_Start
A000..A014 ; ID_Start
A015 ; ID_Start
A016..A48C ; ID_Start
@@ -6253,7 +6308,8 @@ A788 ; ID_Start
A78B..A78E ; ID_Start
A78F ; ID_Start
A790..A7BF ; ID_Start
-A7C2..A7C6 ; ID_Start
+A7C2..A7CA ; ID_Start
+A7F5..A7F6 ; ID_Start
A7F7 ; ID_Start
A7F8..A7F9 ; ID_Start
A7FA ; ID_Start
@@ -6300,7 +6356,8 @@ AB20..AB26 ; ID_Start
AB28..AB2E ; ID_Start
AB30..AB5A ; ID_Start
AB5C..AB5F ; ID_Start
-AB60..AB67 ; ID_Start
+AB60..AB68 ; ID_Start
+AB69 ; ID_Start
AB70..ABBF ; ID_Start
ABC0..ABE2 ; ID_Start
AC00..D7A3 ; ID_Start
@@ -6394,15 +6451,19 @@ FFDA..FFDC ; ID_Start
10C80..10CB2 ; ID_Start
10CC0..10CF2 ; ID_Start
10D00..10D23 ; ID_Start
+10E80..10EA9 ; ID_Start
+10EB0..10EB1 ; ID_Start
10F00..10F1C ; ID_Start
10F27 ; ID_Start
10F30..10F45 ; ID_Start
+10FB0..10FC4 ; ID_Start
10FE0..10FF6 ; ID_Start
11003..11037 ; ID_Start
11083..110AF ; ID_Start
110D0..110E8 ; ID_Start
11103..11126 ; ID_Start
11144 ; ID_Start
+11147 ; ID_Start
11150..11172 ; ID_Start
11176 ; ID_Start
11183..111B2 ; ID_Start
@@ -6428,7 +6489,7 @@ FFDA..FFDC ; ID_Start
1135D..11361 ; ID_Start
11400..11434 ; ID_Start
11447..1144A ; ID_Start
-1145F ; ID_Start
+1145F..11461 ; ID_Start
11480..114AF ; ID_Start
114C4..114C5 ; ID_Start
114C7 ; ID_Start
@@ -6441,7 +6502,13 @@ FFDA..FFDC ; ID_Start
11700..1171A ; ID_Start
11800..1182B ; ID_Start
118A0..118DF ; ID_Start
-118FF ; ID_Start
+118FF..11906 ; ID_Start
+11909 ; ID_Start
+1190C..11913 ; ID_Start
+11915..11916 ; ID_Start
+11918..1192F ; ID_Start
+1193F ; ID_Start
+11941 ; ID_Start
119A0..119A7 ; ID_Start
119AA..119D0 ; ID_Start
119E1 ; ID_Start
@@ -6466,6 +6533,7 @@ FFDA..FFDC ; ID_Start
11D6A..11D89 ; ID_Start
11D98 ; ID_Start
11EE0..11EF2 ; ID_Start
+11FB0 ; ID_Start
12000..12399 ; ID_Start
12400..1246E ; ID_Start
12480..12543 ; ID_Start
@@ -6485,7 +6553,8 @@ FFDA..FFDC ; ID_Start
16FE0..16FE1 ; ID_Start
16FE3 ; ID_Start
17000..187F7 ; ID_Start
-18800..18AF2 ; ID_Start
+18800..18CD5 ; ID_Start
+18D00..18D08 ; ID_Start
1B000..1B11E ; ID_Start
1B150..1B152 ; ID_Start
1B164..1B167 ; ID_Start
@@ -6564,14 +6633,15 @@ FFDA..FFDC ; ID_Start
1EEA1..1EEA3 ; ID_Start
1EEA5..1EEA9 ; ID_Start
1EEAB..1EEBB ; ID_Start
-20000..2A6D6 ; ID_Start
+20000..2A6DD ; ID_Start
2A700..2B734 ; ID_Start
2B740..2B81D ; ID_Start
2B820..2CEA1 ; ID_Start
2CEB0..2EBE0 ; ID_Start
2F800..2FA1D ; ID_Start
+30000..3134A ; ID_Start
-# Total code points: 125884
+# Total code points: 131482
# ================================================
@@ -6677,7 +6747,7 @@ FFDA..FFDC ; ID_Start
0859..085B ; ID_Continue
0860..086A ; ID_Continue
08A0..08B4 ; ID_Continue
-08B6..08BD ; ID_Continue
+08B6..08C7 ; ID_Continue
08D3..08E1 ; ID_Continue
08E3..0902 ; ID_Continue
0903 ; ID_Continue
@@ -6782,7 +6852,7 @@ FFDA..FFDC ; ID_Start
0B47..0B48 ; ID_Continue
0B4B..0B4C ; ID_Continue
0B4D ; ID_Continue
-0B56 ; ID_Continue
+0B55..0B56 ; ID_Continue
0B57 ; ID_Continue
0B5C..0B5D ; ID_Continue
0B5F..0B61 ; ID_Continue
@@ -6851,7 +6921,7 @@ FFDA..FFDC ; ID_Start
0CF1..0CF2 ; ID_Continue
0D00..0D01 ; ID_Continue
0D02..0D03 ; ID_Continue
-0D05..0D0C ; ID_Continue
+0D04..0D0C ; ID_Continue
0D0E..0D10 ; ID_Continue
0D12..0D3A ; ID_Continue
0D3B..0D3C ; ID_Continue
@@ -6868,6 +6938,7 @@ FFDA..FFDC ; ID_Start
0D62..0D63 ; ID_Continue
0D66..0D6F ; ID_Continue
0D7A..0D7F ; ID_Continue
+0D81 ; ID_Continue
0D82..0D83 ; ID_Continue
0D85..0D96 ; ID_Continue
0D9A..0DB1 ; ID_Continue
@@ -7057,6 +7128,7 @@ FFDA..FFDC ; ID_Start
1A90..1A99 ; ID_Continue
1AA7 ; ID_Continue
1AB0..1ABD ; ID_Continue
+1ABF..1AC0 ; ID_Continue
1B00..1B03 ; ID_Continue
1B04 ; ID_Continue
1B05..1B33 ; ID_Continue
@@ -7215,10 +7287,10 @@ FFDA..FFDC ; ID_Start
30FF ; ID_Continue
3105..312F ; ID_Continue
3131..318E ; ID_Continue
-31A0..31BA ; ID_Continue
+31A0..31BF ; ID_Continue
31F0..31FF ; ID_Continue
-3400..4DB5 ; ID_Continue
-4E00..9FEF ; ID_Continue
+3400..4DBF ; ID_Continue
+4E00..9FFC ; ID_Continue
A000..A014 ; ID_Continue
A015 ; ID_Continue
A016..A48C ; ID_Continue
@@ -7248,7 +7320,8 @@ A788 ; ID_Continue
A78B..A78E ; ID_Continue
A78F ; ID_Continue
A790..A7BF ; ID_Continue
-A7C2..A7C6 ; ID_Continue
+A7C2..A7CA ; ID_Continue
+A7F5..A7F6 ; ID_Continue
A7F7 ; ID_Continue
A7F8..A7F9 ; ID_Continue
A7FA ; ID_Continue
@@ -7262,6 +7335,7 @@ A80C..A822 ; ID_Continue
A823..A824 ; ID_Continue
A825..A826 ; ID_Continue
A827 ; ID_Continue
+A82C ; ID_Continue
A840..A873 ; ID_Continue
A880..A881 ; ID_Continue
A882..A8B3 ; ID_Continue
@@ -7344,7 +7418,8 @@ AB20..AB26 ; ID_Continue
AB28..AB2E ; ID_Continue
AB30..AB5A ; ID_Continue
AB5C..AB5F ; ID_Continue
-AB60..AB67 ; ID_Continue
+AB60..AB68 ; ID_Continue
+AB69 ; ID_Continue
AB70..ABBF ; ID_Continue
ABC0..ABE2 ; ID_Continue
ABE3..ABE4 ; ID_Continue
@@ -7465,10 +7540,14 @@ FFDA..FFDC ; ID_Continue
10D00..10D23 ; ID_Continue
10D24..10D27 ; ID_Continue
10D30..10D39 ; ID_Continue
+10E80..10EA9 ; ID_Continue
+10EAB..10EAC ; ID_Continue
+10EB0..10EB1 ; ID_Continue
10F00..10F1C ; ID_Continue
10F27 ; ID_Continue
10F30..10F45 ; ID_Continue
10F46..10F50 ; ID_Continue
+10FB0..10FC4 ; ID_Continue
10FE0..10FF6 ; ID_Continue
11000 ; ID_Continue
11001 ; ID_Continue
@@ -7493,6 +7572,7 @@ FFDA..FFDC ; ID_Continue
11136..1113F ; ID_Continue
11144 ; ID_Continue
11145..11146 ; ID_Continue
+11147 ; ID_Continue
11150..11172 ; ID_Continue
11173 ; ID_Continue
11176 ; ID_Continue
@@ -7504,6 +7584,8 @@ FFDA..FFDC ; ID_Continue
111BF..111C0 ; ID_Continue
111C1..111C4 ; ID_Continue
111C9..111CC ; ID_Continue
+111CE ; ID_Continue
+111CF ; ID_Continue
111D0..111D9 ; ID_Continue
111DA ; ID_Continue
111DC ; ID_Continue
@@ -7557,7 +7639,7 @@ FFDA..FFDC ; ID_Continue
11447..1144A ; ID_Continue
11450..11459 ; ID_Continue
1145E ; ID_Continue
-1145F ; ID_Continue
+1145F..11461 ; ID_Continue
11480..114AF ; ID_Continue
114B0..114B2 ; ID_Continue
114B3..114B8 ; ID_Continue
@@ -7612,7 +7694,22 @@ FFDA..FFDC ; ID_Continue
11839..1183A ; ID_Continue
118A0..118DF ; ID_Continue
118E0..118E9 ; ID_Continue
-118FF ; ID_Continue
+118FF..11906 ; ID_Continue
+11909 ; ID_Continue
+1190C..11913 ; ID_Continue
+11915..11916 ; ID_Continue
+11918..1192F ; ID_Continue
+11930..11935 ; ID_Continue
+11937..11938 ; ID_Continue
+1193B..1193C ; ID_Continue
+1193D ; ID_Continue
+1193E ; ID_Continue
+1193F ; ID_Continue
+11940 ; ID_Continue
+11941 ; ID_Continue
+11942 ; ID_Continue
+11943 ; ID_Continue
+11950..11959 ; ID_Continue
119A0..119A7 ; ID_Continue
119AA..119D0 ; ID_Continue
119D1..119D3 ; ID_Continue
@@ -7682,6 +7779,7 @@ FFDA..FFDC ; ID_Continue
11EE0..11EF2 ; ID_Continue
11EF3..11EF4 ; ID_Continue
11EF5..11EF6 ; ID_Continue
+11FB0 ; ID_Continue
12000..12399 ; ID_Continue
12400..1246E ; ID_Continue
12480..12543 ; ID_Continue
@@ -7707,8 +7805,11 @@ FFDA..FFDC ; ID_Continue
16F93..16F9F ; ID_Continue
16FE0..16FE1 ; ID_Continue
16FE3 ; ID_Continue
+16FE4 ; ID_Continue
+16FF0..16FF1 ; ID_Continue
17000..187F7 ; ID_Continue
-18800..18AF2 ; ID_Continue
+18800..18CD5 ; ID_Continue
+18D00..18D08 ; ID_Continue
1B000..1B11E ; ID_Continue
1B150..1B152 ; ID_Continue
1B164..1B167 ; ID_Continue
@@ -7814,15 +7915,17 @@ FFDA..FFDC ; ID_Continue
1EEA1..1EEA3 ; ID_Continue
1EEA5..1EEA9 ; ID_Continue
1EEAB..1EEBB ; ID_Continue
-20000..2A6D6 ; ID_Continue
+1FBF0..1FBF9 ; ID_Continue
+20000..2A6DD ; ID_Continue
2A700..2B734 ; ID_Continue
2B740..2B81D ; ID_Continue
2B820..2CEA1 ; ID_Continue
2CEB0..2EBE0 ; ID_Continue
2F800..2FA1D ; ID_Continue
+30000..3134A ; ID_Continue
E0100..E01EF ; ID_Continue
-# Total code points: 128789
+# Total code points: 134434
# ================================================
@@ -7893,7 +7996,7 @@ E0100..E01EF ; ID_Continue
0840..0858 ; XID_Start
0860..086A ; XID_Start
08A0..08B4 ; XID_Start
-08B6..08BD ; XID_Start
+08B6..08C7 ; XID_Start
0904..0939 ; XID_Start
093D ; XID_Start
0950 ; XID_Start
@@ -7970,7 +8073,7 @@ E0100..E01EF ; ID_Continue
0CDE ; XID_Start
0CE0..0CE1 ; XID_Start
0CF1..0CF2 ; XID_Start
-0D05..0D0C ; XID_Start
+0D04..0D0C ; XID_Start
0D0E..0D10 ; XID_Start
0D12..0D3A ; XID_Start
0D3D ; XID_Start
@@ -8168,10 +8271,10 @@ E0100..E01EF ; ID_Continue
30FF ; XID_Start
3105..312F ; XID_Start
3131..318E ; XID_Start
-31A0..31BA ; XID_Start
+31A0..31BF ; XID_Start
31F0..31FF ; XID_Start
-3400..4DB5 ; XID_Start
-4E00..9FEF ; XID_Start
+3400..4DBF ; XID_Start
+4E00..9FFC ; XID_Start
A000..A014 ; XID_Start
A015 ; XID_Start
A016..A48C ; XID_Start
@@ -8196,7 +8299,8 @@ A788 ; XID_Start
A78B..A78E ; XID_Start
A78F ; XID_Start
A790..A7BF ; XID_Start
-A7C2..A7C6 ; XID_Start
+A7C2..A7CA ; XID_Start
+A7F5..A7F6 ; XID_Start
A7F7 ; XID_Start
A7F8..A7F9 ; XID_Start
A7FA ; XID_Start
@@ -8243,7 +8347,8 @@ AB20..AB26 ; XID_Start
AB28..AB2E ; XID_Start
AB30..AB5A ; XID_Start
AB5C..AB5F ; XID_Start
-AB60..AB67 ; XID_Start
+AB60..AB68 ; XID_Start
+AB69 ; XID_Start
AB70..ABBF ; XID_Start
ABC0..ABE2 ; XID_Start
AC00..D7A3 ; XID_Start
@@ -8342,15 +8447,19 @@ FFDA..FFDC ; XID_Start
10C80..10CB2 ; XID_Start
10CC0..10CF2 ; XID_Start
10D00..10D23 ; XID_Start
+10E80..10EA9 ; XID_Start
+10EB0..10EB1 ; XID_Start
10F00..10F1C ; XID_Start
10F27 ; XID_Start
10F30..10F45 ; XID_Start
+10FB0..10FC4 ; XID_Start
10FE0..10FF6 ; XID_Start
11003..11037 ; XID_Start
11083..110AF ; XID_Start
110D0..110E8 ; XID_Start
11103..11126 ; XID_Start
11144 ; XID_Start
+11147 ; XID_Start
11150..11172 ; XID_Start
11176 ; XID_Start
11183..111B2 ; XID_Start
@@ -8376,7 +8485,7 @@ FFDA..FFDC ; XID_Start
1135D..11361 ; XID_Start
11400..11434 ; XID_Start
11447..1144A ; XID_Start
-1145F ; XID_Start
+1145F..11461 ; XID_Start
11480..114AF ; XID_Start
114C4..114C5 ; XID_Start
114C7 ; XID_Start
@@ -8389,7 +8498,13 @@ FFDA..FFDC ; XID_Start
11700..1171A ; XID_Start
11800..1182B ; XID_Start
118A0..118DF ; XID_Start
-118FF ; XID_Start
+118FF..11906 ; XID_Start
+11909 ; XID_Start
+1190C..11913 ; XID_Start
+11915..11916 ; XID_Start
+11918..1192F ; XID_Start
+1193F ; XID_Start
+11941 ; XID_Start
119A0..119A7 ; XID_Start
119AA..119D0 ; XID_Start
119E1 ; XID_Start
@@ -8414,6 +8529,7 @@ FFDA..FFDC ; XID_Start
11D6A..11D89 ; XID_Start
11D98 ; XID_Start
11EE0..11EF2 ; XID_Start
+11FB0 ; XID_Start
12000..12399 ; XID_Start
12400..1246E ; XID_Start
12480..12543 ; XID_Start
@@ -8433,7 +8549,8 @@ FFDA..FFDC ; XID_Start
16FE0..16FE1 ; XID_Start
16FE3 ; XID_Start
17000..187F7 ; XID_Start
-18800..18AF2 ; XID_Start
+18800..18CD5 ; XID_Start
+18D00..18D08 ; XID_Start
1B000..1B11E ; XID_Start
1B150..1B152 ; XID_Start
1B164..1B167 ; XID_Start
@@ -8512,14 +8629,15 @@ FFDA..FFDC ; XID_Start
1EEA1..1EEA3 ; XID_Start
1EEA5..1EEA9 ; XID_Start
1EEAB..1EEBB ; XID_Start
-20000..2A6D6 ; XID_Start
+20000..2A6DD ; XID_Start
2A700..2B734 ; XID_Start
2B740..2B81D ; XID_Start
2B820..2CEA1 ; XID_Start
2CEB0..2EBE0 ; XID_Start
2F800..2FA1D ; XID_Start
+30000..3134A ; XID_Start
-# Total code points: 125861
+# Total code points: 131459
# ================================================
@@ -8621,7 +8739,7 @@ FFDA..FFDC ; XID_Start
0859..085B ; XID_Continue
0860..086A ; XID_Continue
08A0..08B4 ; XID_Continue
-08B6..08BD ; XID_Continue
+08B6..08C7 ; XID_Continue
08D3..08E1 ; XID_Continue
08E3..0902 ; XID_Continue
0903 ; XID_Continue
@@ -8726,7 +8844,7 @@ FFDA..FFDC ; XID_Start
0B47..0B48 ; XID_Continue
0B4B..0B4C ; XID_Continue
0B4D ; XID_Continue
-0B56 ; XID_Continue
+0B55..0B56 ; XID_Continue
0B57 ; XID_Continue
0B5C..0B5D ; XID_Continue
0B5F..0B61 ; XID_Continue
@@ -8795,7 +8913,7 @@ FFDA..FFDC ; XID_Start
0CF1..0CF2 ; XID_Continue
0D00..0D01 ; XID_Continue
0D02..0D03 ; XID_Continue
-0D05..0D0C ; XID_Continue
+0D04..0D0C ; XID_Continue
0D0E..0D10 ; XID_Continue
0D12..0D3A ; XID_Continue
0D3B..0D3C ; XID_Continue
@@ -8812,6 +8930,7 @@ FFDA..FFDC ; XID_Start
0D62..0D63 ; XID_Continue
0D66..0D6F ; XID_Continue
0D7A..0D7F ; XID_Continue
+0D81 ; XID_Continue
0D82..0D83 ; XID_Continue
0D85..0D96 ; XID_Continue
0D9A..0DB1 ; XID_Continue
@@ -9001,6 +9120,7 @@ FFDA..FFDC ; XID_Start
1A90..1A99 ; XID_Continue
1AA7 ; XID_Continue
1AB0..1ABD ; XID_Continue
+1ABF..1AC0 ; XID_Continue
1B00..1B03 ; XID_Continue
1B04 ; XID_Continue
1B05..1B33 ; XID_Continue
@@ -9158,10 +9278,10 @@ FFDA..FFDC ; XID_Start
30FF ; XID_Continue
3105..312F ; XID_Continue
3131..318E ; XID_Continue
-31A0..31BA ; XID_Continue
+31A0..31BF ; XID_Continue
31F0..31FF ; XID_Continue
-3400..4DB5 ; XID_Continue
-4E00..9FEF ; XID_Continue
+3400..4DBF ; XID_Continue
+4E00..9FFC ; XID_Continue
A000..A014 ; XID_Continue
A015 ; XID_Continue
A016..A48C ; XID_Continue
@@ -9191,7 +9311,8 @@ A788 ; XID_Continue
A78B..A78E ; XID_Continue
A78F ; XID_Continue
A790..A7BF ; XID_Continue
-A7C2..A7C6 ; XID_Continue
+A7C2..A7CA ; XID_Continue
+A7F5..A7F6 ; XID_Continue
A7F7 ; XID_Continue
A7F8..A7F9 ; XID_Continue
A7FA ; XID_Continue
@@ -9205,6 +9326,7 @@ A80C..A822 ; XID_Continue
A823..A824 ; XID_Continue
A825..A826 ; XID_Continue
A827 ; XID_Continue
+A82C ; XID_Continue
A840..A873 ; XID_Continue
A880..A881 ; XID_Continue
A882..A8B3 ; XID_Continue
@@ -9287,7 +9409,8 @@ AB20..AB26 ; XID_Continue
AB28..AB2E ; XID_Continue
AB30..AB5A ; XID_Continue
AB5C..AB5F ; XID_Continue
-AB60..AB67 ; XID_Continue
+AB60..AB68 ; XID_Continue
+AB69 ; XID_Continue
AB70..ABBF ; XID_Continue
ABC0..ABE2 ; XID_Continue
ABE3..ABE4 ; XID_Continue
@@ -9414,10 +9537,14 @@ FFDA..FFDC ; XID_Continue
10D00..10D23 ; XID_Continue
10D24..10D27 ; XID_Continue
10D30..10D39 ; XID_Continue
+10E80..10EA9 ; XID_Continue
+10EAB..10EAC ; XID_Continue
+10EB0..10EB1 ; XID_Continue
10F00..10F1C ; XID_Continue
10F27 ; XID_Continue
10F30..10F45 ; XID_Continue
10F46..10F50 ; XID_Continue
+10FB0..10FC4 ; XID_Continue
10FE0..10FF6 ; XID_Continue
11000 ; XID_Continue
11001 ; XID_Continue
@@ -9442,6 +9569,7 @@ FFDA..FFDC ; XID_Continue
11136..1113F ; XID_Continue
11144 ; XID_Continue
11145..11146 ; XID_Continue
+11147 ; XID_Continue
11150..11172 ; XID_Continue
11173 ; XID_Continue
11176 ; XID_Continue
@@ -9453,6 +9581,8 @@ FFDA..FFDC ; XID_Continue
111BF..111C0 ; XID_Continue
111C1..111C4 ; XID_Continue
111C9..111CC ; XID_Continue
+111CE ; XID_Continue
+111CF ; XID_Continue
111D0..111D9 ; XID_Continue
111DA ; XID_Continue
111DC ; XID_Continue
@@ -9506,7 +9636,7 @@ FFDA..FFDC ; XID_Continue
11447..1144A ; XID_Continue
11450..11459 ; XID_Continue
1145E ; XID_Continue
-1145F ; XID_Continue
+1145F..11461 ; XID_Continue
11480..114AF ; XID_Continue
114B0..114B2 ; XID_Continue
114B3..114B8 ; XID_Continue
@@ -9561,7 +9691,22 @@ FFDA..FFDC ; XID_Continue
11839..1183A ; XID_Continue
118A0..118DF ; XID_Continue
118E0..118E9 ; XID_Continue
-118FF ; XID_Continue
+118FF..11906 ; XID_Continue
+11909 ; XID_Continue
+1190C..11913 ; XID_Continue
+11915..11916 ; XID_Continue
+11918..1192F ; XID_Continue
+11930..11935 ; XID_Continue
+11937..11938 ; XID_Continue
+1193B..1193C ; XID_Continue
+1193D ; XID_Continue
+1193E ; XID_Continue
+1193F ; XID_Continue
+11940 ; XID_Continue
+11941 ; XID_Continue
+11942 ; XID_Continue
+11943 ; XID_Continue
+11950..11959 ; XID_Continue
119A0..119A7 ; XID_Continue
119AA..119D0 ; XID_Continue
119D1..119D3 ; XID_Continue
@@ -9631,6 +9776,7 @@ FFDA..FFDC ; XID_Continue
11EE0..11EF2 ; XID_Continue
11EF3..11EF4 ; XID_Continue
11EF5..11EF6 ; XID_Continue
+11FB0 ; XID_Continue
12000..12399 ; XID_Continue
12400..1246E ; XID_Continue
12480..12543 ; XID_Continue
@@ -9656,8 +9802,11 @@ FFDA..FFDC ; XID_Continue
16F93..16F9F ; XID_Continue
16FE0..16FE1 ; XID_Continue
16FE3 ; XID_Continue
+16FE4 ; XID_Continue
+16FF0..16FF1 ; XID_Continue
17000..187F7 ; XID_Continue
-18800..18AF2 ; XID_Continue
+18800..18CD5 ; XID_Continue
+18D00..18D08 ; XID_Continue
1B000..1B11E ; XID_Continue
1B150..1B152 ; XID_Continue
1B164..1B167 ; XID_Continue
@@ -9763,15 +9912,17 @@ FFDA..FFDC ; XID_Continue
1EEA1..1EEA3 ; XID_Continue
1EEA5..1EEA9 ; XID_Continue
1EEAB..1EEBB ; XID_Continue
-20000..2A6D6 ; XID_Continue
+1FBF0..1FBF9 ; XID_Continue
+20000..2A6DD ; XID_Continue
2A700..2B734 ; XID_Continue
2B740..2B81D ; XID_Continue
2B820..2CEA1 ; XID_Continue
2CEB0..2EBE0 ; XID_Continue
2F800..2FA1D ; XID_Continue
+30000..3134A ; XID_Continue
E0100..E01EF ; XID_Continue
-# Total code points: 128770
+# Total code points: 134415
# ================================================
@@ -9883,7 +10034,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
0B3F ; Grapheme_Extend
0B41..0B44 ; Grapheme_Extend
0B4D ; Grapheme_Extend
-0B56 ; Grapheme_Extend
+0B55..0B56 ; Grapheme_Extend
0B57 ; Grapheme_Extend
0B62..0B63 ; Grapheme_Extend
0B82 ; Grapheme_Extend
@@ -9913,6 +10064,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
0D4D ; Grapheme_Extend
0D57 ; Grapheme_Extend
0D62..0D63 ; Grapheme_Extend
+0D81 ; Grapheme_Extend
0DCA ; Grapheme_Extend
0DCF ; Grapheme_Extend
0DD2..0DD4 ; Grapheme_Extend
@@ -9973,6 +10125,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
1A7F ; Grapheme_Extend
1AB0..1ABD ; Grapheme_Extend
1ABE ; Grapheme_Extend
+1ABF..1AC0 ; Grapheme_Extend
1B00..1B03 ; Grapheme_Extend
1B34 ; Grapheme_Extend
1B35 ; Grapheme_Extend
@@ -10019,6 +10172,7 @@ A802 ; Grapheme_Extend
A806 ; Grapheme_Extend
A80B ; Grapheme_Extend
A825..A826 ; Grapheme_Extend
+A82C ; Grapheme_Extend
A8C4..A8C5 ; Grapheme_Extend
A8E0..A8F1 ; Grapheme_Extend
A8FF ; Grapheme_Extend
@@ -10059,6 +10213,7 @@ FF9E..FF9F ; Grapheme_Extend
10A3F ; Grapheme_Extend
10AE5..10AE6 ; Grapheme_Extend
10D24..10D27 ; Grapheme_Extend
+10EAB..10EAC ; Grapheme_Extend
10F46..10F50 ; Grapheme_Extend
11001 ; Grapheme_Extend
11038..11046 ; Grapheme_Extend
@@ -10072,6 +10227,7 @@ FF9E..FF9F ; Grapheme_Extend
11180..11181 ; Grapheme_Extend
111B6..111BE ; Grapheme_Extend
111C9..111CC ; Grapheme_Extend
+111CF ; Grapheme_Extend
1122F..11231 ; Grapheme_Extend
11234 ; Grapheme_Extend
11236..11237 ; Grapheme_Extend
@@ -10112,6 +10268,10 @@ FF9E..FF9F ; Grapheme_Extend
11727..1172B ; Grapheme_Extend
1182F..11837 ; Grapheme_Extend
11839..1183A ; Grapheme_Extend
+11930 ; Grapheme_Extend
+1193B..1193C ; Grapheme_Extend
+1193E ; Grapheme_Extend
+11943 ; Grapheme_Extend
119D4..119D7 ; Grapheme_Extend
119DA..119DB ; Grapheme_Extend
119E0 ; Grapheme_Extend
@@ -10143,6 +10303,7 @@ FF9E..FF9F ; Grapheme_Extend
16B30..16B36 ; Grapheme_Extend
16F4F ; Grapheme_Extend
16F8F..16F92 ; Grapheme_Extend
+16FE4 ; Grapheme_Extend
1BC9D..1BC9E ; Grapheme_Extend
1D165 ; Grapheme_Extend
1D167..1D169 ; Grapheme_Extend
@@ -10169,7 +10330,7 @@ FF9E..FF9F ; Grapheme_Extend
E0020..E007F ; Grapheme_Extend
E0100..E01EF ; Grapheme_Extend
-# Total code points: 1965
+# Total code points: 1979
# ================================================
@@ -10329,7 +10490,7 @@ E0100..E01EF ; Grapheme_Extend
085E ; Grapheme_Base
0860..086A ; Grapheme_Base
08A0..08B4 ; Grapheme_Base
-08B6..08BD ; Grapheme_Base
+08B6..08C7 ; Grapheme_Base
0903 ; Grapheme_Base
0904..0939 ; Grapheme_Base
093B ; Grapheme_Base
@@ -10466,7 +10627,7 @@ E0100..E01EF ; Grapheme_Extend
0CE6..0CEF ; Grapheme_Base
0CF1..0CF2 ; Grapheme_Base
0D02..0D03 ; Grapheme_Base
-0D05..0D0C ; Grapheme_Base
+0D04..0D0C ; Grapheme_Base
0D0E..0D10 ; Grapheme_Base
0D12..0D3A ; Grapheme_Base
0D3D ; Grapheme_Base
@@ -10937,7 +11098,7 @@ E0100..E01EF ; Grapheme_Extend
2B47..2B4C ; Grapheme_Base
2B4D..2B73 ; Grapheme_Base
2B76..2B95 ; Grapheme_Base
-2B98..2BFF ; Grapheme_Base
+2B97..2BFF ; Grapheme_Base
2C00..2C2E ; Grapheme_Base
2C30..2C5E ; Grapheme_Base
2C60..2C7B ; Grapheme_Base
@@ -11002,6 +11163,8 @@ E0100..E01EF ; Grapheme_Extend
2E41 ; Grapheme_Base
2E42 ; Grapheme_Base
2E43..2E4F ; Grapheme_Base
+2E50..2E51 ; Grapheme_Base
+2E52 ; Grapheme_Base
2E80..2E99 ; Grapheme_Base
2E9B..2EF3 ; Grapheme_Base
2F00..2FD5 ; Grapheme_Base
@@ -11058,7 +11221,7 @@ E0100..E01EF ; Grapheme_Extend
3190..3191 ; Grapheme_Base
3192..3195 ; Grapheme_Base
3196..319F ; Grapheme_Base
-31A0..31BA ; Grapheme_Base
+31A0..31BF ; Grapheme_Base
31C0..31E3 ; Grapheme_Base
31F0..31FF ; Grapheme_Base
3200..321E ; Grapheme_Base
@@ -11072,9 +11235,9 @@ E0100..E01EF ; Grapheme_Extend
328A..32B0 ; Grapheme_Base
32B1..32BF ; Grapheme_Base
32C0..33FF ; Grapheme_Base
-3400..4DB5 ; Grapheme_Base
+3400..4DBF ; Grapheme_Base
4DC0..4DFF ; Grapheme_Base
-4E00..9FEF ; Grapheme_Base
+4E00..9FFC ; Grapheme_Base
A000..A014 ; Grapheme_Base
A015 ; Grapheme_Base
A016..A48C ; Grapheme_Base
@@ -11109,7 +11272,8 @@ A789..A78A ; Grapheme_Base
A78B..A78E ; Grapheme_Base
A78F ; Grapheme_Base
A790..A7BF ; Grapheme_Base
-A7C2..A7C6 ; Grapheme_Base
+A7C2..A7CA ; Grapheme_Base
+A7F5..A7F6 ; Grapheme_Base
A7F7 ; Grapheme_Base
A7F8..A7F9 ; Grapheme_Base
A7FA ; Grapheme_Base
@@ -11196,7 +11360,9 @@ AB28..AB2E ; Grapheme_Base
AB30..AB5A ; Grapheme_Base
AB5B ; Grapheme_Base
AB5C..AB5F ; Grapheme_Base
-AB60..AB67 ; Grapheme_Base
+AB60..AB68 ; Grapheme_Base
+AB69 ; Grapheme_Base
+AB6A..AB6B ; Grapheme_Base
AB70..ABBF ; Grapheme_Base
ABC0..ABE2 ; Grapheme_Base
ABE3..ABE4 ; Grapheme_Base
@@ -11340,7 +11506,7 @@ FFFC..FFFD ; Grapheme_Base
10179..10189 ; Grapheme_Base
1018A..1018B ; Grapheme_Base
1018C..1018E ; Grapheme_Base
-10190..1019B ; Grapheme_Base
+10190..1019C ; Grapheme_Base
101A0 ; Grapheme_Base
101D0..101FC ; Grapheme_Base
10280..1029C ; Grapheme_Base
@@ -11428,12 +11594,17 @@ FFFC..FFFD ; Grapheme_Base
10D00..10D23 ; Grapheme_Base
10D30..10D39 ; Grapheme_Base
10E60..10E7E ; Grapheme_Base
+10E80..10EA9 ; Grapheme_Base
+10EAD ; Grapheme_Base
+10EB0..10EB1 ; Grapheme_Base
10F00..10F1C ; Grapheme_Base
10F1D..10F26 ; Grapheme_Base
10F27 ; Grapheme_Base
10F30..10F45 ; Grapheme_Base
10F51..10F54 ; Grapheme_Base
10F55..10F59 ; Grapheme_Base
+10FB0..10FC4 ; Grapheme_Base
+10FC5..10FCB ; Grapheme_Base
10FE0..10FF6 ; Grapheme_Base
11000 ; Grapheme_Base
11002 ; Grapheme_Base
@@ -11455,6 +11626,7 @@ FFFC..FFFD ; Grapheme_Base
11140..11143 ; Grapheme_Base
11144 ; Grapheme_Base
11145..11146 ; Grapheme_Base
+11147 ; Grapheme_Base
11150..11172 ; Grapheme_Base
11174..11175 ; Grapheme_Base
11176 ; Grapheme_Base
@@ -11465,6 +11637,7 @@ FFFC..FFFD ; Grapheme_Base
111C1..111C4 ; Grapheme_Base
111C5..111C8 ; Grapheme_Base
111CD ; Grapheme_Base
+111CE ; Grapheme_Base
111D0..111D9 ; Grapheme_Base
111DA ; Grapheme_Base
111DB ; Grapheme_Base
@@ -11508,9 +11681,9 @@ FFFC..FFFD ; Grapheme_Base
11447..1144A ; Grapheme_Base
1144B..1144F ; Grapheme_Base
11450..11459 ; Grapheme_Base
-1145B ; Grapheme_Base
+1145A..1145B ; Grapheme_Base
1145D ; Grapheme_Base
-1145F ; Grapheme_Base
+1145F..11461 ; Grapheme_Base
11480..114AF ; Grapheme_Base
114B1..114B2 ; Grapheme_Base
114B9 ; Grapheme_Base
@@ -11555,7 +11728,20 @@ FFFC..FFFD ; Grapheme_Base
118A0..118DF ; Grapheme_Base
118E0..118E9 ; Grapheme_Base
118EA..118F2 ; Grapheme_Base
-118FF ; Grapheme_Base
+118FF..11906 ; Grapheme_Base
+11909 ; Grapheme_Base
+1190C..11913 ; Grapheme_Base
+11915..11916 ; Grapheme_Base
+11918..1192F ; Grapheme_Base
+11931..11935 ; Grapheme_Base
+11937..11938 ; Grapheme_Base
+1193D ; Grapheme_Base
+1193F ; Grapheme_Base
+11940 ; Grapheme_Base
+11941 ; Grapheme_Base
+11942 ; Grapheme_Base
+11944..11946 ; Grapheme_Base
+11950..11959 ; Grapheme_Base
119A0..119A7 ; Grapheme_Base
119AA..119D0 ; Grapheme_Base
119D1..119D3 ; Grapheme_Base
@@ -11606,6 +11792,7 @@ FFFC..FFFD ; Grapheme_Base
11EE0..11EF2 ; Grapheme_Base
11EF5..11EF6 ; Grapheme_Base
11EF7..11EF8 ; Grapheme_Base
+11FB0 ; Grapheme_Base
11FC0..11FD4 ; Grapheme_Base
11FD5..11FDC ; Grapheme_Base
11FDD..11FE0 ; Grapheme_Base
@@ -11643,8 +11830,10 @@ FFFC..FFFD ; Grapheme_Base
16FE0..16FE1 ; Grapheme_Base
16FE2 ; Grapheme_Base
16FE3 ; Grapheme_Base
+16FF0..16FF1 ; Grapheme_Base
17000..187F7 ; Grapheme_Base
-18800..18AF2 ; Grapheme_Base
+18800..18CD5 ; Grapheme_Base
+18D00..18D08 ; Grapheme_Base
1B000..1B11E ; Grapheme_Base
1B150..1B152 ; Grapheme_Base
1B164..1B167 ; Grapheme_Base
@@ -11779,8 +11968,7 @@ FFFC..FFFD ; Grapheme_Base
1F0C1..1F0CF ; Grapheme_Base
1F0D1..1F0F5 ; Grapheme_Base
1F100..1F10C ; Grapheme_Base
-1F110..1F16C ; Grapheme_Base
-1F170..1F1AC ; Grapheme_Base
+1F10D..1F1AD ; Grapheme_Base
1F1E6..1F202 ; Grapheme_Base
1F210..1F23B ; Grapheme_Base
1F240..1F248 ; Grapheme_Base
@@ -11788,9 +11976,9 @@ FFFC..FFFD ; Grapheme_Base
1F260..1F265 ; Grapheme_Base
1F300..1F3FA ; Grapheme_Base
1F3FB..1F3FF ; Grapheme_Base
-1F400..1F6D5 ; Grapheme_Base
+1F400..1F6D7 ; Grapheme_Base
1F6E0..1F6EC ; Grapheme_Base
-1F6F0..1F6FA ; Grapheme_Base
+1F6F0..1F6FC ; Grapheme_Base
1F700..1F773 ; Grapheme_Base
1F780..1F7D8 ; Grapheme_Base
1F7E0..1F7EB ; Grapheme_Base
@@ -11799,26 +11987,30 @@ FFFC..FFFD ; Grapheme_Base
1F850..1F859 ; Grapheme_Base
1F860..1F887 ; Grapheme_Base
1F890..1F8AD ; Grapheme_Base
-1F900..1F90B ; Grapheme_Base
-1F90D..1F971 ; Grapheme_Base
-1F973..1F976 ; Grapheme_Base
-1F97A..1F9A2 ; Grapheme_Base
-1F9A5..1F9AA ; Grapheme_Base
-1F9AE..1F9CA ; Grapheme_Base
+1F8B0..1F8B1 ; Grapheme_Base
+1F900..1F978 ; Grapheme_Base
+1F97A..1F9CB ; Grapheme_Base
1F9CD..1FA53 ; Grapheme_Base
1FA60..1FA6D ; Grapheme_Base
-1FA70..1FA73 ; Grapheme_Base
+1FA70..1FA74 ; Grapheme_Base
1FA78..1FA7A ; Grapheme_Base
-1FA80..1FA82 ; Grapheme_Base
-1FA90..1FA95 ; Grapheme_Base
-20000..2A6D6 ; Grapheme_Base
+1FA80..1FA86 ; Grapheme_Base
+1FA90..1FAA8 ; Grapheme_Base
+1FAB0..1FAB6 ; Grapheme_Base
+1FAC0..1FAC2 ; Grapheme_Base
+1FAD0..1FAD6 ; Grapheme_Base
+1FB00..1FB92 ; Grapheme_Base
+1FB94..1FBCA ; Grapheme_Base
+1FBF0..1FBF9 ; Grapheme_Base
+20000..2A6DD ; Grapheme_Base
2A700..2B734 ; Grapheme_Base
2B740..2B81D ; Grapheme_Base
2B820..2CEA1 ; Grapheme_Base
2CEB0..2EBE0 ; Grapheme_Base
2F800..2FA1D ; Grapheme_Base
+30000..3134A ; Grapheme_Base
-# Total code points: 135898
+# Total code points: 141814
# ================================================
@@ -11851,6 +12043,7 @@ FFFC..FFFD ; Grapheme_Base
1BF2..1BF3 ; Grapheme_Link
2D7F ; Grapheme_Link
A806 ; Grapheme_Link
+A82C ; Grapheme_Link
A8C4 ; Grapheme_Link
A953 ; Grapheme_Link
A9C0 ; Grapheme_Link
@@ -11872,6 +12065,8 @@ ABED ; Grapheme_Link
116B6 ; Grapheme_Link
1172B ; Grapheme_Link
11839 ; Grapheme_Link
+1193D ; Grapheme_Link
+1193E ; Grapheme_Link
119E0 ; Grapheme_Link
11A34 ; Grapheme_Link
11A47 ; Grapheme_Link
@@ -11880,6 +12075,6 @@ ABED ; Grapheme_Link
11D44..11D45 ; Grapheme_Link
11D97 ; Grapheme_Link
-# Total code points: 58
+# Total code points: 61
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
index 1c75ebd63fd..a4bfa99a8cb 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
@@ -1,5 +1,5 @@
-# DerivedNormalizationProps-12.1.0.txt
-# Date: 2019-04-01, 09:10:23 GMT
+# DerivedNormalizationProps-13.0.0.txt
+# Date: 2019-09-08, 23:31:08 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -986,11 +986,12 @@ FB46..FB4E ; NFD_QC; N
114BB..114BC ; NFD_QC; N
114BE ; NFD_QC; N
115BA..115BB ; NFD_QC; N
+11938 ; NFD_QC; N
1D15E..1D164 ; NFD_QC; N
1D1BB..1D1C0 ; NFD_QC; N
2F800..2FA1D ; NFD_QC; N
-# Total code points: 13232
+# Total code points: 13233
# ================================================
@@ -1128,8 +1129,9 @@ FB46..FB4E ; NFC_QC; N
114BA ; NFC_QC; M
114BD ; NFC_QC; M
115AF ; NFC_QC; M
+11930 ; NFC_QC; M
-# Total code points: 110
+# Total code points: 111
# ================================================
@@ -1469,6 +1471,7 @@ A69C..A69D ; NFKD_QC; N
A770 ; NFKD_QC; N
A7F8..A7F9 ; NFKD_QC; N
AB5C..AB5F ; NFKD_QC; N
+AB69 ; NFKD_QC; N
AC00..D7A3 ; NFKD_QC; N
F900..FA0D ; NFKD_QC; N
FA10 ; NFKD_QC; N
@@ -1598,6 +1601,7 @@ FFED..FFEE ; NFKD_QC; N
114BB..114BC ; NFKD_QC; N
114BE ; NFKD_QC; N
115BA..115BB ; NFKD_QC; N
+11938 ; NFKD_QC; N
1D15E..1D164 ; NFKD_QC; N
1D1BB..1D1C0 ; NFKD_QC; N
1D400..1D454 ; NFKD_QC; N
@@ -1683,9 +1687,10 @@ FFED..FFEE ; NFKD_QC; N
1F210..1F23B ; NFKD_QC; N
1F240..1F248 ; NFKD_QC; N
1F250..1F251 ; NFKD_QC; N
+1FBF0..1FBF9 ; NFKD_QC; N
2F800..2FA1D ; NFKD_QC; N
-# Total code points: 16896
+# Total code points: 16908
# ================================================
@@ -1880,6 +1885,7 @@ A69C..A69D ; NFKC_QC; N
A770 ; NFKC_QC; N
A7F8..A7F9 ; NFKC_QC; N
AB5C..AB5F ; NFKC_QC; N
+AB69 ; NFKC_QC; N
F900..FA0D ; NFKC_QC; N
FA10 ; NFKC_QC; N
FA12 ; NFKC_QC; N
@@ -2085,9 +2091,10 @@ FFED..FFEE ; NFKC_QC; N
1F210..1F23B ; NFKC_QC; N
1F240..1F248 ; NFKC_QC; N
1F250..1F251 ; NFKC_QC; N
+1FBF0..1FBF9 ; NFKC_QC; N
2F800..2FA1D ; NFKC_QC; N
-# Total code points: 4796
+# Total code points: 4807
# ================================================
@@ -2135,8 +2142,9 @@ FFED..FFEE ; NFKC_QC; N
114BA ; NFKC_QC; M
114BD ; NFKC_QC; M
115AF ; NFKC_QC; M
+11930 ; NFKC_QC; M
-# Total code points: 110
+# Total code points: 111
# ================================================
@@ -2366,10 +2374,11 @@ FB46..FB4E ; Expands_On_NFD
114BB..114BC ; Expands_On_NFD
114BE ; Expands_On_NFD
115BA..115BB ; Expands_On_NFD
+11938 ; Expands_On_NFD
1D15E..1D164 ; Expands_On_NFD
1D1BB..1D1C0 ; Expands_On_NFD
-# Total code points: 12215
+# Total code points: 12216
# ================================================
@@ -2719,6 +2728,7 @@ FFE3 ; Expands_On_NFKD
114BB..114BC ; Expands_On_NFKD
114BE ; Expands_On_NFKD
115BA..115BB ; Expands_On_NFKD
+11938 ; Expands_On_NFKD
1D15E..1D164 ; Expands_On_NFKD
1D1BB..1D1C0 ; Expands_On_NFKD
1F100..1F10A ; Expands_On_NFKD
@@ -2731,7 +2741,7 @@ FFE3 ; Expands_On_NFKD
1F213 ; Expands_On_NFKD
1F240..1F248 ; Expands_On_NFKD
-# Total code points: 13389
+# Total code points: 13390
# ================================================
@@ -5333,12 +5343,16 @@ A7C2 ; NFKC_CF; A7C3
A7C4 ; NFKC_CF; A794
A7C5 ; NFKC_CF; 0282
A7C6 ; NFKC_CF; 1D8E
+A7C7 ; NFKC_CF; A7C8
+A7C9 ; NFKC_CF; A7CA
+A7F5 ; NFKC_CF; A7F6
A7F8 ; NFKC_CF; 0127
A7F9 ; NFKC_CF; 0153
AB5C ; NFKC_CF; A727
AB5D ; NFKC_CF; AB37
AB5E ; NFKC_CF; 026B
AB5F ; NFKC_CF; AB52
+AB69 ; NFKC_CF; 028D
AB70 ; NFKC_CF; 13A0
AB71 ; NFKC_CF; 13A1
AB72 ; NFKC_CF; 13A2
@@ -8262,6 +8276,16 @@ FFF0..FFF8 ; NFKC_CF;
1F248 ; NFKC_CF; 3014 6557 3015
1F250 ; NFKC_CF; 5F97
1F251 ; NFKC_CF; 53EF
+1FBF0 ; NFKC_CF; 0030
+1FBF1 ; NFKC_CF; 0031
+1FBF2 ; NFKC_CF; 0032
+1FBF3 ; NFKC_CF; 0033
+1FBF4 ; NFKC_CF; 0034
+1FBF5 ; NFKC_CF; 0035
+1FBF6 ; NFKC_CF; 0036
+1FBF7 ; NFKC_CF; 0037
+1FBF8 ; NFKC_CF; 0038
+1FBF9 ; NFKC_CF; 0039
2F800 ; NFKC_CF; 4E3D
2F801 ; NFKC_CF; 4E38
2F802 ; NFKC_CF; 4E41
@@ -8802,7 +8826,7 @@ E0080..E00FF ; NFKC_CF;
E0100..E01EF ; NFKC_CF;
E01F0..E0FFF ; NFKC_CF;
-# Total code points: 10315
+# Total code points: 10329
# ================================================
@@ -9567,9 +9591,12 @@ A7BA ; Changes_When_NFKC_Casefolded
A7BC ; Changes_When_NFKC_Casefolded
A7BE ; Changes_When_NFKC_Casefolded
A7C2 ; Changes_When_NFKC_Casefolded
-A7C4..A7C6 ; Changes_When_NFKC_Casefolded
+A7C4..A7C7 ; Changes_When_NFKC_Casefolded
+A7C9 ; Changes_When_NFKC_Casefolded
+A7F5 ; Changes_When_NFKC_Casefolded
A7F8..A7F9 ; Changes_When_NFKC_Casefolded
AB5C..AB5F ; Changes_When_NFKC_Casefolded
+AB69 ; Changes_When_NFKC_Casefolded
AB70..ABBF ; Changes_When_NFKC_Casefolded
F900..FA0D ; Changes_When_NFKC_Casefolded
FA10 ; Changes_When_NFKC_Casefolded
@@ -9787,6 +9814,7 @@ FFF0..FFF8 ; Changes_When_NFKC_Casefolded
1F210..1F23B ; Changes_When_NFKC_Casefolded
1F240..1F248 ; Changes_When_NFKC_Casefolded
1F250..1F251 ; Changes_When_NFKC_Casefolded
+1FBF0..1FBF9 ; Changes_When_NFKC_Casefolded
2F800..2FA1D ; Changes_When_NFKC_Casefolded
E0000 ; Changes_When_NFKC_Casefolded
E0001 ; Changes_When_NFKC_Casefolded
@@ -9796,6 +9824,6 @@ E0080..E00FF ; Changes_When_NFKC_Casefolded
E0100..E01EF ; Changes_When_NFKC_Casefolded
E01F0..E0FFF ; Changes_When_NFKC_Casefolded
-# Total code points: 10315
+# Total code points: 10329
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt b/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
index 5655134c679..ae41d93a12a 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
@@ -1,260 +1,260 @@
# Fractional UCA Table, generated from the UCA DUCET
-# 2019-04-01 [MS]
-# VERSION: UCA=12.1.0, UCD=12.1.0
+# 2020-02-12 [MS]
+# VERSION: UCA=13.0.0, UCD=13.0.0
# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html
-[UCA version = 12.1.0]
-# Unified_Ideograph: 87887 characters
-[Unified_Ideograph 4E00..9FEF FA0E..FA0F FA11 FA13..FA14 FA1F FA21 FA23..FA24 FA27..FA29 3400..4DB5 20000..2A6D6 2A700..2B734 2B740..2B81D 2B820..2CEA1 2CEB0..2EBE0]
-
-[radical 1=⼀一:一-丆𠀀-𠀂𫠠𬺰万-丌äºå„𠀃-𠀆𪜀ðªœð«€ð¬º±-𬺴ä¸-专丗𠀇-𠀌𪜂𫠡𬺵-𬺹且-世丘-ä¸ã€ð €-𠀗𫠢𫠣𬺺-𬺾丞-丢ãã‚𠀘-𠀚𠀜𠀞-ð € ð«ð« ¤ð« ¥ð¬º¿-𬻉丣-严丽鿖𠀡-𠀤𠀦-𠀨𠀪𠀫ð«‚ð« ¦-𫠩𬻊-𬻒並丧𠀬-𠀮𠀰-𠀴𪜃𫠪-𫠭𬻓-𬻘鿗𠀵𠀶𠀸𠀺𠀻𪜄𫠮𬻙-ð¬»ð €½-ð €ð ¤¢ðªœ…ð« ¯-𫠲𬻞-𬻠ð -ð …𪜆𫠳-𫠵𬻡-𬻥ð †-ð ˆð Šð ‹ð« ¶ð¬»¦-𬻨ð Œð ð« ·-𫠻𬻩-𬻮ð Ž-ð ’ð«ƒð« ¼ð« ½ð¬»¯ð “ð ”𫠾𫠿𬻰ð •ð —-ð ›ð ð¤³ðªœ‡ð«¡€ð –ð Ÿð«¡ð«¡‚ð  ð¬»±]
-[radical 2=â¼ä¸¨:丨丩ð ¡ð ¢ä¸ªä¸«ãƒã„𫡃𫡄中-丰ð £ðªœˆð«¡…丱ð ¥ð ¦ð¬»²ð¬»³ä¸²ð §ð ¨ð«¡†ä¸³ð ©-ð ¬ð«¡‡ä¸´ð ­-ð ¯ðªœ‰ð¬»´ä¸µð °ð ±ð«¡ˆð«¡‰ð¬»µ-𬻷ð ³-ð µð¬»¸ð¬»¹ð ¶ð«¡Šð ¸ð«¡‹ð«¡Œð ¹ð ºð«¡ð »ð«¡Ž]
-[radical 3=⼂丶:丶丷𪜊丸义ð ¼ð ½ð¬»ºä¸¹ä¸ºð ¿ä¸»ä¸¼ð ‚€-𠂂𬻻𪜋举𬻼𠂃𬻽𠂄𬻾𠂅]
-[radical 4=⼃丿:丿-乄ã…𠂆-𠂊𬻿-𬼂久-么乊𠂋-ð ‚Žð«„ð«¡ð¬¼ƒä¹‹ä¹Œå°¹ð ‚-𠂓𬼄-𬼆ä¹-ä¹ð ‚”-ð ‚¡ð«¡ð¬¼‡ð¬¼ˆä¹‘-ä¹”ã†ð ‚¢-𠂧𠂩-𠂫𠂭𪜌𫡑-𫡓𬼉乕𠂯𫡔𬼊乖𠂲𠂳𠂶𫡕-𫡘𬼋乗𠂴𠂷ðªœð«¡™ð«¡šä¹˜ð ‚¹-𠂾𪜎ðªœð«¡›ð«¡œð¬¼Œ-ð¬¼ð ‚¿-𠃂ð«¡ð¬¼ð ƒƒð ƒ„𫡞𠃆𠃅𬼑𠃇𫡟𫡠𬼒-𬼕𠃈𫡡]
-[radical 5=⼄乙:ä¹™-乛𠃉-𠃎𠃑乜ä¹é¾´ð ƒð ƒä¹ž-ä¹ ã‡-ã‰ð ƒ’-𠃔𬼖乣-书ãŠã‹ð ¾ð ƒ•-ð ƒð«¡¢ð¬¼—𬼘乧ãŒ-ã𠃞-𠃣ðªœð«¡£ð¬¼™-𬼜乨-ä¹°ã-ã•ð ƒ¤-𠃨𪜑𫡤ð¬¼-𬼢乱乲ã–-ã˜ð ƒ©ð ƒªð ƒ¬ð §ðªœ’𪜓𫡥-𫡧𬼣𬼤乳-乸ã™-ã›ð ƒ­-𠃯𪜔𫡨𬼥-𬼧乹-ä¹¼ãœ-ã ð ‚¸ð ƒ²-𠃷𪜕𫡩𬼨-𬼫乽𠃸-𠃻𤱡𪜖𪜗𫡪-𫡬𬼬𬼭乾-亀ã¡-ã£ð ƒ¼-𠄂𪜘𫡭𫡮𬼮-𬼱äºã¤ð¥€ðªœ™ðªœšð¬¼²-𬼴亂-亄𠄃𠄄𪜛𫡯𫡰𬼵𠄅-𠄈𢆡ã¥ð „‰ã¦ð „Šð „‹]
-[radical 6=⼅亅:亅𠄌了ð „-ð „亇𠄑𬼶-𬼸予ã§ð „’-𠄔争𠀩𠄕𬼹亊𠄖-𠄘𪜜事ã¨ð „™ð¬¼ºð „šð „›ðªœð¬¼»ð „œð „𬼼]
-[radical 7=⼆二:二𠄞-ð „ äº-äºð¬¼½äº‘-亖𠄡亗-亚𠄢-𠄧𫡱些亜𠀥𠄨-𠄪𫡲äº-亟ã©ð „«-𠄯𫡳𬼾𠄰-𠄳𬼿𬽀𠄵-𠄸ð¬½ð „¹ð „ºð«¡´ð „»ð¬½‚ð „¼-𠄾𫡵𫡶𠄿𪜞𫡷𠅀𪜟𫡸𫡹]
-[radical 8=⼇亠:亠-亣ð …𠅂𪜠𪜡𬽃交-产ãªã«ð …ƒ-ð …‡ð«…𬽄亨-亪ã¬ð …ˆ-𠅋𪜢𫡺𬽅-𬽇享京ã­ð …Œ-𠅒𬽈𬽉亭-亲𠅓-𠅕𬽊-𬽌亳𠅖𠅘-ð …ð«¡»ð¬½ð …ž-𠅧𪜣𬽎-𬽒亴亵𠅨-𠅯𠅲𪜤𫡼𬽓𬽔亶亷ã®ð …³-𠅸𠅺-𠅼𠆀𫡽𫡾𬽕-𬽘𠅾𠅿𫡿𫢀ð †-𠆉𪜥𬽙𬽚亸𠆋-𠆒𠆔𠆖-𠆘𬽛𬽜ã¯ð«¢ð«¢‚ð¬½ð¬½žð †šð †ðªœ¦ð«¢ƒäº¹ð †žð¬½Ÿð«¢„𬽠𠆟-𠆡]
-[radical 9=⼈人:人亻𠆢亼-亿𠆣-𠆥𫢅什-仓𠆦-𠆨𪜧𫢆-𫢈𬽡𬽢仔-ä»­ã°-ã·ð †©-𠆭𠆯𠆰𠆳ð«†ð«¢‰ð«¢Šð¬½£-𬽨仮-伬佤ã¸-㑀𠆴-𠇑𠇓-𠇕𪜨-𪜫𫢋-ð«¢ð¬½©-𬽭伭-佣佥-佨ã‘-㑈𠇖-ð ˆðªœ¬-𪜴𫢑-𫢘𬽮-𬽺佩-侭鿇㑉-㑖𠈃-𠈣𠈥-𠈬𪜵-𪜺ð«‡ð«ˆð«¢™-ð«¢ð¬½»-𬾄侮-ä¿­ã‘—-㑢𠈭-𠉢𪜻-ðª‚𫢞-𫢩𬾅-𬾙修-倿㑣㑥-㑭𠉣-𠊦𠋟ðªƒ-ðªŠð«‰ð«¢ª-𫢼𬾚-𬾩å€-å¿ã‘¤ã‘®-㑲𠊧-ð ‹ð ‹’-ð ‹žð ‹ -𠋬ðª‹-ðª•ð«Šð«¢½-𫣃𬾪-𬾼傀-傩鿘㑳-㑺𠋭-𠌅𠌇-ð Œð Œ -𠌩ðª–-ðªŸð«£„-ð«£ð¬¾½-ð¬¿å‚ª-åƒé¿™ã‘»-ã’𠌫-ð ¡ð £ð ¤ð ¦-ð ¬ð Žµðª -ðª¤ð«‹ð«£‘-ð«£–ð¬¿-𬿠僎-僱僳僴僷㒂-ã’ð ¥ð ­-𠎗𠎙𠎚ð Ž-ð Ž´ð ðª¥-ðªªð«£—-𫣢𬿡-𬿮僲僵僶僸-å„ã’‘-㒘𠎷-ð ð ‘ð ”-ð ¦ðª«-ðª¯ð«££-𫣬𬿯-𬿺å„-å„žå„«é¿šã’™-ã’œð ’ð ¨-ð ‡ðª°-ðª³ð«£­-𫣱𬿻-𭀀償-優儬ã’ã’žð ˆ-ð ›ð -ð ¢ðª´-ðª¶ð«£²-𫣸ð­€-ð­€…å„­-儲㒟㒠ð £-ð ºðª·-ðª¹ð«£¹-𫤃𭀆-𭀌儳-儵㒡-ã’£ð »-ð ‘𠑃-ð ‘Œðªº-ðª¼ð«¤„-𫤈ð­€-ð­€å„¶ã’¤-ã’¦ð ‘-ð ‘–ð ‘žðª½ð«¤‰-𫤋ð­€ð­€‘å„·-儺㒧㒨𠑗-ð ‘ð ‘Ÿ-ð ‘£ðª¾ð«¤Œ-𫤑儻儼𠑤-𠑩𭀒儽㒩𠑪-𠑯𫤒-𫤔𭀓𭀔儾𠑰𫤕𭀕𫤖㒪𠑲𠑳𠑵]
-[radical 10=⼉儿:å„¿-元𠑶𭀖-𭀘兄𠑷𠑸𭀙-ð­€å……-å…Šã’«ð ‘¹-𠑼𫤗克-å…‘ð ‘½-𠒂𭀞-ð­€ å…’-兖㒬𠒃-ð ’‹ðª¿ð«¤˜ð­€¡-𭀤兗-兙𠒌-ð ’𪞀ð«Œð«¤™ð­€¥å…šå…›ã’­ð ’-ð ’–ðªžð­€¦ð­€§å…œ-兞㒮𠒗-ð ’𫤚𫤛𭀨兟兠𠒞-𠒣𫤜ð«¤ð­€©-ð­€­å…¡ð ’¤-𠒦𪞂𫤞𭀮𭀯兢𠒧-𠒯𫤟𫤠𭀰-𭀳𠒰-𠒲𠒴-𠒷𪞃-𪞅𭀴兣𠒳𠒸-𠒾𭀵𠒿-𠓅𠓇𫤡𫤢𭀶-𭀸㒯𠓆𠓈-𠓊𫤣-𫤦𭀹𭀺𠓋𠓎𪞆𫤧ð “ð “ð “兤𠓑-𠓔𫤨𠓕-ð “š]
-[radical 11=⼊入:入兦𠓛內𠓜-𠓞㒰㒱𠓟𭀻全氽㒲𠇒𠓠-𠓣㒳㒴𠓤-𠓨𭀼-𭀾兩𠓩𭀿兪𠓪-𠓬ð­€ð “­-𠓰𪞇𫤩𠓱𠌆𠓲𠓳𫤪𠓴-ð “¼ð­ð “½ð­‚𠓾𠓿ð­ƒ]
-[radical 12=⼋八:八𠔀公-å…¯ð ”-𠔄兰𠔅𠔆ð­„å…±-兴龹𠔈𠔉𪞈𫤫𫤬ð­…ð­†å…µã’µ-㒷𠔊-ð ”ð­‡å…¶-å…¸ð ”𠔑𠩖𫤭ð­ˆ-ð­‹å…¹å…»ã’¸ð ”’-ð ”—ð­Œ-ð­Žå…ºå…¼ð ”™-𠔛𫤮𫤯ð­ð­å…½ð ”œð ”𫤰ð­‘-ð­“𠔞-𠔧𪞉𫤱ð­”-ð­–兾兿𠔨-𠔮𪞊𫤲ð­—ð­˜ð ”¯-𠔱𠭻𪞋ð­™ðªžŒð­š-ð­œå†€ð ”³-ð ”µðªžð œå†ð ”¶ð ”·ð«¤³ð ”¸-𠔺𫤴𫤵ð­ã’¹ð­žð«¤¶]
-[radical 13=⼌冂:冂𠔼冃-冈𠔽-ð •€ð­Ÿå†‰-册ð •-ð •Šð­ å†å†Žð •‹-ð •ð­¡ð­¢å†ð •-𠕕𪞎å†ã’ºð •–-ð •šð­£-ð­©å†‘冒𠕛𠕜ð«ð­ªð­«å†“冔ð •-ð •Ÿð­¬-ð­¯å†•ã’»ã’¼ð • -𠕢最㒽𠕣-ð •¥ð­°ð­±ã’¾ð •¦ð •§ð«¤·ð •¨-𠕪𠕬-ð •°ð­²ð •±ã’¿ð •²]
-[radical 14=â¼å†–:冖-冘㓀ã“𠕳𠕴写冚𠕵-𠕸ð­³å†›å†œð •¹-ð •¿å†ð –€-ð –ƒðªžðªžð«¤¸å†žð –„-𠖆𪞑ð­´å†Ÿå† ã“‚ð –‡-𠖋𫤹𫤺冡-冧𠖌-𠖒𪞒ð­µ-ð­»å†¨ð –“𪞓ð­¼-ð­¿ã“ƒð –”-𠖙𪞔𭂀𠖚𠖛ð­‚𭂂冩𠖜-𠖞𪞕㓄𫤻𭂃-𭂅冪𠖠-𠖥𫤼𠖦-𠖨𫤽𠖩-ð –«]
-[radical 15=⼎冫:冫𠖬𫤾㓅𠖭𭂆𭂇冬-冯𠖮-𠖰𪞖𫤿𭂈冰-冴㓆㓇𠖱-𠖶𪞗-𪞚𫥀-𫥃况-冻鿑㓈𠖷-ð –¿ð —𪞛-ðªžð«¥„-𫥈𭂉𭂊冼-净㓉-ã“𠗀𠗂-𠗇𪞞𫥉-𫥋𭂋-ð­‚Žå‡-凃㓎ã“ð —ˆ-𠗗𪞟-𪞡ð«Žð«¥Œ-𫥎ð­‚ð­‚凄-凎ã“-ã“’ð —˜-𠗤𪞢-𪞥ð«¥ð«¥ð­‚‘-ð­‚•å‡-凑㓓𠗥-𠗰𪞦-𪞨ð«ð«¥‘-𫥔𭂖-𭂘凒-凖㓔㓕𠗱-𠗹𪞩𪞪𫥕𫥖𭂙-𭂛凗㓖𠗺-𠘃𪞫𪞬𫥗𫥘𭂜-𭂞凘㓗𠘄-𠘉𠘓𪞭𫥙𭂟-𭂡凙-凜𠘊-𠘑𪞮𫥚-𫥜𭂢-𭂤å‡å‡žð ˜’𠘔𠘕𪞯𭂥凟𠘖-𠘜𥂳𭂦ð ˜-𠘡ð«¥ð­‚§ð ˜¢ð ˜£ðªž°ð­‚¨ð ˜¤ð ˜¥é¿›ð ˜¦]
-[radical 16=â¼å‡ :几𠘧𠘨凡-凤𠘩-ð ˜°ð­‚©-𭂬凥-凧𠘱-𠘴凨-凫𠘵-𠘻𪞱𫥞𫥟𭂭-𭂯凬𠘼-𠙅𪞲𭂰凭-凯𠙆-𠙎𠫮𭂱𭂲ð ™-𠙑𭂳𭂴𠙒-𠙖𪞳𫥠凰㓘𠙘𠙙𠙛-𠙞𪞴𫥡𭂵𭂶凱凲ð ‰ð ™Ÿ-𠙣𫥢𭂷𠙤-𠙧𪞵𫥣𭂸𭂹凳凴𠙨-ð ™«ð ™­-𠙰𭂺𠙱-ð ™³]
-[radical 17=â¼å‡µ:凵𠙴𠙵凶𠙶-𠙸凷-击𠙹-𠙻𠙽𪞶凼㓙𠙾-𠚊𭂻函𠚋-ð šðªž·å‡¾ð šŽ-ð šð š’𠚓𪞸𫥤𭂼𠚔-𠚗𭂽凿𠚘𪞹𫥥𫥦𭂾𪞺𪞻𫥧-𫥩𠚙𠚚ð¢­ð«¥ªð«¥«ð­‚¿ð šœð«¥¬ð­ƒ€ð šð šžð­ƒð¢‡•ðªž¼ð šŸðªž½ð«¥­-𫥯𠚠-𠚢]
-[radical 18=⼑刀:刀-刂𠚣刃刄𠚤刅-刈𠚥-𠚬𭃂-𭃄刉-åˆã“š-㓜𠚭-𠚴𠚶𠚻𫥰𫥱𭃅-𭃇刎-创ã“㓞𠚵𠚷-𠚺𠚼-ð ›ðªž¾-𪟀𫥲-𫥴𭃈-𭃌刜-刭㓟㓠𠛎-𠛦ðªŸðªŸ‚ð«¥µ-ð«¥»ð­ƒ-𭃔刮-剂㓡-㓦𠛧-ð œðªŸƒ-𪟅𫥼-𫥿𭃕-𭃡剃-剑㓧-ã“«ð œ-𠜰𪟆𪟇ð«ð«¦€ð«¦ð­ƒ¢-𭃨剒-剧㓬-㓰𠜱-ð œð ¶ðªŸˆðªŸ‰ð«¦‚-𫦅𭃩-𭃳剨剪-剱剶㓱-㓶ð -ð µð ·-ð ¾ðªŸŠ-ðªŸð«¦†-𫦌𭃴-𭃾剩割-創㓷-ã“»ð ¿-ð ž›ð ž-𠞤𪟎-ðªŸð«¦-𫦑𭃿-𭄅剷-剿㓼㓽𠞥-ð ŸðªŸ‘-𪟓𫦒-𫦔𭄆-ð­„劀-劄㓾-㔉𠟂-ð ŸŸð Ÿ¡-𠟥𫦕-𫦙ð­„𭄑劅-åŠã”Šð Ÿ ð Ÿ¦-𠟹𪟔𫦚𭄒åŠ-劔㔋-ã”𠟺-𠠊𪟕𪟖𭄓-𭄗劕㔎ã”ð  Œ-𠠚𫦛𭄘𭄙ã”ð  ›-𠠠𫦜-𫦞𭄚𭄛劖㔑𠠡-𠠣𫦟𫦠𭄜㔒𠠤𠠦-𠠩劗劘𠠥𠠪-𠠭劙劚𠠮𫦡𠠯ð­„𫦢𠠰𠠱𫦣]
-[radical 19=⼒力:力劜𠠲𫦤åŠåŠžð  ³-𠠵𭄞功-劢㔓㘞𠆮𠠶-𠠸𭄟𭄠劣-动㔔-ã”–ð  ¹-ð ¡ð«¦¥åŠ©-労㔗㔘𠡂-ð ¡ðªŸ—-𪟙𫦦𫦧劵-势㔙-㔛𠡑-ð ¡ðªŸšðªŸ›ð«¦¨ð­„¡-𭄥勀-勋㔜𠡞-𠡪𪟜𫦩-𫦭𭄦-ð­„«å‹Œ-å‹‘ã”-㔟𠡫-𠡺ðªŸ-𪟟𫦮-𫦲𭄬-𭄲勒-勖勘-å‹šã” ð ¡»-𠢄𪟠𫦳𭄳-𭄶勛-勞㔡𠢅-𠢒𪟡𪟢𫦴𫦵𭄷-𭄹募-勧𠢓-𠢟𪟣ð«‘𫦶𫦷𭄺-𭄾勨-勭㔢𠢠-𠢯𪟤𪟥𫦸𭄿-𭅃勮-勲𠢰-𠢵𪟦𫦹𫦺勳𠢶-𠢸𫦻𫦼勴-勶㔣-㔦𠢹-𠢿㔧𠣀-𠣃𫦽𫦾勷𠣄𠣅勸𠣆𠣇𪟧𠣈-𠣊𫦿𠣋]
-[radical 20=⼓勹:勹-匂𠣌𭅄匃-匇ð £-ð £ð«§€ð«§ð­……匈𠣑-𠣓𭅆匉𠣔-𠣗𭅇𭅈匊-匌𠣘-ð £ð­…‰ð­…ŠåŒð £ž-𠣣𭅋匎𠣤-𠣭𫧂𫧃åŒåŒã”¨ð £®-𠣴𭅌匑匒㔩𠣵-𠣷𫧄ð­…匓㔪𠣸-𠣼𭅎ð­…ð £½-𠤂匔𠤃𫧅𠤄-𠤇𫧆𠤈-ð ¤]
-[radical 21=⼔匕:匕𠤎𪟨化㔫ð ¤ð«§‡åŒ—ð ¤ðªŸ©ð­…𠤑-𠤕㔬𠤖𭅑𠤗-ð ¤ðªŸªð­…’𠤞-𠤡𭅓匘匙㔭𫧈𫧉𠤣-𠤥𪟫𠤦-𠤪𫧊]
-[radical 22=⼕匚:匚𠤬𠤭𫧋𭅔匛-匞𫧌𭅕𭅖匟-匢𠤮-𠤱𪟬ð«§-ð«§åŒ£-匥㔯㔰𠤳-𠤷𪟭𪟮ð«§ð«§’𭅗𭅘匦𠤸-𠤻𫧑𭅙𭅚匧-匩𠤼-𠥂𠥄-𠥈𪟯𫧓匪匫龨𠥉-ð ¥ðªŸ°ð«§”𭅛匬-匮㔱𠥎ð ¥ð­…œð­…ð ¥-𠥕𫧕匯㔲-ã”´ð ¥–-𠥘𫧖匰-匲㔵𠥙-𠥛𪟱𫧗𭅞匳𠥜-𠥡𫧘𫧙匴𠥢𠥣𫧚匵𫧛𫧜𠥤𠥥匶𠥦𠥧匷𠥨𠥩𪟲𠥪ð«§ã”¶ð ¥«ð ¥¬]
-[radical 23=⼖匸:匸-区𠥭𠤲𠥮𠥯医㔷𠥰-𠥲匼𠥳匽𠥃𠥴𠥵𭅟𠥶匾-å€ã”¸ð ¥·-𠥺]
-[radical 24=â¼—å:å-åƒå…-åˆã”¹ð ¥»ð ¥¼ð ¥¿ð­… å‰åŠåŒð †±ð ¥½ð ¥¾ð ¦€ð ¦å‹å-å㔺㔻𠦂-𠦗𪟳ð«’𫧞å‘-å–龺𠦘-𠦢𣥥ð«“𫧟𫧠å—å˜ð«”𫧡𫧢𭅡𭅢𠦣-𠦩𪟴𭅣å™ð ¦ª-𠦯𪟵𭅤åšð ¦°-𠦳𫧣𭅥𭅦㔼𠦴-𠦼𪟶𫧤𫧥𭅧𠦽-𠦿𪟷𫧦𠧀-𠧄𪟸𪟹𫧧𫧨𭅨-𭅪𠧅-𠧈𪟺𫧩-𫧫𠧉-ð §ðªŸ»ð­…«ð­…¬ð §Žð«§¬ðªŸ¼ð­…­å›ð §ð«§­ð §ð­…®ð §‘]
-[radical 25=⼘åœ:åœð §’ååžðªŸ½åŸ-å¢ð §“ð €ð §”-𠧘𭅯å£å¤ð §™-𠧜𡥋𪟾𭅰å¥-å§ã”½ð §ž-𠧨𫧮𠧩-𠧲𠭉𫧯𠧳-𠧷𠧹𪟿𫧰å¨ð §º-𠧿𭅱𠨀-𠨂𠨄𫧱𫧲𠨅𫧳𫧴𠨆𠨇𪠀𫧵𠨈-𠨊𫧶-𫧸𠨋𠨌]
-[radical 26=â¼™å©:å©-å«ã”¾ã”¿ð­…²å¬ð ¨-ð ¨ð«§¹ð­…³å­-å¯ð ¨‘ð­…´å°å±ð ¨’-𠨗𫧺𭅵å²-åµã•€ð ¨˜å¶-åºã•ðª ð­…¶-ð­…ºå»-å½ð ¨™-ð ¨ðª ‚𠨞𭅻𭅼å¾å¿ð«§»ð ¨Ÿ-𠨡𫧼厀åŽð ¨¢-𠨤𫧽𭅽𭅾𠨥𫧾𫧿𭅿𫨀𠨦-𠨪ð«¨ð ¨«]
-[radical 27=⼚厂:厂-历𠨬厇-厉𠨭-𠨳𪠃𫨂𭆀厊-åŽã•‚-㕄𠂬𠂮𠨴-𠨿ð­†åŽŽ-厑㕅-㕇𠂰𠩀-𠩉𪠄ð«•ð«¨ƒð«¨„𭆂𭆃厒-厕㕈㕉𠩊-𠩕𪠅𪠆𫨅-𫨈𭆄厖-厛㕊𠩗-𠩦𪠇-𪠊𫨉𫨊𭆅厜-原虒㕋-ã•ð ©§-𠩷𪠋-𪠎ð«–ð«—𫨋𭆆-𭆈厠-厣厩𠩸-𠩾𠪀-𠪆ðª ðª ð«¨Œ-ð«¨ð­†‰-𭆋厤-厨㕎𠪇-ð ªðª ‘𪠒𫨑-𫨗𭆌-ð­†åŽªåŽ«ã•ð ©¿ð ª‘-𠪘𪠓-𪠕𫨘-𫨛𭆑𭆒厬-厰ã•ã•‘𠪙-𠪬𪠖𪠗𫨜ð«¨ð­†“-𭆕厱厲㕒𠪭-𠪸𪠘𪠙𫨞𫨟𭆖𠪺-𠪾𫨠-𫨢𭆗厳㕓𠪿𪠚𫨣𠫀-𠫆厴𠫇𪠛𫨤𠫉-ð «Žã•”ð «ð«¨¥ð­†˜ð «åŽµð «‘ð «’]
-[radical 28=⼛厶:厶𠫓-𠫖厷-厹㕕𠫗𠫘𫨦厺-厼𠫙-ð «åŽ½åŽ¾ð «ž-𠫥𭆙𭆚县𠫦-𠫨𫨧å€-å‚ð «©-𠫭𠫯-𠫲𠫴-𠫸𪠜𫨨𫨩𭆛-ð­†ã•–ð «¹-ð «¼ðª ð«¨ªð­†ž-𭆢åƒå„㕗㕘𠫽𠫾𪠞𫨫𭆣å…ð «¿-𠬅𦎅𪠟𠬆-𠬌𪠠𫨬-𫨮𭆤å†ð ”²ð ¬-ð ¬å‡ã•™ð ¬‘𠬒𪠡𠬓𠬕-𠬗𫨯𫨰𠬔𠬘𠬙𪠢𫨱]
-[radical 29=⼜åˆ:åˆå‰ð­†¥åŠ-åŽã•šã•›ð ¬š-𠬠𪠣𪠤𫨲å-å‘𠬡-𠬨𭆦å’㕜𠬩-𠬰𪠥𫨳𭆧𭆨å“ã•ð ¬±-𠬸𪠦𫨴-𫨸å”-å˜ã•žð ¬¹-𠬾𪠧𪠨𫨹𭆩-𭆫å™-å㕟𠫳𠬿-𠭈𪠩𪠪𫨺𫨻𭆬-𭆮åžåŸð ­Š-𠭔𪠫𪠬𫨼-𫨿𭆯𭆰𠭕-𠭤𫩀-𫩃𭆱𭆲㕠𠭥-𠭮𪠭𪠮𫩄𫩅𭆳𭆴å ï¨Žð ­¯-𠭵𠭷-𠭺𪠯𫩆𫩇㕡𠭼-𠮂𡪞𪠰𫩈𫩉𭆵𭆶𠮃-𠮆𫩊𭆷å¡ð ®‡-𠮌𪠱𫩋𫩌ð ®-ð ®ð«©ð«©Žå¢ð ®å£¡ð ®‘-𠮘]
-[radical 30=â¼å£:å£ð ®™-𠮞ð«©å¤-å¾ã•£-㕥𠙼𠮟-𠮪𪠲ð«©ð«©‘𭆸𭆹å¿-å—㕦-㕨𠮫-𠯊ð«˜ð«©’-𫩗𭆺-𭇂å˜-呜㕩-㕶𠈂𠯋-𠰇𪠳-𪠵𫩘-𫩞𭇃-ð­‡å‘-å’ã•·-ã•¿ð °ˆ-ð ±ðª ¶-𪠹𫩟-𫩪𭇎-ð­‡å’ž-å“Ÿã–€-ã–Žð €·ð €¹ð ±-𠲫𪠺-𪡃ð«™ð«©«-𫩼𭇞-ð­‡´å“ -唧ã–-㖞𠲬-𠳤𠳦-𠳪𠳬-𠴥𪡄-𪡎𫩽-𫪑𭇵-𭈋唨-啘啚-å•žå• -啪啬-啹㖟-㖵𠳥𠴧-𠶶ðª¡-𪡛𫪒-𫪰𭈌-𭈮啙啫啺-喌喎-喾噅㖶-ã—‘ð ¶·-ð ·¡ð ·£-𠸵𠸻-𠸾𪡜-𪡩𫪱-𫫂𭈯-𭉙å–å–¿-嗵㗒-㗡𠷢𠸶-𠸺𠸿-𠹯𠹳-𠻓𪡪-𪡷𫫃-𫫒𭉚-𭉽嗶-嘞嘡-嘧噑噓㗢-ã—°ð ·ð »”-𠽠𪡸-𪢄ð«šð««“-𫫧𭉾-𭊠嘟嘠嘨-噄噆-å™å™’噔噖-å™å™´ã—±-㗺𠆊ð “ð §ð ¹°-𠹲𠽡-𠾦𠾨-𠿆𡀔𡀦𪢅-ðª¢ð«›ð««¨-𫫵𭊡-ð­‹å™ž-噳噵-噼㗻-㘄𠿇-𡀓𡀕-𡀥𡀧-ð¡€¼ð¢¨ð¨—“𪢎-𪢔𫫶-𫬆𭋂-𭋛噽-嚓嚺㘅-㘈𡀽-𡂎𪢕-𪢘ð«œð«¬‡-𫬑𭋜-𭋯嚔-嚤㘉-ã˜ð¡‚-𡃟𡃰𪢙-𪢞ð«ð«¬’-𫬛𭋰-𭌉嚥-åš°ã˜-㘒𡃠-𡃯𡃱-𡄈𡄊-ð¡„𪢟-𪢡𫬜-𫬫𭌊-𭌡嚱-嚹㘓㘔𡄑-𡄰𪢢-𪢤𫬬-𫬵𭌢-𭌯嚻-囄å›ã˜•-㘗𡄱-𡅔𡅣𫬶-𫬸𭌰-𭌳囅-囋囎㘘𡅗-𡅢𡅤-𡅯𪢥ð«žð«¬¹ð­Œ´-𭌽囌å›å›ã˜™ã˜šð¡…°-𡅸𫬺-𫬼𭌾-ð­…囑-囓𡅹-𡆅𪢦𪢧𫬽-𫬿ð­†-ð­‹å›”囕㘛𡆆-𡆎𫭀ð­Œ-ð­ã˜œð¡†-𡆘ð­-ð­’𡆙𡆚𡆞ð«­ð­“ð­”囖𡆛-ð¡†ð§®¥ð­•-ð­˜ð¡†Ÿð­™]
-[radical 31=⼞囗:囗𡆠-𡆢囘-囜龱ã˜ð ¤ð¡†£-𡆦𫭂ð­šå›-団㘟𡆧-𡆳囤-囵𡆴-𡇇𪢨𫭃𫭄ð­›ð­œå›¶-图㘠㘡𠀯𡇈-𡇌𡇎-𡇑𪢩𫭅𫭆ð­å›¿åœ€ã˜¢ð¡‡’-𡇟𪢪𫭇𫭈ð­žð­Ÿåœ-圆㘣𡇠-𡇯𪢫𫭉𫭊ð­ -ð­¤åœ‡-國åœð¡‡°-𡇻𡈀𪢬𪢭𫭋𫭌ð­¥-ð­¨åœŒ-圎åœð¡‡¼-𡇿ð¡ˆ-𡈉𤔗ð«­-ð«­ð­©ð­ªåœ‘-圕𡈊-𡈔𪢮ð«­ð­«åœ–-圙㘤𡈕-𡈡𪢯𫭑ð­¬-ð­°åœšð¡ˆ¢-𡈤𡈦-𡈩𫭒ð­±-ð­³åœ›åœœð¡ˆ¥ð¡ˆª-𡈬𪢰𫭓ð­´ð¡ˆ­-𡈱𫭔ð­µð¡ˆ²ð­¶ð¡ˆ³ð¡ˆ´ð­·ã˜¥ð¡ˆµ-𡈺𫭕ð­¸åœåœžð¡ˆ»ð­¹]
-[radical 32=⼟土:土-圡龶𡈼-𡈾𫭖圢-圧㘦𡈿-𡉇𪢱𪢲𫭗𫭘ð­ºåœ¨-场𡉈-𡉖𪢳-𪢷𫭙𫭚ð­»-ð­½åœ»-å ã˜§-㘰𡉘-𡊃𪢸-𪣂𫭛-ð«­¤ð­¾-ð­Ž„å¡-垊㘱-㘵𡊄-𡊶𪣃-𪣊𫭥-𫭨𭎅-ð­ŽŽåž‹-垵城é¿ã˜¶-㘾𡊷-ð¡‹›ð¡‹-𡋬𪣋-𪣓𫭩-ð«­¯ð­Ž-𭎛垶-åŸåŸ-埛ï¨ã˜¿-㙆𡋭-𡌥𣑧𪣔-𪣣𫭰-𫭻𭎜-𭎨埜-埩埫-堕㙇-ã™ð¡Œ¦-ð¡£ðª£¤-𪣱𫭼-ð«®…ð­Ž©-𭎵埪堖-堼堾-å¡‚å¡„-塈㙎-㙘ð¡¤-𡎭𪣲-𪣽ð«Ÿð«®†-𫮑𭎶-ð­‹å ½å¡ƒå¡‰-塱㙙-㙟𡎮-ð¡¬ð§¯§ðª£¾-ðª¤ð«®’-𫮚ð­Œ-ð­œå¡²-墛㙠-㙦ð¡­-ð¡ð¦¥ˆðª¤Ž-𪤘ð« ð«®›-𫮢ð­-ð­©å¢œ-墧墩-墹㙧-㙯𠚛ð¡ž-ð¡‘𪤙-𪤞𫮣-𫮬ð­ª-ð­µå¢º-壌龳㙰-㙶𡑞-𡑹𡑻-𡒈𪤟-𪤥ð«¡ð«®­-𫮯ð­¶-ð­½å£-壗龼㙷-㙺𡒉-ð¡’ ð¡’¢-𡒯𪤦-𪤫𫮰-ð«®µð­¾-ð­€å£˜å£™ã™»-㙽𡒰-ð¡’¿ð¡“-ð¡“‹ð¡“-ð¡“𪤬-𪤯𫮶-𫮸ð­-ð­„壚-壠壢㙾㙿𡓀𡓌ð¡“-ð¡“šð¡“œ-𡓥𪤰𫮹-ð«®¼ð­…-ð­‰å££-壥㚀𡓦-𡓰𪤱𫮽-ð«®¿ð­Šð­‹å£¦ð¡“±-𡓶𡓸𡓹𡓻-ð¡”𫯀ð­Œ-ð­Žð¡“ºð¡”‚-𡔉ð­å£§å£¨ð¡”Š-𡔎壩ãšð¡”-ð¡”•ð­å£ªãš‚ð¡”–ð­‘ð¡”—-𡔚]
-[radical 33=⼠士:士-壭𡔛壮𡔜壯-壳ð¡”-𡔟ð­’壴壵𡔠-𡔢ð«¯ð«¯‚壶𡔣-𡔩𪤲壷壸𡔪-𡔭壹-壻㚃𡔮𡔯ð­“-ð­•å£¼ð¡”°ð¡”²-𡔵𪤳ð­–壽壾𡔶𡔸-𡔻𫯃𫯄ð­—壿夀㚄𡔼𡔽𫯅ð­˜å¤ð¡”¾-ð¡•„ð­™ð¡•…𡕇-ð¡•Œð­šð¡•ð«¯†ð«¯‡ð¡…•ð¡•-𡕑𪤴𫯈ð­›ð«¯‰ð­œ]
-[radical 34=⼡夂:夂𡕒夃处𡕓𡕔ð­å¤…𡕕𡕖夆𡕗-𡕙备夈㚅𡕚ð­žð ™šð¡•›ð¡•œðªŒ›ð¡•ð«¯Šðª¤µ]
-[radical 35=⼢夊:夊ð­Ÿð¡•žð¡•Ÿå¤‹ð¡• ð¡•¡å¤Œð¡•¢-ð¡•¥ð­ ð­¡å¤‰å¤ãš†ãš‡ð­¢-ð­¤å¤Žå¤ð €¼ð¡•¦ð«¯‹ð«¯Œð­¥ð­¦ð¡•§-𡕬ð­§ð Œžð¡•­ð ­¶ð¡•®-𡕱𪤶ð­¨ð­©å¤ð¡•²-ð¡•µð­ªð­«ð¡•¶ð¡•·ð­¬ð¡•¸-𡕺ð­­ð­®ð¡•»ð­¯å¤‘夓𡕼-ð¡•¿ð­°å¤’ð¡–€ð­±ð¡–夔ð­²ð¡–‚ð¡–ƒ]
-[radical 36=⼣夕:夕-夘㚈𡖄-𡖆夙-夛𡖇-𡖉𪤷ð«¢ð­³ð­´ð¡–Š-ð¡–Œð«£ð­µå¤œå¤ãš‰ð¡–-ð¡–𪤸ð«¯ð­¶ð¡–𡖑𪤹夞𠅗𡖒-𡖜𢻈𪤺𫯎够夠ð¡–-𡖥𪤻ð«¯ð«¯ð­·ð­¸å¤¡ãšŠð …±ð ¨ƒð¡–¦-𡖮𡖰𪤼𫯑𫯒ð­¹-ð­»ð¡–¯ð¡–±-𡖵夢-夥㚋㚌𡖶-𡖾𢆣𪤽𫯓𫯔ð­¼ð­½å¤¦ð¡–¿-ð¡—𪤾𫯕ð­¾ð­¿ð †“𠆕𡗂-𡗅𪤿𫯖𫯗𠆙𡗆-𡗈𫯘𭑀ãšð¡—‰ð¡—Šð­‘ð¡—‹ð¡—Œð¡—ð¡—𡗎𪥀𫯙ð¡—𣡳𫯚𡗑]
-[radical 37=⼤大:大-夭𡗒-ð¡—”ðª¥ð«¯›å¤®-头㚎𡗕-𡗛𪥂𭑂夵-夼ãš-ãš‘ð €›ð¡—-𡗤𪥃𫯜𭑃夽-奂㚒㚓𡗥-𡗶𪥄-𪥆ð«¯-𫯟𭑄𭑅奃-奉奋-å¥ãš”-㚙𡗷-𡘌𪥇-𪥌𫯠-𫯢𭑆-𭑋奎-奖㚚㚛ð¡˜-𡘜ðª¥-ðª¥ð«¯£-𫯥𭑌-𭑎奊套-奚ð¡˜-𡘳ðª¥-𪥒ð«¤ð«¯¦ð«¯§ð­‘-𭑒奛-奞㚜-㚞𡘴-𡙆𪥓-𪥕𫯨𭑓-𭑖奟-奥㚟𡔱𡙇-𡙚𪥖-𪥘𫯩-𫯯𭑗-𭑛奦-奨㚠𡙛-𡙫𪥙-𪥛𫯰-𫯴𭑜-𭑟奩-奬𡙬-𡙶𪥜-𪥞𫯵-𫯷𭑠奭𡙷-𡚅𪥟-𪥡𫯸-𫯼奮奯㚡𡚆-𡚎ð¤ ð«¥ð«¯½-𫰀𭑡-ð­‘£ð¡š-ð¡š–ð«°ð­‘¤å¥°ð¡š—𡾗𪥢𭑥𡚘-𡚚𫰂𭑦𡚛𪥣𫰃𫰄𡚜ð¡šå¥±ð¡šž-𡚢𫰅奲𡚣-𡚥]
-[radical 38=⼥女:女𡚦𫰆奴-奶㚢𡚧-𡚭𫰇𭑧-𭑫奷-妈㚣-㚨𡚮-𡚻𪥤𪥥𫰈-𫰊𭑬𭑭妉-妌妎-妫㚩-㚯㛠𡚼-𡛘𪥦-𪥬ð«¦ð«°‹-𫰖𭑮𭑯妬-姗㚰-ã›ð¡›™-ð¡œðª¥­-𪥰𫰗-𫰛𭑰-ð­‘µå¦å§˜-姫姭-娃娅-娈㛂-㛌𡜂-𡜭𪥱-𪥵ð«§ð«¨ð«°œ-𫰩𭑶-𭑹姬娉-娫娭-娴娽ã›-㛟㛡-㛤𡜮-ð¡ðª¥¶-𪥺ð«©-ð««ð«°ª-𫰶𭑺-𭑿娬娵-娼娾-婶㛥-ã›­ð¡ž-𡞛𪥻-𪦅𫰷-𫱂𭒀-ð­’„å©·-åªåª‘-媯å«ã›®-㜄𡞜-𡟧𡠣𪦆-ðª¦ð«¬ð«±ƒ-ð«±ð­’…-ð­’Œåªåª°-å«Žå«-嫔㜅-㜔𡟨-𡠕𪦑-𪦖𫱑-𫱞ð­’-ð­’‘å«•-嫲㜕-㜢𡠗𡠙-𡠢𡠤-𡠱𡠳-𡡎𪦗-𪦟ð«­ð«±Ÿ-𫱫𭒒-ð­’嫳-å¬ãœ£-㜨𡠖𡠘𡠲ð¡¡-ð¡¢ð¡¢ðª¦ -𪦥ð«®ð«±¬-𫱷𭒞-ð­’¡å¬-嬢嬴㜩-㜭𡢎𡢑-𡣄𪦦-𪦪𫱸-𫲄𭒢-𭒥嬣-嬳嬵-嬷㜮㜯𡣅-𡣡𡣣-𡣩𪦫𫲅-𫲌𭒦-𭒨嬸嬺-嬽㜰㜱𡣪-𡣼𪦬-𪦯ð«²-𫲓𭒩-𭒭嬹嬾嬿㜲-㜵𡣽-ð¡¤ð¡¤žðª¦°ðª¦±ð«²”-𫲙𭒮孀-孆㜶-㜸𡤎-𡤗𪦲𫲚𫲛𭒯-𭒳孇-孉㜹𡤘-ð¡¤ð¡¤Ÿð¡¤ ðª¦³ðª¦´ð«²œð«²å­Š-孌㜺𡤡-𡤪𫲞𫲟å­ð¡¤«-𡤭𪦵𫲠孎å­ð¡¤®-𡤳𭒴𡤴-𡤶𭒵㜻㜼𡤷-𡤻]
-[radical 39=⼦å­:å­-孓𡤼孔𡤽孕𡤾-𡥂𫲡𭒶-𭒹孖-孙㜽𡉗𡥃-ð¡¥…ð­’º-𭒼孚-孞㜾㜿𡥆-𡥊𡥌ð¡¥ðª¦¶-𪦹孟-å­§ã€ð ƒ±ð¡¥Ž-𡥚𪦺𫲢-𫲤𭒽-𭓀孨-å­ªãð¡¥›-𡥧𪦻𫲥ð­“ð­“‚å­«-å­­ã‚ãƒð¡¥¨-𡥭𢈲𨹴𫲦𭓃-𭓇孮-孰孲𡥮-𡥵𪦼-𪦾𫲧𫲨𭓈-ð­“Žå­±ã„𡥶-𡦂𪦿𫲩𫲪ð­“-𭓔孳孴ã…𡦃-ð¡¦ð«²«ð«²¬ð­“•ð­“–å­µ-孷𡦑-𡦖𪧀𫲭𫲮𭓗𭓘ã†ð¡¦—-ð¡¦ð«¯ð«²¯ð«²°å­¸å­¹ã‡ð¡¦ž-𡦨ðª§ð«²±ð«²²ð­“™ð­“šå­ºå­»ð¡¦©ðª§‚𪧃𭓛𡦪-𡦬孼𡦭-𡦰𫲳𭓜孽孾𡦱-𡦶𪧄孿𡦷𫲴ãˆð¡¦¸ð­“]
-[radical 40=⼧宀:宀ã‰ð¡¦¹å®-宄ãŠã‹ð¡¦º-𡦼宅-安ãŒã𡦽-𡧊𫲵𫲶𭓞宊-å®’ãŽ-ã‘𡧋-𡧕𪧅-𪧇𫲷-𫲽𭓟-𭓡宓-审ã’𡧖-𡧨𪧈𪧉𫲾-𫳀𭓢-𭓩客-宦宨-宫ã“-ã–𡧩-𡧿𪧊-𪧌ð«³-𫳆𭓪-𭓯宧宬-宾ã—-ãšð¡¨€-𡨡ðª§-ðª§ð«³‡-ð«³ð­“°-𭓳宿-寉ã›-ã¡ð¡¨¢-𡨼𪧑-𪧓ð«³-𫳙𭓴-𭓿寊-寕寪ã¢ã£ð¡¨½-𡩞𪧔-𪧚𫳚-𫳣𭔀-𭔅寖-å¯ã¤-ã¨ð¡©Ÿ-𡩺𪧛-𪧠𫳤-𫳮𭔆-𭔌寞-寨ã©-ã¬ð¡©»-ð¡ªðª§¡-𪧥ð«°ð«³¯-𫳼ð­”-ð­”審寫-寮ã­-ã¯ð¡ªŸ-𡪽𪧦-𪧪ð«±ð«³½-ð«´ð­”‘-𭔖寯寰𡪾-ð¡«ðª§«-𪧮𫴂-ð«´ð­”—-𭔙寱寲𡫑-ð¡«ðª§¯ð«´-𫴗𭔚-𭔞ã°ð¡«ž-𡫫𪧰-𪧲𫴘-𫴛𭔟-𭔡寳-寵𡫬-𡫶𫴜-𫴟𭔢-𭔤寶𡫷-𡫻𪧳𪧴𫴠𭔥𭔦寷ã±ð¡«¼-𡬃𪧵𫴡-𫴣𭔧𡬄-𡬋𫴤𫴥𭔨𡬌𫴦𫴧ð¡¬ð¡¬ð¡¬ðª§¶ð«´¨-𫴪𡬑𡬓-𡬕ã²ð¡¬–-𡬘𡬎𡬙𡬚𡬒𡬛𫴫𡬜]
-[radical 41=⼨寸:寸ð¡¬å¯¹ã³å¯º-导𡬞𪧷𭔩寽-寿ã´ð­”ªå°€ãµð¡¬Ÿ-𡬦𭔫𭔬å°å°‚将𡬧-𡬬𫴬𭔭-𭔯尃-å°…ã¶ð¡¬­ð«´­ð­”°-𭔲將-尉𡬮-𡬲𪧸𪧹𭔳-𭔵尊-å°Œã·ð¡¬³-𡬸𪧺𫴮𫴯𭔶-𭔸𡬹-𡬼𫴰-𫴳𭔹-ð­”¼å°ð¡¬½-ð¡­‚ð­”½-ð­”¿å°Žð¡­ƒ-𡭉𣊒𪧻𪧼𫴴𫴵𭕀ð­•ð¡­Š-𡭌𪧽𭕂ð¡­-ð¡­ðª§¾ð¡­ð¡­‘𭕃𡭒𡭓𫴶𫴷]
-[radical 42=⼩å°:å°ð¡­”ð­•„å°å°‘ð¡­•ð¡­–å°’-尕龸𡭗𡭘尖-尘𡭙-𡭜𭕅ð¡­-𡭤𪧿𫴸𫴹𭕆𭕇尙尚𠈤𡭥-𡭩𪨀𫴺𫴻𭕈𭕉尛-å°ð¡­ª-𡭳𫴼𫴽𭕊ã¸ð¡­´-ð¡­¼ðª¨ðª¨‚ð¡­½-ð¡®ð«´¾-𫵃尞ã¹ð¡®Ž-𡮗𫵄𫵅尟尠𠅽𡮘-ð¡®ð­•‹å°¡ãºð¡®ž-𡮥𪨃𫵆𫵇ã»ð¡®¦-𡮯𪨄𫵈𫵉𡮰-𡮳𪨅𫵊-𫵌𭕌𡮴-𡮶𢇔𪨆𡮷-ð¡®»ð¤¯ð¡®¼-ð¡®¾ð«µð¡®¿ð¡¯€]
-[radical 43=⼪尢:尢尣ð¡¯ð¡¯‚尤𡯃-𡯊𫵎尥-å°§ã¼ð¡¯‹-𡯎ð­•å°¨-å°¬ã½ð¡¯-𡯙ð«µå°­ã¾ã¿ð¡¯š-𡯡ð«µð­•Žå°®å°¯ãž€ãžð¡¯¢-𡯤𡯦𡯧㞂𡯨-𡯲㞃-㞆𡯳-𡯸𫵑ð­•ð­•å°°å°±ãž‡ãžˆð¡¯¹-𡰂𪨇尲-尴㞉㞊𡰃-𡰊𪨈𭕑𭕒𡰋-ð¡°ð­•“å°µð¡°-𡰕𫵒𡰖-𡰚尶尷𡰛-ð¡°¢]
-[radical 44=⼫尸:尸𡰣尺-尼㞋𡰤-𡰨𡰴𭕔尽㞌ãžð¡°©-ð¡°³ð«²å°¾-屃㞎𡰵-𡰽𪨉-𪨋𫵓-𫵕屄-届ãž-ãž‘ð¡°¾-𡱋𪨌𫵖-𫵘𭕕-𭕘屋-å±ãž’-㞖𡱌-𡱡𢇀ðª¨ðª¨Žð«µ™-ð«µð­•™-ð­•å±-屘㞗𡱢-𡱹ðª¨ðª¨ð«µžð«µŸð­•žð­•Ÿå±™-å±ãž˜ãž™ð¡±º-𡲓𪨑𫵠𭕠-𭕣属-屡㞚㞛𡲔-𡲫𪨕-𪨘𭕤𡲬-𡳃𪨒-𪨔𫵡𭕥-𭕭屢屣㞜-㞞𡳄-ð¡³ðª¨™ðª¨šð«µ¢-𫵥𭕮𭕯層-屧㞟㞠ð¡³-𡳞𪨛𪨜𭕰-𭕵𡳟-𡳧ðª¨ð«µ¦ð«µ§å±¨ð¡³¨ð¡³©ðª¨žð«µ¨ð­•¶å±©å±ªð¡³ªð¡³«ð«µ©ð­•·ð­•¸å±«ãž¡ð¡³¬-𡳰𪨟𪨠𫵪𫵫𭕹𭕺𡳱-𡳴屬𡳵-𡳷𫵬𫵭𭕻𡳸-𡳺𪨡𭕼屭𡳻𭕽𡳼𡳽]
-[radical 45=⼬屮:屮𡳾屯㞢𡳿𭕾屰𡴀-𡴅𭕿㞣㞷𡴆-𡴚𫵮𡴛-𡴥𫵯𫵰𡴦-𡴬]
-[radical 46=â¼­å±±:山乢屲𡴭-𡴯屳-屷㞤-㞧𡴰-𡴽𫵱-𫵴𭖀屸-岃㞨-㞯𡴾-𡵒𪨢-𪨥ð«³ð«µµð­–-𭖄岄-岌岎-岜㞰-㞶㞸𡵓-𡶂𪨦-𪨨𫵶𫵷𭖅-ð­–Šå²-å³…ãž¹-㟃𡶃-𡶣𡶥-𡶪𪨩-𪨮𫵸𫵹𭖋-ð­–”å²å³†-峧㟄-㟆𡶫-𡷔𪨯-𪨴ð«´ð«µºð«µ»ð­–•-𭖞峨-崅㟇-㟖𡷕-ð¡¸ð¦Š¤ðª¨µ-𪨺ð«µð«µ¼-𫶀𭖟-𭖨崆-崰㟗-㟥𡸑-𡹩𪨻-ðª©ð«¶-𫶅𭖩-𭖱崱-嵉嵋-åµï¨‘㟦-㟯𡹪-𡺩𪩂-𪩇𫶆-𫶉𭖲-𭖿嵊嵞-嵶㟰-㟸𡺪-𡻗𪩈-𪩋𫶊-ð«¶ð­—€-𭗆嵷-嶎㟹-㠄𡻘-𡼉𪩌-𪩒𫶑-𫶔𭗇-ð­—“å¶-嶥㠅-ã ð¡¼Š-𡼼𪩓-𪩖𫶕𫶖𭗔-𭗞嶦-嶶㠑-㠗𡼽-𡽈𡽊-𡽛𪩗-𪩚𫶗-𫶜𭗟𭗠嶷-嶺嶼-嶿㠘-㠜𡽉𡽜-ð¡¾ð¡¾»ðª©›-ðª©ð«¶ð­—¡-𭗤巀-å·‚ã -㠟𡾂-𡾖𡾠𫶞𭗥-𭗫嶻巃-å·…ã  -㠣𡾘-𡾟𡾡-𡾭𣦭𪩞𫶟-𫶣𭗬-𭗱巆-巌㠤𡾮-𡾺𭗲-ð­—´å·å·å·ã ¥ã ¦ð¡¾¼-𡿆𪩟𫶤𭗵𭗶巎巑-巕巗㠧𡿇-𡿑𪩠𭗷巖巘-巚𡿒𡿓𭗸𡿔-𡿜𫶥𭗹ð¡¿-𡿟𫶦𡿠𡿡𡿣𡿤㠨𡿢𡿥]
-[radical 47=⼮巛:å·›-å·ð¡¿¦ð¡¿¨ð«¶§ð¡¿§ð­—ºå·žå·Ÿã ©ð¡¿©-𡿭𭗻𭗼巠𡿮-𡿰𪩡𭗽𭗾𡿱-𡿶𭗿𡿷-𡿻𪩢𭘀𠙗𡿼𡿽𫶨ð­˜å·¢å·£ð¡¿¾-𢀀𫶩ð¢€ð¢€‚巤𢀃-𢀋𫶪𢀌-ð¢€]
-[radical 48=⼯工:工㠪𢀑-𢀕𭘂左-巨𢀖-𢀙巩巪𢀚𢀛𪩣𭘃-𭘅巫𢀜-𢀞𫶫𢀟𫶬𭘆巬巭𢀠𫶭𭘇𭘈差㠫㠬𢀡-𢀣𪩤𫶮巯㠭𢀤𢀥𪩥巰𢀦𢀧𪩦𫶯𭘉𪩧𫶰㠮𢀨-𢀫𫶱𢀬𢑰𤀢𫶲𫶳𢀭𪩨𫶴𢀮𪩩𢀯-𢀲𪩪]
-[radical 49=â¼°å·±:å·±-巴𢀳㠯𢀴-𢀶𫶵巵𪩬𭘊巶㠰𢀷𢀸𪩫𭘋𭘌巷-巻𢀹-𢀻ð­˜å·¼ð¢€¼-𢀿𫶶㠱ð¢€-ð¢„𫶷巽ð¢…-ð¢‰ðª©­ðª©®ð«¶¸ð«¶¹ð­˜Žð­˜ð¢Šðª©¯ð¢‹-ð¢ð¢ðª©°ðª©±ð«¶ºð¢Žð¢ð«¶»ð«¶¼ð­˜ð¢‘]
-[radical 50=⼱巾:å·¾-帅㠲㠳ð¢’-ð¢”𪩲𫶽𫶾帆-师㠴-ã ¶ð¢•-ð¢¤ð­˜‘𭘒帉-å¸ã ·-ã ¼ð¢¥-ð¢ºð«¶¿-𫷂𭘓𭘔帑-帜㠽-ã¡€ð¢»-ð¢‚𫷃𫷄𭘕-𭘚å¸-帧ã¡-㡆ð¢‚-𢂰𫷅𭘛-𭘞帨-帱㡇㡈𢂱-𢃌𪩳𭘟-𭘣帲-帼㡉-ã¡Žð¢ƒ-𢃪𪩴-𪩷𫷆𫷇𭘤-𭘦帽-幇幉ã¡-㡖𢃫-𢄉𪩸-𪩺𫷈𫷉𭘧-𭘮幊-å¹ã¡—-㡛𢄊-𢄞𫷊-ð«·ð­˜¯-𭘱幈幑-幙幛㡜-㡟𢄟-𢄲𪩻𭘲-𭘴幚幜-幥㡠㡡𢄳-𢅌𪩼𭘵幦-幩㡢-㡤ð¢…-𢅞𪩽ð«·ð«·‘𭘶-𭘸幪-幬㡥㡦𢅟-𢅨𪩾幭-幯𢅩-𢅬𭘹-𭘻幰𢅭-𢅷𪩿𫷒𫷓𭘼幱㡧㡨𢅸-𢅺𪪀𢅻-𢅽㡩㡪𢅾-𢆂𭘽𢆃-𢆈]
-[radical 51=⼲干:干平𢆉年幵𫷔𭘾𢆊-𢆌ðªªð«·•ð«·–并-幸ð¢†-ð¢†ð­˜¿ð­™€ð¢†‘-𢆕ð­™ð¢†–-𢆙𭙂𭙃𢆚𪪂𪪃𫷗𢆛-ð¢†ðªª„幹𢆞-𢆠𪪅𪪆𫷘-𫷚𢆢𢆤𫷛𭙄-𭙆𢆥𪪇𫷜ð«·ð¢†¦-𢆪𪪈𫷞𭙇𢆫𪪉𢆬-𢆮]
-[radical 52=⼳幺:乡幺幻𢆯-𢆱𭙈𭙉幼𢆲-𢆵𭙊𢆶𪪊𢆷-𢆺𭙋𢆻-𢆾幽𢆿𢇂𪪋𫷟𭙌ð¢‡ð¢‡ƒ-𢇉幾㡫㡬𢇊𫷠𫷡𠅹𢇋𫷢𫷣㡭𢇌-𢇓𫷤㡮𢇖]
-[radical 53=⼴广:广-広𠆲𫷥ð­™-ð­™åº„-庆㡯-㡱𢇗-𢇢𫷦ð­™-𭙒庇-应庘㡲㡳𢇣-𢇱𪪌ðªªð«·§ð­™“-𭙗底-店庙-废㡴-㡻𢇲-𢈆𪪎ðªªð­™˜ð­™™åº -度㡼-㢂𢈇-𢈘ðªªðªª‘𫷨𫷩𭙚𭙛座-庯㢃-㢇𢈙-𢈱𪪒-𪪗𫷪-𫷯𭙜-𭙡庰-庼㢈-㢌𢈳-𢉕𢉗-𢉚𪪘𪪙ð«¶ð«·ð«·°-𫷵𭙢𭙣庽-廃廊ã¢-ã¢ð¢‰›-𢉻𢉽𢉾𪪚𪪛𫷶-𫷹𭙤-𭙧廅-廉廋廌鿮㢑𢉼𢉿-𢊔𪪜ðªªð«·ºð«·»ð­™¨-𭙭廄å»-廘㢒-㢕𢊕-𢊬𪪞-𪪠𫷼-ð«·¿ð­™®-𭙳廙-廤㢖-㢘𢊭-ð¢‹ðªª¡-𪪣𫸀𭙴-𭙻廥-廪㢙-㢜𢋂-ð¢‹ðªª¤ðªª¥ð«¸ð«¸‚ð­™¼-𭚃𢋑-𢋛ð¢‹-𢋠𪪦-𪪨𫸃-𫸆𭚄廫𢋡-𢋭𪪩𫸇𭚅-𭚈廬廭é¾ã¢ð “Œð¢‹®-𢋺𪪪𫸈𭚉-ð­š‹å»®-廰㢞𢋻-𢌃𫸉𭚌廱𢌄-𢌆𪪫𫸊ð­šð­šŽå»²ð¢Œˆ-𢌌𫸋𫸌ð­šð­šð¢Œ-𢌑ð«¸ð«¸Žð¢Œ’𭚑廳ð«¸ð¢Œ“ð«¸ð¢Œ”-𢌖]
+[UCA version = 13.0.0]
+# Unified_Ideograph: 92856 characters
+[Unified_Ideograph 4E00..9FFC FA0E..FA0F FA11 FA13..FA14 FA1F FA21 FA23..FA24 FA27..FA29 3400..4DBF 20000..2A6DD 2A700..2B734 2B740..2B81D 2B820..2CEA1 2CEB0..2EBE0 30000..3134A]
+
+[radical 1=⼀一:一𪛙ä¸-丆𠀀-𠀂𬺰𰀀万-丌äºå„𠀃-𠀆𪛚𪜀ðªœð«€ð¬º±-𬺴ð°€-𰀄ä¸-专丗𠀇-𠀌𪜂𫠡𬺵-𬺹𰀅-𰀇且-世丘-ä¸ã€ð €-𠀗𫠢𫠣𬺺-𬺾𰀈-𰀊丞-丢ãã‚𠀘-𠀚𠀜𠀞-ð € ð«ð« ¤ð« ¥ð¬º¿-𬻉𰀋丣-严丽鿖𠀡-𠀤𠀦-𠀨𠀪𠀫ð«‚ð« ¦-𫠩𬻊-𬻒𰀌並丧𠀬-𠀮𠀰-𠀴𪜃𫠪-𫠭𬻓-𬻘ð°€é¿—𠀵𠀶𠀸𠀺𠀻𪜄𫠮𬻙-ð¬»ð°€Ž-𰀑𠀽-ð €ð ¤¢ðªœ…ð« ¯-𫠲𬻞-𬻠𰀒-𰀕ð -ð …𪜆𫠳-𫠵𬻡-𬻥ð †-ð ˆð Šð ‹ð« ¶ð¬»¦-𬻨𰀖-𰀘ð Œð ð« ·-𫠼𬻩-𬻮𰀙𰀚ð Ž-ð ’ð«ƒð« ½ð¬»¯ð°€›ð°€œä¶¶ð “ð ”𫠾𫠿𬻰ð°€ð •ð —-ð ›ð ð¤³ðªœ‡ð«¡€ð –𰀞ð Ÿð«¡ð«¡‚ð  ð°€Ÿð¬»±]
+[radical 2=â¼ä¸¨:丨丩ð ¡ð ¢ä¸ªä¸«ãƒã„𫡃𫡄𰀠中-丰ð £ðªœˆð«¡…𰀡丱ð ¥ð°€¢ð ¦ð¬»²ð¬»³ð°€£ä¸²ð §ð ¨ð«¡†ä¸³ð ©-ð ¬ð«¡‡ð°€¤ä¸´ð ­-ð ¯ðªœ‰ð¬»´ð°€¥ä¸µð °ð ±ð«¡ˆð«¡‰ð¬»µ-𬻷𰀦𰀧ð ³-ð µð¬»¸ð¬»¹ð ¶ð«¡Šð ¸ð«¡‹ð«¡Œð ¹ð°€¨ð ºð«¡ð »ð«¡Ž]
+[radical 3=⼂丶:丶丷𪜊丸义ð ¼ð ½ð¬»ºä¸¹ä¸ºð ¿ä¸»ä¸¼ð ‚€-𠂂𬻻𪜋举𬻼𠂃𰀩𬻽𠂄𬻾𠂅]
+[radical 4=⼃丿:丿-乄ã…𠂆-𠂊𬻿-𬼂𰀪𰀫久-么乊𠂋-ð ‚Žð«„ð«¡ð¬¼ƒä¹‹ä¹Œå°¹ð ‚-𠂓𬼄-𬼆ä¹-ä¹ð ‚”-ð ‚¡ð«¡ð¬¼‡ð¬¼ˆð°€¬ä¹‘-ä¹”ã†ð ‚¢-𠂧𠂩-𠂫𠂭𪜌𫡑-𫡓𬼉乕𠂯𫡔𬼊乖𠂲𠂳𠂶𫡕-𫡘𬼋乗𠂴𠂷ðªœð«¡™ð«¡šä¹˜ð ‚¹-𠂾𪜎ðªœð«¡›ð«¡œð¬¼Œ-ð¬¼ð ‚¿-𠃂ð«¡ð¬¼ð ƒƒð ƒ„ð«¡žð°€­-𰀯𠃆𠃅𬼑𠃇𫡟𫡠𬼒-𬼕𠃈𫡡]
+[radical 5=⼄乙:ä¹™-乛𠃉-𠃎𠃑乜ä¹é¾´ð ƒð ƒä¹ž-ä¹ ã‡-ã‰ð ƒ’-𠃔𬼖𰀰乣-书ãŠã‹ð ¾ð ƒ•-ð ƒð«¡¢ð¬¼—𬼘𰀱乧ãŒ-ã𠃞-𠃣ðªœð«¡£ð¬¼™-𬼜𰀲-𰀵乨-ä¹°ã-ã•ð ƒ¤-𠃨𪜑𫡤ð¬¼-𬼢𰀶-𰀼乱乲ã–-ã˜ð ƒ©ð ƒªð ƒ¬ð §ðªœ’𪜓𫡥-𫡧𬼣𬼤𰀽-ð°€ä¹³-乸ã™-ã›ð ƒ­-𠃯𪜔𫡨𬼥-𬼧ð°-ð°ƒä¹¹-ä¹¼ãœ-ã ð ‚¸ð ƒ²-𠃷𪜕𫡩𬼨-𬼫ð°„-ð°ˆä¹½ð ƒ¸-𠃻𤱡𪜖𪜗𫡪-𫡬𬼬𬼭ð°‰-ð°‹ä¹¾-亀ã¡-ã£ð ƒ¼-𠄂𪜘𫡭𫡮𬼮-𬼱ð°Œäºã¤ð¥€ðªœ™ðªœšð¬¼²-𬼴ð°äº‚-亄𠄃𠄄𪜛𫡯𫡰𬼵𠄅-𠄈𢆡ð°Žð°ã¥ð°ð „‰ð°‘ã¦ð „Šð „‹]
+[radical 6=⼅亅:亅𠄌了ð „-ð „亇𠄑𬼶-𬼸予ã§ð „’-ð „”ð°’争𠀩𠄕𬼹亊𠄖-𠄘𪜜事ã¨ð „™ð¬¼ºð „šð°“ð°”ð „›ðªœð¬¼»ð „œð „𬼼]
+[radical 7=⼆二:二𠄞-ð „ äº-äºð¬¼½äº‘-亖𠄡ð°•äº—ð°–亘-亚𠄢-𠄧𫡱ð°—些亜𠀥𠄨-𠄪𫡲äº-亟ã©ð „«-𠄯𫡳𬼾𠄰-𠄳𬼿𬽀ð°˜ð „µ-𠄸ð¬½ð „¹ð „ºð«¡´ð „»ð¬½‚ð „¼-𠄾𫡵𫡶ð°™ð „¿ðªœžð«¡·ð°šð …€ðªœŸð°›ð«¡¸ð«¡¹]
+[radical 8=⼇亠:亠-亣ð …𠅂𪜠𪜡𬽃交-产ãªã«ð …ƒ-ð …‡ð«…𬽄ð°œäº¨-亪ã¬ð …ˆ-𠅋𪜢𫡺𬽅-𬽇享京ã­ð …Œ-𠅒𬽈𬽉亭-亲𠅓-𠅕𬽊-𬽌亳𠅖𠅘-ð …ð«¡»ð¬½ð …ž-𠅧𪜣𬽎-𬽒ð°äº´äºµð …¨-𠅯𠅲𪜤𫡼𬽓𬽔ð°žð°Ÿäº¶äº·ã®ð …³-𠅸𠅺-𠅼𠆀𫡽𫡾𬽕-𬽘𠅾𠅿𫡿𫢀ð †-𠆉𪜥𬽙𬽚ð° äº¸ð †‹-𠆒𠆔𠆖-𠆘𬽛𬽜ã¯ð«¢ð«¢‚ð¬½ð¬½žð †šð †ðªœ¦ð«¢ƒäº¹ð †žð¬½Ÿð«¢„𬽠𠆟-𠆡]
+[radical 9=⼈人:人亻𠆢亼-亿𠆣-𠆥𫢅什-仓𠆦-𠆨𪜧𫢆-𫢈𬽡𬽢ð°¡ä»”-ä»­ã°-ã·ð †©-𠆭𠆯𠆰𠆳ð«†ð«¢‰ð«¢Šð¬½£-𬽨ð°¢ð°£ä»®-伬佤ã¸-㑀𠆴-𠇑𠇓-𠇕𪜨-𪜫𫢋-ð«¢ð¬½©-𬽭ð°¤-ð°ªä¼­-佣佥-佨ã‘-㑈𠇖-ð ˆðªœ¬-𪜴𫢑-𫢘𬽮-𬽺ð°«-ð°°ä½©-侭鿇㑉-㑖𠈃-𠈣𠈥-𠈬𪜵-𪜺ð«‡ð«ˆð«¢™-ð«¢ð¬½»-𬾄ð°±-ð°‚„ä¾®-ä¿­ã‘—-㑢𠈭-𠉢𪜻-ðª‚𫢞-𫢩𬾅-𬾙𰂅-ð°‚Žä¿®-倿㑣㑥-㑭𠉣-𠊦𠋟ðªƒ-ðªŠð«‰ð«¢ª-𫢼𬾚-𬾩ð°‚-ð°‚–å€-å¿ã‘¤ã‘®-㑲𠊧-ð ‹ð ‹’-ð ‹žð ‹ -𠋬ðª‹-ðª•ð«Šð«¢½-𫣃𬾪-𬾼𰂗-ð°‚¡å‚€-傩鿘㑳-㑺𠋭-𠌅𠌇-ð Œð Œ -𠌩ðª–-ðªŸð«£„-ð«£ð¬¾½-ð¬¿ð°‚¢-𰂩傪-åƒé¿™ã‘»-ã’𠌫-ð ¡ð £ð ¤ð ¦-ð ¬ð Žµðª -ðª¤ð«‹ð«£‘-ð«£–ð¬¿-𬿠𰂪-𰂬僎-僱僳僴僷㒂-ã’ð ¥ð ­-𠎗𠎙𠎚ð Ž-ð Ž´ð ðª¥-ðªªð«£—-𫣢𬿡-𬿮𰂭-𰂲僲僵僶僸-å„ã’‘-㒘𠎷-ð ð ‘ð ”-ð ¦ðª«-ðª¯ð«££-𫣬𬿯-𬿺𰂳-ð°‚¹å„-å„žå„«é¿šã’™-ã’œð ’ð ¨-ð ‡ðª°-ðª³ð«£­-𫣱𬿻-𭀀𰂺-𰂽償-優儬ã’ã’žð ˆ-ð ›ð -ð ¢ðª´-ðª¶ð«£²-𫣸ð­€-ð­€…ð°‚¾-ð°ƒå„­-儲㒟㒠ð £-ð ºðª·-ðª¹ð«£¹-𫤃𭀆-𭀌𰃂-𰃆儳-儵㒡-ã’£ð »-ð ‘𠑃-ð ‘Œðªº-ðª¼ð«¤„-𫤈ð­€-ð­€ð°ƒ‡ð°ƒˆå„¶ã’¤-ã’¦ð ‘-ð ‘–ð ‘žðª½ð«¤‰-𫤋ð­€ð­€‘å„·-儺㒧㒨𠑗-ð ‘ð ‘Ÿ-ð ‘£ðª¾ð«¤Œ-𫤑儻儼𠑤-𠑩𭀒儽㒩𠑪-𠑯𫤒-𫤔𭀓𭀔𰃉儾𠑰𫤕𭀕𫤖㒪𠑲𠑳𠑵]
+[radical 10=⼉儿:å„¿-元𠑶𭀖-𭀘兄𠑷𠑸𭀙-ð­€ð°ƒŠå……-å…Šã’«ð ‘¹-𠑼𫤗克-å…‘ð ‘½-𠒂𭀞-𭀠𰃋兒-兖㒬𠒃-ð ’‹ðª¿ð«¤˜ð­€¡-𭀤𰃌兗-兙𠒌-ð ’𪞀ð«Œð«¤™ð­€¥å…šå…›ã’­ð ’-ð ’–ðªžð­€¦ð­€§å…œ-兞㒮𠒗-ð ’𫤚𫤛𭀨ð°ƒå…Ÿå… ð ’ž-𠒣𫤜ð«¤ð­€©-𭀭𰃎兡𠒤-𠒦𪞂𫤞𭀮𭀯ð°ƒð°ƒå…¢ð ’§-𠒯𫤟𫤠𭀰-𭀳𰃑𰃒𠒰-𠒲𠒴-𠒷𪞃-𪞅𭀴兣𠒳𠒸-𠒾𭀵𰃓𰃔𠒿-𠓅𠓇𫤡𫤢𭀶-𭀸㒯𠓆𠓈-𠓊𫤣-𫤦𭀹𭀺𠓋𠓎𪞆𫤧𰃕ð “ð “ð “兤𠓑-𠓔𫤨𠓕-ð “š]
+[radical 11=⼊入:入兦𠓛內𠓜-𠓞㒰㒱𠓟𭀻全氽㒲𠇒𠓠-𠓣𰃖㒳㒴𠓤-𠓨𭀼-𭀾兩𠓩𭀿𰃗-𰃙兪𠓪-𠓬ð­€ð°ƒšð°ƒ›ð “­-𠓰𪞇𫤩𠓱𰃜𠌆𠓲𠓳𫤪𠓴-ð “¼ð­ð “½ð­‚𠓾𠓿ð­ƒ]
+[radical 12=⼋八:八𠔀公-å…¯ð ”-𠔄兰𠔅𠔆ð­„å…±-兴龹𠔈𠔉𪞈𫤫𫤬ð­…ð­†ð°ƒ-𰃟兵㒵-㒷𠔊-ð ”ð­‡å…¶-å…¸ð ”𠔑𠩖𫤭ð­ˆ-ð­‹ð°ƒ å…¹å…»ã’¸ð ”’-ð ”—ð­Œ-ð­Žð°ƒ¡å…ºå…¼ð ”™-𠔛𫤮𫤯ð­ð­ð°ƒ¢ð°ƒ£å…½ð ”œð ”𫤰ð­‘-ð­“𰃤𠔞-𠔧𪞉𫤱ð­”-ð­–兾兿𠔨-𠔮𪞊𫤲ð­—ð­˜ð°ƒ¥ð ”¯-𠔱𠭻𪞋ð­™ðªžŒð­š-ð­œå†€ð ”³-ð ”µðªžð œå†ð ”¶ð ”·ð«¤³ð ”¸-𠔺𫤴𫤵ð­ã’¹ð­žð«¤¶]
+[radical 13=⼌冂:冂𠔼𰃦冃-冈𠔽-ð •€ð­Ÿå†‰-册ð •-ð •Šð­ å†å†Žð •‹-ð •ð­¡ð­¢ð°ƒ§ð°ƒ¨å†ð •-𠕕𪞎å†ã’ºð •–-ð •šð­£-ð­©å†‘冒𠕛𠕜ð«ð­ªð­«å†“冔ð •-ð •Ÿð­¬-ð­¯ð°ƒ©ð°ƒªå†•ã’»ã’¼ð • -𠕢最㒽𠕣-ð •¥ð­°ð­±ð°ƒ«ã’¾ð •¦ð •§ð«¤·ð •¨-𠕪𠕬𰃬𰃭𠕭-ð •°ð­²ð •±ã’¿ð •²]
+[radical 14=â¼å†–:冖-冘㓀ã“𠕳𠕴写冚𠕵-𠕸ð­³ð°ƒ®å†›å†œð •¹-ð •¿å†ð –€-ð –ƒðªžðªžð«¤¸ð°ƒ¯ð°ƒ°å†žð –„-𠖆𪞑ð­´å†Ÿå† ã“‚ð –‡-𠖋𫤹𫤺冡-冧𠖌-𠖒𪞒ð­µ-ð­»ð°ƒ±å†¨ð –“𪞓ð­¼-ð­¿ã“ƒð –”-𠖙𪞔𭂀𠖚𠖛ð­‚𭂂𰃲冩𠖜-𠖞𪞕㓄𫤻𭂃-𭂅冪𠖠-𠖥𫤼𠖦-𠖨𫤽𠖩-𠖫𰃳𰃴]
+[radical 15=⼎冫:冫𠖬𫤾㓅𠖭𭂆𭂇𰃵冬-冯𠖮-𠖰𪞖𫤿𭂈冰-冴㓆㓇𠖱-𠖶𪞗-𪞚𫥀-𫥃𰃶-𰃸况-冻鿑㓈𠖷-ð –¿ð —𪞛-ðªžð«¥„-𫥈𭂉𭂊𰃹𰃺冼-净㓉-ã“𠗀𠗂-𠗇𪞞𫥉-𫥋𭂋-𭂎𰃻-𰃽å‡-凃㓎ã“ð —ˆ-𠗗𪞟-𪞡ð«Žð«¥Œ-𫥎ð­‚ð­‚𰃾凄-凎ã“-ã“’ð —˜-𠗤𪞢-𪞥ð«¥ð«¥ð­‚‘-𭂕𰃿-ð°„å‡-凑㓓𠗥-𠗰𪞦-𪞨ð«ð«¥‘-𫥔𭂖-𭂘𰄂-𰄄凒-凖㓔㓕𠗱-𠗹𪞩𪞪𫥕𫥖𭂙-𭂛𰄅-𰄇凗㓖𠗺-𠘃𪞫𪞬𫥗𫥘𭂜-𭂞𰄈-𰄊凘㓗𠘄-𠘉𠘓𪞭𫥙𭂟-𭂡𰄋𰄌凙-凜𠘊-𠘑𪞮𫥚-𫥜𭂢-𭂤ð°„å‡å‡žð ˜’𠘔𠘕𪞯𭂥凟𠘖-𠘜𥂳𭂦𰄎ð°„ð ˜-𠘡ð«¥ð­‚§ð ˜¢ð ˜£ðªž°ð­‚¨ð ˜¤ð ˜¥é¿›ð ˜¦]
+[radical 16=â¼å‡ :几𠘧𠘨凡-凣ðª›å‡¤ð ˜©-ð ˜°ð­‚©-𭂬凥-凧𠘱-𠘴凨-凫𠘵-𠘻𪞱𫥞𫥟𭂭-𭂯凬𠘼-𠙅𪞲𭂰凭-凯𠙆-𠙎𠫮𭂱𭂲ð ™-𠙑𭂳𭂴𠙒-𠙖𪞳𫥠ð°„凰㓘𠙘𠙙𠙛-𠙞𪞴𫥡𭂵𭂶凱凲ð ‰ð ™Ÿ-𠙣𫥢𭂷𠙤-𠙧𪞵𫥣𭂸𭂹凳凴𠙨-ð ™«ð ™­-𠙰𭂺𠙱-ð ™³]
+[radical 17=â¼å‡µ:凵𠙴𠙵凶𠙶-𠙸𰄑凷-击𠙹-𠙻𠙽𪞶凼㓙𠙾-𠚊𭂻函𠚋-ð šðªž·ð°„’凾𠚎-ð šð š’𠚓𪞸𫥤𭂼𰄓𰄔𠚔-𠚗𭂽𰄕凿𠚘𪞹𫥥𫥦𭂾𪞺𪞻𫥧-𫥩𠚙𠚚ð¢­ð«¥ªð«¥«ð­‚¿ð°„–𠚜𫥬𭃀𰄗𰄘ð šð šžð­ƒð¢‡•ðªž¼ð šŸðªž½ð«¥­-𫥯𠚠-𠚢]
+[radical 18=⼑刀:刀-刂𠚣刃刄𠚤刅-刈𠚥-𠚬𭃂-𭃄𰄙𰄚刉-åˆã“š-㓜𠚭-𠚴𠚶𠚻𫥰𫥱𭃅-𭃇𰄛-ð°„刎-创ã“㓞𠚵𠚷-𠚺𠚼-ð ›ðªž¾-𪟀𫥲-𫥴𭃈-𭃌𰄞-𰄢刜-刭㓟㓠𠛎-𠛦ðªŸðªŸ‚ð«¥µ-ð«¥»ð­ƒ-𭃔𰄣-𰄦刮-剂㓡-㓦𠛧-ð œðªŸƒ-𪟅𫥼-𫥿𭃕-𭃡𰄧-𰄫剃-剑㓧-ã“«ð œ-𠜰𪟆𪟇ð«ð«¦€ð«¦ð­ƒ¢-𭃨𰄬-𰄲剒-剧㓬-㓰𠜱-ð œð ¶ðªŸˆðªŸ‰ð«¦‚-𫦅𭃩-𭃳𰄳-𰄶剨剪-剱剶㓱-㓶ð -ð µð ·-ð ¾ðªŸŠ-ðªŸð«¦†-𫦌𭃴-𭃾𰄷-𰄺剩割-創㓷-ã“»ð ¿-ð ž›ð ž-𠞤𪟎-ðªŸð«¦-𫦑𭃿-𭄅剷-剿㓼㓽𠞥-ð ŸðªŸ‘-𪟓𫦒-𫦔𭄆-ð­„ð°„»-𰄽劀-劄㓾-㔉𠟂-ð ŸŸð Ÿ¡-𠟥𫦕-𫦙ð­„ð­„‘ð°„¾-𰅂劅-åŠã”Šð Ÿ ð Ÿ¦-𠟹𪟔𫦚𭄒𰅃åŠ-劔㔋-ã”𠟺-𠠊𪟕𪟖𭄓-𭄗𰅄劕㔎ã”ð  Œ-𠠚𫦛𭄘𭄙𰅅-ð°…‡ã”ð  ›-𠠠𫦜-𫦞𭄚𭄛劖㔑𠠡-𠠣𫦟𫦠𭄜㔒𠠤𠠦-𠠩劗劘𠠥𠠪-𠠭劙劚𠠮𫦡𰅈𠠯ð­„𫦢𠠰𠠱𫦣]
+[radical 19=⼒力:力劜𠠲𫦤åŠåŠžð  ³-𠠵𭄞功-劢㔓㘞𠆮𠠶-𠠸𭄟𭄠劣-动㔔-ã”–ð  ¹-ð ¡ð«¦¥ð°…‰åŠ©-労㔗㔘𠡂-ð ¡ðªŸ—-𪟙𫦦𫦧𰅊-𰅌劵-势㔙-㔛𠡑-ð ¡ðªŸšðªŸ›ð«¦¨ð­„¡-ð­„¥ð°…ð°…Žå‹€-勋㔜𠡞-𠡪𪟜𫦩-𫦭𭄦-ð­„«å‹Œ-å‹‘ã”-㔟𠡫-𠡺ðªŸ-𪟟𫦮-𫦲𭄬-ð­„²ð°…ð°…å‹’-勖勘-å‹šã” ð ¡»-𠢄𪟠𫦳𭄳-𭄶𰅑-ð°…“å‹›-勞㔡𠢅-𠢒𪟡𪟢𫦴𫦵𭄷-𭄹𰅔募-勧𠢓-𠢟𪟣ð«‘𫦶𫦷𭄺-𭄾𰅕勨-勭㔢𠢠-𠢯𪟤𪟥𫦸𭄿-𭅃𰅖𰅗勮-勲𠢰-𠢵𪟦𫦹𫦺𰅘勳𠢶-𠢸𫦻𫦼勴-勶㔣-㔦𠢹-𠢿㔧𠣀-𠣃𫦽𫦾𰅙勷𠣄𠣅勸𠣆𠣇𪟧𰅚𠣈-𠣊𫦿𠣋]
+[radical 20=⼓勹:勹-匂𠣌𭅄𰅛匃-匇ð £-ð £ð«§€ð«§ð­……匈𠣑-𠣓𭅆匉𠣔-𠣗𭅇𭅈匊-匌𠣘-ð £ð­…‰ð­…ŠåŒð £ž-𠣣𭅋𰅜ð°…匎𠣤-𠣭𫧂𫧃åŒåŒã”¨ð £®-𠣴𭅌𰅞𰅟匑匒㔩𠣵-𠣷𫧄ð­…匓㔪𠣸-𠣼𭅎ð­…ð £½-𠤂𰅠匔𠤃𫧅𠤄-𠤇𫧆𠤈-ð ¤]
+[radical 21=⼔匕:匕𠤎𪟨化㔫ð ¤ð«§‡åŒ—ð ¤ð°…¡ðªŸ©ð­…𠤑-𠤕㔬𠤖𭅑𰅢𠤗-ð ¤ðªŸªð­…’𠤞-𠤡𭅓匘匙㔭𫧈𫧉𠤣𠤤𰅣𠤥𪟫𠤦-𠤪𫧊]
+[radical 22=⼕匚:匚𠤬𠤭𫧋𭅔匛-匞𫧌𭅕𭅖匟-匢𠤮-𠤱𪟬ð«§-ð«§åŒ£-匥㔯㔰𠤳-𠤷𪟭𪟮ð«§ð«§’𭅗𭅘𰅤匦𠤸-𠤻𫧑𭅙𭅚匧-匩𠤼-𠥂𠥄-𠥈𪟯𫧓匪匫龨𠥉-ð ¥ðªŸ°ð«§”𭅛𰅥𰅦匬-匮㔱𠥎ð ¥ð­…œð­…ð°…§ð ¥-𠥕𫧕匯㔲-ã”´ð ¥–-𠥘𫧖𰅨匰-匲㔵𠥙-𠥛𪟱𫧗𭅞匳𠥜-𠥡𫧘𫧙匴𠥢𠥣𫧚匵𫧛𫧜𠥤𠥥𰅩匶𠥦𠥧匷𠥨𠥩𪟲𠥪ð«§ã”¶ð ¥«ð ¥¬]
+[radical 23=⼖匸:匸-区𠥭𠤲𠥮𠥯𰅪医㔷𠥰-𠥲𰅫匼𠥳匽𠥃𠥴𠥵𭅟𠥶𰅬匾-å€ã”¸ð ¥·-𠥺]
+[radical 24=â¼—å:å-åƒå…-åˆã”¹ð ¥»ð ¥¼ð ¥¿ð­… ð°…­ð°…®å‰åŠåŒð †±ð ¥½ð ¥¾ð ¦€ð ¦ð°…¯å‹å-å㔺㔻𠦂-ð ¦ð°…°ð°…±ð ¦‘-𠦗𪟳ð«’𫧞𰅲-ð°…´å‘-å–龺𠦘-𠦢𣥥ð«“𫧟𫧠𰅵å—å˜ð«”𫧡𫧢𭅡𭅢𰅶𰅷𠦣-𠦩𪟴𭅣𰅸𰅹å™ð ¦ª-𠦯𪟵𭅤𰅺𰅻åšð ¦°-𠦳𫧣𭅥𭅦㔼𠦴-𠦼𪟶𫧤𫧥𭅧𰅼𠦽-𠦿𪟷𫧦𰅽𰅾𠧀-𠧄𪟸𪟹𫧧𫧨𭅨-𭅪𠧅-𠧈𪟺𫧩-𫧫𰅿𠧉-ð §ðªŸ»ð­…«ð­…¬ð°†€ð°†ð §Žð«§¬ðªŸ¼ð­…­å›ð §ð«§­ð §ð­…®ð §‘𰆂]
+[radical 25=⼘åœ:åœð §’ååžðªŸ½åŸ-å¢ð §“ð €ð §”-𠧘𭅯å£å¤ð §™-𠧜𡥋𪟾𭅰å¥-å§ã”½ð §ž-𠧨𫧮𰆃𠧩-𠧲𠭉𫧯𰆄-𰆆𠧳-𠧷𠧹𪟿𫧰å¨ð §º-𠧿𭅱𠨀-𠨂𠨄𫧱𫧲𰆇𰆈𠨅𫧳𫧴𠨆𠨇𪠀𫧵𠨈-𠨊𰆉𫧶-𫧸𠨋𠨌]
+[radical 26=â¼™å©:å©ð°†Šåªå«ã”¾ã”¿ð­…²å¬ð ¨-ð ¨ð«§¹ð­…³ð°†‹å­-å¯ð ¨‘ð­…´å°å±ð ¨’-𠨗𫧺𭅵𰆌ð°†å²-åµã•€ð ¨˜ð°†Žå¶-åºã•ðª ð­…¶-ð­…ºð°†å»-å½ð ¨™-ð ¨ðª ‚ð°†ð ¨žð­…»ð­…¼å¾å¿ð«§»ð°†‘𰆒𠨟-𠨡𫧼厀åŽð ¨¢-𠨤𫧽𭅽𭅾𠨥𫧾𫧿𭅿𰆓𫨀𰆔𠨦-𠨪ð«¨ð ¨«]
+[radical 27=⼚厂:厂-历𠨬厇-厉𠨭-𠨳𪠃𫨂𭆀𰆕厊-åŽã•‚-㕄𠂬𠂮𠨴-𠨿ð­†ð°†–𰆗厎-厑㕅-㕇𠂰𠩀-𠩉𪠄ð«•ð«¨ƒð«¨„𭆂𭆃𰆘厒-厕㕈㕉𠩊-𠩕𪠅𪠆𫨅-𫨈𭆄厖-厛㕊𠩗-𠩦𪠇-𪠊𫨉𫨊𭆅𰆙𰆚厜-原虒㕋-ã•ð ©§-𠩷𪠋-𪠎ð«–ð«—𫨋𭆆-𭆈𰆛-𰆟厠-厣厩𠩸-𠩾𠪀-𠪆ðª ðª ð«¨Œ-ð«¨ð­†‰-𭆋厤-厨㕎𠪇-ð ªðª ‘𪠒𫨑-𫨗𭆌-ð­†ð°† -𰆦厪厫ã•ð ©¿ð ª‘-𠪘𪠓-𪠕𫨘-𫨛𭆑𭆒𰆧厬-厰ã•ã•‘𠪙-𠪬𪠖𪠗𫨜ð«¨ð­†“-𭆕𰆨𰆩厱厲㕒𠪭-𠪸𪠘𪠙𫨞𫨟𭆖𠪺-𠪾𫨠-𫨢𭆗厳㕓𠪿𪠚𫨣𰆪𰆫𠫀-𠫆厴𠫇𪠛𫨤𰆬𠫉-ð «Žã•”ð «ð«¨¥ð­†˜ð «åŽµð «‘ð «’]
+[radical 28=⼛厶:厶𠫓-𠫖厷-厹㕕𠫗𠫘𫨦厺-厼𠫙-ð «ð°†­åŽ½åŽ¾ð «ž-𠫥𭆙𭆚县𠫦-𠫨𫨧å€-å‚ð «©-𠫭𠫯-𠫲𠫴-𠫸𪠜𫨨𫨩𭆛-ð­†ð°†®ã•–ð «¹-ð «¼ðª ð«¨ªð­†ž-𭆢åƒå„㕗㕘𠫽𠫾𪠞𫨫𭆣å…ð «¿-𠬅𦎅𪠟𰆯𠬆-𠬌𪠠𫨬-𫨮𭆤å†ð ”²ð ¬-ð ¬å‡ã•™ð ¬‘𠬒𪠡𠬓𠬕-𠬗𫨯𫨰𠬔𠬘𠬙𪠢𫨱]
+[radical 29=⼜åˆ:åˆå‰ð­†¥åŠ-åŽã•šã•›ð ¬š-𠬠𪠣𪠤𫨲å-å‘𠬡-𠬨𭆦𰆰å’㕜𠬩-𠬰𪠥𫨳𭆧𭆨𰆱-𰆶å“ã•ð ¬±-𠬸𪠦𫨴-𫨸𰆷-𰆺å”-å˜ã•žð ¬¹-𠬾𪠧𪠨𫨹𭆩-𭆫𰆻-𰆽å™-å㕟𠫳𠬿-𠭈𪠩𪠪𫨺𫨻𭆬-𭆮𰆾𰆿åžåŸð ­Š-𠭔𪠫𪠬𫨼-𫨿𭆯𭆰𠭕-𠭤𫩀-𫩃𭆱𭆲𰇀ð°‡ã• ð ­¥-𠭮𪠭𪠮𫩄𫩅𭆳𭆴𰇂𰇃å ï¨Žð ­¯-𠭵𠭷-𠭺𪠯𫩆𫩇𰇄㕡𠭼-𠮂𡪞𪠰𫩈𫩉𭆵𭆶𰇅𠮃-𠮆𫩊𭆷å¡ð ®‡-𠮌𪠱𫩋𫩌ð ®-ð ®ð«©ð«©Žå¢ð ®å£¡ð ®‘𠮒𰇆𠮓-𠮘]
+[radical 30=â¼å£:å£ð ®™-𠮞ð«©å¤-å¾ã•£-㕥䶷𠙼𠮟-𠮪𪠲ð«©ð«©‘𭆸𭆹𰇇å¿-å—㕦-㕨䶸𠮫-𠯊𪛗ð«˜ð«©’-𫩗𭆺-𭇂𰇈𰇉å˜-呜㕩-㕶𠈂𠯋-𠰇𪠳-𪠵𫩘-𫩞𭇃-ð­‡ð°‡Š-ð°‡å‘-å’ã•·-ã•¿ð °ˆ-ð ±ðª ¶-𪠹𫩟-𫩪𭇎-ð­‡ð°‡Ž-𰇓咞-å“Ÿã–€-ã–Žð €·ð €¹ð ±-𠲫𪠺-𪡃ð«™ð«©«-𫩼𭇞-𭇴𰇔-𰇣哠-唧ã–-㖞𠲬-𠳤𠳦-𠳪𠳬-𠴥𪡄-𪡎𫩽-𫪑𭇵-𭈋𰇤-𰇰唨-啘啚-å•žå• -啪啬-啹㖟-㖵𠳥𠴧-𠶶ðª¡-𪡛𫪒-𫪰𭈌-𭈮𰇱-𰇾啙啫啺-喌喎-喾噅㖶-ã—‘ð ¶·-ð ·¡ð ·£-𠸵𠸻-𠸾𪡜-𪡩𫪱-𫫂𭈯-𭉙𰇿-ð°ˆå–å–¿-嗵㗒-㗡𠷢𠸶-𠸺𠸿-𠹯𠹳-𠻓𪡪-𪡷𫫃-𫫒𭉚-𭉽𰈑-𰈞嗶-嘞嘡-嘧噑噓㗢-ã—°ð ·ð »”-𠽠𪡸-𪢄ð«šð««“-𫫧𭉾-𭊠𰈟-𰈨嘟嘠嘨-噄噆-å™å™’噔噖-å™å™´ã—±-㗺𠆊ð “ð §ð ¹°-𠹲𠽡-𠾦𠾨-𠿆𡀔𡀦𪢅-ðª¢ð«›ð««¨-𫫵𭊡-ð­‹ð°ˆ©-𰈮噞-噳噵-噼㗻-㘄𠿇-𡀓𡀕-𡀥𡀧-ð¡€¼ð¢¨ð¨—“𪢎-𪢔𫫶-𫬆𭋂-𭋛𰈯-𰈶噽-嚓嚺㘅-㘈𡀽-𡂎𪢕-𪢘ð«œð«¬‡-𫬑𭋜-𭋯𰈷-𰈽嚔-嚤㘉-ã˜ð¡‚-𡃟𡃰𪢙-𪢞ð«ð«¬’-𫬛𭋰-𭌉𰈾-𰉂嚥-åš°ã˜-㘒𡃠-𡃯𡃱-𡄈𡄊-ð¡„𪢟-𪢡𫬜-𫬫𭌊-𭌡𰉃-ð°‰…åš±-嚹㘓㘔𡄑-𡄰𪢢-𪢤𫬬-𫬵𭌢-𭌯𰉆-𰉉嚻-囄å›ã˜•-㘗𡄱-𡅔𡅣𫬶-𫬸𭌰-𭌳𰉊𰉋囅-囋囎㘘𡅗-𡅢𡅤-𡅯𪢥ð«žð«¬¹ð­Œ´-𭌽𰉌囌å›å›ã˜™ã˜šð¡…°-𡅸𫬺-𫬼𭌾-ð­…囑-囓𡅹-𡆅𪢦𪢧𫬽-𫬿ð­†-ð­‹å›”囕㘛𡆆-𡆎𫭀ð­Œ-ð­ã˜œð¡†-𡆘ð­-ð­’𡆙𡆚𡆞ð«­ð­“ð­”囖𡆛-ð¡†ð§®¥ð­•-ð­˜ð¡†Ÿð­™]
+[radical 31=⼞囗:囗𡆠-𡆢囘-囜龱ã˜ð ¤ð¡†£-𡆦𪛘𫭂ð­šå›-団㘟𡆧-𡆳囤-囵𡆴-𡇇𪢨𫭃𫭄ð­›ð­œð°‰ð°‰Žå›¶-图㘠㘡𠀯𡇈-𡇌𡇎-𡇑𪢩𫭅𫭆ð­ð°‰ð°‰å›¿åœ€ã˜¢ð¡‡’-𡇟𪢪𫭇𫭈ð­žð­Ÿåœ-圆㘣𡇠-𡇯𪢫𫭉𫭊ð­ -ð­¤åœ‡-國åœð¡‡°-𡇻𡈀𪢬𪢭𫭋𫭌ð­¥-ð­¨ð°‰‘圌-圎åœð¡‡¼-𡇿ð¡ˆ-𡈉𤔗ð«­-ð«­ð­©ð­ªåœ‘-圕𡈊-𡈔𪢮ð«­ð­«ð°‰’圖-圙㘤𡈕-𡈡𪢯𫭑ð­¬-ð­°ð°‰“圚𡈢-𡈤𡈦-𡈩𫭒ð­±-ð­³ð°‰”圛圜𡈥𡈪-𡈬𪢰𫭓ð­´ð¡ˆ­-𡈱𫭔ð­µð¡ˆ²ð­¶ð¡ˆ³ð¡ˆ´ð­·ã˜¥ð¡ˆµ-𡈺𫭕ð­¸åœåœžð¡ˆ»ð­¹]
+[radical 32=⼟土:土-圡龶𡈼-𡈾𫭖𰉕圢-圧㘦𡈿-𡉇𪢱𪢲𫭗𫭘ð­ºð°‰–𰉗在-场𡉈-𡉖𪢳-𪢷𫭙𫭚ð­»-ð­½åœ»-å ã˜§-㘰𡉘-𡊃𪢸-𪣂𫭛-ð«­¤ð­¾-𭎄𰉘-𰉞å¡-垊㘱-㘵𡊄-𡊶𪣃-𪣊𫭥-𫭨𭎅-𭎎𰉟-𰉤型-垵城é¿ã˜¶-㘾𡊷-ð¡‹›ð¡‹-𡋬𪣋-𪣓𫭩-ð«­¯ð­Ž-𭎛𰉥-𰉭垶-åŸåŸ-埛ï¨ã˜¿-㙆𡋭-𡌥𣑧𪣔-𪣣𫭰-𫭻𭎜-𭎨𰉮-𰉶埜-埩埫-堕㙇-ã™ð¡Œ¦-ð¡£ðª£¤-𪣱𫭼-ð«®…ð­Ž©-𭎵𰉷-𰊀埪堖-堼堾-å¡‚å¡„-塈㙎-㙘ð¡¤-𡎭𪣲-𪣽ð«Ÿð«®†-𫮑𭎶-ð­‹ð°Š-𰊌堽塃塉-塱㙙-㙟𡎮-ð¡¬ð§¯§ðª£¾-ðª¤ð«®’-𫮚ð­Œ-ð­œð°Š-𰊘塲-墛㙠-㙦ð¡­-ð¡ð¦¥ˆðª¤Ž-𪤘ð« ð«®›-𫮢ð­-ð­©ð°Š™-𰊥墜-墧墩-墹㙧-㙯𠚛ð¡ž-ð¡‘𪤙-𪤞𫮣-𫮬ð­ª-ð­µð°Š¦-𰊱墺-壌龳㙰-㙶𡑞-𡑹𡑻-𡒈𪤟-𪤥ð«¡ð«®­-𫮯ð­¶-ð­½ð°Š²-𰊸å£-壗龼㙷-㙺𡒉-ð¡’ ð¡’¢-𡒯𪤦-𪤫𫮰-ð«®µð­¾-ð­€ð°Š¹ð°Šºå£˜å£™ã™»-㙽𡒰-ð¡’¿ð¡“-ð¡“‹ð¡“-ð¡“𪤬-𪤯𫮶-𫮸ð­-ð­„ð°Š»-𰋀壚-壠壢㙾㙿𡓀𡓌ð¡“-ð¡“šð¡“œ-𡓥𪤰𫮹-ð«®¼ð­…-ð­‰ð°‹ð°‹‚壣-壥㚀𡓦-𡓰𪤱𫮽-ð«®¿ð­Šð­‹ð°‹ƒð°‹„壦𡓱-𡓶𡓸𡓹𡓻-ð¡”𫯀ð­Œ-ð­Žð¡“ºð¡”‚-𡔉ð­ð°‹…壧壨𡔊-𡔎𰋆壩ãšð¡”-ð¡”•ð­å£ªãš‚ð¡”–ð­‘𰋇𡔗-𡔚]
+[radical 33=⼠士:士-壭𡔛壮𡔜壯-壳ð¡”𡔞𰋈𡔟ð­’壴壵𡔠-𡔢ð«¯ð«¯‚壶𡔣-𡔩𪤲𰋉壷壸𡔪-𡔭壹-壻㚃𡔮𡔯ð­“-ð­•å£¼ð¡”°ð¡”²-𡔵𪤳ð­–𰋊壽壾𡔶𡔸-𡔻𫯃𫯄ð­—𰋋𰋌壿夀㚄𡔼𡔽𫯅ð­˜å¤ð¡”¾-ð¡•„ð­™ð¡•…𡕇-ð¡•Œð­šð¡•ð«¯†ð«¯‡ð°‹ð¡…•ð¡•-𡕑𪤴𫯈ð­›ð«¯‰ð­œ]
+[radical 34=⼡夂:夂𡕒夃处𡕓𡕔ð­å¤…𡕕𡕖夆𡕗-𡕙备夈㚅𡕚ð­žð°‹Žð ™šð¡•›ð¡•œðªŒ›ð¡•ð«¯Šðª¤µ]
+[radical 35=⼢夊:夊ð­Ÿð¡•žð¡•Ÿå¤‹ð¡• ð¡•¡å¤Œð¡•¢-ð¡•¥ð­ ð­¡å¤‰å¤ãš†ãš‡ð­¢-ð­¤å¤Žå¤ð €¼ð¡•¦ð«¯‹ð«¯Œð­¥ð­¦ð¡•§-𡕬ð­§ð Œžð¡•­ð°‹ð ­¶ð¡•®-𡕱𪤶ð­¨ð­©å¤ð¡•²-ð¡•µð­ªð­«ð¡•¶ð¡•·ð­¬ð¡•¸-𡕺ð­­ð­®ð¡•»ð­¯å¤‘夓𡕼-ð¡•¿ð­°å¤’ð¡–€ð­±ð¡–夔ð­²ð¡–‚ð¡–ƒ]
+[radical 36=⼣夕:夕-夘㚈𡖄-𡖆夙-夛𡖇-𡖉𪤷ð«¢ð­³ð­´ð¡–Š-ð¡–Œð«£ð­µå¤œå¤ãš‰ð¡–-ð¡–𪤸ð«¯ð­¶ð°‹ð¡–𡖑𪤹夞𠅗𡖒-𡖜𢻈𪤺𫯎够夠ð¡–-𡖥𪤻ð«¯ð«¯ð­·ð­¸å¤¡ãšŠð …±ð ¨ƒð¡–¦-𡖮𡖰𪤼𫯑𫯒ð­¹-ð­»ð°‹‘𰋒𡖯𡖱-𡖵𰋓夢-夥㚋㚌𡖶-𡖾𢆣𪤽𫯓𫯔ð­¼ð­½ð°‹”𰋕夦𡖿-ð¡—𪤾𫯕ð­¾ð­¿ð°‹–𠆓𠆕𡗂-𡗅𪤿𫯖𫯗𰋗𠆙𡗆-𡗈𫯘𭑀𰋘ãšð¡—‰ð¡—Šð­‘ð¡—‹ð¡—Œð¡—ð¡—𡗎𪥀𫯙ð¡—𣡳𫯚𡗑]
+[radical 37=⼤大:大-夭𡗒-ð¡—”ðª¥ð«¯›å¤®-头㚎𡗕-𡗛𪥂𭑂𰋙夵-夼ãš-ãš‘ð €›ð¡—-𡗤𪥃𫯜𭑃𰋚夽-奂㚒㚓𡗥-𡗶𪥄-𪥆ð«¯-𫯟𭑄𭑅𰋛𰋜奃-奉奋-å¥ãš”-㚙𡗷-𡘌𪥇-𪥌𫯠-𫯢𭑆-ð­‘‹ð°‹-𰋟奎-奖㚚㚛ð¡˜-𡘜ðª¥-ðª¥ð«¯£-𫯥𭑌-𭑎𰋠𰋡奊套-奚ð¡˜-𡘳ðª¥-𪥒ð«¤ð«¯¦ð«¯§ð­‘-𭑒𰋢𰋣奛-奞㚜-㚞𡘴-𡙆𪥓-𪥕𫯨𭑓-𭑖𰋤-𰋧奟-奥㚟𡔱𡙇-𡙚𪥖-𪥘𫯩-𫯯𭑗-𭑛𰋨-𰋬奦-奨㚠𡙛-𡙫𪥙-𪥛𫯰-𫯴𭑜-𭑟𰋭𰋮奩-奬𡙬-𡙶𪥜-𪥞𫯵-𫯷𭑠𰋯𰋰奭𡙷-𡚅𪥟-𪥡𫯸-𫯼𰋱奮奯㚡𡚆-𡚎ð¤ ð«¥ð«¯½-𫰀𭑡-𭑣𰋲𰋳ð¡š-ð¡š–ð«°ð­‘¤å¥°ð¡š—𡾗𪥢𭑥𡚘-𡚚𫰂𭑦𡚛𪥣𫰃𫰄𰋴𡚜ð¡šå¥±ð¡šž-𡚢𫰅奲𡚣-𡚥]
+[radical 38=⼥女:女𡚦𫰆𰋵奴-奶㚢𡚧-𡚭𫰇𭑧-𭑫𰋶奷-妈㚣-㚨𡚮-𡚻𪥤𪥥𫰈-𫰊𭑬𭑭𰋷𰋸妉-妌妎-妫㚩-㚯㛠𡚼-𡛘𪥦-𪥬ð«¦ð«°‹-𫰖𭑮𭑯𰋹-𰋻妬-姗㚰-ã›ð¡›™-ð¡œðª¥­-𪥰𫰗-𫰛𭑰-𭑵𰋼å¦å§˜-姫姭-娃娅-娈㛂-㛌𡜂-𡜭𪥱-𪥵ð«§ð«¨ð«°œ-𫰩𭑶-𭑹𰋽-𰌃姬娉-娫娭-娴娽ã›-㛟㛡-㛤𡜮-ð¡ðª¥¶-𪥺ð«©-ð««ð«°ª-𫰶𭑺-𭑿𰌄𰌅娬娵-娼娾-婶㛥-ã›­ð¡ž-𡞛𪥻-𪦅𫰷-𫱂𭒀-𭒄𰌆-𰌋婷-åªåª‘-媯å«ã›®-㜄𡞜-𡟧𡠣𪦆-ðª¦ð«¬ð«±ƒ-ð«±ð­’…-𭒌𰌌-𰌎åªåª°-å«Žå«-嫔㜅-㜔𡟨-𡠕𪦑-𪦖𫱑-𫱞ð­’-ð­’‘ð°Œ-𰌔嫕-嫲㜕-㜢𡠗𡠙-𡠢𡠤-𡠱𡠳-𡡎𪦗-𪦟ð«­ð«±Ÿ-𫱫𭒒-ð­’𰌕嫳-å¬ãœ£-㜨𡠖𡠘𡠲ð¡¡-ð¡¢ð¡¢ðª¦ -𪦥ð«®ð«±¬-𫱷𭒞-𭒡𰌖𰌗å¬-嬢嬴㜩-㜭𡢎𡢑-𡣄𪦦-𪦪𫱸-𫲄𭒢-𭒥𰌘-𰌚嬣-嬳嬵-嬷㜮㜯𡣅-𡣡𡣣-𡣩𪦫𫲅-𫲌𭒦-𭒨嬸嬺-嬽㜰㜱𡣪-𡣼𪦬-𪦯ð«²-𫲓𭒩-𭒭嬹嬾嬿㜲-㜵𡣽-ð¡¤ð¡¤žðª¦°ðª¦±ð«²”-𫲙𭒮孀-孆㜶-㜸𡤎-𡤗𪦲𫲚𫲛𭒯-𭒳孇-孉㜹𡤘-ð¡¤ð¡¤Ÿð¡¤ ðª¦³ðª¦´ð«²œð«²å­Š-孌㜺𡤡-𡤪𫲞𫲟𰌛å­ð¡¤«-𡤭𪦵𫲠孎å­ð¡¤®-𡤳𭒴𡤴-𡤶𭒵㜻㜼𡤷-𡤻]
+[radical 39=⼦å­:å­-孓𡤼孔𡤽孕𡤾-𡥂𫲡𭒶-𭒹孖-孙㜽𡉗𡥃-ð¡¥…ð­’º-𭒼𰌜ð°Œå­š-孞㜾㜿𡥆-𡥊𡥌ð¡¥ðª¦¶-𪦹𰌞-𰌢孟-å­§ã€ð ƒ±ð¡¥Ž-𡥚𪦺𫲢-𫲤𭒽-𭓀𰌣-𰌥孨-å­ªãð¡¥›-𡥧𪦻𫲥ð­“𭓂𰌦𰌧孫-å­­ã‚ãƒð¡¥¨-𡥭𢈲𨹴𫲦𭓃-𭓇𰌨孮-孰孲𡥮-𡥵𪦼-𪦾𫲧𫲨𭓈-𭓎𰌩-𰌫孱ã„𡥶-𡦂𪦿𫲩𫲪ð­“-𭓔𰌬𰌭孳孴ã…𡦃-ð¡¦ð«²«ð«²¬ð­“•ð­“–𰌮孵-孷𡦑-𡦖𪧀𫲭𫲮𭓗𭓘𰌯ã†ð¡¦—-ð¡¦ð«¯ð«²¯ð«²°å­¸å­¹ã‡ð¡¦ž-𡦨ðª§ð«²±ð«²²ð­“™ð­“šð°Œ°å­ºå­»ð¡¦©ðª§‚𪧃𭓛𡦪-𡦬𰌱孼𡦭-𡦰𫲳𭓜孽孾𡦱-𡦶𰌲𪧄孿𡦷𫲴ãˆð¡¦¸ð­“]
+[radical 40=⼧宀:宀ã‰ð¡¦¹å®-宄ãŠã‹ð¡¦º-𡦼𰌳宅-安ãŒã𡦽-𡧊𫲵𫲶𭓞𰌴𰌵宊-å®’ãŽ-ã‘𡧋-𡧕𪧅-𪧇𫲷-𫲽𭓟-𭓡𰌶-𰌸宓-审ã’𡧖-𡧨𪧈𪧉𫲾-𫳀𭓢-𭓩𰌹𰌺客-宦宨-宫ã“-ã–𡧩-𡧿𪧊-𪧌ð«³-𫳆𭓪-𭓯𰌻-𰌽宧宬-宾ã—-ãšð¡¨€-𡨡ðª§-ðª§ð«³‡-ð«³ð­“°-𭓳𰌾-ð°€å®¿-寉ã›-ã¡ð¡¨¢-𡨼𪧑-𪧓ð«³-𫳙𭓴-ð­“¿ð°-ð°…寊-寕寪ã¢ã£ð¡¨½-𡩞𪧔-𪧚𫳚-𫳣𭔀-ð­”…ð°†-ð°å¯–-å¯ã¤-ã¨ð¡©Ÿ-𡩺𪧛-𪧠𫳤-𫳮𭔆-𭔌ð°Ž-ð°—寞-寨ã©-ã¬ð¡©»-ð¡ªðª§¡-𪧥ð«°ð«³¯-𫳼ð­”-ð­”ð°˜-ð°šå¯©å¯«-寮ã­-ã¯ð¡ªŸ-𡪽𪧦-𪧪ð«±ð«³½-ð«´ð­”‘-ð­”–ð°›ð°œå¯¯å¯°ð¡ª¾-ð¡«ðª§«-𪧮𫴂-ð«´ð­”—-ð­”™ð°-ð°Ÿå¯±å¯²ð¡«‘-ð¡«ðª§¯ð«´-𫴗𭔚-𭔞ð° ã°ð¡«ž-𡫫𪧰-𪧲𫴘-𫴛𭔟-ð­”¡ð°¡å¯³-寵𡫬-𡫶𫴜-𫴟𭔢-𭔤寶𡫷-𡫻𪧳𪧴𫴠𭔥𭔦ð°¢å¯·ã±ð¡«¼-𡬃𪧵𫴡-𫴣𭔧𡬄-𡬋𫴤𫴥𭔨𡬌𫴦𫴧ð°£ð¡¬ð¡¬ð¡¬ðª§¶ð«´¨-ð«´ªð°¤ð¡¬‘𡬓-𡬕ã²ð¡¬–-𡬘𡬎𡬙𡬚𡬒𡬛𫴫𡬜]
+[radical 41=⼨寸:寸ð¡¬å¯¹ã³å¯º-导𡬞𪧷𭔩寽-寿ã´ð­”ªå°€ãµð¡¬Ÿ-𡬦𭔫𭔬å°å°‚将𡬧-𡬬𫴬𭔭-𭔯尃-å°…ã¶ð¡¬­ð«´­ð­”°-𭔲將-尉𡬮-𡬲𪧸𪧹𭔳-𭔵尊-å°Œã·ð¡¬³-𡬸𪧺𫴮𫴯𭔶-𭔸𡬹-𡬼𫴰-𫴳𭔹-ð­”¼å°ð¡¬½-ð¡­‚ð­”½-ð­”¿ð°¥å°Žð¡­ƒ-𡭉𣊒𪧻𪧼𫴴𫴵𭕀ð­•ð°¦ð¡­Š-𡭌𪧽𭕂ð¡­-ð¡­ðª§¾ð¡­ð¡­‘𭕃𡭒𡭓𫴶𫴷]
+[radical 42=⼩å°:å°ð¡­”ð­•„ð°§ð°¨å°å°‘ð¡­•ð¡­–å°’-尕龸𡭗𡭘ð°©å°–-尘𡭙-𡭜𭕅ð¡­-𡭤𪧿𫴸𫴹𭕆𭕇ð°ªå°™å°šð ˆ¤ð¡­¥-𡭩𪨀𫴺𫴻𭕈𭕉尛-å°ð¡­ª-𡭳𫴼𫴽𭕊ð°«ã¸ð¡­´-ð¡­¼ðª¨ðª¨‚ð¡­½-ð¡®ð«´¾-𫵃尞ã¹ð¡®Ž-𡮗𫵄𫵅尟尠𠅽𡮘-ð¡®ð­•‹å°¡ãºð¡®ž-𡮥𪨃𫵆𫵇ã»ð¡®¦-𡮯𪨄𫵈𫵉𡮰-𡮳𪨅𫵊-𫵌𭕌𡮴-𡮶𢇔𪨆ð°¬ð¡®·-ð¡®»ð¤¯ð¡®¼-ð¡®¾ð«µð¡®¿ð¡¯€]
+[radical 43=⼪尢:尢尣ð¡¯ð¡¯‚尤𡯃-𡯊𫵎尥-å°§ã¼ð¡¯‹-𡯎ð­•å°¨-å°¬ã½ð¡¯-𡯙ð«µå°­ã¾ã¿ð¡¯š-𡯡ð«µð­•Žð°­å°®å°¯ãž€ãžð¡¯¢-𡯤𡯦𡯧ð°®ãž‚𡯨-𡯲ð°¯ãžƒ-㞆𡯳-𡯸𫵑ð­•ð­•å°°å°±ãž‡ãžˆð¡¯¹-𡰂𪨇尲-尴㞉㞊𡰃-𡰊𪨈𭕑𭕒𡰋-ð¡°ð­•“å°µð¡°-𡰕𫵒𡰖-𡰚尶尷𡰛-ð¡°¢]
+[radical 44=⼫尸:尸𡰣尺𪛛ð°°å°»å°¼ãž‹ð¡°¤-𡰨𡰴𭕔尽㞌ãžð¡°©-ð¡°³ð«²å°¾-屃㞎𡰵-𡰽𪨉-𪨋𫵓-𫵕ð°±ð°²å±„-届ãž-ãž‘ð¡°¾-𡱋𪨌𫵖-𫵘𭕕-𭕘ð°³ð°´å±‹-å±ãž’-㞖𡱌-𡱡𢇀ðª¨ðª¨Žð«µ™-ð«µð­•™-ð­•ð°µ-ð°·å±-屘㞗𡱢-𡱹ðª¨ðª¨ð«µžð«µŸð­•žð­•Ÿð°¸-ð°»å±™-å±ãž˜ãž™ð¡±º-𡲓𪨑𫵠𭕠-ð­•£ð°¼-ð°¾å±ž-屡㞚㞛𡲔-𡲫𪨕-𪨘𭕤ð°¿ð°Ž€ð¡²¬-𡳃𪨒-𪨔𫵡𭕥-ð­•­ð°Žå±¢å±£ãžœ-㞞𡳄-ð¡³ðª¨™ðª¨šð«µ¢-𫵥𭕮𭕯𰎂層-屧㞟㞠ð¡³-𡳞𪨛𪨜𭕰-𭕵𰎃-𰎅𡳟-𡳧ðª¨ð«µ¦ð«µ§ð°Ž†å±¨ð¡³¨ð¡³©ðª¨žð«µ¨ð­•¶å±©å±ªð¡³ªð¡³«ð«µ©ð­•·ð­•¸å±«ãž¡ð¡³¬-𡳰𪨟𪨠𫵪𫵫𭕹𭕺𰎇𡳱-𡳴屬𡳵-𡳷𫵬𫵭𭕻𡳸-𡳺𪨡𭕼屭𡳻𭕽𡳼𡳽]
+[radical 45=⼬屮:屮䶹𡳾屯㞢𡳿𭕾屰𡴀-𡴅𭕿㞣㞷𡴆-𡴚𫵮𡴛-𡴣𰎈𡴤𡴥𫵯𫵰𡴦-𡴬]
+[radical 46=â¼­å±±:山乢屲𡴭-𡴯屳-屷㞤-㞧𡴰-𡴽𫵱-𫵴𭖀屸-岃㞨-㞯𡴾-𡵒𪨢-𪨥ð«³ð«µµð­–-𭖄𰎉岄-岌岎-岜㞰-㞶㞸𡵓-𡶂𪨦-𪨨𫵶𫵷𭖅-ð­–Šð°ŽŠ-ð°Žå²-å³…ãž¹-㟃𡶃-𡶣𡶥-𡶪𪨩-𪨮𫵸𫵹𭖋-𭖔𰎎-ð°Ž“å²å³†-峧㟄-㟆𡶫-𡷔𪨯-𪨴ð«´ð«µºð«µ»ð­–•-ð­–žð°Ž”-𰎞峨-崅㟇-㟖𡷕-ð¡¸ð¦Š¤ðª¨µ-𪨺ð«µð«µ¼-𫶀𭖟-𭖨𰎟-𰎤崆-崰㟗-㟥𡸑-𡹩𪨻-ðª©ð«¶-𫶅𭖩-𭖱𰎥-𰎨崱-嵉嵋-åµï¨‘㟦-㟯𡹪-𡺩𪩂-𪩇𫶆-𫶉𭖲-ð­–¿ð°Ž©-𰎭嵊嵞-嵶㟰-㟸𡺪-𡻗𪩈-𪩋𫶊-ð«¶ð­—€-𭗆𰎮-ð°Ž°åµ·-嶎㟹-㠄𡻘-𡼉𪩌-𪩒𫶑-𫶔𭗇-𭗓𰎱-ð°Ž´å¶-嶥㠅-ã ð¡¼Š-𡼼𪩓-𪩖𫶕𫶖𭗔-𭗞𰎵-𰎸嶦-嶶㠑-㠗𡼽-𡽈𡽊-𡽛𪩗-𪩚𫶗-𫶜𭗟𭗠𰎹𰎺嶷-嶺嶼-嶿㠘-㠜𡽉𡽜-ð¡¾ð¡¾»ðª©›-ðª©ð«¶ð­—¡-𭗤𰎻巀-å·‚ã -㠟𡾂-𡾖𡾠𫶞𭗥-𭗫𰎼-𰎾嶻巃-å·…ã  -㠣𡾘-𡾟𡾡-𡾭𣦭𪩞𫶟-𫶣𭗬-𭗱𰎿-ð°å·†-巌㠤𡾮-𡾺𭗲-ð­—´å·å·å·ã ¥ã ¦ð¡¾¼-𡿆𪩟𫶤𭗵𭗶巎巑-巕巗㠧𡿇-𡿑𪩠𭗷巖巘-巚𡿒𡿓𭗸𡿔-𡿜𫶥𭗹ð¡¿-𡿟𫶦ð°‚𡿠𡿡𡿣𡿤㠨𡿢𡿥]
+[radical 47=⼮巛:å·›-å·ð¡¿¦ð¡¿¨ð«¶§ð¡¿§ð­—ºå·žå·Ÿã ©ð¡¿©-𡿭𭗻𭗼巠𡿮-𡿰𪩡𭗽𭗾𡿱-𡿶𭗿𡿷-𡿻𪩢𭘀ð°ƒð°„𠙗𡿼𡿽𫶨ð­˜å·¢å·£ð¡¿¾-𢀀𫶩ð¢€ð¢€‚ð°…巤𢀃ð°†ð¢€„-𢀋𫶪𢀌-ð¢€]
+[radical 48=⼯工:工𪛜㠪𢀑-𢀕𭘂左-巨𢀖-𢀙巩巪𢀚𢀛𪩣𭘃-ð­˜…ð°‡å·«ð¢€œ-𢀞𫶫ð°ˆ-ð°Šð¢€Ÿð«¶¬ð­˜†ð°‹å·¬å·­ð¢€ ð«¶­ð­˜‡ð­˜ˆå·®ã «ã ¬ð¢€¡-𢀣𪩤𫶮ð°Œå·¯ã ­ð¢€¤ð¢€¥ðª©¥å·°ð¢€¦ð¢€§ðª©¦ð«¶¯ð­˜‰ðª©§ð«¶°ã ®ð¢€¨-𢀫𫶱𢀬𢑰𤀢𫶲𫶳ð°ð¢€­ðª©¨ð«¶´ð¢€®ðª©©ð°Žð¢€¯-𢀲𪩪]
+[radical 49=â¼°å·±:å·±-巴𢀳㠯𢀴-𢀶𫶵巵𪩬𭘊巶㠰𢀷𢀸𪩫𭘋𭘌巷-巻𢀹-𢀻ð­˜å·¼ð¢€¼-𢀿𫶶ð°ã ±ð¢€-ð¢„𫶷ð°å·½ð¢…-ð¢‰ðª©­ðª©®ð«¶¸ð«¶¹ð­˜Žð­˜ð¢Šðª©¯ð¢‹-ð¢ð¢ðª©°ðª©±ð«¶ºð¢Žð¢ð«¶»ð«¶¼ð­˜ð¢‘]
+[radical 50=⼱巾:å·¾-帅㠲㠳ð¢’-ð¢”𪩲𫶽𫶾ð°‘帆-师㠴-ã ¶ð¢•-ð¢¤ð­˜‘ð­˜’ð°’帉-å¸ã ·-ã ¼ð¢¥-ð¢ºð«¶¿-𫷂𭘓𭘔ð°“ð°”帑-帜㠽-ã¡€ð¢»-ð¢‚𫷃𫷄𭘕-𭘚ð°•ð°–å¸-帧ã¡-㡆ð¢‚-𢂰𫷅𭘛-𭘞ð°—ð°˜å¸¨-帱㡇㡈𢂱-𢃌𪩳𭘟-𭘣ð°™å¸²-帼㡉-ã¡Žð¢ƒ-𢃪𪩴-𪩷𫷆𫷇𭘤-𭘦帽-幇幉ã¡-㡖𢃫-𢄉𪩸-𪩺𫷈𫷉𭘧-𭘮ð°š-ð°œå¹Š-å¹ã¡—-㡛𢄊-𢄞𫷊-ð«·ð­˜¯-𭘱ð°å¹ˆå¹‘-幙幛㡜-㡟𢄟-𢄲𪩻𭘲-ð­˜´ð°žå¹šå¹œ-幥㡠㡡𢄳-𢅌𪩼𭘵ð°Ÿå¹¦-幩㡢-㡤ð¢…-𢅞𪩽ð«·ð«·‘𭘶-𭘸ð° å¹ª-幬㡥㡦𢅟-𢅨𪩾幭-幯𢅩-𢅬𭘹-𭘻幰𢅭-𢅷𪩿𫷒𫷓𭘼幱㡧㡨𢅸-𢅺𪪀𢅻-𢅽ð°¡ã¡©ã¡ªð¢…¾-𢆂𭘽𢆃-𢆈]
+[radical 51=⼲干:干平𢆉年幵𫷔𭘾ð°¢ð¢†Š-𢆌ðªªð«·•ð«·–ð°£å¹¶-幸ð¢†-ð¢†ð­˜¿ð­™€ð°¤ð¢†‘-𢆕ð­™ð¢†–-𢆙𭙂𭙃ð°¥ð°¦ð¢†šðªª‚𪪃𫷗ð°§ð°¨ð¢†›-ð¢†ðªª„ð°©-ð°«å¹¹ð¢†ž-𢆠𪪅𪪆𫷘-𫷚𢆢𢆤𫷛𭙄-𭙆ð°¬ð°­ð¢†¥ðªª‡ð«·œð«·ð¢†¦-𢆩ð°®ð¢†ªðªªˆð«·žð­™‡ð¢†«ðªª‰ð¢†¬-𢆮]
+[radical 52=⼳幺:乡幺幻𢆯-𢆱𭙈𭙉幼𢆲-𢆵𭙊ð°¯ð°°ð¢†¶ðªªŠð¢†·-𢆺𭙋𢆻-𢆾幽𢆿𢇂𪪋𫷟𭙌ð°±ð¢‡ð¢‡ƒ-𢇉幾㡫㡬𢇊𫷠𫷡𠅹𢇋𫷢𫷣㡭𢇌-𢇓𫷤㡮𢇖]
+[radical 53=⼴广:广-広𠆲𫷥ð­™-ð­™åº„-庆㡯-㡱𢇗-𢇢𫷦ð­™-ð­™’ð°²åº‡-应庘㡲㡳𢇣-𢇱𪪌ðªªð«·§ð­™“-𭙗底-店庙-废㡴-㡻𢇲-𢈆𪪎ðªªð­™˜ð­™™ð°³ð°´åº -度㡼-㢂𢈇-𢈘ðªªðªª‘𫷨𫷩𭙚𭙛ð°µð°¶åº§-庯㢃-㢇𢈙-𢈱𪪒-𪪗𫷪-𫷯𭙜-ð­™¡ð°·ð°¸åº°-庼㢈-㢌𢈳-𢉕𢉗-𢉚𪪘𪪙ð«¶ð«·ð«·°-𫷵𭙢𭙣ð°¹-ð°»åº½-廃廊ã¢-ã¢ð¢‰›-𢉻𢉽𢉾𪪚𪪛𫷶-𫷹𭙤-𭙧ð°¼ð°½å»…-廉廋廌鿮㢑𢉼𢉿-𢊔𪪜ðªªð«·ºð«·»ð­™¨-ð­™­ð°¾å»„å»-廘㢒-㢕𢊕-𢊬𪪞-𪪠𫷼-ð«·¿ð­™®-ð­™³ð°¿-ð°å»™-廤㢖-㢘𢊭-ð¢‹ðªª¡-𪪣𫸀𭙴-ð­™»ð°‚ð°ƒå»¥-廪㢙-㢜𢋂-ð¢‹ðªª¤ðªª¥ð«¸ð«¸‚ð­™¼-𭚃𢋑-𢋛ð¢‹-𢋠𪪦-𪪨𫸃-𫸆𭚄ð°„廫𢋡-𢋭𪪩𫸇𭚅-𭚈ð°…廬廭é¾ã¢ð “Œð¢‹®-𢋺𪪪𫸈𭚉-ð­š‹å»®-廰㢞𢋻-𢌃𫸉𭚌廱𢌄-𢌆𪪫𫸊ð­šð­šŽå»²ð¢Œˆ-𢌌𫸋𫸌ð­šð­šð°†ð¢Œ-𢌑ð«¸ð«¸Žð¢Œ’𭚑廳ð«¸ð¢Œ“ð«¸ð¢Œ”-𢌖]
[radical 54=⼵廴:廴𢌗廵㢟𢌘-𢌚𪪬𫸑延廷𢌜𭚒-𭚔廸廹㢠𢌛ð¢Œð¢Œžðªª­ðªª®ð­š•å»º-廼𢌟廽𢌠-𢌥𪪯𢌦𢌧𪪰𫸒𫸓𢌨-𢌪𪪱𢌫𣉡𦋪𪪲𫸔𫸕]
-[radical 55=⼶廾:廾𢌬廿开𢌭å¼ð¢Œ®ð¢Œ¯å¼‚𢌰-𢌲𫸖弃-弅𢌳𢌵-𢌺𪪳弆𢌻𢌽-ð¢ðªª´ð«¸—-𫸙弇弈𢌴𢌼ð¢‚-ð¢Œð­š–弉ð¢-ð¢“𪪵𫸚𫸛𭚗𭚘ð¢”-ð¢™ð«¸œð«¸ð¢š-ð¢¡ðªª¶ð«¸žð¢¢-ð¢¥ðªª·ð«¸Ÿð­š™ã¢¡ð¢¦-ð¢«ð­ššå¼Šã¢¢ð¢¬ã¢£ð¢®-ð¢±ð«¸ ð«¸¡ð­š›-ð­šð¢²-ð¢´ðªª¸ð«¸¢ð«¸£ð¢µð«¸¤ð¢¶ðªª¹ð­šžð¢·-ð¢¹]
-[radical 56=⼷弋:弋ð¢ºå¼Œð¢»ð¢¼å¼ð­šŸ-𭚡弎-å¼ð¢½ð¢¾ã¢¤ð¢¿-𢎅㢥𢎆-ð¢Žð­š¢å¼‘𢎎弒㢦ð¢Žð¢Žð£¦ð­š£ð­š¤ð¢Ž‘-𢎖]
-[radical 57=⼸弓:弓𢎗𢎘弔-弖㢧𢎙-𢎡𭚥弗弘𢎢-𢎪弙-弜㢨-㢫𢎫-𢎶𪪺𫸥-𫸧𭚦å¼-张㢬㢭𢎷-ð¢…𫸨-𫸪𭚧𭚨弡-弪㢮-㢱ð¢†-ð¢“𪪻𫸫-𫸭𭚩-𭚫弫-弯㢲-㢷𠄴𠔘ð¢”-ð¢£ðªª¼ðªª½ð«¸®-𫸲𭚬-ð­š°å¼°-弳㢸㢹ð¢¤-ð¢­ðªª¾ð«¸³-𫸶𭚱-𭚵弴-弹㢺-㢼ð¢®-ð¢¿ðªª¿ð«¸·ð«¸¸ð­š¶-𭚹强-弾㢽-㢿ð¢€-ð¢‰ðª«€ðª«ð«¸¹ð«¸ºð­šº-ð­›å¼¿-彂㣀-㣂ð¢Š-ð¢‘𭛂𭛃彃-彅㣃ð¢’-ð¢ðª«‚𫸻𭛄彆-彉㣄㣅ð¢ž-ð¢¤ð«¸¼ð«¸½ð­›…-𭛇彊彋ð¢¥-ð¢ªð«¸¾ð«¸¿ð­›ˆð­›‰å½Œð¢¬-ð¢±ðª«ƒð«¹€ð­›Šð­›‹å½ð¢²-ð¢·ð«¹ð­›Œð¢¸-ð¢¾ð¤¯½ð¢¿-𢑅𫹂㣆𢑆-𢑉𪫄𫹃彎𢑊å½ð¢‘‹ð¢‘Œðª«…ð¢‘𢑎]
-[radical 58=â¼¹å½:å½-当ð¢‘-𢑒𪫆𢑓彔录㣇𢑔𢑕𫹄ð­›ð­›Žå½–𢑗-𢑚ð­›ð¢‘›-ð¢‘彗𢑞-𢑡ð­›å½˜ð¢‘¢-𢑤𫹅𫹆𭛑𭛒彙彚𢑥-𢑮𣼙𫹇𫹈彛彜㣈𢑯𢑱𢑲å½å½žð¢‘³-𢑶𪫇彟𢑷-𢑾彠𢑿]
-[radical 59=⼺彡:彡𢒀-𢒂㣉𢒃-𢒆形-彤㣊𢒇𢒈㣋-ã£ð¢’‰-ð¢’𭛓彥彦𢒎ð«¸å½§å½¨ð¢’-𢒓𣥲𪫈𫹉彩彫彬㣎𢒔-ð¢’å½­ã£ã£ð¢’ž-𢒣彮𢒤-𢒨𭛔𭛕彯彰㣑𢒩𢒪𭛖-𭛘影㣒𢒫-𢒯𪫉𭛙-𭛛㣓𢒰-𢒴𪫊𫹊𢒵𢒷𢒶彲𢒸-𢒻]
-[radical 60=⼻彳:彳𢒼𢒽㣔𢒾𢒿𫹋彴彵㣕𢓀-𢓃𫹌𭛜ð­›å½¶-彻鿈鿉㣖㣗𢓄-𢓑𪫋ð«¹-ð«¹ð­›žå½¼-径㣘㣙𢓒-𢓛𪫌𫹑𭛟-𭛦待-å¾å¾”㣚-㣡𢓜-𢓩𫹒𫹓𭛧-𭛩徎-従徕㣢㣣𢓪-𢔀ðª«ðª«Žð«¹”𫹕𭛪-𭛮徖-徙徛-徤㣤-㣩ð¢”-𢔞ðª«ðª«ð«¹–-𫹘𭛯-𭛶徚徥-徫㣪-㣮𢔟-𢔫𢔭-𢔱𪫑-𪫓𫹙-ð«¹ð­›·-𭛼徬-徰㣯𢔲-𢕎𢕧𪫔𪫕𫹞-𫹠𭛽徱徳徴㣰-㣲ð¢•-𢕦𢕨𢕩𪫖-𪫘𫹡𫹢𭛾-𭜀徲徵-徺㣳㣴𢕪-𢕸𫹣-𫹥ð­œ-𭜅徻徼㣵㣶𢕹-𢖄𢖆𢖇𪫙𭜆-𭜈徽徾㣷𢖈-𢖊𢖌-𢖎𪫚𫹦ð¢–-𢖗𪫛𪫜𫹧𫹨𭜉徿㣸𢖘-𢖚𢖜𭜊忀å¿ã£¹ð¢–-𢖠𢖢忂𢖣𢖤𫹩𢖥𢖦𫹪𢖧𢖨]
-[radical 61=⼼心:心忄𢖩必忆㣺𢖪忇-忊㣻𢖫-𢖱ðª«ð«¹«-𫹭忋-応㣼-㤀𢖲-𢗈𪫞𫹮-𫹱𭜋-𭜎å¿-怆ã¤-㤋𢗉-𢗾𪫟-𪫥ð«¹ð«¹²-𫹹ð­œ-𭜘怇-怿㤌-㤙𢗿-𢘳𪫦-𪫬𫹺-𫹿𭜙-𭜧æ€-æ½ã¤š-㤭㤺𢘴-𢙰𪫭-𪫴𫺀-𫺋𭜨-𭜵æ¾-悯㤮-㤹㤻-㤽𢙱-𢚿𪫵-𪫾𫺌-𫺕𭜶-ð­‹æ‚°-惯㤾-㥙𢛀-𢜧𪫿-𪬆𫺖-𫺟ð­Œ-ð­ æƒ°-愦慨㥚-㥫𢜨-𢞌𪬇-𪬒𫺠-𫺭ð­¡-ð­¶æ„§-慑㥬-㥻ð¢ž-𢟟𪬓-𪬞𫺮-𫺷ð­·-𭞌慒-慧慩-慬慮-憈㥼-㦈𠕫𢟠-𢠰𦑑𪬟-𪬧𫺸-ð«»‚ð­ž-𭞥慭憉-憳㦉-㦖𢠱-𢢑𪬨-𪬭𫻃-𫻉𭞦-𭞹憴-憺憼-懔㦗-㦙𢢒-ð¢£ð¦¡—𪬮-𪬶𫻊-ð«»ð­žº-𭟄憻懕-懨㦚-㦠𢣎-𢣺𪬷-𪬹ð«»-ð«»’ð­Ÿ…-𭟌懩-懴㦡㦢𢣻-𢤥𦻇𪬺-𪬾𫻓-ð«»™ð­Ÿ-𭟗懵-懸㦣-㦧𢤦-𢥊𪬿𪭀𫻚-𫻜𭟘-𭟞懹-懻㦨-㦪𢥋-𢥖ðª­ðª­‚ð«»-ð«»¡ð­ŸŸ-𭟢懼-懿𢥗-𢥤𪭃𪭄𫻢-𫻤𭟣-𭟦戀-戂㦫㦬𢥥-𢥮𪭅𪭆𭟧戃戄𢥯-𢥺𪭇戅戆𢥻-𢦂𭟨-𭟪𪭈𭟫𭟬𢦃𢦄𭟭戇㦭𢦅-𢦇𫻥𢦈-𢦋]
-[radical 62=⼽戈:戈-戋𢦌ð¢¦ðª­‰ð­Ÿ®æˆŒ-æˆð¢¦Ž-𢦑𪭊𫻦𫻧我-戓㦮㦯𢦒-𢦙𫻨𭟯戔-戗㦰-㦲𢦚-𢦥𫻩𫻪𭟰-𭟲战㦳𢦦-𢦶𪭋𪭌𫻫𫻬𭟳戙㦴-㦶𢦷-𢦾ðª­ðª­Žð«»­-𫻱戚-æˆã¦·ð¢¦¿-𢧇ðª­ðª­ð«»²-𫻶𭟴𭟵戞戟戦㦸𢧈-𢧓𪭑𫻷-𫻾𭟶戠-戥㦹𢧔-𢧡𪭒𫻿𫼀𭟷戧-戬㦺𠎶𢧢-𢧧𢧩-𢧱𪭓ð«¼ð­Ÿ¸ð­Ÿ¹æˆ­-戯戱㦻㦼𢧨𢧲-𢨆𫼂𫼃𭟺-𭟼戰𢨇-ð¢¨ð¢¨‘𢨒𪭔-𪭖𫼄-𫼈𭟽戲戴㦽𢨓-𢨗𭟾戳𢨘-𢨣戵𪭗]
-[radical 63=⼾戶:戶-戹𢨤𢨥𭟿𢨦-𢨩戺-戼㦾𢨪-𢨮𭠀戽-所㦿㧀𢨯-𢨵𫼉ð­ ð­ ‚æ‰-扃ã§ã§‚𢨶-𢩄𪭘𫼊𭠃-𭠆扄-扇𢩅-𢩌𫼋𫼌扈ð¢©-ð¢©ðª­™ð«¼ð«¼Žæ‰‰æ‰Šð¢©‘-𢩕ð«¼ð«¼ð­ ‡-𭠉𢩖𢩗𤟵𫼑𢩘-𢩞𪭚𭠊𢩟𭠋𢩠𢩡ð¨³ð¢©¢ðª­›ð¢©£ð¢©¤ð­ Œð«¼’]
-[radical 64=⼿手:手-æ‰é¾µð­ æ‰Žð¢©¥-𢩧𫼓æ‰-扖㧃-㧅𢩨-𢩬𫼔𭠎æ‰æ‰—-扞扠-扬㧆-㧈𢩭-𢪂𪭜𫼕-𫼗ð­ ð­ æ‰Ÿæ‰­-扷批-报㧉-㧑𢪃-𢪳ðª­-𪭣𫼘-𫼛𭠑-𭠖扸抦-择㧒-㧠𢪴-𢫣𪭤-𪭪ð«ºð«¼œ-𫼡𭠗-𭠡拪-挧㧡-㧱𢫤-𢬮𪭫-𪭳ð«»ð«¼¢-𫼰𭠢-𭠲挨-æ¤ã§²-㧸𢬯-𢮀𪭴-𪮀𫼱-𫽀𭠳-𭡈æ¥-掱掳-掽㧹-㨈ð¢®-𢯨ðª®-𪮋ð«½-𫽖𭡉-ð­¡æŽ²æŽ¾-æ„æ†-æ…摒㨉-㨕㨗㨘𢯩-𢰾𢱀-𢱞𪮌-𪮖ð«¼ð«½—-𫽨𭡞-ð­¡±æ†-æ°æ²-摊㨖㨙-㨬𢱟-𢲲𪮗-𪮢ð«½ð«½©-𫽶𭡲-𭢆æ…æ‘‹-æ‘‘æ‘“-æ‘•æ‘—-撄撇㨭-㩂𢲳-𢴔𢴖-𢴟𪮣-𪮪ð«¾ð«½·-ð«¾ð­¢‡-ð­¢–æ±æ‘–撅撆撈-撺擆㩃-㩑𢴕𢴠-𢵾𢷅𪮫-𪮴𫾂-𫾉𭢗-𭢢撻-擅擇-æ“žã©’-㩙𢵿-𢷄𢷆-𢷊𪮵-𪮷𫾊-ð«¾ð­¢£-𭢱擟-擤擦-擱㩚-㩟𢷋-𢷵𪮸-𪮺ð«¾-𫾒𭢲-𭢽擥擲-攆㩠-㩫𢷶-𢸢𪮻-𪯀ð«¿ð«¾“-𫾘𭢾-𭣃攇-æ”攒㩬㩭𢸣-𢹌ðª¯ð«¾™ð«¾šð­£„-𭣋攑攓-攚㩮-ã©°ð¢¹-𢹡𢹣-𢹫𪯂𫾛𭣌-ð­£æ”›-æ”㩱-㩴𢹢𢹬-ð¢ºð«¾œ-𫾞𭣑𭣒攞-攤攦攧鿜𢺂-𢺕𪯃𫾟𫾠攥攨-攫㩵-㩷𢺖-ð¢ºðª¯„𫾡攬攭𢺞-𢺫𫾢攮㩸㩹𢺬-𢺳𭣓𢺴]
-[radical 65=⽀支:支𭣔攰𢺵𭣕𢺶𭣖㩺𢺷-𢺽𪯆攱𢺾-𢻀𭣗𭣘㩻㩼ð¢»-𢻇𢻉㩽𢻊-ð¢»ðª¯…攲㩾𢻎-𢻙𭣙𭣚𢻚-𢻜𫾣ð¢»-𢻟𪯇𭣛攳𢻠-𢻤𫾤𭣜ð­£ð¢»¥-𢻩𭣞𫾥𭣟𢻪𭣠]
-[radical 66=â½æ”´:æ”´-攷𫾦𭣡攸-攼㩿㪀𢻫-𢻲𫾧𭣢𭣣攽-政ãªãª‚𢻳-𢼈𪯈𫾨𭣤敀-故㪃-㪆𢼉-𢼚𪯉𪯊𫾩𭣥-𭣩敆-敌㪇-㪉𢼛-𢼸ð£‹ðª¯‹ðª¯Œð«¾ª-𫾰𭣪-𭣱啟æ•-敛㪊-㪎𢼹-𢽙𢽜𢽷ðª¯ðªµŠð«¾±-𫾸𭣲-𭣵敜-敪敭ãª-㪚𢽚𢽛ð¢½-𢽶𢽸-𢽾𢾣𪯎ðª¯ð«¾¹-𫿀𭣶-𭣻敫敬敮-数㪛-㪟𢽿-𢾢𢾤ðª¯ð«¿-𫿇𭣼-𭤂敱-敳㪠-㪣𢾦-𢿅𪯑𪯒𫿈-𫿌𭤃-𭤇整-敻㪤-㪦𢿇-ð¢¿ð£›ðª¯“-𪯖ð«¿-ð«¿ð­¤ˆ-𭤋敼-敿㪧-㪪𢿞-𢿽𪯗-𪯙𫿑-ð«¿—æ–€-斂𢿾-𣀃𣀅-ð£€ðª¯šð«¿˜-𫿚𭤌ð­¤æ–ƒè´ãª«ãª¬ð£€„ð£€-𣀚𪯛𪯜𫿛-ð«¿ð­¤Žð­¤æ–„𣀛-𣀢𩠮𫿞-𫿢斅斆㪭𣀣-𣀭𩠰𫿣-𫿦㪮𣀮-𣀲ðª¯ðª¯žð«¿§ð«¿¨ð­¤ð­¤‘𣀳𣀴𫿩𭤒𣀵-𣀺𪯟𫿪-𫿬𣀻𣀼𭤓𣀽-ð£€]
-[radical 67=⽂文:æ–‡ð£ð«¿­æ–ˆãª¯ð£‚𪯠𭤔斉ð£ƒ-ð£…𪯡𪯢ð£†-ð£‰ðª¯£ð«¿®ð«¿¯ð­¤•-𭤙斊斋㪰ð£Šð£Œð£ðª¯¤ð«¿°æ–Œ-æ–ð£Ž-ð£“ð£šæ–æ–‘ð£”-ð£–𪯥-𪯧𫿱斒㪱ð£—-ð£™ð©–°ðª¯¨-𪯪ð£œ-ð£¡æ–“ð£¢-ð£¤ð­¤šð­¤›ð£¥ð£¦æ–”ð£§ð£¨ð«¿²æ–•ð£©ð£ªæ––ð£«]
+[radical 55=⼶廾:廾𢌬廿开𢌭å¼ð¢Œ®ð¢Œ¯å¼‚𢌰-𢌲𫸖ð°‡ð°ˆå¼ƒ-弅𢌳𢌵-𢌺𪪳ð°‰å¼†ð¢Œ»ð¢Œ½-ð¢ðªª´ð«¸—-𫸙弇弈𢌴𢌼ð¢‚-ð¢Œð­š–弉ð¢-ð¢“𪪵𫸚𫸛𭚗𭚘ð°Šð°‹ð¢”-ð¢™ð«¸œð«¸ð¢š-ð¢¡ðªª¶ð«¸žð¢¢-ð¢¥ðªª·ð«¸Ÿð­š™ã¢¡ð¢¦-ð¢«ð­ššå¼Šã¢¢ð¢¬ð°Œã¢£ð¢®-ð¢±ð«¸ ð«¸¡ð­š›-ð­šð¢²-ð¢´ðªª¸ð«¸¢ð«¸£ð¢µð«¸¤ð¢¶ðªª¹ð­šžð¢·-ð¢¹]
+[radical 56=⼷弋:弋ð¢ºð«  å¼Œð¢»ð¢¼å¼ð­šŸ-𭚡弎-å¼ð¢½ð¢¾ã¢¤ð¢¿-𢎅ð°ã¢¥ð¢Ž†-𢎌ð°Ž-ð°ð¢Žð­š¢å¼‘𢎎弒㢦ð¢Žð¢Žð£¦ð­š£ð­š¤ð°‘𢎑𢎒ð°’𢎓-𢎖]
+[radical 57=⼸弓:弓𢎗𢎘弔-弖㢧𢎙-𢎡𭚥弗弘𢎢-𢎪弙-弜㢨-㢫𢎫-𢎶𪪺𫸥-𫸧𭚦å¼-张㢬㢭𢎷-ð¢…𫸨-𫸪𭚧𭚨弡-弪㢮-㢱ð¢†-ð¢“𪪻𫸫-𫸭𭚩-ð­š«ð°“ð°”弫-弯㢲-㢷𠄴𠔘ð¢”-ð¢£ðªª¼ðªª½ð«¸®-𫸲𭚬-ð­š°ð°•ð°–å¼°-弳㢸㢹ð¢¤-ð¢­ðªª¾ð«¸³-𫸶𭚱-ð­šµð°—ð°˜å¼´-弹㢺-㢼ð¢®-ð¢¿ðªª¿ð«¸·ð«¸¸ð­š¶-ð­š¹ð°™-ð°›å¼º-弾㢽-㢿ð¢€-ð¢‰ðª«€ðª«ð«¸¹ð«¸ºð­šº-ð­›ð°œ-ð°žå¼¿-彂㣀-㣂ð¢Š-ð¢‘𭛂𭛃彃-彅㣃ð¢’-ð¢ðª«‚𫸻𭛄ð°Ÿå½†-彉㣄㣅ð¢ž-ð¢¤ð«¸¼ð«¸½ð­›…-𭛇ð° å½Šå½‹ð¢¥-ð¢ªð«¸¾ð«¸¿ð­›ˆð­›‰å½Œð¢¬-ð¢±ðª«ƒð«¹€ð­›Šð­›‹å½ð¢²-ð¢·ð«¹ð­›Œð¢¸-ð¢¾ð¤¯½ð¢¿-𢑅𫹂ð°¡ã£†ð¢‘†-𢑉𪫄𫹃ð°¢å½Žð¢‘Šå½ð¢‘‹ð¢‘Œðª«…ð¢‘𢑎]
+[radical 58=â¼¹å½:å½-当ð¢‘-𢑒𪫆𢑓彔录㣇𢑔𢑕𫹄ð­›ð­›Žå½–𢑗-𢑚ð­›ð¢‘›-ð¢‘彗𢑞-𢑡ð­›ð°£å½˜ð¢‘¢-𢑤𫹅𫹆𭛑𭛒彙彚𢑥-𢑧ð°¤ð°¥ð¢‘¨-𢑮𣼙𫹇𫹈彛彜㣈𢑯𢑱𢑲å½å½žð¢‘³-𢑶𪫇彟𢑷-𢑾彠𢑿]
+[radical 59=⼺彡:彡𢒀-𢒂㣉𢒃-𢒆形-彤㣊𢒇𢒈ð°¦ã£‹-ã£ð¢’‰-ð¢’ð­›“ð°§å½¥å½¦ð¢’Žð«¸ð°¨å½§å½¨ð¢’-𢒓𣥲𪫈𫹉ð°©ð°ªå½©å½«å½¬ã£Žð¢’”-ð¢’å½­ã£ã£ð¢’ž-𢒣ð°«å½®ð¢’¤-𢒨𭛔𭛕彯彰㣑𢒩𢒪𭛖-𭛘影㣒𢒫-𢒯𪫉𭛙-𭛛㣓𢒰-𢒴𪫊𫹊𢒵𢒷𢒶彲𢒸-𢒻]
+[radical 60=⼻彳:彳𢒼𢒽㣔𢒾𢒿𫹋彴彵㣕𢓀-𢓃𫹌𭛜ð­›ð°¬å½¶-彻鿈鿉㣖㣗𢓄-𢓑𪫋ð«¹-ð«¹ð­›žå½¼-径㣘㣙𢓒-𢓛𪫌𫹑𭛟-𭛦ð°­å¾…-å¾å¾”㣚-㣡𢓜-𢓩𫹒𫹓𭛧-𭛩徎-従徕㣢㣣𢓪-𢔀ðª«ðª«Žð«¹”𫹕𭛪-ð­›®ð°®ð°¯å¾–-徙徛-徤㣤-㣩ð¢”-𢔞ðª«ðª«ð«¹–-𫹘𭛯-𭛶ð°°-ð°³å¾šå¾¥-徫㣪-㣮𢔟-𢔫𢔭-𢔱𪫑-𪫓𫹙-ð«¹ð­›·-ð­›¼ð°´ð°µå¾¬-徰㣯𢔲-𢕎𢕧𪫔𪫕𫹞-𫹠𭛽ð°¶å¾±å¾³å¾´ã£°-㣲ð¢•-𢕦𢕨𢕩𪫖-𪫘𫹡𫹢𭛾-𭜀ð°·å¾²å¾µ-徺㣳㣴𢕪-𢕸𫹣-𫹥ð­œ-𭜅徻徼㣵㣶𢕹-𢖄𢖆𢖇𪫙𭜆-𭜈ð°¸å¾½å¾¾ã£·ð¢–ˆ-𢖊𢖌-𢖎𪫚𫹦ð¢–-𢖗𪫛𪫜𫹧𫹨𭜉ð°¹å¾¿ã£¸ð¢–˜-𢖚𢖜𭜊忀å¿ã£¹ð¢–-𢖠𢖢忂𢖣𢖤𫹩𢖥𢖦𫹪𢖧𢖨]
+[radical 61=⼼心:心忄𢖩必忆㣺𢖪ð°ºå¿‡-忊㣻𢖫-𢖱ðª«ð«¹«-𫹭ð°»ð°¼å¿‹-応㣼-㤀𢖲-𢗈𪫞𫹮-𫹱𭜋-𭜎ð°½-ð°‘€å¿-怆ã¤-㤋𢗉-𢗾𪫟-𪫥ð«¹ð«¹²-𫹹ð­œ-𭜘ð°‘-𰑉怇-怿㤌-㤙𢗿-𢘳𪫦-𪫬𫹺-𫹿𭜙-𭜧𰑊-ð°‘“æ€-æ½ã¤š-㤭㤺𢘴-𢙰𪫭-𪫴𫺀-𫺋𭜨-𭜵𰑔-ð°‘›æ¾-悯㤮-㤹㤻-㤽𢙱-𢚿𪫵-𪫾𫺌-𫺕𭜶-ð­‹ð°‘œ-𰑦悰-惯㤾-㥙𢛀-𢜧𪫿-𪬆𫺖-𫺟ð­Œ-ð­ ð°‘§-𰑯惰-愦慨㥚-㥫𢜨-𢞌𪬇-𪬒𫺠-𫺭ð­¡-ð­¶ð°‘°-𰑻愧-慑㥬-㥻ð¢ž-𢟟𪬓-𪬞𫺮-𫺷ð­·-𭞌𰑼-ð°’„æ…’-慧慩-慬慮-憈㥼-㦈𠕫𢟠-𢠰𦑑𪬟-𪬧𫺸-ð«»‚ð­ž-𭞥𰒅-𰒊慭憉-憳㦉-㦖𢠱-𢢑𪬨-𪬭𫻃-𫻉𭞦-𭞹𰒋-𰒓憴-憺憼-懔㦗-㦙𢢒-ð¢£ð¦¡—𪬮-𪬶𫻊-ð«»ð­žº-ð­Ÿ„ð°’”-𰒖憻懕-懨㦚-㦠𢣎-𢣺𪬷-𪬹ð«»-ð«»’ð­Ÿ…-𭟌𰒗-𰒚懩-懴㦡㦢𢣻-𢤥𦻇𪬺-𪬾𫻓-ð«»™ð­Ÿ-ð­Ÿ—ð°’›-𰒞懵-懸㦣-㦧𢤦-𢥊𪬿𪭀𫻚-𫻜𭟘-𭟞𰒟𰒠懹-懻㦨-㦪𢥋-𢥖ðª­ðª­‚ð«»-ð«»¡ð­ŸŸ-𭟢𰒡-𰒣懼-懿𢥗-𢥤𪭃𪭄𫻢-𫻤𭟣-𭟦戀-戂㦫㦬𢥥-𢥮𪭅𪭆𭟧戃戄𢥯-𢥺𪭇戅戆𢥻-𢦂𭟨-𭟪𪭈𭟫𭟬𢦃𢦄𭟭戇㦭𢦅-𢦇𫻥𢦈-𢦋]
+[radical 62=⼽戈:戈-戋𢦌ð¢¦ðª­‰ð­Ÿ®æˆŒ-æˆð¢¦Ž-𢦑𪭊𫻦𫻧我-戓㦮㦯𢦒-𢦙𫻨𭟯戔-戗㦰-㦲𢦚-𢦥𫻩𫻪𭟰-𭟲𰒤𰒥战㦳𢦦-𢦶𪭋𪭌𫻫𫻬𭟳𰒦-𰒨戙㦴-㦶𢦷-𢦾ðª­ðª­Žð«»­-𫻱𰒩戚-æˆã¦·ð¢¦¿-𢧇ðª­ðª­ð«»²-𫻶𭟴𭟵𰒪戞戟戦㦸𢧈-𢧓𪭑𫻷-𫻾𭟶𰒫戠-戥㦹𢧔-𢧡𪭒𫻿𫼀𭟷𰒬-𰒮戧-戬㦺𠎶𢧢-𢧧𢧩-𢧱𪭓ð«¼ð­Ÿ¸ð­Ÿ¹ð°’¯æˆ­-戯戱㦻㦼𢧨𢧲-𢨆𫼂𫼃𭟺-𭟼𰒰𰒱戰𢨇-ð¢¨ð¢¨‘𢨒𪭔-𪭖𫼄-𫼈𭟽𰒲𰒳戲戴㦽𢨓-𢨗𭟾戳𢨘-𢨣戵𪭗]
+[radical 63=⼾戶:戶-戹𢨤𢨥𭟿𢨦-𢨩戺-戼㦾𢨪-𢨮𭠀戽-所㦿㧀𢨯-𢨵𫼉ð­ ð­ ‚æ‰-扃ã§ã§‚𢨶-𢩄𪭘𫼊𭠃-𭠆扄-扇𢩅-𢩌𫼋𫼌扈ð¢©-ð¢©ðª­™ð«¼ð«¼Žæ‰‰æ‰Šð¢©‘-𢩕ð«¼ð«¼ð­ ‡-𭠉𰒴𢩖𢩗𤟵𫼑𢩘-𢩞𪭚𭠊𰒵𢩟𭠋𰒶𢩠𢩡ð¨³ð¢©¢ðª­›ð¢©£ð¢©¤ð­ Œð«¼’]
+[radical 64=⼿手:手-æ‰é¾µð­ æ‰Žð¢©¥-𢩧𫼓æ‰-扖㧃-㧅𢩨-𢩬𫼔𭠎𰒷-ð°’»æ‰æ‰—-扞扠-扬㧆-㧈𢩭-𢪂𪭜𫼕-𫼗ð­ ð­ ð°’¼ð°’½æ‰Ÿæ‰­-扷批-报㧉-㧑𢪃-𢪳ðª­-𪭣𫼘-𫼛𭠑-ð­ –ð°’¾-𰓋扸抦-择㧒-㧠𢪴-𢫣𪭤-𪭪ð«ºð«¼œ-𫼡𭠗-ð­ ¡ð°“Œ-𰓖拪-挧㧡-㧱𢫤-𢬮𪭫-𪭳ð«»ð«¼¢-𫼰𭠢-𭠲𰓗-𰓪挨-æ¤ã§²-㧸𢬯-𢮀𪭴-𪮀𫼱-𫽀𭠳-𭡈𰓫-ð°“¹æ¥-掱掳-掽㧹-㨈ð¢®-𢯨ðª®-𪮋ð«½-𫽖𭡉-ð­¡ð°“º-𰔄掲掾-æ„æ†-æ…摒㨉-㨕㨗㨘𢯩-𢰾𢱀-𢱞𪮌-𪮖ð«¼ð«½—-𫽨𭡞-𭡱𰔅-ð°”‘æ†-æ°æ²-摊㨖㨙-㨬𢱟-𢲲𪮗-𪮢ð«½ð«½©-𫽶𭡲-𭢆𰔒-𰔞æ…æ‘‹-æ‘‘æ‘“-æ‘•æ‘—-撄撇㨭-㩂𢲳-𢴔𢴖-𢴟𪮣-𪮪ð«¾ð«½·-ð«¾ð­¢‡-𭢖𰔟-𰔥æ±æ‘–撅撆撈-撺擆㩃-㩑𢴕𢴠-𢵾𢷅𪮫-𪮴𫾂-𫾉𭢗-𭢢𰔦-ð°”©æ’»-擅擇-æ“žã©’-㩙𢵿-𢷄𢷆-𢷊𪮵-𪮷𫾊-ð«¾ð­¢£-𭢱𰔪-𰔲擟-擤擦-擱㩚-㩟𢷋-𢷵𪮸-𪮺ð«¾-𫾒𭢲-𭢽𰔳-𰔷擥擲-攆㩠-㩫𢷶-𢸢𪮻-𪯀ð«¿ð«¾“-𫾘𭢾-𭣃𰔸𰔹攇-æ”攒㩬㩭𢸣-𢹌ðª¯ð«¾™ð«¾šð­£„-𭣋𰔺攑攓-攚㩮-ã©°ð¢¹-𢹡𢹣-𢹫𪯂𫾛𭣌-ð­£ð°”»ð°”¼æ”›-æ”㩱-㩴𢹢𢹬-ð¢ºð«¾œ-𫾞𭣑𭣒𰔽𰔾攞-攤攦攧鿜𢺂-𢺕𪯃𫾟𫾠𰔿攥攨-攫㩵-㩷𢺖-ð¢ºðª¯„𫾡攬攭𢺞-𢺫𫾢攮㩸㩹𢺬-𢺳𭣓𢺴]
+[radical 65=⽀支:支𭣔攰𢺵𭣕𢺶𭣖𰕀㩺𢺷-𢺽𪯆攱𢺾-𢻀𭣗𭣘㩻㩼ð¢»-𢻇𢻉ð°•ã©½ð¢»Š-ð¢»ðª¯…攲㩾𢻎-𢻙𭣙𭣚𰕂𢻚-𢻜𫾣ð¢»-𢻟𪯇𭣛攳𢻠-𢻤𫾤𭣜ð­£ð¢»¥-𢻩𭣞𫾥𭣟𢻪𭣠]
+[radical 66=â½æ”´:æ”´-攷𫾦𭣡𰕃攸-攼㩿㪀𢻫-𢻲𫾧𭣢𭣣攽-政ãªãª‚𢻳-𢼈𪯈𫾨𭣤𰕄-𰕆敀-故㪃-㪆𢼉-𢼚𪯉𪯊𫾩𭣥-𭣩𰕇敆-敌㪇-㪉𢼛-𢼸ð£‹ðª¯‹ðª¯Œð«¾ª-𫾰𭣪-𭣱𰕈啟æ•-敛㪊-㪎𢼹-𢽙𢽜𢽷ðª¯ðªµŠð«¾±-𫾸𭣲-𭣵𰕉𰕊敜-敪敭ãª-㪚𢽚𢽛ð¢½-𢽶𢽸-𢽾𢾣𪯎ðª¯ð«¾¹-𫿀𭣶-𭣻𰕋-𰕎敫敬敮-数㪛-㪟𢽿-𢾢𢾤ðª¯ð«¿-𫿇𭣼-𭤂ð°•ð°•æ•±-敳㪠-㪣𢾦-𢿅𪯑𪯒𫿈-𫿌𭤃-𭤇𰕑整-敻㪤-㪦𢿇-ð¢¿ð£›ðª¯“-𪯖ð«¿-ð«¿ð­¤ˆ-𭤋𰕒𰕓敼-敿㪧-㪪𢿞-𢿽𪯗-𪯙𫿑-𫿗𰕔𰕕斀-斂𢿾-𣀃𣀅-ð£€ðª¯šð«¿˜-𫿚𭤌ð­¤ð°•–ð°•—æ–ƒè´ãª«ãª¬ð£€„ð£€-𣀚𪯛𪯜𫿛-ð«¿ð­¤Žð­¤æ–„𣀛-𣀢𩠮𫿞-𫿢𰕘斅斆㪭𣀣-𣀭𩠰𫿣-𫿦𰕙㪮𣀮-𣀲ðª¯ðª¯žð«¿§ð«¿¨ð­¤ð­¤‘𣀳𣀴𫿩𭤒𣀵-𣀺𪯟𫿪-𫿬𣀻𣀼𭤓𣀽-ð£€]
+[radical 67=⽂文:æ–‡ð£ð«¿­æ–ˆãª¯ð£‚𪯠𭤔斉ð£ƒ-ð£…𪯡𪯢ð£†-ð£‰ðª¯£ð«¿®ð«¿¯ð­¤•-𭤙𰕚斊斋㪰ð£Šð£Œð£ðª¯¤ð«¿°æ–Œ-æ–ð£Ž-ð£“ð£šæ–æ–‘ð£”-ð£–𪯥-𪯧𫿱斒㪱ð£—-ð£™ð©–°ðª¯¨-𪯪𰕛ð£œ-ð£¡æ–“ð£¢-ð£¤ð­¤šð­¤›ð£¥ð£¦ð°•œæ–”ð£§ð£¨ð«¿²æ–•ð£©ð£ªæ––ð£«]
[radical 68=⽃斗:æ–—ð£¬ãª²ãª³æ–˜ð£­ãª´ð£®-ð£°ãªµð£±ð£²ðª¯«æ–™æ–šãª¶ð£³-ð£¶ðª¯¬ð«¿³æ–›æ–œãª·ð£·-ð£»ð«¿´æ–㪸ð£¼-𣂀𫿵斞斟ð£‚𣂃-𣂅斠斡𣂂𣂆-𣂈𪯭㪹𣂉-𣂋𪯮𫿶𭤜斢𫿷ð­¤æ–£ãªºð£‚Œð£‚𪯯𫿸𣂎-ð£‚𪯰㪻𭤞]
-[radical 69=⽄斤:斤𣂑斥𭤟𣂒𣂓斦-斩𣂔-𣂘𪯱𭤠斪斫㪼㪽𣂙𣂚𭤡𭤢㪾㪿𣂛-ð£‚斬断𣂞-𣂠𫿹𫿺斮斯㫀𣂡-𣂪𣂬𣂭𫿻𫿼新斱𣂮-𣂵𥇴𭤣𭤤斲ã«ð£‚¶-𣂺𭤥斳㫂𣂻-𣂿斴𣃀-𣃆𫿽斵斶𣃇-𣃋𭤦斷𣃌-𣃓𫿾𣃔𣃕𫿿𣃖斸]
-[radical 70=â½…æ–¹:方𭤧㫃𣃗𭤨-𭤪𣃘𣃙斺-於㫄𣃚-𣃜𪯲𪯳𬀀𭤫𭤬施-旀㫆ð£ƒ-𣃥𪯴𭤭-ð­¤´æ—-旆旊㫅㫇-㫉𣃦-𣃲𪯵-𪯷ð¬€-𬀆𭤵-𭤹旇-旉旋-æ—ã«Š-㫌𣃳-𣃻𪯸𫞀𬀇𬀈𭤺æ—æ—‘ã«ð£ƒ¼-𣄇𪯹-𪯼𬀉𬀊𭤻-𭤾旒-旕𣄈-ð£„𪯽ð«žð¬€‹-ð¬€ð­¤¿ð­¥€æ—–旗𣄎-𣄓𪯾𬀎-ð¬€ð­¥ã«Žã«ð£„”-𣄖𪯿𪰀𬀑𬀒𭥂-𭥄旘旙𣄗-𣄜ðª°ðª°‚𬀓-𬀖𭥅旚ð£„𬀗𭥆旛𣄞-𣄣𬀘-𬀛𭥇𭥈旜-旞𣄤𪰃𪰄𬀜ð¬€ð­¥‰æ—Ÿð£„¥ðª°…𬀞-𬀠𣄦𬀡𣄧𣄨𬀢𣄩𬀣𣄪-𣄬𬀤]
-[radical 71=⽆无:无旡𣄭-𣄯既𣄰-𣄳旣𬀥𣄴𣄵旤𣄶-𣄺𭥊]
-[radical 72=⽇日:æ—¥-旧𣄻-𣄽𭥋旨-æ—¯ã«ã«‘𣄾-𣅃𣅅𬀦𭥌-𭥎旰-旸㫒-㫗𣅄𣅆-𣅙𪰆𪰇𬀧𬀨ð­¥-𭥑旹-昙㫘-㫚𣅚-𣅶𪰈-𪰎𬀩-𬀫𭥒-𭥠昚-昿㫛-㫤𣅷-𣆈𣆊-𣆑ðª°-𪰘𫞂𫞃𬀬-𬀮𭥡-𭥭晀-æ™–ã«¥-㫮𣆒-𣆱𪰙-𪰤𫞄𬀯-𬀴𭥮-𭦃勗晗-晩曽㫯-㫴𣆲-𣇡𪰥-𪰨𬀵-𬀺𭦄-𭦘晪-暃暑㫵-㬀𣇢-𣈣𪰩-𪰮𬀻-ð¬ð­¦™-𭦧暄-æšæš’-æš™ã¬-㬌𣈤-𣉑𪰯-𪰷ð¬‚-ð¬‰ð­¦¨-ð­§æšš-暨ã¬-ã¬ð£‰’-𣉠𣉢-𣉺𪰸-𪰽ð¬Š-ð¬ð­§‚-𭧑暩-暷㬑-㬖𣉻-𣊈𣊊-𣊑𣊓-ð£Šð£‹‡ðª°¾-𪱅ð¬-ð¬’ð­§’-𭧡暸-æ›é¾§ã¬—-㬟𣊉𣊞-𣋆𣋈𪱇-𪱌ð¬“-ð¬˜ð­§¢-𭧴曎-曗曚㬠-㬢ð žð£‹‰-ð£‹ðª±†ðª±ð¬™-ð¬›ð­§µ-𭧾曘曙曛曜㬣-㬨𠆛𣋞-𣋱𥫂𪱎-ðª±ð¬œð­§¿-𭨉æ›-曢㬩㬪𣋲-𣋾𭨊-𭨌曣-曨㬫𣋿-𣌇ð¬ð¬žð­¨-ð­¨æ›©ð£Œˆ-𣌌𪱑-𪱓𭨑㬬㬭ð£Œ-𣌕曪-曬㬮𣌖𭨒曭曮𣌗-𣌙𣌛𪱔𭨓𭨔曯㬯𣌜ð£Œð­¨•-𭨗𣌟𣌠]
-[radical 73=⽈曰:æ›°-曳㬰𭨘更曵𣌡𣌢ð¬Ÿð¬ æ›¶ð£Œ£-𣌦ð¬¡æ›·ð£†‰ð£Œ§-𣌬𭨙𭨚書曺𣌭-𣌶ð¬¢ð­¨›ð­¨œæ›¹æ›»æ›¼ð£Œ·-𣌺ð¬£ð¬¤æ›¾æ›¿æœæœ‚𣌻-𣌽ð¬¥-ð¬§ð­¨æœƒð£Œ¾-ð£‚朄朅ð£ƒ-ð£…ð¬¨-ð¬ªð­¨žð£†-ð£Šðª±•ð¬«ð­¨Ÿ-𭨢朆㬱ð£‹-ð£Žðª±–𪱗㬲ð£ð£ð¬¬ð£‘-ð£—𪱘ð£˜ð£™ð¬­-ð¬¯æœ‡ð­¨£ð£šð ‘±ð£›ð£œ]
-[radical 74=⽉月:月ð£æœ‰ð£žðª±™ð¬°ð­¨¤ð­¨¥ð£Ÿ-ð££ðª±šð¬±-ð¬³ð­¨¦ð­¨§æœŠ-æœã¬³ð£¤ðª±›ð¬´-ð¬¸ð­¨¨-𭨭朎-朑ð£¥-ð£§ð£©-ð£¬ðª±œðª±ð¬¹ð­¨®-𭨱朒-朕㬴㬵ð£­ð£®ðª±žð«ž…ð¬º-ð¬¼ð­¨²ð­¨³æœ–-望㬶㬷ð£±-ð£¶ðª± -𪱢ð¬½-ð¬‚ð­¨´-𭨸朜-期㬸ð£·-𣎃𦜳𪱣𫞆𫞇𬂂-𬂅𭨹-𭨽朠朡𣎄-𣎌𪱤-𪱧𬂆𭨾-𭩀朢㬺㬻ð£Ž-𣎑𪱟𪱨-𪱪𬂇-𬂌ð­©-𭩃膤㬼-㬾𣎒-𣎙𪱫𪱬ð¬‚𬂎𭩄𭩅朣-朥㬿𣎚𣎛ð£Ž-𣎢𪱭ð¬‚ð¬‚𭩆-𭩉㭀𣎜𣎣-𣎨𦡖𬂑-𬂔𭩊-𭩎朦𣎩-𣎭𬂕𬂖ð­©-𭩑𬂗𬂘𭩒-𭩕朧𣎮𣎯𪱮𪱯𬂙𣎰𣎱𭩖𣎲𪱰𭩗𬂚]
-[radical 75=⽊木:木朩𣎳𣎴𬂛未-朰𣎵-𣎷𬂜𭩘朱-æƒã­ð£Ž¸-ð£€æ„-æ©æžã­‚-ã­†ð£-ð£“𪱱-𪱵ð¬‚-𬂟𭩙-ð­©›æª-枀枂-æž­ã­‡-ã­ð£”-ð£‡ðª±¶-𪱹𫞈𬂠-𬂤𭩜-ð­©¡æž®-æ ‘ã­‘-ã­—ð£ˆ-ð£´ðª±º-𪲂𬂥𬂦𭩢-𭩲栒-桪鿄㭘-ã­§ð£µ-𣑦𣑨-𣑾𪲃-ðª²ð«ž‰ð«žŠð¬‚§-𬂱𭩳-𭪂桫-棂㭨-㭵㭷𣑿-𣓀ðª²-𪲞𬂲-𬂼𭪃-𭪗棃-椮㭶㭸-㮊ð£“-𣔰𪲟-𪲯𬂽-𬃓𭪘-𭪵椯-榉榋榌榔榘﨓㮋-㮠㮢㮣𣔱-𣕣𣕥-𣖩𪲰-𪳇𬃔-𬃮𭪶-𭫎榊æ¦-榓榕-榗榙-槡槩樮﨔㮤-㮽𣕤𣖪-𣘔𪳈-𪳜𫞋𫞌𬃯-𬄆ð­«-𭫟槢-槨槪-樭樯-樱橥橴㮾-ã¯ã¯‘㯒㯠𣘕-𣙑𣙓-𣙺ðª³-𪳬ð«ž-ð«žð¬„‡-𬄘𭫠-𭫺樲-橤橦-橳橵-橼ã¯ã¯“-㯟㯡-㯩𣙒𣙻-𣛯𪳭-𪳼ð«žð¬„™-𬄫𭫻-𭬉橽-檪㯪-㯶𣛰-𣜡𣜣-ð£€ðª³½-𪴈𫞑𬄬-𬄶𭬊-𭬑檫-櫊㯷-㯽ð£-ð£˜ð£š-𣞎𪴉-ðª´ð«ž’𬄷-𬅀𭬒-ð­¬æ«‹-櫦櫫櫭㯾-ã°ˆð£™ð£ž-𣟃𣟑ðª´-𪴕ð¬…-𬅈𭬞-𭬨櫧-櫪櫬櫮-櫶㰉-㰓㰖𣟄-ð£Ÿð£Ÿ’-𣟮𪴖-𪴚𬅉𬅊𭬩-𭬳櫸-欅欌㰔㰕𣟯-ð£ ð£ ƒ-𣠘𪴛-𪴞𬅋-ð¬…ð­¬´-𭬷櫷欆-欋æ¬æ¬Žã°—㰘𣠂𣠙-𣠶𪴟-𪴡ð¬…-𬅓𭬸-𭬺æ¬-欒㰙-㰜𣠷-𣡊𪴢𪴣𬅔𭬻-𭭀欓-欕𣡋-ð£¡ð¥¤”𪴤𪴥𬅕-𬅘欖-欛𣡞-𣡨𣡮𪴦欜æ¬ð£¡©-𣡭𣡯-𣡱𪴨𬅙𬅚ð­­é¿ð£¡²ð£¡´ð£¡µðª´§ð¬…›æ¬žæ¬Ÿð£¡¶-𣡹𭭂𣡺-𣡼𬅜𭭃𣡽-𣡿]
-[radical 76=⽋欠:欠-欢𣢀𭭄欤ã°ã°žð£¢-𣢈ð¬…𬅞欣欥-欧㰟-㰢𣢉-𣢖𪴩𬅟𭭅𭭆欨-欪㰣-㰨𣢗-𣢦𪴪𪴫𬅠𬅡欫-欱㰩-㰭𣢧-𣢹𬅢𬅣𭭇-𭭋欲-欸㰮-㰱𣢺-𣣇𪴬𪴭𬅤-𬅨𭭌欹-欿㰲-㰶㰸𣣈-𣣜𪴮𬅩𬅪ð­­-ð­­æ­€-歈㰹-ã°¾ð££-𣣫𣣭-𣣱𪴯𪴰𬅫𬅬ð­­ð­­‘æ­‰-æ­ã°¿-ã±ð££²-𣤇𪴱𬅭-𬅯𭭒歎-歓㱂㱃𣤈-𣤗𪴲𭭓𭭔歔-歚㱄㱅𣤘-𣤟𬅰𬅱𭭕𭭖歛-æ­ã±†-㱉𣤠-𣤧𬅲歞歟𣤨-𣤫𬅳歠㱊𣤬-𣤰㱋𣤱-𣤳𪴳𭭗𣤴𣤵𣤷𣤸𬅴歡㱌𣤶𣤹-𣤼ã±ð£¤½ð¬…µð£¤¾ðª´´ã±Žð£¤¿-ð£¥]
-[radical 77=⽌止:止龰𣥂正𣥃𣥄此ã±ð£¥…𣥆𬅶𬅷𭭘-ð­­šæ­¥ã±ã±‘𣥇𣥈𣥊-𣥌𬅸武-歩𣥉ð£¥-𣥡𪴵𬅹𭭛-ð­­æ­ªæ­«ã±’-㱔𣥢-𣥤𬅺𬅻𭭞-𭭠歬歭𣥦-𣥱𪴶𬅼𬅽𭭡𣥳-𣥸𪴷𬅾-𬆀𭭢-𭭥歮歯㱕㱖𣥹-𣦆𪴸ð¬†-𬆃𭭦-ð­­©æ­°-歳𣦇-𣦊𣦌-𣦎𤚜𪴹𪴺𫞓𬆄𬆅𭭪𭭫歴㱗ð£¦-𣦓𪴻𬆆𬆇𭭬𭭭歵歶𣦔-𣦛𪴼𬆈𬆉𭭮-𭭱歷𣦜-𣦠𪴽𪴾𬆊𬆋𭭲-𭭴𣦡-𣦥𪴿𬆌ð¬†ð­­µð­­¶æ­¸ã±˜ð£¦¦-𣦫𬆎𭭷𣦬ð¬†ð¬†ð£¦®ð­­¸-𭭻𣦯-𣦴𭭼]
-[radical 78=â½æ­¹:歹𣦵𣦶歺𣦷死㱙𣦸-𣦾𭭽-𭭿歼𣦿-𣧈𭮀ð­®æ­½-æ®ã±š-ã±ð£§‰-𣧜𭮂-𭮅殂-殇㱞-ã± ð£§-𣧱𪵀ðªµð¬†‘𬆒𭮆-𭮈殈-残㰷㱡𣧲-𣨄𪵂𪵃𬆓-𬆕𭮉-𭮑殌-殓㱢㱣𣨅-𣨕𪵄𬆖𬆗𭮒-ð­®–æ®”-殚㱤-㱩𣨖-𣨰𪵅𬆘-𬆚𭮗𭮘殛殜㱪-㱮𣨱-𣩃𬆛𭮙-ð­®›æ®-殡㱯-㱲𣩄-𣩌𪵆𭮜殢-殦㱳㱴ð£©-𣩜𫞔ð­®ð­®žæ®§-殫㱵-ã±·ð£©-𣩧𭮟-𭮣殬-殮㱸𣩨-𣩮𪵇殯𣩯-𣩶𭮤-𭮧殰殱𣩷𣩸𬆜鿞㱹㱺𣩹-𣩻ð¬†æ®²ð£©¼-𣩾㱻𣩿-ð£ª]
-[radical 79=⽎殳:殳㱼𬆞殴㱽𣪂-𣪄𬆟𬆠𭮨段殶𣪅-𣪇𬆡𬆢殷㱾㱿𣪈-𣪊𪵈𪵉𬆣𬆤𭮩-𭮭殸-殻㲀𣪋-𣪘𪵋𬆥-𬆧𭮮-𭮱殼殽ã²-㲃𣪙-𣪟𪵌-𪵎𬆨𭮲-𭮶殾-毂㲄𣪠-𣪬ðªµð¬†©-𬆬𭮷𭮸毃毄㲅𣪮-𣪵𬆭𭮹-𭮻毅毆𣪶-𣪺𤛗ðªµð¬†®-𬆰𭮼𭮽毇毈㲆-㲈𣪻-𣫋𬆱𭮾-ð­¯ã²‰ð£«Œ-ð£«ðªµ‘𪵒𬆲𬆳㲊ð£«-𣫗𭯂毉𣫘-ð£«ð­¯ƒð£«žð£«Ÿð­¯„𣫠𣫡𬆴毊𣫢-𣫨𭯅𣫩𪵓𭯆𣫪𣫫𬆵]
+[radical 69=⽄斤:斤𣂑斥𭤟𣂒𣂓斦-斩𣂔-𣂘𪯱𭤠ð°•ð°•žæ–ªæ–«ãª¼ãª½ð£‚™ð£‚šð­¤¡ð­¤¢ãª¾ãª¿ð£‚›-ð£‚斬断𣂞-𣂠𫿹𫿺斮斯㫀𣂡-𣂪𣂬𣂭𫿻𫿼𰕟新斱𣂮-𣂵𥇴𭤣𭤤𰕠斲ã«ð£‚¶-𣂺𭤥𰕡斳㫂𣂻-𣂿𰕢斴𣃀-𣃆𫿽𰕣𰕤斵斶𣃇-𣃋𭤦斷𣃌-ð£ƒð°•¥ð£ƒ‘-𣃓𫿾𣃔𣃕𫿿𣃖斸𰕦]
+[radical 70=â½…æ–¹:方𭤧㫃𣃗𭤨-𭤪𣃘𣃙斺-於㫄𣃚-𣃜𪯲𪯳𬀀𭤫𭤬施-旀㫆ð£ƒ-𣃥𪯴𭤭-𭤴𰕧æ—-旆旊㫅㫇-㫉𣃦-𣃲𪯵-𪯷ð¬€-𬀆𭤵-𭤹𰕨旇-旉旋-æ—ã«Š-㫌𣃳-𣃻𪯸𫞀𬀇𬀈𭤺𰕩-ð°•«æ—æ—‘ã«ð£ƒ¼-𣄇𪯹-𪯼𬀉𬀊𭤻-𭤾𰕬𰕭旒-旕𣄈-ð£„𪯽ð«žð¬€‹-ð¬€ð­¤¿ð­¥€ð°•®æ—–旗𣄎-𣄓𪯾𬀎-ð¬€ð­¥ð°•¯ã«Žã«ð£„”-𣄖𪯿𪰀𬀑𬀒𭥂-𭥄旘旙𣄗-𣄜ðª°ðª°‚𬀓-𬀖𭥅旚ð£„𬀗𭥆旛𣄞-𣄣𬀘-𬀛𭥇𭥈旜-旞𣄤𪰃𪰄𬀜ð¬€ð­¥‰æ—Ÿð£„¥ðª°…𬀞-𬀠𣄦𬀡𣄧𣄨𬀢𣄩𬀣𣄪-𣄬𬀤]
+[radical 71=⽆无:无旡𣄭𰕰𣄮𣄯既𣄰-𣄳旣𬀥𣄴𣄵旤𣄶-𣄺𭥊]
+[radical 72=⽇日:æ—¥-旧𣄻-𣄽𭥋旨-æ—¯ã«ã«‘𣄾-𣅃𣅅𬀦𭥌-𭥎𰕱𰕲旰-旸㫒-㫗𣅄𣅆-𣅙𪰆𪰇𬀧𬀨ð­¥-𭥑𰕳旹-昙㫘-㫚𣅚-𣅶𪰈-𪰎𬀩-𬀫𭥒-ð­¥ ð°•´-𰕷昚-昿㫛-㫤𣅷-𣆈𣆊-𣆑ðª°-𪰘𫞂𫞃𬀬-𬀮𭥡-𭥭𰕸-𰕾晀-æ™–ã«¥-㫮𣆒-𣆱𪰙-𪰤𫞄𬀯-𬀴𭥮-𭦃𰕿-𰖆勗晗-晩曽㫯-㫴𣆲-𣇡𪰥-𪰨𬀵-𬀺𭦄-𭦘𰖇-𰖌晪-暃暑㫵-㬀𣇢-𣈣𪰩-𪰮𬀻-ð¬ð­¦™-𭦧ð°–-ð°–•æš„-æšæš’-æš™ã¬-㬌𣈤-𣉑𪰯-𪰷ð¬‚-ð¬‰ð­¦¨-ð­§ð°––-ð°–šæšš-暨ã¬-ã¬ð£‰’-𣉠𣉢-𣉺𪰸-𪰽ð¬Š-ð¬ð­§‚-𭧑𰖛-ð°– æš©-暷㬑-㬖𣉻-𣊈𣊊-𣊑𣊓-ð£Šð£‹‡ðª°¾-𪱅ð¬-ð¬’ð­§’-𭧡𰖡-𰖪暸-æ›é¾§ã¬—-㬟𣊉𣊞-𣋆𣋈𪱇-𪱌ð¬“-ð¬˜ð­§¢-ð­§´ð°–«-𰖮曎-曗曚㬠-㬢ð žð£‹‰-ð£‹ðª±†ðª±ð¬™-ð¬›ð­§µ-𭧾𰖯-𰖲曘曙曛曜㬣-㬨𠆛𣋞-𣋱𥫂𪱎-ðª±ð¬œð­§¿-𭨉𰖳-ð°–µæ›-曢㬩㬪𣋲-𣋾𭨊-𭨌𰖶-𰖸曣-曨㬫𣋿-𣌇ð¬ð¬žð­¨-ð­¨æ›©ð£Œˆ-𣌌𪱑-𪱓𭨑𰖹-𰖻㬬㬭ð£Œ-𣌕𰖼曪-曬㬮𣌖𭨒𰖽曭曮𣌗-𣌙𣌛𪱔𭨓𭨔曯㬯𣌜ð£Œð­¨•ð­¨–𰖾𭨗𣌟𣌠]
+[radical 73=⽈曰:æ›°-曳㬰𭨘更曵𣌡𣌢ð¬Ÿð¬ æ›¶ð£Œ£-𣌦ð¬¡æ›·ð£†‰ð£Œ§-𣌬𭨙𭨚書曺𣌭-𣌶ð¬¢ð­¨›ð­¨œæ›¹æ›»æ›¼ð£Œ·-𣌺ð¬£ð¬¤æ›¾æ›¿æœæœ‚𣌻-𣌽ð¬¥-ð¬§ð­¨ð°–¿ð°—€æœƒð£Œ¾-ð£‚朄朅ð£ƒ-ð£…ð¬¨-ð¬ªð­¨žð°—ð£†-ð£Šðª±•ð¬«ð­¨Ÿ-𭨢朆㬱ð£‹-ð£Žðª±–𪱗㬲ð£ð£ð¬¬ð£‘-ð£•ð°—‚ð£–ð£—𪱘ð£˜ð£™ð¬­-ð¬¯æœ‡ð­¨£ð£šð ‘±ð°—ƒð£›ð£œ]
+[radical 74=⽉月:月ð£æœ‰ð£žðª±™ð¬°ð­¨¤ð­¨¥ð£Ÿ-ð££ðª±šð¬±-ð¬³ð­¨¦ð­¨§æœŠ-æœã¬³ä¶ºä¶»ð£¤ð¦™—𪱛ð¬´-ð¬¸ð­¨¨-𭨭𰗄朎-æœð£¥-ð£§ð£©-ð£¬ðª±œðª±ð¬¹ð­¨®-𭨱𰗅朒-朕㬴㬵ð£­ð£®ðª±žð«ž…ð¬º-ð¬¼ð­¨²ð­¨³ð°—†ð°—‡æœ–-望㬶㬷ð£±-ð£¶ðª± -𪱢ð¬½-ð¬‚ð­¨´-𭨸朜-期㬸䶼ð£·-𣎃𦜳𪱣𫞆𫞇𬂂-𬂅𭨹-𭨽𰗈𰗉朠䶽𣎄-𣎌𪱤-𪱧𬂆𭨾-𭩀𰗊朢㬺㬻ð£Ž-𣎑𪱟𪱨-𪱪𬂇-𬂌ð­©-𭩃𰗋膤㬼-㬾𣎒-𣎙𪱫𪱬ð¬‚𬂎𭩄𭩅𰗌ð°—朣朤㬿𣎚𣎛ð£Ž-𣎢𪱭ð¬‚ð¬‚𭩆-𭩉𰗎㭀𣎜𣎣-𣎨𦡖𬂑-𬂔𭩊-𭩎朦𣎩-𣎭𬂕𬂖ð­©-ð­©‘ð°—𬂗𬂘𭩒-𭩕朧𣎮𣎯𪱮𪱯𬂙𣎰𣎱𫇃𭩖𣎲𪱰𭩗𬂚]
+[radical 75=⽊木:木朩𣎳𣎴𬂛未-朰𣎵-𣎷𬂜𭩘朱-æƒã­ð£Ž¸-ð£€ð°—-ð°—’æ„-æ©æžã­‚-ã­†ð£-ð£“𪱱-𪱵ð¬‚-𬂟𭩙-𭩛𰗓æª-枀枂-æž­ã­‡-ã­ð£”-ð£‡ðª±¶-𪱹𫞈𬂠-𬂤𭩜-ð­©¡ð°—”-ð°——æž®-æ ‘ã­‘-ã­—ð£ˆ-ð£´ðª±º-𪲂𬂥𬂦𭩢-𭩲𰗘-𰗛栒-桪鿄㭘-ã­§ð£µ-𣑦𣑨-𣑾𪲃-ðª²ð«ž‰ð«žŠð¬‚§-𬂱𭩳-𭪂𰗜-𰗦桫-棂㭨-㭵㭷𣑿-𣓀ðª²-𪲞𬂲-𬂼𭪃-ð­ª—ð°—§-𰗰棃-椮㭶㭸-㮊ð£“-𣔰𪲟-𪲯𬂽-𬃓𭪘-𭪵𰗱-𰗹椯-榉榋榌榔榘﨓㮋-㮠㮢㮣𣔱-𣕣𣕥-𣖩𪲰-𪳇𬃔-𬃮𭪶-ð­«Žð°—º-𰘆榊æ¦-榓榕-榗榙-槡槩樮﨔㮤-㮽𣕤𣖪-𣘔𪳈-𪳜𫞋𫞌𬃯-𬄆ð­«-𭫟𰘇-𰘕槢-槨槪-樭樯-樱橥橴㮾-ã¯ã¯‘㯒㯠𣘕-𣙑𣙓-𣙺ðª³-𪳬ð«ž-ð«žð¬„‡-𬄘𭫠-𭫺𰘖-𰘤樲-橤橦-橳橵-橼ã¯ã¯“-㯟㯡-㯩𣙒𣙻-𣛯𪳭-𪳼ð«žð¬„™-𬄫𭫻-𭬉𰘥-𰘲橽-檪㯪-㯶𣛰-𣜡𣜣-ð£€ðª³½-𪴈𫞑𬄬-𬄶𭬊-𭬑𰘳-𰘺檫-櫊㯷-㯽ð£-ð£˜ð£š-𣞎𪴉-ðª´ð«ž’𬄷-𬅀𭬒-ð­¬ð°˜»-𰘽櫋-櫦櫫櫭㯾-ã°ˆð£™ð£ž-𣟃𣟑ðª´-𪴕ð¬…-𬅈𭬞-𭬨𰘾-𰙄櫧-櫪櫬櫮-櫶㰉-㰓㰖𣟄-ð£Ÿð£Ÿ’-𣟮𪴖-𪴚𬅉𬅊𭬩-𭬳櫸-欅欌㰔㰕𣟯-ð£ ð£ ƒ-𣠘𪴛-𪴞𬅋-ð¬…ð­¬´-ð­¬·ð°™…-𰙈櫷欆-欋æ¬æ¬Žã°—㰘𣠂𣠙-𣠶𪴟-𪴡ð¬…-𬅓𭬸-𭬺æ¬-欒㰙-㰜𣠷-𣡊𪴢𪴣𬅔𭬻-𭭀欓-欕𣡋-ð£¡ð¥¤”𪴤𪴥𬅕-𬅘欖-欛𣡞-𣡨𣡮𪴦欜æ¬ð£¡©-𣡭𣡯-𣡱𪴨𬅙𬅚ð­­é¿ð£¡²ð£¡´ð£¡µðª´§ð¬…›æ¬žæ¬Ÿð£¡¶-𣡸𰙉𣡹𭭂𣡺-𣡼𬅜𭭃𣡽-𣡿]
+[radical 76=⽋欠:欠-欢𣢀𭭄欤ã°ã°žð£¢-𣢈ð¬…𬅞欣欥-欧㰟-㰢𣢉-𣢖𪴩𬅟𭭅𭭆𰙊𰙋欨-欪㰣-㰨𣢗-𣢦𪴪𪴫𬅠𬅡𰙌欫-欱㰩-㰭䶾𣢧-𣢹𬅢𬅣𭭇-𭭋欲-欸㰮-㰱𣢺-𣣇𪴬𪴭𬅤-𬅨𭭌ð°™ð°™Žæ¬¹-欿㰲-㰶㰸𣣈-𣣜𪴮𬅩𬅪ð­­-ð­­ð°™-ð°™‘æ­€-歈㰹-ã°¾ð££-𣣫𣣭-𣣱𪴯𪴰𬅫𬅬ð­­ð­­‘ð°™’-ð°™•æ­‰-æ­ã°¿-ã±ð££²-𣤇𪴱𬅭-𬅯𭭒𰙖𰙗歎-歓㱂㱃𣤈-𣤗𪴲𭭓𭭔𰙘歔-歚㱄㱅𣤘-𣤟𬅰𬅱𭭕𭭖歛-æ­ã±†-㱉𣤠-𣤧𬅲𰙙歞歟𣤨-𣤫𬅳歠㱊𣤬-𣤰㱋𣤱-𣤳𪴳𭭗𣤴𣤵𣤷𣤸𬅴歡㱌𣤶𣤹-𣤼ã±ð£¤½ð¬…µð£¤¾ðª´´ã±Žð£¤¿-ð£¥]
+[radical 77=⽌止:止龰𣥂正𣥃𣥄此ã±ð£¥…𣥆𬅶𬅷𭭘-𭭚𰙚步ã±ã±‘𣥇𣥈𣥊-𣥌𬅸𰙛𰙜武-歩𣥉ð£¥-𣥡𪴵𬅹𭭛-ð­­ð°™-𰙟歪歫㱒-㱔𣥢-𣥤𬅺𬅻𭭞-ð­­ ð°™ -𰙣歬歭𣥦-𣥱𪴶𬅼𬅽𭭡𰙤-𰙩𣥳-𣥸𪴷𬅾-𬆀𭭢-𭭥𰙪歮歯㱕㱖𣥹-𣦆𪴸ð¬†-𬆃𭭦-ð­­©ð°™«-𰙮歰-歳𣦇-𣦊𣦌-𣦎𤚜𪴹𪴺𫞓𬆄𬆅𭭪𭭫𰙯-𰙳歴㱗ð£¦-𣦓𪴻𬆆𬆇𭭬𭭭𰙴𰙵歵歶𣦔-𣦛𪴼𬆈𬆉𭭮-𭭱𰙶𰙷歷𣦜-𣦠𪴽𪴾𬆊𬆋𭭲-𭭴𰙸𰙹𣦡-𣦥𪴿𬆌ð¬†ð­­µð­­¶æ­¸ã±˜ð£¦¦-𣦫𬆎𭭷𣦬ð¬†ð¬†ð°™ºð£¦®ð­­¸-𭭻𰙻𣦯-𣦴𭭼]
+[radical 78=â½æ­¹:歹𣦵𣦶歺𣦷死㱙𣦸-𣦾𭭽-𭭿歼𣦿-𣧈𭮀ð­®ð°™¼æ­½-æ®ã±š-ã±ð£§‰-𣧜𭮂-𭮅殂-殇㱞-ã± ð£§-𣧱𪵀ðªµð¬†‘𬆒𭮆-𭮈殈-残㰷㱡𣧲-𣨄𪵂𪵃𬆓-𬆕𭮉-𭮑𰙽𰙾殌-殓㱢㱣𣨅-𣨕𪵄𬆖𬆗𭮒-𭮖𰙿𰚀殔-殚㱤-㱩𣨖-𣨰𪵅𬆘-𬆚𭮗𭮘殛殜㱪-㱮𣨱-𣩃𬆛𭮙-ð­®›æ®-殡㱯-㱲𣩄-𣩌𪵆𭮜殢-殦㱳㱴ð£©-𣩜𫞔ð­®ð­®žð°šæ®§-殫㱵-ã±·ð£©-𣩧𭮟-𭮣殬-殮㱸𣩨-𣩮𪵇殯𣩯-𣩶𭮤-𭮧殰殱𣩷𣩸𬆜鿞㱹㱺𣩹-𣩻ð¬†ð°š‚殲𣩼-𣩾㱻𣩿-ð£ª]
+[radical 79=⽎殳:殳㱼𬆞殴㱽𣪂-𣪄𬆟𬆠𭮨段殶𣪅-𣪇𬆡𬆢殷㱾㱿𣪈-𣪊𪵈𪵉𬆣𬆤𭮩-𭮭殸-殻㲀𣪋-𣪘𪵋𬆥-𬆧𭮮-𭮱殼殽ã²-㲃𣪙-𣪟𪵌-𪵎𬆨𭮲-𭮶殾-毂㲄𣪠-𣪬ðªµð¬†©-𬆬𭮷𭮸𰚃-𰚅毃毄㲅𣪮-𣪵𬆭𭮹-𭮻毅毆𣪶-𣪺𤛗ðªµð¬†®-𬆰𭮼𭮽𰚆𰚇毇毈㲆-㲈𣪻-𣫋𬆱𭮾-ð­¯ð°šˆã²‰ð£«Œ-ð£«ðªµ‘𪵒𬆲𬆳𰚉㲊ð£«-𣫗𭯂毉𣫘-ð£«ð­¯ƒð°šŠð£«žð£«Ÿð­¯„𣫠𣫡𬆴毊𣫢-𣫨𭯅𣫩𪵓𭯆𣫪𣫫𬆵]
[radical 80=â½æ¯‹:毋毌𣫬æ¯æ¯Žð£«­ð­¯‡æ¯æ¯ð£«®æ¯‘毒𣫯-𣫲𬆶𭯈𣫳-𣫸𬆷毓𣫹-𣫼𪵔𭯉𣫽-𣫿𬆸𣬀ð£¬]
-[radical 81=â½æ¯”:比毕𠂱𣬂-𣬇毖-毘㲋𭯊毙𣬈-𣬊𭯋-𭯎𣬋𣬌ð­¯ð¬†¹ð­¯ð­¯‘ð£¬ð¬†ºð£¬Ž-𣬑𪵕𣬒-𣬔毚𣬕𣬖𬆻𣬗-𣬚]
-[radical 82=⽑毛:毛𣬛𪵖㲌𣬜-𣬠毜æ¯ð£¬¡-𣬨𬆼毞毟ã²-㲑𣬩-𣬷𪵗𪵘𬆽-𬆿𭯒毠毡㲒𣬸-𣭛𪵙𪵚𬇀𭯓-𭯗毢-毪㲓𣭜-𣭰𪵛𪵜𭯘毫-毮㲔-㲚𣭱-𣮇ð¬‡ð­¯™ð­¯šæ¯¯-毶㲛-㲞𣮈-𣮧ðªµðªµžð­¯›-ð­¯æ¯·-毽㲟-㲣𣮨-𣯄𪵟𬇂𭯞𭯟毾㲤-㲩𣯅-𣯢𪵠𬇃𬇄𭯠-𭯢毿-氂𣯣-𣯷𪵡𬇅氃-氇㲪-㲮𣯸-𣰉𬇆𭯣-𭯥氈-氊𣰊-𣰙𬇇𭯦-𭯩氋㲯㲰𣰚-𣰪𪵢𬇈𭯪氌㲱𣰫-𣰰𭯫𠫈𣰱-𣰵𭯬𣰶-𣰺æ°ð£°»-𣰾𭯭𣰿-ð£±ð­¯®æ°Žã²²ð£±‚𣱃𭯯𣱄]
-[radical 83=â½’æ°:æ°-民𫞕氒𫞖𬇉氓𣱅𣱆𬇊𬇋𭯰𣱇-𣱊𬇌㲳ð¬‡ð£±‹-𣱎𭯱ð£±ð£±ð¬‡Žð£±‘-𣱔]
-[radical 84=⽓气:æ°”-氘𣱕𣱖氙氚𣱗𣱘氛-æ°ã²´ð£±™-𣱛𪵣ð¬‡ð­¯²æ°ž-氢𣱜-𣱠𪵤ð¬‡æ°£-氩𣱡𬇑氪氫㲵𣱣𪵥氬-氰𣱢𣱤𣱥氱𣱦-𣱨𪵦氲氳𣱩𪵧𬇒㲶𣱪𣱫𭯳㲷𭯴鿫𣱬𣱭𬇓𣱮𭯵𣱯𣱰]
-[radical 85=⽔水:水氵氺𣱱氶-氹㲸𣱲-𣱴氻氼氾-汉㲹-㲼𣱵-𣱿𪵨汊-汤㲽-㲿𣲀-ð£²ðªµ©-𪵬𬇔-𬇗𭯶𭯷汥-沪㳀-㳊𣲎-𣲱𪵭-𪵰𬇘-𬇚𭯸-𭯼沫-泙泛-泴泶-泾㳋-㳕𣲲-𣳣𪵱-𪵶𬇛-𬇟𭯽-𭰋泚泿-洌洎-æ´•æ´—-浕㳖-㳣𣳤-ð£´ðªµ·-𪵽𬇠-𬇦𭰌-ð­°–æ´æ´–æµ–-涘涚-涩㳤-㳳𣴞-𣵶𣷚𪵾-𪶋𫞗𬇧-𬇴𭰗-𭰧涙涪-渂渄-渗渚湴㳴-㴎𣵷-𣷙𣷛-𣷻𣸊𪶌-𪶖𫞘𬇵-𬈄𭰨-𭱂渃渘渙減-湳湵-溌滋滞鿌ã´-㴤𣷼-𣸉𣸋-𣹜𪶗-𪶩𬈅-𬈕𭱃-𭱡æº-滊æ»-滙滛-æ»æ»Ÿ-滪漓㴥-ã´»ð£¹-𣻌𦴶𪶪-𪶾𫞙-𫞛𬈖-𬈤𭱢-𭱵滌滚滫-漊漌-æ¼’æ¼”-漼漾-æ½ã´¼-㵉ð£»-𣻳𣻵-𣼘𣼚-𣽂𪶿-𪷊𬈥-𬈱𭱶-𭲑漋漽潎-潿æ¾-澘澚-æ¾æ¿ãµŠ-㵜𣻴𣽃-𣾨𣾪-𣾿ð£¿-𣿄𪷋-𪷜𫞜𬈲-𬉇𭲒-𭲫澙澞-æ¿æ¿‘-æ¿“æ¿–ãµ-㵮𣾩𣿅-𤀡ðª·-𪷧ð«žð¬‰ˆ-𬉒𭲬-𭲻澀濔濕濗-濲濴-濸㵯-㵼𣿀𤀣-ð¤ð¤Ÿð¤ ðª·¨-𪷲𬉓-𬉚𭲼-ð­³æ¿¹-瀔㵽-㶃ð¤žð¤¡-𤂜𤂞-𤂠𤂢-𤂲𪷳-𪷹𬉛-𬉞ð­³-𭳛濳瀕-瀮㶄-㶋ð¤‚𤂡𤂳-𤃧𪷺-𪷿𫞞𬉟-𬉤𭳜-𭳫瀯-ç㶌-㶑𤃨-ð¤„𪸀-𪸂𬉥-𬉪𭳬-𭳯ç‚-ççç㶒-㶘𢌇𤄎-𤄵𪸃-𪸇𬉫-𬉭𭳰-𭳶ç‘-ç˜ã¶™ã¶šð¤„¶-𤅉𪸈𪸉𬉮𬉯𭳷-ð­³¹ç™-çœã¶›-ã¶ð¤…Š-𤅟𪸊𪸋ç-ç¡ã¶žã¶Ÿð¤… -𤅨𪸌𬉰𬉱𭳺-ð­³½ç¢ç£ð¤…©-𤅯çŽç¤-ç¦ã¶ ð¤…°-𤅶ç§ç¨ð¤…·-𤅿𬉲ç©çªð­³¾ð¤†€ð¬‰³ð¤†]
-[radical 86=⽕ç«:ç«-ç­ð¤†‚ðª¸ð­³¿ç®-ç³ç‚‡ã¶¡ã¶¢ð¤†ƒ-𤆌𭴀-ð­´‚ç´-炀㶣-㶥ð¤†-𤆜𪸎-ðª¸ð¬‰´-𬉺𭴃-ð­´‡ç‚-炆炈-炞㶦-㶪ð¤†-𤆻𪸑-𪸗𬉻-𬊀𭴈-ð­´‘ç‚Ÿ-烃㶫-㶲𤆼-𤇮𪸘-𪸢ð¬Šð¬Š‚ð­´’-𭴚烄-烮㶳-㶸𤇯-𤈤𪸣-𪸪𫞟𬊃-𬊈𭴛-𭴥烯-ç„“ç„•-焘㶹-ã·ð¤ˆ¥-𤉡𪸫-𪸲𫞠𬊉-𬊖𭴦-𭴷焔焙-煀煮㷂-ã·ð¤‰¢-𤊱𪸳-𪹃𬊗-𬊨𭴸-𭵈ç…-ç…­ç…¯-煸煺㮡㷎-㷞𤊲-𤋲𤋴-𤌆ð¤ðª¹„-𪹑𬊩-𬊱𭵉-𭵡煹煻-熙熦蒸㷟-㷪𤌇-𤌱𤌳-ð¤Žðª¹’-𪹠𫞡𬊲-𬊾𭵢-𭵲熚-熥熧-熵黙龦龽㷫-㷲𤌲ð¤-ð¤¨ð¤ª-ð¤¿ð¤Žð¤Žƒ-𤎜𪹡-𪹩𬊿-𬋄𭵳-𭵼熶-燞㷳-ã·½ð¤©ð¤Ž-ð¤Ÿð¤¡-ð¤´ðª¹ª-𪹳𬋅-𬋌𭵽-𭶋營-燷鿪㷾-㸃ð¤µ-ð¤£ðª¹´-𪹻ð¬‹-ð¬‹ð­¶Œ-𭶙燸-爃㸄㸅ð¤¤-𤑂𤑄-𤑑𦦨𪹼-𪺀𬋑-𬋓𭶚-𭶡爄-爊爌-爎爕㸆㸇㸉𤑒-𤑲ðªºðªº‚𬋔-𬋘𭶢𭶣爋çˆ-爔爖-爘㸈㸊-㸌𤑳-𤒠𤒨𪺃-𪺅𬋙-ð¬‹ð­¶¤-𭶦爙-爛ã¸ð¤’¡-𤒧𤒪-𤒹爜-爠㸎𤒩𤒺𤒻𤒽-𤓆𪺆𪺇𭶧爡爢ã¸ã¸ð¤’¼ð¤“‡-𤓎ð¤“-𤓖𪺈𬋞爣𤓗-𤓛𪺉𭶨𭶩爤-爦𤓜-𤓞𤓠-𤓣𪺊𪺋𬋟𬋠㸑𤓤-𤓩𪺌爧𤓪𤓬𬋡𬋢爨𤓫𤓭爩𤓮𬋣]
-[radical 87=⽖爪:爪爫𤓯-𤓵ðªºçˆ¬çˆ­ã¸’㸓𤓶-𤓼𬋤𬋥𭶪爮-爰𤓽-𤔋𪺎𬋦𭶫爱𤔌-ð¤”𬋧𬋨𭶬-𭶯㸔ð¤”-𤔓ðªºð¬‹©ð¬‹ªð­¶°çˆ²ð¤””-𤔖𤔘-𤔛ðªº-𪺓𬋫𬋬𭶱𤔜-𤔡𪺔𪺕𬋭𬋮𭶲𭶳爳㸕𤔢-𤔦𬋯𬋰𭶴𭶵噕爴𤔧-𤔭𪺖𪺗𬋱𬋲𭶶𤔮-𤔱𬋳𬋴𭶷𭶸𤔲-𤔸𤔼𪺘𪺙𬋵𬋶爵𤔹𤔻𤔽𤔾𭶹𤔺𤔿𤕀𬋷𤕂-𤕇𬋸𬋹𤕈-ð¤•ð¬‹ºðªºš]
-[radical 88=⽗父:父爷𭶺𤕎ð¤•ð¬‹»ð­¶»çˆ¸ð¤•ð¤•‘㸖𤕒爹㸗𤕓𤕔𪺛㸘𤕕𪺜𭶼𤕖𤕗爺㸙𤕘-𤕚𬋼𤕛𭶽]
+[radical 81=â½æ¯”:比毕𠂱𣬂-𣬇毖-毘㲋𭯊毙𣬈-𣬊𭯋-𭯎𣬋𣬌ð­¯ð°š‹ð¬†¹ð­¯ð­¯‘ð£¬ð¬†ºð°šŒð£¬Ž-𣬑𪵕𣬒-𣬔毚𣬕𣬖𬆻𣬗-𣬚]
+[radical 82=⽑毛:毛𣬛𪵖㲌𣬜-𣬠毜æ¯ð£¬¡-𣬨𬆼ð°šæ¯žæ¯Ÿã²-㲑𣬩-𣬷𪵗𪵘𬆽-𬆿𭯒𰚎-𰚑毠毡㲒𣬸-𣭛𪵙𪵚𬇀𭯓-ð­¯—ð°š’-𰚕毢-毪㲓𣭜-𣭰𪵛𪵜𭯘𰚖𰚗毫-毮㲔-㲚𣭱-𣮇ð¬‡ð­¯™ð­¯šð°š˜-ð°šæ¯¯-毶㲛-㲞𣮈-𣮧ðªµðªµžð­¯›-ð­¯ð°šž-𰚣毷-毽㲟-㲣𣮨-𣯄𪵟𬇂𭯞𭯟𰚤-𰚦毾㲤-㲩𣯅-𣯢𪵠𬇃𬇄𭯠-𭯢𰚧-𰚮毿-氂𣯣-𣯷𪵡𬇅𰚯-𰚱氃-氇㲪-㲮𣯸-𣰉𬇆𭯣-𭯥𰚲氈-氊𣰊-𣰙𬇇𭯦-𭯩氋㲯㲰𣰚-𣰪𪵢𬇈𭯪𰚳𰚴氌㲱𣰫-𣰰𭯫𰚵𠫈𣰱-𣰵𭯬𣰶-𣰺æ°ð£°»-𣰾𭯭𰚶𣰿-ð£±ð­¯®æ°Žã²²ð£±‚𣱃𭯯𣱄]
+[radical 83=â½’æ°:æ°-民𫞕氒𫞖𰚷𬇉氓𣱅𣱆𬇊𬇋𭯰𣱇-𣱊𬇌𰚸㲳ð¬‡ð°š¹ð£±‹-𣱎𭯱ð£±ð£±ð¬‡Žð£±‘𣱒𰚺𣱓𣱔]
+[radical 84=⽓气:æ°”-氘𣱕𣱖𰚻氙氚𣱗𣱘氛-æ°ã²´ð£±™-𣱛𪵣ð¬‡ð­¯²ð°š¼ð°š½æ°ž-氢𣱜-𣱠𪵤ð¬‡ð°š¾ð°š¿æ°£-氩𣱡𬇑𰛀ð°›æ°ªæ°«ã²µð£±£ðªµ¥ð°›‚æ°¬-氰𣱢𣱤𣱥𰛃氱𣱦-𣱨𪵦氲氳𣱩𪵧𬇒㲶𣱪𣱫𭯳㲷𭯴鿫𣱬𣱭𬇓𣱮𭯵𣱯𣱰]
+[radical 85=⽔水:水氵氺𣱱𰛄𰛅氶-氹㲸𣱲-𣱴𰛆氻氼氾-汉㲹-㲼𣱵-𣱿𪵨汊-汤㲽-㲿𣲀-ð£²ðªµ©-𪵬𬇔-𬇗𭯶𭯷𰛇-ð°›‹æ±¥-沪㳀-㳊𣲎-𣲱𪵭-𪵰𬇘-𬇚𭯸-𭯼𰛌-𰛑沫-泙泛-泴泶-泾㳋-㳕𣲲-𣳣𪵱-𪵶𬇛-𬇟𭯽-ð­°‹ð°›’-ð°›æ³šæ³¿-洌洎-æ´•æ´—-浕㳖-㳣𣳤-ð£´ðªµ·-𪵽𬇠-𬇦𭰌-𭰖𰛞-𰛪æ´æ´–æµ–-涘涚-涩㳤-㳳𣴞-𣵶𣷚𪵾-𪶋𫞗𬇧-𬇴𭰗-𭰧𰛫-𰛼涙涪-渂渄-渗渚湴㳴-㴎𣵷-𣷙𣷛-𣷻𣸊𪶌-𪶖𫞘𬇵-𬈄𭰨-𭱂𰛽-𰜋渃渘渙減-湳湵-溌滋滞鿌ã´-㴤𣷼-𣸉𣸋-𣹜𪶗-𪶩𬈅-𬈕𭱃-𭱡𰜌-𰜤æº-滊æ»-滙滛-æ»æ»Ÿ-滪漓㴥-ã´»ð£¹-𣻌𦴶𪶪-𪶾𫞙-𫞛𬈖-𬈤𭱢-𭱵𰜥-𰜰滌滚滫-漊漌-æ¼’æ¼”-漼漾-æ½ã´¼-㵉ð£»-𣻳𣻵-𣼘𣼚-𣽂𪶿-𪷊𬈥-𬈱𭱶-𭲑𰜱-ð°‚漋漽潎-潿æ¾-澘澚-æ¾æ¿é¿°ãµŠ-㵜𣻴𣽃-𣾨𣾪-𣾿ð£¿-𣿄𪷋-𪷜𫞜𬈲-𬉇𭲒-𭲫ð°ƒ-ð°æ¾™æ¾ž-æ¿æ¿‘-æ¿“æ¿–ãµ-㵮𣾩𣿅-𤀡ðª·-𪷧ð«žð¬‰ˆ-𬉒𭲬-ð­²»ð°‘-ð°˜æ¾€æ¿”æ¿•æ¿—-濲濴-濸㵯-㵼𣿀𤀣-ð¤ð¤Ÿð¤ ðª·¨-𪷲𬉓-𬉚𭲼-ð­³ð°™-ð°¡æ¿¹-瀔㵽-㶃ð¤žð¤¡-𤂜𤂞-𤂠𤂢-𤂲𪷳-𪷹𬉛-𬉞ð­³-ð­³›ð°¢-ð°«æ¿³ç€•-瀮㶄-㶋ð¤‚𤂡𤂳-𤃧𪷺-𪷿𫞞𬉟-𬉤𭳜-𭳫ð°¬-ð°¯ç€¯-ç㶌-㶑𤃨-ð¤„𪸀-𪸂𬉥-𬉪𭳬-𭳯ð°°ð°±ç‚-ççç㶒-㶘𢌇𤄎-𤄵𪸃-𪸇𬉫-𬉭𭳰-𭳶ð°²ç‘-ç˜ã¶™ã¶šð¤„¶-𤅉𪸈𪸉𬉮𬉯𭳷-ð­³¹ð°³ð°´ç™-çœã¶›-ã¶ð¤…Š-𤅟𪸊𪸋ç-ç¡ã¶žã¶Ÿð¤… -𤅨𪸌𬉰𬉱𭳺-ð­³½ç¢ç£ð¤…©-𤅯çŽç¤-ç¦ã¶ ð¤…°-𤅶ç§ç¨ð¤…·-𤅿𬉲ç©ð°µçªð­³¾ð¤†€ð¬‰³ð¤†]
+[radical 86=⽕ç«:ç«-ç­ð¤†‚ðª¸ð­³¿ç®-ç³ç‚‡ã¶¡ã¶¢ð¤†ƒ-𤆌𭴀-ð­´‚ð°¶ç´-炀㶣-㶥ð¤†-𤆜𪸎-ðª¸ð¬‰´-𬉺𭴃-ð­´‡ð°·-ð°¼ç‚-炆炈-炞㶦-㶪ð¤†-𤆻𪸑-𪸗𬉻-𬊀𭴈-ð­´‘ð°½-𰞀炟-烃㶫-㶲𤆼-𤇮𪸘-𪸢ð¬Šð¬Š‚ð­´’-ð­´šð°ž-𰞇烄-烮㶳-㶸𤇯-𤈤𪸣-𪸪𫞟𬊃-𬊈𭴛-𭴥𰞈-𰞞烯-ç„“ç„•-焘㶹-ã·ð¤ˆ¥-𤉡𪸫-𪸲𫞠𬊉-𬊖𭴦-𭴷𰞟-𰞬焔焙-煀煮㷂-ã·ð¤‰¢-𤊱𪸳-𪹃𬊗-𬊨𭴸-𭵈𰞭-ð°ž¹ç…-ç…­ç…¯-煸煺㮡㷎-㷞𤊲-𤋲𤋴-𤌆ð¤ðª¹„-𪹑𬊩-𬊱𭵉-𭵡𰞺-𰟆煹煻-熙熦蒸㷟-㷪𤌇-𤌱𤌳-ð¤Žðª¹’-𪹠𫞡𬊲-𬊾𭵢-𭵲𰟇-ð°Ÿç†š-熥熧-熵黙龦龽㷫-㷲𤌲ð¤-ð¤¨ð¤ª-ð¤¿ð¤Žð¤Žƒ-𤎜𪹡-𪹩𬊿-𬋄𭵳-ð­µ¼ð°Ÿ-𰟘熶-燞㷳-ã·½ð¤©ð¤Ž-ð¤Ÿð¤¡-ð¤´ðª¹ª-𪹳𬋅-𬋌𭵽-𭶋𰟙-𰟢營-燷鿪㷾-㸃ð¤µ-ð¤£ðª¹´-𪹻ð¬‹-ð¬‹ð­¶Œ-𭶙𰟣-𰟩燸-爃㸄㸅ð¤¤-𤑂𤑄-𤑑𦦨𪹼-𪺀𬋑-𬋓𭶚-𭶡𰟪-𰟯爄-爊爌-爎爕㸆㸇㸉𤑒-𤑲ðªºðªº‚𬋔-𬋘𭶢𭶣𰟰-𰟳爋çˆ-爔爖-爘㸈㸊-㸌𤑳-𤒠𤒨𪺃-𪺅𬋙-ð¬‹ð­¶¤-𭶦𰟴-𰟹爙-爛ã¸ð¤’¡-𤒧𤒪-𤒹𰟺爜-爠㸎𤒩𤒺𤒻𤒽-𤓆𪺆𪺇𭶧爡爢ã¸ã¸ð¤’¼ð¤“‡-𤓎ð¤“-𤓖𪺈𬋞爣𤓗-𤓛𪺉𭶨𭶩𰟻爤-爦𤓜-𤓞𤓠-𤓣𪺊𪺋𬋟𬋠㸑𤓤-𤓩𪺌爧𤓪𤓬𬋡𬋢爨𤓫𤓭爩𤓮𬋣]
+[radical 87=⽖爪:爪爫𤓯-𤓵ðªºçˆ¬çˆ­ã¸’㸓𤓶-𤓼𬋤𬋥𭶪𰟼爮-爰𤓽-𤔋𪺎𬋦𭶫𰟽爱𤔌-ð¤”𬋧𬋨𭶬-𭶯𰟾𰟿㸔ð¤”-𤔓ðªºð¬‹©ð¬‹ªð­¶°ð° €çˆ²ð¤””-𤔖𤔘-𤔛ðªº-𪺓𬋫𬋬𭶱ð° -𰠄𤔜-𤔡𪺔𪺕𬋭𬋮𭶲𭶳𰠅𰠆爳㸕𤔢-𤔦𬋯𬋰𭶴𭶵噕爴𤔧-𤔭𪺖𪺗𬋱𬋲𭶶𰠇𤔮-𤔱𬋳𬋴𭶷𭶸𰠈𤔲-𤔸𤔼𪺘𪺙𬋵𬋶爵𤔹𤔻𤔽𤔾𭶹𤔺𤔿𤕀𬋷𤕂-𤕇𬋸𬋹𤕈-𤕋𰠉𰠊𤕌ð¤•ð¬‹ºðªºš]
+[radical 88=⽗父:父爷𭶺𤕎ð¤•ð¬‹»ð­¶»çˆ¸ð¤•ð¤•‘㸖𤕒𰠋爹㸗𤕓𤕔𪺛𰠌㸘𤕕𪺜𭶼𤕖𤕗ð° çˆºã¸™ð¤•˜-𤕚𬋼𤕛𭶽]
[radical 89=⽘爻:爻𤕜㸚ð¤•ðªºçˆ¼ð¤•ž-𤕡爽𤕢-𤕥爾𠎛𤕦-𤕩𬋽𠑂𡄉𬋾]
-[radical 90=⽙爿:丬爿𤕪-𤕮𭶾𭶿牀𤕯-𤕱𭷀ð­·ç‰ã¸›ð¤•²-𤕵𬋿-ð¬Œð­·‚𭷃牂𤕶-𤕺𭷄𭷅𤕻-𤖃𪺞𬌂𭷆㸜𤖄-𤖋𪺟𬌃-𬌈牃𤖌-𤖎牄ð¤–-𤖒𬌉牅𤖓-𤖕𪺠𬌊𤖖-𤖛𬌋-ð¬Œç‰†ð¤–œ-𤖟𭷇𪺡𬌎𭷈𤖠𤖡ð¬Œð¤–¢ð¬Œð¬Œ‘𤖣-𤖧]
-[radical 90'=⺦丬:𬌒]
-[radical 91=⽚片:片𤖨-𤖫版ã¸ã¸žð¤–¬-𤖰𬌓𬌔𭷉牉牊𤖱-𤖹𭷊𭷋㸟-㸡𤖺-𤖿𪺢𤗀-𤗆𪺣𪺤𬌕𭷌牋-ç‰ð¤—‡-𤗗𪺥牎-牒𤗘-𤗡牓牔㸢𤗢-𤗧牕-牗𤗨-𤗹𪺦㸣𤗺-𤗾ð­·ã¸¤ð¤—¿-𤘂𭷎牘𤘃㸥𤘄𬌖]
-[radical 92=⽛牙:牙㸦𤘅𤘆𪺧ð­·ð¤˜‡ð­·ã¸§ð¤˜ˆð¤˜‰ð¬Œ—𭷑𤘊𤘋牚𤘌-ð¤˜ðªº¨ð­·’ð¤˜ð¤˜‘𬌘𤘒𤘓]
-[radical 93=⽜牛:牛牜𤘔𭷓ç‰-牟㸨𤘕-𤘗𬌙𭷔牠-牤㸩㸪𤘘-𤘛𪺩𬌚牥-牬㸫-㸯𤘜-𤘷𬌛𬌜𭷕-𭷙牭-牵㸰-㸴𤘸-ð¤™ðªºªðªº«ð«ž¢ð¬Œð­·š-ð­·ç‰¶-牺㸵-㸸𤙑-𤙚𪺬-𪺮𬌞𬌟𭷞𭷟牻-牿çŠã¸¹-㹀𤙛-𤙮𬌠𭷠-𭷣犀犂-犋ã¹-㹃𤙯-𤚌𪺯𬌡𬌢𭷤-𭷬犌-犑㹅-㹈ð¤š-𤚛ð¤š-𤚨𤚿𪺰𬌣-𬌥𭷭犒-犗㹄㹉-㹋𤚩-𤚾𤛀-𤛉𪺱-𪺳𬌦𬌧𭷮𭷯犘-犛㹌-ã¹ð¤›Š-𤛖𤛘-𤛠𪺴𬌨𭷰-𭷳犜-犟㹑-㹓𤛡-𤛮𪺵𭷴𭷵犠㹔-㹖𤛯-𤛸㹗㹘𤛹𤛺犡-犦㹙𤛻-ð¤œð­·¶çŠ§çŠ¨ð¤œ‚-𤜆㹚𤜇-𤜋𪺶犩㹛𤜌-𤜓𭷷犪𤜔-𤜘犫𤜙]
-[radical 94=â½çŠ¬:犬-犮𡗜𤜚𬌩犯犰𤜛-𤜠𭷸犱-犸𤜡-𤜮𬌪𬌫𭷹犹-狈㹜-㹠𤜯-ð¤Žð¤®ðªº·ð­·º-𭷾狉-狞㹡-㹪ð¤-ð¤­ðªº¸ðªº¹ð«ž£ð¬Œ¬ð¬Œ­ð­·¿-𭸃狟-狲㹫-ã¹°ð¤¯-𤞘𤞣𪺺𪺻𬌮-𬌱𭸄-𭸉狳-猃㹱-㹸𤞙-𤞢𤞤-𤟂𪺼𪺽𬌲-𬌴𭸊-𭸑猄-猡猪猫㹹-㺀𤟃-𤟛𪺾-ðª»ð«ž¤ð¬Œµ-𬌷𭸒-𭸖猢-猩猬-猹çãº-㺆𤟜-𤟴𤟶-𤠌𪻂-𪻅𬌸-𬌼𭸗-𭸠猺-ç€ç‚çƒç…-çŠãº‡-ãºð¤ -𤠸𪻆𪻇𬌽-ð¬€ð­¸¡ç„çŒ-ç•ãºŽ-㺓𤠹-𤡢𪻈ð¬-ð¬…𭸢-𭸧ç‹ç–-ç¤ãº”-㺙𤡣-𤢋𪻉ð¬†ð¬‡ð­¸¨-𭸬ç¥-ç­ãºš-㺜𤢌-𤢥ð¬ˆ-ð¬Šð­¸­ç®-ç´ãº-㺟𤢦-𤢳𪻊ð¬‹ð­¸®ð­¸¯çµ-ç¸ãº ð¤¢´-𤣄𪻋ð¬Œð­¸°ð­¸±ç¹-ç»ãº¡ãº¢ð¤£…-𤣌𪻌ç¼ç½ãº£-㺦ð¤£-ð¤£ð¬ð­¸²ç¾ç¿ð¤£‘-𤣖𭸳玀𤣗-𤣚çŽ-玃𤣛-𤣞㺧𤣟-𤣢ð¬Žð¤££ð¤£¤ð­¸´]
+[radical 90=⽙爿:丬爿𤕪-𤕮𭶾𭶿牀𤕯-𤕱𭷀ð­·ð° Ž-ð° ç‰ã¸›ð¤•²-𤕵𬋿-ð¬Œð­·‚𭷃𰠑牂𤕶-𤕺𭷄𭷅𰠒𤕻-𤖃𪺞𬌂𭷆𰠓𰠔㸜𤖄-𤖋𪺟𬌃-𬌈𰠕牃𤖌-𤖎牄ð¤–-𤖒𬌉牅𤖓-𤖕𪺠𬌊𰠖𤖖-𤖛𬌋-ð¬Œç‰†ð¤–œ-𤖟𭷇𪺡𬌎𭷈𤖠𤖡ð¬Œð¤–¢ð¬Œð¬Œ‘𤖣-𤖧]
+[radical 90'=⺦丬:𰠗𰠘𬌒]
+[radical 91=⽚片:片𤖨-𤖫版ã¸ã¸žð¤–¬-𤖰𬌓𬌔𭷉𰠙𰠚牉牊𤖱-𤖹𭷊𭷋𰠛-ð° ã¸Ÿ-㸡𤖺-𤖿𪺢𤗀-𤗆𪺣𪺤𬌕𭷌𰠞牋-ç‰ð¤—‡-𤗗𪺥𰠟牎-牒𤗘-𤗡牓牔㸢𤗢-𤗧牕-牗𤗨-𤗹𪺦㸣𤗺-𤗾ð­·ã¸¤ð¤—¿-𤘂𭷎牘𤘃㸥𤘄𬌖]
+[radical 92=⽛牙:牙㸦𤘅𰠠𤘆𪺧ð­·ð¤˜‡ð­·ð° ¡ã¸§ð¤˜ˆð¤˜‰ð¬Œ—𭷑𰠢𰠣𤘊𤘋𰠤牚𤘌-ð¤˜ðªº¨ð­·’ð¤˜ð¤˜‘𬌘𤘒𤘓𰠥]
+[radical 93=⽜牛:牛牜𤘔𭷓ç‰-牟㸨𤘕-𤘗𬌙𭷔𰠦牠-牤㸩㸪𤘘-𤘛𪺩𬌚𰠧𰠨牥-牬㸫-㸯𤘜-𤘷𬌛𬌜𭷕-𭷙𰠩-𰠬牭-牵㸰-㸴𤘸-ð¤™ðªºªðªº«ð«ž¢ð¬Œð­·š-ð­·ð° ­-𰠳牶-牺㸵-㸸𤙑-𤙚𪺬-𪺮𬌞𬌟𭷞𭷟𰠴牻-牿çŠã¸¹-㹀𤙛-𤙮𬌠𭷠-𭷣𰠵犀犂-犋ã¹-㹃𤙯-𤚌𪺯𬌡𬌢𭷤-𭷬𰠶𰠷犌-犑㹅-㹈ð¤š-𤚛ð¤š-𤚨𤚿𪺰𬌣-𬌥𭷭𰠸犒-犗㹄㹉-㹋𤚩-𤚾𤛀-𤛉𪺱-𪺳𬌦𬌧𭷮𭷯𰠹𰠺犘-犛㹌-ã¹ð¤›Š-𤛖𤛘-𤛠𪺴𬌨𭷰-𭷳𰠻犜-犟㹑-㹓𤛡-𤛮𪺵𭷴𭷵𰠼犠㹔-㹖𤛯-𤛸㹗㹘𤛹𤛺犡-犦㹙𤛻-ð¤œð­·¶çŠ§çŠ¨ð¤œ‚-𤜆㹚𤜇-𤜋𪺶犩㹛𤜌-𤜓𭷷犪𤜔-𤜘犫𤜙]
+[radical 94=â½çŠ¬:犬-犮𡗜𤜚𬌩犯犰𤜛-𤜠𭷸犱-犸𤜡-𤜮𬌪𬌫𭷹𰠽𰠾犹-狈㹜-㹠𤜯-ð¤Žð¤®ðªº·ð­·º-𭷾𰠿-ð°¡ç‹‰-狞㹡-㹪ð¤-ð¤­ðªº¸ðªº¹ð«ž£ð¬Œ¬ð¬Œ­ð­·¿-𭸃𰡂-𰡈狟-狲㹫-ã¹°ð¤¯-𤞘𤞣𪺺𪺻𬌮-𬌱𭸄-𭸉𰡉-ð°¡ç‹³-猃㹱-㹸𤞙-𤞢𤞤-𤟂𪺼𪺽𬌲-𬌴𭸊-𭸑𰡎-𰡒猄-猡猪猫㹹-㺀𤟃-𤟛𪺾-ðª»ð«ž¤ð¬Œµ-𬌷𭸒-ð­¸–ð°¡“-ð°¡çŒ¢-猩猬-猹çãº-㺆𤟜-𤟴𤟶-𤠌𪻂-𪻅𬌸-𬌼𭸗-ð­¸ ð°¡ž-𰡠猺-ç€ç‚çƒç…-çŠãº‡-ãºð¤ -𤠸𪻆𪻇𬌽-ð¬€ð­¸¡ð°¡¡ç„çŒ-ç•ãºŽ-㺓𤠹-𤡢𪻈ð¬-ð¬…𭸢-𭸧𰡢-ð°¡¥ç‹ç–-ç¤ãº”-㺙𤡣-𤢋𪻉ð¬†ð¬‡ð­¸¨-𭸬𰡦𰡧ç¥-ç­ãºš-㺜𤢌-𤢥ð¬ˆ-ð¬Šð­¸­ç®-ç´ãº-㺟𤢦-𤢳𪻊ð¬‹ð­¸®ð­¸¯çµ-ç¸ãº ð¤¢´-𤣄𪻋ð¬Œð­¸°ð­¸±ð°¡¨ç¹-ç»ãº¡ãº¢ð¤£…-𤣌𪻌𰡩-ð°¡«ç¼ç½ãº£-㺦ð¤£-ð¤£ð¬ð­¸²ç¾ç¿ð¤£‘-𤣖𭸳𰡬玀𤣗-𤣚çŽ-玃𤣛-𤣞㺧𤣟-𤣢ð¬Žð¤££ð¤£¤ð­¸´]
[radical 95=⽞玄:玄𤣥玅𤣦玆-玈𤣧𤣨ð¬]
-[radical 96=⽟玉:玉王𤣩玊玌-玑㺨-㺫𤣪-𤣬ðª»ð­¸µçŽ’-玛㺬-㺯𤣭-𤣸ð¬ð¬‘玜-玱㺰-㺶𤣹-𤤎𪻎-𪻔𫞥ð¬’-ð¬–𭸶-𭸻玲-ç‘㺷-㺾ð¤¤-𤤴𪻕𪻖ð¬—-ð¬ð­¸¼-𭹃ç’-ç²ç‰ãº¿-㻈𠴦𤤵-𤥕𪻗-𪻟𫞦ð¬ž-ð¬¤ð­¹„-𭹋ç³-ç¶ç¸-çˆçŠ-ç“㻉-ã»ð¤¥–-𤥺𪻠-𪻥ð¬¥-ð¬©ð­¹Œ-ð­¹”ç·ç”-ççŸ-ç¼ã»‘-㻜𤥻-𤦮𪻦-𪻲𫞧ð¬ª-ð¬³ð­¹•-ð­¹¢çžç½-ç‘Ÿã»-㻦𤦯-𤧩𪻳-𪼂ð¬´-ð¬ºð­¹£-𭹪瑠-瑸㻧-㻪𤧪-𤨓𪼃-ðª¼ð«ž¨ð¬»-𬎄𭹫-𭹮瑹-璌璎璓㻫-㻴𤨔-𤨿ð¤©ðª¼-𪼖𫞩𬎅-𬎊𭹯-ð­¹µç’ç’-ç’’ç’”-璡璣璤㻵-㻼𤩀𤩂-𤩪𪼗-𪼠𬎋-𬎒𭹶-𭹿璢璥-璴㻽-㼂𤩫-𤪊𪼡-𪼦𬎓-𬎖𭺀-𭺈璵-瓂𤪋-𤪨𤪴𪼧𪼨𬎗-𬎙𭺉-𭺌瓃-瓋㼃-㼆𤪩-𤪳𤪵-𤪽𪼩-𪼫𬎚ð­º-ð­ºç“Œ-瓒㼇𤪾-𤫈𪼬-𪼯𬎛-ð¬Žð­º‘ç““-瓖𤫉-𤫓𪼰𭺒𭺓瓗-瓙𤫔-𤫘𭺔-𭺖瓚㼈𤫙-𤫟𪼱瓛𤫠𪼲𬎞𤫣-𤫧𬎟𬎠𤫢𤫨𬎡𤫩]
-[radical 97=â½ ç“œ:ç“œç“𤫪𪼳㼉㼊𤫫-𤫯𪼴𭺗瓞瓟㼋㼌𤫰-𤫴𬎢𬎣𭺘瓠ã¼ã¼Žð¤«µ-𤫹ã¼ð¤«º-𤬀瓡ð¤¬-𤬆𪼵ã¼-㼒𤬈-𤬌㼓㼔𤬇ð¤¬ð¤¬-𤬕瓢𤬎ð¤¬ð¤¬–𭺙𤬗㼕𤬘-𤬚𭺚瓣𤬛-ð¤¬ç“¤ð¤¬ž-𤬡瓥𤬢㼖𤬣-𤬥]
-[radical 98=⽡瓦:瓦𭺛𭺜瓧㼗𤬦𤬧𬎤瓨瓩㼘㼙𤬨-𤬫𪼶𬎥瓪-瓲㼚㼛𤬬-𤬲𪼷𪼸𬎦𬎧ð­ºç“³-瓵㼜-㼠𤬳-𤬽𪼹瓶-瓸㼡-㼦𤬾-𤭋𬎨-𬎫𭺞-𭺡瓹-瓼㼧-㼪𤭌-𤭚𭺢瓽-ç”㼫-㼱𤭛-𤭦𤭲𤮖𪼺𪼻𬎬𬎭𭺣甂-甆㼲-㼷𤭧-𤭱𤭳-𤭸𪼼𬎮甇-甉㼸-㼺𠪹𤭹-𤮄𪼽𪼾𬎯𭺤甊-甎㼻-㼾𤮅-ð¤®ç”-甒㼿-㽅𤮎-𤮕𤮗甓-甕㽆㽇𤮘-𤮟𭺥𭺦甖㽈㽉𤮠𤮡𬎰𤮢-𤮥𭺧𭺨甗𤮦-𤮬㽊𤮭-𤮯𪼿𭺩𤮰-𤮵㽋𤮶㽌𤮷-𤮹]
-[radical 99=⽢甘:甘𤮺𭺪𭺫甙𤮻-𤯀甚ð¤¯-𤯄𫞪ã½ð¤¯…甛甜𭺬𤯆𪽀ç”甞㽎𤯇𬎱𭺭ã½ð¤¯ˆð¬Ž²ð­º®ð­º¯ã½ð¤¯‰ð¤¯Šð­º°ð¤¯‹ð¤¯Œã½‘ð¤¯ð¤¯Žð¤¯-𤯒]
-[radical 100=⽣生:生𤯓𤯔ðª½ð¤¯•-𤯗𭺱-𭺳甠𤯘-𤯞𬎳甡𤯟𭺴產産𤯠-𤯥𪽂𬎴𬎵甤-甦㽒𤯦-𤯫𬎶𭺵𤯬-𤯱𪽃-𪽅𬎷-𬎹甧𤯲-𤯴𬎺-𬎼㽓𤯵㽔𤯶-𤯺𭺶𭺷𤯻𤯼𤯾-𤰂]
-[radical 101=⽤用:用-甪𤰃𪽆甫甬𤰄𠂵𠃰𡶤𤰅𤰆𬎽𬎾𭺸甭甮𭺹𠳫𤰇𤰈𭺺甯𤰉𭺻𤰊-𤰌𭺼ð¤°-ð¤°ð¤°‘ð¤°]
-[radical 102=⽥田:ç”°-电𤰒甶𤰓𤰔𭺽男-町甼㽕-㽗𠃫𤰕-𤰜𪽇𬎿画甽-ç•…ð¡‡ð¢‘–ð¤°-𤰨𪽈ð¬€ç•†-畓㽘-㽚𤰩-𤱋𪽉-𪽌ð¬ð­º¾-𭻆畔-畟㽛㽜𤱌-𤱠𤱢-𤱤ðª½-ðª½ð¬‚ð¬ƒð­»‡-ð­»‹ç•¡-畧畩異ã½ã½žð¤±¥-𤱺𪽑𪽒𫞫ð¬„-ð¬†ð­»Œ-𭻓番-畯畲-畴㽟㽠𤱻-ð¤²ðª½“-𪽗ð¬‡-ð¬Šð­»”-𭻚畵-畺㽡-㽤𤲑-𤲪𪽘-𪽚ð¬‹ð­»›-𭻟畱畻-畽㽥𤲫-𤲶𪽛𪽜𭻠-𭻤畾畿㽦-㽨𤲷-𤳇ðª½ðª½žð¬Œ-ð¬’𭻥𭻦疀-疂㽩𤳈-𤳎ð¤³ð¤³‘𪽟-𪽡ð¬“ð¬”𭻧-𭻮疃疄㽪𤳒-𤳚𤳜-𤳣𪽢ð¬•ð­»¯-𭻱疅㽫㽬𤳤-𤳨ð¨´ðª½£ð¬–ð¬—𭻲𭻳疆疇㽭𤳩-𤳰𤳲𭻴𭻵疈㽮𤳱𤳳-𤳸𪽤𭻶𭻷𤳹-𤳾𪽥𪽦𭻸疉疊𤳿-ð¤´ð­»¹ã½¯ð¤´‚-𤴄ð¬˜ð­»ºð¤´…𤴆𭻻𤴇-ð¤´ð­»¼ð¤´Žð­»½ð¤´-𤴒]
-[radical 103=⽦疋:疋𤴓-𤴕𭻾疌𤴖𤴘𭻿ç–𤴗𭼀ð­¼ç–Žç–𤴙-𤴛㽰𤴜ð¤´ð¬™ð­¼‚ç–疑𭼃𭼄𤴞𭼅𤴟-𤴢𪽧𤴣𤴤]
-[radical 104=⽧疒:疒𤴥ð¬šç–“-疗㽱㽲𤴦-𤴮疘-ç– ã½³-㽶𤴯-𤴶ð¬›ð¬œç–¡-疯疺㽷-㽼𤴷-𤵖𪽨-𪽫ð¬-ð¬ ð­¼†ð­¼‡ç–°-疹疻-痉㽽-㾉𤵗-𤵶𪽬-𪽮𫞬ð¬¡-ð¬¦ð­¼ˆð­¼‰ç—Š-痖㾊-㾒𤵷-𤶔𪽯ð¬§-ð¬¬ð­¼Š-ð­¼ç——-痫㾓-㾡𤶕-ð¤·ðª½°ðª½±ð¬­-ð¬±ð­¼Ž-ð­¼’ç—¬-瘆㾢-㾩𤷂-𤷺𪽲ð¬²-ð¬µð­¼“-𭼖瘇-瘘瘟瘧㾪-㾵𤷻-𤸩𪽳-𪽵ð¬¶-ð¬¸ð­¼—-ð­¼ç˜™-瘞瘠-瘦瘨-瘫㾶-ã¿ð¤¸ª-𤹜𪽶𪽷𫞭ð¬¹ð­¼žç˜¬-瘿癊㿂-㿈ð¤¹-𤺂𤺞ð¬ºð¬»ð­¼Ÿ-𭼧癀-癉癋-癎㿉㿊𤺃-ð¤ºð¤ºŸ-𤺹𪽸𪽹ð¬¼ð¬½ð­¼¨-ð­¼­ç™-癞㿋-ã¿ð¤ºº-𤻔ð¬¾ð­¼®ð­¼¯ç™Ÿ-癡癣㿑-㿓𤻕-𤻯𪽺𭼰-𭼴癢癤-癦㿔𤻰-𤻿𭼵-𭼷癧-癫㿕-㿗𤼀-𤼊ð¬¿ð¬€ð­¼¸ç™¬-癮㿘𤼋-ð¤¼ð¬ç™¯ç™°ã¿™ð¤¼-𤼗癱癲㿚㿛𤼘-𤼛𭼹𭼺𤼜-𤼞癳𤼟-𤼢𭼻癴㿜𤼣𭼼𤼤癵]
-[radical 105=⽨癶:癶𭼽𤼥𤼦癷-発𤼧𤼨𭼾𭼿𤼩-𤼮𭽀登發𤼯-𤼲ð¬‚ð­½ð¤¼³-𤼵𭽂𤼶𭽃𤼷𤼸𭽄𤼹𤼺𤼼𭽅𤼻]
-[radical 106=⽩白:白-癿𤼽𤼾ð¬ƒçš€-皃ã¿ð¤¼¿-ð¤½ð­½†çš„𤽂-𤽇𭽇-𭽊皅-皈㿞𤽈-𤽗𪽻𪽼ð¬„ð¬…𭽋-ð­½ç• çš‰-çšã¿Ÿð¤½˜-𤽤𪽽𫞮ð¬†ð¬‡ð­½Ž-𭽓皎-皑㿠㿡𤽥-𤽫ð¬ˆð¬‰ð­½”-ð­½—çš’-皖𠌟𤽬-𤽸𪽾𪽿ð¬Šð­½˜çš—-皙㿢𤽹-𤾇𪾀ðª¾ð¬‹-ð¬Žð­½™-𭽜㿣㿤𤾈-𤾓𪾂𪾃ð¬ð¬ð­½ð­½žçšš-皞㿥𤾔-𤾚𪾄𭽟皟-皡㿦𤾛-𤾟𭽠皢-皥𤾠-𤾦皦-皨𤾧-𤾪𭽡𭽢皩㿧𤾫-𤾳皪皫𤾴-𤾷皬㿨𤾸-𤾺𪾅𤾻-𤾽皭𤾾𤾿ð¬‘𤿀-𤿃㿩𤿄𤿅]
-[radical 107=⽪皮:皮𤿆𤿇皯㿪𤿈-ð¤¿ðª¾†ã¿«ã¿¬ð¤¿Ž-𤿔𪾇ð¬’皰皱㿭㿮𤿕-𤿞ð¬“ð¬”𭽣𭽤皲㿯㿰𤿟-𤿦𭽥-𭽪皳皴㿱𤿧-𤿮𤿰-𤿲ð¬•ð­½«çšµé¾¾ã¿²ã¿³ð¤¿¯ð¤¿³-𤿿𭽬-𭽮皶-皹㿴㿵𥀀-𥀌𪾈𪾉ð¬–𭽯𭽰皺㿶㿷ð¥€-𥀓𭽱-𭽳皻㿸𥀔-𥀞𭽴𭽵皼𥀟-𥀡𭽶皽㿹𥀢-𥀪𭽷𥀫-𥀮𭽸𭽹皾㿺𥀯-𥀸𭽺𥀹𥀺𭽻]
-[radical 108=⽫皿:çš¿-ç›ð¥€¿ð¥€ç›‚ã¿»ð¥-ð¥…𫞯ð¬—盃-盈㿼㿽ð¥†-ð¥ðª¾Šðª¾‹ð«ž°ð¬˜ð¬™ð­½¼ç›‰-监㿾-䀀ð¥Ž-ð¥ð¥«ðª¾Œðª¾ð¬šð¬›ð­½½-𭽿盒-盘盛ä€ä€‚ð¥ž-ð¥ªðª¾Žð¬œ-ð¬žð­¾€ð­¾ç›™ç›šç›œä€ƒð¥¬-ð¥¶ðª¾ðª¾ð¬Ÿ-ð¬¡ð­¾‚ç›-盟䀄䀅ð¥·-𥂂𪾑𪾒𫞱ð¬¢-ð¬§ð­¾ƒ-𭾆盠-監䀆𥂃-𥂆𪾓𪾔ð¬¨-ð¬¯ð­¾‡-𭾋盤𥂇-𥂒𪾕ð¬°ð­¾Œ-ð­¾ç›¥-盧䀇䀈𥂓-𥂤𪾖ð¬±ð­¾ç›¨-盪䀉𥂥-𥂲𥂴-𥂷𪾗𪾘ð¬²-ð¬µð­¾‘盫盬𥂸-𥂺𥂼-𥃀𪾙ð¬¶ð¬·ð­¾’䀊𥂻ð¥ƒ-𥃆𪾚ð¬¸-ð¬¼ð­¾“𭾔盭𥃇-𥃑ð¬½ä€‹ð¥ƒ’𦪹𪾛ð¬¾-𬑀𭾕䀌𥃓-𥃗𪾜ð¬‘𬑂𥃘𥃙𥃞𭾖𥃚-ð¥ƒðª¾ð¥ƒŸð¥ƒ ð¬‘ƒð¬‘„𥃡ä€ðª¾žð¥ƒ¢ð¥ƒ£]
-[radical 109=⽬目:目𥃤𥃥盯䀎ä€ð¥ƒ¦-𥃱𭾗-𭾙盰-盵ä€-䀔𥃲-𥄂𪾟𪾠𬑅𭾚-ð­¾ç›¶-çœä€•-䀞𥄃-𥄰𪾡-𪾣𬑆𬑇𭾞-𭾥眎-眬眿䀟-䀦𥄱-𥅙𪾤-𪾧𫞲𬑈-ð¬‘𭾦-𭾪眭-眾ç䀧-䀮𠌪𥅚-𥆉𪾨-𪾪𫞳ð¬‘-𬑕𭾫-ð­¾²ç€ç‚-ç‘鿃䀯-ä€ð¥†Š-𥇄𥇆-𥇈𥇫𪾫𪾬𬑖𬑗𭾳-𭾸ç’-ç ç¢-ç­ä-ä‰ð¢°¿ð¢¾¥ð£ª­ð¥‡…𥇉-𥇪𥇬-𥇳𥇵-ð¥ˆðª¾­-𪾰𬑘-𬑛𭾹-ð­¿‚ç¡ç®-瞆äŠ-ä–𥈂-𥈻𪾱-𪾴𬑜ð¬‘𭿃-ð­¿çž‡-çž“ä—-ä¡ð¥ˆ¼-𥉳𥊇𪾵-𪾸𬑞-𬑣ð­¿-𭿔瞔-瞣ä¢-äªð¥‰´-𥊆𥊈-𥊩𥋖𪾹-𪾻𬑤-𬑧𭿕-𭿜瞤-çž·ä«-ä³ð¥Šª-𥋕𥋗𪾼-𪿀𬑨𬑩ð­¿-𭿡瞸-矂ä´-äºð¥‹˜-𥋾𭿢-𭿨矃-矊𥋿-𥌔𥌖-𥌙ðª¿ð¬‘ªð­¿©-𭿭矋-çŸä»-ä¾ð¥Œš-𥌬𪿂çŸ-矓ä¿ä‚€ð¥Œ­-𥌹ð¥‚𪿃𪿄𬑫𭿮-ð­¿±ä‚𥌺-ð¥ð¥ƒð¥…-ð¥‡ð­¿²çŸ”䂂䂃ð¥ˆ-ð¥ŽçŸ•çŸ—ð¥-ð¥’𭿳𭿴矘矙䂄ð¥“𬑬矖矚ð¥”-ð¥œðª¿…ä‚…]
-[radical 110=⽭矛:矛𭿵ð¥ð­¿¶ä‚†ð¥žð¬‘­çŸœä‚‡ð¥Ÿð¥ ðª¿†çŸð¥¡-ð¥¦ð­¿·ð­¿¸ä‚ˆð¥§-ð¥©ð­¿¹ð­¿ºçŸžçŸŸð¥ª-ð¥±ðª¿‡çŸ ð ¢ð¥²-ð¥µð¬‘®ä‚‰ð¥¶-ð¥Žð¬‘¯ð¥Ž‚-𥎉𭿻𥎊-ð¥Žð­¿¼ä‚Š-ä‚Œð¥Ž-𥎒𥎎𥎓-𥎜ä‚𥎞-𥎠ð¥Žð¥Ž¡-𥎣䂎矡𥎤𥎥]
-[radical 111=⽮矢:矢矣𥎦𥎧𭿽矤知𥎨矦-矨𥎩-𥎯𪿈𪿉𭿾𭿿矩ä‚ä‚𥎰-𥎸𬑰𬑱𮀀矪矫䂑䂒𥎹-ð¥ðª¿Šð®€ð®€‚矬短䂓𠅰ð¥Ž-ð¥—𬑲𬑳矮䂔ð¥˜-ð¥©ðª¿‹ð¬‘´ð®€ƒð®€„ä‚•ð¥ª-ð¥±ðª¿Œð®€…ð¥²-ð¥ºðª¿ðª¿Žð®€†-𮀈ð¥»-ð¥¿ð®€‰çŸ¯çŸ°ð¥€-ð¥†ð¬‘µð¥‡-ð¥‹ð¬‘¶çŸ±ð¥Œ-ð¥ð¬‘·çŸ²ðª¿ð®€Šðª¿ð¬‘¸ð¥‘ð¥’ð¥ð¥“ð¥”]
-[radical 112=⽯石:石䂖ð¥•ð¥–矴-矶䂗ð¥—-ð¥œð¬‘¹çŸ·-ç ä‚˜ä‚™ð¥-ð¥¨ð¬‘º-𬑼𮀋𮀌泵砂-砜䂚-ä‚žð¥©-𥑅𪿑-𪿓𬑽-𬒂ð®€ð®€Žç -ç¡é¿¬ä‚Ÿ-䂨𥑆-𥑲𪿔-𪿘𬒃-𬒈ð®€-𮀔硂-硛鿎䂩-䂯𥑳-𥒩𪿙-ðª¿ð¬’‰-𬒌𮀕-𮀘硜-ç¡·ä‚°-䂶𥒪-𥓉𪿞-𪿣ð¬’-𬒑𮀙-𮀡硸-硽硿-碜碰䂷-䃇𥓊-𥓹𪿤-𪿩𬒒-𬒕𮀢-𮀫硾ç¢-碯碱-碹ç£äƒˆ-äƒð¥“º-𥔬𪿪𪿫𬒖-𬒚𮀬-𮀵確-磀磂-磙磜磤䃑-䃗𥔭-𥕋𪿬-𪿮𬒛𮀶-𮀺磚磛ç£-磣磥-磮䃘-䃞䃠𥕌-𥕯𪿯-𪿴𬒜-𬒞𮀻-ð®ƒç£¯-礅䃟䃡-䃨𥕰-𥖖𪿵-𪿷𬒟-𬒣ð®„-ð®‰ç¤†-礖䃩-䃯ð£žð¥–—-𥖩𪿸-𪿺𬒤𬒥ð®Š-ð®ç¤—-礡䃰𥖪-𥖺𪿻-𪿽𬒦𬒧ð®-ð®“礢-礬䃱-䃳𡕎𥖻-𥗑𬒨ð®”礭-礴䃴-䃷𥗒-𥗜𪿾ð®•ç¤µäƒ¸äƒ¹ð¥—-𥗪𬒩𬒪礶礷𥗫-𥗳𪿿ð®–-ð®˜ç¤¸äƒºð¥—´ð¥—µð¥—·ð¥—¸ð¬’«ð®™ð®šç¤¹ð¥—¹äƒ»ð¥—º-𥗽ð®›ð¥—¾-𥘄]
-[radical 113=⽰示:示礻𥘅礼𥘆礽䃼𥘇-𥘌ð®œð®ç¤¾-祃ð¥˜-𥘔𫀀ð«€ð¬’¬ð®žç¥„-祎视鿆䃽-䄀𥘕-𥘪𫀂𫀃𬒭-𬒰ð®Ÿ-ð®¡ç¥-祢ä„-䄃𥘫-ð¥™ð«€„-𫀆𬒱-𬒳ð®¢-ð®¬ç¥£-祥祧-祯䄄-䄆𥙎-𥙪𫀇-𫀊𫞴𬒴𬒵ð®­-ð®·ç¥¦ç¥°-祸禄視䄇-䄊𣂫𥙫-𥚇𫀋-ð«€ð«žµð¬’¶-𬒽ð®¸-ð®¾ç¥¹-禃禅禆䄋-䄒𥚈-𥚥ð«€-𫀙𬒾-𬓈ð®¿-𮂃禇-禙䄓-䄗𢿆𥚦-𥛄𫀚𫀛𬓉-ð¬“𮂄-𮂉禚-禣䄘䄙𠖟𥛅-𥛗𫀜-𫀟𬓎-ð¬“𮂊-𮂎禤-禦䄚-䄞𥛘-𥛭𫀠𫀡𬓑-𬓗ð®‚-𮂖禧-禫䄟𥛮-𥜂𫞶𬓘-𬓚𮂗-𮂛禬-禯鿅䄠䄡𥜃-𥜑𫀢𬓛𮂜ð®‚禰禱䄢𥜒-𥜙𫀣𬓜𮂞𮂟禲䄣𥜚-𥜟𮂠-𮂢䄤𥜠-𥜤禳禴𥜥-𥜩ð¬“𮂣-𮂧禵𥜪-𥜯𮂨禶禷𥜰-𥜳𮂩-𮂫𥜴𥜵𫀤𥜶-𥜸𧆆𥜹𥜺䄥]
-[radical 114=⽱禸:禸𥜻禹禺𥜼离𥜽禼𥜾𮂬禽è¬ð¥œ¿ð¥-ð¥ƒð Ž˜ð ¾§ð¥„-ð¥‡ð¦¦”𬓞𣜢ð¥ˆð¥‰ð«€¥ð®‚­ð¥Šð¬“Ÿð®‚®ð¥‹]
-[radical 115=⽲禾:禾ð¥Œ-ð¥ð«€¦ç¦¿-秃䄦䄧ð¥-ð¥“𬓠𮂯秄-秊䄨-ä„­ð¥”-ð¥¢ð«€§ð®‚°ç§‹-秗䄮-䄵ð¥£-ð¥½ð«€¨ð«€©ð¬“¡-𬓤𮂱-𮂹秘-称䄶-䄹ð¥¾-𥞗𫀪-𫀭𬓥𬓦𮂺-𮃀秱-秾稆䄺-䅊𥞘-𥞱𥟅𫀮-𫀱𫞷𬓧-𬓩ð®ƒ-𮃄秿-稅稇-税鿟䅋-䅓𠞜𥞲-𥟄𥟆-𥟌𫀲-𫀸𬓪-𬓬𮃅𮃆ç¨-稥䅔-ä…Ÿð¥Ÿ-𥟼𫀹-𫀻𫞸𬓭-𬓰𮃇-𮃒稦-稳穊䅠-䅫𥟽-𥠰𫀼-ð«€ð¬“±-𬓴𮃓-𮃚稴-穃䅬-䅶𥠱-𥡛ð«-ð«„𬓵-𬓹𮃛-𮃢穄-穈穋-ç©’ä…·-䅽𥡜-𥢉ð«…𬓺-𬓽𮃣-𮃫穉穓-ç©žä…¾-䆀𥢊-𥢳ð«†ð¬“¾-𬔀𮃬-𮃱穟-ç©£ä†-䆇𥢴-𥣉𥣋-𥣔ð«‡ð«ˆð¬”𮃲穤-穫𥣊𥣕-𥣡𥣣-𥣧𬔂𮃳穬-穯䆈䆉𥣢𥣨-𥣶𥣸-𥣿ð«‰ð¬”ƒé¿ ä†Š-ä†ð¥¤€-𥤅𬔄𮃴𮃵穰穳䆎ä†ð¥¤†-𥤉穱𥤊-𥤒穲𥤓𥤕𥤖𮃶𮃷𥤗-𥤟ä†ð¥¤ ð¥¤¡]
-[radical 116=⽳穴:穴𥤢穵-穷䆑𥤣-𥤦𫞹𬔅穸-穻䆒𥤧-𥤳𮃸穼-窃䆓-䆖𥤴-𥥆ð«Šð¬”†ð¬”‡ð®ƒ¹çª„-窎䆗-䆙𥥇-𥥟ð«‹ð¬”ˆð®ƒºð®ƒ»çª-窕䆚-䆠𥥠-𥥵ð«Œð«ð¬”‰ð¬”Šð®ƒ¼çª–-çªä†¡-䆥𥥶-𥦚ð«Ž-ð«ð¬”‹ð¬”Œð®ƒ½-𮄀窞-窧䆦-䆩𥦛-𥦷ð«‘-ð«“ð¬”ð®„-𮄇窨-窭䆪䆫𥦸-ð¥§ð«”ð«•ð®„ˆ-𮄋窮-窴䆬-䆮ð¥§-𥧡𥧣-𥧫ð«–𬔎ð¬”𮄌-𮄎窵-窽䆯-䆴𥧬-𥧻𥧽-𥨋ð«—-ð«šð¬”-𬔓ð®„-𮄕窾-竃䆵-䆻𥧼𥨌-𥨟𥨩ð«›ð®„–-𮄚竄竅䆼䆽𥨠-𥨨ð«œð¬””𮄛-ð®„竆䆾䆿𥨪-𥨯𥨲𮄞-𮄡竇䇀𥨰𥨱𥨳𥨴𥨶-𥨺竈竉𥨵𥨻-𥩈𬔕𮄢竊ä‡ð¥©‰ð«žºð®„£ð¥©Šð¥©‹ð«ð®„¤ð®„¥ð¥©Œð¥©ð¥©-𥩑𮄦𥩎𥩒-𥩔]
-[radical 117=â½´ç«‹:立䇂𬔖竌ç«ð¥©•ð¥©–𫞻竎ç«ä‡ƒä‡„𥩗𥩘ð«žð¬”—𮄧ç«-竗䇅䇆𥩙-𥩟ð«Ÿð¬”˜-𬔚𮄨竘-竞䇇-䇊𥩠-𥩰ð« ð«¡ð¬”›ð¬”œð®„©-𮄬竡䇋𥩱-𥩽ð«¢ð«ž¼ð¬”𮄭𮄮竢-竧䇌ä‡ð¥©¾-𥪉ð«£ð«¤ð¬”ž-𬔠𮄯𮄰竨-竫䇎-䇑𥪊-𥪗ð«¥ð«¦ð¬”¡-𬔣𮄱-𮄳竬竭端竰𥪘-𥪤ð«§ð«¨ð¬”¤-𬔦𮄴-𮄶𥪥-𥪬ð«©-ð««ð¬”§ð®„·ç«®ç«±ä‡’𥪭𥪮𥪰𥪱ð«¬ð¬”¨ð¬”©ð®„¸-𮄺竲-竴䇓𥪯𥪲-𥪹𥪻ð«­ð¬”ªð®„»ð®„¼ç«µä‡”𥪼-ð¥«ð¥«ƒð¥«„䇕𥪺𥫅-𥫇ð«®ð®„½ç«¶ç«·ð¥«ˆ-ð¥«ð®„¾ð¥«Žð¥«ð¬”«ç«¸ð¥«ð¥«‘ð«¯ð¥«“𥫔𥫒𥫕𥫖𮄿]
-[radical 118=⽵竹:竹𥫗𥫘竺竻𥫙-𥫜ð«°ð¬”¬ç«¼-笃䇖ð¥«-𥫮ð«±ð¬”­ç¬…-笕䇗-ä‡ð¥«¯-𥬋ð«²-ð«·ð¬”®-𬔲𮅀-𮅃笖-笾䇞-䇦𥬌-𥬩𥬿ð«¸-ð«»ð¬”³-𬔹𮅄-𮅆笄笿-ç­ä‡§-䇴𥬪-𥬾𥭀-ð¥­ð«¼ð«½ð¬”º-ð¬•ð®…‡-ð®…ç­ž-简節䇵-䈀ð¥­-𥮇𥮉-𥮌ð«¾-𫂃𬕂-ð¬•ð®…‘-ð®…”ç®-箫äˆ-äˆð¥®ˆð¥®-ð¥¯ð«‚„-𫂉𬕎-𬕙𮅕-𮅠箬-箿ç¯-篈篊-篓䈎-䈩𥯑-𥰗𫂊-ð«‚ð«ž½-𫞿𬕚-𬕡𮅡-𮅮築篔-篯簑簕䈪-䈷𥰘-𥱴ð«‚-𫂗𬕢-𬕨𮅯-𮅵篰-ç°ç°’-簔簖簗䈸-䉇𥱵-𥳀𥳂-𥳅𥴎𫂘-𫂟𬕩-𬕬𮅶-𮆆簘-簲䉈-䉎ä‰-䉚䉣ð¥³ð¥³†-ð¥´ð¥´-𥴠𫂠-𫂤𬕭-𬕲𮆇-𮆓簳-籂ä‰ä‰›-䉢䉤𥴡-𥵛𫂥𫂦𬕳-𬕺𮆔-𮆞籃-ç±ç±•ç±–䉥𥵜-𥶄𫂧𮆟-𮆧ç±-籔䉦-䉭𥶅-𥶴𫂨-𫂫𬕻-𬕿𮆨-𮆵籗-籡䉮-䉱𥶵-𥷓𫂬𬖀-𬖅𮆶-𮆽籢-籨䉲-䉴𥷔-𥷧𫂭𬖆籪䉶𥷨-𥷻𫂮𬖇籩籫-籮𥷼-𥸇𫂯𮆾𮆿籯籰䉷𥸈-ð¥¸ð®‡€ä‰¸ð¥¸-𥸖𬖈-𬖊ð®‡ð¥¸—𥸚-ð¥¸ð«‚°ð¥¸˜ð¥¸™ð¥¸ž-𥸠𮇂籱䉹𥸡-𥸣籲𥸤]
-[radical 119=⽶米:米𥸥𥸦𬖋籴-籶𥸧-𥸪𫂱𫂲𬖌-𬖎𮇃𮇄娄籷-粂䉺𥸫-𥸲𫂳𫂴ð¬–𮇅粃-粑䉻䉼𥸳-𥹀𫂵-ð«‚·ð¬–-𬖒𮇆-𮇊畨粒-ç²ç²£ä‰½-䊀ð¥¹-𥹖𥹘𥹙𥹱𫂸-𫂼𬖓-𬖘𮇋-𮇒粞-粢粤-ç²­äŠ-䊆𥹗𥹚-𥹰𫂽-𫃀𬖙-𬖜𮇓-ð®‡ç²®-粵糀䊇-䊌𥹲-𥺗ð«ƒð¬–-𬖠𮇞-𮇤粶-粿ç³äŠ-䊒𥺘-𥻀𫃂-𫃅𬖡-𬖥𮇥-𮇫糂-糎䊓-䊙ð¡¢ð¥»-𥻣𫃆-𫃈𬖦-𬖪𮇬-𮇲ç³-糘鿯䊚䊛䨀ð¢«ð¥»¤-𥻾𫃉-𫃌𬖫-𬖲𮇳-𮇹糙-糢糨䊜-䊢𥻿-𥼖ð«ƒð«ƒŽð«Ÿ€ð¬–³-𬖵𮇺糣-糧䊣-䊩𥼗-𥼵ð«ƒ-𫃑𬖶-𬖺𮇻𮇼糩-糭䊪-䊬𥼶-𥽎𫃒-𫃕𬖻𮇽𮇾糮-糰䊭䊮ð¥½-𥽖𫃖𬖼-𬖾糲䊯𥽗-𥽠𥽢𥽣𬖿𮇿糱糳糴䊰𥽡𥽤-𥽫𫃗-𫃙𬗀ð¬—糵䊱䊲𥽬-𥽵𬗂糶䊳䊴𥽶-𥽺𮈀𥽻-𥽿糷𥾀-𥾄]
-[radical 120=⽷糸:糸-糿䊵𥾅-𥾋𫃚𫃛紀-紉䊶-䊹𥾌-𥾘𫃜ð«ƒð¬—ƒð¬—„ð®ˆð®ˆ‚ç´Š-紧䊺-䋇𥾙-𥿂𫃞𬗅𬗆𮈃-𮈅紨-経䋈-䋔𥿃-𥿥𫃟-𫃡𬗇-𬗊𮈆-𮈊çµ-絚絜-çµ·ä‹•-䋞𥿦-𦀑𫃢-𫃤𬗋-𬗔𮈋-ð®ˆçµ›çµ¸-綛ç·ä‹Ÿ-䋦𦀒-ð¦…𫃥-𫃩𬗕-𬗞𮈑-𮈕綜-ç·ç·‘緒緔緕䋧-䋲ð¦†-ð¦¿ð«ƒª-𫃲𬗟-𬗧𮈖-𮈢緓緖-縇䋳-䌄𦂀-𦂦𦂨-ð¦ƒð«ƒ³-𫃷ð«Ÿð¬—¨-𬗮𮈣-𮈰縈-縨䌅-䌋𦂧𦃂-ð¦„𦄃-𦄈𫃸-𫃼𬗯-𬗲𮈱-𮈸縩-繇繉繊繌ç¹äŒŒ-䌕𦄂𦄉-𦄻𫃽-𫄀𬗳-𬗺𮈹-𮉃繈繎-繥繧繱䌖-䌛𦄼-𦅴ð«„-𫄄𫟂𬗻-ð¬˜ð®‰„-𮉉繋繦繨-ç¹°ç¹²-繺䌜-䌢𦅵-𦆛𦆥𫄅-𫄋𬘂𮉊-ð®‰ç¹»-纃䌣-䌧𦆜-𦆣𦆦𦆧𦆩𦆪𦆬-𦆺𫄌-𫄎𬘃-𬘈ð®‰-𮉒纄-çºäŒ¨äŒ©ð¦†¤ð¦†¨ð¦†«ð¦†»-ð¦‡ð¦‡ƒ-𦇓ð«„-𫄑𬘉-𬘌𮉓-𮉖纑纒䌪-䌭𦇂𦇔-𦇦𫄒-ð«„”ð¬˜-ð¬˜ð®‰—-𮉙纓-纖䌮𦇧-𦇯𫄕ð¬˜ð¬˜‘𮉚纗䌯-䌲𦇰-𦇷𦇹𬘒𮉛𮉜纘-纛䌳䌴𦇸𦇺𦇻𫄖ð®‰ð®‰žð¦‡¼ð¦‡½ð«„—纜çºäŒµð¦‡¾-𦈂𫄘𮉟𦈃𦈄纞𦈅-𦈇]
-[radical 120'=⺰纟:纟𫄙纠𮉠纡-纫纶䌶𬘓纬-纵纷-纾䌸𫄚-ð«„𬘔-𬘘线-ç»äŒ·äŒ¹ð¦ˆˆð«„žð«„Ÿð¬˜™-𬘞𮉡-𮉣绑-统䌺䌻𦈉𫄠-𫄣𫟃𬘟-𬘧𮉤-𮉦绠-绨䌼𦈊-𦈌𫄤-𫄩𫟄𬘨-𬘫𮉧-𮉩绩-ç¼äŒ½ð¦ˆ-ð¦ˆð«„ªð«„«ð«Ÿ…𬘬-𬘯𮉪-𮉬缂-缘䌾䌿𦈑-𦈕𫄬-𫄮𫟆𬘰-𬘸𮉭缙-缤ä€ð¦ˆ–-𦈙𫄯𫄰𬘹-𬘽缥-缫𦈚𫄱-𫄴𬘾-𬙂𮉮𮉯缬-缯𦈛-ð¦ˆð«„µð«„¶ð¬™ƒ-𬙈缰-ç¼´ä𦈞𦈟𫄷𬙉𦈠𦈡𫄸𫟇𬙊缵𬙋𫄹]
-[radical 121=⽸缶:缶𦈢缷缸ä‚𦈣-𦈥𮉰缹缺缼äƒð¦ˆ¦-𦈨𬙌ð¬™ð®‰±ç¼»ç¼½ä„-ä‰ð¦ˆ©-𦈮𬙎𮉲缾-ç½€äŠð¦ˆ¯-𦈳ð¬™ð¦ˆ´-𦈷𫄺𮉳𮉴ç½ç½‚ä‹äŒð¦ˆ¸-𦉀𫄻ð¬™ð®‰µð¦‰-𦉇𫄼𫄽𬙑𬙒𮉶罃ä𦉈-𦉎𫄾𬙓𮉷罄-罆ð¦‰-𦉔𮉸罇-罉𦉕-𦉘𮉹-𮉻罊罋ð¤•ð¦‰™-𦉜𫄿𬙔罌ð¦‰ð¦‰žç½ð¦‰Ÿð¦‰ ç½Žç½ð¦‰¡äŽð¦‰¢-𦉤ç½ð¤«¡ð¦‰¥-𦉩]
-[radical 122=⽹网:网-罓ä𦉪𦉫𦉭𦉰𦉯𮉼𦉬𦉮𦉱-𦉶𬙕罔-ç½—ää‘𦉷-𦊀𫅀𬙖-𬙘𮉽罘-罚ä’-ä”ð¦Š-ð¦Šð«…𬙙𮉾-𮊀罛-ç½¢ä•-ä—𦊎-𦊣𦊥-𦊩𦊳𫅂𬙚-𬙜ð®Š-𮊄罣ä˜ð¦Šª-𦊲𦊴-𦊻𫅃-ð«……ð¬™ð®Š…罤-罦ä™äšð¦Š¼-𦋄𦋑𬙞𬙟𮊆罧-置署ä›-äžð¦‹…-ð¦‹ð¦‹’-𦋜𫅆𫅇𬙠-𬙣𮊇-𮊉罯-罱罳罴äŸð¦‹-𦋩𦋫-𦋮𫅈𮊊-𮊌罵-罸𦋯-𦋼𫅉𬙤-𬙦ð®Š-𮊓罹-ç½¼ä ä¡ð¦‹½-𦌑𫅊𮊔-𮊙罽-ç¾ä¢ð¦Œ’-𦌞𧷅𬙧𬙨𮊚𮊛羂ä£ð¦ŒŸ-𦌨ð§°ð«…‹ð¬™©ð®Šœç¾ƒ-羆ä¤ð¦Œª-𦌴𫅌ð®Šð®Šžð¦Œµ-𦌺ä¥ð¦Œ»ð¦Œ¼ð«…𬙪𮊟羇𦌽𬙫𮊠羈羉ä¦ð¦Œ¾-ð¦…𮊡ð¦†-ð¦Šé¿¡]
-[radical 123=⽺羊:羊ð¦‹-ð¦ç¾‹ç¾Œð¦Ž-ð¦ð«…Žç¾-羑ð¦‘-ð¦–𫟈𬙬𮊢-𮊤羒-羔羖-ç¾™ä§-ä©ð¦—-ð¦¤ð¦®ð¬™­-𬙯羕羚-羟äª-ä­ð¦¥-ð¦­ð¦¯-ð¦¸ð«…-𫅒𬙰𮊥𮊦羠-ç¾¢ä®-ä°ð¦¹-𦎄𫅓𫅔𬙱-𬙳𮊧𮊨羣-羪ä±ð¦Ž†-𦎖𫅕𬙴𮊩羫ä²-ä¶ð¦Ž—-𦎡𬙵𬙶𮊪-𮊭羬-ç¾°ä·ð¦Ž¢-𦎮𫅖-𫅘𬙷𬙸𮊮𮊯羱羲ä¸ä¹ð¦Ž¯-𦎶𫅙𬙹-𬙻𮊰-𮊲äºð¦Ž·-ð¦„ð«…š-𫅜𬙼𬙽羳-ç¾µä»ä¼ð¦Œ©ð¦…-ð¦”ð«…𫅞𬙾𮊳羶-ç¾¹ð¦•-ð¦›ð¬™¿ð®Š´ç¾ºð¦œ-ð¦¡ð«…Ÿç¾»ç¾¼ð¡…–ð¦¢-ð¦§ð¬š€ð®Šµð®Š¶ä½ð¦¨ð¦©ð«… ð«…¡ð¬šð®Š·ð¦ª-ð¦®ð¬š‚𣌞ð¦¯-ð¦±]
-[radical 124=⽻羽:ç¾½ð¦³ð¦²ç¾¾ç¾¿ð¦´-ð¦ð«…¢ç¿€-翆ä¾ä¿ð¦‚-ð¦”𫅣𮊸-𮊻翇-習䎀-䎆ð¦•-ð¦¢ð«…¤ð®Š¼ç¿“-翚䎇-䎊ð¦£-ð¦·ð«…¥-𫅧𮊽-𮋂翛-ç¿äŽ‹-䎎ð¦¸-𦑄𦑆𫅨𫅩𬚃𮋃𮋄翞-翤äŽ-䎓𦑅𦑇-ð¦‘𦑒-𦑗𫅪𬚄𮋅-𮋈翥-翭𦑘-𦑯𦑻𫅫𫅬𮋉-𮋌翮-翱䎔䎕𦑰-𦑺𦑼-𦒂𦒞𫅭𫅮𬚅𬚆ð®‹-𮋑翲-翶翼𦒃-𦒌𫅯𬚇𬚈𮋒𮋓翷-翻䎖-䎘ð¦’-𦒛𦒟𫅰𫅱翽翾𦒜ð¦’𦒠𦒡𮋔𮋕翿耀䎙𦒢-𦒥𦒪𦒫𮋖𮋗䎚𦒦𦒨𦒩𦒬𮋘𮋙𦒧𦒭-𦒯𫅲𦒰𮋚]
-[radical 125=â½¼è€:è€-考𦒱𦒲𬚉𬚊䎛𦒳-𦒵耄-耆𦒶-𦒹耇-耉𦒺-𦒿𫅳𫅴𬚋𮋛耊耋䎜-䎞𦓀𮋜ð®‹ð¦“𫅵𬚌𮋞𦓂𫅶𦓄𦓅𫅷𦓆𦓇𦓃𦓈𦓉ð¬šð¦“Šð«…¸ð¬šŽð¦“‹-ð¦“]
-[radical 126=⽽而:而ð¦“𦓎ð¦“𦓑è€-耑䎟-䎡𦓒-𦓗𮋟𦓘-𦓜ð¬šð¦“𦓞𮋠𮋡𦓟-𦓢𮋢𦓣]
-[radical 127=⽾耒:耒𦓤耓𦓥-𦓧𮋣耔䎢𦓨-𦓪耕-耙𦓫𮋤耚-耟䎣𦓬-𦓮𫅹𮋥-𮋧耠𦓯-𦓳𫅺𫅻ð¬šð®‹¨ð®‹©è€¡è€¢äŽ¤äŽ¥ð¦“´-𦓶𫅼𮋪耣-耥䎦-䎪𦓷-ð¦”耦耧䎫䎬𦔂-𦔊𫅽耨-耪𦔋-𦔒𫅾耫耬䎭-䎯𦔓-𦔚耭耮䎰𦔛-𦔞𦔠-𦔤𫅿𮋫𦔟𦔥-𦔨𬚑耯耰䎱𦔩𦔪耱耲𦔫-𦔭]
-[radical 128=⽿耳:耳耴䎲𦔮耵𦔯-𦔶𫆀𫟉耶耷𦔷-𦔻𬚒𬚓𮋬𮋭耸-è‚䎳䎴𦔼-ð¦•ð«†ð®‹®èƒ-è䎵䎶ð¦•-𦕟𬚔-𬚖𮋯èŽ-è”è äŽ·ð¦• -𦕢𦕤-𦕴𫆂𫆃𬚗-𬚙è•-è˜äŽ¸äŽ¹ð¦•£ð¦•µ-𦖇𦖗𫆄-𫆆𬚚-ð¬šð®‹°-𮋲è™-èŸè¡-è£é¿¢äŽº-䎾𦖈-𦖖𦖘-𦖡𫆇𫆈𬚞-𬚠𮋳-𮋵è¤-è«é¿£äŽ¿ä€ð¥§¢ð¦–¢-𦖻𦗇𫆉𬚡𬚢𮋶-𮋸è¬è­ä-äƒð¦–¼-𦗆𦗈-ð¦—𫆊-ð«†ð¬š£-𬚥𮋹è¯-è³ä„-ä‡ð¦—-𦗞𫆎ð«†ð®‹ºè®è´-è·é¿¤äˆð¦—Ÿ-𦗲ð«†ð«†‘𬚦𬚧𮋻è¸ð¦—³-𦗽𫆒è¹-è¼ä‰ð¦—¾-𦘄𬚨𮋼𮋽𦘅-𦘉𮋾𮋿è½è¾äŠð¦˜Š-ð¦˜ð®Œ€ð¦˜ð¦˜‘𫆓𬚩]
-[radical 129=â¾€è¿:è¿è‚€ð¦˜’ð®Œð¦˜“𬚪𮌂𦘔𮌃è‚-肃𦘕-𦘚肄-肆ä‹ð¦˜›ð¦˜œð«†”𬚫𮌄肇肈ð¦˜-𦘟𫆕𦘠-𦘢𬚬𮌅𮌆𦘣𬚭𬚮𦘤-𦘨]
-[radical 130=â¾è‚‰:肉𮌇肊-è‚äŒä𦘩-𦘳è‚-è‚ äŽä𦘴-𦘾𬚯𮌈-𮌊股-èƒä-ä𦘿-𦙩𫆖-𫆘𬚰-𬚳𮌋胂-胬脉äž-ä¥ð¡‹œð£¨ð¦™ª-𦚜𫆙-𫆜𬚴-𬚶𮌌-ð®Œèƒ­-脈脊-è„”ä¦-ä®ð£¯ð£°ð¦š-𦛓ð«†ð«†žð¬š·-𬚺ð®Œ-𮌓脕-脸ä¯-ä»ð¦›”-𦜅𫆟-𫆡𬚻-ð¬›ð®Œ”-𮌙脹-腚㬹ä¼-äŒð¦œ†-𦜲𦜴-ð¦™ð«†¢-𫆥𬛂-𬛇𮌚-𮌠å¹è…›-è…¾ä-ä›ð¦š-𦞘𦟓𦟔𫆦-𫆨𬛈-𬛋𮌡-𮌥腿-膑äœ-äªð¦ž™-𦟒𦟕-𦟗𫆩-𫆮𫟊𬛌-𬛎𮌦-𮌰膒-膣ä«-ä´ð¦Ÿ˜-𦠂𫆯-𫆴ð¬›-𬛓𮌱-𮌹膥-膶äµ-ä½ð¦ ƒ-𦠽𦡄𦡮𫆵-𫆸𬛔-𬛘𮌺-𮌿膷-臌ä¾-ä‘𦠾-𦡃𦡅-ð¦¡ð¦¡-𦡕𦡘-𦡭𦡯𫆹-𫆻𬛙-𬛛ð®€ð®è‡-臓䑂-䑅𤑃𦡎𦡰-𦢉𫆼𫆽𬛜ð¬›ð®‚-ð®†è‡”臕臗臘䑆-䑈𦢊-𦢤𫆾𫆿ð®‡-ð®‰è‡–臙-臜䑉䑊𦢥-𦢷𫇀𬛞ð®Šè‡ã”®ä‘‹-䑎𦢸-𦢾ð«‡ð¬›Ÿè‡žè‡Ÿä‘𦢿-𦣅𫇂臠-臢ð¤“𦣆-ð¦£ð«‡ƒð¬› ð¦£‘-𦣕𬛡ð®‹ð¦£–-𦣜𫇄]
-[radical 131=⾂臣:臣𦣞ð®Œð¦£è‡¤è‡¥ð®ð¦£Ÿ-𦣣𫇅𬛢𬛣ä‘𦣤𦣥𬛤ð®Žð®è‡¦ð¦£¦-𦣩𫇆𬛥𫇇𬛦臧𦣫𦣬𦣮𫇈ð®-ð®’𦣭𦣯𬛧𬛨𦣪ð®“臨臩𦣰𦣱𬛩䑑𦣲𦣳𫇉𦣴𦣵𬛪𦣶𬛫𦣷𦣸]
-[radical 132=⾃自:自𦣹臫𦣺-𦤀臬臭ð¦¤-𦤋ð®”ð®•ð¦¤Œ-ð¦¤ð¬›¬ð®–-ð®˜è‡®-臰ð¦¤-𦤓𫇊ð®™ð¦¤”ð®šð®›ð¦¤•-𦤗𬛭ð®œè‡±ð¦¤˜-ð¦¤ð«‡‹è‡²ð¦¤ž-𦤤𬛮𦤥𫇌𦤦-𦤪𬛯𦤫-𦤮𬛰ð®ð®žð¦¤¯-𦤱ð®Ÿð¦¤²ð«‡]
+[radical 96=⽟玉:玉王𤣩玊玌-玑㺨-㺫𤣪-𤣬ðª»ð­¸µð°¡­ð°¡®çŽ’-玛㺬-㺯𤣭-𤣸ð¬ð¬‘玜-玱鿱㺰-㺶𤣹-𤤎𪻎-𪻔𫞥ð¬’-ð¬–𭸶-𭸻𰡯-𰡳玲-ç‘㺷-㺾ð¤¤-𤤴𪻕𪻖ð¬—-ð¬ð­¸¼-𭹃𰡴-𰡶ç’-ç²ç‰ãº¿-㻈𠴦𤤵-𤥕𪻗-𪻟𫞦ð¬ž-ð¬¤ð­¹„-𭹋𰡷-ð°¡¼ç³-ç¶ç¸-çˆçŠ-ç“㻉-ã»ð¤¥–-𤥺𪻠-𪻥ð¬¥-ð¬©ð­¹Œ-𭹔𰡽-ð°¢€ç·ç”-ççŸ-ç¼ã»‘-㻜𤥻-𤦮𪻦-𪻲𫞧ð¬ª-ð¬³ð­¹•-ð­¹¢ð°¢-𰢄çžç½-ç‘Ÿã»-㻦𤦯-𤧩𪻳-𪼂ð¬´-ð¬ºð­¹£-𭹪𰢅-𰢈瑠-瑸㻧-㻪𤧪-𤨓𪼃-ðª¼ð«ž¨ð¬»-𬎄𭹫-𭹮𰢉𰢊瑹-璌璎璓㻫-㻴𤨔-𤨿ð¤©ðª¼-𪼖𫞩𬎅-𬎊𭹯-𭹵𰢋-ð°¢ç’ç’-ç’’ç’”-璡璣璤㻵-㻼𤩀𤩂-𤩪𪼗-𪼠𬎋-𬎒𭹶-𭹿𰢎-𰢒璢璥-璴㻽-㼂𤩫-𤪊𪼡-𪼦𬎓-𬎖𭺀-𭺈𰢓𰢔璵-瓂𤪋-𤪨𤪴𪼧𪼨𬎗-𬎙𭺉-𭺌瓃-瓋㼃-㼆𤪩-𤪳𤪵-𤪽𪼩-𪼫𬎚ð­º-ð­ºð°¢•ð°¢–ç“Œ-瓒㼇𤪾-𤫈𪼬-𪼯𬎛-ð¬Žð­º‘𰢗𰢘瓓-瓖𤫉-𤫓𪼰𭺒𭺓𰢙瓗-瓙𤫔-𤫘𭺔-𭺖𰢚瓚㼈𤫙-𤫟𪼱瓛𤫠𪼲𬎞𤫣-𤫧𬎟𬎠𤫢𤫨𬎡𤫩]
+[radical 97=â½ ç“œ:瓜𰢛ç“𤫪𪼳㼉㼊𤫫-𤫯𪼴𭺗瓞瓟㼋㼌𤫰-𤫴𬎢𬎣𭺘𰢜瓠ã¼ã¼Žð¤«µ-𤫹ã¼ð¤«º-𤬀ð°¢ç“¡ð¤¬-𤬆𪼵𰢞𰢟ã¼-㼒𤬈-𤬌㼓㼔𤬇ð¤¬ð¤¬-𤬕瓢𤬎ð¤¬ð¤¬–𭺙𤬗㼕𤬘-𤬚𭺚𰢠瓣𤬛-ð¤¬ç“¤ð¤¬žð¤¬Ÿð°¢¡ð¤¬ ð¤¬¡ç“¥ð¤¬¢ã¼–𤬣-𤬥]
+[radical 98=⽡瓦:瓦𭺛𭺜瓧㼗𤬦𤬧𬎤瓨瓩㼘㼙𤬨-𤬫𪼶𬎥瓪-瓲㼚㼛𤬬-𤬲𪼷𪼸𬎦𬎧ð­ºð°¢¢ç“³-瓵㼜-㼠𤬳-𤬽𪼹瓶-瓸㼡-㼦𤬾-𤭋𬎨-𬎫𭺞-𭺡瓹-瓼㼧-㼪𤭌-𤭚𭺢瓽-ç”㼫-㼱𤭛-𤭦𤭲𤮖𪼺𪼻𬎬𬎭𭺣𰢣𰢤甂-甆㼲-㼷𤭧-𤭱𤭳-𤭸𪼼𬎮𰢥𰢦甇-甉㼸-㼺𠪹𤭹-𤮄𪼽𪼾𬎯𭺤甊-甎㼻-㼾𤮅-ð¤®ç”-甒㼿-㽅𤮎-𤮕𤮗甓-甕㽆㽇𤮘-𤮟𭺥𭺦甖㽈㽉𤮠𤮡𬎰𤮢-𤮥𭺧𭺨甗𤮦-𤮬㽊𤮭-𤮯𪼿𭺩𤮰-𤮵㽋𤮶㽌𤮷-𤮹]
+[radical 99=⽢甘:甘𤮺𭺪𭺫甙𤮻-𤯀甚ð¤¯-𤯄𫞪𰢧𰢨ã½ð¤¯…甛甜𭺬𰢩𤯆𪽀𰢪ç”甞㽎𤯇𬎱𭺭ã½ð¤¯ˆð¬Ž²ð­º®ð­º¯ã½ð¤¯‰ð¤¯Šð­º°ð¤¯‹ð¤¯Œã½‘ð¤¯ð¤¯Žð¤¯-𤯒]
+[radical 100=⽣生:生𤯓𤯔ðª½ð¤¯•-𤯗𭺱-𭺳甠𤯘-𤯞𬎳𰢫甡𤯟𭺴𰢬產産𤯠-𤯥𪽂𬎴𬎵𰢭甤-甦㽒𤯦-𤯫𬎶𭺵𰢮𤯬-𤯱𪽃-𪽅𬎷-𬎹甧𤯲-𤯴𬎺-𬎼𰢯㽓𤯵㽔𤯶-𤯺𭺶𭺷𤯻𤯼𤯾-𤰂]
+[radical 101=⽤用:用-甪𤰃𪽆甫甬𤰄𠂵𠃰𡶤𤰅𤰆𬎽𬎾𭺸甭甮𭺹𰢰𠳫𤰇𰢱𰢲𤰈𭺺𰢳甯𤰉𭺻𤰊-𤰌𭺼ð¤°-ð¤°ð¤°‘ð¤°]
+[radical 102=⽥田:ç”°-电𤰒甶𤰓𤰔𭺽𰢴男-町甼㽕-㽗𠃫𤰕-𤰜𪽇𬎿𰢵-𰢷画甽-ç•…ð¡‡ð¢‘–ð¤°-𤰨𪽈ð¬€ð°¢¸ç•†-畓㽘-㽚𤰩-𤱋𪽉-𪽌ð¬ð­º¾-𭻆𰢹-𰢾畔-畟㽛㽜𤱌-𤱠𤱢-𤱤ðª½-ðª½ð¬‚ð¬ƒð­»‡-𭻋𰢿-ð°£…ç•¡-畧畩異ã½ã½žð¤±¥-𤱺𪽑𪽒𫞫ð¬„-ð¬†ð­»Œ-𭻓𰣆-𰣊番-畯畲-畴㽟㽠𤱻-ð¤²ðª½“-𪽗ð¬‡-ð¬Šð­»”-𭻚𰣋畵-畺㽡-㽤𤲑-𤲪𪽘-𪽚ð¬‹ð­»›-𭻟𰣌畱畻-畽㽥𤲫-𤲶𪽛𪽜𭻠-𭻤ð°£ð°£Žç•¾ç•¿ã½¦-㽨𤲷-𤳇ðª½ðª½žð¬Œ-ð¬’𭻥𭻦ð°£-𰣑疀-疂㽩𤳈-𤳎ð¤³ð¤³‘𪽟-𪽡ð¬“ð¬”𭻧-𭻮𰣒𰣓疃疄㽪𤳒-𤳚𤳜-𤳣𪽢ð¬•ð­»¯-𭻱𰣔-𰣚疅㽫㽬𤳤-𤳨ð¨´ðª½£ð¬–ð¬—𭻲𭻳疆疇㽭𤳩-𤳰𤳲𭻴𭻵𰣛疈㽮𤳱𤳳-𤳸𪽤𭻶𭻷𰣜𤳹-𤳾𪽥𪽦𭻸ð°£ç–‰ç–Šð¤³¿-ð¤´ð­»¹ã½¯ð¤´‚-𤴄ð¬˜ð­»ºð¤´…𤴆𭻻𤴇-ð¤´ð­»¼ð¤´Žð­»½ð°£žð¤´ð°£Ÿð¤´-𤴒]
+[radical 103=⽦疋:疋𤴓-𤴕𭻾疌𤴖𤴘𭻿ç–𤴗𭼀ð­¼ð°£ ç–Žç–𤴙-𤴛㽰𤴜ð¤´ð¬™ð­¼‚𰣡ç–疑𭼃𭼄𤴞𭼅𤴟-𤴢𪽧𤴣𤴤]
+[radical 104=⽧疒:疒𤴥ð¬šç–“-疗㽱㽲𤴦-𤴮疘-ç– ã½³-㽶𤴯-𤴶ð¬›ð¬œç–¡-疯疺㽷-㽼𤴷-𤵖𪽨-𪽫ð¬-ð¬ ð­¼†ð­¼‡ð°£¢-𰣨疰-疹疻-痉㽽-㾉𤵗-𤵶𪽬-𪽮𫞬ð¬¡-ð¬¦ð­¼ˆð­¼‰ð°£©ð°£ªç—Š-痖㾊-㾒𤵷-𤶔𪽯ð¬§-ð¬¬ð­¼Š-ð­¼ð°£«ð°£¬ç——-痫㾓-㾡𤶕-ð¤·ðª½°ðª½±ð¬­-ð¬±ð­¼Ž-ð­¼’ð°£­-𰣯痬-瘆㾢-㾩𤷂-𤷺𪽲ð¬²-ð¬µð­¼“-ð­¼–ð°£°-𰣴瘇-瘘瘟瘧㾪-㾵𤷻-𤸩𪽳-𪽵ð¬¶-ð¬¸ð­¼—-ð­¼ð°£µ-𰣹瘙-瘞瘠-瘦瘨-瘫㾶-ã¿ð¤¸ª-𤹜𪽶𪽷𫞭ð¬¹ð­¼žð°£º-𰣽瘬-瘿癊㿂-㿈ð¤¹-𤺂𤺞ð¬ºð¬»ð­¼Ÿ-𭼧𰣾-𰤀癀-癉癋-癎㿉㿊𤺃-ð¤ºð¤ºŸ-𤺹𪽸𪽹ð¬¼ð¬½ð­¼¨-ð­¼­ð°¤-𰤄ç™-癞㿋-ã¿ð¤ºº-𤻔ð¬¾ð­¼®ð­¼¯ð°¤…-𰤇癟-癡癣㿑-㿓𤻕-𤻯𪽺𭼰-𭼴𰤈癢癤-癦㿔𤻰-𤻿𭼵-𭼷𰤉癧-癫㿕-㿗𤼀-𤼊ð¬¿ð¬€ð­¼¸ç™¬-癮㿘𤼋-ð¤¼ð¬ð°¤Šç™¯ç™°ã¿™ð¤¼-𤼗癱癲㿚㿛𤼘-𤼛𭼹𭼺𤼜-𤼞癳𤼟-𤼢𭼻癴㿜𤼣𭼼𤼤癵𰤋]
+[radical 105=⽨癶:癶𭼽𤼥𤼦癷𰤌ð°¤ç™¸-発𤼧𤼨𭼾𭼿𰤎𤼩-𤼫ð°¤ð¤¼¬-𤼮𭽀登發𤼯-𤼲ð¬‚ð­½ð°¤ð¤¼³-𤼵𭽂𰤑𤼶𭽃𤼷𤼸𭽄𤼹𤼺𤼼𭽅𤼻]
+[radical 106=⽩白:白-癿𤼽𤼾ð¬ƒð°¤’皀-皃ã¿ð¤¼¿-ð¤½ð­½†çš„𤽂-𤽇𭽇-𭽊𰤓𰤔皅-皈㿞𤽈-𤽗𪽻𪽼ð¬„ð¬…𭽋-ð­½ç• çš‰-çšã¿Ÿð¤½˜-𤽤𪽽𫞮ð¬†ð¬‡ð­½Ž-𭽓𰤕皎-皑㿠㿡𤽥-𤽫ð¬ˆð¬‰ð­½”-ð­½—ð°¤–-𰤘皒-皖𠌟𤽬-𤽸𪽾𪽿ð¬Šð­½˜ð°¤™çš—-皙㿢𤽹-𤾇𪾀ðª¾ð¬‹-ð¬Žð­½™-𭽜𰤚-𰤜㿣㿤𤾈-𤾓𪾂𪾃ð¬ð¬ð­½ð­½žçšš-皞㿥𤾔-𤾚𪾄𭽟皟-皡㿦𤾛-𤾟𭽠皢-皥𤾠-𤾦ð°¤çš¦-皨𤾧-𤾪𭽡𭽢皩㿧𤾫-𤾳皪皫𤾴-𤾷皬㿨𤾸-𤾺𪾅𤾻-𤾽皭𤾾𤾿ð¬‘𤿀-𤿃㿩𤿄𤿅]
+[radical 107=⽪皮:皮𤿆𤿇𰤞皯㿪𤿈-ð¤¿ðª¾†ã¿«ã¿¬ð¤¿Ž-𤿔𪾇ð¬’皰皱㿭㿮𤿕-𤿞ð¬“ð¬”𭽣𭽤𰤟-𰤢皲㿯㿰𤿟-𤿦𭽥-𭽪𰤣-𰤧皳皴㿱𤿧-𤿮𤿰-𤿲ð¬•ð­½«ð°¤¨-𰤪皵龾㿲㿳𤿯𤿳-𤿿𭽬-𭽮𰤫-𰤮皶-皹㿴㿵𥀀-𥀌𪾈𪾉ð¬–𭽯𭽰𰤯皺㿶㿷ð¥€-𥀓𭽱-𭽳𰤰𰤱皻㿸𥀔-𥀞𭽴𭽵皼𥀟-𥀡𭽶皽㿹𥀢-𥀪𭽷𥀫-𥀮𭽸𭽹皾㿺𥀯-𥀸𭽺𥀹𥀺𭽻]
+[radical 108=⽫皿:çš¿-ç›ð¥€¿ð¥€ð°¤²-𰤴盂㿻ð¥-ð¥…𫞯ð¬—𰤵盃-盈㿼㿽ð¥†-ð¥ðª¾Šðª¾‹ð«ž°ð¬˜ð¬™ð­½¼ç›‰-监㿾-䀀ð¥Ž-ð¥ð¥«ðª¾Œðª¾ð¬šð¬›ð­½½-𭽿𰤶-𰤹盒-盘盛ä€ä€‚ð¥ž-ð¥ªðª¾Žð¬œ-ð¬žð­¾€ð­¾ç›™ç›šç›œä€ƒð¥¬-ð¥¶ðª¾ðª¾ð¬Ÿ-ð¬¡ð­¾‚𰤺𰤻ç›-盟䀄䀅ð¥·-𥂂𪾑𪾒𫞱ð¬¢-ð¬§ð­¾ƒ-𭾆𰤼盠-監䀆𥂃-𥂆𪾓𪾔ð¬¨-ð¬¯ð­¾‡-𭾋𰤽-𰤿盤𥂇-𥂒𪾕ð¬°ð­¾Œ-ð­¾ð°¥€-𰥂盥-盧䀇䀈𥂓-𥂤𪾖ð¬±ð­¾ð°¥ƒ-𰥅盨-盪䀉𥂥-𥂲𥂴-𥂷𪾗𪾘ð¬²-ð¬µð­¾‘盫盬𥂸-𥂺𥂼-𥃀𪾙ð¬¶ð¬·ð­¾’𰥆䀊𥂻ð¥ƒ-𥃆𪾚ð¬¸-ð¬¼ð­¾“𭾔𰥇盭𥃇-𥃑ð¬½ä€‹ð¥ƒ’𦪹𪾛ð¬¾-𬑀𭾕𰥈䀌𥃓-𥃗𪾜ð¬‘𬑂𰥉𥃘𥃙𥃞𭾖𥃚-ð¥ƒðª¾ð¥ƒŸð¥ƒ ð¬‘ƒð¬‘„𥃡𰥊ä€ðª¾žð¥ƒ¢ð¥ƒ£]
+[radical 109=⽬目:目𥃤𥃥盯䀎ä€ð¥ƒ¦-𥃱𭾗-𭾙𰥋盰-盵ä€-䀔𥃲-𥄂𪾟𪾠𬑅𭾚-ð­¾ð°¥Œ-ð°¥ç›¶-çœä€•-䀞𥄃-𥄰𪾡-𪾣𬑆𬑇𭾞-𭾥𰥑-𰥔眎-眬眿䀟-䀦𥄱-𥅙𪾤-𪾧𫞲𬑈-ð¬‘𭾦-𭾪𰥕-𰥜眭-眾ç䀧-䀮𠌪𥅚-𥆉𪾨-𪾪𫞳ð¬‘-𬑕𭾫-ð­¾²ð°¥-𰥡ç€ç‚-ç‘鿃䀯-ä€ð¥†Š-𥇄𥇆-𥇈𥇫𪾫𪾬𬑖𬑗𭾳-𭾸𰥢-𰥩ç’-ç ç¢-ç­ä-ä‰ð¢°¿ð¢¾¥ð£ª­ð¥‡…𥇉-𥇪𥇬-𥇳𥇵-ð¥ˆðª¾­-𪾰𬑘-𬑛𭾹-𭿂𰥪-ð°¥´ç¡ç®-瞆äŠ-ä–𥈂-𥈻𪾱-𪾴𬑜ð¬‘𭿃-ð­¿ð°¥µ-𰥷瞇-çž“ä—-ä¡ð¥ˆ¼-𥉳𥊇𪾵-𪾸𬑞-𬑣ð­¿-𭿔𰥸-𰥽瞔-瞣ä¢-äªð¥‰´-𥊆𥊈-𥊩𥋖𪾹-𪾻𬑤-𬑧𭿕-𭿜𰥾-ð°¦çž¤-çž·ä«-ä³ð¥Šª-𥋕𥋗𪾼-𪿀𬑨𬑩ð­¿-𭿡𰦂𰦃瞸-矂ä´-äºð¥‹˜-𥋾𭿢-𭿨𰦄-𰦆矃-矊𥋿-𥌔𥌖-𥌙ðª¿ð¬‘ªð­¿©-𭿭𰦇𰦈矋-çŸä»-ä¾ð¥Œš-𥌬𪿂𰦉çŸ-矓ä¿ä‚€ð¥Œ­-𥌹ð¥‚𪿃𪿄𬑫𭿮-𭿱𰦊ä‚𥌺-ð¥ð¥ƒð¥…-ð¥‡ð­¿²ð°¦‹çŸ”䂂䂃ð¥ˆ-ð¥ŽçŸ•çŸ—ð¥-ð¥’𭿳𭿴矘矙䂄ð¥“𬑬矖矚ð¥”-ð¥œðª¿…䂅𰦌]
+[radical 110=⽭矛:矛𭿵ð¥ð­¿¶ð°¦ä‚†ð¥žð¬‘­çŸœä‚‡ð¥Ÿð¥ ðª¿†ð°¦ŽçŸð¥¡-ð¥¦ð­¿·ð­¿¸ð°¦ä‚ˆð¥§-ð¥©ð­¿¹ð­¿ºð°¦çŸžçŸŸð¥ª-ð¥±ðª¿‡çŸ ð ¢ð¥²-ð¥µð¬‘®ð°¦‘䂉ð¥¶-ð¥Žð¬‘¯ð¥Ž‚-𥎉𭿻𥎊-ð¥Žð­¿¼ä‚Š-ä‚Œð¥Ž-𥎒𥎎𥎓-𥎜ä‚𥎞-𥎠ð¥Žð¥Ž¡-𥎣䂎矡𥎤𥎥]
+[radical 111=⽮矢:矢𰦒矣𥎦𥎧𭿽𰦓矤知𥎨矦-矨𥎩-𥎯𪿈𪿉𭿾𭿿𰦔𰦕矩ä‚ä‚𥎰-𥎸𬑰𬑱𮀀𰦖矪矫䂑䂒𥎹-ð¥ðª¿Šð®€ð®€‚矬短䂓𠅰ð¥Ž-ð¥—𬑲𬑳𰦗矮䂔ð¥˜-ð¥©ðª¿‹ð¬‘´ð®€ƒð®€„𰦘𰦙䂕ð¥ª-ð¥±ðª¿Œð®€…𰦚ð¥²-ð¥ºðª¿ðª¿Žð®€†-𮀈𰦛-ð°¦ð¥»-ð¥¿ð®€‰ð°¦ž-𰦢矯矰ð¥€-ð¥†ð¬‘µð¥‡-ð¥‹ð¬‘¶ð°¦£çŸ±ð¥Œ-ð¥ð¬‘·çŸ²ðª¿ð®€Šðª¿ð¬‘¸ð¥‘ð¥’ð¥ð¥“ð¥”]
+[radical 112=⽯石:石䂖ð¥•ð¥–矴-矶䂗ð¥—-ð¥œð¬‘¹çŸ·-ç ä‚˜ä‚™ð¥-ð¥¨ð¬‘º-𬑼𮀋𮀌𰦤泵砂-砜䂚-ä‚žð¥©-𥑅𪿑-𪿓𬑽-𬒂ð®€ð®€Žð°¦¥-𰦬ç -ç¡é¿¬ä‚Ÿ-䂨𥑆-𥑲𪿔-𪿘𬒃-𬒈ð®€-𮀔𰦭-𰦲硂-硛鿎䂩-䂯𥑳-𥒩𪿙-ðª¿ð¬’‰-𬒌𮀕-𮀘𰦳-𰦻硜-ç¡·ä‚°-䂶𥒪-𥓉𪿞-𪿣ð¬’-𬒑𮀙-𮀡𰦼-𰧅硸-硽硿-碜碰䂷-䃇𥓊-𥓹𪿤-𪿩𬒒-𬒕𮀢-𮀫𰧆-𰧊硾ç¢-碯碱-碹ç£äƒˆ-äƒð¥“º-𥔬𪿪𪿫𬒖-𬒚𮀬-𮀵𰧋-ð°§ç¢º-磀磂-磙磜磤䃑-䃗𥔭-𥕋𪿬-𪿮𬒛𮀶-𮀺𰧑-𰧘磚磛ç£-磣磥-磮䃘-䃞䃠𥕌-𥕯𪿯-𪿴𬒜-𬒞𮀻-ð®ƒð°§™-𰧠磯-礅䃟䃡-䃨𥕰-𥖖𪿵-𪿷𬒟-𬒣ð®„-ð®‰ð°§¡-𰧨礆-礖䃩-䃯ð£žð¥–—-𥖩𪿸-𪿺𬒤𬒥ð®Š-ð®ç¤—-礡䃰𥖪-𥖺𪿻-𪿽𬒦𬒧ð®-ð®“𰧩礢-礬䃱-䃳𡕎𥖻-𥗑𬒨ð®”𰧪礭-礴䃴-䃷𥗒-𥗜𪿾ð®•ç¤µäƒ¸äƒ¹ð¥—-𥗪𬒩𬒪𰧫𰧬礶礷𥗫-𥗳𪿿ð®–-ð®˜ç¤¸äƒºð¥—´ð¥—µð¥—·ð¥—¸ð¬’«ð®™ð®šç¤¹ð¥—¹äƒ»ð¥—º-𥗽ð®›ð¥—¾-𥘄]
+[radical 113=⽰示:示礻𥘅礼𥘆礽䃼𥘇-𥘌ð®œð®ç¤¾-祃ð¥˜-𥘔𫀀ð«€ð¬’¬ð®žð°§­-𰧰祄-祎视鿆䃽-䄀𥘕-𥘪𫀂𫀃𬒭-𬒰ð®Ÿ-ð®¡ð°§±ð°§²ç¥-祢ä„-䄃𥘫-ð¥™ð«€„-𫀆𬒱-𬒳ð®¢-ð®¬ð°§³-𰧵祣-祥祧-祯䄄-䄆𥙎-𥙪𫀇-𫀊𫞴𬒴𬒵ð®­-ð®·ð°§¶-𰧿祦祰-祸禄視䄇-䄊𣂫𥙫-𥚇𫀋-ð«€ð«žµð¬’¶-𬒽ð®¸-ð®¾ð°¨€-𰨃祹-禃禅禆䄋-䄒𥚈-𥚥ð«€-𫀙𬒾-𬓈ð®¿-𮂃𰨄-𰨉禇-禙䄓-䄗𢿆𥚦-𥛄𫀚𫀛𬓉-ð¬“𮂄-𮂉𰨊-ð°¨ç¦š-禣䄘䄙𠖟𥛅-𥛗𫀜-𫀟𬓎-ð¬“𮂊-𮂎𰨎-ð°¨ç¦¤-禦䄚-䄞𥛘-𥛭𫀠𫀡𬓑-𬓗ð®‚-𮂖𰨑𰨒禧-禫䄟𥛮-𥜂𫞶𬓘-𬓚𮂗-𮂛𰨓禬-禯鿅䄠䄡𥜃-𥜑𫀢𬓛𮂜ð®‚𰨔禰禱䄢𥜒-𥜙𫀣𬓜𮂞𮂟禲䄣𥜚-𥜟𮂠-𮂢𰨕𰨖䄤𥜠-𥜤𰨗禳禴𥜥-𥜩ð¬“𮂣-𮂧𰨘禵𥜪-𥜯𮂨禶禷𥜰-𥜳𮂩-𮂫𥜴𥜵𫀤𥜶-𥜸𧆆𰨙𥜹𥜺䄥]
+[radical 114=⽱禸:禸𥜻禹禺𥜼离𥜽禼𥜾𮂬𰨚禽è¬ð¥œ¿ð¥-ð¥ƒð Ž˜ð ¾§ð¥„-ð¥‡ð¦¦”𬓞𣜢ð¥ˆð¥‰ð«€¥ð®‚­ð¥Šð¬“Ÿð®‚®ð¥‹]
+[radical 115=⽲禾:禾ð¥Œ-ð¥ð«€¦ç¦¿-秃䄦䄧ð¥-ð¥“𬓠𮂯𰨛秄-秊䄨-ä„­ð¥”-ð¥¢ð«€§ð®‚°ð°¨œç§‹-秗䄮-䄵ð¥£-ð¥½ð«€¨ð«€©ð¬“¡-𬓤𮂱-𮂹ð°¨ð°¨žç§˜-称䄶-䄹ð¥¾-𥞗𫀪-𫀭𬓥𬓦𮂺-𮃀𰨟-𰨤秱-秾稆䄺-䅊𥞘-𥞱𥟅𫀮-𫀱𫞷𬓧-𬓩ð®ƒ-𮃄𰨥-𰨨秿-稅稇-税鿟䅋-䅓𠞜𥞲-𥟄𥟆-𥟌𫀲-𫀸𬓪-𬓬𮃅𮃆𰨩-𰨬ç¨-稥䅔-ä…Ÿð¥Ÿ-𥟼𫀹-𫀻𫞸𬓭-𬓰𮃇-𮃒𰨭-𰨯稦-稳穊䅠-䅫𥟽-𥠰𫀼-ð«€ð¬“±-𬓴𮃓-𮃚𰨰稴-穃䅬-䅶𥠱-𥡛ð«-ð«„𬓵-𬓹𮃛-𮃢𰨱-ð°¨´ç©„-穈穋-ç©’ä…·-䅽𥡜-𥢉ð«…𬓺-𬓽𮃣-𮃫𰨵-𰨷穉穓-ç©žä…¾-䆀𥢊-𥢳ð«†ð¬“¾-𬔀𮃬-𮃱𰨸-𰨻穟-ç©£ä†-䆇𥢴-𥣉𥣋-𥣔ð«‡ð«ˆð¬”𮃲𰨼𰨽穤-穫𥣊𥣕-𥣡𥣣-𥣧𬔂𮃳穬-穯䆈䆉𥣢𥣨-𥣶𥣸-𥣿ð«‰ð¬”ƒð°¨¾ð°¨¿é¿ ä†Š-ä†ð¥¤€-𥤅𬔄𮃴𮃵𰩀ð°©ç©°ç©³ä†Žä†ð¥¤†-𥤉𰩂穱𥤊-𥤒𰩃穲𥤓𥤕𥤖𮃶𮃷𥤗-𥤟ä†ð¥¤ ð¥¤¡]
+[radical 116=⽳穴:穴𥤢穵-穷䆑𥤣-𥤦𫞹𬔅穸-穻䆒𥤧-𥤳𮃸穼-窃䆓-䆖𥤴-𥥆ð«Šð¬”†ð¬”‡ð®ƒ¹ð°©„窄-窎䆗-䆙𥥇-𥥟ð«‹ð¬”ˆð®ƒºð®ƒ»ð°©…-𰩉çª-窕䆚-䆠𥥠-𥥵ð«Œð«ð¬”‰ð¬”Šð®ƒ¼ð°©Šçª–-çªä†¡-䆥𥥶-𥦚ð«Ž-ð«ð¬”‹ð¬”Œð®ƒ½-𮄀𰩋-ð°©çªž-窧䆦-䆩𥦛-𥦷ð«‘-ð«“ð¬”ð®„-𮄇ð°©-𰩒窨-窭䆪䆫𥦸-ð¥§ð«”ð«•ð®„ˆ-𮄋𰩓-𰩕窮-窴䆬-䆮ð¥§-𥧡𥧣-𥧫ð«–𬔎ð¬”𮄌-𮄎𰩖𰩗窵-窽䆯-䆴𥧬-𥧻𥧽-𥨋ð«—-ð«šð¬”-𬔓ð®„-𮄕𰩘𰩙窾-竃䆵-䆻𥧼𥨌-𥨟𥨩ð«›ð®„–-𮄚𰩚𰩛竄竅䆼䆽𥨠-𥨨ð«œð¬””𮄛-ð®„ð°©œ-𰩞竆䆾䆿𥨪-𥨯𥨲𮄞-𮄡竇䇀𥨰𥨱𥨳𥨴𥨶-𥨺竈竉𥨵𥨻-𥩈𬔕𮄢𰩟竊ä‡ð¥©‰ð«žºð®„£ð¥©Šð¥©‹ð«ð®„¤ð®„¥ð¥©Œð¥©ð¥©-𥩑𮄦𥩎𥩒-𥩔]
+[radical 117=â½´ç«‹:立䇂𬔖竌ç«ð¥©•ð¥©–𫞻竎ç«ä‡ƒä‡„𥩗𥩘ð«žð¬”—𮄧ç«-竗䇅䇆𥩙-𥩟ð«Ÿð¬”˜-𬔚𮄨𰩠𰩡竘-竞䇇-䇊𥩠-𥩰ð« ð«¡ð¬”›ð¬”œð®„©-𮄬𰩢竡䇋𥩱-𥩽ð«¢ð«ž¼ð¬”𮄭𮄮𰩣𰩤竢-竧䇌ä‡ð¥©¾-𥪉ð«£ð«¤ð¬”ž-𬔠𮄯𮄰竨-竫䇎-䇑𥪊-𥪗ð«¥ð«¦ð¬”¡-𬔣𮄱-𮄳竬竭端竰𥪘-𥪤ð«§ð«¨ð¬”¤-𬔦𮄴-𮄶𰩥-𰩨𥪥-𥪬ð«©-ð««ð¬”§ð®„·ç«®ç«±ä‡’𥪭𥪮𥪰𥪱ð«¬ð¬”¨ð¬”©ð®„¸-𮄺𰩩𰩪竲-竴䇓𥪯𥪲-𥪹𥪻ð«­ð¬”ªð®„»ð®„¼ç«µä‡”𥪼-ð¥«ð¥«ƒð¥«„䇕𥪺𥫅-𥫇ð«®ð®„½ç«¶ç«·ð¥«ˆ-ð¥«ð®„¾ð¥«Žð¥«ð¬”«ç«¸ð¥«ð¥«‘ð«¯ð¥«“𥫔𰩫𥫒𥫕𥫖𮄿]
+[radical 118=⽵竹:竹𥫗𥫘竺竻𥫙-𥫜ð«°ð¬”¬ç«¼-笃䇖ð¥«-𥫮ð«±ð¬”­ð°©¬ð°©­ç¬…-笕䇗-ä‡ð¥«¯-𥬋ð«²-ð«·ð¬”®-𬔲𮅀-𮅃𰩮-𰩱笖-笾䇞-䇦𥬌-𥬩𥬿ð«¸-ð«»ð¬”³-𬔹𮅄-𮅆𰩲-𰩷笄笿-ç­ä‡§-䇴𥬪-𥬾𥭀-ð¥­ð«¼ð«½ð¬”º-ð¬•ð®…‡-ð®…𰩸-𰩺筞-简節䇵-䈀ð¥­-𥮇𥮉-𥮌ð«¾-𫂃𬕂-ð¬•ð®…‘-𮅔𰩻-ð°©¾ç®-箫äˆ-äˆð¥®ˆð¥®-ð¥¯ð«‚„-𫂉𬕎-𬕙𮅕-ð®… ð°©¿-𰪄箬-箿ç¯-篈篊-篓䈎-䈩𥯑-𥰗𫂊-ð«‚ð«ž½-𫞿𬕚-𬕡𮅡-𮅮𰪅-𰪎築篔-篯簑簕䈪-䈷𥰘-𥱴ð«‚-𫂗𬕢-𬕨𮅯-ð®…µð°ª-𰪓篰-ç°ç°’-簔簖簗䈸-䉇𥱵-𥳀𥳂-𥳅𥴎𫂘-𫂟𬕩-𬕬𮅶-𮆆𰪔-ð°ª–ç°˜-簲䉈-䉎ä‰-䉚䉣ð¥³ð¥³†-ð¥´ð¥´-𥴠𫂠-𫂤𬕭-𬕲𮆇-𮆓𰪗-𰪙簳-籂ä‰ä‰›-䉢䉤𥴡-𥵛𫂥𫂦𬕳-𬕺𮆔-𮆞𰪚𰪛籃-ç±ç±•ç±–䉥𥵜-𥶄𫂧𮆟-𮆧𰪜ð°ªç±-籔䉦-䉭𥶅-𥶴𫂨-𫂫𬕻-𬕿𮆨-𮆵𰪞-𰪢籗-籡䉮-䉱𥶵-𥷓𫂬𬖀-𬖅𮆶-𮆽籢-籨䉲-䉴𥷔-𥷧𫂭𬖆𰪣籪䉶𥷨-𥷻𫂮𬖇籩籫-籮𥷼-𥸇𫂯𮆾𮆿籯籰䉷𥸈-ð¥¸ð®‡€ð°ª¤ä‰¸ð¥¸-𥸖𬖈-𬖊ð®‡ð°ª¥ð¥¸—𥸚-ð¥¸ð«‚°ð¥¸˜ð¥¸™ð¥¸ž-𥸠𮇂籱䉹𥸡-𥸣籲𥸤]
+[radical 119=⽶米:米𥸥𥸦𬖋籴-籶𥸧-𥸪𫂱𫂲𬖌-𬖎𮇃𮇄𰪦娄籷-粂䉺𥸫-𥸲𫂳𫂴ð¬–𮇅𰪧-𰪪粃-粑䉻䉼𥸳-𥹀𫂵-ð«‚·ð¬–-𬖒𮇆-𮇊𰪫-𰪰畨粒-ç²ç²£ä‰½-䊀ð¥¹-𥹖𥹘𥹙𥹱𫂸-𫂼𬖓-𬖘𮇋-𮇒𰪱-𰪵粞-粢粤-ç²­äŠ-䊆𥹗𥹚-𥹰𫂽-𫃀𬖙-𬖜𮇓-ð®‡ð°ª¶-𰪼粮-粵糀䊇-䊌𥹲-𥺗ð«ƒð¬–-𬖠𮇞-𮇤𰪽粶-粿ç³äŠ-䊒𥺘-𥻀𫃂-𫃅𬖡-𬖥𮇥-𮇫𰪾-ð°«ç³‚-糎䊓-䊙ð¡¢ð¥»-𥻣𫃆-𫃈𬖦-𬖪𮇬-𮇲𰫂-ð°«…ç³-糘鿯䊚䊛䨀ð¢«ð¥»¤-𥻾𫃉-𫃌𬖫-𬖲𮇳-𮇹𰫆-ð°«Šç³™-糢糨䊜-䊢𥻿-𥼖ð«ƒð«ƒŽð«Ÿ€ð¬–³-𬖵𮇺𰫋-ð°«ç³£-糧䊣-䊩𥼗-𥼵ð«ƒ-𫃑𬖶-𬖺𮇻𮇼𰫑-𰫓糩-糭䊪-䊬𥼶-𥽎𫃒-𫃕𬖻𮇽𮇾糮-糰䊭䊮ð¥½-𥽖𫃖𬖼-𬖾𰫔𰫕糲䊯𥽗-𥽠𥽢𥽣𬖿𮇿糱糳糴䊰𥽡𥽤-𥽫𫃗-𫃙𬗀ð¬—𰫖糵䊱䊲𥽬-𥽵𬗂糶䊳䊴𥽶-𥽺𮈀𥽻-𥽿糷𥾀-𥾄]
+[radical 120=⽷糸:糸-糿䊵𥾅-𥾋𫃚𫃛𰫗紀-紉䊶-䊹𥾌-𥾘𫃜ð«ƒð¬—ƒð¬—„ð®ˆð®ˆ‚𰫘𰫙紊-紧䊺-䋇𥾙-𥿂𫃞𬗅𬗆𮈃-𮈅𰫚-ð°«ç´¨-経䋈-䋔𥿃-𥿥𫃟-𫃡𬗇-𬗊𮈆-𮈊𰫞-ð°«¡çµ-絚絜-çµ·ä‹•-䋞𥿦-𦀑𫃢-𫃤𬗋-𬗔𮈋-ð®ˆð°«¢-𰫤絛絸-綛ç·ä‹Ÿ-䋦𦀒-ð¦…𫃥-𫃩𬗕-𬗞𮈑-𮈕𰫥-𰫨綜-ç·ç·‘緒緔緕䋧-䋲ð¦†-ð¦¿ð«ƒª-𫃲𬗟-𬗧𮈖-𮈢𰫩-ð°«­ç·“ç·–-縇䋳-䌄𦂀-𦂦𦂨-ð¦ƒð«ƒ³-𫃷ð«Ÿð¬—¨-𬗮𮈣-𮈰𰫮𰫯縈-縨䌅-䌋𦂧𦃂-ð¦„𦄃-𦄈𫃸-𫃼𬗯-𬗲𮈱-𮈸𰫰縩-繇繉繊繌ç¹äŒŒ-䌕𦄂𦄉-𦄻𫃽-𫄀𬗳-𬗺𮈹-𮉃𰫱𰫲繈繎-繥繧繱䌖-䌛𦄼-𦅴ð«„-𫄄𫟂𬗻-ð¬˜ð®‰„-𮉉𰫳𰫴繋繦繨-ç¹°ç¹²-繺䌜-䌢𦅵-𦆛𦆥𫄅-𫄋𬘂𮉊-ð®‰ç¹»-纃䌣-䌧𦆜-𦆣𦆦𦆧𦆩𦆪𦆬-𦆺𫄌-𫄎𬘃-𬘈ð®‰-𮉒纄-çºäŒ¨äŒ©ð¦†¤ð¦†¨ð¦†«ð¦†»-ð¦‡ð¦‡ƒ-𦇓ð«„-𫄑𬘉-𬘌𮉓-𮉖𰫵-𰫷纑纒䌪-䌭𦇂𦇔-𦇦𫄒-ð«„”ð¬˜-ð¬˜ð®‰—-𮉙𰫸𰫹纓-纖䌮𦇧-𦇯𫄕ð¬˜ð¬˜‘𮉚𰫺纗䌯-䌲𦇰-𦇷𦇹𬘒𮉛𮉜纘-纛䌳䌴𦇸𦇺𦇻𫄖ð®‰ð®‰žð¦‡¼ð¦‡½ð«„—纜çºäŒµð¦‡¾-𦈂𫄘𮉟𦈃𦈄𰫻纞𦈅-𦈇]
+[radical 120'=⺰纟:纟𫄙纠𮉠𰫼纡-纫纶䌶𬘓纬-纵纷-纾䌸𫄚-ð«„𬘔-𬘘𰫽-ð°¬çº¿-ç»äŒ·äŒ¹ð¦ˆˆð«„žð«„Ÿð¬˜™-𬘞𮉡-𮉣𰬂-𰬋绑-统䌺䌻𦈉𫄠-𫄣𫟃𬘟-𬘧𮉤-𮉦𰬌-𰬕绠-绨䌼𦈊-𦈌𫄤-𫄩𫟄𬘨-𬘫𮉧-𮉩𰬖-𰬞绩-ç¼äŒ½ð¦ˆ-ð¦ˆð«„ªð«„«ð«Ÿ…𬘬-𬘯𮉪-𮉬𰬟-𰬪缂-缘䌾䌿𦈑-𦈕𫄬-𫄮𫟆𬘰-𬘸𮉭𰬫-ð°¬°ç¼™-缤ä€ð¦ˆ–-𦈙𫄯𫄰𬘹-𬘽𰬱-ð°¬´ç¼¥-缫𦈚𫄱-𫄴𬘾-𬙂𮉮𮉯𰬵𰬶缬-缯𦈛-ð¦ˆð«„µð«„¶ð¬™ƒ-𬙈𰬷-𰬻缰-ç¼´ä𦈞𦈟𫄷𬙉𰬼-𰬾𦈠𦈡𫄸𫟇𰬿𬙊𰭀ð°­ç¼µð¬™‹ð«„¹]
+[radical 121=⽸缶:缶𦈢缷𰭂𰭃缸ä‚𦈣-𦈥𮉰缹缺缼äƒð¦ˆ¦-𦈨𬙌ð¬™ð®‰±ç¼»ç¼½ä„-ä‰ð¦ˆ©-𦈮𬙎𮉲缾-ç½€äŠð¦ˆ¯-𦈳ð¬™ð¦ˆ´-𦈷𫄺𮉳𮉴ç½ç½‚ä‹äŒð¦ˆ¸-𦉀𫄻ð¬™ð®‰µð°­„ð¦‰-𦉇𫄼𫄽𬙑𬙒𮉶罃ä𦉈-𦉎𫄾𬙓𮉷罄-罆ð¦‰-𦉔𮉸𰭅罇-罉𦉕-𦉘𮉹-𮉻𰭆罊罋ð¤•ð¦‰™-𦉜𫄿𬙔罌ð¦‰ð¦‰žç½ð¦‰Ÿð¦‰ ð°­‡ç½Žç½ð¦‰¡äŽð¦‰¢-𦉤ç½ð¤«¡ð¦‰¥-𦉩]
+[radical 122=⽹网:网-罓ä𦉪𦉫𦉭𦉰𦉯𮉼𦉬𦉮𦉱-𦉶𬙕罔-ç½—ää‘𦉷-𦊀𫅀𬙖-𬙘𮉽罘-罚ä’-ä”ð¦Š-ð¦Šð«…𬙙𮉾-𮊀𰭈罛-ç½¢ä•-ä—𦊎-𦊣𦊥-𦊩𦊳𫅂𬙚-𬙜ð®Š-𮊄𰭉罣ä˜ð¦Šª-𦊲𦊴-𦊻𫅃-ð«……ð¬™ð®Š…ð°­Š-𰭌罤-罦ä™äšð¦Š¼-𦋄𦋑𬙞𬙟𮊆ð°­ð°­Žç½§-置署ä›-äžð¦‹…-ð¦‹ð¦‹’-𦋜𫅆𫅇𬙠-𬙣𮊇-𮊉ð°­-𰭑罯-罱罳罴äŸð¦‹-𦋩𦋫-𦋮𫅈𮊊-𮊌罵-罸𦋯-𦋼𫅉𬙤-𬙦ð®Š-𮊓𰭒-𰭔罹-ç½¼ä ä¡ð¦‹½-𦌑𫅊𮊔-𮊙𰭕罽-ç¾ä¢ð¦Œ’-𦌞𧷅𬙧𬙨𮊚𮊛羂ä£ð¦ŒŸ-𦌨ð§°ð«…‹ð¬™©ð®Šœç¾ƒ-羆ä¤ð¦Œª-𦌴𫅌ð®Šð®Šžð¦Œµ-𦌺ä¥ð¦Œ»ð¦Œ¼ð«…𬙪𮊟羇𦌽𬙫𮊠羈羉ä¦ð¦Œ¾-ð¦…𰭖𮊡ð¦†-ð¦Šé¿¡]
+[radical 123=⽺羊:羊ð¦‹-ð¦ç¾‹ç¾Œð¦Ž-ð¦ð«…Žð°­—ç¾-羑ð¦‘-ð¦–𫟈𬙬𮊢-𮊤羒-羔羖-ç¾™ä§-ä©ð¦—-ð¦¤ð¦®ð¬™­-𬙯𰭘羕羚-羟äª-ä­ð¦¥-ð¦­ð¦¯-ð¦¸ð«…-𫅒𬙰𮊥𮊦羠-ç¾¢ä®-ä°ð¦¹-𦎄𫅓𫅔𬙱-𬙳𮊧𮊨𰭙羣-羪ä±ð¦Ž†-𦎖𫅕𬙴𮊩羫ä²-ä¶ð¦Ž—-𦎡𬙵𬙶𮊪-𮊭羬-ç¾°ä·ð¦Ž¢-𦎮𫅖-𫅘𬙷𬙸𮊮𮊯𰭚羱羲ä¸ä¹ð¦Ž¯-𦎶𫅙𬙹-𬙻𮊰-𮊲𰭛𰭜äºð¦Ž·-ð¦„ð«…š-𫅜𬙼𬙽羳-ç¾µä»ä¼ð¦Œ©ð¦…-ð¦”ð«…𫅞𬙾𮊳羶-ç¾¹ð¦•-ð¦›ð¬™¿ð®Š´ç¾ºð¦œ-ð¦¡ð«…Ÿç¾»ç¾¼ð¡…–ð¦¢-ð¦§ð¬š€ð®Šµð®Š¶ä½ð¦¨ð¦©ð«… ð«…¡ð¬šð®Š·ð¦ª-ð¦®ð¬š‚𣌞ð¦¯-ð¦±]
+[radical 124=⽻羽:ç¾½ð¦³ð°­ð¦²ç¾¾ç¾¿ð¦´-ð¦ð«…¢ç¿€-翆ä¾ä¿ð¦‚-ð¦”𫅣𮊸-𮊻𰭞-𰭠翇-習䎀-䎆ð¦•-ð¦¢ð«…¤ð®Š¼ð°­¡ç¿“-翚䎇-䎊ð¦£-ð¦·ð«…¥-𫅧𮊽-𮋂𰭢翛-ç¿äŽ‹-䎎ð¦¸-𦑄𦑆𫅨𫅩𬚃𮋃𮋄𰭣翞-翤äŽ-䎓𦑅𦑇-ð¦‘𦑒-𦑗𫅪𬚄𮋅-𮋈𰭤翥-翭𦑘-𦑯𦑻𫅫𫅬𮋉-𮋌翮-翱䎔䎕𦑰-𦑺𦑼-𦒂𦒞𫅭𫅮𬚅𬚆ð®‹-𮋑𰭥翲-翶翼𦒃-𦒌𫅯𬚇𬚈𮋒𮋓翷-翻䎖-䎘ð¦’-𦒛𦒟𫅰𫅱翽翾𦒜ð¦’𦒠𦒡𮋔𮋕翿耀䎙𦒢-𦒥𦒪𦒫𮋖𮋗䎚𦒦𦒨𦒩𦒬𮋘𮋙𦒧𦒭-𦒯𫅲𰭦𦒰𮋚]
+[radical 125=â½¼è€:è€-考𰭧𦒱𦒲𬚉𬚊䎛𦒳-𦒵𰭨𰭩耄-耆𦒶-𦒹耇-耉𦒺-𦒿𫅳𫅴𬚋𮋛𰭪耊耋䎜-䎞𦓀𮋜ð®‹ð¦“𫅵𬚌𮋞𦓂𫅶𰭫𦓄𦓅𫅷𦓆𦓇𦓃𦓈𦓉ð¬šð¦“Šð«…¸ð¬šŽð¦“‹-ð¦“]
+[radical 126=⽽而:而ð¦“𦓎ð¦“𦓑è€-耑䎟䎠𰭬䎡𦓒-𦓗𮋟𰭭𰭮𦓘-𦓜ð¬šð¦“𦓞𮋠𮋡𦓟-𦓡𰭯𦓢𮋢𦓣]
+[radical 127=⽾耒:耒𦓤耓𦓥-𦓧𮋣耔䎢𦓨-𦓪耕-耙𦓫𮋤𰭰𰭱耚-耟䎣𦓬-𦓮𫅹𮋥-𮋧耠𦓯-𦓳𫅺𫅻ð¬šð®‹¨ð®‹©è€¡è€¢äŽ¤äŽ¥ð¦“´-𦓶𫅼𮋪耣-耥䎦-䎪𦓷-ð¦”耦耧䎫䎬𦔂-𦔊𫅽耨-耪𦔋-𦔒𫅾耫耬䎭-䎯𦔓-𦔚耭耮䎰𦔛-𦔞𦔠-𦔤𫅿𮋫𦔟𦔥-𦔨𬚑𰭲耯耰䎱𦔩𦔪耱耲𦔫-𦔭]
+[radical 128=⽿耳:耳耴䎲𦔮耵𦔯-𦔶𫆀𫟉耶耷𦔷-𦔻𬚒𬚓𮋬𮋭𰭳耸-è‚䎳䎴𦔼-ð¦•ð«†ð®‹®ð°­´-ð°­·èƒ-è䎵䎶ð¦•-𦕟𬚔-𬚖𮋯𰭸-ð°­ºèŽ-è”è äŽ·ð¦• -𦕢𦕤-𦕴𫆂𫆃𬚗-𬚙è•-è˜äŽ¸äŽ¹ð¦•£ð¦•µ-𦖇𦖗𫆄-𫆆𬚚-ð¬šð®‹°-𮋲è™-èŸè¡-è£é¿¢äŽº-䎾𦖈-𦖖𦖘-𦖡𫆇𫆈𬚞-𬚠𮋳-𮋵è¤-è«é¿£äŽ¿ä€ð¥§¢ð¦–¢-𦖻𦗇𫆉𬚡𬚢𮋶-𮋸è¬è­ä-äƒð¦–¼-𦗆𦗈-ð¦—𫆊-ð«†ð¬š£-𬚥𮋹è¯-è³ä„-ä‡ð¦—-𦗞𫆎ð«†ð®‹ºè®è´-è·é¿¤äˆð¦—Ÿ-𦗲ð«†ð«†‘𬚦𬚧𮋻𰭻è¸ð¦—³-𦗽𫆒è¹-è¼ä‰ð¦—¾-𦘄𬚨𮋼𮋽𦘅-𦘉𮋾𮋿è½è¾äŠð¦˜Š-ð¦˜ð®Œ€ð¦˜ð¦˜‘𫆓𬚩]
+[radical 129=â¾€è¿:è¿è‚€ð¦˜’ð®Œð°­¼ð¦˜“𬚪𮌂𦘔𮌃è‚-肃𦘕-𦘗𰭽𦘘-𦘚肄-肆ä‹ð¦˜›ð¦˜œð«†”𬚫𮌄肇肈ð¦˜-𦘟𫆕𦘠-𦘢𬚬𮌅𮌆𦘣𬚭𬚮𦘤-𦘨]
+[radical 130=â¾è‚‰:肉𮌇肊𰭾肋-è‚äŒä𦘩-𦘳𰭿-ð°®‚è‚-è‚ äŽä𦘴-𦘾𬚯𮌈-𮌊𰮃-𰮆股-èƒä-ä𦘿-𦙖𦙘-𦙩𫆖-𫆘𬚰-𬚳𮌋𰮇-𰮑朑胂-胬脉äž-ä¥ð¡‹œð£¨ð¦™ª-𦚜𫆙-𫆜𬚴-𬚶𮌌-ð®Œð°®’-𰮜胭-脈脊-è„”ä¦-ä®ð£¯ð£°ð¦š-𦛓ð«†ð«†žð¬š·-𬚺ð®Œ-𮌓ð°®-𰮤脕-脸ä¯-ä»ð¦›”-𦜅𫆟-𫆡𬚻-ð¬›ð®Œ”-𮌙𰮥-𰮪脹-腚㬹ä¼-äŒð¦œ†-𦜲𦜴-ð¦™ð«†¢-𫆥𬛂-𬛇𮌚-𮌠𰮫-ð°®´å¹æœ¡è…›-è…¾ä-ä›ð¦š-𦞘𦟓𦟔𫆦-𫆨𬛈-𬛋𮌡-𮌥𰮵-𰯀腿-膑äœ-äªð¦ž™-𦟒𦟕-𦟗𫆩-𫆮𫟊𬛌-𬛎𮌦-𮌰ð°¯-𰯋膒-膣ä«-ä´ð¦Ÿ˜-𦠂𫆯-𫆴ð¬›-𬛓𮌱-𮌹𰯌-𰯓朥膥-膶äµ-ä½ð¦ ƒ-𦠽𦡄𦡮𫆵-𫆸𬛔-𬛘𮌺-𮌿𰯔-ð°¯è†·-臌ä¾-ä‘𦠾-𦡃𦡅-ð¦¡ð¦¡-𦡕𦡘-𦡭𦡯𫆹-𫆻𬛙-𬛛ð®€ð®ð°¯ž-ð°¯ è‡-臓䑂-䑅𤑃𦡎𦡰-𦢉𫆼𫆽𬛜ð¬›ð®‚-ð®†ð°¯¡-𰯣臔臕臗臘䑆-䑈𦢊-𦢤𫆾𫆿ð®‡-ð®‰ð°¯¤-𰯧臖臙-臜䑉䑊𦢥-𦢷𫇀𬛞ð®Šð°¯¨-𰯪è‡ã”®ä‘‹-䑎𦢸-𦢾ð«‡ð¬›Ÿè‡žè‡Ÿä‘𦢿-𦣅𫇂𰯫臠-臢ð¤“𦣆-ð¦£ð¬› ð¦£‘-𦣕𬛡ð®‹ð¦£–𦣗𰯬𦣘-𦣜𰯭𫇄]
+[radical 131=⾂臣:臣𦣞ð®Œð¦£è‡¤è‡¥ð®ð¦£Ÿð°¯®ð¦£ -𦣣𫇅𬛢𬛣𰯯ä‘𦣤𦣥𬛤ð®Žð®ð°¯°è‡¦ð¦£¦-𦣩𫇆𬛥𰯱𫇇𬛦臧𦣫𦣬𦣮𫇈ð®-ð®’𰯲𰯳𦣭𦣯𬛧𬛨𦣪ð®“臨臩𦣰𦣱𬛩䑑𦣲𦣳𫇉𦣴𦣵𬛪𦣶𬛫𦣷𦣸]
+[radical 132=⾃自:自𦣹臫𦣺-𦤀𰯴臬臭ð¦¤-𦤋ð®”ð®•ð¦¤Œ-ð¦¤ð¬›¬ð®–-ð®˜ð°¯µè‡®-臰ð¦¤-𦤓𫇊ð®™ð°¯¶ð¦¤”ð®šð®›ð¦¤•-𦤗𬛭ð®œè‡±ð¦¤˜-ð¦¤ð«‡‹è‡²ð¦¤ž-𦤤𬛮𦤥𫇌𦤦-𦤪𬛯𰯷𦤫-𦤮𬛰ð®ð®žð¦¤¯-𦤱ð®Ÿð¦¤²ð«‡]
[radical 133=⾄至:至𦤳-𦤵𬛱致䑒𦤶-𦤺𬛲ð® ð®¡ð¦¤»-𦤾臵-臸𦤿𦥀𬛳ð®¢è‡¹ä‘“ð¦¥ð«‡Žè‡ºð¦¥‚-𦥄ð«‡ð«‡ð®£ð¦¥…-𦥇臻𦥉-ð¦¥ð¬›´ð¬›µð¦¥Ž-ð¦¥ð«‡‘𬛶ð®¤ð¬›·]
-[radical 134=⾅臼:臼𦥑-𦥔臽臾𦥕𦥖𦥙ð®¥è‡¿ð¦¥—𦥘𦥚-𦥜𦥧𬛸𬛹舀èˆä‘”ð¦¥-𦥤ð®¦ð®§èˆ‚䑕𦥥𦥦𦥨-𦥬舃舄𦥭-𦥲𫟋ð®¨-ð®¬èˆ…𦥳-𦥺𬛺ð®­ð®®èˆ‡ä‘–𦥻-𦦄ð®¯èˆˆä‘—𦦅-𦦎𬛻ð®°ð®±èˆ†èˆ‰ä‘˜ð¦¦-𦦓𦦕-𦦗𬛼𦦘-𦦠𬛽舊𦦡-𦦧𫇒𬛾舋𠤫𦦩-𦦬𦦯𬛿𬜀𦦭𦦮𦦰-𦦻ð¬œð¤“Ÿð¦¦¼ð¬œ‚𦦽-𦦿ð®²ð¦§€ð«‡“𬜃ð¦§ð¦§‚ð®³ð¬œ„𦧃-𦧅𠔻]
-[radical 135=⾆舌:舌𦧆èˆ-èˆð«‡”𦧇ð®´ð®µèˆä‘™ä‘šð¦§ˆ-ð¦§èˆ‘䑛𦧑-𦧔𬜅𬜆ð®¶ð®·èˆ’𦧕-𦧞𫇕𫇖𬜇ð®¸èˆ“-舕𦧟-𦧦𬜈ð®¹èˆ–舗䑜𦧧-𦧬𬜉-𬜌ð®º-ð®¾èˆ˜ð¦§­-𦧰𫇗ð®¿ð¦§±-𦧳ð¬œèˆ™ð¦§´-𦧶𬜎舚𦧷𫇘ð¬œð¬œð¦§¸-𦧺𫇙𦧻𦧼𮎀𦧽]
-[radical 136=⾇舛:舛ð®Žèˆœ-舞ä‘𦧾𦧿䑞𦨀ð¦¨ä‘Ÿð¦¨ƒð¦¨‚𦨄𦨅𮎂𦨆]
-[radical 137=⾈舟:舟𠂨𦨇舠䑠𦨈-ð¦¨ð¬œ‘舡-舤䑡-䑣𦨎-𦨔𫇚𬜒舥-舱䑤䑥𦨕-𦨠𮎃𮎄舲-舻䑦-䑩𦨡-𦨮𮎅-𮎊舼-舿䑪-䑮𦨯-𦨲𦨴-𦨼𬜓𮎋𮎌艀-艉䑯䑰𦨳𦨽-𦩉𬜔ð®Ž-𮎑艊-è‰ä‘±-䑸𦩊-𦩜𨦞𫇛𬜕𬜖𮎒𮎓艎-艔䑹-ä‘»ð¦©-𦩳𦩿𫇜ð«‡ð¬œ—艕-艙䑼-䑾𦩴-𦩾𦪀-𦪅𬜘-𬜚艚-è‰ä‘¿-䒅𦪆-ð¦ªð«‡žð¬œ›ð®Ž”艞-艠䒆-䒈𦪑-𦪧𫇟艡-艥𦪨-𦪰艦-艩䒉𦪱-𦪵𫇠艪𦪶-𦪸𦪺-𦪼𬜜𮎕艫𦪽-𦫂𫇡-𫇣𮎖𮎗艬𦫃𦫄艭𦫅-𦫇𦫉𦫈𦫊]
-[radical 138=⾉艮:艮-艰𦫋-ð¦«ð®Ž˜ð®Ž™ð¦«è‰±ð¦«‘𮎚𦫒鿥]
-[radical 139=⾊色:色𮎛𮎜䒊𦫓艳艴䒋𦫔-𦫚ð¬œð¦«›-ð¦«è‰µð¦«ž-𦫣𬜞𦫤-𦫩ð®Žä’Œä’𦫪-𦫮𫇤䒎ä’艶𦫯-𦫱𮎞ä’艷𦫲𬜟]
-[radical 140=⾋艸:艸艹䒑艺龷𦫳-𦫵艻-节䒒-䒔𦫶-𦬀𫇥𫇦𬜠芃-芗䒕-ä’™ð¦¬-𦬒𫇧𫇨𬜡𬜢芘-芾苀-è‹èŒ¾ä’š-䒥𦬓-𦬶𫇩-𫇭𬜣-𬜥𮎟-𮎣芿è‹-茑茓-茕䒦-䒯𦬷-𦭬𫇮-𫇵𫟌ð«Ÿð¬œ¦ð¬œ§ð®Ž¤-𮎦茒茖-茜茞-茢茤-茽茿-è’è”-è¯é¿’ä’°-ä“𦭭-𦮵𫇶-𫇾𫟎𬜨-𬜮𮎧-𮎸èŒèŒ£è°-莬莮-莽鿊䓂-䓔䓖𦮶-𦯰𦯲-𦰕𦰗-𦰩𫇿-ð«ˆð«Ÿ-𫟑𬜯-𬜺𮎹-ð®è“莾-è¨è‘—龿䓕䓗-䓭𦯱𦰖𦰪-𦳀ð«ˆ-𫈠𬜻-ð¬‹ð®-ð®¢èŽ­è©-è«è­-葖葘-è’é¿“ä“®-ä“»ð¦³-𦴵𦴷-𦵆𦵈-𦵠𫈡-𫈵𫟒𫟓ð¬Œ-ð¬™ð®£-ð®‚è’-è’·è’¹-蓤蓦䓼-ä”𤎀𦵇𦵡-𦷾𫈶-𫉇𫟔ð¬š-ð¬´ð®ƒ-ð® è“¥è“§-蔼䔎-䔬𦷿-𦸼𦸾-𦺄𫉈-𫉜𫟕ð¬µ-ð¬žð®¡-ð®¸è”½-蕵䔭-䕄𦸽𦺆-𦻆𦻈-𦻽𦻿-𦼨𦽭ð«‰-𫉤𫟖𬞎-𬞙ð®¹-𮑙蕶-薨薪-薬薮龩﨟䕅-䕑𦻾𦼩-𦽬𦽮-𦾩𦿡𦿸𫉥-𫉴𬞚-𬞬𮑚-𮑻薩薭薯-藓蘤䕒-ä•ð¦¾ª-𦿓𦿖-𦿜𦿞-𦿠𦿢-𦿷𦿹-𧀟𫉵-𫊄𬞭-𬞾𮑼-ð®’–è—”-è—­è—¯-藵䕞-䕥𦿔𦿕ð¦¿ð§€ -ð§ºð§ƒŒð«Š…-𫊋𬞿-ð¬Ÿð®’—-𮒨藮藶-蘑蘓蘔蘢䕦-䕲ð§»-𧃋𧃎𫊌-ð«Šð¬ŸŽ-𬟕𮒩-𮒷蘒蘕-蘡蘣蘥-蘰䕳-ä•·ð§ƒð§ƒ-𧄌ð«Š-𫊓𬟖-𬟛𮒸-𮓃蘲-蘷鿀鿦䕸-䕺ð§„-𧄵𫊔-𫊖𬟜-𬟟𮓄-ð®“蘱蘸-è™ä•»-䕽𧄶-𧅕𫊗𬟠-𬟤𮓎-𮓒虂-虅䕾𧅖-𧅭𫊘-𫊚𬟥𮓓虆-虉䕿䖀𧅮-𧅴𧅶-𧅹𬟦𮓔𮓕ä–𧅺-𧆅𫊛𫊜𮓖虊䖂-䖄𧆇-𧆎䖅䖆𧅵ð§†-𧆒虋虌𧆔𧆕𦺅𧆖𧆚𧆗䖇𧆙𧆓𧆘]
-[radical 141=⾌è™:è™ð®“—虎è™ä–ˆð§†›ð®“˜-𮓚彪è™ä–‰ð§†œ-𧆞ð«Šð«Šžð¬Ÿ§ð®“›ð®“œè™‘虓虔䖊-ä–𧆟-𧆢𫊟𬟨𬟩ð®“-𮓠處-虚䖎ä–𧆣-𧆰𮓡虛-è™ä–䖑𧆱-𧆹𫊠𫊡𬟪𮓢-𮓤虞號䖒-䖖𧆺-𧇀𬟫-𬟭𮓥𮓦虠虡ð§‡-𧇎𫊢虢虣䖗ð§‡-𧇛𮓧𮓨虤-虦䖘𧇜-𧇰𬟮-𬟰𮓩𮓪虧虨䖙𧇱-𧇺𫊣𮓫𮓬虩䖚䖛𧇻-ð§ˆð§ˆƒð§ˆ„𬟱𮓭䖜𧈂𧈅-𧈊𬟲𮓮𧈋-ð§ˆð®“¯ð§ˆ‘-𧈛𬟳虪𧈜]
-[radical 142=â¾è™«:虫𮓰虬ä–ð§ˆð§ˆžð®“±è™­-虲𧈟-𧈧𫊤𮓲虳-蚃䖞-䖠𡯥𧈨-𧈺𫊥𫊦𬟴𬟵𮓳-𮓷蚄-蚇蚉-蚪蚬䖡-䖣𧈻-ð§‰ð«Š§-𫊫𬟶-𬟻𮓸-𮓼蚫蚭-è›ï¨¡ä–¤-䖬𧉞-𧊎𫊬-𫊲𬟼-ð¬ ð®“½-𮔀蚈è›-蛕蛗-è›´ä–­-ä–µð§Š-𧊪𧊬𧊭𧊯-𧋇𫊳-𫊼𬠂-𬠇ð®”-𮔈蛖蛵-蜗蜫è†ä–¶-䖾𧊫𧊮𧋈-ð§‹ð§‹Ÿ-𧌂𧌞𫊽-ð«‹ð¬ ˆ-ð¬ ð®”‰-𮔖蜘-蜪蜬-è…è‡-è‹ä–¿-䗊䗕𧋞𧌃-ð§Œð§ŒŸ-𧌯𧌱-ð§‘ð«‹‚-𫋉𬠎-𬠚𮔗-ð®”èŒ-è¸èº-螀蟡䗋-䗔䗖𧌰ð§’-𧎠ð§‡ð«‹Š-𫋎𬠛-𬠞𮔞-𮔧è¹èž-螩蟗䗗-䗞𧎡-ð§†ð§ˆ-ð§·ð«‹-𫋕𬠟-𬠤𮔨-𮔲螪-蟒è ä—Ÿ-䗮𢋜ð§¸-ð§¯ð§±-𧑃𫋖-𫋙𬠥-𬠨𮔳-𮔺蟓-蟖蟘-蟠蟢-蟵蠎䗯-䗳𧑄-ð§’ð«‹š-𫋞𬠩-𬠮𮔻-ð®•èŸ¶-蠀蠂-è è ä—´-䗻𧒎-𧓈𫋟-𫋢𬠯-𬠱𮕂-𮕇è -蠙䗼-ä˜ð§“‰-𧓰𫋣-𫋥𫟗𬠲-𬠷𮕈-𮕋蠚-蠤蠴䘂-䘄𧓱-𧔜𫋦𫋧𬠸𮕌-𮕑蠥-蠬䘅-䘉ð§”-𧕂𫋨𬠹𮕒蠭-蠳䘊-䘌𧕃-𧕒𧕔-𧕚𬠺𮕓-𮕖蠵-蠺𧕓𧕛-𧕮𮕗蠻ä˜ð§•¯-𧕼𬠻𮕘𮕙蠼𧕽-𧖃𧖊𮕚蠽蠾𧖄-𧖉𧖋-ð§–蠿䘎𧖑-𧖗𮕛𠑴𧖘-𧖛𫋩𧖜-𧖟𧖡-𧖦]
-[radical 143=⾎血:血𮕜𧖧-𧖩ð®•è¡è¡‚ä˜ð§–ªè¡ƒè¡„ä˜ð§–«-𧖯𫋪衅䘑𧖰-𧖲𫋫𮕞𮕟衆-衉𧖳𧖴𬠼𮕠䘒𧖵-𧖹䘓𧖺-𧖿𧗄䘔𧗀-𧗃𧗅-ð§—𫋬𧗎-𧗗衊𧗘𮕡𧗙-𧗛衋𧗜]
-[radical 144=â¾è¡Œ:行𬠽ð§—-𧗠è¡è¡Žð§—¡-𧗥𮕢è¡ä˜•ð§—¦-𧗩𬠾𬠿è¡-衔𧗪𫋭衕-衘䘖𢔬𧗫-𧗱𫋮衙𧗲-𧗷𮕣𧗸𧗺𧗻衚-è¡ð§—¹ð§—¼ð§—½ð«‹¯ð«Ÿ˜ð¬¡€è¡ž-衡䘗䘘𢖅𧗾𢖋𧗿-ð§˜ð«Ÿ™ð§˜‚𧘃𫋰𧘄䘙𢖡𧘅ð¬¡ð§˜†ð«‹±è¡¢]
-[radical 145=â¾è¡£:衣衤𧘇𮕤补䘚䘛𧘈-𧘌𬡂𮕥-𮕧衦-衬䘜-䘞ð§˜-𧘜𬡃-𬡇𮕨衭-袇䘟-䘡ð§˜-𧘼𫋲-𫋴𬡈-𬡊𮕩-𮕯袈-袮袰䘢-䘧𧘽𧘿-ð§™ð«‹µ-𫋷𬡋-ð¬¡ð®•°-𮕸袯袱-裉䘨-䘮𧘾𧙞-𧙿𫋸-𫋼𬡑-𬡘𮕹-𮖀裊-裥䘯-䘲𧚀-𧚣𫋽𫟚𬡙-ð¬¡ð®–-𮖎裧-褄䘳-䙂𧚤-𧚺𧚼-𧛎𫋾-𫌄𬡞-𬡤ð®–-𮖓裦褅-è¤ä™ƒ-ä™ð§š»ð§›-𧛷𫌅𫌆𬡥𬡦𮖔-𮖠褞-褲褴䙎-䙓𧛸-𧜜𧜨𫌇-𫌉𬡧-𬡩𮖡-𮖩褳褵-襅襔䙔-ä™ð§œ-𧜧𧜩-𧜬𧜮-ð§ð«ŒŠ-ð«Œð¬¡ª-𬡭𮖪-𮖮襆-襓襕鿋䙞-䙣𧜭ð§‚-ð§°ð«Œ-𫌒𬡮𬡯𮖯-𮖶襖-襢䙤䙥ð§±-𧞌𫌓𫌔𬡰𬡱𮖷-𮖺襣-襨䙦-䙩ð§ž-𧞖𧞘-𧞦𫌕𬡲-𬡴𮖻𮖼襩-襮䙪𧞗𧞧-𧞱𧞳-𧞵𫌖𬡵𬡶𮖽𮖾襯-襲䙫𧞲𧞶-𧟂𬡷襳襴襽䙬䙭𧟃-𧟇𫌗襵-襷䙮䙯𧟈-𧟋𫌘𫌙襸-襼䙰𧟌-𧟔䙱𧟕-𧟟]
-[radical 146=⾑襾:襾-覀𧟠-𧟣è¦ä™²ð§Ÿ¤-𧟦䙳𧟧-𧟩𬡸覂䙴𧟪-𧟬𫌚𮖿𮗀覃覄䙵䙶𧟭𧟮𫟛ð®—-𮗃覅𧟯𧟰𬡹𧟱-𧟸𬡺𮗄𧟹-𧟻𮗅𮗆𧟼-𧟾𫌛𧟿覆𧠀ð§ ð¬¡»è¦‡è¦ˆð§ ‚𮗇𧠃𮗈𧠄𮗉𮗊覉𮗋覊𧠅𮗌]
-[radical 147=⾒見:見𧠆𧠇覌覙𧠈è¦è¦Žä™·ä™¸ð§ ‰-ð§ ð«Œœè¦-覔䙹-䙻𧠎-𧠛𬡼ð®—覕覗覘覚䙼-䙿𧠜-𧠧ð«Œð¬¡½ð®—Žè¦›è¦œäš€äšð§ ¨-𧠺𫌞ð®—-ð®—‘è¦-覡䚂䚃𧠻-𧡊𫌟𫌠𮗒-𮗔覢-覥䚄䚅𧡋-𧡠𫌡𬡾-𬢀𮗕-𮗗覦-親䚆-䚉𧡡-𧡶𫌢𫌣𮗘覫-覯䚊-䚌𧡷-ð§¢ð¬¢ð®—™è¦°-観äšäšŽð§¢‚-𧢋𫌤𬢂覴-覸äš-䚓𧢌-𧢑𬢃𬢄𮗚-ð®—覹-覻𧢒-𧢗𫌥𮗞覼覽䚔𧢘-𧢛𬢅覾覿ð¥„𧢜-𧢡𫟜𬢆𧢢-𧢥觀𧢦-𧢫𫌦𫌧䚕𧢬-𧢮䚖𧢯-𧢱]
-[radical 147'=â»…è§:è§è§‚𬢇觃-觅觇-觉𫌨𫌩𬢈-𬢊觊𫌪𬢋ð¬¢è§‹ð¬¢Œè§Œè§ð¬¢Žè§Žð«Œ«ð¬¢-𬢑è§ð¬¢’è§è§‘𫌬𬢓𬢔𫌭]
-[radical 148=⾓角:角𧢲𧢳𮗟𮗠觓觔𧢴-𧢺𮗡𮗢觕-觙䚗𧢻-ð§£ð®—£-𮗨觚觛è§è§žð§£‘-𧣠𬢕𮗩𮗪觜觟-觧䚘-䚚𧣡-𧣧𫌮𫌯𬢖𮗫-𮗯觨-觫䚛𧣨-𧣳𬢗𮗰-𮗲觬-觯䚜-䚠𧣴-𧤊𬢘𮗳觰觱䚡-䚤𧤋-𧤚𧤢𫌰𫌱觲觳䚥䚦𧤛-𧤡𧤣-𧤮𮗴𮗵觴鵤䚧𧤯-𧤹觵觶䚨䚩䚬𧤺-𧥃𮗶觷-觹䚪䚫𧥄-𧥇𬢙觺𧥈-𧥋觻觼𧥌-ð§¥è§½è§¾ð§¥‘-𧥔觿䚭𧥕-𧥚]
-[radical 149=⾔言:言è¨ð§¥›-𧥟訂-計䚮-䚰𧥠𬢚𬢛𮗷𮗸訉-訚䚱䚲𧥡-𧥭𫌲𫌳𬢜-𬢞𮗹𮗺訛-訳䚳-䛃𧥮-𧦛𫌴𫌵𬢟𬢠𮗻-𮗾訴-詠䛄-䛓𧦜-𧧂𫌶-𫌹𬢡𬢢𮗿-𮘇詡-誊誠é¿ä›”-䛜𧧃-𧧳𧨜𫌺𫌻𬢣-𬢩𮘈-𮘎誋-誟誡-誮ä›-䛨𧧴-𧨛ð§¨-𧨥𫌼-𫌾𬢪-𬢭ð®˜-𮘖誯-諚諩䛩-䛸𧨦-𧩢𫌿ð«€ð¬¢®-𬢳𮘗-𮘠諛-諨諪-謃䛹-䛽𧩣-𧪗ð«-ð«…𬢴-𬢹𮘡-𮘪謄-謢䛾-䜂ð œð§ª˜-𧫑ð«†-ð«ˆð¬¢º-𬣄𮘫-𮘯謣-謾䜃-䜊𧫒-𧫽ð«‰-ð«Œð¬£…𮘰-𮘸謿-譌譎-譜龻䜋-䜑𧫾-𧬦ð«-ð«ð¬£†-𬣉𮘹-𮘽è­è­-譲䜒-䜘𧬧-ð§­ð«ð«‘𬣊𬣋𮘾-ð®™‚è­³-譽䜙-䜞𧭂-ð§­ð§­’-𧭛ð«’𬣌-𬣑𮙃𮙄譾-讅䜟-䜡𧭑𧭜-𧭷ð«Ÿð¬£’-𬣔𮙅𮙆讆-è®äœ¢ð§­¸-𧮄ð«“𬣕𮙇讑-讖𣌚𧮅-ð§®ð«”-ð«–𬣖讗-讙𧮑-𧮘𮙈讚讛𧮙-ð§®ð«—讜-讞𧮞-𧮤𧮦𧮧ð«˜è®Ÿð§®¨ð¬£—𬣘𧮩]
-[radical 149'=⻈讠:è® -è®±ð«™ð¬£™ð¬£šè®²-诀䜣ð«šð«›ð«Ÿžð¬£›-𬣟è¯-诒𧮪ð«œ-ð«¡ð«ŸŸð¬£ -𬣧诓-诩䜤ð«¢-ð«¦ð¬£¨-𬣳诪-诶ð«§-ð«ªð¬£´-𬣼𮙉请-谊䜥ð««-ð«®ð«Ÿ ð«Ÿ¡ð¬£½-𬤆谋-è°žð«¯-ð«´ð¬¤‡-ð¬¤è°Ÿ-谧䜦䜧ð«µ-ð«¸ð«Ÿ¢ð¬¤-𬤗谨-谬䜨ð«¹ð«ºð¬¤˜-𬤜谭-è°²ð«»ð«¼ð¬¤-𬤥𮙊谳-è°µð«½ð¬¤¦-𬤨ð«¾ð¬¤©-𬤬ð«¿ð¬¤­ð®™‹äœ©ð¬¤®è°¶ð¬¤¯-𬤱]
-[radical 150=⾕谷:谷𧮫䜪𫎀谸䜫𧮬-𧮮谹-谻𧮯-𧮲ð«Žð®™Œäœ¬äœ­ð§®³ð§®´ð¬¤²è°¼ð§®µ-𧮷ð®™è°½äœ®ð§®¸ð§®¹ð®™Žè°¾äœ¯ð§®º-𧮿𫎂𬤳ð®™ð§¯€-𧯅𬤴ð®™è°¿-è±äœ°ð§¯†-𧯉𬤵豂䜱𧯊豃𡓛𧯋-𧯒𮙑𧯓-𧯖豄䜲豅𧯗-𧯙]
-[radical 151=⾖豆:豆䜳𧯚豇豈𧯛-ð§¯è±‰äœ´ð§¯žð§¯Ÿð¬¤¶äœµð§¯ -𧯤𮙒豊豋䜶𧯥𧯦𧯨𬤷䜷-䜹𧯩-𧯬𮙓𮙔豌-豎䜺𧯭-𧯶𫎃䜻-䜿𧯷-𧯻𮙕è±ä€-ä‚𧯼-𧰂𧰈è±ð¡•†ð§°ƒ-𧰇𫎄𮙖𧰉-ð§°ð¬¤¸ð®™—豑𧰑-𧰖𬤹äƒð§°—𧰘𮙘𧰙-𧰜𮙙ð§°-𧰟𬤺𧰠豒ä„𧰡𧰢豓𧰣𧰤豔𧰥]
-[radical 152=⾗豕:豕𧰧𧰨豖𧰦𫎅𧰩𬤻𮙚豗ä…𧰪-𧰭豘-è±ä†ä‡ð§°®-𧰴𫎆𬤼𬤽𮙛豞-象äˆð§°µ-𧰾𮙜-𮙞豢-豦ä‰ð§°¿-𧱌𮙟𮙠豧-豪ð§±-𧱗𫎇𫎈𬤾-𬥀äŠ-äŒð§±˜-𧱧ð¬¥-𬥃豫-è±®ääŽð§±¨-𧱱𫎉𮙡-𮙣豯-豳𧱲-𧱺𬥄𬥅豴豵ä𧱻-ð§²ð®™¤è±·ää‘𧲂-𧲆豶𧲇-𧲋𬥆ä’𧲌-ð§²ð¬¥‡ä“ð§²-𧲓𧲗𧲔-𧲖𧲘𧲙ä”ä•ð§²š-𧲟]
+[radical 134=⾅臼:臼𦥑-𦥔臽臾𦥕𦥖𦥙ð®¥è‡¿ð¦¥—𦥘𦥚-𦥜𦥧𬛸𬛹舀èˆä‘”ð¦¥-𦥤ð®¦ð®§èˆ‚䑕𦥥𦥦𦥨-𦥬舃舄𦥭-𦥲𫟋ð®¨-ð®¬èˆ…𦥳-𦥺𬛺ð®­ð®®èˆ‡ä‘–𦥻-𦦄ð®¯ð°¯¸ð°¯¹èˆˆä‘—𦦅-𦦎𬛻ð®°ð®±ð°¯ºèˆ†èˆ‰ä‘˜ð¦¦-𦦓𦦕-𦦗𬛼𦦘-𦦠𬛽舊𦦡-𦦧𫇒𬛾𰯻舋𠤫𦦩-𦦬𦦯𬛿𬜀𦦭𦦮𦦰-𦦹𰯼𦦺𦦻ð¬œð¤“Ÿð¦¦¼ð¬œ‚𦦽-𦦿ð®²ð¦§€ð«‡“𬜃ð¦§ð¦§‚ð®³ð¬œ„𦧃-𦧅𠔻]
+[radical 135=⾆舌:舌𦧆èˆ-èˆð«‡”𦧇ð®´ð®µèˆä‘™ä‘šð¦§ˆ-ð¦§èˆ‘䑛𦧑-𦧔𬜅𬜆ð®¶ð®·ð°¯½-𰯿舒𦧕-𦧜𰰀ð¦§ð¦§žð«‡•ð«‡–𬜇ð®¸ð°°-𰰅舓-舕𦧟-𦧦𬜈ð®¹ð°°†èˆ–舗䑜𦧧-𦧬𬜉-𬜌ð®º-ð®¾ð°°‡èˆ˜ð¦§­-𦧰𫇗ð®¿ð¦§±-𦧳ð¬œð°°ˆèˆ™ð¦§´-𦧶𬜎𰰉舚𦧷𫇘ð¬œð¬œð¦§¸-𦧺𫇙𦧻𦧼𮎀𦧽]
+[radical 136=⾇舛:舛ð®Žð°°Šèˆœ-舞ä‘𦧾𦧿䑞𦨀ð¦¨ä‘Ÿð¦¨ƒð¦¨‚𦨄𦨅𮎂𦨆]
+[radical 137=⾈舟:舟𠂨𦨇舠䑠𦨈-ð¦¨ð¬œ‘舡-舤䑡-䑣𦨎-𦨔𫇚𬜒舥-舱䑤䑥𦨕-𦨠𮎃𮎄𰰋舲-舻䑦-䑩𦨡-𦨮𮎅-𮎊𰰌舼-舿䑪-䑮𦨯-𦨲𦨴-𦨼𬜓𮎋𮎌艀-艉䑯䑰𦨳𦨽-𦩉𬜔ð®Ž-𮎑ð°°è‰Š-è‰ä‘±-䑸𦩊-𦩜𨦞𫇛𬜕𬜖𮎒𮎓𰰎艎-艔䑹-ä‘»ð¦©-𦩳𦩿𫇜ð«‡ð¬œ—ð°°-𰰑艕-艙䑼-䑾𦩴-𦩾𦪀-𦪅𬜘-𬜚𰰒艚-è‰ä‘¿-䒅𦪆-ð¦ªð«‡žð¬œ›ð®Ž”艞-艠䒆-䒈𦪑-𦪧𫇟𰰓艡-艥𦪨-𦪰艦-艩䒉𦪱-𦪵𫇠艪𦪶-𦪸𦪺-𦪼𬜜𮎕艫𦪽-𦫂𫇡-𫇣𮎖𮎗艬𦫃𦫄艭𦫅-𦫇𦫉𦫈𦫊]
+[radical 138=⾉艮:艮-艰𦫋𰰔𦫌-ð¦«ð®Ž˜ð®Ž™ð¦«è‰±ð¦«‘𮎚𦫒鿥]
+[radical 139=⾊色:色𮎛𮎜𰰕䒊𦫓艳艴䒋𦫔-𦫙𰰖𰰗𦫚ð¬œð¦«›-ð¦«ð°°˜è‰µð¦«ž-𦫣𬜞𰰙𦫤-𦫩ð®Žä’Œä’𦫪-𦫮𫇤𰰚䒎ä’𰰛艶𦫯-𦫱𮎞ä’艷𦫲𬜟]
+[radical 140=⾋艸:艸艹䒑艺龷𦫳-𦫵艻-节䒒-䒔𦫶-𦬀𫇥𫇦𬜠𰰜-𰰟芃-芗䒕-ä’™ð¦¬-𦬒𫇧𫇨𬜡𬜢𰰠-𰰢芘-芾苀-è‹èŒ¾ä’š-䒥𦬓-𦬶𫇩-𫇭𬜣-𬜥𮎟-𮎣𰰣-𰰪芿è‹-茑茓-茕䒦-䒯𦬷-𦭬𫇮-𫇵𫟌ð«Ÿð¬œ¦ð¬œ§ð®Ž¤-𮎦𰰫-𰰱茒茖-茜茞-茢茤-茽茿-è’è”-è¯é¿’ä’°-ä“𦭭-𦮵𫇶-𫇾𫟎𬜨-𬜮𮎧-𮎸𰰲-ð°°½èŒèŒ£è°-莬莮-莽鿊䓂-䓔䓖𦮶-𦯰𦯲-𦰕𦰗-𦰩𫇿-ð«ˆð«Ÿ-𫟑𬜯-𬜺𮎹-ð®ð°°¾-𰱎è“莾-è¨è‘—龿䓕䓗-䓭𦯱𦰖𦰪-𦳀ð«ˆ-𫈠𬜻-ð¬‹ð®-ð®¢ð°±-𰱜莭è©-è«è­-葖葘-è’é¿“ä“®-ä“»ð¦³-𦴵𦴷-𦵆𦵈-𦵠𫈡-𫈵𫟒𫟓ð¬Œ-ð¬™ð®£-ð®‚ð°±-𰱪è’-è’·è’¹-蓤蓦䓼-ä”𤎀𦵇𦵡-𦷾𫈶-𫉇𫟔ð¬š-ð¬´ð®ƒ-ð® ð°±«-𰱱蓥蓧-蔼䔎-䔬𦷿-𦸼𦸾-𦺄𫉈-𫉜𫟕ð¬µ-ð¬žð®¡-ð®¸ð°±²-𰱵蔽-蕵䔭-䕄𦸽𦺆-𦻆𦻈-𦻽𦻿-𦼨𦽭ð«‰-𫉤𫟖𬞎-𬞙ð®¹-𮑙𰱶-𰱼蕶-薨薪-薬薮龩﨟䕅-䕑𦻾𦼩-𦽬𦽮-𦾩𦿡𦿸𫉥-𫉴𬞚-𬞬𮑚-𮑻𰱽-𰲇薩薭薯-藓蘤䕒-ä•ð¦¾ª-𦿓𦿖-𦿜𦿞-𦿠𦿢-𦿷𦿹-𧀟𫉵-𫊄𬞭-𬞾𮑼-𮒖𰲈𰲉藔-è—­è—¯-藵䕞-䕥𦿔𦿕ð¦¿ð§€ -ð§ºð§ƒŒð«Š…-𫊋𬞿-ð¬Ÿð®’—-𮒨𰲊-ð°²è—®è—¶-蘑蘓蘔蘢䕦-䕲ð§»-𧃋𧃎𫊌-ð«Šð¬ŸŽ-𬟕𮒩-𮒷𰲑-𰲓蘒蘕-蘡蘣蘥-蘰䕳-ä•·ð§ƒð§ƒ-𧄌ð«Š-𫊓𬟖-𬟛𮒸-𮓃𰲔𰲕蘲-蘷鿀鿦䕸-䕺ð§„-𧄵𫊔-𫊖𬟜-𬟟𮓄-ð®“𰲖蘱蘸-è™ä•»-䕽𧄶-𧅕𫊗𬟠-𬟤𮓎-𮓒虂-虅䕾𧅖-𧅭𫊘-𫊚𬟥𮓓虆-虉䕿䖀𧅮-𧅴𧅶-𧅹𬟦𮓔𮓕ä–𧅺-𧆅𫊛𫊜𮓖𰲗虊䖂-䖄𧆇-𧆎䖅䖆𧅵ð§†-𧆒虋虌𧆔𧆕𦺅𧆖𧆚𧆗䖇𧆙𧆓𧆘]
+[radical 141=⾌è™:è™ð®“—虎è™ä–ˆð§†›ð®“˜-𮓚彪è™ä–‰ð§†œ-𧆞ð«Šð«Šžð¬Ÿ§ð®“›ð®“œè™‘虓虔䖊-ä–𧆟-𧆢𫊟𬟨𬟩ð®“-𮓠𰲘-𰲚處-虚䖎ä–𧆣-𧆰𮓡𰲛-ð°²è™›-è™ä–䖑𧆱-𧆹𫊠𫊡𬟪𮓢-𮓤𰲞𰲟虞號䖒-䖖𧆺-𧇀𬟫-𬟭𮓥𮓦𰲠-𰲣虠虡ð§‡-𧇎𫊢𰲤-𰲦虢虣䖗ð§‡-𧇛𮓧𮓨𰲧虤-虦䖘𧇜-𧇰𬟮-𬟰𮓩𮓪虧虨䖙𧇱-𧇺𫊣𮓫𮓬虩䖚䖛𧇻-ð§ˆð§ˆƒð§ˆ„𬟱𮓭䖜𧈂𧈅-𧈊𬟲𮓮𧈋-ð§ˆð®“¯ð§ˆ‘-𧈗𰲨𧈘-𧈛𬟳虪𧈜]
+[radical 142=â¾è™«:虫𮓰虬ä–ð§ˆð§ˆžð®“±è™­-虲𧈟-𧈧𫊤𮓲𰲩虳-蚃䖞-䖠𡯥𧈨-𧈺𫊥𫊦𬟴𬟵𮓳-𮓷𰲪蚄-蚇蚉-蚪蚬䖡-䖣𧈻-ð§‰ð«Š§-𫊫𬟶-𬟻𮓸-𮓼𰲫-𰲲蚫蚭-è›ï¨¡ä–¤-䖬𧉞-𧊎𫊬-𫊲𬟼-ð¬ ð®“½-𮔀𰲳-𰲷蚈è›-蛕蛗-è›´ä–­-ä–µð§Š-𧊪𧊬𧊭𧊯-𧋇𫊳-𫊼𬠂-𬠇ð®”-𮔈𰲸𰲹蛖蛵-蜗蜫è†ä–¶-䖾𧊫𧊮𧋈-ð§‹ð§‹Ÿ-𧌂𧌞𫊽-ð«‹ð¬ ˆ-ð¬ ð®”‰-𮔖𰲺-𰲾蜘-蜪蜬-è…è‡-è‹ä–¿-䗊䗕𧋞𧌃-ð§Œð§ŒŸ-𧌯𧌱-ð§‘ð«‹‚-𫋉𬠎-𬠚𮔗-ð®”𰲿-𰳉èŒ-è¸èº-螀蟡䗋-䗔䗖𧌰ð§’-𧎠ð§‡ð«‹Š-𫋎𬠛-𬠞𮔞-𮔧𰳊-ð°³è¹èž-螩蟗䗗-䗞𧎡-ð§†ð§ˆ-ð§·ð«‹-𫋕𬠟-𬠤𮔨-𮔲𰳎-𰳕螪-蟒è ä—Ÿ-䗮𢋜ð§¸-ð§¯ð§±-𧑃𫋖-𫋙𬠥-𬠨𮔳-𮔺𰳖-𰳚蟓-蟖蟘-蟠蟢-蟵蠎䗯-䗳𧑄-ð§’ð«‹š-𫋞𬠩-𬠮𮔻-ð®•ð°³›ð°³œèŸ¶-蠀蠂-è è ä—´-䗻𧒎-𧓈𫋟-𫋢𬠯-𬠱𮕂-𮕇ð°³-ð°³ è -蠙䗼-ä˜ð§“‰-𧓰𫋣-𫋥𫟗𬠲-𬠷𮕈-𮕋𰳡-𰳣蠚-蠤蠴䘂-䘄𧓱-𧔜𫋦𫋧𬠸𮕌-𮕑𰳤蠥-蠬䘅-䘉ð§”-𧕂𫋨𬠹𮕒𰳥蠭-蠳䘊-䘌𧕃-𧕒𧕔-𧕚𬠺𮕓-𮕖蠵-蠺𧕓𧕛-𧕮𮕗𰳦蠻ä˜ð§•¯-𧕼𬠻𮕘𮕙蠼𧕽-𧖃𧖊𮕚蠽蠾𧖄-𧖉𧖋-ð§–蠿䘎𧖑-𧖗𮕛𠑴𧖘-𧖛𫋩𧖜-𧖟𧖡-𧖦]
+[radical 143=⾎血:血𮕜𧖧-𧖩ð®•è¡è¡‚ä˜ð§–ªè¡ƒè¡„ä˜ð§–«-𧖯𫋪衅䘑𧖰-𧖲𫋫𮕞𮕟𰳧衆-衉𧖳𧖴𬠼𮕠𰳨䘒𧖵-𧖹䘓𧖺-𧖿𧗄䘔𧗀-𧗃𧗅-ð§—𫋬𰳩𧗎-𧗗衊𧗘𮕡𧗙-𧗛衋𧗜]
+[radical 144=â¾è¡Œ:行𬠽ð§—-𧗠è¡è¡Žð§—¡-𧗥𮕢è¡ä˜•ð§—¦-𧗩𬠾𬠿è¡-衔𧗪𫋭衕-衘䘖𢔬𧗫-𧗱𫋮𰳪衙𧗲-𧗷𮕣𰳫-𰳭𧗸𧗺𧗻𰳮衚-è¡ð§—¹ð§—¼ð§—½ð«‹¯ð«Ÿ˜ð¬¡€è¡ž-衡䘗䘘𢖅𧗾𢖋𧗿-ð§˜ð«Ÿ™ð§˜‚𧘃𫋰𰳯𧘄䘙𢖡𧘅ð¬¡ð§˜†ð«‹±è¡¢]
+[radical 145=â¾è¡£:衣衤𧘇𮕤补䘚䘛𧘈-𧘌𬡂𮕥-𮕧𰳰衦-衬䘜-䘞ð§˜-𧘜𬡃-𬡇𮕨衭-袇䘟-䘡ð§˜-𧘼𫋲-𫋴𬡈-𬡊𮕩-𮕯𰳱袈-袮袰䘢-䘧𧘽𧘿-ð§™ð«‹µ-𫋷𬡋-ð¬¡ð®•°-𮕸𰳲-𰳸袯袱-裉䘨-䘮𧘾𧙞-𧙿𫋸-𫋼𬡑-𬡘𮕹-𮖀𰳹𰳺裊-裥䘯-䘲𧚀-𧚣𫋽𫟚𬡙-ð¬¡ð®–-ð®–Žð°³»-𰴀裧-褄䘳-䙂𧚤-𧚺𧚼-𧛎𫋾-𫌄𬡞-𬡤ð®–-ð®–“ð°´ð°´‚裦褅-è¤ä™ƒ-ä™ð§š»ð§›-𧛷𫌅𫌆𬡥𬡦𮖔-𮖠褞-褲褴䙎-䙓𧛸-𧜜𧜨𫌇-𫌉𬡧-𬡩𮖡-ð®–©ð°´ƒ-𰴅褳褵-襅襔䙔-ä™ð§œ-𧜧𧜩-𧜬𧜮-ð§ð«ŒŠ-ð«Œð¬¡ª-𬡭𮖪-𮖮𰴆-𰴈襆-襓襕鿋䙞-䙣𧜭ð§‚-ð§°ð«Œ-𫌒𬡮𬡯𮖯-𮖶襖-襢䙤䙥ð§±-𧞌𫌓𫌔𬡰𬡱𮖷-𮖺襣-襨䙦-䙩ð§ž-𧞖𧞘-𧞦𫌕𬡲-𬡴𮖻𮖼襩-襮䙪𧞗𧞧-𧞱𧞳-𧞵𫌖𬡵𬡶𮖽𮖾襯-襲䙫𧞲𧞶-𧟂𬡷𰴉襳襴襽䙬䙭𧟃-𧟇𫌗襵-襷䙮䙯𧟈-𧟋𫌘𫌙襸-襼䙰𧟌-ð§Ÿð°´Šð§Ÿ-𧟔䙱𧟕-𧟟]
+[radical 146=⾑襾:襾-覀𧟠-𧟣è¦ä™²ð§Ÿ¤-𧟦䙳𧟧-𧟩𬡸覂䙴𧟪-𧟬𫌚𮖿𮗀覃覄䙵䙶𧟭𧟮𫟛ð®—-𮗃覅𧟯𧟰𬡹𧟱-𧟸𬡺𮗄𰴋𧟹-𧟻𮗅𮗆𧟼-𧟾𫌛𰴌𧟿覆𧠀ð§ ð¬¡»è¦‡è¦ˆð§ ‚𮗇𧠃𮗈𧠄𮗉𮗊ð°´è¦‰ð®—‹è¦Šð§ …ð®—Œ]
+[radical 147=⾒見:見𧠆𧠇覌覙𧠈è¦è¦Žä™·ä™¸ð§ ‰-ð§ ð«Œœè¦-覔䙹-䙻𧠎-𧠛𬡼ð®—覕覗覘覚䙼-䙿𧠜-𧠧ð«Œð¬¡½ð®—Žð°´Ž-ð°´è¦›è¦œäš€äšð§ ¨-𧠺𫌞ð®—-ð®—‘è¦-覡䚂䚃𧠻-𧡊𫌟𫌠𮗒-𮗔𰴑覢-覥䚄䚅𧡋-𧡠𫌡𬡾-𬢀𮗕-𮗗𰴒覦-親䚆-䚉𧡡-𧡶𫌢𫌣𮗘覫-覯䚊-䚌𧡷-ð§¢ð¬¢ð®—™ð°´“覰-観äšäšŽð§¢‚-𧢋𫌤𬢂覴-覸äš-䚓𧢌-𧢑𬢃𬢄𮗚-ð®—覹-覻𧢒-𧢗𫌥𮗞𰴔覼覽䚔𧢘-𧢛𬢅覾覿ð¥„𧢜-𧢡𫟜𬢆𧢢-𧢥觀𧢦-𧢫𫌦𫌧䚕𧢬-𧢮䚖𧢯-𧢱]
+[radical 147'=â»…è§:è§è§‚𬢇觃-觅觇-觉𫌨𫌩𬢈-𬢊𰴕𰴖觊𫌪𬢋ð¬¢è§‹ð¬¢Œð°´—-𰴙觌è§ð¬¢Žè§Žð«Œ«ð¬¢-𬢑𰴚è§ð¬¢’ð°´›è§è§‘𫌬𬢓𰴜𬢔ð°´ð«Œ­ð°´ž]
+[radical 148=⾓角:角𧢲𰴟𧢳𮗟𮗠觓觔𧢴-𧢶𰴠𧢷-𧢺𮗡𮗢𰴡觕-觙䚗𧢻-ð§£ð®—£-𮗨觚觛è§è§žð§£‘-𧣠𬢕𮗩𮗪𰴢𰴣觜觟-觧䚘-䚚𧣡-𧣧𫌮𫌯𬢖𮗫-𮗯觨-觫䚛𧣨-𧣳𬢗𮗰-𮗲𰴤𰴥觬-觯䚜-䚠𧣴-𧤊𬢘𮗳觰觱䚡-䚤𧤋-𧤚𧤢𫌰𫌱觲觳䚥䚦𧤛-𧤡𧤣-𧤮𮗴𮗵觴鵤䚧𧤯-𧤹觵觶䚨䚩䚬𧤺-𧥃𮗶𰴦觷-觹䚪䚫𧥄-𧥇𬢙觺𧥈-𧥋觻觼𧥌-ð§¥è§½è§¾ð§¥‘-𧥔觿䚭𧥕-𧥚]
+[radical 149=⾔言:言è¨ð§¥›-𧥟𰴧訂-計䚮-䚰𧥠𬢚𬢛𮗷𮗸𰴨𰴩訉-訚䚱䚲𧥡-𧥭𫌲𫌳𬢜-𬢞𮗹𮗺訛-訳䚳-䛃𧥮-𧦛𫌴𫌵𬢟𬢠𮗻-𮗾𰴪訴-詠䛄-䛓𧦜-𧧂𫌶-𫌹𬢡𬢢𮗿-𮘇𰴫𰴬詡-誊誠é¿ä›”-䛜𧧃-𧧳𧨜𫌺𫌻𬢣-𬢩𮘈-𮘎𰴭-𰴸誋-誟誡-誮ä›-䛨𧧴-𧨛ð§¨-𧨥𫌼-𫌾𬢪-𬢭ð®˜-𮘖𰴹-𰴻誯-諚諩䛩-䛸𧨦-𧩢𫌿ð«€ð¬¢®-𬢳𮘗-𮘠𰴼𰴽諛-諨諪-謃䛹-䛽𧩣-𧪗ð«-ð«…𬢴-𬢹𮘡-𮘪𰴾-𰵂謄-謢䛾-䜂ð œð§ª˜-𧫑ð«†-ð«ˆð¬¢º-𬣄𮘫-𮘯𰵃𰵄謣-謾䜃-䜊𧫒-𧫽ð«‰-ð«Œð¬£…𮘰-𮘸𰵅謿-譌譎-譜龻䜋-䜑𧫾-𧬦ð«-ð«ð¬£†-𬣉𮘹-𮘽𰵆-𰵈è­è­-譲䜒-䜘𧬧-ð§­ð«ð«‘𬣊𬣋𮘾-ð®™‚è­³-譽䜙-䜞𧭂-ð§­ð§­’-𧭛ð«’𬣌-𬣑𮙃𮙄𰵉譾-讅䜟-䜡𧭑𧭜-𧭷ð«Ÿð¬£’-𬣔𮙅𮙆讆-è®äœ¢ð§­¸-𧮄ð«“𬣕𮙇讑-讖𣌚𧮅-ð§®ð«”-ð«–𬣖讗-讙𧮑-𧮘𮙈讚讛𧮙-ð§®ð«—讜-讞𧮞-𧮤𧮦𧮧ð«˜è®Ÿð§®¨ð¬£—𬣘𧮩]
+[radical 149'=⻈讠:è® -讥𰵊讦-è®±ð«™ð¬£™ð¬£šð°µ‹ð°µŒè®²-诀䜣ð«šð«›ð«Ÿžð¬£›-𬣟ð°µ-ð°µ’è¯-诒𧮪ð«œ-ð«¡ð«ŸŸð¬£ -𬣧𰵓-𰵡诓-诩䜤ð«¢-ð«¦ð¬£¨-𬣳𰵢-𰵦诪-诶ð«§-ð«ªð¬£´-𬣼𮙉𰵧-𰵯请-谊䜥ð««-ð«®ð«Ÿ ð«Ÿ¡ð¬£½-𬤆𰵰-𰵸谋-è°žð«¯-ð«´ð¬¤‡-ð¬¤è°Ÿ-谧䜦䜧ð«µ-ð«¸ð«Ÿ¢ð¬¤-𬤗𰵹-𰵿谨-谬䜨ð«¹ð«ºð¬¤˜-𬤜𰶀-𰶃谭-è°²ð«»ð«¼ð¬¤-𬤥𮙊𰶄-𰶈谳-è°µð«½ð¬¤¦-𬤨𰶉-𰶋ð«¾ð¬¤©-𬤬𰶌-𰶎ð«¿ð¬¤­ð®™‹äœ©ð¬¤®è°¶ð¬¤¯ð°¶ð¬¤°ð¬¤±]
+[radical 150=⾕谷:谷𧮫䜪𫎀ð°¶è°¸äœ«ð§®¬-𧮮谹-谻𧮯-𧮲ð«Žð®™Œäœ¬äœ­ð§®³ð§®´ð¬¤²ð°¶‘𰶒谼𧮵-𧮷ð®™ð°¶“谽䜮𧮸𧮹𮙎谾䜯𧮺-𧮿𫎂𬤳ð®™ð°¶”𧯀-𧯅𬤴ð®™ð°¶•ð°¶–è°¿-è±äœ°ð§¯†-𧯉𬤵豂䜱𧯊豃𡓛𧯋-𧯒𮙑𧯓-𧯖豄䜲豅𧯗-𧯙]
+[radical 151=⾖豆:豆䜳𰶗𧯚豇豈𧯛-ð§¯è±‰äœ´ð§¯žð§¯Ÿð¬¤¶ð°¶˜äœµð§¯ -𧯤𮙒𰶙𰶚豊豋䜶𧯥𧯦𧯨𬤷𰶛鿲䜷-䜹𧯩-𧯬𮙓𮙔𰶜豌-豎䜺𧯭-𧯶𫎃ð°¶äœ»-䜿𧯷-𧯻𮙕è±ä€-ä‚𧯼-𧰂𧰈𰶞è±ð¡•†ð§°ƒ-𧰇𫎄𮙖𰶟𧰉-ð§°ð¬¤¸ð®™—𰶠𰶡豑𧰑-𧰖𬤹𰶢äƒð§°—𧰘𮙘𧰙-𧰜𮙙ð§°-𧰟𬤺𰶣𧰠豒ä„𧰡𧰢豓𧰣𧰤豔𧰥]
+[radical 152=⾗豕:豕𧰧𧰨豖𧰦𫎅𧰩𬤻𮙚𰶤𰶥豗ä…𧰪-𧰭豘-è±ä†ä‡ð§°®-𧰴𫎆𬤼𬤽𮙛豞-象äˆð§°µ-𧰾𮙜-𮙞𰶦豢-豦ä‰ð§°¿-𧱌𮙟𮙠豧-豪ð§±-𧱗𫎇𫎈𬤾-𬥀äŠ-äŒð§±˜-𧱧ð¬¥-𬥃𰶧-𰶩豫-è±®ääŽð§±¨-𧱱𫎉𮙡-𮙣𰶪-𰶭豯-豳𧱲-𧱺𬥄𬥅𰶮豴豵ä𧱻-ð§²ð®™¤è±·ää‘𧲂-𧲆豶𧲇-𧲋𬥆𰶯ä’𧲌-ð§²ð¬¥‡ä“ð§²-𧲓𧲗𧲔-𧲖𧲘𧲙ä”ä•ð§²š-𧲞𰶰𧲟]
[radical 153=⾘豸:豸𧲠𧲡𮙥豹-豻𧲢𧲣𫎊豼豽ä–-ä™ð§²¤-𧲫𮙦𮙧豾-貃äšä›ð§²¬-𧲽𮙨𮙩貄-貊𧲾-𧳉𫎋𬥈貋-è²äœð§³Š-𧳘𮙪貎è²ääžð§³™-𧳥𧳱𬥉è²-貓äŸð§³¦-𧳰𧳲-𧳴𫎌𮙫貔-è²–ä ð§³µ-𧴀ð«Žè²—-è²™ä¡ä¢ð§´-𧴅𧴇-𧴋𬥊𬥋貚ä£-ä¦ð§´†ð§´Œ-ð§´ð§´‘-𧴕𬥌𮙬ð§´ð§´–-𧴟ð¬¥ð§´ -𧴢貛貜𧴣]
-[radical 154=â¾™è²:è²-負𧴤-𧴩𫎎𬥎𮙭財-貤𧴪-𧴲ð«Ž-ð«Ž‘ð®™®-𮙱貥-è²®ä§ä¨ð§´³-𧵈𫎒𫎓ð¬¥-𬥒𮙲-𮙸貯-è³ä©-ä¯ð§µ‰-𧵢𫎔𫎕𬥓𮙹-𮚀賂-賎ä°-ä²ð££¬ð§µ£-𧶄𫎖𬥔𬥕ð®š-𮚄è³-賘㕢ä³-äµð§¶…-𧶚𫎗-𫎙𬥖-𬥚𮚅-𮚊賙-賬ä¶-ä¿ð§¶›-𧶰𫎚𫎛𬥛-𬥟𮚋-𮚔賭-賵䞀-䞄𠠋𧶱-𧷄𧷆-𧷋𫎜-𫎞𬥠-𬥢𮚕-𮚙賶-賽䞅䞆𧷌-ð§·ð«ŽŸð«Ž ð¬¥£-𬥥𮚚-ð®šè³¾-贀贂-贅䞇𧷞-𧷻𫎡𬥦𬥧𮚞-𮚠贆-贌䞈𧷼-𧸕𫎢𬥨𮚡-𮚦è´-è´äž‰ð§¸–-𧸥𬥩𮚧𮚨è´-贔𧸦-𧸰𬥪-𬥭𮚩-𮚫贕-贘䞊𧸱-𧸼𧸿𫎣𫎤𬥮-𬥰𮚬贙贚䞋𧸽𧸾𧹀-𧹇𫎥𬥱𮚭贛𧹈-𧹋贜𧹌-ð§¹ð®š®-𮚰𬥲]
-[radical 154'=⻉è´:è´-贯𧹑𬥳贰-贻𧹒𫎦𫎧𬥴-𬥶贼-赆䞌𬥷赇-赊𧹓𫎨𬥸赋-赕äžäžŽð§¹”-𧹖𫎩𬥹赖赗äžäžð«Žªð¬¥º-𬥽赘-赛𬥾赜𧹗èµ-赠𫎫赡赢𫎬𬥿赣𬦀]
-[radical 155=⾚赤:赤𧹘-𧹚䞑赥-赧𧹛𧹜ð¬¦ð§¹-𧹟𫎭赨-赪䞒𧹠-𧹢𫎮𬦂赫䞓䞔𧹣-𧹫𫎯赬-赮𧹬-𧹱𬦃𮚱赯𧹲-𧹷𫎰𧹸-𧹼䞕𧹽-ð§ºð¬¦„𧺂-𧺅]
-[radical 156=⾛走:走赱𧺆𧺇𮚲赲-赵龪𧺈-𧺎赶-赸䞖-䞘ð§º-𧺜𬦅𮚳赹-赿﨣䞙-äžœð§º-𧺵𫎱𬦆-𬦈𮚴𮚵趀-趋äž-䞤𧺶-ð§»ð«Ž²ð¬¦‰-𬦋𮚶𮚷趌-趔䞥-䞪ð§»-𧻮𫎳𫎴𬦌ð¬¦ð®š¸ð®š¹è¶•-趚䞫-䞲𧻯-ð§¼ð§¼ð«Žµ-𫎷𬦎-𬦑𮚺𮚻趛-趤䞳-䞸𧼎-𧼜𧼞𧼠-𧼧𫎸-𫎺𬦒𬦓趥-趧䞹-䞼𧼟𧼨-𧽈𫎻𫎼𬦔-𬦗𮚼趨䞽-䟀𧽉-ð§½ð«Ž½ð¬¦˜-𬦜𮚽𮚾äŸ-䟆𧽞-𧽵𫎾𫎿ð¬¦ð¬¦žè¶©-趭䟇𧽶-𧾌𬦟𮚿趮䟈-䟋ð§¾-𧾘趯趰䟌𧾙-𧾠äŸ-äŸð§¾¡-𧾧𮛀趱äŸð§¾¨-𧾭䟑𧾮𧾯䟒𧾰-𧾴趲𧾵𧾶]
-[radical 157=⾜足:足𧾷-𧾹ð®›è¶´äŸ“䟔𧾺-𧿀𬦠𮛂趵-趸䟕䟖ð§¿-𧿑ð«€ð¬¦¡ð¬¦¢ð®›ƒ-𮛈趹-趻趽-跄䟗-䟞𧿒-𧿱ð«-ð«ƒð¬¦£-𬦧𮛉-𮛎跅-跞践䟟-䟭𧿲-𨀔ð«„-ð«†ð¬¦¨-𬦫ð®›-𮛖趼跟-è·´è·¶-跻䟮-䟳𨀕-𨀿ð«‡-ð«‹ð¬¦¬-𬦱𮛗𮛘跼-踎䟴-䟻䟽ð¨€-ð¨´ð«Œ-ð«Žð¬¦²-𬦵𮛙-𮛟è¸-踪踬-踯踺䟼䟾-ä Œð¨µ-𨂜𨂟ð«-ð«“𬦶-𬦻𮛠-𮛮踫踰-踹踻-è¹…ä -ä –ð¨‚𨂞𨂠-𨃒ð«”-ð«˜ð¬¦¼-𬧃𮛯-𮛿蹆-蹓䠗-ä ð¨ƒ“-𨄂𨄄ð«™-ð«›ð¬§„-𬧉𮜀-𮜈蹔-蹧蹮躀䠞-䠢𨄃𨄅-𨅉𨅚ð«œ-ð«Ÿð¬§Š-ð¬§ð®œ‰-𮜓蹨-蹭蹯-蹿䠣-䠧𨅊-𨅙𨅛-𨆀ð« -ð«¢ð«Ÿ£ð¬§‘-𬧔𮜔-𮜘èº-躉䠨䠩ð¨†-𨆩ð«£-ð«¦ð¬§•-𬧗𮜙-𮜛躊-èºä ªä «ð¨†ª-𨇀ð«§ð«¨ð¬§˜ð®œœ-𮜠èº-躖䠬ð¨‡-𨇕𬧙𮜡-𮜥躗-躜䠭䠮𨇖-𨇣ð«©ð¬§šð¬§›ð®œ¦-𮜪èº-躠䠯𨇤-𨇭𬧜𮜫𮜬躡-躥䠰𨇮-𨇺躦躧𨇻-𨈀𮜭躩躪ð¨ˆ-𨈃ð¬§èº¨ä ±ð¨ˆ„-𨈇𬧞𨈈-𨈊𬧟𨈋-𨈎]
-[radical 158=â¾èº«:身ð¨ˆ-𨈑𬧠𨈒躬𨈓-𨈗𮜮躭-躯𨈘-𨈨𬧡𮜯躰䠲-䠶𨈩-𨈷𬧢𮜰躱躲䠷-䠺𨈸-𨉇ð«ªð««ð¬§£ð®œ±-𮜵躳-躵𨉈-𨉓ð«¬ð®œ¶-𮜹躶-躼䠻𨉔-𨉡𬧤-𬧪躽躾䠼𨉢-𨉥𨉧-𨉭𬧫躿䠽䠾𨉦𨉮-𨉸ð«­ð«®ð¬§¬-𬧮軀è»ð¨‰¹-𨉾ð«¯ð¬§¯è»‚-軅䠿𨉿-𨊌ð«°ð¬§°è»†ä¡€ð¨Š-𨊒ð«±ð®œº-𮜼軇𨊓-𨊚ä¡ð¨Š›ð¨Šœð®œ½è»ˆð¨Šð¨Šžð®œ¾ð¨ŠŸè»‰]
-[radical 159=⾞車:車-è»ä¡‚-䡄𨊠-𨊦軎-軕䡅𨊧-𨊲ð«²ð®œ¿è»–-軣䡆-䡎𨊳-ð¨‹ð«³ð¬§±ð®€-ð®…軤-軬軮-軽龫ä¡-䡒𨋎-𨋧ð«´ð«µð¬§²-𬧴ð®†-ð®Œè»­è»¾-輌䡓-䡗𨋨-ð¨Œð¬§µð®-ð®‘è¼-輕䡘-䡛𨌂-𨌟ð«¶-ð«¸ð®’ð®“è¼–-輬䡜-䡟𨌠-ð¨†ð«¹ð¬§¶ð¬§·ð®”-ð®œè¼­-輼䡠-䡤ð¨‡-ð¨¨ð«ºð«»ð¬§¸ð¬§¹ð®-ð®Ÿè¼½-è½…ä¡¥-䡪ð¨©-𨎉ð«¼ð«½ð¬§ºð® -ð®¢è½†-轌鿂䡫-䡱𨎊-𨎣ð«¾ð«¿ð¬§»-𬧽ð®£-ð®¥è½-轔䡲-䡵𨎤-𨎱ð«€ð®¦-ð®¨è½•-轚䡶𨎲-ð¨‡ð¨˜¼ð«ð¬§¾ð®©-ð®«è½›-轟䡷-䡹ð¨ˆ-ð¨ð«‚ð®¬-ð®¯è½ -轢䡺䡻ð¨‘-ð¨ð¬§¿ð¬¨€ð®°-ð®²è½£è½¤ð¨ž-ð¨¨ä¡¼ð¨©-ð¨´ä¡½ð¨µ-ð¨¸ð¨½è½¥ä¡¾ð¨¹ð¨»ð¨¾ð¨ºð¨¼ð¨¿-ð¨‚ä¡¿ð¨ƒð«ƒð¨„]
-[radical 159'=⻋车:车-轫䢀ð«„ð«…转-è½°ä¢ð¨…ð¨†ð«†ð«‡ð¬¨-𬨃ð®³è½±-轻䢂ð¨‡ð«ˆ-ð«Šð«Ÿ¤ð¬¨„𬨅ð®´è½¼-较ð¨ˆð«‹ð«Œð¬¨†ð¬¨‡ð®µè¾„-辆ð«ð¬¨ˆ-𬨋ð®¶è¾‡-辎ð«Ž-ð«‘𬨌è¾-è¾”ð«’ð«“ð¬¨-ð¬¨ð®·ð®¸è¾•-è¾—ð«”ð«Ÿ¥ð¬¨ð¬¨‘辘ð«•ð«–𬨒𬨓辙辚ð¨‰ð«—ð«˜ð«Ÿ¦ð¬¨”ð®¹ð®ºð¬¨•ð«™ð¨Š]
-[radical 160=⾟辛:è¾›ð¨‹ð¨Œð¬¨–ð¨-ð¨‘辜è¾ð¨’ð¨“ð«šð¬¨—-𬨙辞-è¾ ð¨”-ð¨—ð«›ð«œè¾¡-è¾£ð¨˜-ð¨›ð¬¨šð®»è¾¤ä¢ƒð¨œ-ð¨Ÿð®¼è¾¥-辪ð¨ -ð¨§è¾«ð¨¨-ð¨¯è¾¬ð¨°-ð¨²ð®½è¾­ð¨µ-ð¨¹è¾®ä¢„ð¨º-ð¨¼ð«è¾¯ð¨½-ð¨¿ð¬¨›ð¨‘€-𨑂]
-[radical 161=â¾ è¾°:辰𨑃𨑄ð®¾è¾±è¾²ä¢…𨑅-𨑇䢆辳䢇𨑈𨑉ð®¿ð®ž€è¾´ð¨‘Šä¢ˆä¢‰ð¨‘‹ð¨‘Œ]
-[radical 162=⾡辵:辵辶𠔇辷ð«žè¾¸-è¾½ð¨‘-ð¨‘𫟧𬨜巡达-迉䢊䢋𨑑-𨑡ð«Ÿð®ž-𮞃迊-迟迬﨤䢌-ä¢ð¨‘¢-ð¨’ð« ð«¡ð¬¨-𬨠𮞄𮞅迠-è¿«è¿­-迳ä¢ä¢‘𨒂-𨒤ð«¢-ð«¤ð¬¨¡-𬨣𮞆-𮞎迴-逊䢒-䢘𨒥-𨓄ð«¥ð¬¨¤ð¬¨¥ð®ž-𮞑逋-逧䢙-䢛𨓅-𨓪ð«¦-ð«ªð¬¨¦-𬨬𮞒-𮞕逨-逻䢜-䢠𨓫-ð¨”ð¨”-𨔜𨔠ð««-ð«²ð¬¨­-𬨲𮞖-𮞨逼-é—䢡𨔎ð¨”-𨔟𨔡-𨕜ð«³-ð«¹ð«Ÿ¨ð«Ÿ©ð¬¨³-𬨹𮞩-𮞵é˜-é¥ä¢¢-䢥ð¨•-𨖅ð«º-ð«½ð¬¨º-𬨿𮞶-𮞼é¦-é±é³ä¢¦-䢩𨖆-𨖳ð«¾-𫑃𬩀-𬩈𮞽-𮟈é²é´-é¼é‚†ä¢ª-䢭𨖴-𨗒𨗔-𨗤𫑄-𫑊𬩉-ð¬©ð®Ÿ‰-ð®Ÿé½-邅邉䢮𨗥-𨘆𫑋𫟪𬩑-𬩛ð®Ÿ-𮟗邇邈䢯䢰𨘇-𨘠𩄮𫑌-ð«‘𬩜-𬩣𮟘-𮟜邊-邌䢱𨘡-𨘶ð«‘𫑑𬩤-𬩪ð®Ÿ-𮟡é‚𨘷-𨘻𨘽-ð¨™ð¬©«-𬩮𮟢𮟣邎𨙂-𨙑𫑒-𫑕𮟤-𮟦𨙒-𨙘𫑖𬩯-𬩲𮟧é‚é‚𨙙-𨙞䢲𨙟-𨙥𮟨𨙦𮟩𨙧]
-[radical 163=⾢邑:邑𨙨邒邓䢳𨙩𨙪𬩳𬩴邔-é‚䢴𨙫-𨙵𫑗𮟪𮟫邞-邬䢵-䢷𨙶-𨚒𫑘𫑙𬩵𬩶𮟬-𮟮邭-邻䢸-䢺𨚓-𨚮𫑚𫑛𫟫𬩷-𬩹𮟯-𮟶邼-郑郓䢻-䣂𨚯-𨛊𫑜𬩺-𬩽𮟷-𮟺郒郔-郧䣃-䣉𨛋-𨛪ð«‘-𫑟𬩾-𬪄𮟻𮟼部-郸䣊-ä£ð¨›«-𨜎𫑠-𫑢𫟬𬪅-𬪊𮟽-𮟿郹-é„Šä£-䣒ð¨œ-𨜖𨜘-𨜱𫑣𫑤𫟭𬪋-ð¬ªð® €-ð® ‚é„‹-鄗䣓-䣗𨜗𨜲-ð¨Šð«‘¥ð«‘¦ð® ƒ-𮠅鄘-鄥䣘-䣜ð¨‹-ð¨ªð¨¹ð«‘§-𫑩𬪑-𬪔𮠆鄦-鄲ä£-䣠ð¨«-ð¨¸ð¨º-ð¨žð¬ª•ð¬ª–ð® ‡-𮠉鄳-鄷䣡𨞑-𨞦𫑪𫑫𬪗-𬪛𮠊-𮠎鄸鄹䣢𨞧-𨞹𫑬𬪜ð® ð® é„º-鄾𨞺-𨟌𫑭ð¬ª-𬪟𮠑𮠒鄿酀酂ð¨Ÿ-𨟘𫑮-𫑰𬪠-𬪢é…酃𨟙-𨟟𬪣𬪤𮠓酄-酆𨟠-𨟣𫑱𮠔酇酈𨟤-𨟧䣣䣤𨟨-𨟮𬪥𨟯𫑲]
-[radical 164=⾣酉:酉𮠕酊酋䣥䣦𮠖𮠗酌-酒䣧䣨𨟰-𨟳𫑳𮠘-ð® šé…“-酞䣩-䣭𨟴-𨠊𬪦𬪧𮠛-ð®  é…Ÿ-酥䣮-䣳𨠋-𨠣𬪨𮠡-𮠤酦-酱䣴-䣹𨠤-𨠶𫑴𫑵𫟮𬪩𮠥-𮠪酲-酿䣺䣻𨠷-𨡋𫑶-𫑸𬪪-𬪬𮠫-𮠭醀-醌䣼-䣿𨡌-𨡨𫑹𮠮-ð® ´é†-醗䤀-䤈𨡩-𨢄𬪭-𬪱𮠵-𮠻醘-醤䤉-䤌𨢅-𨢠𫑺𬪲-𬪵𮠼醥-醬ä¤ð¨¢¡-𨢼𫑻𬪶𮠽-𮡀醭-醱䤎-䤒𨢽-𨣕𫑼𫑽ð®¡-𮡄醲-醸𨣖-𨣥𬪷-𬪹𮡅𮡆醹-醻䤓䤔𨣦-𨣭𫑾𮡇-𮡊䤕䤖𨣮-𨣵𮡋𮡌醼𨣶-𨣽𫑿醽-釀䤗䤘𨣾-𨤂ð®¡é‡é‡‚𨤃𨤄釃釄𨤅𨤆釅𨤇-𨤉䤙𨤊-𨤎]
-[radical 165=⾤釆:釆采ð¨¤ð¬ªºð®¡Žé‡ˆð¨¤ð¨¤‘ð®¡é‡‰é‡Šð«’€ð¬ª»ð¨¤’-𨤙ð®¡ð¤³›ð¨¤š-ð¨¤ð®¡‘釋𨤞-𨤡]
-[radical 166=⾥里:里é‡ð«Ÿ¯ð¨¤£ð¨¤¤é‡Žä¤šð¨¤¢ð¨¤¥ð«’𮡒é‡ð¨¤¦-𨤩𫒂𬪼𬪽𮡓𨤪𨤫𬪾𮡔-𮡖𨤬𫒃𮡗𮡘𨤭-𨤯𮡙𨤰𨤱𮡚𡣢𨤲𨤳𫒄𬪿𬫀é‡ð¨¤´-𨤷𮡛𫒅𮡜ð®¡ð¥£·ð¨¤¸ð¬«ð®¡ž-𮡢𨤹𨤺𮡣𨤻𨤼]
-[radical 167=⾦金:金-釢䤛𨤽-ð¨¥é‡£-釼䤜𨥂-𨥉𫒆-𫒉𮡤-𮡦釽-鈬ä¤-䤠𨥊-𨥤𫒊-𫒎𬫂-𬫅𮡧-𮡭鈭-鉴éŠé¾¯ä¤¡-䤣𨥥-ð¨¦ð«’-𫒔𬫆-𬫌𮡮-𮡰鉵-鉻鉽-銎éŠ-銱䤤-䤪𨦂-ð¨¦ð¨¦Ÿ-𨦫𫒕-𫒜𫟰ð¬«-𬫓𮡱-𮡷銲-鋶﨧䤫-䤲𨦬-𨧥ð«’-𫒥𬫔-𬫠𮡸-ð®¢é‰¼é‹·-錧錩-é†éˆé¾¬ï¨¨ä¤³-䤶𨧦-𨨮𫒦-𫒯𬫡-𬫬𮢂-𮢘錨é‡é‰-鎇䤷-䤼𨨯-𨪆𫒰-𫒷𬫭-𬫲𮢙-𮢧鎈-鎨鎪-鎿龲䤽-䥇𨪇-𨫎𫒸-𫒾𫟱𬫳-𬫾𮢨-𮢳鎩é€-é²é¹ä¥ˆ-䥓ð¨«-𨬌𫒿-𫓃𬫿-𬬄𮢴-𮢽é³éµ-é¸éº-é¨ä¥”-䥜ð¨¬-𨬔𨬖-𨭔𫓄-𫓎𬬅-𬬊𮢾-𮣎é´é©-é‘ä¥-䥦𨬕𨭕-𨮑ð«“-𫓕𬬋-𬬑ð®£-𮣘鑂-鑔鑧䥧-䥮𨮒-𨮷𫓖-𫓚𬬒-𬬗𮣙-ð®£é‘•-鑦䥯-䥴𨮸-𨯜𫓛𫓜𬬘-𬬛𮣞-𮣤鑨-鑬䥵-䥷ð¨¯-𨯹ð«“-𫓟𬬜-𬬞𮣥-𮣩鑭-鑳䥸𨯺-𨰈𨰱𫓠-𫓢𬬟𬬠𮣪𮣫鑴-鑺𨰉-ð¨°ð«“£ð¬¬¡ð¬¬¢ð®£¬ð®£­é‘»-鑿𨰞-𨰨𫓤𮣮钀-钂𨰩-𨰰𬬣𮣯钃钄䥹𨰲-𨰶𬬤𨰷-𨰹𬬥𨰺𬬦𨰻𮣰𨰼𨰽𮣱]
-[radical 167'=â»é’…:é’…-钌𫓥𫟲é’-钗𨰾𨰿𫓦𫟳𬬧-𬬪𮣲钘-钯䥺-䥼𨱀-𨱂𫓧-𫓫𫟴𫟵𬬫-𬬶𮣳钰-铎鿭䥽-䥿𨱃-𨱆𫓬-𫓮𫟶𫟷𬬷-𬭂é“-铷䦀𫓯-𫓴𫟸-𫟻𬭃-𬭉铸-锕é¿ä¦ð¨±‡ð¨±ˆð«“µ-𫓷𫟼𬭊-ð¬­ð®£´é”–-锱𨱉-𨱌𫓸-𫓿𫟽𬭑-ð¬­ð®£µé”²-镅𨱎𫔀-𫔄𫟾𫟿𬭞-𬭥镆-镕鿔䦂ð¨±ð¨±ð«”…-𫔈𫠀𬭦-𬭫𮣶镖-é• ð¨±ð¨±’𫔉𫔊𬭬-𬭲镡-镫䦃-䦅𨱑𨱓𨱔𫔋-ð«”𬭳-𬭹镬-镱𨱕𨱖ð«”𫔑𬭺-𬭽𮣷镲𫔒ð« ð¬­¾é•³é•´ð¬­¿ð«”“𬮀镵镶ð¬®ð«””𫔕𬮂䦆𬮃]
-[radical 168=⾧長:長镸𨱗-𨱙镹䦇𮣸镺𨱚-𨱥𮣹𮣺镻䦈䦉𨱦-𨱱𮣻䦊𨱲-𨱿𫔖𬮄𮣼𮣽𨲀-𨲆𮣾𮣿镼𨲇-𨲒𫔗𮤀ð®¤ð¡‘ºð¨²“-𨲕𨲗-ð¨²ð¨²–𨲞-𨲤𮤂䦋𨲥-𨲬𮤃𮤄镽𨲭-𨲷𮤅𮤆镾𨲸-𨳆]
-[radical 168'=⻓长:长]
-[radical 169=⾨門:門𨳇𨳈é–閂𨳉𫔘閃-閅𨳊-ð¨³ð¬®…é–†-閊䦌ä¦ð¨³-𨳖𫔙𬮆𮤇開-閗䦎-䦑𨳗-𨳲𫔚𫔛𬮇𬮈𮤈𮤉閘-閠䦒-䦔𨳳-𨴌𫔜-𫔠𬮉𮤊-ð®¤é–¡-閪䦕-䦛ð¨´-𨴦𮤎ð®¤é–«-閴䦜-䦟𨴧-𨵇𫔡-𫔤𬮊-𬮌閵閶閸-闂䦠-䦨𨵈-𨵤𫔥-𫔧ð®¤-𮤖閷闃-é—䦩-䦯𨵥-𨵿𫔨ð¬®ð¬®Žð®¤—-𮤛é—-闘𨶀-𨶛ð¬®-𬮑𮤜-𮤞闙-é—䦰𨶜-𨶫𫔩𬮒𮤟-𮤡闞-闡䦱𨶬-𨷂𬮓𮤢-𮤥闢-闦䦲-䦴𨷃-𨷓𨷕-𨷗𫔪𬮔𬮕𮤦𮤧闧䦵𨷔𨷘-𨷞𬮖𮤨𨷟-𨷥𬮗𨷦-𨷮𨷶𮤩𨷯-𨷵𨷸𫔫𮤪𨷷𨷹-𨷾]
-[radical 169'=⻔门:é—¨-闪𬮘𮤫闫-闯𨷿-ð¨¸ð«”¬ð¬®™-𬮛𮤬𮤭闰-闷𨸂𨸃𫔭-𫔯𬮜-𬮟𮤮-𮤰闸闹𫔰𫠂𬮠𬮡𮤱𮤲闺-阂䦶𨸄𨸅𫔱𬮢-𬮧𮤳阃-阆䦷𫔲𫔳𬮨-𬮪阇-é˜ð«”´ð¬®«-𬮰𮤴-𮤶阑-阕䦸𨸆-𨸈𬮱-𬮵𮤷阖-阙𨸉𨸊𫔵𫔶阚𫔷𫔸𬮶𬮷𨸋𨸌𬮸𬮹𮤸阛ð¨¸ð«”¹ð¨¸Ž]
-[radical 170=⾩阜:阜é˜ð¨¸é˜žé˜Ÿä¦¹ä¦ºð¨¸-𨸕阠-阤䦻𨸖-𨸙𫔺𬮺𮤹阥-阶䦼-䧀ð ²ð¨¸š-𨸩𫔻𬮻-𬮽𮤺𮤻阷-陉ä§-䧃𨸪-𨹀𫔼𫔽𬮾𮤼-𮤿陊-陕䧄-䧈ð¨¹-𨹗𫔾-𫕀𬮿𬯀𮥀-𮥅陖-陙陛-险䧉-ä§ð¨¹˜-𨹳ð«•-𫕃ð¬¯-𬯃𮥆-𮥋陚陪-険ä§-䧖𨹵-ð¨ºð«•„𫕅𬯄-𬯊𮥌-𮥑陻-éšä§—-䧙𨺞-𨺿𫕆-ð«•ð« ƒð¬¯‹-ð¬¯ð®¥’éš‘-隙﨩䧚-䧟𨻀-𨻭𫕎ð«•ð¬¯-𬯓𮥓-𮥚隚-隡䧠-䧣𨻮-𨼉ð«•-𫕓𬯔-𬯘𮥛-𮥟隢-隥䧤-䧦䧩𨼊-𨼩𫕔-𫕗𬯙-𬯛𮥠-𮥤隦-隫䧧䧨䧪𨼪-𨼾𬯜-𬯟𮥥-𮥩隬-隲䧫-䧭𨼿-𨽌𬯠𮥪-𮥮隳ð¨½-𨽕𬯡𮥯隴䧮𨽖-𨽡𫕘𮥰隵䧯𨽢-𨽥𬯢-𬯤𮥱䧰𨽦-𨽫𬯥-𬯧𨽬𨽭𬯨𨽮𨽯𮥲𨽰𨽱𬯩𮥳鿧𨽲-𨽵]
+[radical 154=â¾™è²:è²-負𧴤-𧴩𫎎𬥎𮙭𰶱財-貤𧴪-𧴲ð«Ž-ð«Ž‘ð®™®-𮙱𰶲貥-è²®ä§ä¨ð§´³-𧵈𫎒𫎓ð¬¥-𬥒𮙲-𮙸𰶳-𰶻貯-è³ä©-ä¯ð§µ‰-𧵢𫎔𫎕𬥓𮙹-𮚀𰶼-𰶿賂-賎ä°-ä²ð££¬ð§µ£-𧶄𫎖𬥔𬥕ð®š-𮚄𰷀-ð°·„è³-賘㕢ä³-äµð§¶…-𧶚𫎗-𫎙𬥖-𬥚𮚅-𮚊𰷅賙-賬ä¶-ä¿ð§¶›-𧶰𫎚𫎛𬥛-𬥟𮚋-𮚔𰷆-𰷈賭-賵䞀-䞄𠠋𧶱-𧷄𧷆-𧷋𫎜-𫎞𬥠-𬥢𮚕-𮚙𰷉賶-賽䞅䞆𧷌-ð§·ð«ŽŸð«Ž ð¬¥£-𬥥𮚚-ð®šð°·Š-𰷌賾-贀贂-贅䞇𧷞-𧷻𫎡𬥦𬥧𮚞-𮚠ð°·-ð°·è´†-贌䞈𧷼-𧸕𫎢𬥨𮚡-𮚦𰷑-ð°·—è´-è´äž‰ð§¸–-𧸥𬥩𮚧𮚨è´-贔𧸦-𧸰𬥪-𬥭𮚩-𮚫𰷘-ð°·šè´•-贘䞊𧸱-𧸼𧸿𫎣𫎤𬥮-𬥰𮚬𰷛贙贚䞋𧸽𧸾𧹀-𧹇𫎥𬥱𮚭贛𧹈-𧹋贜𧹌ð§¹ð°·œð°·ð§¹Ž-ð§¹ð®š®-𮚰𬥲]
+[radical 154'=⻉è´:è´-财𰷞-ð°· è´£-贯𧹑𬥳𰷡贰-贻𧹒𫎦𫎧𬥴-𬥶𰷢贼-赆䞌𬥷赇-赊𧹓𫎨𬥸赋-赕äžäžŽð§¹”-𧹖𫎩𬥹𰷣-𰷥赖赗äžäžð«Žªð¬¥º-𬥽𰷦𰷧赘-赛𬥾𰷨-𰷪赜𧹗èµ-赠𫎫𰷫赡赢𰷬𫎬𬥿𰷭𰷮赣𬦀]
+[radical 155=⾚赤:赤𧹘-𧹚䞑赥-赧𧹛𧹜ð¬¦ð§¹-𧹟𫎭赨-赪䞒𧹠-𧹢𫎮𬦂𰷯赫䞓䞔𧹣-𧹫𫎯赬-赮𧹬-𧹱𬦃𮚱赯𧹲-𧹷𫎰𧹸-𧹼䞕𧹽-ð§ºð¬¦„𧺂-𧺅𰷰]
+[radical 156=⾛走:走赱𧺆𧺇𮚲赲-赵龪𧺈-𧺎赶-赸䞖-䞘ð§º-𧺜𬦅𮚳𰷱赹-赿﨣䞙-äžœð§º-𧺵𫎱𬦆-𬦈𮚴𮚵𰷲趀-趋äž-䞤𧺶-ð§»ð«Ž²ð¬¦‰-𬦋𮚶𮚷𰷳𰷴趌-趔䞥-䞪ð§»-𧻮𫎳𫎴𬦌ð¬¦ð®š¸ð®š¹ð°·µ-𰷷趕-趚䞫-䞲𧻯-ð§¼ð§¼ð«Žµ-𫎷𬦎-𬦑𮚺𮚻趛-趤䞳-䞸𧼎-𧼜𧼞𧼠-𧼧𫎸-𫎺𬦒𬦓𰷸𰷹趥-趧䞹-䞼𧼟𧼨-𧽈𫎻𫎼𬦔-𬦗𮚼𰷺趨䞽-䟀𧽉-ð§½ð«Ž½ð¬¦˜-𬦜𮚽𮚾𰷻-ð°·½äŸ-䟆𧽞-𧽵𫎾𫎿ð¬¦ð¬¦žð°·¾è¶©-趭䟇𧽶-𧾌𬦟𮚿𰷿趮䟈-䟋ð§¾-𧾘𰸀趯趰䟌𧾙-𧾠äŸ-äŸð§¾¡-𧾧𮛀趱äŸð§¾¨-𧾭䟑𧾮𧾯䟒𧾰-𧾴趲𧾵𧾶]
+[radical 157=⾜足:足𧾷-𧾹ð®›è¶´äŸ“䟔𧾺-𧿀𬦠𮛂ð°¸è¶µ-趸䟕䟖ð§¿-𧿑ð«€ð¬¦¡ð¬¦¢ð®›ƒ-𮛈𰸂-𰸄趹-趻趽-跄䟗-䟞𧿒-𧿱ð«-ð«ƒð¬¦£-𬦧𮛉-𮛎𰸅-𰸇跅-跞践䟟-䟭𧿲-𨀔ð«„-ð«†ð¬¦¨-𬦫ð®›-𮛖趼跟-è·´è·¶-跻䟮-䟳𨀕-𨀿ð«‡-ð«‹ð¬¦¬-𬦱𮛗𮛘𰸈-ð°¸è·¼-踎䟴-䟻䟽ð¨€-ð¨´ð«Œ-ð«Žð¬¦²-𬦵𮛙-𮛟ð°¸-𰸓è¸-踪踬-踯踺䟼䟾-ä Œð¨µ-𨂜𨂟ð«-ð«“𬦶-𬦻𮛠-𮛮𰸔-𰸙踫踰-踹踻-è¹…ä -ä –ð¨‚𨂞𨂠-𨃒ð«”-ð«˜ð¬¦¼-𬧃𮛯-𮛿𰸚-𰸧蹆-蹓䠗-ä ð¨ƒ“-𨄂𨄄ð«™-ð«›ð¬§„-𬧉𮜀-𮜈𰸨𰸩蹔-蹧蹮躀䠞-䠢𨄃𨄅-𨅉𨅚ð«œ-ð«Ÿð¬§Š-ð¬§ð®œ‰-𮜓𰸪蹨-蹭蹯-蹿䠣-䠧𨅊-𨅙𨅛-𨆀ð« -ð«¢ð«Ÿ£ð¬§‘-𬧔𮜔-𮜘𰸫-𰸯èº-躉䠨䠩ð¨†-𨆩ð«£-ð«¦ð¬§•-𬧗𮜙-𮜛𰸰-𰸲躊-èºä ªä «ð¨†ª-𨇀ð«§ð«¨ð¬§˜ð®œœ-𮜠𰸳-𰸵èº-躖䠬ð¨‡-𨇕𬧙𮜡-𮜥𰸶𰸷躗-躜䠭䠮𨇖-𨇣ð«©ð¬§šð¬§›ð®œ¦-𮜪èº-躠䠯𨇤-𨇭𬧜𮜫𮜬躡-躥䠰𨇮-𨇺𰸸躦躧𨇻-𨈀𮜭躩躪ð¨ˆ-𨈃ð¬§ð°¸¹èº¨ä ±ð¨ˆ„-𨈇𬧞𨈈-𨈊𬧟𨈋-𨈎]
+[radical 158=â¾èº«:身ð¨ˆ-𨈑𬧠𨈒躬𨈓-𨈗𮜮躭-躯𨈘-𨈨𬧡𮜯𰸺躰䠲-䠶𨈩-𨈷𬧢𮜰𰸻-𰸽躱躲䠷-䠺𨈸-𨉇ð«ªð««ð¬§£ð®œ±-𮜵躳-躵𨉈-𨉓ð«¬ð®œ¶-𮜹躶-躼䠻𨉔-𨉡𬧤-𬧪𰸾-𰹀躽躾䠼𨉢-𨉥𨉧-𨉭𬧫ð°¹-𰹅躿䠽䠾𨉦𨉮-𨉸ð«­ð«®ð¬§¬-𬧮𰹆軀è»ð¨‰¹-𨉾ð«¯ð¬§¯è»‚-軅䠿𨉿-𨊌ð«°ð¬§°ð°¹‡è»†ä¡€ð¨Š-𨊒ð«±ð®œº-𮜼軇𨊓-𨊚ä¡ð¨Š›ð¨Šœð®œ½è»ˆð¨Šð¨Šžð®œ¾ð¨ŠŸè»‰]
+[radical 159=⾞車:車軋𰹈𰹉軌è»ä¡‚-䡄𨊠-𨊦軎-軕䡅𨊧-𨊲ð«²ð®œ¿ð°¹Šð°¹‹è»–-軣䡆-䡎𨊳-ð¨‹ð«³ð¬§±ð®€-ð®…𰹌軤-軬軮-軽龫ä¡-䡒𨋎-𨋧ð«´ð«µð¬§²-𬧴ð®†-ð®Œð°¹-ð°¹è»­è»¾-輌䡓-䡗𨋨-ð¨Œð¬§µð®-ð®‘𰹑è¼-輕䡘-䡛𨌂-𨌟ð«¶-ð«¸ð®’ð®“ð°¹’è¼–-輬䡜-䡟𨌠-ð¨†ð«¹ð¬§¶ð¬§·ð®”-ð®œð°¹“-𰹚輭-輼䡠-䡤ð¨‡-ð¨¨ð«ºð«»ð¬§¸ð¬§¹ð®-ð®Ÿð°¹›-𰹞輽-è½…ä¡¥-䡪ð¨©-𨎉ð«¼ð«½ð¬§ºð® -ð®¢ð°¹Ÿ-𰹢轆-轌鿂䡫-䡱𨎊-𨎣ð«¾ð«¿ð¬§»-𬧽ð®£-ð®¥ð°¹£è½-轔䡲-䡵𨎤-𨎱ð«€ð®¦-ð®¨ð°¹¤-𰹧轕-轚䡶𨎲-ð¨‡ð¨˜¼ð«ð¬§¾ð®©-ð®«ð°¹¨è½›-轟䡷-䡹ð¨ˆ-ð¨ð«‚ð®¬-ð®¯ð°¹©è½ -轢䡺䡻ð¨‘-ð¨ð¬§¿ð¬¨€ð®°-ð®²ð°¹ªð°¹«è½£è½¤ð¨ž-ð¨¨ä¡¼ð¨©-ð¨´ð°¹¬ä¡½ð¨µ-ð¨¸ð¨½ð°¹­è½¥ä¡¾ð¨¹ð¨»ð¨¾ð¨ºð¨¼ð¨¿-ð¨‚ä¡¿ð¨ƒð°¹®ð«ƒð¨„]
+[radical 159'=⻋车:车轧𰹯轨𰹰𰹱轩-轫䢀ð«„ð«…ð°¹²-𰹵转-è½°ä¢ð¨…ð¨†ð«†ð«‡ð¬¨-𬨃ð®³ð°¹¶-𰹻轱-轻䢂ð¨‡ð«ˆ-ð«Šð«Ÿ¤ð¬¨„𬨅ð®´ð°¹¼-𰺃轼-较ð¨ˆð«‹ð«Œð¬¨†ð¬¨‡ð®µð°º„-𰺆辄-辆ð«ð¬¨ˆ-𬨋ð®¶ð°º‡ð°ºˆè¾‡-辎ð«Ž-ð«‘𬨌𰺉-𰺑è¾-è¾”ð«’ð«“ð¬¨-ð¬¨ð®·ð®¸ð°º’-𰺕辕-è¾—ð«”ð«Ÿ¥ð¬¨ð¬¨‘𰺖𰺗辘ð«•ð«–𬨒𬨓𰺘𰺙辙辚ð¨‰ð«—𰺚-𰺞ð«˜ð«Ÿ¦ð¬¨”ð®¹ð®ºð°ºŸð°º ð¬¨•ð°º¡ð«™ð°º¢-𰺤ð¨Š]
+[radical 160=⾟辛:è¾›ð¨‹ð¨Œð¬¨–ð¨ð¨Žð°º¥ð¨-ð¨‘𰺦辜è¾ð¨’ð¨“ð«šð¬¨—-𬨙辞-è¾ ð¨”-ð¨—ð«›ð«œð°º§è¾¡-è¾£ð¨˜-ð¨›ð¬¨šð®»è¾¤ä¢ƒð¨œ-ð¨Ÿð®¼ð°º¨è¾¥-辪ð¨ -ð¨§ð°º©è¾«ð¨¨-ð¨¯è¾¬ð¨°-ð¨²ð®½ð°ºªè¾­ð¨µ-ð¨¹ð°º«è¾®ä¢„ð¨º-ð¨¼ð«è¾¯ð¨½ð°º¬ð¨¾ð¨¿ð¬¨›ð¨‘€-𨑂]
+[radical 161=â¾ è¾°:辰𨑃𨑄ð®¾è¾±è¾²ä¢…𨑅-𨑇𰺭䢆辳䢇𨑈𨑉ð®¿ð®ž€è¾´ð¨‘Šä¢ˆä¢‰ð¨‘‹ð¨‘Œ]
+[radical 162=⾡辵:辵辶𠔇辷ð«žè¾¸-è¾½ð¨‘-ð¨‘𫟧𬨜𰺮巡达-迉䢊䢋𨑑-𨑡ð«Ÿð®ž-𮞃𰺯-𰺳迊-迟迬﨤䢌-ä¢ð¨‘¢-ð¨’ð« ð«¡ð¬¨-𬨠𮞄𮞅𰺴𰺵迠-è¿«è¿­-迳ä¢ä¢‘𨒂-𨒤ð«¢-ð«¤ð¬¨¡-𬨣𮞆-𮞎𰺶迴-逊䢒-䢘𨒥-𨓄ð«¥ð¬¨¤ð¬¨¥ð®ž-𮞑𰺷-𰺺逋-逧䢙-䢛𨓅-𨓪ð«¦-ð«ªð¬¨¦-𬨬𮞒-𮞕𰺻-𰺽逨-逻䢜-䢠𨓫-ð¨”ð¨”-𨔜𨔠ð««-ð«²ð¬¨­-𬨲𮞖-𮞨𰺾-𰻅逼-é—䢡𨔎ð¨”-𨔟𨔡-𨕜ð«³-ð«¹ð«Ÿ¨ð«Ÿ©ð¬¨³-𬨹𮞩-𮞵𰻆-𰻈é˜-é¥ä¢¢-䢥ð¨•-𨖅ð«º-ð«½ð¬¨º-𬨿𮞶-𮞼𰻉-ð°»é¦-é±é³ä¢¦-䢩𨖆-𨖳ð«¾-𫑃𬩀-𬩈𮞽-𮟈𰻎-ð°»‘é²é´-é¼é‚†ä¢ª-䢭𨖴-𨗒𨗔-𨗤𫑄-𫑊𬩉-ð¬©ð®Ÿ‰-ð®Ÿð°»’-ð°»•é½-邅邉䢮𨗥-𨘆𫑋𫟪𬩑-𬩛ð®Ÿ-𮟗𰻖-𰻚邇邈䢯䢰𨘇-𨘠𩄮𫑌-ð«‘𬩜-𬩣𮟘-𮟜邊-邌䢱𨘡-𨘶ð«‘𫑑𬩤-𬩪ð®Ÿ-𮟡é‚𨘷-𨘻𨘽-ð¨™ð¬©«-𬩮𮟢𮟣𰻛邎𨙂-𨙑𫑒-𫑕𮟤-𮟦𨙒-𨙘𫑖𬩯-𬩲𮟧𰻜é‚é‚𨙙-𨙞䢲𨙟-𨙥𮟨𨙦𮟩𨙧ð°»ð°»ž]
+[radical 163=⾢邑:邑𨙨邒邓䢳𨙩𨙪𬩳𬩴邔-é‚䢴𨙫-𨙵𫑗𮟪𮟫𰻟𰻠邞-邬䢵-䢷𨙶-𨚒𫑘𫑙𬩵𬩶𮟬-𮟮𰻡-𰻦邭-邻䢸-䢺𨚓-𨚮𫑚𫑛𫟫𬩷-𬩹𮟯-𮟶𰻧𰻨邼-郑郓䢻-䣂𨚯-𨛊𫑜𬩺-𬩽𮟷-𮟺𰻩郒郔-郧䣃-䣉𨛋-𨛪ð«‘-𫑟𬩾-𬪄𮟻𮟼𰻪-𰻬部-郸䣊-ä£ð¨›«-𨜎𫑠-𫑢𫟬𬪅-𬪊𮟽-𮟿𰻭-𰻱郹-é„Šä£-䣒ð¨œ-𨜖𨜘-𨜱𫑣𫑤𫟭𬪋-ð¬ªð® €-𮠂𰻲𰻳鄋-鄗䣓-䣗𨜗𨜲-ð¨Šð«‘¥ð«‘¦ð® ƒ-ð® …ð°»´-𰻸鄘-鄥䣘-䣜ð¨‹-ð¨ªð¨¹ð«‘§-𫑩𬪑-𬪔𮠆𰻹-𰻻鄦-鄲ä£-䣠ð¨«-ð¨¸ð¨º-ð¨žð¬ª•ð¬ª–ð® ‡-𮠉𰻼鄳-鄷䣡𨞑-𨞦𫑪𫑫𬪗-𬪛𮠊-𮠎𰻽鄸鄹䣢𨞧-𨞹𫑬𬪜ð® ð® ð°»¾é„º-鄾𨞺-𨟌𫑭ð¬ª-𬪟𮠑𮠒𰻿鄿酀酂ð¨Ÿ-𨟘𫑮-𫑰𬪠-𬪢𰼀ð°¼é…酃𨟙-𨟟𬪣𬪤𮠓酄-酆𨟠-𨟣𫑱𮠔酇酈𨟤-𨟧䣣䣤𨟨-𨟮𬪥𨟯𫑲𰼂]
+[radical 164=⾣酉:酉𮠕酊酋䣥䣦𮠖𮠗酌-酒䣧䣨𨟰-𨟳𫑳𮠘-𮠚𰼃酓-酞䣩-䣭𨟴-𨠊𬪦𬪧𮠛-𮠠𰼄酟-酥䣮-䣳𨠋-𨠣𬪨𮠡-𮠤𰼅𰼆酦-酱䣴-䣹𨠤-𨠶𫑴𫑵𫟮𬪩𮠥-𮠪酲-酿䣺䣻𨠷-𨡋𫑶-𫑸𬪪-𬪬𮠫-𮠭𰼇-𰼉醀-醌䣼-䣿𨡌-𨡨𫑹𮠮-𮠴𰼊-𰼌é†-醗䤀-䤈𨡩-𨢄𬪭-𬪱𮠵-ð® »ð°¼ð°¼Žé†˜-醤䤉-䤌𨢅-𨢠𫑺𬪲-𬪵𮠼ð°¼é†¥-醬ä¤ð¨¢¡-𨢼𫑻𬪶𮠽-𮡀ð°¼-𰼒醭-醱䤎-䤒𨢽-𨣕𫑼𫑽ð®¡-𮡄𰼓𰼔醲-醸𨣖-𨣥𬪷-𬪹𮡅𮡆醹-醻䤓䤔𨣦-𨣭𫑾𮡇-𮡊𰼕䤕䤖𨣮-𨣵𮡋𮡌𰼖醼𨣶-𨣽𫑿醽-釀䤗䤘𨣾-𨤂ð®¡é‡é‡‚𨤃𨤄釃釄𨤅𨤆釅𨤇-𨤉䤙𨤊-𨤎]
+[radical 165=⾤釆:釆采ð¨¤ð¬ªºð®¡Žé‡ˆð¨¤ð¨¤‘ð®¡ð°¼—釉释𫒀𬪻𨤒-𨤙ð®¡ð¤³›ð¨¤š-ð¨¤ð®¡‘釋𨤞-𨤡]
+[radical 166=⾥里:里𰼘é‡ð«Ÿ¯ð¨¤£ð¨¤¤é‡Žä¤šð¨¤¢ð¨¤¥ð«’𮡒𰼙é‡ð¨¤¦-𨤩𫒂𬪼𬪽𮡓𨤪𨤫𬪾𮡔-𮡖𨤬𫒃𮡗𮡘𨤭-𨤯𮡙𨤰𨤱𮡚𰼚-ð°¼ð¡£¢ð¨¤²ð¨¤³ð«’„𬪿𬫀𰼞é‡ð¨¤´-𨤷𮡛𫒅𮡜ð®¡ð¥£·ð¨¤¸ð¬«ð®¡ž-𮡢𨤹𨤺𮡣𨤻𨤼]
+[radical 167=⾦金:金-釢䤛𨤽-ð¨¥é‡£-釼䤜𨥂-𨥉𫒆-𫒉𮡤-𮡦𰼟𰼠釽-鈬ä¤-䤠𨥊-𨥤𫒊-𫒎𬫂-𬫅𮡧-𮡭𰼡-𰼣鈭-鉴éŠé¾¯ä¤¡-䤣𨥥-ð¨¦ð«’-𫒔𬫆-𬫌𮡮-𮡰𰼤-𰼦鉵-鉻鉽-銎éŠ-銱䤤-䤪𨦂-ð¨¦ð¨¦Ÿ-𨦫𫒕-𫒜𫟰ð¬«-𬫓𮡱-𮡷𰼧-𰼬銲-鋶﨧䤫-䤲𨦬-𨧥ð«’-𫒥𬫔-𬫠𮡸-ð®¢ð°¼­-𰼴鉼鋷-錧錩-é†éˆé¾¬ï¨¨ä¤³-䤶𨧦-𨨮𫒦-𫒯𬫡-𬫬𮢂-𮢘𰼵-𰼺錨é‡é‰-鎇䤷-䤼𨨯-𨪆𫒰-𫒷𬫭-𬫲𮢙-𮢧𰼻-ð°½éŽˆ-鎨鎪-鎿龲䤽-䥇𨪇-𨫎𫒸-𫒾𫟱𬫳-𬫾𮢨-𮢳𰽂𰽃鎩é€-é²é¹ä¥ˆ-䥓ð¨«-𨬌𫒿-𫓃𬫿-𬬄𮢴-𮢽𰽄𰽅é³éµ-é¸éº-é¨ä¥”-䥜ð¨¬-𨬔𨬖-𨭔𫓄-𫓎𬬅-𬬊𮢾-𮣎𰽆-𰽌é´é©-é‘ä¥-䥦𨬕𨭕-𨮑ð«“-𫓕𬬋-𬬑ð®£-𮣘ð°½é‘‚-鑔鑧䥧-䥮𨮒-𨮷𫓖-𫓚𬬒-𬬗𮣙-ð®£ð°½Ž-𰽑鑕-鑦䥯-䥴𨮸-𨯜𫓛𫓜𬬘-𬬛𮣞-𮣤𰽒鑨-鑬䥵-䥷ð¨¯-𨯹ð«“-𫓟𬬜-𬬞𮣥-𮣩鑭-鑳䥸𨯺-𨰈𨰱𫓠-𫓢𬬟𬬠𮣪𮣫鑴-鑺𨰉-ð¨°ð«“£ð¬¬¡ð¬¬¢ð®£¬ð®£­é‘»-鑿𨰞-𨰨𫓤𮣮钀-钂𨰩-𨰰𬬣𮣯钃钄䥹𨰲-𨰶𬬤𨰷-𨰹𬬥𰽓𨰺𬬦𨰻𮣰𨰼𨰽𮣱𰽔]
+[radical 167'=â»é’…:é’…-钌𫓥𫟲𰽕𰽖é’-钗𨰾𨰿𫓦𫟳𬬧-𬬪𮣲𰽗-𰽛钘-钯䥺-䥼𨱀-𨱂𫓧-𫓫𫟴𫟵𬬫-𬬶𮣳𰽜-𰽤钰-铎鿭䥽-䥿𨱃-𨱆𫓬-𫓮𫟶𫟷𬬷-𬭂𰽥-ð°½±é“-铷䦀𫓯-𫓴𫟸-𫟻𬭃-𬭉𰽲-𰽽铸-锕é¿ä¦ð¨±‡ð¨±ˆð«“µ-𫓷𫟼𬭊-ð¬­ð®£´ð°½¾-𰾋锖-锱𨱉-𨱌𫓸-𫓿𫟽𬭑-ð¬­ð®£µð°¾Œ-𰾓锲-镅𨱎𫔀-𫔄𫟾𫟿𬭞-𬭥𰾔-𰾦镆-镕鿔䦂ð¨±ð¨±ð«”…-𫔈𫠀𬭦-𬭫𮣶𰾧-𰾯镖-é• ð¨±ð¨±’𫔉𫔊𬭬-𬭲𰾰-𰾲镡-镫䦃-䦅𨱑𨱓𨱔𫔋-ð«”𬭳-𬭹𰾳-𰾽镬-镱𨱕𨱖ð«”𫔑𬭺-𬭽𮣷𰾾-ð°¿é•²ð«”’ð« ð¬­¾ð°¿‚镳镴𬭿𰿃-𰿅𫔓𬮀𰿆𰿇镵镶ð¬®ð°¿ˆð«””𰿉𫔕𬮂𰿊䦆𬮃]
+[radical 168=⾧長:長镸𨱗-𨱙镹䦇𮣸𰿋镺𨱚-𨱥𮣹𮣺𰿌镻䦈䦉𨱦-𨱱𮣻䦊𨱲-𨱿𫔖𬮄𮣼𮣽ð°¿ð¨²€-𨲆𮣾𮣿𰿎-ð°¿é•¼ð¨²‡-𨲒𫔗𮤀ð®¤ð°¿‘𡑺𨲓-𨲕𨲗-ð¨²ð°¿’𨲖𨲞-𨲤𮤂𰿓䦋𨲥-𨲬𮤃𮤄𰿔𰿕镽𨲭-𨲷𮤅𮤆镾𨲸-𨳆]
+[radical 168'=⻓长:长𰿖]
+[radical 169=⾨門:門𨳇𨳈é–閂𨳉𫔘閃-閅𨳊-ð¨³ð¬®…ð°¿—é–†-閊䦌ä¦ð¨³-𨳖𫔙𬮆𮤇𰿘-𰿛開-閗䦎-䦑𨳗-𨳲𫔚𫔛𬮇𬮈𮤈𮤉𰿜ð°¿é–˜-閠䦒-䦔𨳳-𨴌𫔜-𫔠𬮉𮤊-ð®¤ð°¿žé–¡-閪䦕-䦛ð¨´-𨴦𮤎ð®¤ð°¿Ÿé–«-閴䦜-䦟𨴧-𨵇𫔡-𫔤𬮊-𬮌閵閶閸-闂䦠-䦨𨵈-𨵤𫔥-𫔧ð®¤-𮤖𰿠-𰿢閷闃-é—䦩-䦯𨵥-𨵿𫔨ð¬®ð¬®Žð®¤—-𮤛𰿣é—-闘𨶀-𨶛ð¬®-𬮑𮤜-𮤞闙-é—䦰𨶜-𨶫𫔩𬮒𮤟-𮤡闞-闡䦱𨶬-𨷂𬮓𮤢-𮤥闢-闦䦲-䦴𨷃-𨷓𨷕-𨷗𫔪𬮔𬮕𮤦𮤧闧䦵𨷔𨷘-𨷞𬮖𮤨𰿤𨷟-𨷥𬮗𨷦-𨷮𨷶𮤩𨷯-𨷵𨷸𫔫𮤪𨷷𨷹-𨷾]
+[radical 169'=⻔门:门闩𰿥闪𬮘𮤫𰿦闫-闯𨷿-ð¨¸ð«”¬ð¬®™-𬮛𮤬𮤭𰿧闰-闷𨸂𨸃𫔭-𫔯𬮜-𬮟𮤮-𮤰𰿨-𰿫闸闹𫔰𫠂𬮠𬮡𮤱𮤲𰿬𰿭闺-阂䦶𨸄𨸅𫔱𬮢-𬮧𮤳𰿮阃-阆䦷𫔲𫔳𬮨-𬮪𰿯𰿰阇-é˜ð«”´ð¬®«-𬮰𮤴-𮤶𰿱-𰿳阑-阕䦸𨸆-𨸈𬮱-𬮵𮤷𰿴-𰿶阖-阙𨸉𨸊𫔵𫔶𰿷𰿸阚𫔷𫔸𬮶𬮷𰿹𰿺𨸋𨸌𬮸𬮹𮤸𰿻𰿼阛𰿽𰿾ð¨¸ð«”¹ð°¿¿ð±€€ð¨¸Ž]
+[radical 170=⾩阜:阜é˜ð¨¸é˜žé˜Ÿä¦¹ä¦ºð¨¸-𨸕阠-阤䦻𨸖-𨸙𫔺𬮺𮤹ð±€ð±€‚阥-阶䦼-䧀ð ²ð¨¸š-𨸩𫔻𬮻-𬮽𮤺𮤻𱀃-𱀅阷-陉ä§-䧃𨸪-𨹀𫔼𫔽𬮾𮤼-𮤿𱀆-𱀊陊-陕䧄-䧈ð¨¹-𨹗𫔾-𫕀𬮿𬯀𮥀-𮥅𱀋-ð±€é™–-陙陛-险䧉-ä§ð¨¹˜-𨹳ð«•-𫕃ð¬¯-𬯃𮥆-𮥋𱀑-𱀖陚陪-険ä§-䧖𨹵-ð¨ºð«•„𫕅𬯄-𬯊𮥌-𮥑𱀗-ð±€ é™»-éšä§—-䧙𨺞-𨺿𫕆-ð«•ð« ƒð¬¯‹-ð¬¯ð®¥’𱀡-𱀩隑-隙﨩䧚-䧟𨻀-𨻭𫕎ð«•ð¬¯-𬯓𮥓-𮥚𱀪𱀫隚-隡䧠-䧣𨻮-𨼉ð«•-𫕓𬯔-𬯘𮥛-𮥟𱀬-𱀰隢-隥䧤-䧦䧩𨼊-𨼩𫕔-𫕗𬯙-𬯛𮥠-𮥤𱀱-𱀶隦-隫䧧䧨䧪𨼪-𨼾𬯜-𬯟𮥥-𮥩𱀷-𱀺隬-隲䧫-䧭𨼿-𨽌𬯠𮥪-𮥮𱀻隳ð¨½-𨽕𬯡𮥯𱀼-𱀿隴䧮𨽖-𨽡𫕘𮥰ð±€-ð±‚隵䧯𨽢-𨽥𬯢-𬯤𮥱䧰𨽦-𨽫𬯥-𬯧ð±ƒð±„𨽬𨽭𬯨𨽮𨽯𮥲𨽰𨽱𬯩𮥳鿧𨽲-𨽵]
[radical 171=⾪隶:隶𮥴𨽶-𨽻𫕙隷𨽼-𨽾隸𨽿𮥵𨾀-𨾄]
-[radical 172=⾫隹:éš¹-难䧱𨾅-𨾇隿雀䧲䧳𨾈-𨾑𮥶é›-雈䧴-䧶𨾒-𨾟𫕚𬯪𮥷-𮥺雉-é›ä§·-䧺𨾠-𨾱𬯫𮥻é›-雒䧻𨾲-𨿊𫕛𬯬𬯭雓䧼䧽𨿋-𨿟𬯮𮥼雔雕䧾䧿𨿠-𨿾𬯯𬯰𮥽-𮥿雖ä¨ä¨‚𨿿-𩀖𬯱𮦀雗-雠䨃𩀗-𩀣𫕜ð®¦é›¡-難䨄𩀤-𩀳䨅-䨇𩀴-ð©†ð¬¯²-𬯴雤ð©‡-ð©’䨈ð©“-ð©›ð¬¯µð¬¯¶ð©œ-ð©¥ð¬¯·é›¥é›¦ð©¦-ð©«ð®¦‚䨉ð©¬-ð©±ð®¦ƒé›§ð©²ð©³ä¨Šð©´ð©µ]
-[radical 173=⾬雨:雨𮦄ð©¶-ð©¸ð«•é›©-雫䨋ð©¹-ð©‚𫕞𬯸𮦅雬-雳䨌ä¨ð©‚‚-𩂑𫕟𫕠𬯹𬯺𮦆-𮦉雴-雾䨎𩂒-𩂡𫕡𫕢𬯻𮦊-ð®¦é›¿-éœä¨-䨖𩂢-𩂶𫕣𫕤𮦎ð®¦éœ‚-霊䨗-䨙𩂷-𩃑𫕥𫕦𬯼𬯽ð®¦-𮦓霋-霗䨚-ä¨ð©ƒ’-𩃴𫕧𫕨𬯾-𬰃𮦔-𮦛霘-霠䨞-䨤𩃵-𩃽𩃿-𩄖𫕩𫕪𬰄-𬰇𮦜-𮦣霡-霥䨥-䨪𩃾𩄗-𩄭𩄯-𩄺𫕫𬰈𮦤-𮦫霦-霭䨫-䨯𩄻-𩅜𫕬𫕭𬰉𬰊𮦬霮-霴䨰䨱ð©…-𩅻𫕮-𫕱𬰋-ð¬°ð®¦­-𮦲霵-霻𩅼-ð©†ð«•²ð¬°Ž-ð¬°ð®¦³-𮦶霼-é€ä¨²-䨴𩆑-𩆣𫕳𫕴𬰑-𬰔𮦷-𮦻é䨵䨶𩆤-𩆬𮦼é‚-éˆä¨·ð©†­-𩆴𫕵𫕶𮦽é‰ä¨¸ð©†µ-𩆾𮦾éŠð©†¿-𩇇𮦿é‹-éŽé¿¨ä¨¹ð¬°•ð®§€ð®§ð©‡ˆð©‡‰é𩇊-𩇎𫕷𬰖𮧂ð©‡-𩇑䨺𩇒é𩇓𩇔䨻]
-[radical 174=â¾­é‘:é‘é’𩇕𫕸é“é”𩇖𩇗é•é–𩇘-𩇛𫕹𫕺𬰗𬰘𮧃é—-é™ð©‡œéš-éœð©‡ð©‡žð«•»ð©‡Ÿé𩇠𩇡𫕼𩇢𩇣䨼𩇤𩇥]
-[radical 175=â¾®éž:éžð©‡¦-𩇨䨽䨾𩇩-𩇬𬰙éŸä¨¿ð©‡­-𩇴𮧄𩇵𩇶𬰚𬰛𮧅𮧆𩇷𫕽𮧇é ä©€ð©‡¸-𩇻𬰜𩇼𩇽ð¬°é¡ð¬°žä©ð©‡¾-ð©ˆð«•¾ð¬°Ÿð®§ˆð«•¿ð©ˆ‚]
-[radical 176=⾯é¢:é¢é£ð š‘𩈃-𩈅𮧉䩂-䩄𩈆-𩈌é¤ä©…-䩇ð©ˆ-𩈘𫖀𬰠𮧊𮧋é¥ð¤Ž‚𩈙-𩈠ð«–𮧌é¦ä©ˆä©‰ð©ˆ¡-𩈪𫖂ð®§ä©Šð©ˆ«-𩈱𬰡𮧎𩈲-𩈷𫖃ð®§ð©ˆ¸-𩈺䩋𩈻-𩉀𬰢𬰣ð®§é§ä©Œä©ð©‰-𩉉𫖄𮧑𮧒䩎𩉊𩉋é¨ð©‰Œ-ð©‰ä©ð©‰‘-𩉚]
-[radical 177=â¾°é©:é©ð®§“éªð©‰›ð©‰œé«-é±ä©-ä©’ð©‰-𩉠é²-é¹ä©“-䩘𩉡-𩉷𮧔éº-鞆䩙-䩞𩉸-ð©Šð«–…𫖆𮧕-𮧗鞇-éž’ä©Ÿð©Š-𩊨𫖇𫖈𬰤𮧘𮧙鞓-鞙䩠-䩧𩊩-𩊾𬰥𮧚-ð®§éžš-鞡䩨-䩮𩊿-𩋞𬰦𮧞鞢-鞰䩯-䩵𩋟-𩌂𬰧𮧟-𮧢鞱-鞷䩶-䩻𥌕𩌃-𩌥𮧣-𮧥鞸-鞻䩼-䩾𩌦-ð©‚𫖉𮧦-𮧩鞼-éž¿ä©¿-䪄ð©ƒ-ð©’𫖊𬰨𬰩𮧪𮧫韀-韃䪅䪆ð©“-ð©¤ð«–‹ð®§¬ð®§­éŸ„韅䪇䪈ð©¥-ð©±éŸ†-韈䪉ð©²-ð©·äªŠäª‹ð©¸-ð©ºð©¼-ð©¾éŸ‰äªŒäªð©¿-𩎆䪎𩎇-𩎊韊𩎋-ð©Ž‘]
-[radical 178=⾱韋:韋𮧮-𮧰𫖌韌𩎒äªð©Ž“-ð©Ž—ð«–𬰪éŸéŸŽäª-䪓𩎘-ð©Ž£éŸ-韑𩎤-𩎮𫠄𬰫-𬰭𮧱韒䪔𩎯-𩎷韓-韕䪕𩎸-ð©„𫖎韖-韚䪖-䪘ð©…-ð©Žð¬°®ð®§²éŸœ-韟䪙䪚ð©-ð©—韛韠ð©˜-ð©Ÿð«–韡韢䪛ð© -ð©§ð®§³éŸ£äªœð©¨-ð©­äªð©®-ð©±ð¬°¯éŸ¤éŸ¥ð©²ð©³ð«–ð©´ð©µð¬°°ð©¶-ð©»]
-[radical 178'=⻙韦:韦韧𬰱ð©¼ð«–‘𬰲𮧴韨ð©½ð©¾ð¬°³ð¬°´ð«–’𮧵韩𫖓韪韫ð©¿ð©€ð« …𬰵韬𫖔-𫖖𬰶-𬰸]
-[radical 179=⾲韭:韭韮䪞ð©ð©‚韯䪟ð©ƒéŸ°ð©„韱䪠ð©…-ð©ˆéŸ²äª¡äª¢ð©‰ð©Šäª£ð©‹ð©ð©Žäª¤ð©Œð©-ð©“䪥ð©”-ð©–]
-[radical 180=⾳音:音竟章䪦-䪨ð©—𮧶𮧷韴韵䪩ð©˜ð©™ð«–—韶韷䪪ð©š-ð©ð«–˜ð¬°¹-𬰻𮧸ð©ž-ð©¦ð¬°¼ð®§¹ð®§ºéŸ¸äª«äª¬ð©§-ð©¬ð¬°½ð®§»ð©­-ð©°éŸ¹éŸºäª­ð©±-ð©´ð«–™ð®§¼éŸ»éŸ¼äª®äª¯ð©µ-ð©¸ð®§½éŸ½-響ð©¹-ð©¾ð«–šð©¿-ð©‘𫖛𮧾䪰𩑂-𩑆𮧿頀𩑇𩑈𫖜𬰾𩑉𩑊]
-[radical 181=â¾´é :é ð©‘‹é ‚-é „ð©‘Œ-ð©‘𬰿項-頉䪱䪲ð©‘-𩑘𬱀頊-頓頙䪳-䪵𩑙-𩑯ð«–𮨀-𮨂頔-領頚䪶-䪾𩑰-ð©’Žð«–žð¬±ð¬±‚𮨃-𮨆頛-頣頦-頬䪿-ä«‚ð©’-𩒭𬱃𮨇-𮨊頤頥頭-頽䫃-ä«Šð©’®-𩓜𫖟𫖠𬱄-𬱇𮨋𮨌頿-é¡Šä«‹-ä«“ð©“-𩓿𫖡𬱈𬱉ð®¨-𮨔頾顋-é¡•ä«”-ä«ð©”€-𩔘𫖢𫖣𬱊𬱋𮨕𮨖顖-é¡žä«ž-䫧𩔙-𩔲𫖤𮨗-𮨛顟-顣䫨-ä««ð©”³-𩕈𫖥𫖦𬱌ð¬±ð®¨œð®¨é¡¤-顨䫬-䫱𩕉-𩕞𫖧𬱎𮨞𮨟顩-顫䫲-ä«´ð©•Ÿ-ð©•«ð«–¨ð¬±ð®¨ ð®¨¡é¡¬-顯𩕬-𩕽顰䫵䫶𩕾-ð©–…ð«–©ð¬±ð®¨¢ð®¨£é¡±é¡²ä«·ð©–†-𩖈𮨤𮨥𩖉-𩖎𬱑顳顴ð©–-𩖓𬱒]
-[radical 181'=⻚页:页-顷𬱓顸-须𫖪顼-预𫖫𫠆𬱔𬱕颅-颈𫖬𫖭𬱖-𬱚颉-é¢ð«–®-𫖱𬱛-𬱢é¢-颖𫖲𫖳𬱣-𬱥颗𩖕𩖖𫖴-𫖶𬱦-𬱬题-é¢ð«–·ð¬±­-𬱯颞-颡𫖸𬱰𫖹颢颣𬱱颤𩖗颥𬱲颦𫖺颧𬱳]
-[radical 182=⾵風:風䫸𩖘𩖙𮨦颩颪䫹𩖚-𩖡颫颬䫺-䫽𩖢-𩖯𩖱-𩖳𫖻𮨧颭-颱䫾-䬃𩖴-𩗃𫖼𮨨颲颳䬄䬅𠙬𩗄-𩗒𮨩-𮨫颴颵䬆-䬊𩗓-𩗧𮨬颶颷䬋-ä¬ð©—¨-𩘄𫖽𮨭-𮨯颸-颺䬑-䬗𩘅-ð©˜ð©˜-𩘛𫖾𫖿𬱴颻-飀䬘-䬚𩘎𩘜-𩘬𫗀-𫗂𮨰é£-飄䬛䬜𩘭-𩘷𮨱飅-飊ä¬ð©˜¸-𩙇飋𩙈-ð©™ð«—ƒð«—„𮨲䬞𩙎-ð©™ð«—…䬟𩙑-𩙕𫗆𩙖-𩙜飌é£ð©™-𩙟𮨳𩙠-𩙤]
-[radical 182'=⻛风:风é£ð«—‡ð« ‡ð¬±µ-𬱷é£-飒𩙥𩙦𫠈𬱸-𬱼𩙧𫗈𬱽飓𩙨-𩙪𫗉𬱾-𬲀𮨴飔飖𩙫𩙬𫗊ð¬²ð¬²‚飕飗𩙭𩙮𬲃𬲄飘𮨵飙飚𩙯𬲅𬲆𩙰𫗋𬲇𬲈]
-[radical 183=⾶飛:飛𩙱-𩙳𬲉𩙴䬠𫗌䬡𩙵-𩙹飜𩙺-𩙽𬲊é£ð©™¾]
-[radical 183'=⻜飞:飞𮨶]
-[radical 184=⾷食:食飠𠋑𩙿-ð©šð©šƒð©š‚飡-飤䬢𩚄-𩚆飥-飨䬣-䬥𩚇-𩚔𮨷𮨸飩-飲䬦-䬪𩚕-𩚧ð«—𬲋-𬲎飳-飹飻-飿䬫-䬴𩚨-𩛈𫗎𮨹-𮨻飺餀-é¤ä¬µ-䬻𩛉-𩛜ð«—-ð«—’ð¬²-𬲑𮨼é¤-餙é¤ä¬¼-ä­‚ð©›-𩛹𫗓𬲒-𬲔餚-餜餞-餩䭃-䭇𩛺-𩜢𩜤-𩜬𬲕𬲖𮨽-𮩀餪-餵餷䭈-ä­ð©œ£ð©œ­-ð©˜ð«—”-𫗗𬲗-𬲙ð®©-𮩇餶餸-饃ä­-ä­”ð©™-ð©³ð©µ-ð©¼ð«—˜ð®©ˆ-𮩋饄-饉䭕-ä­—ð§ˆð©´ð©½-𩞠𫗙𫗚𬲚𮩌-ð®©é¥Š-饓䭘-䭜𡓷𩞡-𩞵𩞷-𩞽𫗛𬲛-𬲞ð®©é¥”-饙ä­-䭠𩞶𩞾-𩟒𬲟𬲠𮩑-𮩕饚-饜䉵䭡-䭤𩟓-𩟣𫗜ð«—䭥𩟤-𩟬𬲡𮩖𮩗é¥ð©Ÿ­-𩟵𮩘饞饟䭦䭧𩟶𮩙𮩚䭨𩟷-𩟺𬲢𬲣饠饡䭩𬲤𩟻饢𩟼𩟽]
-[radical 184'=⻠饣:饣-饥𬲥𬲦饦饧𫗞𬲧𬲨饨-饮𩟾-𩠀𫗟𫗠𬲩𬲪饯-饴ð© ð© ‚ð«—¡-𫗣𬲫-𬲳饵-饼𩠃𫗤𫗥𬲴-𬲷𮩛𮩜饽-馂𩠄𩠅𩠇𫗦-𫗨𬲸-𬲻馃-馆𩠆𩠈𩠉𫗩𫗪𬲼-𬳂馇馈馊馋𩠊𩠋𫗫-𫗯𬳃-𬳇ð®©é¦‰é¦Œ-é¦ð© Œð«—°ð«—±ð¬³ˆ-ð¬³é¦‘馒ð© ð© Žð¬³Ž-ð¬³é¦“馔䭪ð© ð«—²ð«—³ð¬³‘𬳒𮩞𫗴𬳓𬳔𫗵馕]
-[radical 185=⾸首:首ð© é¦—ð© ‘-𩠓𮩟𩠔-𩠙𫗶𮩠䭫䭬𩠚-𩠠𬳕𬳖𮩡𩠡-𩠧𫗷𬳗𬳘𮩢𮩣馘𩠨𩠩𫗸𬳙𮩤䭭𩠪-𩠭𮩥𮩦䭮𩠯𩠱𫗹𬳚𩠲𫗺𩠳𩠴𬳛𩠵-𩠷𫗻𩠸𩠹]
-[radical 186=⾹香:香𩠺馚𩠻-𩠽𬳜馛-é¦ä­¯ð© ¾-ð©¡ð©¡ƒð©¡„𩡂𩡅𩡆𫗼𫗽𮩧𮩨馞-馠𩡇𩡈馡-馣䭰-䭲𩡉-ð©¡‹ð©¡ð«—¾ð¬³ð¬³žð®©©ð®©ªé¦¤é¦¥ð©¡Œ-ð©¡Žð©¡-𩡒𫗿𬳟𬳠馦馧𩡓-𩡘𬳡-𬳣𮩫𮩬馨𩡙-𩡜𫘀ð«˜ð¬³¤-𬳦𮩭馩ð©¡-𩡡𫘂𬳧𮩮𩡢𩡣𫘃𮩯𮩰馪𩡤𮩱𥗶𩡥馫䭳𩡦𫘄]
-[radical 187=⾺馬:馬𩡧𫠉𩡨馭馮䭴𩡩-𩡯𮩲馯-馵䭵䭶𩡰-𩡶𫘅𬳨𮩳-𮩶馶-駇䭷-䭾𩡷-𩡾𩢀-𩢅𩢇-𩢌𫘆-𫘉𬳩𬳪𮩷-𮩹駈-駠䭿-䮅𩡿𩢆ð©¢-𩢭𮩺-𮩽駡-駲䮆-ä®ð©¢®-𩣕𫘊𬳫𮩾-𮪄駴-騃䮎-ä®’ð©£–-𩣬𩤷𬳬𮪅-𮪇駳騄-験䮓-䮛𩣭-𩤖𩤞𫘋-𫘎𬳭-𬳯𮪈-𮪌騔-騨䮜-䮢𩤗-ð©¤ð©¤Ÿ-𩤶𩤸-𩤼ð«˜-𫘑ð®ª-𮪔騩-騸䮣-䮩𩤽-𩥪𫘒-𫘖𮪕騹-驇龭䮪-䮱𩥫-ð©¦ð¬³°ð®ª–-𮪙驈-驕䮲-䮶𩦂-ð©¦ð«˜—𬳱驖-驜䮷-䮹𩦞-𩦵𫘘𮪚é©-驟䮺-䮼𩦶-ð©§ð«˜™ð®ª›ä®½ð©§‚-𩧎𮪜驠-驣䮾ð©§-𩧓ð®ªð®ªžé©¤-驧龮䮿𩧔-𩧗𫘚𮪟驨驩䯀𩧘-𩧞𮪠驪ä¯ð©§Ÿð©§ é©«ð©§¡-𩧤𬳲䯂𩧥]
-[radical 187'=⻢马:马-驰𫘛驱-驴𩧦𫘜ð«˜ð¬³³é©µ-骀𩧧-𩧭𩧯𫘞𫘟𫠊𬳴-𬳸éª-骉䯃𩧮𩧰-𩧶𫘠𫘡𬳹-𬳾骊-éªä¯„𩧷-𩧺𫘢-𫘤𬳿𬴀𮪡𮪢éª-骖𩧻-𩧽𫘥-𫘧ð¬´ð¬´‚骗-骛𩧾-𩨃𩨅-𩨊𫘨𫘩𬴃𬴄𮪣骜-骟䯅𩨄𩨋-ð©¨ð«˜ª-𫘬𬴅𮪤骠-骢𫘭𫘮𫠋𬴆-𬴈骣𩨎ð©¨ð«˜¯ð¬´‰ð¬´Šð®ª¥ð«˜°ð« Œð¬´‹éª¤ð¬´Œð©¨ð¬´éª¥ð¬´Žéª¦éª§ð¬´ð«˜±ð¬´]
-[radical 188=⾻骨:骨䯆骩䯇𩨑-𩨓𮪦骪-骮𩨔-𩨛骯-骱䯈䯉𩨜-𩨫骲-骷䯊-䯎𩨬-𩨼𮪧𮪨骸-骼ä¯-䯔𩨽-𩩈𫘲𮪩骽骾䯕-䯚𩩉-𩩖𬴑𬴒𮪪-𮪬骿-é«ä¯›ä¯œð©©—-𩩬𮪭-𮪯髂-é«…ä¯-䯠𩩭-𩩿𫘳𫘴𮪰𮪱髆-髌䯡𩪀-𩪈𮪲é«-é«ä¯¢ð©ª‰-𩪖𮪳𮪴é«ä¯£ð©ª—-𩪟髑-體䯤𩪠-𩪫𮪵髕䯥𩪬-𩪱髖䯦𩪲-𩪶𮪶髗𩪷-𩪺𬴓𮪷𩪻-𩪾]
-[radical 189=⾼高:高髙䯧𫘵𬴔䯨𩪿𩫀髚䯩ð©«-𩫉𬴕𮪸髛𩫊-ð©«ð«˜¶ð®ª¹ð©«Ž-𩫔𫘷𬴖𬴗𩫕-𩫙𬴘髜𩫚-ð©«ð¬´™ð¬´šð®ªºä¯ªð©«ž-𩫤𬴛𮪻𮪼𩫥𩫦𬴜é«ä¯«ð©«§ð¬´-𬴟髞𩫨-𩫪𬴠𩫫𩫬𬴡䯬𩫭𬴢𩫮𩫯𬴣𩫰-𩫲𬴤-𬴦𩫳]
-[radical 190=⾽髟:髟𫘸髠䯭䯮𩫴-𩫸髡髢𩫹-𩫾𫘹𫘺髣-髪䯯-䯴𩫿-ð©¬ð«˜»ð¬´§ð®ª½-𮪿髫-髴䯵䯶𩬑-𩬯𫘼𮫀-𮫂髵-髻鬇䯷䯸𩬰-𩭆𫘽𬴨𬴩𮫃-𮫅髼-鬂䯹-䯼𩭇-ð©­ð«˜¾ð«˜¿ð¬´ªð®«†-𮫈鬃-鬆鬈䯽-䰃𩭞-𩭹𫙀ð«™ð¬´«ð¬´¬ð®«‰-𮫌鬉-é¬ä°„-䰇𩭺-𩮕𫙂𬴭𬴮ð®«ð®«Žé¬-鬓䰈-ä°‹ð©®–-ð©®®ð®«é¬”-鬘é¬ä°Œä°ð©®¯-𩯂𫙃鬙-鬜䰎𩯃-𩯚ð®«ð®«‘鬞-鬠𩯛-𩯥𬴯𮫒鬡鬢ä°-䰒𩯦-𩯯鬣䰓䰔𩯰-𩯹䰕𩯺-𩰀𮫓鬤ð©°-𩰇䰖𩰈𩰉]
-[radical 191=⾾鬥:鬥𩰊-𩰌鬦ð©°-ð©°é¬§ð©°é¬¨ð©°‘𩰒鬩𩰓𩰔𬴰𮫔鬪䰗𩰕𮫕䰘𩰖-𩰘鬫𩰙-𩰛鬬鬭𩰜-𩰞𬴱鬮𩰟]
-[radical 192=⾿鬯:鬯𮫖𩰠-𩰦𮫗𩰧𩰨𮫘鬰𩰩𩰪鬱]
-[radical 193=⿀鬲:鬲𮫙𬴲𩰫𩰬𬴳䰙䰚𩰭𩰮𫙄䰛𩰯𩰰𫙅𬴴鬳䰜𩰱-𩰸𬴵鬴𩰹-𩰽𬴶鬵鬶𩰾-𩱂鬷𩱃-𩱆𬴷鬸𩱇-𩱋鬹鬺𩱌-𩱑𫙆鬻ä°ð©±’-𩱕𬴸𩱖-𩱣𬴹䰞ð©»ð©±¤ð©±¥ð¬´ºð®«šð©±¦-𩱬𮫛𩱭𩱮𫙇𩱯-𩱳𬴻𬴼𩱴-𩱸]
-[radical 194=â¿é¬¼:鬼𩱹-𩱼𫙈𬴽鬽𩱽-𩲉𬴾鬾-魂䰟𩲊-𩲠𫙉𮫜ð®«é­ƒ-魆䰠䰡𩲡-𩲹魇䰢䰣𩲺-𩳋𫙊𬴿𮫞𮫟魈魉𩳌-𩳡𫙋𬵀𮫠魊-é­ä°¤-䰧𩳢-𩳴𫙌ð«™ð®«¡-𮫣䰨䰩𩳵-𩴅𮫤é­ä°ªð©´†-ð©´ð®«¥ð®«¦é­‘-é­”ð©´-𩴛𮫧魕魖䰫-ä°­ð©´œ-𩴭𫙎䰮𩴮-𩴰𮫨魗-魙䰯䰰𩴱-𩴿𮫩𩵀-𩵃𮫪𩵄-𩵈𮫫𩵉𩵊䰱]
-[radical 195=â¿‚é­š:魚𤋳𩵋𮫬-𮫯䰲魛-魞䰳𩵌-𩵓ð«™ð¬µð¬µ‚é­Ÿ-魢䰴-䰶𩵔-𩵟𩶷ð«™ð¬µƒð¬µ„𮫰魣-魹䰷-䰾𩵠-𩶀𫙑𫙒𬵅𬵆𮫱𮫲魺-鮘鮣䰿-䱉ð©¶-𩶠𩾀𫙓-𫙗𬵇-𬵌𮫳𮫴鮙-鮢鮤-鮴鮺䱊-䱎𩶡-𩶶𩶸-𩷌𫙘-𫙟ð¬µ-𬵑𮫵-𮫸鮵-鮹鮻-鯓鯽ä±-䱘ð©·-𩷶𩾉𫙠-𫙣𬵒-𬵖𮫹-𮫽鯔-鯵鯻䱙-䱪𩷷-𩸽𫙤-𫙧𬵗-𬵛𮫾𮫿鯶-鯺鯼鯾-鰛鰠䱫-䱴𩸾-𩹰𫙨-𫙪𬵜-𬵟𮬀-𮬅鰜-é°Ÿé°¡-é°°é¿ä±µ-䱽𩹱-𩺬𫙫-𫙯ð« ð¬µ -𬵣𮬆-𮬊鰱-鱈鷠䱾-䲈𩺭-ð©»—ð«™°-𫙶𬵤-𬵩𮬋-ð®¬é±‰-鱛䲉-ä²ð©»˜-ð©¼ð«™·-𫙼𬵪-𬵭𮬎-𮬒鱜-鱧鱩-鱫ä²-䲕𩼂-𩼤ð©¾ð«™½-ð«šð« Žð¬µ®-𬵱𮬓𮬔鱨鱬-é±°ä²–-䲘𩼥-𩼺𫚂𫚃𬵲-𬵵𮬕鱱-鱶䲙𩼻-𩽌𫚄𬵶𮬖鱷鱸䲚䲛ð©½-𩽙𬵷-𬵹𮬗𮬘𩽚-𩽦𫚅𬵺𮬙𮬚鱹鿩𩽧-𩽯𬵻𬵼鱺𩽰-𩽲𫚆𬵽𬵾𩽳-𩽸𫚇𬵿鱻䲜]
-[radical 195'=⻥鱼:鱼鱽𬶀ð¬¶é±¾ð«šˆ-𫚊𬶂-𬶄鱿-鲃鿕ä²ð©½¹-𩽻𫚋-ð«šð« ð¬¶…-𬶉𮬛鲄-é²ä²žä²Ÿð«šŽ-ð«š’ð« ð¬¶Š-ð¬¶é²‘-鲟𩽼-𩽿𫚓-𫚘𬶎-ð¬¶ð®¬œð®¬é² -鲬ð©¾-𩾄𫚙-𫚛𬶑-𬶕𮬞鲭-鲻𩾅-𩾈𫚜-𫚡𬶖𬶗𬶙-ð¬¶ð®¬Ÿð®¬ é²¼é²½é²¿-鳋䲠䲡𩾊𩾋𫚢-𫚥𫠑𬶘𬶞-𬶨鲾鳌-é³’ä²¢-䲤𫚦𬶩𬶪𮬡𮬢鳓-鳛𩾌𫚧𫚨𫠒𬶫-𬶭𮬣鳜-鳟𫚩𫚪𬶮-𬶴鳠-鳣𫚫𬶵𬶶鳤𫚬𬶷𩾎𫚭𬶸𮬤𬶹-𬶻]
-[radical 196=⿃鳥:鳥𫠓鳦ð©¾-𩾑𫚮鳧-鳰䲥𩾒-𩾜𬶼𮬥鳱-鳶䲦-䲫ð©¾-𩾯𬶽-𬶿𮬦-𮬪鳷-鴉鴋-鴎䲬-䲸𩾰-𩿛𫚯-𫚲𬷀-𬷄𮬫-𮬯鴊é´-鴬䲹-䳊𩿜-𪀑𫚳-𫚷𫠔𬷅-𬷌𮬰-𮬲鴭-鵉䳋-䳔𪀒-ðª‰ð«š¸-ð«š»ð¬·-𬷒𮬳-𮬸鵊-鵣鵥䳕-䳜ðªŠ-ðª¶ð«š¼-𫛀𬷓𬷔𬷖-𬷛𮬹-𮬻鵦-é¶é¶‘ä³-ä³¥ðª·-𪂵ð«›-𫛈𬷜-𬷡𮬼-ð®­ƒé¶é¶’-鶫䳦-䳰𪂶-𪃹𫛉-𫛋𬷢-𬷧𮭄-𮭇鶬-é·Šé·Œ-é·ä³±-䳶𪃺-𪄬𫛌-ð«›ð¬·¨-𬷭𮭈-ð®­é·‹é·-é·Ÿä³·-䳽𪄭-𪅮ð«›ð« •ð¬·®-𬷰ð®­-ð®­•é·¡-鷸鷺-鷼䳾-䴆𪅯-𪆫𪆭𫛑-𫛕𬷱-𬷳𮭖鷹鷽-鸊䴇-䴋𪆬𪆮-ðª‡ð«›–𬷴-𬷶𮭗𮭘鸋-鸒䴌ä´ðª‡‘-ðª‡ðª‡Ÿ-𪇬𫛗𬷷𮭙𮭚鸓鸔䴎𪇭-𪈂𫛘𬷸𮭛𮭜鸕-鸗ä´ðªˆƒ-𪈗𬷹ð®­ð®­žé¸˜-鸚𪈘-𪈤鸛鸜𪈥-𪈭𮭟é¸é¸žð§– ðªˆ®-𪈳𫛙ä´ð©–”𪈴-𪈷𬷺𪈸-𪈽𮭠䴑䴒𪈾-𪉀]
-[radical 196'=⻦鸟:鸟𬷻鸠鸡𬷼𬷽鸢-鸤𬷾鸥-鸩䴓ðª‰-𪉃𫛚-𫛞𫠖𬷿𬸀𮭡-𮭣鸪-鸶𪉄𫛟-𫛤ð¬¸-𬸇𮭤鸷-鸿䴔䴕𪉅-𪉋𫛥-𫛪𬸈-𬸌𮭥鹀-鹈𪉌ðª‰ð«›«-𫛯𬷕ð¬¸-𬸑𮭦𮭧鹉-鹔䴖𪉎𫛰-𫛵𬸒-𬸗鹕-é¹—é¹™-鹜䴗ðª‰ðª‰ð«›¶-𫛼𬸘-𬸟鹘é¹-鹤䴘𪉑-𪉔𫛽𫛾𬸠-𬸣𮭨𮭩鹥-鹨𫛿-𫜂𬸤-𬸦𮭪鹩-鹬𫜃𫜄𬸧-𬸫鹭-鹰䴙𫜅𬸬-𬸯鹱鹲𫜆𪉕𬸰鹳鹴𬸱]
-[radical 197=â¿„é¹µ:鹵𠧸𪉖𪉗鹶䴚𪉘-𪉛𬸲鹷𪉜-𪉡𮭫𪉢𫜇䴛𪉣-𪉥𫜈𬸳𮭬鹸𪉦-𪉬𮭭𮭮鹹𪉭-𪉴𫜉𮭯鹺鹻䴜𪉵-𪉾ä´ðª‰¿-𪊂鹼鹽𪊃-𪊅𬸴䴞𪊆-𪊊]
-[radical 197'=⻧å¤:𮭰𬸵𫠗𬸶鹾𫜊𬸷-𬸹]
-[radical 198=⿅鹿:鹿𢉖𮭱𬸺麀-麂𪊋𪊌𫜋䴟ðªŠðªŠŽð®­²éºƒéº„ä´ -ä´¢ðªŠ-𪊚𫜌𬸻麅-麈䴣-䴥𪊛-𪊤𬸼𮭳麉-麋𪊥-𪊳ð«œð¬¸½ð¬¸¾ð®­´éºŒ-éºä´¦ðªŠ´-𪋃𫜎𮭵麑-麗䴧𪋄-ðª‹ð¬¸¿ð®­¶ð®­·éº˜-麛𪋎-𪋖𮭸麜éºä´¨ðª‹—-𪋛𬹀𮭹𮭺麞䴩𪋜-𪋠ð¬¹éºŸðª‹¡-𪋩ð«œéº ä´ªä´«ðª‹ª-𪋭麡𪋮-𪋵麢𪋶-𪋸麣𪋹麤𪋺𪋻]
-[radical 199=⿆麥:麥𪋼-𪌀麧䴬-ä´®ðªŒ-𪌄麨-麫䴯䴰𪌅-𪌓麬-麮䴱-䴴𪌔-𪌚𪌜-𪌡𮭻麯麰䴵𪌢-𪌬𬹂麱麲䴶-䴸𪌭-𪌻麳麴䴹-䴽𪌼-ðª‹ð«œð¬¹ƒð®­¼ð®­½éºµðªŒ-ðªšð®­¾ä´¾-äµ€ðª›-ðª¢ð®­¿ð®®€éº¶äµäµ‚äµ…ðª£-ðª±ð®®äµƒðª²-ðª·ð¬¹„䵄ðª¸-ðª¾äµ†ðª¿-𪎅𮮂麷𪎆𪎇]
-[radical 199'=⻨麦:麦ðªŽð®®ƒðªŽˆð¬¹…麸𪎉𪎊𫜑𮮄𮮅𪎋𫜒𮮆𬹆𮮇𪎌𫜓𬹇-𬹉麹𪎎ðªŽð«œ”𬹊-𬹌麺𫜕ðªŽð¬¹ð¬¹Ž]
-[radical 200=⿇麻:麻𪎑麼麽𪎒-𪎔麾䵇𪎕-𪎚𮮈-𮮊𪎛-𪎢𫜖麿𪎣𪎤ð¬¹ð®®‹é»€ðªŽ¥-𪎧𫜗é»äµˆäµ‰ðªŽ¨-𪎯𮮌黂𪎰𪎱ð®®ðªŽ²ð®®Ž]
-[radical 201=⿈黃:黃黄𪎳𪎴ð¬¹é»…黆䵊𪎵-𪎹𫜘黇-黉𪎺ð®®é»Šé»‹äµ‹ðªŽ»-ðªäµŒðª‚-ðª…𬹑äµðª†-ðª’䵎ðª“-ðªžð¬¹’äµðªŸ-ðª£ð¬¹“äµðª¤-ðª¦é»Œðª§-ðª¬]
-[radical 202=⿉é»:é»ð®®ð®®‘ðª­é»Žäµ‘ðª®ðª¯äµ’䵓ðª°-ðªµð¬¹”é»ðª¶-ðª€ð®®’ðªäµ”-äµ–ðª‚-ðª†äµ—-äµ™ðª‡-ðªŠé»äµšðª‹äµ›ðªŒ-ðªäµœðª’ð®®“ðª‘ðª“-ðª–]
-[radical 203=⿊黑:黑黒ðª—äµðª˜äµžðª™-ðª›å¢¨é»“䵟䵠ðªœ-ðª£é»”-默䵡ðª¤-ðª±ð®®”𮮕黚-點䵢䵣ðª²-ðª¾ð®®–黟-黡䵤-䵧ðª¿-𪑇𬹕𬹖𮮗𮮘黢黣䵨䵩𢖛𪑈-𪑑𬹗黤-黪䵪-䵬𪑒-𪑢𪑤𫜙𫜚𮮙-𮮛黫-黯䵭-䵯𪑣𪑥-𪑽𫜛𬹘𮮜黰黱𪑾-𪒎𬹙𬹚黲-é»´äµ°ðª’-𪒗ð®®äµ±ðª’˜-𪒨黵䵲-䵴𪒩-𪒳黶䵵𪒴-𪒸𮮞黷𪒹-𪒾𬹛𮮟黸𪒿-𪓊]
+[radical 172=⾫隹:éš¹-难䧱𨾅-𨾇ð±…隿雀䧲䧳𨾈-𨾑𮥶ð±†-ð±ˆé›-雈䧴-䧶𨾒-𨾟𫕚𬯪𮥷-𮥺ð±‰é›‰-é›ä§·-䧺𨾠-𨾱𬯫𮥻é›-雒䧻𨾲-𨿊𫕛𬯬𬯭雓䧼䧽𨿋-𨿟𬯮𮥼雔雕䧾䧿𨿠-𨿾𬯯𬯰𮥽-𮥿雖ä¨ä¨‚𨿿-𩀖𬯱𮦀ð±Šé›—-雠䨃𩀗-𩀣𫕜ð®¦ð±‹é›¡-難䨄𩀤-ð©€³ð±Œä¨…-䨇𩀴-ð©†ð¬¯²-𬯴ð±é›¤ð©‡-ð©’䨈ð©“-ð©›ð¬¯µð¬¯¶ð±Žð±ð©œ-ð©¥ð¬¯·é›¥é›¦ð©¦-ð©«ð®¦‚䨉ð©¬-ð©±ð®¦ƒð±é›§ð©²ð©³ä¨Šð©´ð©µ]
+[radical 173=⾬雨:雨𮦄ð©¶-ð©¸ð«•ð±‘雩-雫䨋ð©¹-ð©‚𫕞𬯸𮦅雬-雳䨌ä¨ð©‚‚-𩂑𫕟𫕠𬯹𬯺𮦆-𮦉雴-雾䨎𩂒-𩂡𫕡𫕢𬯻𮦊-ð®¦ð±’ð±“雿-éœä¨-䨖𩂢-𩂶𫕣𫕤𮦎ð®¦éœ‚-霊䨗-䨙𩂷-𩃑𫕥𫕦𬯼𬯽ð®¦-𮦓ð±”-ð±šéœ‹-霗䨚-ä¨ð©ƒ’-𩃴𫕧𫕨𬯾-𬰃𮦔-𮦛ð±›-ð±Ÿéœ˜-霠䨞-䨤𩃵-𩃽𩃿-𩄖𫕩𫕪𬰄-𬰇𮦜-𮦣ð± -ð±¢éœ¡-霥䨥-䨪𩃾𩄗-𩄭𩄯-𩄺𫕫𬰈𮦤-𮦫霦-霭䨫-䨯𩄻-𩅜𫕬𫕭𬰉𬰊𮦬ð±£éœ®-霴䨰䨱ð©…-𩅻𫕮-𫕱𬰋-ð¬°ð®¦­-𮦲霵-霻𩅼-ð©†ð«•²ð¬°Ž-ð¬°ð®¦³-𮦶霼-é€ä¨²-䨴𩆑-𩆣𫕳𫕴𬰑-𬰔𮦷-𮦻ð±¤é䨵䨶𩆤-𩆬𮦼ð±¥-ð±¨é‚-éˆä¨·ð©†­-𩆴𫕵𫕶𮦽ð±©é‰ä¨¸ð©†µ-𩆾𮦾éŠð©†¿-𩇇𮦿é‹-éŽé¿¨ä¨¹ð¬°•ð®§€ð®§ð©‡ˆð©‡‰é𩇊-𩇎𫕷𬰖𮧂ð©‡ð±ªð©‡ð©‡‘ð±«ä¨ºð©‡’é𩇓𩇔䨻ð±¬]
+[radical 174=â¾­é‘:é‘é’𩇕𫕸é“é”𩇖𩇗é•é–𩇘-𩇛𫕹𫕺𬰗𬰘𮧃é—-é™ð©‡œéšð±­ð±®é›éœð©‡ð©‡žð«•»ð©‡Ÿé𩇠𩇡𫕼𩇢𩇣䨼𩇤𩇥]
+[radical 175=â¾®éž:éžð©‡¦-𩇨䨽䨾𩇩-𩇬𬰙éŸä¨¿ð©‡­-𩇴𮧄𩇵𩇶𬰚𬰛𮧅𮧆𩇷𫕽𮧇é ä©€ð©‡¸-𩇻𬰜𩇼𩇽ð¬°é¡ð¬°žä©ð©‡¾-ð©ˆð±¯ð«•¾ð¬°Ÿð®§ˆð«•¿ð©ˆ‚]
+[radical 176=⾯é¢:é¢é£ð š‘𩈃-𩈅𮧉䩂-䩄𩈆-𩈌é¤ä©…-䩇ð©ˆ-𩈘𫖀𬰠𮧊𮧋é¥ð¤Ž‚𩈙-𩈠ð«–𮧌é¦ä©ˆä©‰ð©ˆ¡-𩈪𫖂ð®§ä©Šð©ˆ«-𩈱𬰡𮧎𩈲-𩈷𫖃ð®§ð©ˆ¸-𩈺ð±°ä©‹ð©ˆ»-𩉀𬰢𬰣ð®§é§ä©Œä©ð©‰-𩉉𫖄𮧑𮧒䩎𩉊𩉋é¨ð©‰Œ-ð©‰ä©ð©‰‘-𩉚]
+[radical 177=â¾°é©:é©ð®§“éªð©‰›ð©‰œé«-é±ä©-ä©’ð©‰-𩉠ð±±é²-é¹ä©“-䩘𩉡-𩉷𮧔ð±²éº-鞆䩙-䩞𩉸-ð©Šð«–…𫖆𮧕-𮧗ð±³éž‡-éž’ä©Ÿð©Š-𩊨𫖇𫖈𬰤𮧘𮧙ð±´ð±µéž“-鞙䩠-䩧𩊩-𩊾𬰥𮧚-ð®§ð±¶éžš-鞡䩨-䩮𩊿-𩋞𬰦𮧞ð±·éž¢-鞰䩯-䩵𩋟-𩌂𬰧𮧟-𮧢ð±¸-ð±ºéž±-鞷䩶-䩻𥌕𩌃-𩌥𮧣-𮧥ð±»ð±¼éž¸-鞻䩼-䩾𩌦-ð©‚𫖉𮧦-𮧩鞼-éž¿ä©¿-䪄ð©ƒ-ð©’𫖊𬰨𬰩𮧪𮧫ð±½éŸ€-韃䪅䪆ð©“-ð©¤ð«–‹ð®§¬ð®§­éŸ„韅䪇䪈ð©¥-ð©±éŸ†-韈䪉ð©²-ð©·äªŠäª‹ð©¸-ð©ºð©¼-ð©¾ð±¾éŸ‰äªŒäªð©¿-𩎆䪎𩎇-𩎊韊𩎋-ð©Ž‘]
+[radical 178=⾱韋:韋𮧮-𮧰𫖌韌𩎒ð±¿äªð©Ž“-ð©Ž—ð«–𬰪𱂀éŸéŸŽäª-䪓𩎘-ð©Ž£ð±‚éŸ-韑𩎤-𩎮𫠄𬰫-𬰭𮧱韒䪔𩎯-𩎷𱂂韓-韕䪕𩎸-ð©„𫖎韖-韚䪖-䪘ð©…-ð©Žð¬°®ð®§²éŸœ-韟䪙䪚ð©-ð©—韛韠ð©˜-ð©Ÿð«–韡韢䪛ð© -ð©§ð®§³éŸ£äªœð©¨-ð©­äªð©®-ð©±ð¬°¯éŸ¤éŸ¥ð©²ð©³ð«–ð©´ð©µð¬°°ð©¶-ð©»]
+[radical 178'=⻙韦:韦韧𬰱ð©¼ð«–‘𬰲𮧴𱂃韨ð©½ð©¾ð¬°³ð¬°´ð±‚„𱂅𫖒𮧵𱂆-𱂉韩𫖓韪韫ð©¿ð©€ð« …𬰵𱂊韬𫖔-𫖖𬰶𬰷𱂋𱂌𬰸]
+[radical 179=⾲韭:韭韮䪞ð©ð©‚ð±‚韯䪟ð©ƒéŸ°ð©„韱䪠ð©…-ð©ˆéŸ²äª¡äª¢ð©‰ð©Šäª£ð©‹ð©ð©Žð±‚Žäª¤ð©Œð©-ð©“䪥ð©”-ð©–]
+[radical 180=⾳音:音竟章䪦-䪨ð©—𮧶𮧷ð±‚韴韵䪩ð©˜ð©™ð«–—韶韷䪪ð©š-ð©ð«–˜ð¬°¹-𬰻𮧸ð©ž-ð©¦ð¬°¼ð®§¹ð®§ºéŸ¸äª«äª¬ð©§-ð©¬ð¬°½ð®§»ð±‚𱂑ð©­-ð©°éŸ¹éŸºäª­ð©±-ð©´ð«–™ð®§¼ð±‚’𱂓韻韼䪮䪯ð©µ-ð©¸ð®§½éŸ½-響ð©¹-ð©¾ð«–šð©¿-ð©‘𫖛𮧾䪰𩑂-𩑆𮧿頀𩑇𩑈𫖜𬰾𩑉𩑊]
+[radical 181=â¾´é :é ð©‘‹é ‚-é „ð©‘Œ-ð©‘𬰿項-頉䪱䪲ð©‘-𩑘𬱀頊-頓頙䪳-䪵𩑙-𩑯ð«–𮨀-𮨂𱂔𱂕頔-領頚䪶-䪾𩑰-ð©’Žð«–žð¬±ð¬±‚𮨃-𮨆頛-頣頦-頬䪿-ä«‚ð©’-𩒭𬱃𮨇-𮨊𱂖𱂗頤頥頭-頽䫃-ä«Šð©’®-𩓜𫖟𫖠𬱄-𬱇𮨋𮨌𱂘𱂙頿-é¡Šä«‹-ä«“ð©“-𩓿𫖡𬱈𬱉ð®¨-𮨔頾顋-é¡•ä«”-ä«ð©”€-𩔘𫖢𫖣𬱊𬱋𮨕𮨖顖-é¡žä«ž-䫧𩔙-𩔲𫖤𮨗-𮨛𱂚-𱂜顟-顣䫨-ä««ð©”³-𩕈𫖥𫖦𬱌ð¬±ð®¨œð®¨é¡¤-顨䫬-䫱𩕉-𩕞𫖧𬱎𮨞𮨟ð±‚é¡©-顫䫲-ä«´ð©•Ÿ-ð©•«ð«–¨ð¬±ð®¨ ð®¨¡é¡¬-顯𩕬-𩕽𱂞顰䫵䫶𩕾-ð©–…ð«–©ð¬±ð®¨¢ð®¨£é¡±é¡²ä«·ð©–†-𩖈𮨤𮨥𩖉-𩖎𬱑𱂟顳顴ð©–-𩖓𬱒]
+[radical 181'=⻚页:页-顷𬱓顸-须𫖪𱂠顼-预𫖫𫠆𬱔𬱕𱂡颅-颈𫖬𫖭𬱖-𬱚𱂢颉-é¢ð«–®-𫖱𬱛-𬱢𱂣-𱂨é¢-颖𫖲𫖳𬱣-𬱥𱂩-𱂬颗𩖕𩖖𫖴-𫖶𬱦-𬱬𱂭-𱂰题-é¢ð«–·ð¬±­-𬱯𱂱-𱂳颞-颡𫖸𬱰𱂴-𱂹𫖹𱂺颢颣𬱱𱂻颤𩖗颥𬱲颦𫖺颧𬱳]
+[radical 182=⾵風:風䫸𩖘𩖙𮨦颩颪䫹𩖚-𩖡颫颬䫺-䫽𩖢-𩖯𩖱-𩖳𫖻𮨧𱂼颭-颱䫾-䬃𩖴-𩗃𫖼𮨨𱂽-𱂿颲颳䬄䬅𠙬𩗄-𩗒𮨩-𮨫颴颵䬆-䬊𩗓-𩗧𮨬𱃀-𱃂颶颷䬋-ä¬ð©—¨-𩘄𫖽𮨭-𮨯𱃃-𱃆颸-颺䬑-䬗𩘅-ð©˜ð©˜-𩘛𫖾𫖿𬱴𱃇-𱃉颻-飀䬘-䬚𩘎𩘜-𩘬𫗀-𫗂𮨰𱃊é£-飄䬛䬜𩘭-𩘷𮨱𱃋-ð±ƒé£…-飊ä¬ð©˜¸-𩙇飋𩙈-ð©™ð«—ƒð«—„𮨲𱃎ð±ƒä¬žð©™Ž-ð©™ð«—…䬟𩙑-ð©™•ð«—†ð±ƒð©™–-𩙜𱃑飌é£ð©™ð©™žð±ƒ’𱃓𩙟𮨳𩙠-𩙤]
+[radical 182'=⻛风:风é£ð±ƒ”𫗇𫠇𬱵-𬱷𱃕é£-飒𩙥𩙦𫠈𬱸-𬱻𱃖𱃗𬱼𱃘-𱃚𩙧𫗈𬱽𱃛飓𩙨-𩙪𫗉𬱾-𬲀𮨴𱃜ð±ƒé£”飖𩙫𩙬𫗊ð¬²ð¬²‚𱃞飕飗𩙭𩙮𬲃𬲄飘𮨵𱃟飙飚𩙯𬲅𬲆𱃠𩙰𫗋𬲇𬲈]
+[radical 183=⾶飛:飛𩙱-𩙳𬲉𩙴䬠䬡𩙵-𩙹飜𩙺-𩙽𬲊é£ð©™¾]
+[radical 183'=⻜飞:飞𮨶𫗌]
+[radical 184=⾷食:食飠𠋑𩙿-ð©šð©šƒð©š‚飡-飤䬢䶿𩚄-𩚆飥-飨䬣-䬥𩚇-𩚔𮨷𮨸𱃡-𱃣飩-飲䬦-䬪𩚕-𩚧ð«—𬲋-𬲎𱃤飳-飹飻-飿䬫-䬴𩚨-𩛈𫗎𮨹-𮨻飺餀-é¤ä¬µ-䬻𩛉-𩛜ð«—-ð«—’ð¬²-𬲑𮨼𱃥-𱃧é¤-餙é¤ä¬¼-ä­‚ð©›-𩛹𫗓𬲒-𬲔𱃨𱃩餚-餜餞-餩䭃-䭇𩛺-𩜢𩜤-𩜬𬲕𬲖𮨽-𮩀𱃪𱃫餪-餵餷䭈-ä­ð©œ£ð©œ­-ð©˜ð«—”-𫗗𬲗-𬲙ð®©-𮩇餶餸-饃ä­-ä­”ð©™-ð©³ð©µ-ð©¼ð«—˜ð®©ˆ-𮩋𱃬-𱃮饄-饉䭕-ä­—ð§ˆð©´ð©½-𩞠𫗙𫗚𬲚𮩌-ð®©ð±ƒ¯é¥Š-饓䭘-䭜𡓷𩞡-𩞵𩞷-𩞽𫗛𬲛-𬲞ð®©ð±ƒ°é¥”-饙ä­-䭠𩞶𩞾-𩟒𬲟𬲠𮩑-𮩕饚-饜䉵䭡-䭤𩟓-𩟣𫗜ð«—䭥𩟤-𩟬𬲡𮩖𮩗é¥ð©Ÿ­-𩟵𮩘饞饟䭦䭧𩟶𮩙𮩚䭨𩟷-𩟺𬲢𬲣饠饡䭩𬲤𩟻饢𩟼𩟽]
+[radical 184'=⻠饣:饣-饥𬲥𬲦饦饧𫗞𬲧𬲨𱃱饨-饮𩟾-𩠀𫗟𫗠𬲩𬲪𱃲-𱃴饯-饴ð© ð© ‚ð«—¡-𫗣𬲫-𬲳𱃵-𱃷饵-饼𩠃𫗤𫗥𬲴-𬲷𮩛𮩜𱃸-𱃻饽-馂𩠄𩠅𩠇𫗦-𫗨𬲸-𬲻馃-馆𩠆𩠈𩠉𫗩𫗪𬲼-𬳂𱃼-𱃿馇馈馊馋𩠊𩠋𫗫-𫗯𬳃-𬳇ð®©ð±„€-𱄄馉馌-é¦ð© Œð«—°ð«—±ð¬³ˆ-ð¬³ð±„…馑馒ð© ð© Žð¬³Ž-ð¬³é¦“馔䭪ð© ð«—²ð«—³ð¬³‘𬳒𮩞𱄆𱄇𫗴𬳓𬳔𱄈-𱄊𫗵馕]
+[radical 185=⾸首:首ð© é¦—ð© ‘-𩠓𮩟𩠔𱄋𩠕-𩠙𫗶𮩠𱄌䭫䭬𩠚-𩠠𬳕𬳖𮩡𩠡-𩠧𫗷𬳗𬳘𮩢𮩣馘𩠨𩠩𫗸𬳙𮩤ð±„ä­­ð© ª-𩠭𮩥𮩦䭮𩠯𩠱𫗹𬳚𩠲𫗺𩠳𩠴𬳛𩠵-𩠷𫗻𩠸𩠹]
+[radical 186=⾹香:香𩠺馚𩠻-𩠽𬳜𱄎馛-é¦ä­¯ð© ¾-ð©¡ð©¡ƒð©¡„𩡂𩡅𩡆𫗼𫗽𮩧𮩨馞-馠𩡇𩡈ð±„馡-馣䭰-䭲𩡉-ð©¡‹ð©¡ð«—¾ð¬³ð¬³žð®©©ð®©ªé¦¤é¦¥ð©¡Œ-ð©¡Žð©¡-𩡒𫗿𬳟𬳠馦馧𩡓-𩡘𬳡-𬳣𮩫𮩬馨𩡙-𩡜𫘀ð«˜ð¬³¤-𬳦𮩭ð±„馩ð©¡-𩡡𫘂𬳧𮩮𩡢𩡣𫘃𮩯𮩰馪𩡤𮩱𥗶𩡥馫䭳𩡦𫘄]
+[radical 187=⾺馬:馬𩡧𫠉𩡨馭馮䭴𩡩-𩡯𮩲𱄑馯-馵䭵䭶𩡰-𩡶𫘅𬳨𮩳-𮩶馶-駇䭷-䭾𩡷-𩡾𩢀-𩢅𩢇-𩢌𫘆-𫘉𬳩𬳪𮩷-𮩹𱄒駈-駠䭿-䮅𩡿𩢆ð©¢-𩢭𮩺-𮩽𱄓-𱄗駡-駲䮆-ä®ð©¢®-𩣕𫘊𬳫𮩾-𮪄𱄘-𱄜駴-騃䮎-ä®’ð©£–-𩣬𩤷𬳬𮪅-𮪇ð±„-𱄢駳騄-験䮓-䮛𩣭-𩤖𩤞𫘋-𫘎𬳭-𬳯𮪈-𮪌𱄣騔-騨䮜-䮢𩤗-ð©¤ð©¤Ÿ-𩤶𩤸-𩤼ð«˜-𫘑ð®ª-𮪔𱄤-𱄨騩-騸䮣-䮩𩤽-𩥪𫘒-𫘖𮪕𱄩-𱄭騹-驇龭䮪-䮱𩥫-ð©¦ð¬³°ð®ª–-𮪙𱄮-𱄱驈-驕䮲-䮶𩦂-ð©¦ð«˜—𬳱𱄲-𱄴驖-驜䮷-䮹𩦞-𩦵𫘘𮪚𱄵𱄶é©-驟䮺-䮼𩦶-ð©§ð«˜™ð®ª›ð±„·ð±„¸ä®½ð©§‚-𩧎𮪜𱄹-𱄻驠-驣䮾ð©§-𩧓ð®ªð®ªžé©¤-驧龮䮿𩧔-𩧗𫘚𮪟驨驩䯀𩧘-𩧞𮪠驪ä¯ð©§Ÿð©§ é©«ð©§¡-𩧤𬳲䯂𩧥]
+[radical 187'=⻢马:马-驰𫘛𱄼-𱄿驱-驴𩧦𫘜ð«˜ð¬³³ð±…€-𱅂驵-骀𩧧-𩧭𩧯𫘞𫘟𫠊𬳴-𬳸𱅃-ð±…ˆéª-骉䯃𩧮𩧰-𩧶𫘠𫘡𬳹-𬳾𱅉-𱅒骊-éªä¯„𩧷-𩧺𫘢-𫘤𬳿𬴀𮪡𮪢𱅓-ð±…™éª-骖𩧻-𩧽𫘥-𫘧ð¬´ð¬´‚𱅚𱅛骗-骛𩧾-𩨃𩨅-𩨊𫘨𫘩𬴃𬴄𮪣𱅜-𱅟骜-骟䯅𩨄𩨋-ð©¨ð«˜ª-𫘬𬴅𮪤𱅠-𱅥骠-骢𫘭𫘮𫠋𬴆-𬴈𱅦-𱅩骣𩨎ð©¨ð«˜¯ð¬´‰ð¬´Šð®ª¥ð±…ªð±…«ð«˜°ð« Œð¬´‹éª¤ð¬´Œð©¨ð¬´éª¥ð¬´Žð±…¬éª¦éª§ð¬´ð«˜±ð¬´]
+[radical 188=⾻骨:骨䯆骩䯇𩨑-𩨓𮪦骪-骮𩨔-𩨛骯-骱䯈䯉𩨜-𩨫骲-骷䯊-䯎𩨬-𩨼𮪧𮪨骸-骼ä¯-䯔𩨽-𩩈𫘲𮪩𱅭-𱅯骽骾䯕-䯚𩩉-𩩖𬴑𬴒𮪪-𮪬骿-é«ä¯›ä¯œð©©—-𩩬𮪭-𮪯𱅰-𱅲髂-é«…ä¯-䯠𩩭-𩩿𫘳𫘴𮪰𮪱髆-髌䯡𩪀-𩪈𮪲é«-é«ä¯¢ð©ª‰-𩪖𮪳𮪴é«ä¯£ð©ª—-𩪟𱅳髑-體䯤𩪠-𩪫𮪵髕䯥𩪬-𩪱髖䯦𩪲-𩪶𮪶髗𩪷-𩪺𬴓𮪷𩪻-𩪾]
+[radical 189=⾼高:高髙䯧𫘵𬴔𱅴-𱅶䯨𩪿𩫀𱅷髚䯩ð©«-𩫉𬴕𮪸髛𩫊-ð©«ð«˜¶ð®ª¹ð±…¸-𱅺𩫎-𩫔𫘷𬴖𬴗𱅻𱅼𩫕-𩫙𬴘髜𩫚-ð©«ð¬´™ð¬´šð®ªºä¯ªð©«ž-𩫤𬴛𮪻𮪼𩫥𩫦𬴜é«ä¯«ð©«§ð¬´-𬴟髞𩫨-𩫪𬴠𱅽𱅾𩫫𩫬𬴡䯬𩫭𬴢𩫮𩫯𬴣𩫰-𩫲𬴤-𬴦𩫳]
+[radical 190=⾽髟:髟𫘸髠䯭䯮𩫴-𩫸髡髢𩫹-𩫾𫘹𫘺髣-髪䯯-䯴𩫿-ð©¬ð«˜»ð¬´§ð®ª½-𮪿髫-髴䯵䯶𩬑-𩬯𫘼𮫀-𮫂𱅿髵-髻鬇䯷䯸𩬰-𩭆𫘽𬴨𬴩𮫃-𮫅髼-鬂䯹-䯼𩭇-ð©­ð«˜¾ð«˜¿ð¬´ªð®«†-𮫈𱆀ð±†é¬ƒ-鬆鬈䯽-䰃𩭞-𩭹𫙀ð«™ð¬´«ð¬´¬ð®«‰-𮫌鬉-é¬ä°„-䰇𩭺-𩮕𫙂𬴭𬴮ð®«ð®«Žð±†‚-𱆄é¬-鬓䰈-ä°‹ð©®–-ð©®®ð®«ð±†…鬔-鬘é¬ä°Œä°ð©®¯-𩯂𫙃𱆆鬙-鬜䰎𩯃-𩯚ð®«ð®«‘𱆇鬞-鬠𩯛-𩯥𬴯𮫒鬡鬢ä°-䰒𩯦-𩯯鬣䰓䰔𩯰-𩯹䰕𩯺-𩰀𮫓𱆈鬤ð©°-𩰇䰖𩰈𩰉]
+[radical 191=⾾鬥:鬥𩰊-𩰌鬦ð©°-ð©°é¬§ð©°é¬¨ð©°‘𩰒鬩𩰓𩰔𬴰𮫔鬪䰗𩰕𮫕䰘𩰖-𩰘鬫𩰙-𩰛鬬鬭𩰜-𩰞𱆉𬴱鬮𩰟]
+[radical 192=⾿鬯:鬯𮫖𱆊𩰠-𩰦𮫗𩰧𩰨𮫘鬰𩰩𩰪鬱]
+[radical 193=⿀鬲:鬲𮫙𬴲𩰫𩰬𬴳䰙䰚𩰭𩰮𫙄䰛𩰯𩰰𫙅𬴴𱆋-ð±†é¬³ä°œð©°±-𩰸𬴵鬴𩰹-𩰽𬴶𱆎鬵鬶𩰾-𩱂鬷𩱃-𩱆𬴷鬸𩱇-𩱋鬹鬺𩱌-𩱑𫙆ð±†ð±†é¬»ä°ð©±’-𩱕𬴸𩱖-𩱣𬴹𱆑䰞ð©»ð©±¤ð©±¥ð¬´ºð®«šð±†’𩱦-𩱪𱆓𱆔𩱫𩱬𮫛𩱭𩱮𫙇𩱯-𩱳𬴻𬴼𩱴-𩱶𱆕𩱷𩱸]
+[radical 194=â¿é¬¼:鬼𩱹-𩱼𫙈𬴽𱆖鬽𩱽-𩲉𬴾鬾-魂䰟𩲊-𩲠𫙉𮫜ð®«ð±†—𱆘魃-魆䰠䰡𩲡-𩲹魇䰢䰣𩲺-𩳋𫙊𬴿𮫞𮫟𱆙𱆚魈魉𩳌-𩳡𫙋𬵀𮫠𱆛魊-é­ä°¤-䰧𩳢-𩳴𫙌ð«™ð®«¡-𮫣𱆜ð±†ä°¨ä°©ð©³µ-𩴅𮫤𱆞𱆟é­ä°ªð©´†-ð©´ð®«¥ð®«¦é­‘-é­”ð©´-𩴛𮫧魕魖䰫-ä°­ð©´œ-𩴭𫙎䰮𩴮-𩴰𮫨魗-魙䰯䰰𩴱-𩴹𱆠𱆡𩴺-𩴿𮫩𩵀-𩵃𮫪𩵄-𩵈𮫫𩵉𩵊䰱𱆢]
+[radical 195=â¿‚é­š:魚𤋳𩵋𮫬-𮫯䰲魛-魞䰳𩵌-𩵓ð«™ð¬µð¬µ‚𱆣魟-魢䰴-䰶𩵔-𩵟𩶷ð«™ð¬µƒð¬µ„𮫰𱆤魣-魹䰷-䰾𩵠-𩶀𫙑𫙒𬵅𬵆𮫱𮫲𱆥-𱆨魺-鮘鮣䰿-䱉ð©¶-𩶠𩾀𫙓-𫙗𬵇-𬵌𮫳𮫴𱆩-𱆫鮙-鮢鮤-鮴鮺䱊-䱎𩶡-𩶶𩶸-𩷌𫙘-𫙟ð¬µ-𬵑𮫵-𮫸𱆬鮵-鮹鮻-鯓鯽ä±-䱘ð©·-𩷶𩾉𫙠-𫙣𬵒-𬵖𮫹-𮫽𱆭-𱆲鯔-鯵鯻䱙-䱪𩷷-𩸽𫙤-𫙧𬵗-𬵛𮫾𮫿𱆳𱆴鯶-鯺鯼鯾-鰛鰠䱫-䱴𩸾-𩹰𫙨-𫙪𬵜-𬵟𮬀-𮬅𱆵-𱆹鰜-é°Ÿé°¡-é°°é¿ä±µ-䱽𩹱-𩺬𫙫-𫙯ð« ð¬µ -𬵣𮬆-𮬊𱆺-𱆼鰱-鱈鷠鿳䱾-䲈𩺭-ð©»—ð«™°-𫙶𬵤-𬵩𮬋-ð®¬ð±†½ð±†¾é±‰-鱛䲉-ä²ð©»˜-ð©¼ð«™·-𫙼𬵪-𬵭𮬎-𮬒𱆿-ð±‡é±œ-鱧鱩-鱫ä²-䲕𩼂-𩼤ð©¾ð«™½-ð«šð« Žð¬µ®-𬵱𮬓𮬔𱇂鱨鱬-é±°ä²–-䲘𩼥-𩼺𫚂𫚃𬵲-𬵵𮬕𱇃鱱-鱶䲙𩼻-𩽌𫚄𬵶𮬖𱇄-𱇇鱷鱸䲚䲛ð©½-𩽙𬵷-𬵹𮬗𮬘𱇈𩽚-𩽦𫚅𬵺𮬙𮬚𱇉鱹鿩𩽧-𩽯𬵻𬵼鱺𩽰-𩽲𫚆𬵽𬵾𱇊𩽳-𩽸𫚇𬵿鱻𱇋𱇌䲜]
+[radical 195'=⻥鱼:é±¼ð±‡é±½ð¬¶€ð¬¶ð±‡Žé±¾ð«šˆ-𫚊𬶂-𬶄ð±‡é±¿-鲃鿕ä²ð©½¹-𩽻𫚋-ð«šð« ð¬¶…-𬶉𮬛ð±‡-𱇙鲄-é²é¿´ä²žä²Ÿð«šŽ-ð«š’ð« ð¬¶Š-ð¬¶ð±‡š-𱇤鲑-鲟𩽼-𩽿𫚓-𫚘𬶎-ð¬¶ð®¬œð®¬ð±‡¥-𱇫鲠-鲬鿵鿶ð©¾-𩾄𫚙-𫚛𬶑-𬶕𮬞𱇬-𱇴鲭-鲻𩾅-𩾈𫚜-𫚡𬶖𬶗𬶙-ð¬¶ð®¬Ÿð®¬ ð±‡µ-ð±ˆé²¼é²½é²¿-鳋鿷䲠䲡𩾊𩾋𫚢-𫚥𫠑𬶘𬶞-𬶨𱈂-𱈈鲾鳌-é³’ä²¢-䲤𫚦𬶩𬶪𮬡𮬢𱈉-𱈎鳓-鳛鿸鿹𩾌𫚧𫚨𫠒𬶫-𬶭𮬣ð±ˆ-𱈑鳜-鳟𫚩𫚪𬶮-𬶴𱈒-𱈕鳠-鳣𫚫𬶵𬶶𱈖鳤𫚬𬶷𱈗𱈘𩾎𫚭𬶸𮬤𱈙𬶹𱈚-𱈜𬶺𬶻]
+[radical 196=⿃鳥:鳥𫠓鳦ð©¾-𩾑𫚮鳧-鳰䲥𩾒-𩾜𬶼𮬥ð±ˆé³±-鳶䲦-䲫ð©¾-𩾯𬶽-𬶿𮬦-𮬪鳷-鴉鴋-鴎䲬-䲸𩾰-𩿛𫚯-𫚲𬷀-𬷄𮬫-𮬯𱈞𱈟鴊é´-鴬䲹-䳊𩿜-𪀑𫚳-𫚷𫠔𬷅-𬷌𮬰-𮬲𱈠-𱈥鴭-鵉䳋-䳔𪀒-ðª‰ð«š¸-ð«š»ð¬·-𬷒𮬳-𮬸𱈦𱈧鵊-鵣鵥䳕-䳜ðªŠ-ðª¶ð«š¼-𫛀𬷓𬷔𬷖-𬷛𮬹-𮬻𱈨-𱈬鵦-é¶é¶‘ä³-ä³¥ðª·-𪂵ð«›-𫛈𬷜-𬷡𮬼-𮭃𱈭-𱈰é¶é¶’-鶫䳦-䳰𪂶-𪃹𫛉-𫛋𬷢-𬷧𮭄-𮭇𱈱-𱈳鶬-é·Šé·Œ-é·ä³±-䳶𪃺-𪄬𫛌-ð«›ð¬·¨-𬷭𮭈-ð®­ð±ˆ´-𱈸鷋é·-é·Ÿä³·-䳽𪄭-𪅮ð«›ð« •ð¬·®-𬷰ð®­-𮭕𱈹鷡-鷸鷺-鷼䳾-䴆𪅯-𪆫𪆭𫛑-𫛕𬷱-𬷳𮭖𱈺-𱈽鷹鷽-鸊䴇-䴋𪆬𪆮-ðª‡ð«›–𬷴-𬷶𮭗𮭘𱈾-𱉂鸋-鸒䴌ä´ðª‡‘-ðª‡ðª‡Ÿ-𪇬𫛗𬷷𮭙𮭚𱉃鸓鸔䴎𪇭-𪈂𫛘𬷸𮭛𮭜𱉄鸕-鸗ä´ðªˆƒ-𪈗𬷹ð®­ð®­žð±‰…𱉆鸘-鸚𪈘-𪈤鸛鸜𪈥-𪈭𮭟é¸é¸žð§– ðªˆ®-𪈳𫛙ä´ð©–”𪈴-𪈷𬷺𪈸-𪈽𮭠䴑䴒𪈾-𪉀]
+[radical 196'=⻦鸟:鸟𬷻𱉇鸠鸡𬷼𬷽𱉈𱉉鸢-鸤𬷾𱉊-𱉌鸥-鸩䴓ðª‰-𪉃𫛚-𫛞𫠖𬷿𬸀𮭡-ð®­£ð±‰-𱉔鸪-鸶𪉄𫛟-𫛤ð¬¸-𬸇𮭤𱉕-𱉢鸷-鸿䴔䴕𪉅-𪉋𫛥-𫛪𬸈-𬸌𮭥𱉣-𱉳鹀-鹈鿺𪉌ðª‰ð«›«-𫛯𬷕ð¬¸-𬸑𮭦𮭧𱉴-𱉿鹉-鹔䴖𪉎𫛰-𫛵𬸒-𬸗𱊀-𱊎鹕-é¹—é¹™-鹜䴗ðª‰ðª‰ð«›¶-𫛼𬸘-𬸟ð±Š-𱊘鹘é¹-鹤䴘𪉑-𪉔𫛽𫛾𬸠-𬸣𮭨𮭩𱊙-𱊟鹥-鹨𫛿-𫜂𬸤-𬸦𮭪𱊠-𱊥鹩-鹬𫜃𫜄𬸧-𬸫𱊦-𱊩鹭-鹰䴙𫜅𬸬-𬸯𱊪-𱊰鹱鹲𫜆𱊱𪉕𱊲𱊳𬸰𱊴鹳鹴𱊵𬸱]
+[radical 197=â¿„é¹µ:鹵𠧸𪉖𪉗鹶䴚𪉘-𪉛𬸲𱊶鹷𪉜-𪉡𮭫𱊷𪉢𫜇𱊸䴛𪉣-𪉥𫜈𬸳𮭬𱊹鹸𪉦-𪉬𮭭𮭮鹹𪉭-𪉴𫜉𮭯鹺鹻䴜𪉵-𪉾ä´ðª‰¿-𪊂鹼鹽𪊃-𪊅𬸴䴞𪊆-𪊊]
+[radical 197'=⻧å¤:𱊺𮭰𬸵𱊻𫠗𬸶鹾𫜊𬸷-𬸹𱊼𱊽]
+[radical 198=⿅鹿:鹿𢉖𮭱𬸺麀-麂𪊋𪊌𫜋䴟ðªŠðªŠŽð®­²éºƒéº„ä´ -ä´¢ðªŠ-𪊚𫜌𬸻麅-麈䴣-䴥𪊛-𪊤𬸼𮭳麉-麋𪊥-𪊳ð«œð¬¸½ð¬¸¾ð®­´éºŒ-éºä´¦ðªŠ´-𪋃𫜎𮭵𱊾𱊿麑-麗䴧𪋄-ðª‹ð¬¸¿ð®­¶ð®­·éº˜-麛𪋎-𪋖𮭸麜éºä´¨ðª‹—-𪋛𬹀𮭹𮭺麞䴩𪋜-𪋠ð¬¹ð±‹€ð±‹éºŸðª‹¡-𪋩ð«œéº ä´ªä´«ðª‹ª-𪋭麡𪋮-𪋵麢𪋶𪋷𱋂𪋸麣𪋹麤𪋺𪋻]
+[radical 199=⿆麥:麥𪋼-𪌀麧䴬-ä´®ðªŒ-𪌄麨-麫䴯䴰𪌅-𪌓麬-麮䴱-䴴𪌔-𪌚𪌜-𪌡𮭻麯麰䴵𪌢-𪌬𬹂麱麲䴶-䴸𪌭-𪌻麳麴䴹-䴽𪌼-ðª‹ð«œð¬¹ƒð®­¼ð®­½ð±‹ƒéºµðªŒ-ðªšð®­¾ä´¾-äµ€ðª›-ðª¢ð®­¿ð®®€éº¶äµäµ‚äµ…ðª£-ðª±ð®®äµƒðª²-ðª·ð¬¹„䵄ðª¸-ðª¾äµ†ðª¿-𪎅𮮂麷𪎆𪎇]
+[radical 199'=⻨麦:麦ðªŽð®®ƒð±‹„𱋅𪎈𬹅𱋆-𱋈麸𪎉𪎊𫜑𮮄𮮅𱋉𪎋𫜒𮮆𱋊-ð±‹ð¬¹†ð®®‡ð±‹-𱋕𪎌𫜓𬹇-𬹉𱋖-𱋘麹𪎎ðªŽð«œ”𬹊-𬹌𱋙-ð±‹éººð±‹ž-𱋥𫜕𱋦𱋧ðªŽð¬¹ð±‹¨-𱋪𬹎𱋫-𱋮]
+[radical 200=⿇麻:麻𪎑麼麽𪎒-𪎔麾䵇𪎕-𪎚𮮈-𮮊𪎛-𪎢𫜖麿𪎣𪎤ð¬¹ð®®‹ð±‹¯é»€ðªŽ¥-𪎧𫜗𱋰é»äµˆäµ‰ðªŽ¨ðªŽ©ð±‹±ðªŽª-𪎯𮮌黂𪎰𪎱ð®®ðªŽ²ð®®Ž]
+[radical 201=⿈黃:黃黄𪎳𪎴ð¬¹é»…黆䵊𪎵-𪎹𫜘黇-黉𪎺ð®®ð±‹²é»Šé»‹äµ‹ðªŽ»-ðªäµŒðª‚-ðª…𬹑𱋳äµðª†-ðª’𱋴䵎ðª“-ðªžð¬¹’äµðªŸ-ðª£ð¬¹“äµðª¤-ðª¦é»Œðª§-ðª¬]
+[radical 202=⿉é»:é»ð®®ð®®‘ðª­é»Žäµ‘ðª®ðª¯äµ’䵓ðª°-ðªµð¬¹”é»ðª¶-ðª€ð®®’ðªäµ”-äµ–ðª‚-ðª†ð±‹µäµ—-äµ™ðª‡-ðªŠé»äµšðª‹äµ›ðªŒ-ðªäµœðª’ð®®“ðª‘ðª“-ðª–]
+[radical 203=⿊黑:黑黒ðª—äµðª˜äµžðª™-ðª›å¢¨é»“䵟䵠ðªœ-ðª£é»”-默䵡ðª¤-ðª±ð®®”𮮕黚-點䵢䵣ðª²-ðª¾ð®®–𱋶黟-黡䵤-䵧ðª¿-𪑇𬹕𬹖𮮗𮮘黢黣䵨䵩𢖛𪑈-𪑑𬹗𱋷𱋸黤-黪䵪-䵬𪑒-𪑢𪑤𫜙𫜚𮮙-𮮛黫-黯䵭-䵯𪑣𪑥-𪑽𫜛𬹘𮮜黰黱𪑾-𪒎𬹙𬹚黲-é»´äµ°ðª’-𪒗ð®®ð±‹¹äµ±ðª’˜-𪒨𱋺黵䵲-䵴𪒩-𪒳黶䵵𪒴-𪒸𮮞黷𪒹-𪒾𬹛𮮟黸𪒿-𪓊]
[radical 204=⿋黹:黹𮮠黺𫜜黻𪓋黼𪓌-ðª“𬹜]
-[radical 205=⿌黽:黽𪓑-𪓓ð¬¹ð®®¡ð¬¹žé»¿ðª“”-𪓙𮮢鼀-鼂䵶𪓚-𪓠𬹟鼃鼄䵷𪓡-𪓦ð«œð®®£ðª“§-𪓫𬹠𬹡𮮤鼅𪓬𪓭𬹢䵸𪓮-𪓶鼆鼇𪓷𪓸䵹𪓹鼈鼉𪓺𪓽𫜞鼊𪓼𪓾-ðª”]
-[radical 205'=⻪黾:黾鼋鼌𬹣𬹤𫜟é¼]
+[radical 205=⿌黽:黽𪓑-𪓓ð¬¹ð®®¡ð¬¹žé»¿ðª“”-𪓙𮮢鼀-鼂䵶𪓚-𪓠𬹟鼃鼄䵷𪓡-𪓦ð«œð®®£ðª“§-𪓫𬹠𬹡𮮤𱋻𱋼鼅𪓬𪓭𬹢䵸𪓮-𪓶𱋽鼆鼇𪓷𪓸䵹𪓹鼈鼉𪓺𪓽𫜞鼊𪓼𪓾-ðª”]
+[radical 205'=⻪黾:黾鼋鼌𱋾-𱌂𬹣𱌃𬹤𱌄𱌅𫜟𱌆-𱌈é¼ð±Œ‰]
[radical 206=â¿é¼Ž:鼎𪔂é¼-鼑𪔃鼒䵺𪔄-𪔆𫜠𬹥𮮥𪔇𬹦-𬹨𪔈𬹩𪔉𫜡𬹪䵻䵼𬹫𪔊𬹬]
-[radical 207=⿎鼓:鼓鼔𡔷𮮦𪔋𪔌𡒡ðª”-ðª”鼕鼖䵽-䵿ðª”-𪔓𮮧鼗䶀𪔔-𪔛𮮨𪔜-𪔡𮮩鼘-é¼›ä¶ðª”¢-𪔭鼜𪔮é¼é¼žðª”¯-𪔲鼟𥀻𪇞𪔳𪔴𮮪𮮫𥀼𪔵𪔶𥀽𪔷𥀾]
-[radical 208=â¿é¼ :鼠鼡𫜢𪔸𪔹䶂𪔺-𪔼鼢-鼤䶃𪔽-𪕈𮮬鼥-鼬䶄𪕉-𪕑𫠘𬹭𮮭鼭䶅𪕒-𪕙𪕟鼮-鼰𪕚-𪕞𪕠-𪕧鼱䶆𪕨-𪕪𬹮𮮮鼲-鼵䶇𪕫-𪕴鼶-鼹䶈䶉𪕵-𪕾𪖀-𪖉𫜣𮮯𪖊𪖋鼺𪖌-ðª–]
-[radical 209=â¿é¼»:鼻𮮰-ð®®µðª–鼼鼽𪖑𪖒鼾鼿𪖓𪖔𮮶䶊䶋𪖕-𪖙𫜤齀é½ä¶Œðª–š-𪖠ä¶ä¶Žðª–¡-𪖤𬹯𮮷ä¶ðª–¥-𪖬齂𪖭𪖮𬹰齃齄𪖯-𪖲齅齆𪕿𪖳-𪖵齇𪖶-𪖽𮮸齈ä¶ðª–¾-𪗀䶑ðª—𪗂𮮹𪗃齉]
+[radical 207=⿎鼓:鼓鼔𡔷𮮦𪔋𪔌𡒡ðª”-ðª”𱌊鼕鼖䵽-䵿ðª”-𪔓𮮧𱌋鼗䶀𪔔-𪔛𮮨𪔜-𪔡𮮩鼘-é¼›ä¶ðª”¢-𪔭鼜𪔮é¼é¼žðª”¯-𪔲𱌌鼟𥀻𪇞𪔳𪔴𮮪𮮫𥀼𪔵𪔶𥀽𪔷𥀾]
+[radical 208=â¿é¼ :鼠鼡𫜢𪔸𪔹䶂𪔺-𪔼ð±Œé¼¢-鼤䶃𪔽-𪕈𮮬鼥-鼬鿻鿼䶄𪕉-𪕑𫠘𬹭𮮭鼭䶅𪕒-𪕙𪕟𱌎ð±Œé¼®-鼰𪕚-𪕞𪕠-𪕧鼱䶆𪕨-𪕪𬹮𮮮鼲-鼵䶇𪕫-𪕴鼶-鼹䶈䶉𪕵-𪕾𪖀-𪖉𫜣𮮯ð±Œðª–Šðª–‹é¼ºðª–Œ-ðª–]
+[radical 209=â¿é¼»:鼻𮮰-ð®®µðª–鼼鼽𪖑𪖒𱌑𱌒鼾鼿𪖓𪖔𮮶䶊䶋𪖕-𪖙𫜤𱌓齀é½ä¶Œðª–š-𪖠𱌔ä¶ä¶Žðª–¡-𪖤𬹯𮮷𱌕𱌖ä¶ðª–¥-𪖬齂𪖭𪖮𬹰齃齄𪖯-𪖲齅齆𪕿𪖳-𪖵齇𪖶-𪖽𮮸齈ä¶ðª–¾-𪗀䶑ðª—𪗂𮮹𪗃齉]
[radical 210=⿑齊:齊𪗄𬹱𮮺-𮮼𪗅齋䶒䶓𪗆齌𠆜𪗇𪗈é½ðª—‰ðª—Šð¬¹²ðª—‹ðª—Œé½Žðª—Žðª—é½ðª—-𪗓]
-[radical 210'=⻬é½:é½ð¬¹³é½‘]
-[radical 211=â¿’é½’:齒𣦋𮮽齓齔𪗔-𪗗𮮾齕䶔𪗘-𪗚𮮿齖-齘䶕䶖𪗛-𪗤𫠙𮯀ð®¯é½™-齣䶗-䶙𠎜𪗥-𪗶𬹴𮯂𮯃齤-齩䶚䶛𪗷-ðª˜ð«œ¥ð¬¹µ-𬹷𮯄-𮯆齪-齬䶜ä¶ðª˜Ž-𪘤𫜦𮯇齭-齱䶞䶟𪘥-𪘸𮯈-𮯊齲-齷䶠-䶢𪘹-𪙈𫠛𮯋-𮯎齸-齻䶣䶤𪙉-𪙙ð®¯ð®¯ä¶¥ä¶¦ðª™š-𪙢𮯑-𮯓䶧𪙣-𪙯𫜧𬹸𮯔-𮯖齼齽䶨𪙰-𪙵𮯗䶩䶪𪙶-𪚀𬹹ðªš-𪚄𮯘𪚅-𪚉齾䶫𪚊-𪚎]
-[radical 211'=⻮齿:齿-龂𫜨𬹺-𬹽龃-龆𫠚𬹾-𬺀𮯙龇龈ðªšð«œ©ð«œªð¬º-𬺅龉龊𫜫𬺆𬺇ðªšð«œ¬ð«œ­ð« œð¬ºˆ-𬺌龋龌𫜮ð¬ºð¬ºŽð«œ¯ð¬º-𬺒𫜰𬺓-𬺖]
-[radical 212=â¿“é¾:é¾-é¾ðªš‘-𪚔𬺗𬺘龑𪚕-𪚘𪚚𪚛龒𪚙龓-龕䶬𪚜-𪚟𮯚𪚠𪚡𫜱𬺙𬺚𪚢-𪚤龖-龘𪚥]
-[radical 212'=â»°é¾™:龙𬺛䶭䶮𬺜龚龛𫜲ð¬º]
+[radical 210'=⻬é½:é½ð¬¹³ð±Œ—-𱌙齑]
+[radical 211=â¿’é½’:齒𣦋𮮽齓齔𪗔-𪗗𮮾齕䶔𪗘-𪗚𮮿齖-齘䶕䶖𪗛-𪗤𫠙𮯀ð®¯ð±Œš-𱌜齙-齣䶗-䶙𠎜𪗥-𪗶𬹴𮯂𮯃ð±Œé½¤-齩䶚䶛𪗷-ðª˜ð«œ¥ð¬¹µ-𬹷𮯄-𮯆齪-齬䶜ä¶ðª˜Ž-𪘤𫜦𮯇𱌞齭-齱䶞䶟𪘥-𪘸𮯈-𮯊齲-齷䶠-䶢𪘹-𪙈𫠛𮯋-𮯎𱌟-𱌡齸-齻䶣䶤𪙉-𪙙ð®¯ð®¯ð±Œ¢ð±Œ£ä¶¥ä¶¦ðª™š-𪙢𮯑-𮯓𱌤䶧𪙣-𪙯𫜧𬹸𮯔-𮯖𱌥齼齽䶨𪙰-𪙵𮯗𱌦䶩䶪𪙶𱌧𪙷-𪚀𬹹𱌨ðªš-𪚄𮯘𪚅-𪚉齾䶫𪚊-𪚎]
+[radical 211'=⻮齿:齿-é¾ð±Œ©é¾‚𫜨𬹺-𬹽𱌪龃-龆𫠚𬹾-𬺀𮯙𱌫-𱌯龇龈ðªšð«œ©ð«œªð¬º-𬺅𱌰-𱌳龉龊𫜫𬺆𬺇𱌴𱌵ðªšð«œ¬ð«œ­ð« œð¬ºˆ-𬺌𱌶-𱌸龋龌𫜮ð¬ºð¬ºŽð±Œ¹ð«œ¯ð¬º-𬺑𱌺-𱌽𬺒𫜰𬺓-𬺖]
+[radical 212=â¿“é¾:é¾-é¾ðªš‘-𪚔𬺗𬺘龑𪚕-𪚘𪚚𪚛龒𪚙𱌾龓-龕䶬𪚜-𪚟𮯚𱌿𪚠𪚡𫜱𬺙𬺚𪚢ð±€ðªš£ðªš¤é¾–-龘𪚥]
+[radical 212'=â»°é¾™:龙𬺛ð±ä¶­ä¶®ð¬ºœð±‚龚龛𫜲ð¬º]
[radical 213=⿔龜:龜𪚦𪛉𮯛-𮯟𪚨䶯𪚩𪚪䶰𪚫-𪚵é¾ä¶±ä¶²ðªš§ðªš¶-𪛀𪓻ðª›-𪛄龞𪛅𪛆ð« ðª›‡ðª›ˆ]
-[radical 213'=⻳龟:龟𬺞𫜳]
-[radical 214=â¿•é¾ :龠龡䶳𪛊𬺟龢龣䶴𪛋-ðª›ð¬º ð®¯ é¾¤é¾¥ðª›Ž-𪛑䶵𪛒𪛓𫜴𬺡𪛔-𪛖]
+[radical 213'=⻳龟:龟𬺞ð±ƒ-ð±†ð«œ³ð±‡ð±ˆ]
+[radical 214=â¿•é¾ :龠龡䶳𪛊𬺟龢ð±‰é¾£ä¶´ðª›‹-ðª›ð¬º ð®¯ ð±Šé¾¤é¾¥ðª›Ž-𪛑䶵𪛒𪛓𫜴𬺡𪛔-𪛖]
[radical end]
# Top Byte => Reordering Tokens
[top_byte 00 TERMINATOR ]
[top_byte 01 LEVEL-SEPARATOR ]
[top_byte 02 FIELD-SEPARATOR ]
-[top_byte 03 SPACE PUNCTUATION ] # 688 primary weights
+[top_byte 03 SPACE PUNCTUATION ] # 694 primary weights
[top_byte 04 SPACE PUNCTUATION ]
[top_byte 05 SPACE PUNCTUATION ]
[top_byte 06 SPACE PUNCTUATION ]
@@ -263,9 +263,9 @@
[top_byte 09 SPACE PUNCTUATION ]
[top_byte 0A SPACE PUNCTUATION ]
[top_byte 0B SPACE PUNCTUATION ]
-[top_byte 0C SYMBOL CURRENCY ] # 6120 primary weights
+[top_byte 0C SYMBOL CURRENCY ] # 6392 primary weights
[top_byte 0D SYMBOL CURRENCY ]
-[top_byte 0E DIGIT ] # 504 primary weights
+[top_byte 0E DIGIT ] # 507 primary weights
[top_byte 0F DIGIT ]
[top_byte 10 DIGIT ]
[top_byte 11 DIGIT ]
@@ -292,7 +292,7 @@
[top_byte 26 DIGIT ]
[top_byte 27 REORDER_RESERVED_BEFORE_LATIN ]
[top_byte 28 REORDER_RESERVED_BEFORE_LATIN ]
-[top_byte 29 Latn ] # 394 primary weights
+[top_byte 29 Latn ] # 398 primary weights
[top_byte 2A Latn ]
[top_byte 2B Latn ]
[top_byte 2C Latn ]
@@ -353,7 +353,7 @@
[top_byte 63 Geor COMPRESS ] # 87 primary weights
[top_byte 64 Armn COMPRESS ] # 42 primary weights
[top_byte 65 Hebr Phnx Samr COMPRESS ] # 73 primary weights
-[top_byte 66 Arab COMPRESS ] # 219 primary weights
+[top_byte 66 Arab COMPRESS ] # 229 primary weights
[top_byte 67 Syrc Mand Thaa Nkoo Tfng Ethi COMPRESS ] # 661 primary weights
[top_byte 68 Deva COMPRESS ] # 103 primary weights
[top_byte 69 Beng COMPRESS ] # 67 primary weights
@@ -363,20 +363,20 @@
[top_byte 6D Taml COMPRESS ] # 51 primary weights
[top_byte 6E Telu COMPRESS ] # 75 primary weights
[top_byte 6F Knda COMPRESS ] # 75 primary weights
-[top_byte 70 Mlym COMPRESS ] # 74 primary weights
-[top_byte 71 Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks COMPRESS ] # 1444 primary weights
+[top_byte 70 Mlym COMPRESS ] # 75 primary weights
+[top_byte 71 Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks COMPRESS ] # 1505 primary weights
[top_byte 72 Thai COMPRESS ] # 65 primary weights
[top_byte 73 Laoo Tavt COMPRESS ] # 132 primary weights
[top_byte 74 Tibt Zanb Soyo COMPRESS ] # 208 primary weights
-[top_byte 75 Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr COMPRESS ] # 805 primary weights
-[top_byte 76 Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam COMPRESS ] # 1415 primary weights
+[top_byte 75 Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr COMPRESS ] # 806 primary weights
+[top_byte 76 Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam COMPRESS ] # 1414 primary weights
[top_byte 77 Runr Hung Orkh COMPRESS ] # 135 primary weights
[top_byte 78 Vaii Bamu Bass Mend Medf Adlm COMPRESS ] # 1218 primary weights
[top_byte 79 Hang COMPRESS ] # 358 primary weights
[top_byte 7A Hira Hrkt Kana COMPRESS ] # 336 primary weights
-[top_byte 7B Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth COMPRESS ] # 1863 primary weights
-[top_byte 7C Dsrt Shaw Dupl Osma Elba Aghb Sora Mroo Linb Lina Cprt Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Ugar Xpeo Xsux COMPRESS ] # 2587 primary weights
-[top_byte 7D Egyp Merc Mero Hluw Tang Nshu COMPRESS ] # 8974 primary weights
+[top_byte 7B Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth COMPRESS ] # 1868 primary weights
+[top_byte 7C Dsrt Shaw Dupl Osma Elba Aghb Sora Mroo Linb Lina Cprt Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Yezi Chrs Ugar Xpeo Xsux COMPRESS ] # 2654 primary weights
+[top_byte 7D Egyp Merc Mero Hluw Tang Nshu Kits COMPRESS ] # 9467 primary weights
[top_byte 7E Hani Hans Hant ]
[top_byte 7F Hani Hans Hant ]
[top_byte 80 Hani Hans Hant ]
@@ -807,6 +807,7 @@ A8F1; [,,]
13436; [,,]
13437; [,,]
13438; [,,]
+16FE4; [,,]
1BCA0; [,,]
1BCA1; [,,]
1BCA2; [,,]
@@ -1406,6 +1407,7 @@ FFFB; [,,]
0487; [, A6, 05]
0741; [, A6, 05]
0745; [, A6, 05]
+0B55; [, A6, 05]
17CB; [, A6, 05]
17CC; [, A6, 05]
17CD; [, A6, 05]
@@ -1659,7 +1661,9 @@ FE7F; [, E8 3E, 20]
FE7E; [, E8 3E, 2E]
0653; [, E8 5F, 05]
0AFC; [, E8 5F, 05]
+10EAC; [, E8 5F, 05]
0654; [, E8 80, 05]
+10EAB; [, E8 80, 05]
0655; [, E8 A1, 05]
065F; [, E8 C2, 05]
0656; [, E8 E3, 05]
@@ -1749,6 +1753,7 @@ A9B3; [, F0 AF, 05]
115C0; [, F0 AF, 05]
116B7; [, F0 AF, 05]
1183A; [, F0 AF, 05]
+11943; [, F0 AF, 05]
11A33; [, F0 AF, 05]
11D42; [, F0 AF, 05]
0900; [, F0 D0, 05]
@@ -1761,6 +1766,7 @@ A9B3; [, F0 AF, 05]
0C01; [, F0 D0, 05]
0C81; [, F0 D0, 05]
0D01; [, F0 D0, 05]
+0D81; [, F0 D0, 05]
1B00; [, F0 D0, 05]
1B01; [, F0 D0, 05]
A8C5; [, F0 D0, 05]
@@ -1769,11 +1775,13 @@ A980; [, F0 D0, 05]
11080; [, F0 D0, 05]
11100; [, F0 D0, 05]
11180; [, F0 D0, 05]
+111CF; [, F0 D0, 05]
11301; [, F0 D0, 05]
11443; [, F0 D0, 05]
114BF; [, F0 D0, 05]
115BC; [, F0 D0, 05]
11640; [, F0 D0, 05]
+1193C; [, F0 D0, 05]
11A35; [, F0 D0, 05]
11A36; [, F0 D0, 05]
11A37; [, F0 D0, 05]
@@ -1817,6 +1825,7 @@ A981; [, F0 F1, 05]
1163D; [, F0 F1, 05]
116AB; [, F0 F1, 05]
11837; [, F0 F1, 05]
+1193B; [, F0 F1, 05]
119DE; [, F0 F1, 05]
11A38; [, F0 F1, 05]
11A96; [, F0 F1, 05]
@@ -1934,26 +1943,28 @@ A92D; [, F5 5D, 05]
302D; [, F9 43, 05]
302E; [, F9 64, 05]
302F; [, F9 85, 05]
-20D0; [, F9 A6, 05]
-20D1; [, F9 C7, 05]
-20D2; [, F9 E8, 05]
-20D3; [, F9 E8, 05]
-20D4; [, FA 0B, 05]
-20D5; [, FA 2C, 05]
-20D6; [, FA 4D, 05]
-20D7; [, FA 6E, 05]
-20DB; [, FA 8F, 05]
-20DC; [, FA B0, 05]
-20E1; [, FA D1, 05]
-20E6; [, FA F2, 05]
-20E7; [, FB 15, 05]
-20E8; [, FB 36, 05]
-20E9; [, FB 57, 05]
-101FD; [, FB 78, 05]
-004C | 00B7; [, FB 99, 05]
-006C | 00B7; [, FB 99, 05]
-004C | 0387; [, FB 99, 05]
-006C | 0387; [, FB 99, 05]
+16FF0; [, F9 A6, 05]
+16FF1; [, F9 C7, 05]
+20D0; [, F9 E8, 05]
+20D1; [, FA 0B, 05]
+20D2; [, FA 2C, 05]
+20D3; [, FA 2C, 05]
+20D4; [, FA 4D, 05]
+20D5; [, FA 6E, 05]
+20D6; [, FA 8F, 05]
+20D7; [, FA B0, 05]
+20DB; [, FA D1, 05]
+20DC; [, FA F2, 05]
+20E1; [, FB 15, 05]
+20E6; [, FB 36, 05]
+20E7; [, FB 57, 05]
+20E8; [, FB 78, 05]
+20E9; [, FB 99, 05]
+101FD; [, FB BA, 05]
+004C | 00B7; [, FB DB, 05]
+006C | 00B7; [, FB DB, 05]
+004C | 0387; [, FB DB, 05]
+006C | 0387; [, FB DB, 05]
FDD1 00A0; [03 02 02, 05, 05] # SPACE first primary starts new lead byte
@@ -2058,6 +2069,8 @@ FE31; [05 1A, 05, 2E]
30FB; [05 30, 05, 05]
FF65; [05 30, 05, A0]
+10EAD; [05 32, 05, 05]
+
002C; [06, 05, 05]
FF0C; [06, 05, 10]
FE50; [06, 05, 26]
@@ -2418,21 +2431,23 @@ ABEB; [09 34 56, 05, 05]
1173D; [09 34 E2, 05, 05]
-11C41; [09 34 E9, 05, 05]
+11944; [09 34 E9, 05, 05]
+
+11C41; [09 34 F0, 05, 05]
-11C42; [09 34 F0, 05, 05]
+11C42; [09 34 F7, 05, 05]
-16A6E; [09 34 F7, 05, 05]
+16A6E; [09 34 FE, 05, 05]
-16A6F; [09 34 FE, 05, 05]
+16A6F; [09 35 07, 05, 05]
-1C7E; [09 35 07, 05, 05]
+1C7E; [09 35 0E, 05, 05]
-1C7F; [09 35 0E, 05, 05]
+1C7F; [09 35 15, 05, 05]
-0700; [09 35 15, 05, 05]
+0700; [09 35 1C, 05, 05]
-07F7; [09 35 1C, 05, 05]
+07F7; [09 35 23, 05, 05]
10FB; [09 37, 05, 05]
@@ -2512,9 +2527,11 @@ A95F; [09 3D 6B, 05, 05]
1173E; [09 3D F7, 05, 05]
-11EF7; [09 3D FE, 05, 05]
+11946; [09 3D FE, 05, 05]
-11EF8; [09 3E 07, 05, 05]
+11EF7; [09 3E 07, 05, 05]
+
+11EF8; [09 3E 0E, 05, 05]
2055; [09 40, 05, 05]
@@ -3074,541 +3091,547 @@ FE60; [0A 90, 05, 2E]
204A; [0A 92, 05, 05]
-0023; [0A 94, 05, 05]
-FF03; [0A 94, 05, 20]
-FE5F; [0A 94, 05, 2E]
+2E52; [0A 94, 05, 05]
+
+0023; [0A 96, 05, 05]
+FF03; [0A 96, 05, 20]
+FE5F; [0A 96, 05, 2E]
-0025; [0A 96, 05, 05]
-FF05; [0A 96, 05, 20]
-FE6A; [0A 96, 05, 2E]
+0025; [0A 98, 05, 05]
+FF05; [0A 98, 05, 20]
+FE6A; [0A 98, 05, 2E]
-066A; [0A 98, 05, 05]
+066A; [0A 9A, 05, 05]
-2030; [0A 9A, 05, 05]
+2030; [0A 9C, 05, 05]
-0609; [0A 9C, 05, 05]
+0609; [0A 9E, 05, 05]
-2031; [0A 9E, 05, 05]
+2031; [0A A0, 05, 05]
-060A; [0A A0, 05, 05]
+060A; [0A A2, 05, 05]
-2020; [0A A2, 05, 05]
+2020; [0A A4, 05, 05]
-2021; [0A A4, 05, 05]
+2021; [0A A6, 05, 05]
-2E36; [0A A6, 05, 05]
+2E36; [0A A8, 05, 05]
-2E37; [0A A8, 05, 05]
+2E37; [0A AA, 05, 05]
-2E38; [0A AA, 05, 05]
+2E38; [0A AC, 05, 05]
-2E4B; [0A AC, 05, 05]
+2E4B; [0A AE, 05, 05]
-2022; [0A AE, 05, 05]
+2022; [0A B0, 05, 05]
-2023; [0A B0, 05, 05]
+2023; [0A B2, 05, 05]
-2027; [0A B2, 05, 05]
+2027; [0A B4, 05, 05]
-2043; [0A B4, 05, 05]
+2043; [0A B6, 05, 05]
-204C; [0A B6, 05, 05]
+204C; [0A B8, 05, 05]
-204D; [0A B8, 05, 05]
+204D; [0A BA, 05, 05]
-2032; [0A BA, 05, 05]
-2033; [0A BA, 05, 20][0A BA, 05, 20]
-2034; [0A BA, 05, 20][0A BA, 05, 20][0A BA, 05, 20]
-2057; [0A BA, 05, 20][0A BA, 05, 20][0A BA, 05, 20][0A BA, 05, 20]
+2032; [0A BC, 05, 05]
+2033; [0A BC, 05, 20][0A BC, 05, 20]
+2034; [0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20]
+2057; [0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20]
-2035; [0A BC, 05, 05]
-2036; [0A BC, 05, 20][0A BC, 05, 20]
-2037; [0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20]
+2035; [0A BE, 05, 05]
+2036; [0A BE, 05, 20][0A BE, 05, 20]
+2037; [0A BE, 05, 20][0A BE, 05, 20][0A BE, 05, 20]
-3003; [0A BE, 05, 05]
+3003; [0A C0, 05, 05]
-303D; [0A C0, 05, 05]
+303D; [0A C2, 05, 05]
-2038; [0A C2, 05, 05]
+2038; [0A C4, 05, 05]
-203B; [0A C4, 05, 05]
+203B; [0A C6, 05, 05]
-203F; [0A C6, 05, 05]
+203F; [0A C8, 05, 05]
-2054; [0A C8, 05, 05]
+2054; [0A CA, 05, 05]
-2040; [0A CA, 05, 05]
+2040; [0A CC, 05, 05]
-2050; [0A CC, 05, 05]
+2050; [0A CE, 05, 05]
-2041; [0A CE, 05, 05]
+2041; [0A D0, 05, 05]
-2042; [0A D0, 05, 05]
+2042; [0A D2, 05, 05]
-2E00; [0A D2, 05, 05]
+2E00; [0A D4, 05, 05]
-2E01; [0A D4, 05, 05]
+2E01; [0A D6, 05, 05]
-2E06; [0A D6, 05, 05]
+2E06; [0A D8, 05, 05]
-2E07; [0A D8, 05, 05]
+2E07; [0A DA, 05, 05]
-2E08; [0A DA, 05, 05]
+2E08; [0A DC, 05, 05]
-2E0B; [0A DC, 05, 05]
+2E0B; [0A DE, 05, 05]
-2E0E; [0A DE, 05, 05]
+2E0E; [0A E0, 05, 05]
-2E0F; [0A E0, 05, 05]
+2E0F; [0A E2, 05, 05]
-2E10; [0A E2, 05, 05]
+2E10; [0A E4, 05, 05]
-2E11; [0A E4, 05, 05]
+2E11; [0A E6, 05, 05]
-2E12; [0A E6, 05, 05]
+2E12; [0A E8, 05, 05]
-2E13; [0A E8, 05, 05]
+2E13; [0A EA, 05, 05]
-2E14; [0A EA, 05, 05]
+2E14; [0A EC, 05, 05]
-2E15; [0A EC, 05, 05]
+2E15; [0A EE, 05, 05]
-2E16; [0A EE, 05, 05]
+2E16; [0A F0, 05, 05]
-2E1A; [0A F0, 05, 05]
+2E1A; [0A F2, 05, 05]
-2E1B; [0A F2, 05, 05]
+2E1B; [0A F4, 05, 05]
-2E1E; [0A F4, 05, 05]
+2E1E; [0A F6, 05, 05]
-2E1F; [0A F6, 05, 05]
+2E1F; [0A F8, 05, 05]
-2E44; [0A F8, 05, 05]
+2E44; [0A FA, 05, 05]
-2E45; [0A FA, 05, 05]
+2E45; [0A FC, 05, 05]
-2E46; [0A FC, 05, 05]
+2E46; [0A FE, 05, 05]
-2E47; [0A FE, 05, 05]
+2E47; [0B 02, 05, 05]
-2E48; [0B 02, 05, 05]
+2E48; [0B 04, 05, 05]
-A67E; [0B 04, 05, 05]
+A67E; [0B 06, 05, 05]
-055A; [0B 06, 05, 05]
+055A; [0B 08, 05, 05]
-055B; [0B 08, 05, 05]
+055B; [0B 0A, 05, 05]
-055F; [0B 0A, 05, 05]
+055F; [0B 0C, 05, 05]
-05BE; [0B 0C, 05, 05]
+05BE; [0B 0E, 05, 05]
-05C0; [0B 0E, 05, 05]
+05C0; [0B 10, 05, 05]
-05C3; [0B 10, 05, 05]
+05C3; [0B 12, 05, 05]
-05C6; [0B 12, 05, 05]
+05C6; [0B 14, 05, 05]
-05F3; [0B 14, 05, 05]
+05F3; [0B 16, 05, 05]
-05F4; [0B 16, 05, 05]
+05F4; [0B 18, 05, 05]
-070A; [0B 18 02, 05, 05]
+070A; [0B 1A 02, 05, 05]
-070B; [0B 18 09, 05, 05]
+070B; [0B 1A 09, 05, 05]
-070C; [0B 18 10, 05, 05]
+070C; [0B 1A 10, 05, 05]
-070D; [0B 18 17, 05, 05]
+070D; [0B 1A 17, 05, 05]
-085E; [0B 18 1E, 05, 05]
+085E; [0B 1A 1E, 05, 05]
-1800; [0B 18 25, 05, 05]
+1800; [0B 1A 25, 05, 05]
-11660; [0B 18 2C, 05, 05]
+11660; [0B 1A 2C, 05, 05]
-11661; [0B 18 33, 05, 05]
+11661; [0B 1A 33, 05, 05]
-11662; [0B 18 3A, 05, 05]
+11662; [0B 1A 3A, 05, 05]
-11663; [0B 18 41, 05, 05]
+11663; [0B 1A 41, 05, 05]
-11664; [0B 18 48, 05, 05]
+11664; [0B 1A 48, 05, 05]
-11665; [0B 18 4F, 05, 05]
+11665; [0B 1A 4F, 05, 05]
-11666; [0B 18 56, 05, 05]
+11666; [0B 1A 56, 05, 05]
-11667; [0B 18 5D, 05, 05]
+11667; [0B 1A 5D, 05, 05]
-11668; [0B 18 64, 05, 05]
+11668; [0B 1A 64, 05, 05]
-11669; [0B 18 6B, 05, 05]
+11669; [0B 1A 6B, 05, 05]
-1166A; [0B 18 72, 05, 05]
+1166A; [0B 1A 72, 05, 05]
-1166B; [0B 18 79, 05, 05]
+1166B; [0B 1A 79, 05, 05]
-1166C; [0B 18 80, 05, 05]
+1166C; [0B 1A 80, 05, 05]
-0970; [0B 1A, 05, 05]
+0970; [0B 1C, 05, 05]
-A8F8; [0B 1C, 05, 05]
+A8F8; [0B 1E, 05, 05]
-A8F9; [0B 1E, 05, 05]
+A8F9; [0B 20, 05, 05]
-A8FA; [0B 20, 05, 05]
+A8FA; [0B 22, 05, 05]
-A8FC; [0B 22, 05, 05]
+A8FC; [0B 24, 05, 05]
-09FD; [0B 24, 05, 05]
+09FD; [0B 26, 05, 05]
-0A76; [0B 26, 05, 05]
+0A76; [0B 28, 05, 05]
-0AF0; [0B 28, 05, 05]
+0AF0; [0B 2A, 05, 05]
-0C77; [0B 2A, 05, 05]
+0C77; [0B 2C, 05, 05]
-0C84; [0B 2C, 05, 05]
+0C84; [0B 2E, 05, 05]
-0DF4; [0B 2E, 05, 05]
+0DF4; [0B 30, 05, 05]
-0E4F; [0B 30, 05, 05]
+0E4F; [0B 32, 05, 05]
-0E5A; [0B 32, 05, 05]
+0E5A; [0B 34, 05, 05]
-0E5B; [0B 34, 05, 05]
+0E5B; [0B 36, 05, 05]
-AADE; [0B 36 02, 05, 05]
+AADE; [0B 38 02, 05, 05]
-AADF; [0B 36 09, 05, 05]
+AADF; [0B 38 09, 05, 05]
-0F04; [0B 38, 05, 05]
+0F04; [0B 3A, 05, 05]
-0F05; [0B 3A, 05, 05]
+0F05; [0B 3C, 05, 05]
-0F06; [0B 3C, 05, 05]
+0F06; [0B 3E, 05, 05]
-0F07; [0B 3E, 05, 05]
+0F07; [0B 40, 05, 05]
-0F08; [0B 40, 05, 05]
+0F08; [0B 42, 05, 05]
-0F09; [0B 42, 05, 05]
+0F09; [0B 44, 05, 05]
-0F0A; [0B 44, 05, 05]
+0F0A; [0B 46, 05, 05]
-0FD0; [0B 46, 05, 05]
+0FD0; [0B 48, 05, 05]
-0FD1; [0B 48, 05, 05]
+0FD1; [0B 4A, 05, 05]
-0F0B; [0B 4A, 05, 05]
-0F0C; [0B 4A, 05, 20]
+0F0B; [0B 4C, 05, 05]
+0F0C; [0B 4C, 05, 20]
-0F0D; [0B 4C, 05, 05]
+0F0D; [0B 4E, 05, 05]
-0F0E; [0B 4E, 05, 05]
+0F0E; [0B 50, 05, 05]
-0F0F; [0B 50, 05, 05]
+0F0F; [0B 52, 05, 05]
-0F10; [0B 52, 05, 05]
+0F10; [0B 54, 05, 05]
-0F11; [0B 54, 05, 05]
+0F11; [0B 56, 05, 05]
-0F12; [0B 56, 05, 05]
+0F12; [0B 58, 05, 05]
-0F85; [0B 58, 05, 05]
+0F85; [0B 5A, 05, 05]
-0FD2; [0B 5A, 05, 05]
+0FD2; [0B 5C, 05, 05]
-0FD3; [0B 5C, 05, 05]
+0FD3; [0B 5E, 05, 05]
-0FD4; [0B 5E, 05, 05]
+0FD4; [0B 60, 05, 05]
-0FD9; [0B 60, 05, 05]
+0FD9; [0B 62, 05, 05]
-0FDA; [0B 62, 05, 05]
+0FDA; [0B 64, 05, 05]
-11A3F; [0B 64 02, 05, 05]
+11A3F; [0B 66 02, 05, 05]
-11A40; [0B 64 09, 05, 05]
+11A40; [0B 66 09, 05, 05]
-11A41; [0B 64 10, 05, 05]
+11A41; [0B 66 10, 05, 05]
-11A42; [0B 64 17, 05, 05]
+11A42; [0B 66 17, 05, 05]
-11A43; [0B 64 1E, 05, 05]
+11A43; [0B 66 1E, 05, 05]
-11A44; [0B 64 25, 05, 05]
+11A44; [0B 66 25, 05, 05]
-11A45; [0B 64 2C, 05, 05]
+11A45; [0B 66 2C, 05, 05]
-11A46; [0B 64 33, 05, 05]
+11A46; [0B 66 33, 05, 05]
-11A9A; [0B 64 3A, 05, 05]
+11A9A; [0B 66 3A, 05, 05]
-11A9B; [0B 64 41, 05, 05]
+11A9B; [0B 66 41, 05, 05]
-11A9C; [0B 64 48, 05, 05]
+11A9C; [0B 66 48, 05, 05]
-11A9E; [0B 64 4F, 05, 05]
+11A9E; [0B 66 4F, 05, 05]
-11A9F; [0B 64 56, 05, 05]
+11A9F; [0B 66 56, 05, 05]
-11AA0; [0B 64 5D, 05, 05]
+11AA0; [0B 66 5D, 05, 05]
-11AA1; [0B 64 64, 05, 05]
+11AA1; [0B 66 64, 05, 05]
-11AA2; [0B 64 6B, 05, 05]
+11AA2; [0B 66 6B, 05, 05]
-11C70; [0B 64 72, 05, 05]
+11C70; [0B 66 72, 05, 05]
-11C71; [0B 64 79, 05, 05]
+11C71; [0B 66 79, 05, 05]
-1C3D; [0B 64 80, 05, 05]
+1C3D; [0B 66 80, 05, 05]
-1C3E; [0B 64 87, 05, 05]
+1C3E; [0B 66 87, 05, 05]
-1C3F; [0B 64 8E, 05, 05]
+1C3F; [0B 66 8E, 05, 05]
-104C; [0B 66, 05, 05]
+104C; [0B 68, 05, 05]
-104D; [0B 68, 05, 05]
+104D; [0B 6A, 05, 05]
-104E; [0B 6A, 05, 05]
+104E; [0B 6C, 05, 05]
-104F; [0B 6C, 05, 05]
+104F; [0B 6E, 05, 05]
-17D8; [0B 6E, 05, 05]
+17D8; [0B 70, 05, 05]
-17D9; [0B 70, 05, 05]
+17D9; [0B 72, 05, 05]
-17DA; [0B 72, 05, 05]
+17DA; [0B 74, 05, 05]
-1AA0; [0B 74 02, 05, 05]
+1AA0; [0B 76 02, 05, 05]
-1AA1; [0B 74 09, 05, 05]
+1AA1; [0B 76 09, 05, 05]
-1AA2; [0B 74 10, 05, 05]
+1AA2; [0B 76 10, 05, 05]
-1AA3; [0B 74 17, 05, 05]
+1AA3; [0B 76 17, 05, 05]
-1AA4; [0B 74 1E, 05, 05]
+1AA4; [0B 76 1E, 05, 05]
-1AA5; [0B 74 25, 05, 05]
+1AA5; [0B 76 25, 05, 05]
-1AA6; [0B 74 2C, 05, 05]
+1AA6; [0B 76 2C, 05, 05]
-1AAC; [0B 74 33, 05, 05]
+1AAC; [0B 76 33, 05, 05]
-1AAD; [0B 74 3A, 05, 05]
+1AAD; [0B 76 3A, 05, 05]
-1CC0; [0B 74 41, 05, 05]
+1CC0; [0B 76 41, 05, 05]
-1CC1; [0B 74 48, 05, 05]
+1CC1; [0B 76 48, 05, 05]
-1CC2; [0B 74 4F, 05, 05]
+1CC2; [0B 76 4F, 05, 05]
-1CC3; [0B 74 56, 05, 05]
+1CC3; [0B 76 56, 05, 05]
-1CC4; [0B 74 5D, 05, 05]
+1CC4; [0B 76 5D, 05, 05]
-1CC5; [0B 74 64, 05, 05]
+1CC5; [0B 76 64, 05, 05]
-1CC6; [0B 74 6B, 05, 05]
+1CC6; [0B 76 6B, 05, 05]
-1CC7; [0B 74 72, 05, 05]
+1CC7; [0B 76 72, 05, 05]
-2D70; [0B 74 79, 05, 05]
+2D70; [0B 76 79, 05, 05]
-A874; [0B 74 80, 05, 05]
+A874; [0B 76 80, 05, 05]
-A875; [0B 74 87, 05, 05]
+A875; [0B 76 87, 05, 05]
-1BFC; [0B 74 8E, 05, 05]
+1BFC; [0B 76 8E, 05, 05]
-1BFD; [0B 74 95, 05, 05]
+1BFD; [0B 76 95, 05, 05]
-1BFE; [0B 74 9C, 05, 05]
+1BFE; [0B 76 9C, 05, 05]
-1BFF; [0B 74 A3, 05, 05]
+1BFF; [0B 76 A3, 05, 05]
-A92E; [0B 76, 05, 05]
+A92E; [0B 78, 05, 05]
-A9DE; [0B 78 02, 05, 05]
+A9DE; [0B 7A 02, 05, 05]
-A9DF; [0B 78 09, 05, 05]
+A9DF; [0B 7A 09, 05, 05]
-AA5C; [0B 78 10, 05, 05]
+AA5C; [0B 7A 10, 05, 05]
-1056F; [0B 78 17, 05, 05]
+1056F; [0B 7A 17, 05, 05]
-11049; [0B 78 1E, 05, 05]
+11049; [0B 7A 1E, 05, 05]
-1104A; [0B 78 25, 05, 05]
+1104A; [0B 7A 25, 05, 05]
-1104B; [0B 78 2C, 05, 05]
+1104B; [0B 7A 2C, 05, 05]
-1104C; [0B 78 33, 05, 05]
+1104C; [0B 7A 33, 05, 05]
-1104D; [0B 78 3A, 05, 05]
+1104D; [0B 7A 3A, 05, 05]
-10A50; [0B 78 41, 05, 05]
+10A50; [0B 7A 41, 05, 05]
-10A51; [0B 78 48, 05, 05]
+10A51; [0B 7A 48, 05, 05]
-10A52; [0B 78 4F, 05, 05]
+10A52; [0B 7A 4F, 05, 05]
-10A53; [0B 78 56, 05, 05]
+10A53; [0B 7A 56, 05, 05]
-10A54; [0B 78 5D, 05, 05]
+10A54; [0B 7A 5D, 05, 05]
-10A55; [0B 78 64, 05, 05]
+10A55; [0B 7A 64, 05, 05]
-10A58; [0B 78 6B, 05, 05]
+10A58; [0B 7A 6B, 05, 05]
-11C43; [0B 78 72, 05, 05]
+11C43; [0B 7A 72, 05, 05]
-11C44; [0B 78 79, 05, 05]
+11C44; [0B 7A 79, 05, 05]
-11C45; [0B 78 80, 05, 05]
+11C45; [0B 7A 80, 05, 05]
-10B39; [0B 78 87, 05, 05]
+10B39; [0B 7A 87, 05, 05]
-10AF0; [0B 78 8E, 05, 05]
+10AF0; [0B 7A 8E, 05, 05]
-10AF1; [0B 78 95, 05, 05]
+10AF1; [0B 7A 95, 05, 05]
-10AF2; [0B 78 9C, 05, 05]
+10AF2; [0B 7A 9C, 05, 05]
-10AF3; [0B 78 A3, 05, 05]
+10AF3; [0B 7A A3, 05, 05]
-10AF4; [0B 78 AA, 05, 05]
+10AF4; [0B 7A AA, 05, 05]
-10AF5; [0B 78 B1, 05, 05]
+10AF5; [0B 7A B1, 05, 05]
-10AF6; [0B 78 B8, 05, 05]
+10AF6; [0B 7A B8, 05, 05]
-10B99; [0B 78 BF, 05, 05]
+10B99; [0B 7A BF, 05, 05]
-10B9A; [0B 78 C6, 05, 05]
+10B9A; [0B 7A C6, 05, 05]
-10B9B; [0B 78 CD, 05, 05]
+10B9B; [0B 7A CD, 05, 05]
-10B9C; [0B 78 D4, 05, 05]
+10B9C; [0B 7A D4, 05, 05]
-110BB; [0B 78 DB, 05, 05]
+110BB; [0B 7A DB, 05, 05]
-110BC; [0B 78 E2, 05, 05]
+110BC; [0B 7A E2, 05, 05]
-11174; [0B 78 E9, 05, 05]
+11174; [0B 7A E9, 05, 05]
-11175; [0B 78 F0, 05, 05]
+11175; [0B 7A F0, 05, 05]
-111CD; [0B 78 F7, 05, 05]
+111CD; [0B 7A F7, 05, 05]
-111C7; [0B 78 FE, 05, 05]
+111C7; [0B 7A FE, 05, 05]
-111DB; [0B 79 07, 05, 05]
+111DB; [0B 7B 07, 05, 05]
-111DD; [0B 79 0E, 05, 05]
+111DD; [0B 7B 0E, 05, 05]
-1123A; [0B 79 15, 05, 05]
+1123A; [0B 7B 15, 05, 05]
-1123B; [0B 79 1C, 05, 05]
+1123B; [0B 7B 1C, 05, 05]
-1123C; [0B 79 23, 05, 05]
+1123C; [0B 7B 23, 05, 05]
-1123D; [0B 79 2A, 05, 05]
+1123D; [0B 7B 2A, 05, 05]
-1144D; [0B 79 31, 05, 05]
+1144D; [0B 7B 31, 05, 05]
-1144E; [0B 79 38, 05, 05]
+1145A; [0B 7B 38, 05, 05]
-1144F; [0B 79 3F, 05, 05]
+1144E; [0B 7B 3F, 05, 05]
-1145B; [0B 79 46, 05, 05]
+1144F; [0B 7B 46, 05, 05]
-1145D; [0B 79 4D, 05, 05]
+1145B; [0B 7B 4D, 05, 05]
-114C6; [0B 79 54, 05, 05]
+1145D; [0B 7B 54, 05, 05]
-115C1; [0B 79 5B, 05, 05]
+114C6; [0B 7B 5B, 05, 05]
-115C4; [0B 79 62, 05, 05]
+115C1; [0B 7B 62, 05, 05]
-115C5; [0B 79 69, 05, 05]
+115C4; [0B 7B 69, 05, 05]
-115C6; [0B 79 70, 05, 05]
+115C5; [0B 7B 70, 05, 05]
-115C7; [0B 79 77, 05, 05]
+115C6; [0B 7B 77, 05, 05]
-115C8; [0B 79 7E, 05, 05]
+115C7; [0B 7B 7E, 05, 05]
-115C9; [0B 79 85, 05, 05]
+115C8; [0B 7B 85, 05, 05]
-115CA; [0B 79 8C, 05, 05]
+115C9; [0B 7B 8C, 05, 05]
-115CB; [0B 79 93, 05, 05]
+115CA; [0B 7B 93, 05, 05]
-115CC; [0B 79 9A, 05, 05]
+115CB; [0B 7B 9A, 05, 05]
-115CD; [0B 79 A1, 05, 05]
+115CC; [0B 7B A1, 05, 05]
-115CE; [0B 79 A8, 05, 05]
+115CD; [0B 7B A8, 05, 05]
-115CF; [0B 79 AF, 05, 05]
+115CE; [0B 7B AF, 05, 05]
-115D0; [0B 79 B6, 05, 05]
+115CF; [0B 7B B6, 05, 05]
-115D1; [0B 79 BD, 05, 05]
+115D0; [0B 7B BD, 05, 05]
-115D2; [0B 79 C4, 05, 05]
+115D1; [0B 7B C4, 05, 05]
-115D3; [0B 79 CB, 05, 05]
+115D2; [0B 7B CB, 05, 05]
-115D4; [0B 79 D2, 05, 05]
+115D3; [0B 7B D2, 05, 05]
-115D5; [0B 79 D9, 05, 05]
+115D4; [0B 7B D9, 05, 05]
-115D6; [0B 79 E0, 05, 05]
+115D5; [0B 7B E0, 05, 05]
-115D7; [0B 79 E7, 05, 05]
+115D6; [0B 7B E7, 05, 05]
-11643; [0B 79 EE, 05, 05]
+115D7; [0B 7B EE, 05, 05]
-1183B; [0B 79 F5, 05, 05]
+11643; [0B 7B F5, 05, 05]
-119E2; [0B 79 FC, 05, 05]
+1183B; [0B 7B FC, 05, 05]
-11FFF; [0B 7B, 05, 05]
+11945; [0B 7C 05, 05, 05]
-16B37; [0B 7D 02, 05, 05]
+119E2; [0B 7C 0C, 05, 05]
-16B38; [0B 7D 09, 05, 05]
+11FFF; [0B 7E, 05, 05]
-16B39; [0B 7D 10, 05, 05]
+16B37; [0B 80 02, 05, 05]
-16B3A; [0B 7D 17, 05, 05]
+16B38; [0B 80 09, 05, 05]
-16B3B; [0B 7D 1E, 05, 05]
+16B39; [0B 80 10, 05, 05]
-16B44; [0B 7D 25, 05, 05]
+16B3A; [0B 80 17, 05, 05]
-16E99; [0B 7D 2C, 05, 05]
+16B3B; [0B 80 1E, 05, 05]
-16E9A; [0B 7D 33, 05, 05]
+16B44; [0B 80 25, 05, 05]
-1DA87; [0B 7D 3A, 05, 05]
+16E99; [0B 80 2C, 05, 05]
-1DA88; [0B 7D 41, 05, 05]
+16E9A; [0B 80 33, 05, 05]
-1DA89; [0B 7D 48, 05, 05]
+1DA87; [0B 80 3A, 05, 05]
-1DA8A; [0B 7D 4F, 05, 05]
+1DA88; [0B 80 41, 05, 05]
-1DA8B; [0B 7D 56, 05, 05]
+1DA89; [0B 80 48, 05, 05]
-10A7F; [0B 7D 5D, 05, 05]
+1DA8A; [0B 80 4F, 05, 05]
+
+1DA8B; [0B 80 56, 05, 05]
+
+10A7F; [0B 80 5D, 05, 05]
FDD1 263A; [0C 02 02, 05, 05] # SYMBOL first primary starts new lead byte
@@ -3706,27 +3729,31 @@ FFE3; [0C 0C, 05, 20]
02D5; [0C 34 17, 05, 05]
-02D6; [0C 34 1E, 05, 05]
+AB6A; [0C 34 1E, 05, 05]
+
+AB6B; [0C 34 25, 05, 05]
-02D7; [0C 34 25, 05, 05]
+02D6; [0C 34 2C, 05, 05]
-02DE; [0C 34 2C, 05, 05]
+02D7; [0C 34 33, 05, 05]
-02DF; [0C 34 33, 05, 05]
+02DE; [0C 34 3A, 05, 05]
-02E5; [0C 34 3A, 05, 05]
+02DF; [0C 34 41, 05, 05]
-02E6; [0C 34 41, 05, 05]
+02E5; [0C 34 48, 05, 05]
-02E7; [0C 34 48, 05, 05]
+02E6; [0C 34 4F, 05, 05]
-02E8; [0C 34 4F, 05, 05]
+02E7; [0C 34 56, 05, 05]
-02E9; [0C 34 56, 05, 05]
+02E8; [0C 34 5D, 05, 05]
-02EA; [0C 34 5D, 05, 05]
+02E9; [0C 34 64, 05, 05]
-02EB; [0C 34 64, 05, 05]
+02EA; [0C 34 6B, 05, 05]
+
+02EB; [0C 34 72, 05, 05]
02EC; [0C 36, 05, 05]
@@ -4206,49 +4233,51 @@ AA79; [0C 58 26, 05, 05]
00AE; [0C 5F, 05, 05]
-2104; [0C 61 02, 05, 05]
+1F1AD; [0C 61 02, 05, 05]
+
+2104; [0C 61 09, 05, 05]
-2108; [0C 61 09, 05, 05]
+2108; [0C 61 10, 05, 05]
-2114; [0C 61 10, 05, 05]
+2114; [0C 61 17, 05, 05]
-2117; [0C 61 17, 05, 05]
+2117; [0C 61 1E, 05, 05]
-2118; [0C 61 1E, 05, 05]
+2118; [0C 61 25, 05, 05]
-211E; [0C 61 25, 05, 05]
+211E; [0C 61 2C, 05, 05]
-211F; [0C 61 2C, 05, 05]
+211F; [0C 61 33, 05, 05]
-2123; [0C 61 33, 05, 05]
+2123; [0C 61 3A, 05, 05]
-2125; [0C 61 3A, 05, 05]
+2125; [0C 61 41, 05, 05]
-2127; [0C 61 41, 05, 05]
+2127; [0C 61 48, 05, 05]
-2129; [0C 61 48, 05, 05]
+2129; [0C 61 4F, 05, 05]
-212E; [0C 61 4F, 05, 05]
+212E; [0C 61 56, 05, 05]
-213A; [0C 61 56, 05, 05]
+213A; [0C 61 5D, 05, 05]
-2141; [0C 61 5D, 05, 05]
+2141; [0C 61 64, 05, 05]
-2142; [0C 61 64, 05, 05]
+2142; [0C 61 6B, 05, 05]
-2143; [0C 61 6B, 05, 05]
+2143; [0C 61 72, 05, 05]
-2144; [0C 61 72, 05, 05]
+2144; [0C 61 79, 05, 05]
-214A; [0C 61 79, 05, 05]
+214A; [0C 61 80, 05, 05]
-214C; [0C 61 80, 05, 05]
+214C; [0C 61 87, 05, 05]
-214F; [0C 61 87, 05, 05]
+214F; [0C 61 8E, 05, 05]
-218A; [0C 61 8E, 05, 05]
+218A; [0C 61 95, 05, 05]
-218B; [0C 61 95, 05, 05]
+218B; [0C 61 9C, 05, 05]
2190; [0C 63, 05, 05]
FFE9; [0C 63, 05, A0]
@@ -6124,9865 +6153,10403 @@ FFEE; [0C B9, 05, A0]
25FF; [0C BC 69, 05, 05]
-2600; [0C BC 70, 05, 05]
+1FB00; [0C BC 70, 05, 05]
+
+1FB01; [0C BC 77, 05, 05]
+
+1FB02; [0C BC 7E, 05, 05]
+
+1FB03; [0C BC 85, 05, 05]
+
+1FB04; [0C BC 8C, 05, 05]
+
+1FB05; [0C BC 93, 05, 05]
+
+1FB06; [0C BC 9A, 05, 05]
+
+1FB07; [0C BC A1, 05, 05]
+
+1FB08; [0C BC A8, 05, 05]
+
+1FB09; [0C BC AF, 05, 05]
+
+1FB0A; [0C BC B6, 05, 05]
+
+1FB0B; [0C BC BD, 05, 05]
+
+1FB0C; [0C BC C4, 05, 05]
+
+1FB0D; [0C BC CB, 05, 05]
+
+1FB0E; [0C BC D2, 05, 05]
+
+1FB0F; [0C BC D9, 05, 05]
+
+1FB10; [0C BC E0, 05, 05]
+
+1FB11; [0C BC E7, 05, 05]
+
+1FB12; [0C BC EE, 05, 05]
+
+1FB13; [0C BC F5, 05, 05]
+
+1FB14; [0C BC FC, 05, 05]
+
+1FB15; [0C BD 05, 05, 05]
+
+1FB16; [0C BD 0C, 05, 05]
+
+1FB17; [0C BD 13, 05, 05]
+
+1FB18; [0C BD 1A, 05, 05]
+
+1FB19; [0C BD 21, 05, 05]
+
+1FB1A; [0C BD 28, 05, 05]
+
+1FB1B; [0C BD 2F, 05, 05]
+
+1FB1C; [0C BD 36, 05, 05]
+
+1FB1D; [0C BD 3D, 05, 05]
+
+1FB1E; [0C BD 44, 05, 05]
+
+1FB1F; [0C BD 4B, 05, 05]
+
+1FB20; [0C BD 52, 05, 05]
+
+1FB21; [0C BD 59, 05, 05]
+
+1FB22; [0C BD 60, 05, 05]
+
+1FB23; [0C BD 67, 05, 05]
+
+1FB24; [0C BD 6E, 05, 05]
+
+1FB25; [0C BD 75, 05, 05]
+
+1FB26; [0C BD 7C, 05, 05]
+
+1FB27; [0C BD 83, 05, 05]
+
+1FB28; [0C BD 8A, 05, 05]
+
+1FB29; [0C BD 91, 05, 05]
+
+1FB2A; [0C BD 98, 05, 05]
+
+1FB2B; [0C BD 9F, 05, 05]
+
+1FB2C; [0C BD A6, 05, 05]
+
+1FB2D; [0C BD AD, 05, 05]
+
+1FB2E; [0C BD B4, 05, 05]
+
+1FB2F; [0C BD BB, 05, 05]
+
+1FB30; [0C BD C2, 05, 05]
+
+1FB31; [0C BD C9, 05, 05]
+
+1FB32; [0C BD D0, 05, 05]
+
+1FB33; [0C BD D7, 05, 05]
+
+1FB34; [0C BD DE, 05, 05]
+
+1FB35; [0C BD E5, 05, 05]
+
+1FB36; [0C BD EC, 05, 05]
+
+1FB37; [0C BD F3, 05, 05]
+
+1FB38; [0C BD FA, 05, 05]
+
+1FB39; [0C BE 03, 05, 05]
+
+1FB3A; [0C BE 0A, 05, 05]
+
+1FB3B; [0C BE 11, 05, 05]
+
+1FB3C; [0C BE 18, 05, 05]
+
+1FB3D; [0C BE 1F, 05, 05]
+
+1FB3E; [0C BE 26, 05, 05]
+
+1FB3F; [0C BE 2D, 05, 05]
+
+1FB40; [0C BE 34, 05, 05]
+
+1FB41; [0C BE 3B, 05, 05]
+
+1FB42; [0C BE 42, 05, 05]
+
+1FB43; [0C BE 49, 05, 05]
+
+1FB44; [0C BE 50, 05, 05]
+
+1FB45; [0C BE 57, 05, 05]
+
+1FB46; [0C BE 5E, 05, 05]
+
+1FB47; [0C BE 65, 05, 05]
+
+1FB48; [0C BE 6C, 05, 05]
+
+1FB49; [0C BE 73, 05, 05]
+
+1FB4A; [0C BE 7A, 05, 05]
+
+1FB4B; [0C BE 81, 05, 05]
+
+1FB4C; [0C BE 88, 05, 05]
+
+1FB4D; [0C BE 8F, 05, 05]
+
+1FB4E; [0C BE 96, 05, 05]
+
+1FB4F; [0C BE 9D, 05, 05]
+
+1FB50; [0C BE A4, 05, 05]
+
+1FB51; [0C BE AB, 05, 05]
+
+1FB52; [0C BE B2, 05, 05]
+
+1FB53; [0C BE B9, 05, 05]
+
+1FB54; [0C BE C0, 05, 05]
+
+1FB55; [0C BE C7, 05, 05]
+
+1FB56; [0C BE CE, 05, 05]
+
+1FB57; [0C BE D5, 05, 05]
+
+1FB58; [0C BE DC, 05, 05]
+
+1FB59; [0C BE E3, 05, 05]
+
+1FB5A; [0C BE EA, 05, 05]
+
+1FB5B; [0C BE F1, 05, 05]
+
+1FB5C; [0C BE F8, 05, 05]
+
+1FB5D; [0C BE FF, 05, 05]
+
+1FB5E; [0C BF 08, 05, 05]
+
+1FB5F; [0C BF 0F, 05, 05]
+
+1FB60; [0C BF 16, 05, 05]
+
+1FB61; [0C BF 1D, 05, 05]
+
+1FB62; [0C BF 24, 05, 05]
+
+1FB63; [0C BF 2B, 05, 05]
+
+1FB64; [0C BF 32, 05, 05]
+
+1FB65; [0C BF 39, 05, 05]
+
+1FB66; [0C BF 40, 05, 05]
+
+1FB67; [0C BF 47, 05, 05]
+
+1FB68; [0C BF 4E, 05, 05]
+
+1FB69; [0C BF 55, 05, 05]
+
+1FB6A; [0C BF 5C, 05, 05]
+
+1FB6B; [0C BF 63, 05, 05]
+
+1FB6C; [0C BF 6A, 05, 05]
+
+1FB6D; [0C BF 71, 05, 05]
+
+1FB6E; [0C BF 78, 05, 05]
+
+1FB6F; [0C BF 7F, 05, 05]
+
+1FB70; [0C BF 86, 05, 05]
+
+1FB71; [0C BF 8D, 05, 05]
+
+1FB72; [0C BF 94, 05, 05]
+
+1FB73; [0C BF 9B, 05, 05]
+
+1FB74; [0C BF A2, 05, 05]
+
+1FB75; [0C BF A9, 05, 05]
+
+1FB76; [0C BF B0, 05, 05]
+
+1FB77; [0C BF B7, 05, 05]
+
+1FB78; [0C BF BE, 05, 05]
+
+1FB79; [0C BF C5, 05, 05]
+
+1FB7A; [0C BF CC, 05, 05]
+
+1FB7B; [0C BF D3, 05, 05]
+
+1FB7C; [0C BF DA, 05, 05]
+
+1FB7D; [0C BF E1, 05, 05]
+
+1FB7E; [0C BF E8, 05, 05]
+
+1FB7F; [0C BF EF, 05, 05]
+
+1FB80; [0C BF F6, 05, 05]
+
+1FB81; [0C BF FD, 05, 05]
+
+1FB82; [0C C0 06, 05, 05]
+
+1FB83; [0C C0 0D, 05, 05]
+
+1FB84; [0C C0 14, 05, 05]
+
+1FB85; [0C C0 1B, 05, 05]
+
+1FB86; [0C C0 22, 05, 05]
+
+1FB87; [0C C0 29, 05, 05]
+
+1FB88; [0C C0 30, 05, 05]
+
+1FB89; [0C C0 37, 05, 05]
+
+1FB8A; [0C C0 3E, 05, 05]
+
+1FB8B; [0C C0 45, 05, 05]
+
+1FB8C; [0C C0 4C, 05, 05]
+
+1FB8D; [0C C0 53, 05, 05]
+
+1FB8E; [0C C0 5A, 05, 05]
+
+1FB8F; [0C C0 61, 05, 05]
+
+1FB90; [0C C0 68, 05, 05]
+
+1FB91; [0C C0 6F, 05, 05]
+
+1FB92; [0C C0 76, 05, 05]
+
+1FB94; [0C C0 7D, 05, 05]
+
+1FB95; [0C C0 84, 05, 05]
+
+1FB96; [0C C0 8B, 05, 05]
+
+1FB97; [0C C0 92, 05, 05]
+
+1FB98; [0C C0 99, 05, 05]
+
+1FB99; [0C C0 A0, 05, 05]
+
+1FB9A; [0C C0 A7, 05, 05]
+
+1FB9B; [0C C0 AE, 05, 05]
+
+1FB9C; [0C C0 B5, 05, 05]
+
+1FB9D; [0C C0 BC, 05, 05]
+
+1FB9E; [0C C0 C3, 05, 05]
+
+1FB9F; [0C C0 CA, 05, 05]
+
+1FBA0; [0C C0 D1, 05, 05]
+
+1FBA1; [0C C0 D8, 05, 05]
+
+1FBA2; [0C C0 DF, 05, 05]
+
+1FBA3; [0C C0 E6, 05, 05]
+
+1FBA4; [0C C0 ED, 05, 05]
+
+1FBA5; [0C C0 F4, 05, 05]
+
+1FBA6; [0C C0 FB, 05, 05]
+
+1FBA7; [0C C1 04, 05, 05]
+
+1FBA8; [0C C1 0B, 05, 05]
+
+1FBA9; [0C C1 12, 05, 05]
+
+1FBAA; [0C C1 19, 05, 05]
+
+1FBAB; [0C C1 20, 05, 05]
+
+1FBAC; [0C C1 27, 05, 05]
+
+1FBAD; [0C C1 2E, 05, 05]
+
+1FBAE; [0C C1 35, 05, 05]
+
+1FBAF; [0C C1 3C, 05, 05]
+
+1FBB0; [0C C1 43, 05, 05]
+
+1FBB1; [0C C1 4A, 05, 05]
+
+1FBB2; [0C C1 51, 05, 05]
+
+1FBB3; [0C C1 58, 05, 05]
+
+1FBB4; [0C C1 5F, 05, 05]
+
+1FBB5; [0C C1 66, 05, 05]
+
+1FBB6; [0C C1 6D, 05, 05]
+
+1FBB7; [0C C1 74, 05, 05]
+
+1FBB8; [0C C1 7B, 05, 05]
+
+1FBB9; [0C C1 82, 05, 05]
+
+1FBBA; [0C C1 89, 05, 05]
+
+1FBBB; [0C C1 90, 05, 05]
+
+1FBBC; [0C C1 97, 05, 05]
+
+1FBBD; [0C C1 9E, 05, 05]
+
+1FBBE; [0C C1 A5, 05, 05]
+
+1FBBF; [0C C1 AC, 05, 05]
+
+1FBC0; [0C C1 B3, 05, 05]
+
+1FBC1; [0C C1 BA, 05, 05]
+
+1FBC2; [0C C1 C1, 05, 05]
+
+1FBC3; [0C C1 C8, 05, 05]
+
+1FBC4; [0C C1 CF, 05, 05]
+
+1FBC5; [0C C1 D6, 05, 05]
+
+1FBC6; [0C C1 DD, 05, 05]
+
+1FBC7; [0C C1 E4, 05, 05]
+
+1FBC8; [0C C1 EB, 05, 05]
+
+1FBC9; [0C C1 F2, 05, 05]
+
+1FBCA; [0C C1 F9, 05, 05]
+
+2600; [0C C2 02, 05, 05]
+
+2601; [0C C2 09, 05, 05]
+
+2602; [0C C2 10, 05, 05]
+
+2603; [0C C2 17, 05, 05]
+
+2604; [0C C2 1E, 05, 05]
+
+2605; [0C C2 25, 05, 05]
-2601; [0C BC 77, 05, 05]
+2606; [0C C2 2C, 05, 05]
-2602; [0C BC 7E, 05, 05]
+2607; [0C C2 33, 05, 05]
-2603; [0C BC 85, 05, 05]
+2608; [0C C2 3A, 05, 05]
-2604; [0C BC 8C, 05, 05]
+2609; [0C C2 41, 05, 05]
-2605; [0C BC 93, 05, 05]
+260A; [0C C2 48, 05, 05]
-2606; [0C BC 9A, 05, 05]
+260B; [0C C2 4F, 05, 05]
-2607; [0C BC A1, 05, 05]
+260C; [0C C2 56, 05, 05]
-2608; [0C BC A8, 05, 05]
+260D; [0C C2 5D, 05, 05]
-2609; [0C BC AF, 05, 05]
+260E; [0C C2 64, 05, 05]
-260A; [0C BC B6, 05, 05]
+260F; [0C C2 6B, 05, 05]
-260B; [0C BC BD, 05, 05]
+2610; [0C C2 72, 05, 05]
-260C; [0C BC C4, 05, 05]
+2611; [0C C2 79, 05, 05]
-260D; [0C BC CB, 05, 05]
+2612; [0C C2 80, 05, 05]
-260E; [0C BC D2, 05, 05]
+2613; [0C C2 87, 05, 05]
-260F; [0C BC D9, 05, 05]
+2614; [0C C2 8E, 05, 05]
-2610; [0C BC E0, 05, 05]
+2615; [0C C2 95, 05, 05]
-2611; [0C BC E7, 05, 05]
+2616; [0C C2 9C, 05, 05]
-2612; [0C BC EE, 05, 05]
+2617; [0C C2 A3, 05, 05]
-2613; [0C BC F5, 05, 05]
+2618; [0C C2 AA, 05, 05]
-2614; [0C BC FC, 05, 05]
+2619; [0C C2 B1, 05, 05]
-2615; [0C BD 05, 05, 05]
+261A; [0C C2 B8, 05, 05]
-2616; [0C BD 0C, 05, 05]
+261B; [0C C2 BF, 05, 05]
-2617; [0C BD 13, 05, 05]
+261C; [0C C2 C6, 05, 05]
-2618; [0C BD 1A, 05, 05]
+261D; [0C C2 CD, 05, 05]
-2619; [0C BD 21, 05, 05]
+261E; [0C C2 D4, 05, 05]
-261A; [0C BD 28, 05, 05]
+261F; [0C C2 DB, 05, 05]
-261B; [0C BD 2F, 05, 05]
+2620; [0C C2 E2, 05, 05]
-261C; [0C BD 36, 05, 05]
+2621; [0C C2 E9, 05, 05]
-261D; [0C BD 3D, 05, 05]
+2622; [0C C2 F0, 05, 05]
-261E; [0C BD 44, 05, 05]
+2623; [0C C2 F7, 05, 05]
-261F; [0C BD 4B, 05, 05]
+2624; [0C C2 FE, 05, 05]
-2620; [0C BD 52, 05, 05]
+2625; [0C C3 07, 05, 05]
-2621; [0C BD 59, 05, 05]
+2626; [0C C3 0E, 05, 05]
-2622; [0C BD 60, 05, 05]
+2627; [0C C3 15, 05, 05]
-2623; [0C BD 67, 05, 05]
+2628; [0C C3 1C, 05, 05]
-2624; [0C BD 6E, 05, 05]
+2629; [0C C3 23, 05, 05]
-2625; [0C BD 75, 05, 05]
+262A; [0C C3 2A, 05, 05]
-2626; [0C BD 7C, 05, 05]
+262B; [0C C3 31, 05, 05]
-2627; [0C BD 83, 05, 05]
+262C; [0C C3 38, 05, 05]
-2628; [0C BD 8A, 05, 05]
+262D; [0C C3 3F, 05, 05]
-2629; [0C BD 91, 05, 05]
+262E; [0C C3 46, 05, 05]
-262A; [0C BD 98, 05, 05]
+262F; [0C C3 4D, 05, 05]
-262B; [0C BD 9F, 05, 05]
+2638; [0C C3 54, 05, 05]
-262C; [0C BD A6, 05, 05]
+2639; [0C C3 5B, 05, 05]
-262D; [0C BD AD, 05, 05]
+263A; [0C C3 62, 05, 05]
-262E; [0C BD B4, 05, 05]
+263B; [0C C3 69, 05, 05]
-262F; [0C BD BB, 05, 05]
+263C; [0C C3 70, 05, 05]
-2638; [0C BD C2, 05, 05]
+263D; [0C C3 77, 05, 05]
-2639; [0C BD C9, 05, 05]
+263E; [0C C3 7E, 05, 05]
-263A; [0C BD D0, 05, 05]
+263F; [0C C3 85, 05, 05]
-263B; [0C BD D7, 05, 05]
+2640; [0C C3 8C, 05, 05]
-263C; [0C BD DE, 05, 05]
+2641; [0C C3 93, 05, 05]
-263D; [0C BD E5, 05, 05]
+2642; [0C C3 9A, 05, 05]
-263E; [0C BD EC, 05, 05]
+2643; [0C C3 A1, 05, 05]
-263F; [0C BD F3, 05, 05]
+2644; [0C C3 A8, 05, 05]
-2640; [0C BD FA, 05, 05]
+2645; [0C C3 AF, 05, 05]
-2641; [0C BE 03, 05, 05]
+2646; [0C C3 B6, 05, 05]
-2642; [0C BE 0A, 05, 05]
+2647; [0C C3 BD, 05, 05]
-2643; [0C BE 11, 05, 05]
+2648; [0C C3 C4, 05, 05]
-2644; [0C BE 18, 05, 05]
+2649; [0C C3 CB, 05, 05]
-2645; [0C BE 1F, 05, 05]
+264A; [0C C3 D2, 05, 05]
-2646; [0C BE 26, 05, 05]
+264B; [0C C3 D9, 05, 05]
-2647; [0C BE 2D, 05, 05]
+264C; [0C C3 E0, 05, 05]
-2648; [0C BE 34, 05, 05]
+264D; [0C C3 E7, 05, 05]
-2649; [0C BE 3B, 05, 05]
+264E; [0C C3 EE, 05, 05]
-264A; [0C BE 42, 05, 05]
+264F; [0C C3 F5, 05, 05]
-264B; [0C BE 49, 05, 05]
+2650; [0C C3 FC, 05, 05]
-264C; [0C BE 50, 05, 05]
+2651; [0C C4 05, 05, 05]
-264D; [0C BE 57, 05, 05]
+2652; [0C C4 0C, 05, 05]
-264E; [0C BE 5E, 05, 05]
+2653; [0C C4 13, 05, 05]
-264F; [0C BE 65, 05, 05]
+2654; [0C C4 1A, 05, 05]
-2650; [0C BE 6C, 05, 05]
+2655; [0C C4 21, 05, 05]
-2651; [0C BE 73, 05, 05]
+2656; [0C C4 28, 05, 05]
-2652; [0C BE 7A, 05, 05]
+2657; [0C C4 2F, 05, 05]
-2653; [0C BE 81, 05, 05]
+2658; [0C C4 36, 05, 05]
-2654; [0C BE 88, 05, 05]
+2659; [0C C4 3D, 05, 05]
-2655; [0C BE 8F, 05, 05]
+265A; [0C C4 44, 05, 05]
-2656; [0C BE 96, 05, 05]
+265B; [0C C4 4B, 05, 05]
-2657; [0C BE 9D, 05, 05]
+265C; [0C C4 52, 05, 05]
-2658; [0C BE A4, 05, 05]
+265D; [0C C4 59, 05, 05]
-2659; [0C BE AB, 05, 05]
+265E; [0C C4 60, 05, 05]
-265A; [0C BE B2, 05, 05]
+265F; [0C C4 67, 05, 05]
-265B; [0C BE B9, 05, 05]
+2660; [0C C4 6E, 05, 05]
-265C; [0C BE C0, 05, 05]
+2661; [0C C4 75, 05, 05]
-265D; [0C BE C7, 05, 05]
+2662; [0C C4 7C, 05, 05]
-265E; [0C BE CE, 05, 05]
+2663; [0C C4 83, 05, 05]
-265F; [0C BE D5, 05, 05]
+2664; [0C C4 8A, 05, 05]
-2660; [0C BE DC, 05, 05]
+2665; [0C C4 91, 05, 05]
-2661; [0C BE E3, 05, 05]
+2666; [0C C4 98, 05, 05]
-2662; [0C BE EA, 05, 05]
+2667; [0C C4 9F, 05, 05]
-2663; [0C BE F1, 05, 05]
+2668; [0C C4 A6, 05, 05]
-2664; [0C BE F8, 05, 05]
+2669; [0C C4 AD, 05, 05]
-2665; [0C BE FF, 05, 05]
+266A; [0C C4 B4, 05, 05]
-2666; [0C BF 08, 05, 05]
+266B; [0C C4 BB, 05, 05]
-2667; [0C BF 0F, 05, 05]
+266C; [0C C4 C2, 05, 05]
-2668; [0C BF 16, 05, 05]
+2670; [0C C4 C9, 05, 05]
-2669; [0C BF 1D, 05, 05]
+2671; [0C C4 D0, 05, 05]
-266A; [0C BF 24, 05, 05]
+2672; [0C C4 D7, 05, 05]
-266B; [0C BF 2B, 05, 05]
+2673; [0C C4 DE, 05, 05]
-266C; [0C BF 32, 05, 05]
+2674; [0C C4 E5, 05, 05]
-2670; [0C BF 39, 05, 05]
+2675; [0C C4 EC, 05, 05]
-2671; [0C BF 40, 05, 05]
+2676; [0C C4 F3, 05, 05]
-2672; [0C BF 47, 05, 05]
+2677; [0C C4 FA, 05, 05]
-2673; [0C BF 4E, 05, 05]
+2678; [0C C5 03, 05, 05]
-2674; [0C BF 55, 05, 05]
+2679; [0C C5 0A, 05, 05]
-2675; [0C BF 5C, 05, 05]
+267A; [0C C5 11, 05, 05]
-2676; [0C BF 63, 05, 05]
+267B; [0C C5 18, 05, 05]
-2677; [0C BF 6A, 05, 05]
+267C; [0C C5 1F, 05, 05]
-2678; [0C BF 71, 05, 05]
+267D; [0C C5 26, 05, 05]
-2679; [0C BF 78, 05, 05]
+267E; [0C C5 2D, 05, 05]
-267A; [0C BF 7F, 05, 05]
+267F; [0C C5 34, 05, 05]
-267B; [0C BF 86, 05, 05]
+2680; [0C C5 3B, 05, 05]
-267C; [0C BF 8D, 05, 05]
+2681; [0C C5 42, 05, 05]
-267D; [0C BF 94, 05, 05]
+2682; [0C C5 49, 05, 05]
-267E; [0C BF 9B, 05, 05]
+2683; [0C C5 50, 05, 05]
-267F; [0C BF A2, 05, 05]
+2684; [0C C5 57, 05, 05]
-2680; [0C BF A9, 05, 05]
+2685; [0C C5 5E, 05, 05]
-2681; [0C BF B0, 05, 05]
+2686; [0C C5 65, 05, 05]
-2682; [0C BF B7, 05, 05]
+2687; [0C C5 6C, 05, 05]
-2683; [0C BF BE, 05, 05]
+2688; [0C C5 73, 05, 05]
-2684; [0C BF C5, 05, 05]
+2689; [0C C5 7A, 05, 05]
-2685; [0C BF CC, 05, 05]
+2690; [0C C5 81, 05, 05]
-2686; [0C BF D3, 05, 05]
+2691; [0C C5 88, 05, 05]
-2687; [0C BF DA, 05, 05]
+2692; [0C C5 8F, 05, 05]
-2688; [0C BF E1, 05, 05]
+2693; [0C C5 96, 05, 05]
-2689; [0C BF E8, 05, 05]
+2694; [0C C5 9D, 05, 05]
-2690; [0C BF EF, 05, 05]
+2695; [0C C5 A4, 05, 05]
-2691; [0C BF F6, 05, 05]
+2696; [0C C5 AB, 05, 05]
-2692; [0C BF FD, 05, 05]
+2697; [0C C5 B2, 05, 05]
-2693; [0C C0 06, 05, 05]
+2698; [0C C5 B9, 05, 05]
-2694; [0C C0 0D, 05, 05]
+2699; [0C C5 C0, 05, 05]
-2695; [0C C0 14, 05, 05]
+269A; [0C C5 C7, 05, 05]
-2696; [0C C0 1B, 05, 05]
+269B; [0C C5 CE, 05, 05]
-2697; [0C C0 22, 05, 05]
+269C; [0C C5 D5, 05, 05]
-2698; [0C C0 29, 05, 05]
+269D; [0C C5 DC, 05, 05]
-2699; [0C C0 30, 05, 05]
+269E; [0C C5 E3, 05, 05]
-269A; [0C C0 37, 05, 05]
+269F; [0C C5 EA, 05, 05]
-269B; [0C C0 3E, 05, 05]
+26A0; [0C C5 F1, 05, 05]
-269C; [0C C0 45, 05, 05]
+26A1; [0C C5 F8, 05, 05]
-269D; [0C C0 4C, 05, 05]
+26A2; [0C C5 FF, 05, 05]
-269E; [0C C0 53, 05, 05]
+26A3; [0C C6 08, 05, 05]
-269F; [0C C0 5A, 05, 05]
+26A4; [0C C6 0F, 05, 05]
-26A0; [0C C0 61, 05, 05]
+26A5; [0C C6 16, 05, 05]
-26A1; [0C C0 68, 05, 05]
+26A6; [0C C6 1D, 05, 05]
-26A2; [0C C0 6F, 05, 05]
+26A7; [0C C6 24, 05, 05]
-26A3; [0C C0 76, 05, 05]
+26A8; [0C C6 2B, 05, 05]
-26A4; [0C C0 7D, 05, 05]
+26A9; [0C C6 32, 05, 05]
-26A5; [0C C0 84, 05, 05]
+26AA; [0C C6 39, 05, 05]
-26A6; [0C C0 8B, 05, 05]
+26AB; [0C C6 40, 05, 05]
-26A7; [0C C0 92, 05, 05]
+26AC; [0C C6 47, 05, 05]
-26A8; [0C C0 99, 05, 05]
+26AD; [0C C6 4E, 05, 05]
-26A9; [0C C0 A0, 05, 05]
+26AE; [0C C6 55, 05, 05]
-26AA; [0C C0 A7, 05, 05]
+26AF; [0C C6 5C, 05, 05]
-26AB; [0C C0 AE, 05, 05]
+26B0; [0C C6 63, 05, 05]
-26AC; [0C C0 B5, 05, 05]
+26B1; [0C C6 6A, 05, 05]
-26AD; [0C C0 BC, 05, 05]
+26B2; [0C C6 71, 05, 05]
-26AE; [0C C0 C3, 05, 05]
+26B3; [0C C6 78, 05, 05]
-26AF; [0C C0 CA, 05, 05]
+26B4; [0C C6 7F, 05, 05]
-26B0; [0C C0 D1, 05, 05]
+26B5; [0C C6 86, 05, 05]
-26B1; [0C C0 D8, 05, 05]
+26B6; [0C C6 8D, 05, 05]
-26B2; [0C C0 DF, 05, 05]
+26B7; [0C C6 94, 05, 05]
-26B3; [0C C0 E6, 05, 05]
+26B8; [0C C6 9B, 05, 05]
-26B4; [0C C0 ED, 05, 05]
+26B9; [0C C6 A2, 05, 05]
-26B5; [0C C0 F4, 05, 05]
+26BA; [0C C6 A9, 05, 05]
-26B6; [0C C0 FB, 05, 05]
+26BB; [0C C6 B0, 05, 05]
-26B7; [0C C1 04, 05, 05]
+26BC; [0C C6 B7, 05, 05]
-26B8; [0C C1 0B, 05, 05]
+26BD; [0C C6 BE, 05, 05]
-26B9; [0C C1 12, 05, 05]
+26BE; [0C C6 C5, 05, 05]
-26BA; [0C C1 19, 05, 05]
+26BF; [0C C6 CC, 05, 05]
-26BB; [0C C1 20, 05, 05]
+26C0; [0C C6 D3, 05, 05]
-26BC; [0C C1 27, 05, 05]
+26C1; [0C C6 DA, 05, 05]
-26BD; [0C C1 2E, 05, 05]
+26C2; [0C C6 E1, 05, 05]
-26BE; [0C C1 35, 05, 05]
+26C3; [0C C6 E8, 05, 05]
-26BF; [0C C1 3C, 05, 05]
+26C4; [0C C6 EF, 05, 05]
-26C0; [0C C1 43, 05, 05]
+26C5; [0C C6 F6, 05, 05]
-26C1; [0C C1 4A, 05, 05]
+26C6; [0C C6 FD, 05, 05]
-26C2; [0C C1 51, 05, 05]
+26C7; [0C C7 06, 05, 05]
-26C3; [0C C1 58, 05, 05]
+26C8; [0C C7 0D, 05, 05]
-26C4; [0C C1 5F, 05, 05]
+26C9; [0C C7 14, 05, 05]
-26C5; [0C C1 66, 05, 05]
+26CA; [0C C7 1B, 05, 05]
-26C6; [0C C1 6D, 05, 05]
+26CB; [0C C7 22, 05, 05]
-26C7; [0C C1 74, 05, 05]
+26CC; [0C C7 29, 05, 05]
-26C8; [0C C1 7B, 05, 05]
+26CD; [0C C7 30, 05, 05]
-26C9; [0C C1 82, 05, 05]
+26CE; [0C C7 37, 05, 05]
-26CA; [0C C1 89, 05, 05]
+26CF; [0C C7 3E, 05, 05]
-26CB; [0C C1 90, 05, 05]
+26D0; [0C C7 45, 05, 05]
-26CC; [0C C1 97, 05, 05]
+26D1; [0C C7 4C, 05, 05]
-26CD; [0C C1 9E, 05, 05]
+26D2; [0C C7 53, 05, 05]
-26CE; [0C C1 A5, 05, 05]
+26D3; [0C C7 5A, 05, 05]
-26CF; [0C C1 AC, 05, 05]
+26D4; [0C C7 61, 05, 05]
-26D0; [0C C1 B3, 05, 05]
+26D5; [0C C7 68, 05, 05]
-26D1; [0C C1 BA, 05, 05]
+26D6; [0C C7 6F, 05, 05]
-26D2; [0C C1 C1, 05, 05]
+26D7; [0C C7 76, 05, 05]
-26D3; [0C C1 C8, 05, 05]
+26D8; [0C C7 7D, 05, 05]
-26D4; [0C C1 CF, 05, 05]
+26D9; [0C C7 84, 05, 05]
-26D5; [0C C1 D6, 05, 05]
+26DA; [0C C7 8B, 05, 05]
-26D6; [0C C1 DD, 05, 05]
+26DB; [0C C7 92, 05, 05]
-26D7; [0C C1 E4, 05, 05]
+26DC; [0C C7 99, 05, 05]
-26D8; [0C C1 EB, 05, 05]
+26DD; [0C C7 A0, 05, 05]
-26D9; [0C C1 F2, 05, 05]
+26DE; [0C C7 A7, 05, 05]
-26DA; [0C C1 F9, 05, 05]
+26DF; [0C C7 AE, 05, 05]
-26DB; [0C C2 02, 05, 05]
+26E0; [0C C7 B5, 05, 05]
-26DC; [0C C2 09, 05, 05]
+26E1; [0C C7 BC, 05, 05]
-26DD; [0C C2 10, 05, 05]
+26E2; [0C C7 C3, 05, 05]
-26DE; [0C C2 17, 05, 05]
+26E3; [0C C7 CA, 05, 05]
-26DF; [0C C2 1E, 05, 05]
+26E4; [0C C7 D1, 05, 05]
-26E0; [0C C2 25, 05, 05]
+26E5; [0C C7 D8, 05, 05]
-26E1; [0C C2 2C, 05, 05]
+26E6; [0C C7 DF, 05, 05]
-26E2; [0C C2 33, 05, 05]
+26E7; [0C C7 E6, 05, 05]
-26E3; [0C C2 3A, 05, 05]
+26E8; [0C C7 ED, 05, 05]
-26E4; [0C C2 41, 05, 05]
+26E9; [0C C7 F4, 05, 05]
-26E5; [0C C2 48, 05, 05]
+26EA; [0C C7 FB, 05, 05]
-26E6; [0C C2 4F, 05, 05]
+26EB; [0C C8 04, 05, 05]
-26E7; [0C C2 56, 05, 05]
+26EC; [0C C8 0B, 05, 05]
-26E8; [0C C2 5D, 05, 05]
+26ED; [0C C8 12, 05, 05]
-26E9; [0C C2 64, 05, 05]
+26EE; [0C C8 19, 05, 05]
-26EA; [0C C2 6B, 05, 05]
+26EF; [0C C8 20, 05, 05]
-26EB; [0C C2 72, 05, 05]
+26F0; [0C C8 27, 05, 05]
-26EC; [0C C2 79, 05, 05]
+26F1; [0C C8 2E, 05, 05]
-26ED; [0C C2 80, 05, 05]
+26F2; [0C C8 35, 05, 05]
-26EE; [0C C2 87, 05, 05]
+26F3; [0C C8 3C, 05, 05]
-26EF; [0C C2 8E, 05, 05]
+26F4; [0C C8 43, 05, 05]
-26F0; [0C C2 95, 05, 05]
+26F5; [0C C8 4A, 05, 05]
-26F1; [0C C2 9C, 05, 05]
+26F6; [0C C8 51, 05, 05]
-26F2; [0C C2 A3, 05, 05]
+26F7; [0C C8 58, 05, 05]
-26F3; [0C C2 AA, 05, 05]
+26F8; [0C C8 5F, 05, 05]
-26F4; [0C C2 B1, 05, 05]
+26F9; [0C C8 66, 05, 05]
-26F5; [0C C2 B8, 05, 05]
+26FA; [0C C8 6D, 05, 05]
-26F6; [0C C2 BF, 05, 05]
+26FB; [0C C8 74, 05, 05]
-26F7; [0C C2 C6, 05, 05]
+26FC; [0C C8 7B, 05, 05]
-26F8; [0C C2 CD, 05, 05]
+26FD; [0C C8 82, 05, 05]
-26F9; [0C C2 D4, 05, 05]
+26FE; [0C C8 89, 05, 05]
-26FA; [0C C2 DB, 05, 05]
+26FF; [0C C8 90, 05, 05]
-26FB; [0C C2 E2, 05, 05]
+1F1E6; [0C C8 97, 05, 05]
-26FC; [0C C2 E9, 05, 05]
+1F1E7; [0C C8 9E, 05, 05]
-26FD; [0C C2 F0, 05, 05]
+1F1E8; [0C C8 A5, 05, 05]
-26FE; [0C C2 F7, 05, 05]
+1F1E9; [0C C8 AC, 05, 05]
-26FF; [0C C2 FE, 05, 05]
+1F1EA; [0C C8 B3, 05, 05]
-1F1E6; [0C C3 07, 05, 05]
+1F1EB; [0C C8 BA, 05, 05]
-1F1E7; [0C C3 0E, 05, 05]
+1F1EC; [0C C8 C1, 05, 05]
-1F1E8; [0C C3 15, 05, 05]
+1F1ED; [0C C8 C8, 05, 05]
-1F1E9; [0C C3 1C, 05, 05]
+1F1EE; [0C C8 CF, 05, 05]
-1F1EA; [0C C3 23, 05, 05]
+1F1EF; [0C C8 D6, 05, 05]
-1F1EB; [0C C3 2A, 05, 05]
+1F1F0; [0C C8 DD, 05, 05]
-1F1EC; [0C C3 31, 05, 05]
+1F1F1; [0C C8 E4, 05, 05]
-1F1ED; [0C C3 38, 05, 05]
+1F1F2; [0C C8 EB, 05, 05]
-1F1EE; [0C C3 3F, 05, 05]
+1F1F3; [0C C8 F2, 05, 05]
-1F1EF; [0C C3 46, 05, 05]
+1F1F4; [0C C8 F9, 05, 05]
-1F1F0; [0C C3 4D, 05, 05]
+1F1F5; [0C C9 02, 05, 05]
-1F1F1; [0C C3 54, 05, 05]
+1F1F6; [0C C9 09, 05, 05]
-1F1F2; [0C C3 5B, 05, 05]
+1F1F7; [0C C9 10, 05, 05]
-1F1F3; [0C C3 62, 05, 05]
+1F1F8; [0C C9 17, 05, 05]
-1F1F4; [0C C3 69, 05, 05]
+1F1F9; [0C C9 1E, 05, 05]
-1F1F5; [0C C3 70, 05, 05]
+1F1FA; [0C C9 25, 05, 05]
-1F1F6; [0C C3 77, 05, 05]
+1F1FB; [0C C9 2C, 05, 05]
-1F1F7; [0C C3 7E, 05, 05]
+1F1FC; [0C C9 33, 05, 05]
-1F1F8; [0C C3 85, 05, 05]
+1F1FD; [0C C9 3A, 05, 05]
-1F1F9; [0C C3 8C, 05, 05]
+1F1FE; [0C C9 41, 05, 05]
-1F1FA; [0C C3 93, 05, 05]
+1F1FF; [0C C9 48, 05, 05]
-1F1FB; [0C C3 9A, 05, 05]
+2700; [0C C9 4F, 05, 05]
-1F1FC; [0C C3 A1, 05, 05]
+2701; [0C C9 56, 05, 05]
-1F1FD; [0C C3 A8, 05, 05]
+2702; [0C C9 5D, 05, 05]
-1F1FE; [0C C3 AF, 05, 05]
+2703; [0C C9 64, 05, 05]
-1F1FF; [0C C3 B6, 05, 05]
+2704; [0C C9 6B, 05, 05]
-2700; [0C C3 BD, 05, 05]
+2705; [0C C9 72, 05, 05]
-2701; [0C C3 C4, 05, 05]
+2706; [0C C9 79, 05, 05]
-2702; [0C C3 CB, 05, 05]
+2707; [0C C9 80, 05, 05]
-2703; [0C C3 D2, 05, 05]
+2708; [0C C9 87, 05, 05]
-2704; [0C C3 D9, 05, 05]
+2709; [0C C9 8E, 05, 05]
-2705; [0C C3 E0, 05, 05]
+270A; [0C C9 95, 05, 05]
-2706; [0C C3 E7, 05, 05]
+270B; [0C C9 9C, 05, 05]
-2707; [0C C3 EE, 05, 05]
+270C; [0C C9 A3, 05, 05]
-2708; [0C C3 F5, 05, 05]
+270D; [0C C9 AA, 05, 05]
-2709; [0C C3 FC, 05, 05]
+270E; [0C C9 B1, 05, 05]
-270A; [0C C4 05, 05, 05]
+270F; [0C C9 B8, 05, 05]
-270B; [0C C4 0C, 05, 05]
+2710; [0C C9 BF, 05, 05]
-270C; [0C C4 13, 05, 05]
+2711; [0C C9 C6, 05, 05]
-270D; [0C C4 1A, 05, 05]
+2712; [0C C9 CD, 05, 05]
-270E; [0C C4 21, 05, 05]
+2713; [0C C9 D4, 05, 05]
-270F; [0C C4 28, 05, 05]
+2714; [0C C9 DB, 05, 05]
-2710; [0C C4 2F, 05, 05]
+2715; [0C C9 E2, 05, 05]
-2711; [0C C4 36, 05, 05]
+2716; [0C C9 E9, 05, 05]
-2712; [0C C4 3D, 05, 05]
+2717; [0C C9 F0, 05, 05]
-2713; [0C C4 44, 05, 05]
+2718; [0C C9 F7, 05, 05]
-2714; [0C C4 4B, 05, 05]
+2719; [0C C9 FE, 05, 05]
-2715; [0C C4 52, 05, 05]
+271A; [0C CA 07, 05, 05]
-2716; [0C C4 59, 05, 05]
+271B; [0C CA 0E, 05, 05]
-2717; [0C C4 60, 05, 05]
+271C; [0C CA 15, 05, 05]
-2718; [0C C4 67, 05, 05]
+271D; [0C CA 1C, 05, 05]
-2719; [0C C4 6E, 05, 05]
+271E; [0C CA 23, 05, 05]
-271A; [0C C4 75, 05, 05]
+271F; [0C CA 2A, 05, 05]
-271B; [0C C4 7C, 05, 05]
+2720; [0C CA 31, 05, 05]
-271C; [0C C4 83, 05, 05]
+2E50; [0C CA 38, 05, 05]
-271D; [0C C4 8A, 05, 05]
+2E51; [0C CA 3F, 05, 05]
-271E; [0C C4 91, 05, 05]
+2721; [0C CA 46, 05, 05]
-271F; [0C C4 98, 05, 05]
+2722; [0C CA 4D, 05, 05]
-2720; [0C C4 9F, 05, 05]
+2723; [0C CA 54, 05, 05]
-2721; [0C C4 A6, 05, 05]
+2724; [0C CA 5B, 05, 05]
-2722; [0C C4 AD, 05, 05]
+2725; [0C CA 62, 05, 05]
-2723; [0C C4 B4, 05, 05]
+2726; [0C CA 69, 05, 05]
-2724; [0C C4 BB, 05, 05]
+2727; [0C CA 70, 05, 05]
-2725; [0C C4 C2, 05, 05]
+2728; [0C CA 77, 05, 05]
-2726; [0C C4 C9, 05, 05]
+2729; [0C CA 7E, 05, 05]
-2727; [0C C4 D0, 05, 05]
+272A; [0C CA 85, 05, 05]
-2728; [0C C4 D7, 05, 05]
+272B; [0C CA 8C, 05, 05]
-2729; [0C C4 DE, 05, 05]
+272C; [0C CA 93, 05, 05]
-272A; [0C C4 E5, 05, 05]
+272D; [0C CA 9A, 05, 05]
-272B; [0C C4 EC, 05, 05]
+272E; [0C CA A1, 05, 05]
-272C; [0C C4 F3, 05, 05]
+272F; [0C CA A8, 05, 05]
-272D; [0C C4 FA, 05, 05]
+2730; [0C CA AF, 05, 05]
-272E; [0C C5 03, 05, 05]
+2731; [0C CA B6, 05, 05]
-272F; [0C C5 0A, 05, 05]
+2732; [0C CA BD, 05, 05]
-2730; [0C C5 11, 05, 05]
+2733; [0C CA C4, 05, 05]
-2731; [0C C5 18, 05, 05]
+2734; [0C CA CB, 05, 05]
-2732; [0C C5 1F, 05, 05]
+2735; [0C CA D2, 05, 05]
-2733; [0C C5 26, 05, 05]
+2736; [0C CA D9, 05, 05]
-2734; [0C C5 2D, 05, 05]
+2737; [0C CA E0, 05, 05]
-2735; [0C C5 34, 05, 05]
+2738; [0C CA E7, 05, 05]
-2736; [0C C5 3B, 05, 05]
+2739; [0C CA EE, 05, 05]
-2737; [0C C5 42, 05, 05]
+273A; [0C CA F5, 05, 05]
-2738; [0C C5 49, 05, 05]
+273B; [0C CA FC, 05, 05]
-2739; [0C C5 50, 05, 05]
+273C; [0C CB 05, 05, 05]
-273A; [0C C5 57, 05, 05]
+273D; [0C CB 0C, 05, 05]
-273B; [0C C5 5E, 05, 05]
+273E; [0C CB 13, 05, 05]
-273C; [0C C5 65, 05, 05]
+273F; [0C CB 1A, 05, 05]
-273D; [0C C5 6C, 05, 05]
+2740; [0C CB 21, 05, 05]
-273E; [0C C5 73, 05, 05]
+2741; [0C CB 28, 05, 05]
-273F; [0C C5 7A, 05, 05]
+2742; [0C CB 2F, 05, 05]
-2740; [0C C5 81, 05, 05]
+2743; [0C CB 36, 05, 05]
-2741; [0C C5 88, 05, 05]
+2744; [0C CB 3D, 05, 05]
-2742; [0C C5 8F, 05, 05]
+2745; [0C CB 44, 05, 05]
-2743; [0C C5 96, 05, 05]
+2746; [0C CB 4B, 05, 05]
-2744; [0C C5 9D, 05, 05]
+2747; [0C CB 52, 05, 05]
-2745; [0C C5 A4, 05, 05]
+2748; [0C CB 59, 05, 05]
-2746; [0C C5 AB, 05, 05]
+2749; [0C CB 60, 05, 05]
-2747; [0C C5 B2, 05, 05]
+274A; [0C CB 67, 05, 05]
-2748; [0C C5 B9, 05, 05]
+274B; [0C CB 6E, 05, 05]
-2749; [0C C5 C0, 05, 05]
+274C; [0C CB 75, 05, 05]
-274A; [0C C5 C7, 05, 05]
+274D; [0C CB 7C, 05, 05]
-274B; [0C C5 CE, 05, 05]
+274E; [0C CB 83, 05, 05]
-274C; [0C C5 D5, 05, 05]
+274F; [0C CB 8A, 05, 05]
-274D; [0C C5 DC, 05, 05]
+2750; [0C CB 91, 05, 05]
-274E; [0C C5 E3, 05, 05]
+2751; [0C CB 98, 05, 05]
-274F; [0C C5 EA, 05, 05]
+2752; [0C CB 9F, 05, 05]
-2750; [0C C5 F1, 05, 05]
+2753; [0C CB A6, 05, 05]
-2751; [0C C5 F8, 05, 05]
+2754; [0C CB AD, 05, 05]
-2752; [0C C5 FF, 05, 05]
+2755; [0C CB B4, 05, 05]
-2753; [0C C6 08, 05, 05]
+2756; [0C CB BB, 05, 05]
-2754; [0C C6 0F, 05, 05]
+2757; [0C CB C2, 05, 05]
-2755; [0C C6 16, 05, 05]
+2758; [0C CB C9, 05, 05]
-2756; [0C C6 1D, 05, 05]
+2759; [0C CB D0, 05, 05]
-2757; [0C C6 24, 05, 05]
+275A; [0C CB D7, 05, 05]
-2758; [0C C6 2B, 05, 05]
+275B; [0C CB DE, 05, 05]
-2759; [0C C6 32, 05, 05]
+275C; [0C CB E5, 05, 05]
-275A; [0C C6 39, 05, 05]
+275D; [0C CB EC, 05, 05]
-275B; [0C C6 40, 05, 05]
+275E; [0C CB F3, 05, 05]
-275C; [0C C6 47, 05, 05]
+275F; [0C CB FA, 05, 05]
-275D; [0C C6 4E, 05, 05]
+2760; [0C CC 03, 05, 05]
-275E; [0C C6 55, 05, 05]
+2761; [0C CC 0A, 05, 05]
-275F; [0C C6 5C, 05, 05]
+2762; [0C CC 11, 05, 05]
-2760; [0C C6 63, 05, 05]
+2763; [0C CC 18, 05, 05]
-2761; [0C C6 6A, 05, 05]
+2764; [0C CC 1F, 05, 05]
-2762; [0C C6 71, 05, 05]
+2765; [0C CC 26, 05, 05]
-2763; [0C C6 78, 05, 05]
+2766; [0C CC 2D, 05, 05]
-2764; [0C C6 7F, 05, 05]
+2767; [0C CC 34, 05, 05]
-2765; [0C C6 86, 05, 05]
+2794; [0C CC 3B, 05, 05]
-2766; [0C C6 8D, 05, 05]
+2795; [0C CC 42, 05, 05]
-2767; [0C C6 94, 05, 05]
+2796; [0C CC 49, 05, 05]
-2794; [0C C6 9B, 05, 05]
+2797; [0C CC 50, 05, 05]
-2795; [0C C6 A2, 05, 05]
+2798; [0C CC 57, 05, 05]
-2796; [0C C6 A9, 05, 05]
+2799; [0C CC 5E, 05, 05]
-2797; [0C C6 B0, 05, 05]
+279A; [0C CC 65, 05, 05]
-2798; [0C C6 B7, 05, 05]
+279B; [0C CC 6C, 05, 05]
-2799; [0C C6 BE, 05, 05]
+279C; [0C CC 73, 05, 05]
-279A; [0C C6 C5, 05, 05]
+279D; [0C CC 7A, 05, 05]
-279B; [0C C6 CC, 05, 05]
+279E; [0C CC 81, 05, 05]
-279C; [0C C6 D3, 05, 05]
+279F; [0C CC 88, 05, 05]
-279D; [0C C6 DA, 05, 05]
+27A0; [0C CC 8F, 05, 05]
-279E; [0C C6 E1, 05, 05]
+27A1; [0C CC 96, 05, 05]
-279F; [0C C6 E8, 05, 05]
+27A2; [0C CC 9D, 05, 05]
-27A0; [0C C6 EF, 05, 05]
+27A3; [0C CC A4, 05, 05]
-27A1; [0C C6 F6, 05, 05]
+27A4; [0C CC AB, 05, 05]
-27A2; [0C C6 FD, 05, 05]
+27A5; [0C CC B2, 05, 05]
-27A3; [0C C7 06, 05, 05]
+27A6; [0C CC B9, 05, 05]
-27A4; [0C C7 0D, 05, 05]
+27A7; [0C CC C0, 05, 05]
-27A5; [0C C7 14, 05, 05]
+27A8; [0C CC C7, 05, 05]
-27A6; [0C C7 1B, 05, 05]
+27A9; [0C CC CE, 05, 05]
-27A7; [0C C7 22, 05, 05]
+27AA; [0C CC D5, 05, 05]
-27A8; [0C C7 29, 05, 05]
+27AB; [0C CC DC, 05, 05]
-27A9; [0C C7 30, 05, 05]
+27AC; [0C CC E3, 05, 05]
-27AA; [0C C7 37, 05, 05]
+27AD; [0C CC EA, 05, 05]
-27AB; [0C C7 3E, 05, 05]
+27AE; [0C CC F1, 05, 05]
-27AC; [0C C7 45, 05, 05]
+27AF; [0C CC F8, 05, 05]
-27AD; [0C C7 4C, 05, 05]
+27B0; [0C CC FF, 05, 05]
-27AE; [0C C7 53, 05, 05]
+27B1; [0C CD 08, 05, 05]
-27AF; [0C C7 5A, 05, 05]
+27B2; [0C CD 0F, 05, 05]
-27B0; [0C C7 61, 05, 05]
+27B3; [0C CD 16, 05, 05]
-27B1; [0C C7 68, 05, 05]
+27B4; [0C CD 1D, 05, 05]
-27B2; [0C C7 6F, 05, 05]
+27B5; [0C CD 24, 05, 05]
-27B3; [0C C7 76, 05, 05]
+27B6; [0C CD 2B, 05, 05]
-27B4; [0C C7 7D, 05, 05]
+27B7; [0C CD 32, 05, 05]
-27B5; [0C C7 84, 05, 05]
+27B8; [0C CD 39, 05, 05]
-27B6; [0C C7 8B, 05, 05]
+27B9; [0C CD 40, 05, 05]
-27B7; [0C C7 92, 05, 05]
+27BA; [0C CD 47, 05, 05]
-27B8; [0C C7 99, 05, 05]
+27BB; [0C CD 4E, 05, 05]
-27B9; [0C C7 A0, 05, 05]
+27BC; [0C CD 55, 05, 05]
-27BA; [0C C7 A7, 05, 05]
+27BD; [0C CD 5C, 05, 05]
-27BB; [0C C7 AE, 05, 05]
+27BE; [0C CD 63, 05, 05]
-27BC; [0C C7 B5, 05, 05]
+27BF; [0C CD 6A, 05, 05]
-27BD; [0C C7 BC, 05, 05]
+27C0; [0C CD 71, 05, 05]
-27BE; [0C C7 C3, 05, 05]
+27C1; [0C CD 78, 05, 05]
-27BF; [0C C7 CA, 05, 05]
+27C2; [0C CD 7F, 05, 05]
-27C0; [0C C7 D1, 05, 05]
+27C3; [0C CD 86, 05, 05]
-27C1; [0C C7 D8, 05, 05]
+27C4; [0C CD 8D, 05, 05]
-27C2; [0C C7 DF, 05, 05]
+27C7; [0C CD 94, 05, 05]
-27C3; [0C C7 E6, 05, 05]
+27C8; [0C CD 9B, 05, 05]
-27C4; [0C C7 ED, 05, 05]
+27C9; [0C CD A2, 05, 05]
-27C7; [0C C7 F4, 05, 05]
+27CA; [0C CD A9, 05, 05]
-27C8; [0C C7 FB, 05, 05]
+27CB; [0C CD B0, 05, 05]
-27C9; [0C C8 04, 05, 05]
+27CC; [0C CD B7, 05, 05]
-27CA; [0C C8 0B, 05, 05]
+27CD; [0C CD BE, 05, 05]
-27CB; [0C C8 12, 05, 05]
+27CE; [0C CD C5, 05, 05]
-27CC; [0C C8 19, 05, 05]
+27CF; [0C CD CC, 05, 05]
-27CD; [0C C8 20, 05, 05]
+27D0; [0C CD D3, 05, 05]
-27CE; [0C C8 27, 05, 05]
+27D1; [0C CD DA, 05, 05]
-27CF; [0C C8 2E, 05, 05]
+27D2; [0C CD E1, 05, 05]
-27D0; [0C C8 35, 05, 05]
+27D3; [0C CD E8, 05, 05]
-27D1; [0C C8 3C, 05, 05]
+27D4; [0C CD EF, 05, 05]
-27D2; [0C C8 43, 05, 05]
+27D5; [0C CD F6, 05, 05]
-27D3; [0C C8 4A, 05, 05]
+27D6; [0C CD FD, 05, 05]
-27D4; [0C C8 51, 05, 05]
+27D7; [0C CE 06, 05, 05]
-27D5; [0C C8 58, 05, 05]
+27D8; [0C CE 0D, 05, 05]
-27D6; [0C C8 5F, 05, 05]
+27D9; [0C CE 14, 05, 05]
-27D7; [0C C8 66, 05, 05]
+27DA; [0C CE 1B, 05, 05]
-27D8; [0C C8 6D, 05, 05]
+27DB; [0C CE 22, 05, 05]
-27D9; [0C C8 74, 05, 05]
+27DC; [0C CE 29, 05, 05]
-27DA; [0C C8 7B, 05, 05]
+27DD; [0C CE 30, 05, 05]
-27DB; [0C C8 82, 05, 05]
+27DE; [0C CE 37, 05, 05]
-27DC; [0C C8 89, 05, 05]
+27DF; [0C CE 3E, 05, 05]
-27DD; [0C C8 90, 05, 05]
+27E0; [0C CE 45, 05, 05]
-27DE; [0C C8 97, 05, 05]
+27E1; [0C CE 4C, 05, 05]
-27DF; [0C C8 9E, 05, 05]
+27E2; [0C CE 53, 05, 05]
-27E0; [0C C8 A5, 05, 05]
+27E3; [0C CE 5A, 05, 05]
-27E1; [0C C8 AC, 05, 05]
+27E4; [0C CE 61, 05, 05]
-27E2; [0C C8 B3, 05, 05]
+27E5; [0C CE 68, 05, 05]
-27E3; [0C C8 BA, 05, 05]
+27F0; [0C CE 6F, 05, 05]
-27E4; [0C C8 C1, 05, 05]
+27F1; [0C CE 76, 05, 05]
-27E5; [0C C8 C8, 05, 05]
+27F2; [0C CE 7D, 05, 05]
-27F0; [0C C8 CF, 05, 05]
+27F3; [0C CE 84, 05, 05]
-27F1; [0C C8 D6, 05, 05]
+27F4; [0C CE 8B, 05, 05]
-27F2; [0C C8 DD, 05, 05]
+27F5; [0C CE 92, 05, 05]
-27F3; [0C C8 E4, 05, 05]
+27F6; [0C CE 99, 05, 05]
-27F4; [0C C8 EB, 05, 05]
+27F7; [0C CE A0, 05, 05]
-27F5; [0C C8 F2, 05, 05]
+27F8; [0C CE A7, 05, 05]
-27F6; [0C C8 F9, 05, 05]
+27F9; [0C CE AE, 05, 05]
-27F7; [0C C9 02, 05, 05]
+27FA; [0C CE B5, 05, 05]
-27F8; [0C C9 09, 05, 05]
+27FB; [0C CE BC, 05, 05]
-27F9; [0C C9 10, 05, 05]
+27FC; [0C CE C3, 05, 05]
-27FA; [0C C9 17, 05, 05]
+27FD; [0C CE CA, 05, 05]
-27FB; [0C C9 1E, 05, 05]
+27FE; [0C CE D1, 05, 05]
-27FC; [0C C9 25, 05, 05]
+27FF; [0C CE D8, 05, 05]
-27FD; [0C C9 2C, 05, 05]
+2900; [0C CE DF, 05, 05]
-27FE; [0C C9 33, 05, 05]
+2901; [0C CE E6, 05, 05]
-27FF; [0C C9 3A, 05, 05]
+2902; [0C CE ED, 05, 05]
-2900; [0C C9 41, 05, 05]
+2903; [0C CE F4, 05, 05]
-2901; [0C C9 48, 05, 05]
+2904; [0C CE FB, 05, 05]
-2902; [0C C9 4F, 05, 05]
+2905; [0C CF 04, 05, 05]
-2903; [0C C9 56, 05, 05]
+2906; [0C CF 0B, 05, 05]
-2904; [0C C9 5D, 05, 05]
+2907; [0C CF 12, 05, 05]
-2905; [0C C9 64, 05, 05]
+2908; [0C CF 19, 05, 05]
-2906; [0C C9 6B, 05, 05]
+2909; [0C CF 20, 05, 05]
-2907; [0C C9 72, 05, 05]
+290A; [0C CF 27, 05, 05]
-2908; [0C C9 79, 05, 05]
+290B; [0C CF 2E, 05, 05]
-2909; [0C C9 80, 05, 05]
+290C; [0C CF 35, 05, 05]
-290A; [0C C9 87, 05, 05]
+290D; [0C CF 3C, 05, 05]
-290B; [0C C9 8E, 05, 05]
+290E; [0C CF 43, 05, 05]
-290C; [0C C9 95, 05, 05]
+290F; [0C CF 4A, 05, 05]
-290D; [0C C9 9C, 05, 05]
+2910; [0C CF 51, 05, 05]
-290E; [0C C9 A3, 05, 05]
+2911; [0C CF 58, 05, 05]
-290F; [0C C9 AA, 05, 05]
+2912; [0C CF 5F, 05, 05]
-2910; [0C C9 B1, 05, 05]
+2913; [0C CF 66, 05, 05]
-2911; [0C C9 B8, 05, 05]
+2914; [0C CF 6D, 05, 05]
-2912; [0C C9 BF, 05, 05]
+2915; [0C CF 74, 05, 05]
-2913; [0C C9 C6, 05, 05]
+2916; [0C CF 7B, 05, 05]
-2914; [0C C9 CD, 05, 05]
+2917; [0C CF 82, 05, 05]
-2915; [0C C9 D4, 05, 05]
+2918; [0C CF 89, 05, 05]
-2916; [0C C9 DB, 05, 05]
+2919; [0C CF 90, 05, 05]
-2917; [0C C9 E2, 05, 05]
+291A; [0C CF 97, 05, 05]
-2918; [0C C9 E9, 05, 05]
+291B; [0C CF 9E, 05, 05]
-2919; [0C C9 F0, 05, 05]
+291C; [0C CF A5, 05, 05]
-291A; [0C C9 F7, 05, 05]
+291D; [0C CF AC, 05, 05]
-291B; [0C C9 FE, 05, 05]
+291E; [0C CF B3, 05, 05]
-291C; [0C CA 07, 05, 05]
+291F; [0C CF BA, 05, 05]
-291D; [0C CA 0E, 05, 05]
+2920; [0C CF C1, 05, 05]
-291E; [0C CA 15, 05, 05]
+2921; [0C CF C8, 05, 05]
-291F; [0C CA 1C, 05, 05]
+2922; [0C CF CF, 05, 05]
-2920; [0C CA 23, 05, 05]
+2923; [0C CF D6, 05, 05]
-2921; [0C CA 2A, 05, 05]
+2924; [0C CF DD, 05, 05]
-2922; [0C CA 31, 05, 05]
+2925; [0C CF E4, 05, 05]
-2923; [0C CA 38, 05, 05]
+2926; [0C CF EB, 05, 05]
-2924; [0C CA 3F, 05, 05]
+2927; [0C CF F2, 05, 05]
-2925; [0C CA 46, 05, 05]
+2928; [0C CF F9, 05, 05]
-2926; [0C CA 4D, 05, 05]
+2929; [0C D0 02, 05, 05]
-2927; [0C CA 54, 05, 05]
+292A; [0C D0 09, 05, 05]
-2928; [0C CA 5B, 05, 05]
+292B; [0C D0 10, 05, 05]
-2929; [0C CA 62, 05, 05]
+292C; [0C D0 17, 05, 05]
-292A; [0C CA 69, 05, 05]
+292D; [0C D0 1E, 05, 05]
-292B; [0C CA 70, 05, 05]
+292E; [0C D0 25, 05, 05]
-292C; [0C CA 77, 05, 05]
+292F; [0C D0 2C, 05, 05]
-292D; [0C CA 7E, 05, 05]
+2930; [0C D0 33, 05, 05]
-292E; [0C CA 85, 05, 05]
+2931; [0C D0 3A, 05, 05]
-292F; [0C CA 8C, 05, 05]
+2932; [0C D0 41, 05, 05]
-2930; [0C CA 93, 05, 05]
+2933; [0C D0 48, 05, 05]
-2931; [0C CA 9A, 05, 05]
+2934; [0C D0 4F, 05, 05]
-2932; [0C CA A1, 05, 05]
+2935; [0C D0 56, 05, 05]
-2933; [0C CA A8, 05, 05]
+2936; [0C D0 5D, 05, 05]
-2934; [0C CA AF, 05, 05]
+2937; [0C D0 64, 05, 05]
-2935; [0C CA B6, 05, 05]
+2938; [0C D0 6B, 05, 05]
-2936; [0C CA BD, 05, 05]
+2939; [0C D0 72, 05, 05]
-2937; [0C CA C4, 05, 05]
+293A; [0C D0 79, 05, 05]
-2938; [0C CA CB, 05, 05]
+293B; [0C D0 80, 05, 05]
-2939; [0C CA D2, 05, 05]
+293C; [0C D0 87, 05, 05]
-293A; [0C CA D9, 05, 05]
+293D; [0C D0 8E, 05, 05]
-293B; [0C CA E0, 05, 05]
+293E; [0C D0 95, 05, 05]
-293C; [0C CA E7, 05, 05]
+293F; [0C D0 9C, 05, 05]
-293D; [0C CA EE, 05, 05]
+2940; [0C D0 A3, 05, 05]
-293E; [0C CA F5, 05, 05]
+2941; [0C D0 AA, 05, 05]
-293F; [0C CA FC, 05, 05]
+2942; [0C D0 B1, 05, 05]
-2940; [0C CB 05, 05, 05]
+2943; [0C D0 B8, 05, 05]
-2941; [0C CB 0C, 05, 05]
+2944; [0C D0 BF, 05, 05]
-2942; [0C CB 13, 05, 05]
+2945; [0C D0 C6, 05, 05]
-2943; [0C CB 1A, 05, 05]
+2946; [0C D0 CD, 05, 05]
-2944; [0C CB 21, 05, 05]
+2947; [0C D0 D4, 05, 05]
-2945; [0C CB 28, 05, 05]
+2948; [0C D0 DB, 05, 05]
-2946; [0C CB 2F, 05, 05]
+2949; [0C D0 E2, 05, 05]
-2947; [0C CB 36, 05, 05]
+294A; [0C D0 E9, 05, 05]
-2948; [0C CB 3D, 05, 05]
+294B; [0C D0 F0, 05, 05]
-2949; [0C CB 44, 05, 05]
+294C; [0C D0 F7, 05, 05]
-294A; [0C CB 4B, 05, 05]
+294D; [0C D0 FE, 05, 05]
-294B; [0C CB 52, 05, 05]
+294E; [0C D1 07, 05, 05]
-294C; [0C CB 59, 05, 05]
+294F; [0C D1 0E, 05, 05]
-294D; [0C CB 60, 05, 05]
+2950; [0C D1 15, 05, 05]
-294E; [0C CB 67, 05, 05]
+2951; [0C D1 1C, 05, 05]
-294F; [0C CB 6E, 05, 05]
+2952; [0C D1 23, 05, 05]
-2950; [0C CB 75, 05, 05]
+2953; [0C D1 2A, 05, 05]
-2951; [0C CB 7C, 05, 05]
+2954; [0C D1 31, 05, 05]
-2952; [0C CB 83, 05, 05]
+2955; [0C D1 38, 05, 05]
-2953; [0C CB 8A, 05, 05]
+2956; [0C D1 3F, 05, 05]
-2954; [0C CB 91, 05, 05]
+2957; [0C D1 46, 05, 05]
-2955; [0C CB 98, 05, 05]
+2958; [0C D1 4D, 05, 05]
-2956; [0C CB 9F, 05, 05]
+2959; [0C D1 54, 05, 05]
-2957; [0C CB A6, 05, 05]
+295A; [0C D1 5B, 05, 05]
-2958; [0C CB AD, 05, 05]
+295B; [0C D1 62, 05, 05]
-2959; [0C CB B4, 05, 05]
+295C; [0C D1 69, 05, 05]
-295A; [0C CB BB, 05, 05]
+295D; [0C D1 70, 05, 05]
-295B; [0C CB C2, 05, 05]
+295E; [0C D1 77, 05, 05]
-295C; [0C CB C9, 05, 05]
+295F; [0C D1 7E, 05, 05]
-295D; [0C CB D0, 05, 05]
+2960; [0C D1 85, 05, 05]
-295E; [0C CB D7, 05, 05]
+2961; [0C D1 8C, 05, 05]
-295F; [0C CB DE, 05, 05]
+2962; [0C D1 93, 05, 05]
-2960; [0C CB E5, 05, 05]
+2963; [0C D1 9A, 05, 05]
-2961; [0C CB EC, 05, 05]
+2964; [0C D1 A1, 05, 05]
-2962; [0C CB F3, 05, 05]
+2965; [0C D1 A8, 05, 05]
-2963; [0C CB FA, 05, 05]
+2966; [0C D1 AF, 05, 05]
-2964; [0C CC 03, 05, 05]
+2967; [0C D1 B6, 05, 05]
-2965; [0C CC 0A, 05, 05]
+2968; [0C D1 BD, 05, 05]
-2966; [0C CC 11, 05, 05]
+2969; [0C D1 C4, 05, 05]
-2967; [0C CC 18, 05, 05]
+296A; [0C D1 CB, 05, 05]
-2968; [0C CC 1F, 05, 05]
+296B; [0C D1 D2, 05, 05]
-2969; [0C CC 26, 05, 05]
+296C; [0C D1 D9, 05, 05]
-296A; [0C CC 2D, 05, 05]
+296D; [0C D1 E0, 05, 05]
-296B; [0C CC 34, 05, 05]
+296E; [0C D1 E7, 05, 05]
-296C; [0C CC 3B, 05, 05]
+296F; [0C D1 EE, 05, 05]
-296D; [0C CC 42, 05, 05]
+2970; [0C D1 F5, 05, 05]
-296E; [0C CC 49, 05, 05]
+2971; [0C D1 FC, 05, 05]
-296F; [0C CC 50, 05, 05]
+2972; [0C D2 05, 05, 05]
-2970; [0C CC 57, 05, 05]
+2973; [0C D2 0C, 05, 05]
-2971; [0C CC 5E, 05, 05]
+2974; [0C D2 13, 05, 05]
-2972; [0C CC 65, 05, 05]
+2975; [0C D2 1A, 05, 05]
-2973; [0C CC 6C, 05, 05]
+2976; [0C D2 21, 05, 05]
-2974; [0C CC 73, 05, 05]
+2977; [0C D2 28, 05, 05]
-2975; [0C CC 7A, 05, 05]
+2978; [0C D2 2F, 05, 05]
-2976; [0C CC 81, 05, 05]
+2979; [0C D2 36, 05, 05]
-2977; [0C CC 88, 05, 05]
+297A; [0C D2 3D, 05, 05]
-2978; [0C CC 8F, 05, 05]
+297B; [0C D2 44, 05, 05]
-2979; [0C CC 96, 05, 05]
+297C; [0C D2 4B, 05, 05]
-297A; [0C CC 9D, 05, 05]
+297D; [0C D2 52, 05, 05]
-297B; [0C CC A4, 05, 05]
+297E; [0C D2 59, 05, 05]
-297C; [0C CC AB, 05, 05]
+297F; [0C D2 60, 05, 05]
-297D; [0C CC B2, 05, 05]
+2980; [0C D2 67, 05, 05]
-297E; [0C CC B9, 05, 05]
+2981; [0C D2 6E, 05, 05]
-297F; [0C CC C0, 05, 05]
+2982; [0C D2 75, 05, 05]
-2980; [0C CC C7, 05, 05]
+2999; [0C D2 7C, 05, 05]
-2981; [0C CC CE, 05, 05]
+299A; [0C D2 83, 05, 05]
-2982; [0C CC D5, 05, 05]
+299B; [0C D2 8A, 05, 05]
-2999; [0C CC DC, 05, 05]
+299C; [0C D2 91, 05, 05]
-299A; [0C CC E3, 05, 05]
+299D; [0C D2 98, 05, 05]
-299B; [0C CC EA, 05, 05]
+299E; [0C D2 9F, 05, 05]
-299C; [0C CC F1, 05, 05]
+299F; [0C D2 A6, 05, 05]
-299D; [0C CC F8, 05, 05]
+29A0; [0C D2 AD, 05, 05]
-299E; [0C CC FF, 05, 05]
+29A1; [0C D2 B4, 05, 05]
-299F; [0C CD 08, 05, 05]
+29A2; [0C D2 BB, 05, 05]
-29A0; [0C CD 0F, 05, 05]
+29A3; [0C D2 C2, 05, 05]
-29A1; [0C CD 16, 05, 05]
+29A4; [0C D2 C9, 05, 05]
-29A2; [0C CD 1D, 05, 05]
+29A5; [0C D2 D0, 05, 05]
-29A3; [0C CD 24, 05, 05]
+29A6; [0C D2 D7, 05, 05]
-29A4; [0C CD 2B, 05, 05]
+29A7; [0C D2 DE, 05, 05]
-29A5; [0C CD 32, 05, 05]
+29A8; [0C D2 E5, 05, 05]
-29A6; [0C CD 39, 05, 05]
+29A9; [0C D2 EC, 05, 05]
-29A7; [0C CD 40, 05, 05]
+29AA; [0C D2 F3, 05, 05]
-29A8; [0C CD 47, 05, 05]
+29AB; [0C D2 FA, 05, 05]
-29A9; [0C CD 4E, 05, 05]
+29AC; [0C D3 03, 05, 05]
-29AA; [0C CD 55, 05, 05]
+29AD; [0C D3 0A, 05, 05]
-29AB; [0C CD 5C, 05, 05]
+29AE; [0C D3 11, 05, 05]
-29AC; [0C CD 63, 05, 05]
+29AF; [0C D3 18, 05, 05]
-29AD; [0C CD 6A, 05, 05]
+29B0; [0C D3 1F, 05, 05]
-29AE; [0C CD 71, 05, 05]
+29B1; [0C D3 26, 05, 05]
-29AF; [0C CD 78, 05, 05]
+29B2; [0C D3 2D, 05, 05]
-29B0; [0C CD 7F, 05, 05]
+29B3; [0C D3 34, 05, 05]
-29B1; [0C CD 86, 05, 05]
+29B4; [0C D3 3B, 05, 05]
-29B2; [0C CD 8D, 05, 05]
+29B5; [0C D3 42, 05, 05]
-29B3; [0C CD 94, 05, 05]
+29B6; [0C D3 49, 05, 05]
-29B4; [0C CD 9B, 05, 05]
+29B7; [0C D3 50, 05, 05]
-29B5; [0C CD A2, 05, 05]
+29B8; [0C D3 57, 05, 05]
-29B6; [0C CD A9, 05, 05]
+29B9; [0C D3 5E, 05, 05]
-29B7; [0C CD B0, 05, 05]
+29BA; [0C D3 65, 05, 05]
-29B8; [0C CD B7, 05, 05]
+29BB; [0C D3 6C, 05, 05]
-29B9; [0C CD BE, 05, 05]
+29BC; [0C D3 73, 05, 05]
-29BA; [0C CD C5, 05, 05]
+29BD; [0C D3 7A, 05, 05]
-29BB; [0C CD CC, 05, 05]
+29BE; [0C D3 81, 05, 05]
-29BC; [0C CD D3, 05, 05]
+29BF; [0C D3 88, 05, 05]
-29BD; [0C CD DA, 05, 05]
+29C0; [0C D3 8F, 05, 05]
-29BE; [0C CD E1, 05, 05]
+29C1; [0C D3 96, 05, 05]
-29BF; [0C CD E8, 05, 05]
+29C2; [0C D3 9D, 05, 05]
-29C0; [0C CD EF, 05, 05]
+29C3; [0C D3 A4, 05, 05]
-29C1; [0C CD F6, 05, 05]
+29C4; [0C D3 AB, 05, 05]
-29C2; [0C CD FD, 05, 05]
+29C5; [0C D3 B2, 05, 05]
-29C3; [0C CE 06, 05, 05]
+29C6; [0C D3 B9, 05, 05]
-29C4; [0C CE 0D, 05, 05]
+29C7; [0C D3 C0, 05, 05]
-29C5; [0C CE 14, 05, 05]
+29C8; [0C D3 C7, 05, 05]
-29C6; [0C CE 1B, 05, 05]
+29C9; [0C D3 CE, 05, 05]
-29C7; [0C CE 22, 05, 05]
+29CA; [0C D3 D5, 05, 05]
-29C8; [0C CE 29, 05, 05]
+29CB; [0C D3 DC, 05, 05]
-29C9; [0C CE 30, 05, 05]
+29CC; [0C D3 E3, 05, 05]
-29CA; [0C CE 37, 05, 05]
+29CD; [0C D3 EA, 05, 05]
-29CB; [0C CE 3E, 05, 05]
+29CE; [0C D3 F1, 05, 05]
-29CC; [0C CE 45, 05, 05]
+29CF; [0C D3 F8, 05, 05]
-29CD; [0C CE 4C, 05, 05]
+29D0; [0C D3 FF, 05, 05]
-29CE; [0C CE 53, 05, 05]
+29D1; [0C D4 08, 05, 05]
-29CF; [0C CE 5A, 05, 05]
+29D2; [0C D4 0F, 05, 05]
-29D0; [0C CE 61, 05, 05]
+29D3; [0C D4 16, 05, 05]
-29D1; [0C CE 68, 05, 05]
+29D4; [0C D4 1D, 05, 05]
-29D2; [0C CE 6F, 05, 05]
+29D5; [0C D4 24, 05, 05]
-29D3; [0C CE 76, 05, 05]
+29D6; [0C D4 2B, 05, 05]
-29D4; [0C CE 7D, 05, 05]
+29D7; [0C D4 32, 05, 05]
-29D5; [0C CE 84, 05, 05]
+29DC; [0C D4 39, 05, 05]
-29D6; [0C CE 8B, 05, 05]
+29DD; [0C D4 40, 05, 05]
-29D7; [0C CE 92, 05, 05]
+29DE; [0C D4 47, 05, 05]
-29DC; [0C CE 99, 05, 05]
+29DF; [0C D4 4E, 05, 05]
-29DD; [0C CE A0, 05, 05]
+29E0; [0C D4 55, 05, 05]
-29DE; [0C CE A7, 05, 05]
+29E1; [0C D4 5C, 05, 05]
-29DF; [0C CE AE, 05, 05]
+29E2; [0C D4 63, 05, 05]
-29E0; [0C CE B5, 05, 05]
+29E3; [0C D4 6A, 05, 05]
-29E1; [0C CE BC, 05, 05]
+29E4; [0C D4 71, 05, 05]
-29E2; [0C CE C3, 05, 05]
+29E5; [0C D4 78, 05, 05]
-29E3; [0C CE CA, 05, 05]
+29E6; [0C D4 7F, 05, 05]
-29E4; [0C CE D1, 05, 05]
+29E7; [0C D4 86, 05, 05]
-29E5; [0C CE D8, 05, 05]
+29E8; [0C D4 8D, 05, 05]
-29E6; [0C CE DF, 05, 05]
+29E9; [0C D4 94, 05, 05]
-29E7; [0C CE E6, 05, 05]
+29EA; [0C D4 9B, 05, 05]
-29E8; [0C CE ED, 05, 05]
+29EB; [0C D4 A2, 05, 05]
-29E9; [0C CE F4, 05, 05]
+29EC; [0C D4 A9, 05, 05]
-29EA; [0C CE FB, 05, 05]
+29ED; [0C D4 B0, 05, 05]
-29EB; [0C CF 04, 05, 05]
+29EE; [0C D4 B7, 05, 05]
-29EC; [0C CF 0B, 05, 05]
+29EF; [0C D4 BE, 05, 05]
-29ED; [0C CF 12, 05, 05]
+29F0; [0C D4 C5, 05, 05]
-29EE; [0C CF 19, 05, 05]
+29F1; [0C D4 CC, 05, 05]
-29EF; [0C CF 20, 05, 05]
+29F2; [0C D4 D3, 05, 05]
-29F0; [0C CF 27, 05, 05]
+29F3; [0C D4 DA, 05, 05]
-29F1; [0C CF 2E, 05, 05]
+29F4; [0C D4 E1, 05, 05]
-29F2; [0C CF 35, 05, 05]
+29F5; [0C D4 E8, 05, 05]
-29F3; [0C CF 3C, 05, 05]
+29F6; [0C D4 EF, 05, 05]
-29F4; [0C CF 43, 05, 05]
+29F7; [0C D4 F6, 05, 05]
-29F5; [0C CF 4A, 05, 05]
+29F8; [0C D4 FD, 05, 05]
-29F6; [0C CF 51, 05, 05]
+29F9; [0C D5 06, 05, 05]
-29F7; [0C CF 58, 05, 05]
+29FA; [0C D5 0D, 05, 05]
-29F8; [0C CF 5F, 05, 05]
+29FB; [0C D5 14, 05, 05]
-29F9; [0C CF 66, 05, 05]
+29FE; [0C D5 1B, 05, 05]
-29FA; [0C CF 6D, 05, 05]
+29FF; [0C D5 22, 05, 05]
-29FB; [0C CF 74, 05, 05]
+2A00; [0C D5 29, 05, 05]
-29FE; [0C CF 7B, 05, 05]
+2A01; [0C D5 30, 05, 05]
-29FF; [0C CF 82, 05, 05]
+2A02; [0C D5 37, 05, 05]
-2A00; [0C CF 89, 05, 05]
+2A03; [0C D5 3E, 05, 05]
-2A01; [0C CF 90, 05, 05]
+2A04; [0C D5 45, 05, 05]
-2A02; [0C CF 97, 05, 05]
+2A05; [0C D5 4C, 05, 05]
-2A03; [0C CF 9E, 05, 05]
+2A06; [0C D5 53, 05, 05]
-2A04; [0C CF A5, 05, 05]
+2A07; [0C D5 5A, 05, 05]
-2A05; [0C CF AC, 05, 05]
+2A08; [0C D5 61, 05, 05]
-2A06; [0C CF B3, 05, 05]
+2A09; [0C D5 68, 05, 05]
-2A07; [0C CF BA, 05, 05]
+2A0A; [0C D5 6F, 05, 05]
-2A08; [0C CF C1, 05, 05]
+2A0B; [0C D5 76, 05, 05]
-2A09; [0C CF C8, 05, 05]
+2A0D; [0C D5 7D, 05, 05]
-2A0A; [0C CF CF, 05, 05]
+2A0E; [0C D5 84, 05, 05]
-2A0B; [0C CF D6, 05, 05]
+2A0F; [0C D5 8B, 05, 05]
-2A0D; [0C CF DD, 05, 05]
+2A10; [0C D5 92, 05, 05]
-2A0E; [0C CF E4, 05, 05]
+2A11; [0C D5 99, 05, 05]
-2A0F; [0C CF EB, 05, 05]
+2A12; [0C D5 A0, 05, 05]
-2A10; [0C CF F2, 05, 05]
+2A13; [0C D5 A7, 05, 05]
-2A11; [0C CF F9, 05, 05]
+2A14; [0C D5 AE, 05, 05]
-2A12; [0C D0 02, 05, 05]
+2A15; [0C D5 B5, 05, 05]
-2A13; [0C D0 09, 05, 05]
+2A16; [0C D5 BC, 05, 05]
-2A14; [0C D0 10, 05, 05]
+2A17; [0C D5 C3, 05, 05]
-2A15; [0C D0 17, 05, 05]
+2A18; [0C D5 CA, 05, 05]
-2A16; [0C D0 1E, 05, 05]
+2A19; [0C D5 D1, 05, 05]
-2A17; [0C D0 25, 05, 05]
+2A1A; [0C D5 D8, 05, 05]
-2A18; [0C D0 2C, 05, 05]
+2A1B; [0C D5 DF, 05, 05]
-2A19; [0C D0 33, 05, 05]
+2A1C; [0C D5 E6, 05, 05]
-2A1A; [0C D0 3A, 05, 05]
+2A1D; [0C D5 ED, 05, 05]
-2A1B; [0C D0 41, 05, 05]
+2A1E; [0C D5 F4, 05, 05]
-2A1C; [0C D0 48, 05, 05]
+2A1F; [0C D5 FB, 05, 05]
-2A1D; [0C D0 4F, 05, 05]
+2A20; [0C D6 04, 05, 05]
-2A1E; [0C D0 56, 05, 05]
+2A21; [0C D6 0B, 05, 05]
-2A1F; [0C D0 5D, 05, 05]
+2A22; [0C D6 12, 05, 05]
-2A20; [0C D0 64, 05, 05]
+2A23; [0C D6 19, 05, 05]
-2A21; [0C D0 6B, 05, 05]
+2A24; [0C D6 20, 05, 05]
-2A22; [0C D0 72, 05, 05]
+2A25; [0C D6 27, 05, 05]
-2A23; [0C D0 79, 05, 05]
+2A26; [0C D6 2E, 05, 05]
-2A24; [0C D0 80, 05, 05]
+2A27; [0C D6 35, 05, 05]
-2A25; [0C D0 87, 05, 05]
+2A28; [0C D6 3C, 05, 05]
-2A26; [0C D0 8E, 05, 05]
+2A29; [0C D6 43, 05, 05]
-2A27; [0C D0 95, 05, 05]
+2A2A; [0C D6 4A, 05, 05]
-2A28; [0C D0 9C, 05, 05]
+2A2B; [0C D6 51, 05, 05]
-2A29; [0C D0 A3, 05, 05]
+2A2C; [0C D6 58, 05, 05]
-2A2A; [0C D0 AA, 05, 05]
+2A2D; [0C D6 5F, 05, 05]
-2A2B; [0C D0 B1, 05, 05]
+2A2E; [0C D6 66, 05, 05]
-2A2C; [0C D0 B8, 05, 05]
+2A2F; [0C D6 6D, 05, 05]
-2A2D; [0C D0 BF, 05, 05]
+2A30; [0C D6 74, 05, 05]
-2A2E; [0C D0 C6, 05, 05]
+2A31; [0C D6 7B, 05, 05]
-2A2F; [0C D0 CD, 05, 05]
+2A32; [0C D6 82, 05, 05]
-2A30; [0C D0 D4, 05, 05]
+2A33; [0C D6 89, 05, 05]
-2A31; [0C D0 DB, 05, 05]
+2A34; [0C D6 90, 05, 05]
-2A32; [0C D0 E2, 05, 05]
+2A35; [0C D6 97, 05, 05]
-2A33; [0C D0 E9, 05, 05]
+2A36; [0C D6 9E, 05, 05]
-2A34; [0C D0 F0, 05, 05]
+2A37; [0C D6 A5, 05, 05]
-2A35; [0C D0 F7, 05, 05]
+2A38; [0C D6 AC, 05, 05]
-2A36; [0C D0 FE, 05, 05]
+2A39; [0C D6 B3, 05, 05]
-2A37; [0C D1 07, 05, 05]
+2A3A; [0C D6 BA, 05, 05]
-2A38; [0C D1 0E, 05, 05]
+2A3B; [0C D6 C1, 05, 05]
-2A39; [0C D1 15, 05, 05]
+2A3C; [0C D6 C8, 05, 05]
-2A3A; [0C D1 1C, 05, 05]
+2A3D; [0C D6 CF, 05, 05]
-2A3B; [0C D1 23, 05, 05]
+2A3E; [0C D6 D6, 05, 05]
-2A3C; [0C D1 2A, 05, 05]
+2A3F; [0C D6 DD, 05, 05]
-2A3D; [0C D1 31, 05, 05]
+2A40; [0C D6 E4, 05, 05]
-2A3E; [0C D1 38, 05, 05]
+2A41; [0C D6 EB, 05, 05]
-2A3F; [0C D1 3F, 05, 05]
+2A42; [0C D6 F2, 05, 05]
-2A40; [0C D1 46, 05, 05]
+2A43; [0C D6 F9, 05, 05]
-2A41; [0C D1 4D, 05, 05]
+2A44; [0C D7 02, 05, 05]
-2A42; [0C D1 54, 05, 05]
+2A45; [0C D7 09, 05, 05]
-2A43; [0C D1 5B, 05, 05]
+2A46; [0C D7 10, 05, 05]
-2A44; [0C D1 62, 05, 05]
+2A47; [0C D7 17, 05, 05]
-2A45; [0C D1 69, 05, 05]
+2A48; [0C D7 1E, 05, 05]
-2A46; [0C D1 70, 05, 05]
+2A49; [0C D7 25, 05, 05]
-2A47; [0C D1 77, 05, 05]
+2A4A; [0C D7 2C, 05, 05]
-2A48; [0C D1 7E, 05, 05]
+2A4B; [0C D7 33, 05, 05]
-2A49; [0C D1 85, 05, 05]
+2A4C; [0C D7 3A, 05, 05]
-2A4A; [0C D1 8C, 05, 05]
+2A4D; [0C D7 41, 05, 05]
-2A4B; [0C D1 93, 05, 05]
+2A4E; [0C D7 48, 05, 05]
-2A4C; [0C D1 9A, 05, 05]
+2A4F; [0C D7 4F, 05, 05]
-2A4D; [0C D1 A1, 05, 05]
+2A50; [0C D7 56, 05, 05]
-2A4E; [0C D1 A8, 05, 05]
+2A51; [0C D7 5D, 05, 05]
-2A4F; [0C D1 AF, 05, 05]
+2A52; [0C D7 64, 05, 05]
-2A50; [0C D1 B6, 05, 05]
+2A53; [0C D7 6B, 05, 05]
-2A51; [0C D1 BD, 05, 05]
+2A54; [0C D7 72, 05, 05]
-2A52; [0C D1 C4, 05, 05]
+2A55; [0C D7 79, 05, 05]
-2A53; [0C D1 CB, 05, 05]
+2A56; [0C D7 80, 05, 05]
-2A54; [0C D1 D2, 05, 05]
+2A57; [0C D7 87, 05, 05]
-2A55; [0C D1 D9, 05, 05]
+2A58; [0C D7 8E, 05, 05]
-2A56; [0C D1 E0, 05, 05]
+2A59; [0C D7 95, 05, 05]
-2A57; [0C D1 E7, 05, 05]
+2A5A; [0C D7 9C, 05, 05]
-2A58; [0C D1 EE, 05, 05]
+2A5B; [0C D7 A3, 05, 05]
-2A59; [0C D1 F5, 05, 05]
+2A5C; [0C D7 AA, 05, 05]
-2A5A; [0C D1 FC, 05, 05]
+2A5D; [0C D7 B1, 05, 05]
-2A5B; [0C D2 05, 05, 05]
+2A5E; [0C D7 B8, 05, 05]
-2A5C; [0C D2 0C, 05, 05]
+2A5F; [0C D7 BF, 05, 05]
-2A5D; [0C D2 13, 05, 05]
+2A60; [0C D7 C6, 05, 05]
-2A5E; [0C D2 1A, 05, 05]
+2A61; [0C D7 CD, 05, 05]
-2A5F; [0C D2 21, 05, 05]
+2A62; [0C D7 D4, 05, 05]
-2A60; [0C D2 28, 05, 05]
+2A63; [0C D7 DB, 05, 05]
-2A61; [0C D2 2F, 05, 05]
+2A64; [0C D7 E2, 05, 05]
-2A62; [0C D2 36, 05, 05]
+2A65; [0C D7 E9, 05, 05]
-2A63; [0C D2 3D, 05, 05]
+2A66; [0C D7 F0, 05, 05]
-2A64; [0C D2 44, 05, 05]
+2A67; [0C D7 F7, 05, 05]
-2A65; [0C D2 4B, 05, 05]
+2A68; [0C D7 FE, 05, 05]
-2A66; [0C D2 52, 05, 05]
+2A69; [0C D8 07, 05, 05]
-2A67; [0C D2 59, 05, 05]
+2A6A; [0C D8 0E, 05, 05]
-2A68; [0C D2 60, 05, 05]
+2A6B; [0C D8 15, 05, 05]
-2A69; [0C D2 67, 05, 05]
+2A6C; [0C D8 1C, 05, 05]
-2A6A; [0C D2 6E, 05, 05]
+2A6D; [0C D8 23, 05, 05]
-2A6B; [0C D2 75, 05, 05]
+2A6E; [0C D8 2A, 05, 05]
-2A6C; [0C D2 7C, 05, 05]
+2A6F; [0C D8 31, 05, 05]
-2A6D; [0C D2 83, 05, 05]
+2A70; [0C D8 38, 05, 05]
-2A6E; [0C D2 8A, 05, 05]
+2A71; [0C D8 3F, 05, 05]
-2A6F; [0C D2 91, 05, 05]
+2A72; [0C D8 46, 05, 05]
-2A70; [0C D2 98, 05, 05]
+2A73; [0C D8 4D, 05, 05]
-2A71; [0C D2 9F, 05, 05]
+2A77; [0C D8 54, 05, 05]
-2A72; [0C D2 A6, 05, 05]
+2A78; [0C D8 5B, 05, 05]
-2A73; [0C D2 AD, 05, 05]
+2A79; [0C D8 62, 05, 05]
-2A77; [0C D2 B4, 05, 05]
+2A7A; [0C D8 69, 05, 05]
-2A78; [0C D2 BB, 05, 05]
+2A7B; [0C D8 70, 05, 05]
-2A79; [0C D2 C2, 05, 05]
+2A7C; [0C D8 77, 05, 05]
-2A7A; [0C D2 C9, 05, 05]
+2A7D; [0C D8 7E, 05, 05]
-2A7B; [0C D2 D0, 05, 05]
+2A7E; [0C D8 85, 05, 05]
-2A7C; [0C D2 D7, 05, 05]
+2A7F; [0C D8 8C, 05, 05]
-2A7D; [0C D2 DE, 05, 05]
+2A80; [0C D8 93, 05, 05]
-2A7E; [0C D2 E5, 05, 05]
+2A81; [0C D8 9A, 05, 05]
-2A7F; [0C D2 EC, 05, 05]
+2A82; [0C D8 A1, 05, 05]
-2A80; [0C D2 F3, 05, 05]
+2A83; [0C D8 A8, 05, 05]
-2A81; [0C D2 FA, 05, 05]
+2A84; [0C D8 AF, 05, 05]
-2A82; [0C D3 03, 05, 05]
+2A85; [0C D8 B6, 05, 05]
-2A83; [0C D3 0A, 05, 05]
+2A86; [0C D8 BD, 05, 05]
-2A84; [0C D3 11, 05, 05]
+2A87; [0C D8 C4, 05, 05]
-2A85; [0C D3 18, 05, 05]
+2A88; [0C D8 CB, 05, 05]
-2A86; [0C D3 1F, 05, 05]
+2A89; [0C D8 D2, 05, 05]
-2A87; [0C D3 26, 05, 05]
+2A8A; [0C D8 D9, 05, 05]
-2A88; [0C D3 2D, 05, 05]
+2A8B; [0C D8 E0, 05, 05]
-2A89; [0C D3 34, 05, 05]
+2A8C; [0C D8 E7, 05, 05]
-2A8A; [0C D3 3B, 05, 05]
+2A8D; [0C D8 EE, 05, 05]
-2A8B; [0C D3 42, 05, 05]
+2A8E; [0C D8 F5, 05, 05]
-2A8C; [0C D3 49, 05, 05]
+2A8F; [0C D8 FC, 05, 05]
-2A8D; [0C D3 50, 05, 05]
+2A90; [0C D9 05, 05, 05]
-2A8E; [0C D3 57, 05, 05]
+2A91; [0C D9 0C, 05, 05]
-2A8F; [0C D3 5E, 05, 05]
+2A92; [0C D9 13, 05, 05]
-2A90; [0C D3 65, 05, 05]
+2A93; [0C D9 1A, 05, 05]
-2A91; [0C D3 6C, 05, 05]
+2A94; [0C D9 21, 05, 05]
-2A92; [0C D3 73, 05, 05]
+2A95; [0C D9 28, 05, 05]
-2A93; [0C D3 7A, 05, 05]
+2A96; [0C D9 2F, 05, 05]
-2A94; [0C D3 81, 05, 05]
+2A97; [0C D9 36, 05, 05]
-2A95; [0C D3 88, 05, 05]
+2A98; [0C D9 3D, 05, 05]
-2A96; [0C D3 8F, 05, 05]
+2A99; [0C D9 44, 05, 05]
-2A97; [0C D3 96, 05, 05]
+2A9A; [0C D9 4B, 05, 05]
-2A98; [0C D3 9D, 05, 05]
+2A9B; [0C D9 52, 05, 05]
-2A99; [0C D3 A4, 05, 05]
+2A9C; [0C D9 59, 05, 05]
-2A9A; [0C D3 AB, 05, 05]
+2A9D; [0C D9 60, 05, 05]
-2A9B; [0C D3 B2, 05, 05]
+2A9E; [0C D9 67, 05, 05]
-2A9C; [0C D3 B9, 05, 05]
+2A9F; [0C D9 6E, 05, 05]
-2A9D; [0C D3 C0, 05, 05]
+2AA0; [0C D9 75, 05, 05]
-2A9E; [0C D3 C7, 05, 05]
+2AA1; [0C D9 7C, 05, 05]
-2A9F; [0C D3 CE, 05, 05]
+2AA2; [0C D9 83, 05, 05]
-2AA0; [0C D3 D5, 05, 05]
+2AA3; [0C D9 8A, 05, 05]
-2AA1; [0C D3 DC, 05, 05]
+2AA4; [0C D9 91, 05, 05]
-2AA2; [0C D3 E3, 05, 05]
+2AA5; [0C D9 98, 05, 05]
-2AA3; [0C D3 EA, 05, 05]
+2AA6; [0C D9 9F, 05, 05]
-2AA4; [0C D3 F1, 05, 05]
+2AA7; [0C D9 A6, 05, 05]
-2AA5; [0C D3 F8, 05, 05]
+2AA8; [0C D9 AD, 05, 05]
-2AA6; [0C D3 FF, 05, 05]
+2AA9; [0C D9 B4, 05, 05]
-2AA7; [0C D4 08, 05, 05]
+2AAA; [0C D9 BB, 05, 05]
-2AA8; [0C D4 0F, 05, 05]
+2AAB; [0C D9 C2, 05, 05]
-2AA9; [0C D4 16, 05, 05]
+2AAC; [0C D9 C9, 05, 05]
-2AAA; [0C D4 1D, 05, 05]
+2AAD; [0C D9 D0, 05, 05]
-2AAB; [0C D4 24, 05, 05]
+2AAE; [0C D9 D7, 05, 05]
-2AAC; [0C D4 2B, 05, 05]
+2AAF; [0C D9 DE, 05, 05]
-2AAD; [0C D4 32, 05, 05]
+2AB0; [0C D9 E5, 05, 05]
-2AAE; [0C D4 39, 05, 05]
+2AB1; [0C D9 EC, 05, 05]
-2AAF; [0C D4 40, 05, 05]
+2AB2; [0C D9 F3, 05, 05]
-2AB0; [0C D4 47, 05, 05]
+2AB3; [0C D9 FA, 05, 05]
-2AB1; [0C D4 4E, 05, 05]
+2AB4; [0C DA 03, 05, 05]
-2AB2; [0C D4 55, 05, 05]
+2AB5; [0C DA 0A, 05, 05]
-2AB3; [0C D4 5C, 05, 05]
+2AB6; [0C DA 11, 05, 05]
-2AB4; [0C D4 63, 05, 05]
+2AB7; [0C DA 18, 05, 05]
-2AB5; [0C D4 6A, 05, 05]
+2AB8; [0C DA 1F, 05, 05]
-2AB6; [0C D4 71, 05, 05]
+2AB9; [0C DA 26, 05, 05]
-2AB7; [0C D4 78, 05, 05]
+2ABA; [0C DA 2D, 05, 05]
-2AB8; [0C D4 7F, 05, 05]
+2ABB; [0C DA 34, 05, 05]
-2AB9; [0C D4 86, 05, 05]
+2ABC; [0C DA 3B, 05, 05]
-2ABA; [0C D4 8D, 05, 05]
+2ABD; [0C DA 42, 05, 05]
-2ABB; [0C D4 94, 05, 05]
+2ABE; [0C DA 49, 05, 05]
-2ABC; [0C D4 9B, 05, 05]
+2ABF; [0C DA 50, 05, 05]
-2ABD; [0C D4 A2, 05, 05]
+2AC0; [0C DA 57, 05, 05]
-2ABE; [0C D4 A9, 05, 05]
+2AC1; [0C DA 5E, 05, 05]
-2ABF; [0C D4 B0, 05, 05]
+2AC2; [0C DA 65, 05, 05]
-2AC0; [0C D4 B7, 05, 05]
+2AC3; [0C DA 6C, 05, 05]
-2AC1; [0C D4 BE, 05, 05]
+2AC4; [0C DA 73, 05, 05]
-2AC2; [0C D4 C5, 05, 05]
+2AC5; [0C DA 7A, 05, 05]
-2AC3; [0C D4 CC, 05, 05]
+2AC6; [0C DA 81, 05, 05]
-2AC4; [0C D4 D3, 05, 05]
+2AC7; [0C DA 88, 05, 05]
-2AC5; [0C D4 DA, 05, 05]
+2AC8; [0C DA 8F, 05, 05]
-2AC6; [0C D4 E1, 05, 05]
+2AC9; [0C DA 96, 05, 05]
-2AC7; [0C D4 E8, 05, 05]
+2ACA; [0C DA 9D, 05, 05]
-2AC8; [0C D4 EF, 05, 05]
+2ACB; [0C DA A4, 05, 05]
-2AC9; [0C D4 F6, 05, 05]
+2ACC; [0C DA AB, 05, 05]
-2ACA; [0C D4 FD, 05, 05]
+2ACD; [0C DA B2, 05, 05]
-2ACB; [0C D5 06, 05, 05]
+2ACE; [0C DA B9, 05, 05]
-2ACC; [0C D5 0D, 05, 05]
+2ACF; [0C DA C0, 05, 05]
-2ACD; [0C D5 14, 05, 05]
+2AD0; [0C DA C7, 05, 05]
-2ACE; [0C D5 1B, 05, 05]
+2AD1; [0C DA CE, 05, 05]
-2ACF; [0C D5 22, 05, 05]
+2AD2; [0C DA D5, 05, 05]
-2AD0; [0C D5 29, 05, 05]
+2AD3; [0C DA DC, 05, 05]
-2AD1; [0C D5 30, 05, 05]
+2AD4; [0C DA E3, 05, 05]
-2AD2; [0C D5 37, 05, 05]
+2AD5; [0C DA EA, 05, 05]
-2AD3; [0C D5 3E, 05, 05]
+2AD6; [0C DA F1, 05, 05]
-2AD4; [0C D5 45, 05, 05]
+2AD7; [0C DA F8, 05, 05]
-2AD5; [0C D5 4C, 05, 05]
+2AD8; [0C DA FF, 05, 05]
-2AD6; [0C D5 53, 05, 05]
+2AD9; [0C DB 08, 05, 05]
-2AD7; [0C D5 5A, 05, 05]
+2ADA; [0C DB 0F, 05, 05]
-2AD8; [0C D5 61, 05, 05]
+2ADB; [0C DB 16, 05, 05]
-2AD9; [0C D5 68, 05, 05]
+2ADD; [0C DB 1D, 05, 05]
+2ADC; [0C DB 1D, 05, 05][, 9E, 05]
-2ADA; [0C D5 6F, 05, 05]
+2ADE; [0C DB 24, 05, 05]
-2ADB; [0C D5 76, 05, 05]
+2ADF; [0C DB 2B, 05, 05]
-2ADD; [0C D5 7D, 05, 05]
-2ADC; [0C D5 7D, 05, 05][, 9E, 05]
+2AE0; [0C DB 32, 05, 05]
-2ADE; [0C D5 84, 05, 05]
+2AE1; [0C DB 39, 05, 05]
-2ADF; [0C D5 8B, 05, 05]
+2AE2; [0C DB 40, 05, 05]
-2AE0; [0C D5 92, 05, 05]
+2AE3; [0C DB 47, 05, 05]
-2AE1; [0C D5 99, 05, 05]
+2AE4; [0C DB 4E, 05, 05]
-2AE2; [0C D5 A0, 05, 05]
+2AE5; [0C DB 55, 05, 05]
-2AE3; [0C D5 A7, 05, 05]
+2AE6; [0C DB 5C, 05, 05]
-2AE4; [0C D5 AE, 05, 05]
+2AE7; [0C DB 63, 05, 05]
-2AE5; [0C D5 B5, 05, 05]
+2AE8; [0C DB 6A, 05, 05]
-2AE6; [0C D5 BC, 05, 05]
+2AE9; [0C DB 71, 05, 05]
-2AE7; [0C D5 C3, 05, 05]
+2AEA; [0C DB 78, 05, 05]
-2AE8; [0C D5 CA, 05, 05]
+2AEB; [0C DB 7F, 05, 05]
-2AE9; [0C D5 D1, 05, 05]
+2AEC; [0C DB 86, 05, 05]
-2AEA; [0C D5 D8, 05, 05]
+2AED; [0C DB 8D, 05, 05]
-2AEB; [0C D5 DF, 05, 05]
+2AEE; [0C DB 94, 05, 05]
-2AEC; [0C D5 E6, 05, 05]
+2AEF; [0C DB 9B, 05, 05]
-2AED; [0C D5 ED, 05, 05]
+2AF0; [0C DB A2, 05, 05]
-2AEE; [0C D5 F4, 05, 05]
+2AF1; [0C DB A9, 05, 05]
-2AEF; [0C D5 FB, 05, 05]
+2AF2; [0C DB B0, 05, 05]
-2AF0; [0C D6 04, 05, 05]
+2AF3; [0C DB B7, 05, 05]
-2AF1; [0C D6 0B, 05, 05]
+2AF4; [0C DB BE, 05, 05]
-2AF2; [0C D6 12, 05, 05]
+2AF5; [0C DB C5, 05, 05]
-2AF3; [0C D6 19, 05, 05]
+2AF6; [0C DB CC, 05, 05]
-2AF4; [0C D6 20, 05, 05]
+2AF7; [0C DB D3, 05, 05]
-2AF5; [0C D6 27, 05, 05]
+2AF8; [0C DB DA, 05, 05]
-2AF6; [0C D6 2E, 05, 05]
+2AF9; [0C DB E1, 05, 05]
-2AF7; [0C D6 35, 05, 05]
+2AFA; [0C DB E8, 05, 05]
-2AF8; [0C D6 3C, 05, 05]
+2AFB; [0C DB EF, 05, 05]
-2AF9; [0C D6 43, 05, 05]
+2AFC; [0C DB F6, 05, 05]
-2AFA; [0C D6 4A, 05, 05]
+2AFD; [0C DB FD, 05, 05]
-2AFB; [0C D6 51, 05, 05]
+2AFE; [0C DC 06, 05, 05]
-2AFC; [0C D6 58, 05, 05]
+2AFF; [0C DC 0D, 05, 05]
-2AFD; [0C D6 5F, 05, 05]
+2B00; [0C DC 14, 05, 05]
-2AFE; [0C D6 66, 05, 05]
+2B01; [0C DC 1B, 05, 05]
-2AFF; [0C D6 6D, 05, 05]
+2B02; [0C DC 22, 05, 05]
-2B00; [0C D6 74, 05, 05]
+2B03; [0C DC 29, 05, 05]
-2B01; [0C D6 7B, 05, 05]
+2B04; [0C DC 30, 05, 05]
-2B02; [0C D6 82, 05, 05]
+2B05; [0C DC 37, 05, 05]
-2B03; [0C D6 89, 05, 05]
+2B06; [0C DC 3E, 05, 05]
-2B04; [0C D6 90, 05, 05]
+2B07; [0C DC 45, 05, 05]
-2B05; [0C D6 97, 05, 05]
+2B08; [0C DC 4C, 05, 05]
-2B06; [0C D6 9E, 05, 05]
+2B09; [0C DC 53, 05, 05]
-2B07; [0C D6 A5, 05, 05]
+2B0A; [0C DC 5A, 05, 05]
-2B08; [0C D6 AC, 05, 05]
+2B0B; [0C DC 61, 05, 05]
-2B09; [0C D6 B3, 05, 05]
+2B0C; [0C DC 68, 05, 05]
-2B0A; [0C D6 BA, 05, 05]
+2B0D; [0C DC 6F, 05, 05]
-2B0B; [0C D6 C1, 05, 05]
+2B0E; [0C DC 76, 05, 05]
-2B0C; [0C D6 C8, 05, 05]
+2B0F; [0C DC 7D, 05, 05]
-2B0D; [0C D6 CF, 05, 05]
+2B10; [0C DC 84, 05, 05]
-2B0E; [0C D6 D6, 05, 05]
+2B11; [0C DC 8B, 05, 05]
-2B0F; [0C D6 DD, 05, 05]
+2B12; [0C DC 92, 05, 05]
-2B10; [0C D6 E4, 05, 05]
+2B13; [0C DC 99, 05, 05]
-2B11; [0C D6 EB, 05, 05]
+2B14; [0C DC A0, 05, 05]
-2B12; [0C D6 F2, 05, 05]
+2B15; [0C DC A7, 05, 05]
-2B13; [0C D6 F9, 05, 05]
+2B16; [0C DC AE, 05, 05]
-2B14; [0C D7 02, 05, 05]
+2B17; [0C DC B5, 05, 05]
-2B15; [0C D7 09, 05, 05]
+2B18; [0C DC BC, 05, 05]
-2B16; [0C D7 10, 05, 05]
+2B19; [0C DC C3, 05, 05]
-2B17; [0C D7 17, 05, 05]
+2B1A; [0C DC CA, 05, 05]
-2B18; [0C D7 1E, 05, 05]
+2B1B; [0C DC D1, 05, 05]
-2B19; [0C D7 25, 05, 05]
+2B1C; [0C DC D8, 05, 05]
-2B1A; [0C D7 2C, 05, 05]
+2B1D; [0C DC DF, 05, 05]
-2B1B; [0C D7 33, 05, 05]
+2B1E; [0C DC E6, 05, 05]
-2B1C; [0C D7 3A, 05, 05]
+2B1F; [0C DC ED, 05, 05]
-2B1D; [0C D7 41, 05, 05]
+2B20; [0C DC F4, 05, 05]
-2B1E; [0C D7 48, 05, 05]
+2B21; [0C DC FB, 05, 05]
-2B1F; [0C D7 4F, 05, 05]
+2B22; [0C DD 04, 05, 05]
-2B20; [0C D7 56, 05, 05]
+2B23; [0C DD 0B, 05, 05]
-2B21; [0C D7 5D, 05, 05]
+2B24; [0C DD 12, 05, 05]
-2B22; [0C D7 64, 05, 05]
+2B25; [0C DD 19, 05, 05]
-2B23; [0C D7 6B, 05, 05]
+2B26; [0C DD 20, 05, 05]
-2B24; [0C D7 72, 05, 05]
+2B27; [0C DD 27, 05, 05]
-2B25; [0C D7 79, 05, 05]
+2B28; [0C DD 2E, 05, 05]
-2B26; [0C D7 80, 05, 05]
+2B29; [0C DD 35, 05, 05]
-2B27; [0C D7 87, 05, 05]
+2B2A; [0C DD 3C, 05, 05]
-2B28; [0C D7 8E, 05, 05]
+2B2B; [0C DD 43, 05, 05]
-2B29; [0C D7 95, 05, 05]
+2B2C; [0C DD 4A, 05, 05]
-2B2A; [0C D7 9C, 05, 05]
+2B2D; [0C DD 51, 05, 05]
-2B2B; [0C D7 A3, 05, 05]
+2B2E; [0C DD 58, 05, 05]
-2B2C; [0C D7 AA, 05, 05]
+2B2F; [0C DD 5F, 05, 05]
-2B2D; [0C D7 B1, 05, 05]
+2B30; [0C DD 66, 05, 05]
-2B2E; [0C D7 B8, 05, 05]
+2B31; [0C DD 6D, 05, 05]
-2B2F; [0C D7 BF, 05, 05]
+2B32; [0C DD 74, 05, 05]
-2B30; [0C D7 C6, 05, 05]
+2B33; [0C DD 7B, 05, 05]
-2B31; [0C D7 CD, 05, 05]
+2B34; [0C DD 82, 05, 05]
-2B32; [0C D7 D4, 05, 05]
+2B35; [0C DD 89, 05, 05]
-2B33; [0C D7 DB, 05, 05]
+2B36; [0C DD 90, 05, 05]
-2B34; [0C D7 E2, 05, 05]
+2B37; [0C DD 97, 05, 05]
-2B35; [0C D7 E9, 05, 05]
+2B38; [0C DD 9E, 05, 05]
-2B36; [0C D7 F0, 05, 05]
+2B39; [0C DD A5, 05, 05]
-2B37; [0C D7 F7, 05, 05]
+2B3A; [0C DD AC, 05, 05]
-2B38; [0C D7 FE, 05, 05]
+2B3B; [0C DD B3, 05, 05]
-2B39; [0C D8 07, 05, 05]
+2B3C; [0C DD BA, 05, 05]
-2B3A; [0C D8 0E, 05, 05]
+2B3D; [0C DD C1, 05, 05]
-2B3B; [0C D8 15, 05, 05]
+2B3E; [0C DD C8, 05, 05]
-2B3C; [0C D8 1C, 05, 05]
+2B3F; [0C DD CF, 05, 05]
-2B3D; [0C D8 23, 05, 05]
+2B40; [0C DD D6, 05, 05]
-2B3E; [0C D8 2A, 05, 05]
+2B41; [0C DD DD, 05, 05]
-2B3F; [0C D8 31, 05, 05]
+2B42; [0C DD E4, 05, 05]
-2B40; [0C D8 38, 05, 05]
+2B43; [0C DD EB, 05, 05]
-2B41; [0C D8 3F, 05, 05]
+2B44; [0C DD F2, 05, 05]
-2B42; [0C D8 46, 05, 05]
+2B45; [0C DD F9, 05, 05]
-2B43; [0C D8 4D, 05, 05]
+2B46; [0C DE 02, 05, 05]
-2B44; [0C D8 54, 05, 05]
+2B47; [0C DE 09, 05, 05]
-2B45; [0C D8 5B, 05, 05]
+2B48; [0C DE 10, 05, 05]
-2B46; [0C D8 62, 05, 05]
+2B49; [0C DE 17, 05, 05]
-2B47; [0C D8 69, 05, 05]
+2B4A; [0C DE 1E, 05, 05]
-2B48; [0C D8 70, 05, 05]
+2B4B; [0C DE 25, 05, 05]
-2B49; [0C D8 77, 05, 05]
+2B4C; [0C DE 2C, 05, 05]
-2B4A; [0C D8 7E, 05, 05]
+2B4D; [0C DE 33, 05, 05]
-2B4B; [0C D8 85, 05, 05]
+2B4E; [0C DE 3A, 05, 05]
-2B4C; [0C D8 8C, 05, 05]
+2B4F; [0C DE 41, 05, 05]
-2B4D; [0C D8 93, 05, 05]
+2B50; [0C DE 48, 05, 05]
-2B4E; [0C D8 9A, 05, 05]
+2B51; [0C DE 4F, 05, 05]
-2B4F; [0C D8 A1, 05, 05]
+2B52; [0C DE 56, 05, 05]
-2B50; [0C D8 A8, 05, 05]
+2B53; [0C DE 5D, 05, 05]
-2B51; [0C D8 AF, 05, 05]
+2B54; [0C DE 64, 05, 05]
-2B52; [0C D8 B6, 05, 05]
+2B55; [0C DE 6B, 05, 05]
-2B53; [0C D8 BD, 05, 05]
+2B56; [0C DE 72, 05, 05]
-2B54; [0C D8 C4, 05, 05]
+2B57; [0C DE 79, 05, 05]
-2B55; [0C D8 CB, 05, 05]
+2B58; [0C DE 80, 05, 05]
-2B56; [0C D8 D2, 05, 05]
+2B59; [0C DE 87, 05, 05]
-2B57; [0C D8 D9, 05, 05]
+2B5A; [0C DE 8E, 05, 05]
-2B58; [0C D8 E0, 05, 05]
+2B5B; [0C DE 95, 05, 05]
-2B59; [0C D8 E7, 05, 05]
+2B5C; [0C DE 9C, 05, 05]
-2B5A; [0C D8 EE, 05, 05]
+2B5D; [0C DE A3, 05, 05]
-2B5B; [0C D8 F5, 05, 05]
+2B5E; [0C DE AA, 05, 05]
-2B5C; [0C D8 FC, 05, 05]
+2B5F; [0C DE B1, 05, 05]
-2B5D; [0C D9 05, 05, 05]
+2B60; [0C DE B8, 05, 05]
-2B5E; [0C D9 0C, 05, 05]
+2B61; [0C DE BF, 05, 05]
-2B5F; [0C D9 13, 05, 05]
+2B62; [0C DE C6, 05, 05]
-2B60; [0C D9 1A, 05, 05]
+2B63; [0C DE CD, 05, 05]
-2B61; [0C D9 21, 05, 05]
+2B64; [0C DE D4, 05, 05]
-2B62; [0C D9 28, 05, 05]
+2B65; [0C DE DB, 05, 05]
-2B63; [0C D9 2F, 05, 05]
+2B66; [0C DE E2, 05, 05]
-2B64; [0C D9 36, 05, 05]
+2B67; [0C DE E9, 05, 05]
-2B65; [0C D9 3D, 05, 05]
+2B68; [0C DE F0, 05, 05]
-2B66; [0C D9 44, 05, 05]
+2B69; [0C DE F7, 05, 05]
-2B67; [0C D9 4B, 05, 05]
+2B6A; [0C DE FE, 05, 05]
-2B68; [0C D9 52, 05, 05]
+2B6B; [0C DF 07, 05, 05]
-2B69; [0C D9 59, 05, 05]
+2B6C; [0C DF 0E, 05, 05]
-2B6A; [0C D9 60, 05, 05]
+2B6D; [0C DF 15, 05, 05]
-2B6B; [0C D9 67, 05, 05]
+2B6E; [0C DF 1C, 05, 05]
-2B6C; [0C D9 6E, 05, 05]
+2B6F; [0C DF 23, 05, 05]
-2B6D; [0C D9 75, 05, 05]
+2B70; [0C DF 2A, 05, 05]
-2B6E; [0C D9 7C, 05, 05]
+2B71; [0C DF 31, 05, 05]
-2B6F; [0C D9 83, 05, 05]
+2B72; [0C DF 38, 05, 05]
-2B70; [0C D9 8A, 05, 05]
+2B73; [0C DF 3F, 05, 05]
-2B71; [0C D9 91, 05, 05]
+2B76; [0C DF 46, 05, 05]
-2B72; [0C D9 98, 05, 05]
+2B77; [0C DF 4D, 05, 05]
-2B73; [0C D9 9F, 05, 05]
+2B78; [0C DF 54, 05, 05]
-2B76; [0C D9 A6, 05, 05]
+2B79; [0C DF 5B, 05, 05]
-2B77; [0C D9 AD, 05, 05]
+2B7A; [0C DF 62, 05, 05]
-2B78; [0C D9 B4, 05, 05]
+2B7B; [0C DF 69, 05, 05]
-2B79; [0C D9 BB, 05, 05]
+2B7C; [0C DF 70, 05, 05]
-2B7A; [0C D9 C2, 05, 05]
+2B7D; [0C DF 77, 05, 05]
-2B7B; [0C D9 C9, 05, 05]
+2B7E; [0C DF 7E, 05, 05]
-2B7C; [0C D9 D0, 05, 05]
+2B7F; [0C DF 85, 05, 05]
-2B7D; [0C D9 D7, 05, 05]
+2B80; [0C DF 8C, 05, 05]
-2B7E; [0C D9 DE, 05, 05]
+2B81; [0C DF 93, 05, 05]
-2B7F; [0C D9 E5, 05, 05]
+2B82; [0C DF 9A, 05, 05]
-2B80; [0C D9 EC, 05, 05]
+2B83; [0C DF A1, 05, 05]
-2B81; [0C D9 F3, 05, 05]
+2B84; [0C DF A8, 05, 05]
-2B82; [0C D9 FA, 05, 05]
+2B85; [0C DF AF, 05, 05]
-2B83; [0C DA 03, 05, 05]
+2B86; [0C DF B6, 05, 05]
-2B84; [0C DA 0A, 05, 05]
+2B87; [0C DF BD, 05, 05]
-2B85; [0C DA 11, 05, 05]
+2B88; [0C DF C4, 05, 05]
-2B86; [0C DA 18, 05, 05]
+2B89; [0C DF CB, 05, 05]
-2B87; [0C DA 1F, 05, 05]
+2B8A; [0C DF D2, 05, 05]
-2B88; [0C DA 26, 05, 05]
+2B8B; [0C DF D9, 05, 05]
-2B89; [0C DA 2D, 05, 05]
+2B8C; [0C DF E0, 05, 05]
-2B8A; [0C DA 34, 05, 05]
+2B8D; [0C DF E7, 05, 05]
-2B8B; [0C DA 3B, 05, 05]
+2B8E; [0C DF EE, 05, 05]
-2B8C; [0C DA 42, 05, 05]
+2B8F; [0C DF F5, 05, 05]
-2B8D; [0C DA 49, 05, 05]
+2B90; [0C DF FC, 05, 05]
-2B8E; [0C DA 50, 05, 05]
+2B91; [0C E0 05, 05, 05]
-2B8F; [0C DA 57, 05, 05]
+2B92; [0C E0 0C, 05, 05]
-2B90; [0C DA 5E, 05, 05]
+2B93; [0C E0 13, 05, 05]
-2B91; [0C DA 65, 05, 05]
+2B94; [0C E0 1A, 05, 05]
-2B92; [0C DA 6C, 05, 05]
+2B95; [0C E0 21, 05, 05]
-2B93; [0C DA 73, 05, 05]
+2B97; [0C E0 28, 05, 05]
-2B94; [0C DA 7A, 05, 05]
+2B98; [0C E0 2F, 05, 05]
-2B95; [0C DA 81, 05, 05]
+2B99; [0C E0 36, 05, 05]
-2B98; [0C DA 88, 05, 05]
+2B9A; [0C E0 3D, 05, 05]
-2B99; [0C DA 8F, 05, 05]
+2B9B; [0C E0 44, 05, 05]
-2B9A; [0C DA 96, 05, 05]
+2B9C; [0C E0 4B, 05, 05]
-2B9B; [0C DA 9D, 05, 05]
+2B9D; [0C E0 52, 05, 05]
-2B9C; [0C DA A4, 05, 05]
+2B9E; [0C E0 59, 05, 05]
-2B9D; [0C DA AB, 05, 05]
+2B9F; [0C E0 60, 05, 05]
-2B9E; [0C DA B2, 05, 05]
+2BA0; [0C E0 67, 05, 05]
-2B9F; [0C DA B9, 05, 05]
+2BA1; [0C E0 6E, 05, 05]
-2BA0; [0C DA C0, 05, 05]
+2BA2; [0C E0 75, 05, 05]
-2BA1; [0C DA C7, 05, 05]
+2BA3; [0C E0 7C, 05, 05]
-2BA2; [0C DA CE, 05, 05]
+2BA4; [0C E0 83, 05, 05]
-2BA3; [0C DA D5, 05, 05]
+2BA5; [0C E0 8A, 05, 05]
-2BA4; [0C DA DC, 05, 05]
+2BA6; [0C E0 91, 05, 05]
-2BA5; [0C DA E3, 05, 05]
+2BA7; [0C E0 98, 05, 05]
-2BA6; [0C DA EA, 05, 05]
+2BA8; [0C E0 9F, 05, 05]
-2BA7; [0C DA F1, 05, 05]
+2BA9; [0C E0 A6, 05, 05]
-2BA8; [0C DA F8, 05, 05]
+2BAA; [0C E0 AD, 05, 05]
-2BA9; [0C DA FF, 05, 05]
+2BAB; [0C E0 B4, 05, 05]
-2BAA; [0C DB 08, 05, 05]
+2BAC; [0C E0 BB, 05, 05]
-2BAB; [0C DB 0F, 05, 05]
+2BAD; [0C E0 C2, 05, 05]
-2BAC; [0C DB 16, 05, 05]
+2BAE; [0C E0 C9, 05, 05]
-2BAD; [0C DB 1D, 05, 05]
+2BAF; [0C E0 D0, 05, 05]
-2BAE; [0C DB 24, 05, 05]
+2BB0; [0C E0 D7, 05, 05]
-2BAF; [0C DB 2B, 05, 05]
+2BB1; [0C E0 DE, 05, 05]
-2BB0; [0C DB 32, 05, 05]
+2BB2; [0C E0 E5, 05, 05]
-2BB1; [0C DB 39, 05, 05]
+2BB3; [0C E0 EC, 05, 05]
-2BB2; [0C DB 40, 05, 05]
+2BB4; [0C E0 F3, 05, 05]
-2BB3; [0C DB 47, 05, 05]
+2BB5; [0C E0 FA, 05, 05]
-2BB4; [0C DB 4E, 05, 05]
+2BB6; [0C E1 03, 05, 05]
-2BB5; [0C DB 55, 05, 05]
+2BB7; [0C E1 0A, 05, 05]
-2BB6; [0C DB 5C, 05, 05]
+2BB8; [0C E1 11, 05, 05]
-2BB7; [0C DB 63, 05, 05]
+2BB9; [0C E1 18, 05, 05]
-2BB8; [0C DB 6A, 05, 05]
+2BBA; [0C E1 1F, 05, 05]
-2BB9; [0C DB 71, 05, 05]
+2BBB; [0C E1 26, 05, 05]
-2BBA; [0C DB 78, 05, 05]
+2BBC; [0C E1 2D, 05, 05]
-2BBB; [0C DB 7F, 05, 05]
+2BBD; [0C E1 34, 05, 05]
-2BBC; [0C DB 86, 05, 05]
+2BBE; [0C E1 3B, 05, 05]
-2BBD; [0C DB 8D, 05, 05]
+2BBF; [0C E1 42, 05, 05]
-2BBE; [0C DB 94, 05, 05]
+2BC0; [0C E1 49, 05, 05]
-2BBF; [0C DB 9B, 05, 05]
+2BC1; [0C E1 50, 05, 05]
-2BC0; [0C DB A2, 05, 05]
+2BC2; [0C E1 57, 05, 05]
-2BC1; [0C DB A9, 05, 05]
+2BC3; [0C E1 5E, 05, 05]
-2BC2; [0C DB B0, 05, 05]
+2BC4; [0C E1 65, 05, 05]
-2BC3; [0C DB B7, 05, 05]
+2BC5; [0C E1 6C, 05, 05]
-2BC4; [0C DB BE, 05, 05]
+2BC6; [0C E1 73, 05, 05]
-2BC5; [0C DB C5, 05, 05]
+2BC7; [0C E1 7A, 05, 05]
-2BC6; [0C DB CC, 05, 05]
+2BC8; [0C E1 81, 05, 05]
-2BC7; [0C DB D3, 05, 05]
+2BC9; [0C E1 88, 05, 05]
-2BC8; [0C DB DA, 05, 05]
+2BCA; [0C E1 8F, 05, 05]
-2BC9; [0C DB E1, 05, 05]
+2BCB; [0C E1 96, 05, 05]
-2BCA; [0C DB E8, 05, 05]
+2BCC; [0C E1 9D, 05, 05]
-2BCB; [0C DB EF, 05, 05]
+2BCD; [0C E1 A4, 05, 05]
-2BCC; [0C DB F6, 05, 05]
+2BCE; [0C E1 AB, 05, 05]
-2BCD; [0C DB FD, 05, 05]
+2BCF; [0C E1 B2, 05, 05]
-2BCE; [0C DC 06, 05, 05]
+2BD0; [0C E1 B9, 05, 05]
-2BCF; [0C DC 0D, 05, 05]
+2BD1; [0C E1 C0, 05, 05]
-2BD0; [0C DC 14, 05, 05]
+2BD2; [0C E1 C7, 05, 05]
-2BD1; [0C DC 1B, 05, 05]
+2BD3; [0C E1 CE, 05, 05]
-2BD2; [0C DC 22, 05, 05]
+2BD4; [0C E1 D5, 05, 05]
-2BD3; [0C DC 29, 05, 05]
+2BD5; [0C E1 DC, 05, 05]
-2BD4; [0C DC 30, 05, 05]
+2BD6; [0C E1 E3, 05, 05]
-2BD5; [0C DC 37, 05, 05]
+2BD7; [0C E1 EA, 05, 05]
-2BD6; [0C DC 3E, 05, 05]
+2BD8; [0C E1 F1, 05, 05]
-2BD7; [0C DC 45, 05, 05]
+2BD9; [0C E1 F8, 05, 05]
-2BD8; [0C DC 4C, 05, 05]
+2BDA; [0C E1 FF, 05, 05]
-2BD9; [0C DC 53, 05, 05]
+2BDB; [0C E2 08, 05, 05]
-2BDA; [0C DC 5A, 05, 05]
+2BDC; [0C E2 0F, 05, 05]
-2BDB; [0C DC 61, 05, 05]
+2BDD; [0C E2 16, 05, 05]
-2BDC; [0C DC 68, 05, 05]
+2BDE; [0C E2 1D, 05, 05]
-2BDD; [0C DC 6F, 05, 05]
+2BDF; [0C E2 24, 05, 05]
-2BDE; [0C DC 76, 05, 05]
+2BE0; [0C E2 2B, 05, 05]
-2BDF; [0C DC 7D, 05, 05]
+2BE1; [0C E2 32, 05, 05]
-2BE0; [0C DC 84, 05, 05]
+2BE2; [0C E2 39, 05, 05]
-2BE1; [0C DC 8B, 05, 05]
+2BE3; [0C E2 40, 05, 05]
-2BE2; [0C DC 92, 05, 05]
+2BE4; [0C E2 47, 05, 05]
-2BE3; [0C DC 99, 05, 05]
+2BE5; [0C E2 4E, 05, 05]
-2BE4; [0C DC A0, 05, 05]
+2BE6; [0C E2 55, 05, 05]
-2BE5; [0C DC A7, 05, 05]
+2BE7; [0C E2 5C, 05, 05]
-2BE6; [0C DC AE, 05, 05]
+2BE8; [0C E2 63, 05, 05]
-2BE7; [0C DC B5, 05, 05]
+2BE9; [0C E2 6A, 05, 05]
-2BE8; [0C DC BC, 05, 05]
+2BEA; [0C E2 71, 05, 05]
-2BE9; [0C DC C3, 05, 05]
+2BEB; [0C E2 78, 05, 05]
-2BEA; [0C DC CA, 05, 05]
+2BEC; [0C E2 7F, 05, 05]
-2BEB; [0C DC D1, 05, 05]
+2BED; [0C E2 86, 05, 05]
-2BEC; [0C DC D8, 05, 05]
+2BEE; [0C E2 8D, 05, 05]
-2BED; [0C DC DF, 05, 05]
+2BEF; [0C E2 94, 05, 05]
-2BEE; [0C DC E6, 05, 05]
+2BF0; [0C E2 9B, 05, 05]
-2BEF; [0C DC ED, 05, 05]
+2BF1; [0C E2 A2, 05, 05]
-2BF0; [0C DC F4, 05, 05]
+2BF2; [0C E2 A9, 05, 05]
-2BF1; [0C DC FB, 05, 05]
+2BF3; [0C E2 B0, 05, 05]
-2BF2; [0C DD 04, 05, 05]
+2BF4; [0C E2 B7, 05, 05]
-2BF3; [0C DD 0B, 05, 05]
+2BF5; [0C E2 BE, 05, 05]
-2BF4; [0C DD 12, 05, 05]
+2BF6; [0C E2 C5, 05, 05]
-2BF5; [0C DD 19, 05, 05]
+2BF7; [0C E2 CC, 05, 05]
-2BF6; [0C DD 20, 05, 05]
+2BF8; [0C E2 D3, 05, 05]
-2BF7; [0C DD 27, 05, 05]
+2BF9; [0C E2 DA, 05, 05]
-2BF8; [0C DD 2E, 05, 05]
+2BFA; [0C E2 E1, 05, 05]
-2BF9; [0C DD 35, 05, 05]
+2BFB; [0C E2 E8, 05, 05]
-2BFA; [0C DD 3C, 05, 05]
+2BFC; [0C E2 EF, 05, 05]
-2BFB; [0C DD 43, 05, 05]
+2BFD; [0C E2 F6, 05, 05]
-2BFC; [0C DD 4A, 05, 05]
+2BFE; [0C E2 FD, 05, 05]
-2BFD; [0C DD 51, 05, 05]
+2BFF; [0C E3 06, 05, 05]
-2BFE; [0C DD 58, 05, 05]
+2CE5; [0C E3 0D, 05, 05]
-2BFF; [0C DD 5F, 05, 05]
+2CE6; [0C E3 14, 05, 05]
-2CE5; [0C DD 66, 05, 05]
+2CE7; [0C E3 1B, 05, 05]
-2CE6; [0C DD 6D, 05, 05]
+2CE8; [0C E3 22, 05, 05]
-2CE7; [0C DD 74, 05, 05]
+2CE9; [0C E3 29, 05, 05]
-2CE8; [0C DD 7B, 05, 05]
+2CEA; [0C E3 30, 05, 05]
-2CE9; [0C DD 82, 05, 05]
+2800; [0C E3 37, 05, 05]
-2CEA; [0C DD 89, 05, 05]
+2801; [0C E3 3E, 05, 05]
-2800; [0C DD 90, 05, 05]
+2802; [0C E3 45, 05, 05]
-2801; [0C DD 97, 05, 05]
+2803; [0C E3 4C, 05, 05]
-2802; [0C DD 9E, 05, 05]
+2804; [0C E3 53, 05, 05]
-2803; [0C DD A5, 05, 05]
+2805; [0C E3 5A, 05, 05]
-2804; [0C DD AC, 05, 05]
+2806; [0C E3 61, 05, 05]
-2805; [0C DD B3, 05, 05]
+2807; [0C E3 68, 05, 05]
-2806; [0C DD BA, 05, 05]
+2808; [0C E3 6F, 05, 05]
-2807; [0C DD C1, 05, 05]
+2809; [0C E3 76, 05, 05]
-2808; [0C DD C8, 05, 05]
+280A; [0C E3 7D, 05, 05]
-2809; [0C DD CF, 05, 05]
+280B; [0C E3 84, 05, 05]
-280A; [0C DD D6, 05, 05]
+280C; [0C E3 8B, 05, 05]
-280B; [0C DD DD, 05, 05]
+280D; [0C E3 92, 05, 05]
-280C; [0C DD E4, 05, 05]
+280E; [0C E3 99, 05, 05]
-280D; [0C DD EB, 05, 05]
+280F; [0C E3 A0, 05, 05]
-280E; [0C DD F2, 05, 05]
+2810; [0C E3 A7, 05, 05]
-280F; [0C DD F9, 05, 05]
+2811; [0C E3 AE, 05, 05]
-2810; [0C DE 02, 05, 05]
+2812; [0C E3 B5, 05, 05]
-2811; [0C DE 09, 05, 05]
+2813; [0C E3 BC, 05, 05]
-2812; [0C DE 10, 05, 05]
+2814; [0C E3 C3, 05, 05]
-2813; [0C DE 17, 05, 05]
+2815; [0C E3 CA, 05, 05]
-2814; [0C DE 1E, 05, 05]
+2816; [0C E3 D1, 05, 05]
-2815; [0C DE 25, 05, 05]
+2817; [0C E3 D8, 05, 05]
-2816; [0C DE 2C, 05, 05]
+2818; [0C E3 DF, 05, 05]
-2817; [0C DE 33, 05, 05]
+2819; [0C E3 E6, 05, 05]
-2818; [0C DE 3A, 05, 05]
+281A; [0C E3 ED, 05, 05]
-2819; [0C DE 41, 05, 05]
+281B; [0C E3 F4, 05, 05]
-281A; [0C DE 48, 05, 05]
+281C; [0C E3 FB, 05, 05]
-281B; [0C DE 4F, 05, 05]
+281D; [0C E4 04, 05, 05]
-281C; [0C DE 56, 05, 05]
+281E; [0C E4 0B, 05, 05]
-281D; [0C DE 5D, 05, 05]
+281F; [0C E4 12, 05, 05]
-281E; [0C DE 64, 05, 05]
+2820; [0C E4 19, 05, 05]
-281F; [0C DE 6B, 05, 05]
+2821; [0C E4 20, 05, 05]
-2820; [0C DE 72, 05, 05]
+2822; [0C E4 27, 05, 05]
-2821; [0C DE 79, 05, 05]
+2823; [0C E4 2E, 05, 05]
-2822; [0C DE 80, 05, 05]
+2824; [0C E4 35, 05, 05]
-2823; [0C DE 87, 05, 05]
+2825; [0C E4 3C, 05, 05]
-2824; [0C DE 8E, 05, 05]
+2826; [0C E4 43, 05, 05]
-2825; [0C DE 95, 05, 05]
+2827; [0C E4 4A, 05, 05]
-2826; [0C DE 9C, 05, 05]
+2828; [0C E4 51, 05, 05]
-2827; [0C DE A3, 05, 05]
+2829; [0C E4 58, 05, 05]
-2828; [0C DE AA, 05, 05]
+282A; [0C E4 5F, 05, 05]
-2829; [0C DE B1, 05, 05]
+282B; [0C E4 66, 05, 05]
-282A; [0C DE B8, 05, 05]
+282C; [0C E4 6D, 05, 05]
-282B; [0C DE BF, 05, 05]
+282D; [0C E4 74, 05, 05]
-282C; [0C DE C6, 05, 05]
+282E; [0C E4 7B, 05, 05]
-282D; [0C DE CD, 05, 05]
+282F; [0C E4 82, 05, 05]
-282E; [0C DE D4, 05, 05]
+2830; [0C E4 89, 05, 05]
-282F; [0C DE DB, 05, 05]
+2831; [0C E4 90, 05, 05]
-2830; [0C DE E2, 05, 05]
+2832; [0C E4 97, 05, 05]
-2831; [0C DE E9, 05, 05]
+2833; [0C E4 9E, 05, 05]
-2832; [0C DE F0, 05, 05]
+2834; [0C E4 A5, 05, 05]
-2833; [0C DE F7, 05, 05]
+2835; [0C E4 AC, 05, 05]
-2834; [0C DE FE, 05, 05]
+2836; [0C E4 B3, 05, 05]
-2835; [0C DF 07, 05, 05]
+2837; [0C E4 BA, 05, 05]
-2836; [0C DF 0E, 05, 05]
+2838; [0C E4 C1, 05, 05]
-2837; [0C DF 15, 05, 05]
+2839; [0C E4 C8, 05, 05]
-2838; [0C DF 1C, 05, 05]
+283A; [0C E4 CF, 05, 05]
-2839; [0C DF 23, 05, 05]
+283B; [0C E4 D6, 05, 05]
-283A; [0C DF 2A, 05, 05]
+283C; [0C E4 DD, 05, 05]
-283B; [0C DF 31, 05, 05]
+283D; [0C E4 E4, 05, 05]
-283C; [0C DF 38, 05, 05]
+283E; [0C E4 EB, 05, 05]
-283D; [0C DF 3F, 05, 05]
+283F; [0C E4 F2, 05, 05]
-283E; [0C DF 46, 05, 05]
+2840; [0C E4 F9, 05, 05]
-283F; [0C DF 4D, 05, 05]
+2841; [0C E5 02, 05, 05]
-2840; [0C DF 54, 05, 05]
+2842; [0C E5 09, 05, 05]
-2841; [0C DF 5B, 05, 05]
+2843; [0C E5 10, 05, 05]
-2842; [0C DF 62, 05, 05]
+2844; [0C E5 17, 05, 05]
-2843; [0C DF 69, 05, 05]
+2845; [0C E5 1E, 05, 05]
-2844; [0C DF 70, 05, 05]
+2846; [0C E5 25, 05, 05]
-2845; [0C DF 77, 05, 05]
+2847; [0C E5 2C, 05, 05]
-2846; [0C DF 7E, 05, 05]
+2848; [0C E5 33, 05, 05]
-2847; [0C DF 85, 05, 05]
+2849; [0C E5 3A, 05, 05]
-2848; [0C DF 8C, 05, 05]
+284A; [0C E5 41, 05, 05]
-2849; [0C DF 93, 05, 05]
+284B; [0C E5 48, 05, 05]
-284A; [0C DF 9A, 05, 05]
+284C; [0C E5 4F, 05, 05]
-284B; [0C DF A1, 05, 05]
+284D; [0C E5 56, 05, 05]
-284C; [0C DF A8, 05, 05]
+284E; [0C E5 5D, 05, 05]
-284D; [0C DF AF, 05, 05]
+284F; [0C E5 64, 05, 05]
-284E; [0C DF B6, 05, 05]
+2850; [0C E5 6B, 05, 05]
-284F; [0C DF BD, 05, 05]
+2851; [0C E5 72, 05, 05]
-2850; [0C DF C4, 05, 05]
+2852; [0C E5 79, 05, 05]
-2851; [0C DF CB, 05, 05]
+2853; [0C E5 80, 05, 05]
-2852; [0C DF D2, 05, 05]
+2854; [0C E5 87, 05, 05]
-2853; [0C DF D9, 05, 05]
+2855; [0C E5 8E, 05, 05]
-2854; [0C DF E0, 05, 05]
+2856; [0C E5 95, 05, 05]
-2855; [0C DF E7, 05, 05]
+2857; [0C E5 9C, 05, 05]
-2856; [0C DF EE, 05, 05]
+2858; [0C E5 A3, 05, 05]
-2857; [0C DF F5, 05, 05]
+2859; [0C E5 AA, 05, 05]
-2858; [0C DF FC, 05, 05]
+285A; [0C E5 B1, 05, 05]
-2859; [0C E0 05, 05, 05]
+285B; [0C E5 B8, 05, 05]
-285A; [0C E0 0C, 05, 05]
+285C; [0C E5 BF, 05, 05]
-285B; [0C E0 13, 05, 05]
+285D; [0C E5 C6, 05, 05]
-285C; [0C E0 1A, 05, 05]
+285E; [0C E5 CD, 05, 05]
-285D; [0C E0 21, 05, 05]
+285F; [0C E5 D4, 05, 05]
-285E; [0C E0 28, 05, 05]
+2860; [0C E5 DB, 05, 05]
-285F; [0C E0 2F, 05, 05]
+2861; [0C E5 E2, 05, 05]
-2860; [0C E0 36, 05, 05]
+2862; [0C E5 E9, 05, 05]
-2861; [0C E0 3D, 05, 05]
+2863; [0C E5 F0, 05, 05]
-2862; [0C E0 44, 05, 05]
+2864; [0C E5 F7, 05, 05]
-2863; [0C E0 4B, 05, 05]
+2865; [0C E5 FE, 05, 05]
-2864; [0C E0 52, 05, 05]
+2866; [0C E6 07, 05, 05]
-2865; [0C E0 59, 05, 05]
+2867; [0C E6 0E, 05, 05]
-2866; [0C E0 60, 05, 05]
+2868; [0C E6 15, 05, 05]
-2867; [0C E0 67, 05, 05]
+2869; [0C E6 1C, 05, 05]
-2868; [0C E0 6E, 05, 05]
+286A; [0C E6 23, 05, 05]
-2869; [0C E0 75, 05, 05]
+286B; [0C E6 2A, 05, 05]
-286A; [0C E0 7C, 05, 05]
+286C; [0C E6 31, 05, 05]
-286B; [0C E0 83, 05, 05]
+286D; [0C E6 38, 05, 05]
-286C; [0C E0 8A, 05, 05]
+286E; [0C E6 3F, 05, 05]
-286D; [0C E0 91, 05, 05]
+286F; [0C E6 46, 05, 05]
-286E; [0C E0 98, 05, 05]
+2870; [0C E6 4D, 05, 05]
-286F; [0C E0 9F, 05, 05]
+2871; [0C E6 54, 05, 05]
-2870; [0C E0 A6, 05, 05]
+2872; [0C E6 5B, 05, 05]
-2871; [0C E0 AD, 05, 05]
+2873; [0C E6 62, 05, 05]
-2872; [0C E0 B4, 05, 05]
+2874; [0C E6 69, 05, 05]
-2873; [0C E0 BB, 05, 05]
+2875; [0C E6 70, 05, 05]
-2874; [0C E0 C2, 05, 05]
+2876; [0C E6 77, 05, 05]
-2875; [0C E0 C9, 05, 05]
+2877; [0C E6 7E, 05, 05]
-2876; [0C E0 D0, 05, 05]
+2878; [0C E6 85, 05, 05]
-2877; [0C E0 D7, 05, 05]
+2879; [0C E6 8C, 05, 05]
-2878; [0C E0 DE, 05, 05]
+287A; [0C E6 93, 05, 05]
-2879; [0C E0 E5, 05, 05]
+287B; [0C E6 9A, 05, 05]
-287A; [0C E0 EC, 05, 05]
+287C; [0C E6 A1, 05, 05]
-287B; [0C E0 F3, 05, 05]
+287D; [0C E6 A8, 05, 05]
-287C; [0C E0 FA, 05, 05]
+287E; [0C E6 AF, 05, 05]
-287D; [0C E1 03, 05, 05]
+287F; [0C E6 B6, 05, 05]
-287E; [0C E1 0A, 05, 05]
+2880; [0C E6 BD, 05, 05]
-287F; [0C E1 11, 05, 05]
+2881; [0C E6 C4, 05, 05]
-2880; [0C E1 18, 05, 05]
+2882; [0C E6 CB, 05, 05]
-2881; [0C E1 1F, 05, 05]
+2883; [0C E6 D2, 05, 05]
-2882; [0C E1 26, 05, 05]
+2884; [0C E6 D9, 05, 05]
-2883; [0C E1 2D, 05, 05]
+2885; [0C E6 E0, 05, 05]
-2884; [0C E1 34, 05, 05]
+2886; [0C E6 E7, 05, 05]
-2885; [0C E1 3B, 05, 05]
+2887; [0C E6 EE, 05, 05]
-2886; [0C E1 42, 05, 05]
+2888; [0C E6 F5, 05, 05]
-2887; [0C E1 49, 05, 05]
+2889; [0C E6 FC, 05, 05]
-2888; [0C E1 50, 05, 05]
+288A; [0C E7 05, 05, 05]
-2889; [0C E1 57, 05, 05]
+288B; [0C E7 0C, 05, 05]
-288A; [0C E1 5E, 05, 05]
+288C; [0C E7 13, 05, 05]
-288B; [0C E1 65, 05, 05]
+288D; [0C E7 1A, 05, 05]
-288C; [0C E1 6C, 05, 05]
+288E; [0C E7 21, 05, 05]
-288D; [0C E1 73, 05, 05]
+288F; [0C E7 28, 05, 05]
-288E; [0C E1 7A, 05, 05]
+2890; [0C E7 2F, 05, 05]
-288F; [0C E1 81, 05, 05]
+2891; [0C E7 36, 05, 05]
-2890; [0C E1 88, 05, 05]
+2892; [0C E7 3D, 05, 05]
-2891; [0C E1 8F, 05, 05]
+2893; [0C E7 44, 05, 05]
-2892; [0C E1 96, 05, 05]
+2894; [0C E7 4B, 05, 05]
-2893; [0C E1 9D, 05, 05]
+2895; [0C E7 52, 05, 05]
-2894; [0C E1 A4, 05, 05]
+2896; [0C E7 59, 05, 05]
-2895; [0C E1 AB, 05, 05]
+2897; [0C E7 60, 05, 05]
-2896; [0C E1 B2, 05, 05]
+2898; [0C E7 67, 05, 05]
-2897; [0C E1 B9, 05, 05]
+2899; [0C E7 6E, 05, 05]
-2898; [0C E1 C0, 05, 05]
+289A; [0C E7 75, 05, 05]
-2899; [0C E1 C7, 05, 05]
+289B; [0C E7 7C, 05, 05]
-289A; [0C E1 CE, 05, 05]
+289C; [0C E7 83, 05, 05]
-289B; [0C E1 D5, 05, 05]
+289D; [0C E7 8A, 05, 05]
-289C; [0C E1 DC, 05, 05]
+289E; [0C E7 91, 05, 05]
-289D; [0C E1 E3, 05, 05]
+289F; [0C E7 98, 05, 05]
-289E; [0C E1 EA, 05, 05]
+28A0; [0C E7 9F, 05, 05]
-289F; [0C E1 F1, 05, 05]
+28A1; [0C E7 A6, 05, 05]
-28A0; [0C E1 F8, 05, 05]
+28A2; [0C E7 AD, 05, 05]
-28A1; [0C E1 FF, 05, 05]
+28A3; [0C E7 B4, 05, 05]
-28A2; [0C E2 08, 05, 05]
+28A4; [0C E7 BB, 05, 05]
-28A3; [0C E2 0F, 05, 05]
+28A5; [0C E7 C2, 05, 05]
-28A4; [0C E2 16, 05, 05]
+28A6; [0C E7 C9, 05, 05]
-28A5; [0C E2 1D, 05, 05]
+28A7; [0C E7 D0, 05, 05]
-28A6; [0C E2 24, 05, 05]
+28A8; [0C E7 D7, 05, 05]
-28A7; [0C E2 2B, 05, 05]
+28A9; [0C E7 DE, 05, 05]
-28A8; [0C E2 32, 05, 05]
+28AA; [0C E7 E5, 05, 05]
-28A9; [0C E2 39, 05, 05]
+28AB; [0C E7 EC, 05, 05]
-28AA; [0C E2 40, 05, 05]
+28AC; [0C E7 F3, 05, 05]
-28AB; [0C E2 47, 05, 05]
+28AD; [0C E7 FA, 05, 05]
-28AC; [0C E2 4E, 05, 05]
+28AE; [0C E8 03, 05, 05]
-28AD; [0C E2 55, 05, 05]
+28AF; [0C E8 0A, 05, 05]
-28AE; [0C E2 5C, 05, 05]
+28B0; [0C E8 11, 05, 05]
-28AF; [0C E2 63, 05, 05]
+28B1; [0C E8 18, 05, 05]
-28B0; [0C E2 6A, 05, 05]
+28B2; [0C E8 1F, 05, 05]
-28B1; [0C E2 71, 05, 05]
+28B3; [0C E8 26, 05, 05]
-28B2; [0C E2 78, 05, 05]
+28B4; [0C E8 2D, 05, 05]
-28B3; [0C E2 7F, 05, 05]
+28B5; [0C E8 34, 05, 05]
-28B4; [0C E2 86, 05, 05]
+28B6; [0C E8 3B, 05, 05]
-28B5; [0C E2 8D, 05, 05]
+28B7; [0C E8 42, 05, 05]
-28B6; [0C E2 94, 05, 05]
+28B8; [0C E8 49, 05, 05]
-28B7; [0C E2 9B, 05, 05]
+28B9; [0C E8 50, 05, 05]
-28B8; [0C E2 A2, 05, 05]
+28BA; [0C E8 57, 05, 05]
-28B9; [0C E2 A9, 05, 05]
+28BB; [0C E8 5E, 05, 05]
-28BA; [0C E2 B0, 05, 05]
+28BC; [0C E8 65, 05, 05]
-28BB; [0C E2 B7, 05, 05]
+28BD; [0C E8 6C, 05, 05]
-28BC; [0C E2 BE, 05, 05]
+28BE; [0C E8 73, 05, 05]
-28BD; [0C E2 C5, 05, 05]
+28BF; [0C E8 7A, 05, 05]
-28BE; [0C E2 CC, 05, 05]
+28C0; [0C E8 81, 05, 05]
-28BF; [0C E2 D3, 05, 05]
+28C1; [0C E8 88, 05, 05]
-28C0; [0C E2 DA, 05, 05]
+28C2; [0C E8 8F, 05, 05]
-28C1; [0C E2 E1, 05, 05]
+28C3; [0C E8 96, 05, 05]
-28C2; [0C E2 E8, 05, 05]
+28C4; [0C E8 9D, 05, 05]
-28C3; [0C E2 EF, 05, 05]
+28C5; [0C E8 A4, 05, 05]
-28C4; [0C E2 F6, 05, 05]
+28C6; [0C E8 AB, 05, 05]
-28C5; [0C E2 FD, 05, 05]
+28C7; [0C E8 B2, 05, 05]
-28C6; [0C E3 06, 05, 05]
+28C8; [0C E8 B9, 05, 05]
-28C7; [0C E3 0D, 05, 05]
+28C9; [0C E8 C0, 05, 05]
-28C8; [0C E3 14, 05, 05]
+28CA; [0C E8 C7, 05, 05]
-28C9; [0C E3 1B, 05, 05]
+28CB; [0C E8 CE, 05, 05]
-28CA; [0C E3 22, 05, 05]
+28CC; [0C E8 D5, 05, 05]
-28CB; [0C E3 29, 05, 05]
+28CD; [0C E8 DC, 05, 05]
-28CC; [0C E3 30, 05, 05]
+28CE; [0C E8 E3, 05, 05]
-28CD; [0C E3 37, 05, 05]
+28CF; [0C E8 EA, 05, 05]
-28CE; [0C E3 3E, 05, 05]
+28D0; [0C E8 F1, 05, 05]
-28CF; [0C E3 45, 05, 05]
+28D1; [0C E8 F8, 05, 05]
-28D0; [0C E3 4C, 05, 05]
+28D2; [0C E8 FF, 05, 05]
-28D1; [0C E3 53, 05, 05]
+28D3; [0C E9 08, 05, 05]
-28D2; [0C E3 5A, 05, 05]
+28D4; [0C E9 0F, 05, 05]
-28D3; [0C E3 61, 05, 05]
+28D5; [0C E9 16, 05, 05]
-28D4; [0C E3 68, 05, 05]
+28D6; [0C E9 1D, 05, 05]
-28D5; [0C E3 6F, 05, 05]
+28D7; [0C E9 24, 05, 05]
-28D6; [0C E3 76, 05, 05]
+28D8; [0C E9 2B, 05, 05]
-28D7; [0C E3 7D, 05, 05]
+28D9; [0C E9 32, 05, 05]
-28D8; [0C E3 84, 05, 05]
+28DA; [0C E9 39, 05, 05]
-28D9; [0C E3 8B, 05, 05]
+28DB; [0C E9 40, 05, 05]
-28DA; [0C E3 92, 05, 05]
+28DC; [0C E9 47, 05, 05]
-28DB; [0C E3 99, 05, 05]
+28DD; [0C E9 4E, 05, 05]
-28DC; [0C E3 A0, 05, 05]
+28DE; [0C E9 55, 05, 05]
-28DD; [0C E3 A7, 05, 05]
+28DF; [0C E9 5C, 05, 05]
-28DE; [0C E3 AE, 05, 05]
+28E0; [0C E9 63, 05, 05]
-28DF; [0C E3 B5, 05, 05]
+28E1; [0C E9 6A, 05, 05]
-28E0; [0C E3 BC, 05, 05]
+28E2; [0C E9 71, 05, 05]
-28E1; [0C E3 C3, 05, 05]
+28E3; [0C E9 78, 05, 05]
-28E2; [0C E3 CA, 05, 05]
+28E4; [0C E9 7F, 05, 05]
-28E3; [0C E3 D1, 05, 05]
+28E5; [0C E9 86, 05, 05]
-28E4; [0C E3 D8, 05, 05]
+28E6; [0C E9 8D, 05, 05]
-28E5; [0C E3 DF, 05, 05]
+28E7; [0C E9 94, 05, 05]
-28E6; [0C E3 E6, 05, 05]
+28E8; [0C E9 9B, 05, 05]
-28E7; [0C E3 ED, 05, 05]
+28E9; [0C E9 A2, 05, 05]
-28E8; [0C E3 F4, 05, 05]
+28EA; [0C E9 A9, 05, 05]
-28E9; [0C E3 FB, 05, 05]
+28EB; [0C E9 B0, 05, 05]
-28EA; [0C E4 04, 05, 05]
+28EC; [0C E9 B7, 05, 05]
-28EB; [0C E4 0B, 05, 05]
+28ED; [0C E9 BE, 05, 05]
-28EC; [0C E4 12, 05, 05]
+28EE; [0C E9 C5, 05, 05]
-28ED; [0C E4 19, 05, 05]
+28EF; [0C E9 CC, 05, 05]
-28EE; [0C E4 20, 05, 05]
+28F0; [0C E9 D3, 05, 05]
-28EF; [0C E4 27, 05, 05]
+28F1; [0C E9 DA, 05, 05]
-28F0; [0C E4 2E, 05, 05]
+28F2; [0C E9 E1, 05, 05]
-28F1; [0C E4 35, 05, 05]
+28F3; [0C E9 E8, 05, 05]
-28F2; [0C E4 3C, 05, 05]
+28F4; [0C E9 EF, 05, 05]
-28F3; [0C E4 43, 05, 05]
+28F5; [0C E9 F6, 05, 05]
-28F4; [0C E4 4A, 05, 05]
+28F6; [0C E9 FD, 05, 05]
-28F5; [0C E4 51, 05, 05]
+28F7; [0C EA 06, 05, 05]
-28F6; [0C E4 58, 05, 05]
+28F8; [0C EA 0D, 05, 05]
-28F7; [0C E4 5F, 05, 05]
+28F9; [0C EA 14, 05, 05]
-28F8; [0C E4 66, 05, 05]
+28FA; [0C EA 1B, 05, 05]
-28F9; [0C E4 6D, 05, 05]
+28FB; [0C EA 22, 05, 05]
-28FA; [0C E4 74, 05, 05]
+28FC; [0C EA 29, 05, 05]
-28FB; [0C E4 7B, 05, 05]
+28FD; [0C EA 30, 05, 05]
-28FC; [0C E4 82, 05, 05]
+28FE; [0C EA 37, 05, 05]
-28FD; [0C E4 89, 05, 05]
+28FF; [0C EA 3E, 05, 05]
-28FE; [0C E4 90, 05, 05]
+268A; [0C EA 45, 05, 05]
-28FF; [0C E4 97, 05, 05]
+268B; [0C EA 4C, 05, 05]
-268A; [0C E4 9E, 05, 05]
+268C; [0C EA 53, 05, 05]
-268B; [0C E4 A5, 05, 05]
+268D; [0C EA 5A, 05, 05]
-268C; [0C E4 AC, 05, 05]
+268E; [0C EA 61, 05, 05]
-268D; [0C E4 B3, 05, 05]
+268F; [0C EA 68, 05, 05]
-268E; [0C E4 BA, 05, 05]
+2630; [0C EA 6F, 05, 05]
-268F; [0C E4 C1, 05, 05]
+2631; [0C EA 76, 05, 05]
-2630; [0C E4 C8, 05, 05]
+2632; [0C EA 7D, 05, 05]
-2631; [0C E4 CF, 05, 05]
+2633; [0C EA 84, 05, 05]
-2632; [0C E4 D6, 05, 05]
+2634; [0C EA 8B, 05, 05]
-2633; [0C E4 DD, 05, 05]
+2635; [0C EA 92, 05, 05]
-2634; [0C E4 E4, 05, 05]
+2636; [0C EA 99, 05, 05]
-2635; [0C E4 EB, 05, 05]
+2637; [0C EA A0, 05, 05]
-2636; [0C E4 F2, 05, 05]
+4DC0; [0C EA A7, 05, 05]
-2637; [0C E4 F9, 05, 05]
+4DC1; [0C EA AE, 05, 05]
-4DC0; [0C E5 02, 05, 05]
+4DC2; [0C EA B5, 05, 05]
-4DC1; [0C E5 09, 05, 05]
+4DC3; [0C EA BC, 05, 05]
-4DC2; [0C E5 10, 05, 05]
+4DC4; [0C EA C3, 05, 05]
-4DC3; [0C E5 17, 05, 05]
+4DC5; [0C EA CA, 05, 05]
-4DC4; [0C E5 1E, 05, 05]
+4DC6; [0C EA D1, 05, 05]
-4DC5; [0C E5 25, 05, 05]
+4DC7; [0C EA D8, 05, 05]
-4DC6; [0C E5 2C, 05, 05]
+4DC8; [0C EA DF, 05, 05]
-4DC7; [0C E5 33, 05, 05]
+4DC9; [0C EA E6, 05, 05]
-4DC8; [0C E5 3A, 05, 05]
+4DCA; [0C EA ED, 05, 05]
-4DC9; [0C E5 41, 05, 05]
+4DCB; [0C EA F4, 05, 05]
-4DCA; [0C E5 48, 05, 05]
+4DCC; [0C EA FB, 05, 05]
-4DCB; [0C E5 4F, 05, 05]
+4DCD; [0C EB 04, 05, 05]
-4DCC; [0C E5 56, 05, 05]
+4DCE; [0C EB 0B, 05, 05]
-4DCD; [0C E5 5D, 05, 05]
+4DCF; [0C EB 12, 05, 05]
-4DCE; [0C E5 64, 05, 05]
+4DD0; [0C EB 19, 05, 05]
-4DCF; [0C E5 6B, 05, 05]
+4DD1; [0C EB 20, 05, 05]
-4DD0; [0C E5 72, 05, 05]
+4DD2; [0C EB 27, 05, 05]
-4DD1; [0C E5 79, 05, 05]
+4DD3; [0C EB 2E, 05, 05]
-4DD2; [0C E5 80, 05, 05]
+4DD4; [0C EB 35, 05, 05]
-4DD3; [0C E5 87, 05, 05]
+4DD5; [0C EB 3C, 05, 05]
-4DD4; [0C E5 8E, 05, 05]
+4DD6; [0C EB 43, 05, 05]
-4DD5; [0C E5 95, 05, 05]
+4DD7; [0C EB 4A, 05, 05]
-4DD6; [0C E5 9C, 05, 05]
+4DD8; [0C EB 51, 05, 05]
-4DD7; [0C E5 A3, 05, 05]
+4DD9; [0C EB 58, 05, 05]
-4DD8; [0C E5 AA, 05, 05]
+4DDA; [0C EB 5F, 05, 05]
-4DD9; [0C E5 B1, 05, 05]
+4DDB; [0C EB 66, 05, 05]
-4DDA; [0C E5 B8, 05, 05]
+4DDC; [0C EB 6D, 05, 05]
-4DDB; [0C E5 BF, 05, 05]
+4DDD; [0C EB 74, 05, 05]
-4DDC; [0C E5 C6, 05, 05]
+4DDE; [0C EB 7B, 05, 05]
-4DDD; [0C E5 CD, 05, 05]
+4DDF; [0C EB 82, 05, 05]
-4DDE; [0C E5 D4, 05, 05]
+4DE0; [0C EB 89, 05, 05]
-4DDF; [0C E5 DB, 05, 05]
+4DE1; [0C EB 90, 05, 05]
-4DE0; [0C E5 E2, 05, 05]
+4DE2; [0C EB 97, 05, 05]
-4DE1; [0C E5 E9, 05, 05]
+4DE3; [0C EB 9E, 05, 05]
-4DE2; [0C E5 F0, 05, 05]
+4DE4; [0C EB A5, 05, 05]
-4DE3; [0C E5 F7, 05, 05]
+4DE5; [0C EB AC, 05, 05]
-4DE4; [0C E5 FE, 05, 05]
+4DE6; [0C EB B3, 05, 05]
-4DE5; [0C E6 07, 05, 05]
+4DE7; [0C EB BA, 05, 05]
-4DE6; [0C E6 0E, 05, 05]
+4DE8; [0C EB C1, 05, 05]
-4DE7; [0C E6 15, 05, 05]
+4DE9; [0C EB C8, 05, 05]
-4DE8; [0C E6 1C, 05, 05]
+4DEA; [0C EB CF, 05, 05]
-4DE9; [0C E6 23, 05, 05]
+4DEB; [0C EB D6, 05, 05]
-4DEA; [0C E6 2A, 05, 05]
+4DEC; [0C EB DD, 05, 05]
-4DEB; [0C E6 31, 05, 05]
+4DED; [0C EB E4, 05, 05]
-4DEC; [0C E6 38, 05, 05]
+4DEE; [0C EB EB, 05, 05]
-4DED; [0C E6 3F, 05, 05]
+4DEF; [0C EB F2, 05, 05]
-4DEE; [0C E6 46, 05, 05]
+4DF0; [0C EB F9, 05, 05]
-4DEF; [0C E6 4D, 05, 05]
+4DF1; [0C EC 02, 05, 05]
-4DF0; [0C E6 54, 05, 05]
+4DF2; [0C EC 09, 05, 05]
-4DF1; [0C E6 5B, 05, 05]
+4DF3; [0C EC 10, 05, 05]
-4DF2; [0C E6 62, 05, 05]
+4DF4; [0C EC 17, 05, 05]
-4DF3; [0C E6 69, 05, 05]
+4DF5; [0C EC 1E, 05, 05]
-4DF4; [0C E6 70, 05, 05]
+4DF6; [0C EC 25, 05, 05]
-4DF5; [0C E6 77, 05, 05]
+4DF7; [0C EC 2C, 05, 05]
-4DF6; [0C E6 7E, 05, 05]
+4DF8; [0C EC 33, 05, 05]
-4DF7; [0C E6 85, 05, 05]
+4DF9; [0C EC 3A, 05, 05]
-4DF8; [0C E6 8C, 05, 05]
+4DFA; [0C EC 41, 05, 05]
-4DF9; [0C E6 93, 05, 05]
+4DFB; [0C EC 48, 05, 05]
-4DFA; [0C E6 9A, 05, 05]
+4DFC; [0C EC 4F, 05, 05]
-4DFB; [0C E6 A1, 05, 05]
+4DFD; [0C EC 56, 05, 05]
-4DFC; [0C E6 A8, 05, 05]
+4DFE; [0C EC 5D, 05, 05]
-4DFD; [0C E6 AF, 05, 05]
+4DFF; [0C EC 64, 05, 05]
-4DFE; [0C E6 B6, 05, 05]
+1D300; [0C EC 6B, 05, 05]
-4DFF; [0C E6 BD, 05, 05]
+1D301; [0C EC 72, 05, 05]
-1D300; [0C E6 C4, 05, 05]
+1D302; [0C EC 79, 05, 05]
-1D301; [0C E6 CB, 05, 05]
+1D303; [0C EC 80, 05, 05]
-1D302; [0C E6 D2, 05, 05]
+1D304; [0C EC 87, 05, 05]
-1D303; [0C E6 D9, 05, 05]
+1D305; [0C EC 8E, 05, 05]
-1D304; [0C E6 E0, 05, 05]
+1D306; [0C EC 95, 05, 05]
-1D305; [0C E6 E7, 05, 05]
+1D307; [0C EC 9C, 05, 05]
-1D306; [0C E6 EE, 05, 05]
+1D308; [0C EC A3, 05, 05]
-1D307; [0C E6 F5, 05, 05]
+1D309; [0C EC AA, 05, 05]
-1D308; [0C E6 FC, 05, 05]
+1D30A; [0C EC B1, 05, 05]
-1D309; [0C E7 05, 05, 05]
+1D30B; [0C EC B8, 05, 05]
-1D30A; [0C E7 0C, 05, 05]
+1D30C; [0C EC BF, 05, 05]
-1D30B; [0C E7 13, 05, 05]
+1D30D; [0C EC C6, 05, 05]
-1D30C; [0C E7 1A, 05, 05]
+1D30E; [0C EC CD, 05, 05]
-1D30D; [0C E7 21, 05, 05]
+1D30F; [0C EC D4, 05, 05]
-1D30E; [0C E7 28, 05, 05]
+1D310; [0C EC DB, 05, 05]
-1D30F; [0C E7 2F, 05, 05]
+1D311; [0C EC E2, 05, 05]
-1D310; [0C E7 36, 05, 05]
+1D312; [0C EC E9, 05, 05]
-1D311; [0C E7 3D, 05, 05]
+1D313; [0C EC F0, 05, 05]
-1D312; [0C E7 44, 05, 05]
+1D314; [0C EC F7, 05, 05]
-1D313; [0C E7 4B, 05, 05]
+1D315; [0C EC FE, 05, 05]
-1D314; [0C E7 52, 05, 05]
+1D316; [0C ED 07, 05, 05]
-1D315; [0C E7 59, 05, 05]
+1D317; [0C ED 0E, 05, 05]
-1D316; [0C E7 60, 05, 05]
+1D318; [0C ED 15, 05, 05]
-1D317; [0C E7 67, 05, 05]
+1D319; [0C ED 1C, 05, 05]
-1D318; [0C E7 6E, 05, 05]
+1D31A; [0C ED 23, 05, 05]
-1D319; [0C E7 75, 05, 05]
+1D31B; [0C ED 2A, 05, 05]
-1D31A; [0C E7 7C, 05, 05]
+1D31C; [0C ED 31, 05, 05]
-1D31B; [0C E7 83, 05, 05]
+1D31D; [0C ED 38, 05, 05]
-1D31C; [0C E7 8A, 05, 05]
+1D31E; [0C ED 3F, 05, 05]
-1D31D; [0C E7 91, 05, 05]
+1D31F; [0C ED 46, 05, 05]
-1D31E; [0C E7 98, 05, 05]
+1D320; [0C ED 4D, 05, 05]
-1D31F; [0C E7 9F, 05, 05]
+1D321; [0C ED 54, 05, 05]
-1D320; [0C E7 A6, 05, 05]
+1D322; [0C ED 5B, 05, 05]
-1D321; [0C E7 AD, 05, 05]
+1D323; [0C ED 62, 05, 05]
-1D322; [0C E7 B4, 05, 05]
+1D324; [0C ED 69, 05, 05]
-1D323; [0C E7 BB, 05, 05]
+1D325; [0C ED 70, 05, 05]
-1D324; [0C E7 C2, 05, 05]
+1D326; [0C ED 77, 05, 05]
-1D325; [0C E7 C9, 05, 05]
+1D327; [0C ED 7E, 05, 05]
-1D326; [0C E7 D0, 05, 05]
+1D328; [0C ED 85, 05, 05]
-1D327; [0C E7 D7, 05, 05]
+1D329; [0C ED 8C, 05, 05]
-1D328; [0C E7 DE, 05, 05]
+1D32A; [0C ED 93, 05, 05]
-1D329; [0C E7 E5, 05, 05]
+1D32B; [0C ED 9A, 05, 05]
-1D32A; [0C E7 EC, 05, 05]
+1D32C; [0C ED A1, 05, 05]
-1D32B; [0C E7 F3, 05, 05]
+1D32D; [0C ED A8, 05, 05]
-1D32C; [0C E7 FA, 05, 05]
+1D32E; [0C ED AF, 05, 05]
-1D32D; [0C E8 03, 05, 05]
+1D32F; [0C ED B6, 05, 05]
-1D32E; [0C E8 0A, 05, 05]
+1D330; [0C ED BD, 05, 05]
-1D32F; [0C E8 11, 05, 05]
+1D331; [0C ED C4, 05, 05]
-1D330; [0C E8 18, 05, 05]
+1D332; [0C ED CB, 05, 05]
-1D331; [0C E8 1F, 05, 05]
+1D333; [0C ED D2, 05, 05]
-1D332; [0C E8 26, 05, 05]
+1D334; [0C ED D9, 05, 05]
-1D333; [0C E8 2D, 05, 05]
+1D335; [0C ED E0, 05, 05]
-1D334; [0C E8 34, 05, 05]
+1D336; [0C ED E7, 05, 05]
-1D335; [0C E8 3B, 05, 05]
+1D337; [0C ED EE, 05, 05]
-1D336; [0C E8 42, 05, 05]
+1D338; [0C ED F5, 05, 05]
-1D337; [0C E8 49, 05, 05]
+1D339; [0C ED FC, 05, 05]
-1D338; [0C E8 50, 05, 05]
+1D33A; [0C EE 05, 05, 05]
-1D339; [0C E8 57, 05, 05]
+1D33B; [0C EE 0C, 05, 05]
-1D33A; [0C E8 5E, 05, 05]
+1D33C; [0C EE 13, 05, 05]
-1D33B; [0C E8 65, 05, 05]
+1D33D; [0C EE 1A, 05, 05]
-1D33C; [0C E8 6C, 05, 05]
+1D33E; [0C EE 21, 05, 05]
-1D33D; [0C E8 73, 05, 05]
+1D33F; [0C EE 28, 05, 05]
-1D33E; [0C E8 7A, 05, 05]
+1D340; [0C EE 2F, 05, 05]
-1D33F; [0C E8 81, 05, 05]
+1D341; [0C EE 36, 05, 05]
-1D340; [0C E8 88, 05, 05]
+1D342; [0C EE 3D, 05, 05]
-1D341; [0C E8 8F, 05, 05]
+1D343; [0C EE 44, 05, 05]
-1D342; [0C E8 96, 05, 05]
+1D344; [0C EE 4B, 05, 05]
-1D343; [0C E8 9D, 05, 05]
+1D345; [0C EE 52, 05, 05]
-1D344; [0C E8 A4, 05, 05]
+1D346; [0C EE 59, 05, 05]
-1D345; [0C E8 AB, 05, 05]
+1D347; [0C EE 60, 05, 05]
-1D346; [0C E8 B2, 05, 05]
+1D348; [0C EE 67, 05, 05]
-1D347; [0C E8 B9, 05, 05]
+1D349; [0C EE 6E, 05, 05]
-1D348; [0C E8 C0, 05, 05]
+1D34A; [0C EE 75, 05, 05]
-1D349; [0C E8 C7, 05, 05]
+1D34B; [0C EE 7C, 05, 05]
-1D34A; [0C E8 CE, 05, 05]
+1D34C; [0C EE 83, 05, 05]
-1D34B; [0C E8 D5, 05, 05]
+1D34D; [0C EE 8A, 05, 05]
-1D34C; [0C E8 DC, 05, 05]
+1D34E; [0C EE 91, 05, 05]
-1D34D; [0C E8 E3, 05, 05]
+1D34F; [0C EE 98, 05, 05]
-1D34E; [0C E8 EA, 05, 05]
+1D350; [0C EE 9F, 05, 05]
-1D34F; [0C E8 F1, 05, 05]
+1D351; [0C EE A6, 05, 05]
-1D350; [0C E8 F8, 05, 05]
+1D352; [0C EE AD, 05, 05]
-1D351; [0C E8 FF, 05, 05]
+1D353; [0C EE B4, 05, 05]
-1D352; [0C E9 08, 05, 05]
+1D354; [0C EE BB, 05, 05]
-1D353; [0C E9 0F, 05, 05]
+1D355; [0C EE C2, 05, 05]
-1D354; [0C E9 16, 05, 05]
+1D356; [0C EE C9, 05, 05]
-1D355; [0C E9 1D, 05, 05]
+A490; [0C EE D0, 05, 05]
-1D356; [0C E9 24, 05, 05]
+A491; [0C EE D7, 05, 05]
-A490; [0C E9 2B, 05, 05]
+A492; [0C EE DE, 05, 05]
-A491; [0C E9 32, 05, 05]
+A493; [0C EE E5, 05, 05]
-A492; [0C E9 39, 05, 05]
+A494; [0C EE EC, 05, 05]
-A493; [0C E9 40, 05, 05]
+A495; [0C EE F3, 05, 05]
-A494; [0C E9 47, 05, 05]
+A496; [0C EE FA, 05, 05]
-A495; [0C E9 4E, 05, 05]
+A497; [0C EF 03, 05, 05]
-A496; [0C E9 55, 05, 05]
+A498; [0C EF 0A, 05, 05]
-A497; [0C E9 5C, 05, 05]
+A499; [0C EF 11, 05, 05]
-A498; [0C E9 63, 05, 05]
+A49A; [0C EF 18, 05, 05]
-A499; [0C E9 6A, 05, 05]
+A49B; [0C EF 1F, 05, 05]
-A49A; [0C E9 71, 05, 05]
+A49C; [0C EF 26, 05, 05]
-A49B; [0C E9 78, 05, 05]
+A49D; [0C EF 2D, 05, 05]
-A49C; [0C E9 7F, 05, 05]
+A49E; [0C EF 34, 05, 05]
-A49D; [0C E9 86, 05, 05]
+A49F; [0C EF 3B, 05, 05]
-A49E; [0C E9 8D, 05, 05]
+A4A0; [0C EF 42, 05, 05]
-A49F; [0C E9 94, 05, 05]
+A4A1; [0C EF 49, 05, 05]
-A4A0; [0C E9 9B, 05, 05]
+A4A2; [0C EF 50, 05, 05]
-A4A1; [0C E9 A2, 05, 05]
+A4A3; [0C EF 57, 05, 05]
-A4A2; [0C E9 A9, 05, 05]
+A4A4; [0C EF 5E, 05, 05]
-A4A3; [0C E9 B0, 05, 05]
+A4A5; [0C EF 65, 05, 05]
-A4A4; [0C E9 B7, 05, 05]
+A4A6; [0C EF 6C, 05, 05]
-A4A5; [0C E9 BE, 05, 05]
+A4A7; [0C EF 73, 05, 05]
-A4A6; [0C E9 C5, 05, 05]
+A4A8; [0C EF 7A, 05, 05]
-A4A7; [0C E9 CC, 05, 05]
+A4A9; [0C EF 81, 05, 05]
-A4A8; [0C E9 D3, 05, 05]
+A4AA; [0C EF 88, 05, 05]
-A4A9; [0C E9 DA, 05, 05]
+A4AB; [0C EF 8F, 05, 05]
-A4AA; [0C E9 E1, 05, 05]
+A4AC; [0C EF 96, 05, 05]
-A4AB; [0C E9 E8, 05, 05]
+A4AD; [0C EF 9D, 05, 05]
-A4AC; [0C E9 EF, 05, 05]
+A4AE; [0C EF A4, 05, 05]
-A4AD; [0C E9 F6, 05, 05]
+A4AF; [0C EF AB, 05, 05]
-A4AE; [0C E9 FD, 05, 05]
+A4B0; [0C EF B2, 05, 05]
-A4AF; [0C EA 06, 05, 05]
+A4B1; [0C EF B9, 05, 05]
-A4B0; [0C EA 0D, 05, 05]
+A4B2; [0C EF C0, 05, 05]
-A4B1; [0C EA 14, 05, 05]
+A4B3; [0C EF C7, 05, 05]
-A4B2; [0C EA 1B, 05, 05]
+A4B4; [0C EF CE, 05, 05]
-A4B3; [0C EA 22, 05, 05]
+A4B5; [0C EF D5, 05, 05]
-A4B4; [0C EA 29, 05, 05]
+A4B6; [0C EF DC, 05, 05]
-A4B5; [0C EA 30, 05, 05]
+A4B7; [0C EF E3, 05, 05]
-A4B6; [0C EA 37, 05, 05]
+A4B8; [0C EF EA, 05, 05]
-A4B7; [0C EA 3E, 05, 05]
+A4B9; [0C EF F1, 05, 05]
-A4B8; [0C EA 45, 05, 05]
+A4BA; [0C EF F8, 05, 05]
-A4B9; [0C EA 4C, 05, 05]
+A4BB; [0C EF FF, 05, 05]
-A4BA; [0C EA 53, 05, 05]
+A4BC; [0C F0 08, 05, 05]
-A4BB; [0C EA 5A, 05, 05]
+A4BD; [0C F0 0F, 05, 05]
-A4BC; [0C EA 61, 05, 05]
+A4BE; [0C F0 16, 05, 05]
-A4BD; [0C EA 68, 05, 05]
+A4BF; [0C F0 1D, 05, 05]
-A4BE; [0C EA 6F, 05, 05]
+A4C0; [0C F0 24, 05, 05]
-A4BF; [0C EA 76, 05, 05]
+A4C1; [0C F0 2B, 05, 05]
-A4C0; [0C EA 7D, 05, 05]
+A4C2; [0C F0 32, 05, 05]
-A4C1; [0C EA 84, 05, 05]
+A4C3; [0C F0 39, 05, 05]
-A4C2; [0C EA 8B, 05, 05]
+A4C4; [0C F0 40, 05, 05]
-A4C3; [0C EA 92, 05, 05]
+A4C5; [0C F0 47, 05, 05]
-A4C4; [0C EA 99, 05, 05]
+A4C6; [0C F0 4E, 05, 05]
-A4C5; [0C EA A0, 05, 05]
+10137; [0C F0 55, 05, 05]
-A4C6; [0C EA A7, 05, 05]
+10138; [0C F0 5C, 05, 05]
-10137; [0C EA AE, 05, 05]
+10139; [0C F0 63, 05, 05]
-10138; [0C EA B5, 05, 05]
+1013A; [0C F0 6A, 05, 05]
-10139; [0C EA BC, 05, 05]
+1013B; [0C F0 71, 05, 05]
-1013A; [0C EA C3, 05, 05]
+1013C; [0C F0 78, 05, 05]
-1013B; [0C EA CA, 05, 05]
+1013D; [0C F0 7F, 05, 05]
-1013C; [0C EA D1, 05, 05]
+1013E; [0C F0 86, 05, 05]
-1013D; [0C EA D8, 05, 05]
+1013F; [0C F0 8D, 05, 05]
-1013E; [0C EA DF, 05, 05]
+10179; [0C F0 94, 05, 05]
-1013F; [0C EA E6, 05, 05]
+1017A; [0C F0 9B, 05, 05]
-10179; [0C EA ED, 05, 05]
+1017B; [0C F0 A2, 05, 05]
-1017A; [0C EA F4, 05, 05]
+1017C; [0C F0 A9, 05, 05]
-1017B; [0C EA FB, 05, 05]
+1017D; [0C F0 B0, 05, 05]
-1017C; [0C EB 04, 05, 05]
+1017E; [0C F0 B7, 05, 05]
-1017D; [0C EB 0B, 05, 05]
+1017F; [0C F0 BE, 05, 05]
-1017E; [0C EB 12, 05, 05]
+10180; [0C F0 C5, 05, 05]
-1017F; [0C EB 19, 05, 05]
+10181; [0C F0 CC, 05, 05]
-10180; [0C EB 20, 05, 05]
+10182; [0C F0 D3, 05, 05]
-10181; [0C EB 27, 05, 05]
+10183; [0C F0 DA, 05, 05]
-10182; [0C EB 2E, 05, 05]
+10184; [0C F0 E1, 05, 05]
-10183; [0C EB 35, 05, 05]
+10185; [0C F0 E8, 05, 05]
-10184; [0C EB 3C, 05, 05]
+10186; [0C F0 EF, 05, 05]
-10185; [0C EB 43, 05, 05]
+10187; [0C F0 F6, 05, 05]
-10186; [0C EB 4A, 05, 05]
+10188; [0C F0 FD, 05, 05]
-10187; [0C EB 51, 05, 05]
+10189; [0C F1 06, 05, 05]
-10188; [0C EB 58, 05, 05]
+1018C; [0C F1 0D, 05, 05]
-10189; [0C EB 5F, 05, 05]
+1018D; [0C F1 14, 05, 05]
-1018C; [0C EB 66, 05, 05]
+1018E; [0C F1 1B, 05, 05]
-1018D; [0C EB 6D, 05, 05]
+10190; [0C F1 22, 05, 05]
-1018E; [0C EB 74, 05, 05]
+10191; [0C F1 29, 05, 05]
-10190; [0C EB 7B, 05, 05]
+10192; [0C F1 30, 05, 05]
-10191; [0C EB 82, 05, 05]
+10193; [0C F1 37, 05, 05]
-10192; [0C EB 89, 05, 05]
+10194; [0C F1 3E, 05, 05]
-10193; [0C EB 90, 05, 05]
+10195; [0C F1 45, 05, 05]
-10194; [0C EB 97, 05, 05]
+10196; [0C F1 4C, 05, 05]
-10195; [0C EB 9E, 05, 05]
+10197; [0C F1 53, 05, 05]
-10196; [0C EB A5, 05, 05]
+10198; [0C F1 5A, 05, 05]
-10197; [0C EB AC, 05, 05]
+10199; [0C F1 61, 05, 05]
-10198; [0C EB B3, 05, 05]
+1019A; [0C F1 68, 05, 05]
-10199; [0C EB BA, 05, 05]
+1019B; [0C F1 6F, 05, 05]
-1019A; [0C EB C1, 05, 05]
+1019C; [0C F1 76, 05, 05]
-1019B; [0C EB C8, 05, 05]
+101A0; [0C F1 7D, 05, 05]
-101A0; [0C EB CF, 05, 05]
+101D0; [0C F1 84, 05, 05]
-101D0; [0C EB D6, 05, 05]
+101D1; [0C F1 8B, 05, 05]
-101D1; [0C EB DD, 05, 05]
+101D2; [0C F1 92, 05, 05]
-101D2; [0C EB E4, 05, 05]
+101D3; [0C F1 99, 05, 05]
-101D3; [0C EB EB, 05, 05]
+101D4; [0C F1 A0, 05, 05]
-101D4; [0C EB F2, 05, 05]
+101D5; [0C F1 A7, 05, 05]
-101D5; [0C EB F9, 05, 05]
+101D6; [0C F1 AE, 05, 05]
-101D6; [0C EC 02, 05, 05]
+101D7; [0C F1 B5, 05, 05]
-101D7; [0C EC 09, 05, 05]
+101D8; [0C F1 BC, 05, 05]
-101D8; [0C EC 10, 05, 05]
+101D9; [0C F1 C3, 05, 05]
-101D9; [0C EC 17, 05, 05]
+101DA; [0C F1 CA, 05, 05]
-101DA; [0C EC 1E, 05, 05]
+101DB; [0C F1 D1, 05, 05]
-101DB; [0C EC 25, 05, 05]
+101DC; [0C F1 D8, 05, 05]
-101DC; [0C EC 2C, 05, 05]
+101DD; [0C F1 DF, 05, 05]
-101DD; [0C EC 33, 05, 05]
+101DE; [0C F1 E6, 05, 05]
-101DE; [0C EC 3A, 05, 05]
+101DF; [0C F1 ED, 05, 05]
-101DF; [0C EC 41, 05, 05]
+101E0; [0C F1 F4, 05, 05]
-101E0; [0C EC 48, 05, 05]
+101E1; [0C F1 FB, 05, 05]
-101E1; [0C EC 4F, 05, 05]
+101E2; [0C F2 04, 05, 05]
-101E2; [0C EC 56, 05, 05]
+101E3; [0C F2 0B, 05, 05]
-101E3; [0C EC 5D, 05, 05]
+101E4; [0C F2 12, 05, 05]
-101E4; [0C EC 64, 05, 05]
+101E5; [0C F2 19, 05, 05]
-101E5; [0C EC 6B, 05, 05]
+101E6; [0C F2 20, 05, 05]
-101E6; [0C EC 72, 05, 05]
+101E7; [0C F2 27, 05, 05]
-101E7; [0C EC 79, 05, 05]
+101E8; [0C F2 2E, 05, 05]
-101E8; [0C EC 80, 05, 05]
+101E9; [0C F2 35, 05, 05]
-101E9; [0C EC 87, 05, 05]
+101EA; [0C F2 3C, 05, 05]
-101EA; [0C EC 8E, 05, 05]
+101EB; [0C F2 43, 05, 05]
-101EB; [0C EC 95, 05, 05]
+101EC; [0C F2 4A, 05, 05]
-101EC; [0C EC 9C, 05, 05]
+101ED; [0C F2 51, 05, 05]
-101ED; [0C EC A3, 05, 05]
+101EE; [0C F2 58, 05, 05]
-101EE; [0C EC AA, 05, 05]
+101EF; [0C F2 5F, 05, 05]
-101EF; [0C EC B1, 05, 05]
+101F0; [0C F2 66, 05, 05]
-101F0; [0C EC B8, 05, 05]
+101F1; [0C F2 6D, 05, 05]
-101F1; [0C EC BF, 05, 05]
+101F2; [0C F2 74, 05, 05]
-101F2; [0C EC C6, 05, 05]
+101F3; [0C F2 7B, 05, 05]
-101F3; [0C EC CD, 05, 05]
+101F4; [0C F2 82, 05, 05]
-101F4; [0C EC D4, 05, 05]
+101F5; [0C F2 89, 05, 05]
-101F5; [0C EC DB, 05, 05]
+101F6; [0C F2 90, 05, 05]
-101F6; [0C EC E2, 05, 05]
+101F7; [0C F2 97, 05, 05]
-101F7; [0C EC E9, 05, 05]
+101F8; [0C F2 9E, 05, 05]
-101F8; [0C EC F0, 05, 05]
+101F9; [0C F2 A5, 05, 05]
-101F9; [0C EC F7, 05, 05]
+101FA; [0C F2 AC, 05, 05]
-101FA; [0C EC FE, 05, 05]
+101FB; [0C F2 B3, 05, 05]
-101FB; [0C ED 07, 05, 05]
+101FC; [0C F2 BA, 05, 05]
-101FC; [0C ED 0E, 05, 05]
+10877; [0C F2 C1, 05, 05]
-10877; [0C ED 15, 05, 05]
+10878; [0C F2 C8, 05, 05]
-10878; [0C ED 1C, 05, 05]
+16B3C; [0C F2 CF, 05, 05]
-16B3C; [0C ED 23, 05, 05]
+16B3D; [0C F2 D6, 05, 05]
-16B3D; [0C ED 2A, 05, 05]
+16B3E; [0C F2 DD, 05, 05]
-16B3E; [0C ED 31, 05, 05]
+16B3F; [0C F2 E4, 05, 05]
-16B3F; [0C ED 38, 05, 05]
+16B45; [0C F2 EB, 05, 05]
-16B45; [0C ED 3F, 05, 05]
+1E14F; [0C F2 F2, 05, 05]
-1E14F; [0C ED 46, 05, 05]
+1D000; [0C F2 F9, 05, 05]
-1D000; [0C ED 4D, 05, 05]
+1D001; [0C F3 02, 05, 05]
-1D001; [0C ED 54, 05, 05]
+1D002; [0C F3 09, 05, 05]
-1D002; [0C ED 5B, 05, 05]
+1D003; [0C F3 10, 05, 05]
-1D003; [0C ED 62, 05, 05]
+1D004; [0C F3 17, 05, 05]
-1D004; [0C ED 69, 05, 05]
+1D005; [0C F3 1E, 05, 05]
-1D005; [0C ED 70, 05, 05]
+1D006; [0C F3 25, 05, 05]
-1D006; [0C ED 77, 05, 05]
+1D007; [0C F3 2C, 05, 05]
-1D007; [0C ED 7E, 05, 05]
+1D008; [0C F3 33, 05, 05]
-1D008; [0C ED 85, 05, 05]
+1D009; [0C F3 3A, 05, 05]
-1D009; [0C ED 8C, 05, 05]
+1D00A; [0C F3 41, 05, 05]
-1D00A; [0C ED 93, 05, 05]
+1D00B; [0C F3 48, 05, 05]
-1D00B; [0C ED 9A, 05, 05]
+1D00C; [0C F3 4F, 05, 05]
-1D00C; [0C ED A1, 05, 05]
+1D00D; [0C F3 56, 05, 05]
-1D00D; [0C ED A8, 05, 05]
+1D00E; [0C F3 5D, 05, 05]
-1D00E; [0C ED AF, 05, 05]
+1D00F; [0C F3 64, 05, 05]
-1D00F; [0C ED B6, 05, 05]
+1D010; [0C F3 6B, 05, 05]
-1D010; [0C ED BD, 05, 05]
+1D011; [0C F3 72, 05, 05]
-1D011; [0C ED C4, 05, 05]
+1D012; [0C F3 79, 05, 05]
-1D012; [0C ED CB, 05, 05]
+1D013; [0C F3 80, 05, 05]
-1D013; [0C ED D2, 05, 05]
+1D014; [0C F3 87, 05, 05]
-1D014; [0C ED D9, 05, 05]
+1D015; [0C F3 8E, 05, 05]
-1D015; [0C ED E0, 05, 05]
+1D016; [0C F3 95, 05, 05]
-1D016; [0C ED E7, 05, 05]
+1D017; [0C F3 9C, 05, 05]
-1D017; [0C ED EE, 05, 05]
+1D018; [0C F3 A3, 05, 05]
-1D018; [0C ED F5, 05, 05]
+1D019; [0C F3 AA, 05, 05]
-1D019; [0C ED FC, 05, 05]
+1D01A; [0C F3 B1, 05, 05]
-1D01A; [0C EE 05, 05, 05]
+1D01B; [0C F3 B8, 05, 05]
-1D01B; [0C EE 0C, 05, 05]
+1D01C; [0C F3 BF, 05, 05]
-1D01C; [0C EE 13, 05, 05]
+1D01D; [0C F3 C6, 05, 05]
-1D01D; [0C EE 1A, 05, 05]
+1D01E; [0C F3 CD, 05, 05]
-1D01E; [0C EE 21, 05, 05]
+1D01F; [0C F3 D4, 05, 05]
-1D01F; [0C EE 28, 05, 05]
+1D020; [0C F3 DB, 05, 05]
-1D020; [0C EE 2F, 05, 05]
+1D021; [0C F3 E2, 05, 05]
-1D021; [0C EE 36, 05, 05]
+1D022; [0C F3 E9, 05, 05]
-1D022; [0C EE 3D, 05, 05]
+1D023; [0C F3 F0, 05, 05]
-1D023; [0C EE 44, 05, 05]
+1D024; [0C F3 F7, 05, 05]
-1D024; [0C EE 4B, 05, 05]
+1D025; [0C F3 FE, 05, 05]
-1D025; [0C EE 52, 05, 05]
+1D026; [0C F4 07, 05, 05]
-1D026; [0C EE 59, 05, 05]
+1D027; [0C F4 0E, 05, 05]
-1D027; [0C EE 60, 05, 05]
+1D028; [0C F4 15, 05, 05]
-1D028; [0C EE 67, 05, 05]
+1D029; [0C F4 1C, 05, 05]
-1D029; [0C EE 6E, 05, 05]
+1D02A; [0C F4 23, 05, 05]
-1D02A; [0C EE 75, 05, 05]
+1D02B; [0C F4 2A, 05, 05]
-1D02B; [0C EE 7C, 05, 05]
+1D02C; [0C F4 31, 05, 05]
-1D02C; [0C EE 83, 05, 05]
+1D02D; [0C F4 38, 05, 05]
-1D02D; [0C EE 8A, 05, 05]
+1D02E; [0C F4 3F, 05, 05]
-1D02E; [0C EE 91, 05, 05]
+1D02F; [0C F4 46, 05, 05]
-1D02F; [0C EE 98, 05, 05]
+1D030; [0C F4 4D, 05, 05]
-1D030; [0C EE 9F, 05, 05]
+1D031; [0C F4 54, 05, 05]
-1D031; [0C EE A6, 05, 05]
+1D032; [0C F4 5B, 05, 05]
-1D032; [0C EE AD, 05, 05]
+1D033; [0C F4 62, 05, 05]
-1D033; [0C EE B4, 05, 05]
+1D034; [0C F4 69, 05, 05]
-1D034; [0C EE BB, 05, 05]
+1D035; [0C F4 70, 05, 05]
-1D035; [0C EE C2, 05, 05]
+1D036; [0C F4 77, 05, 05]
-1D036; [0C EE C9, 05, 05]
+1D037; [0C F4 7E, 05, 05]
-1D037; [0C EE D0, 05, 05]
+1D038; [0C F4 85, 05, 05]
-1D038; [0C EE D7, 05, 05]
+1D039; [0C F4 8C, 05, 05]
-1D039; [0C EE DE, 05, 05]
+1D03A; [0C F4 93, 05, 05]
-1D03A; [0C EE E5, 05, 05]
+1D03B; [0C F4 9A, 05, 05]
-1D03B; [0C EE EC, 05, 05]
+1D03C; [0C F4 A1, 05, 05]
-1D03C; [0C EE F3, 05, 05]
+1D03D; [0C F4 A8, 05, 05]
-1D03D; [0C EE FA, 05, 05]
+1D03E; [0C F4 AF, 05, 05]
-1D03E; [0C EF 03, 05, 05]
+1D03F; [0C F4 B6, 05, 05]
-1D03F; [0C EF 0A, 05, 05]
+1D040; [0C F4 BD, 05, 05]
-1D040; [0C EF 11, 05, 05]
+1D041; [0C F4 C4, 05, 05]
-1D041; [0C EF 18, 05, 05]
+1D042; [0C F4 CB, 05, 05]
-1D042; [0C EF 1F, 05, 05]
+1D043; [0C F4 D2, 05, 05]
-1D043; [0C EF 26, 05, 05]
+1D044; [0C F4 D9, 05, 05]
-1D044; [0C EF 2D, 05, 05]
+1D045; [0C F4 E0, 05, 05]
-1D045; [0C EF 34, 05, 05]
+1D046; [0C F4 E7, 05, 05]
-1D046; [0C EF 3B, 05, 05]
+1D047; [0C F4 EE, 05, 05]
-1D047; [0C EF 42, 05, 05]
+1D048; [0C F4 F5, 05, 05]
-1D048; [0C EF 49, 05, 05]
+1D049; [0C F4 FC, 05, 05]
-1D049; [0C EF 50, 05, 05]
+1D04A; [0C F5 05, 05, 05]
-1D04A; [0C EF 57, 05, 05]
+1D04B; [0C F5 0C, 05, 05]
-1D04B; [0C EF 5E, 05, 05]
+1D04C; [0C F5 13, 05, 05]
-1D04C; [0C EF 65, 05, 05]
+1D04D; [0C F5 1A, 05, 05]
-1D04D; [0C EF 6C, 05, 05]
+1D04E; [0C F5 21, 05, 05]
-1D04E; [0C EF 73, 05, 05]
+1D04F; [0C F5 28, 05, 05]
-1D04F; [0C EF 7A, 05, 05]
+1D050; [0C F5 2F, 05, 05]
-1D050; [0C EF 81, 05, 05]
+1D051; [0C F5 36, 05, 05]
-1D051; [0C EF 88, 05, 05]
+1D052; [0C F5 3D, 05, 05]
-1D052; [0C EF 8F, 05, 05]
+1D053; [0C F5 44, 05, 05]
-1D053; [0C EF 96, 05, 05]
+1D054; [0C F5 4B, 05, 05]
-1D054; [0C EF 9D, 05, 05]
+1D055; [0C F5 52, 05, 05]
-1D055; [0C EF A4, 05, 05]
+1D056; [0C F5 59, 05, 05]
-1D056; [0C EF AB, 05, 05]
+1D057; [0C F5 60, 05, 05]
-1D057; [0C EF B2, 05, 05]
+1D058; [0C F5 67, 05, 05]
-1D058; [0C EF B9, 05, 05]
+1D059; [0C F5 6E, 05, 05]
-1D059; [0C EF C0, 05, 05]
+1D05A; [0C F5 75, 05, 05]
-1D05A; [0C EF C7, 05, 05]
+1D05B; [0C F5 7C, 05, 05]
-1D05B; [0C EF CE, 05, 05]
+1D05C; [0C F5 83, 05, 05]
-1D05C; [0C EF D5, 05, 05]
+1D05D; [0C F5 8A, 05, 05]
-1D05D; [0C EF DC, 05, 05]
+1D05E; [0C F5 91, 05, 05]
-1D05E; [0C EF E3, 05, 05]
+1D05F; [0C F5 98, 05, 05]
-1D05F; [0C EF EA, 05, 05]
+1D060; [0C F5 9F, 05, 05]
-1D060; [0C EF F1, 05, 05]
+1D061; [0C F5 A6, 05, 05]
-1D061; [0C EF F8, 05, 05]
+1D062; [0C F5 AD, 05, 05]
-1D062; [0C EF FF, 05, 05]
+1D063; [0C F5 B4, 05, 05]
-1D063; [0C F0 08, 05, 05]
+1D064; [0C F5 BB, 05, 05]
-1D064; [0C F0 0F, 05, 05]
+1D065; [0C F5 C2, 05, 05]
-1D065; [0C F0 16, 05, 05]
+1D066; [0C F5 C9, 05, 05]
-1D066; [0C F0 1D, 05, 05]
+1D067; [0C F5 D0, 05, 05]
-1D067; [0C F0 24, 05, 05]
+1D068; [0C F5 D7, 05, 05]
-1D068; [0C F0 2B, 05, 05]
+1D069; [0C F5 DE, 05, 05]
-1D069; [0C F0 32, 05, 05]
+1D06A; [0C F5 E5, 05, 05]
-1D06A; [0C F0 39, 05, 05]
+1D06B; [0C F5 EC, 05, 05]
-1D06B; [0C F0 40, 05, 05]
+1D06C; [0C F5 F3, 05, 05]
-1D06C; [0C F0 47, 05, 05]
+1D06D; [0C F5 FA, 05, 05]
-1D06D; [0C F0 4E, 05, 05]
+1D06E; [0C F6 03, 05, 05]
-1D06E; [0C F0 55, 05, 05]
+1D06F; [0C F6 0A, 05, 05]
-1D06F; [0C F0 5C, 05, 05]
+1D070; [0C F6 11, 05, 05]
-1D070; [0C F0 63, 05, 05]
+1D071; [0C F6 18, 05, 05]
-1D071; [0C F0 6A, 05, 05]
+1D072; [0C F6 1F, 05, 05]
-1D072; [0C F0 71, 05, 05]
+1D073; [0C F6 26, 05, 05]
-1D073; [0C F0 78, 05, 05]
+1D074; [0C F6 2D, 05, 05]
-1D074; [0C F0 7F, 05, 05]
+1D075; [0C F6 34, 05, 05]
-1D075; [0C F0 86, 05, 05]
+1D076; [0C F6 3B, 05, 05]
-1D076; [0C F0 8D, 05, 05]
+1D077; [0C F6 42, 05, 05]
-1D077; [0C F0 94, 05, 05]
+1D078; [0C F6 49, 05, 05]
-1D078; [0C F0 9B, 05, 05]
+1D079; [0C F6 50, 05, 05]
-1D079; [0C F0 A2, 05, 05]
+1D07A; [0C F6 57, 05, 05]
-1D07A; [0C F0 A9, 05, 05]
+1D07B; [0C F6 5E, 05, 05]
-1D07B; [0C F0 B0, 05, 05]
+1D07C; [0C F6 65, 05, 05]
-1D07C; [0C F0 B7, 05, 05]
+1D07D; [0C F6 6C, 05, 05]
-1D07D; [0C F0 BE, 05, 05]
+1D07E; [0C F6 73, 05, 05]
-1D07E; [0C F0 C5, 05, 05]
+1D07F; [0C F6 7A, 05, 05]
-1D07F; [0C F0 CC, 05, 05]
+1D080; [0C F6 81, 05, 05]
-1D080; [0C F0 D3, 05, 05]
+1D081; [0C F6 88, 05, 05]
-1D081; [0C F0 DA, 05, 05]
+1D082; [0C F6 8F, 05, 05]
-1D082; [0C F0 E1, 05, 05]
+1D083; [0C F6 96, 05, 05]
-1D083; [0C F0 E8, 05, 05]
+1D084; [0C F6 9D, 05, 05]
-1D084; [0C F0 EF, 05, 05]
+1D085; [0C F6 A4, 05, 05]
-1D085; [0C F0 F6, 05, 05]
+1D086; [0C F6 AB, 05, 05]
-1D086; [0C F0 FD, 05, 05]
+1D087; [0C F6 B2, 05, 05]
-1D087; [0C F1 06, 05, 05]
+1D088; [0C F6 B9, 05, 05]
-1D088; [0C F1 0D, 05, 05]
+1D089; [0C F6 C0, 05, 05]
-1D089; [0C F1 14, 05, 05]
+1D08A; [0C F6 C7, 05, 05]
-1D08A; [0C F1 1B, 05, 05]
+1D08B; [0C F6 CE, 05, 05]
-1D08B; [0C F1 22, 05, 05]
+1D08C; [0C F6 D5, 05, 05]
-1D08C; [0C F1 29, 05, 05]
+1D08D; [0C F6 DC, 05, 05]
-1D08D; [0C F1 30, 05, 05]
+1D08E; [0C F6 E3, 05, 05]
-1D08E; [0C F1 37, 05, 05]
+1D08F; [0C F6 EA, 05, 05]
-1D08F; [0C F1 3E, 05, 05]
+1D090; [0C F6 F1, 05, 05]
-1D090; [0C F1 45, 05, 05]
+1D091; [0C F6 F8, 05, 05]
-1D091; [0C F1 4C, 05, 05]
+1D092; [0C F6 FF, 05, 05]
-1D092; [0C F1 53, 05, 05]
+1D093; [0C F7 08, 05, 05]
-1D093; [0C F1 5A, 05, 05]
+1D094; [0C F7 0F, 05, 05]
-1D094; [0C F1 61, 05, 05]
+1D095; [0C F7 16, 05, 05]
-1D095; [0C F1 68, 05, 05]
+1D096; [0C F7 1D, 05, 05]
-1D096; [0C F1 6F, 05, 05]
+1D097; [0C F7 24, 05, 05]
-1D097; [0C F1 76, 05, 05]
+1D098; [0C F7 2B, 05, 05]
-1D098; [0C F1 7D, 05, 05]
+1D099; [0C F7 32, 05, 05]
-1D099; [0C F1 84, 05, 05]
+1D09A; [0C F7 39, 05, 05]
-1D09A; [0C F1 8B, 05, 05]
+1D09B; [0C F7 40, 05, 05]
-1D09B; [0C F1 92, 05, 05]
+1D09C; [0C F7 47, 05, 05]
-1D09C; [0C F1 99, 05, 05]
+1D09D; [0C F7 4E, 05, 05]
-1D09D; [0C F1 A0, 05, 05]
+1D09E; [0C F7 55, 05, 05]
-1D09E; [0C F1 A7, 05, 05]
+1D09F; [0C F7 5C, 05, 05]
-1D09F; [0C F1 AE, 05, 05]
+1D0A0; [0C F7 63, 05, 05]
-1D0A0; [0C F1 B5, 05, 05]
+1D0A1; [0C F7 6A, 05, 05]
-1D0A1; [0C F1 BC, 05, 05]
+1D0A2; [0C F7 71, 05, 05]
-1D0A2; [0C F1 C3, 05, 05]
+1D0A3; [0C F7 78, 05, 05]
-1D0A3; [0C F1 CA, 05, 05]
+1D0A4; [0C F7 7F, 05, 05]
-1D0A4; [0C F1 D1, 05, 05]
+1D0A5; [0C F7 86, 05, 05]
-1D0A5; [0C F1 D8, 05, 05]
+1D0A6; [0C F7 8D, 05, 05]
-1D0A6; [0C F1 DF, 05, 05]
+1D0A7; [0C F7 94, 05, 05]
-1D0A7; [0C F1 E6, 05, 05]
+1D0A8; [0C F7 9B, 05, 05]
-1D0A8; [0C F1 ED, 05, 05]
+1D0A9; [0C F7 A2, 05, 05]
-1D0A9; [0C F1 F4, 05, 05]
+1D0AA; [0C F7 A9, 05, 05]
-1D0AA; [0C F1 FB, 05, 05]
+1D0AB; [0C F7 B0, 05, 05]
-1D0AB; [0C F2 04, 05, 05]
+1D0AC; [0C F7 B7, 05, 05]
-1D0AC; [0C F2 0B, 05, 05]
+1D0AD; [0C F7 BE, 05, 05]
-1D0AD; [0C F2 12, 05, 05]
+1D0AE; [0C F7 C5, 05, 05]
-1D0AE; [0C F2 19, 05, 05]
+1D0AF; [0C F7 CC, 05, 05]
-1D0AF; [0C F2 20, 05, 05]
+1D0B0; [0C F7 D3, 05, 05]
-1D0B0; [0C F2 27, 05, 05]
+1D0B1; [0C F7 DA, 05, 05]
-1D0B1; [0C F2 2E, 05, 05]
+1D0B2; [0C F7 E1, 05, 05]
-1D0B2; [0C F2 35, 05, 05]
+1D0B3; [0C F7 E8, 05, 05]
-1D0B3; [0C F2 3C, 05, 05]
+1D0B4; [0C F7 EF, 05, 05]
-1D0B4; [0C F2 43, 05, 05]
+1D0B5; [0C F7 F6, 05, 05]
-1D0B5; [0C F2 4A, 05, 05]
+1D0B6; [0C F7 FD, 05, 05]
-1D0B6; [0C F2 51, 05, 05]
+1D0B7; [0C F8 06, 05, 05]
-1D0B7; [0C F2 58, 05, 05]
+1D0B8; [0C F8 0D, 05, 05]
-1D0B8; [0C F2 5F, 05, 05]
+1D0B9; [0C F8 14, 05, 05]
-1D0B9; [0C F2 66, 05, 05]
+1D0BA; [0C F8 1B, 05, 05]
-1D0BA; [0C F2 6D, 05, 05]
+1D0BB; [0C F8 22, 05, 05]
-1D0BB; [0C F2 74, 05, 05]
+1D0BC; [0C F8 29, 05, 05]
-1D0BC; [0C F2 7B, 05, 05]
+1D0BD; [0C F8 30, 05, 05]
-1D0BD; [0C F2 82, 05, 05]
+1D0BE; [0C F8 37, 05, 05]
-1D0BE; [0C F2 89, 05, 05]
+1D0BF; [0C F8 3E, 05, 05]
-1D0BF; [0C F2 90, 05, 05]
+1D0C0; [0C F8 45, 05, 05]
-1D0C0; [0C F2 97, 05, 05]
+1D0C1; [0C F8 4C, 05, 05]
-1D0C1; [0C F2 9E, 05, 05]
+1D0C2; [0C F8 53, 05, 05]
-1D0C2; [0C F2 A5, 05, 05]
+1D0C3; [0C F8 5A, 05, 05]
-1D0C3; [0C F2 AC, 05, 05]
+1D0C4; [0C F8 61, 05, 05]
-1D0C4; [0C F2 B3, 05, 05]
+1D0C5; [0C F8 68, 05, 05]
-1D0C5; [0C F2 BA, 05, 05]
+1D0C6; [0C F8 6F, 05, 05]
-1D0C6; [0C F2 C1, 05, 05]
+1D0C7; [0C F8 76, 05, 05]
-1D0C7; [0C F2 C8, 05, 05]
+1D0C8; [0C F8 7D, 05, 05]
-1D0C8; [0C F2 CF, 05, 05]
+1D0C9; [0C F8 84, 05, 05]
-1D0C9; [0C F2 D6, 05, 05]
+1D0CA; [0C F8 8B, 05, 05]
-1D0CA; [0C F2 DD, 05, 05]
+1D0CB; [0C F8 92, 05, 05]
-1D0CB; [0C F2 E4, 05, 05]
+1D0CC; [0C F8 99, 05, 05]
-1D0CC; [0C F2 EB, 05, 05]
+1D0CD; [0C F8 A0, 05, 05]
-1D0CD; [0C F2 F2, 05, 05]
+1D0CE; [0C F8 A7, 05, 05]
-1D0CE; [0C F2 F9, 05, 05]
+1D0CF; [0C F8 AE, 05, 05]
-1D0CF; [0C F3 02, 05, 05]
+1D0D0; [0C F8 B5, 05, 05]
-1D0D0; [0C F3 09, 05, 05]
+1D0D1; [0C F8 BC, 05, 05]
-1D0D1; [0C F3 10, 05, 05]
+1D0D2; [0C F8 C3, 05, 05]
-1D0D2; [0C F3 17, 05, 05]
+1D0D3; [0C F8 CA, 05, 05]
-1D0D3; [0C F3 1E, 05, 05]
+1D0D4; [0C F8 D1, 05, 05]
-1D0D4; [0C F3 25, 05, 05]
+1D0D5; [0C F8 D8, 05, 05]
-1D0D5; [0C F3 2C, 05, 05]
+1D0D6; [0C F8 DF, 05, 05]
-1D0D6; [0C F3 33, 05, 05]
+1D0D7; [0C F8 E6, 05, 05]
-1D0D7; [0C F3 3A, 05, 05]
+1D0D8; [0C F8 ED, 05, 05]
-1D0D8; [0C F3 41, 05, 05]
+1D0D9; [0C F8 F4, 05, 05]
-1D0D9; [0C F3 48, 05, 05]
+1D0DA; [0C F8 FB, 05, 05]
-1D0DA; [0C F3 4F, 05, 05]
+1D0DB; [0C F9 04, 05, 05]
-1D0DB; [0C F3 56, 05, 05]
+1D0DC; [0C F9 0B, 05, 05]
-1D0DC; [0C F3 5D, 05, 05]
+1D0DD; [0C F9 12, 05, 05]
-1D0DD; [0C F3 64, 05, 05]
+1D0DE; [0C F9 19, 05, 05]
-1D0DE; [0C F3 6B, 05, 05]
+1D0DF; [0C F9 20, 05, 05]
-1D0DF; [0C F3 72, 05, 05]
+1D0E0; [0C F9 27, 05, 05]
-1D0E0; [0C F3 79, 05, 05]
+1D0E1; [0C F9 2E, 05, 05]
-1D0E1; [0C F3 80, 05, 05]
+1D0E2; [0C F9 35, 05, 05]
-1D0E2; [0C F3 87, 05, 05]
+1D0E3; [0C F9 3C, 05, 05]
-1D0E3; [0C F3 8E, 05, 05]
+1D0E4; [0C F9 43, 05, 05]
-1D0E4; [0C F3 95, 05, 05]
+1D0E5; [0C F9 4A, 05, 05]
-1D0E5; [0C F3 9C, 05, 05]
+1D0E6; [0C F9 51, 05, 05]
-1D0E6; [0C F3 A3, 05, 05]
+1D0E7; [0C F9 58, 05, 05]
-1D0E7; [0C F3 AA, 05, 05]
+1D0E8; [0C F9 5F, 05, 05]
-1D0E8; [0C F3 B1, 05, 05]
+1D0E9; [0C F9 66, 05, 05]
-1D0E9; [0C F3 B8, 05, 05]
+1D0EA; [0C F9 6D, 05, 05]
-1D0EA; [0C F3 BF, 05, 05]
+1D0EB; [0C F9 74, 05, 05]
-1D0EB; [0C F3 C6, 05, 05]
+1D0EC; [0C F9 7B, 05, 05]
-1D0EC; [0C F3 CD, 05, 05]
+1D0ED; [0C F9 82, 05, 05]
-1D0ED; [0C F3 D4, 05, 05]
+1D0EE; [0C F9 89, 05, 05]
-1D0EE; [0C F3 DB, 05, 05]
+1D0EF; [0C F9 90, 05, 05]
-1D0EF; [0C F3 E2, 05, 05]
+1D0F0; [0C F9 97, 05, 05]
-1D0F0; [0C F3 E9, 05, 05]
+1D0F1; [0C F9 9E, 05, 05]
-1D0F1; [0C F3 F0, 05, 05]
+1D0F2; [0C F9 A5, 05, 05]
-1D0F2; [0C F3 F7, 05, 05]
+1D0F3; [0C F9 AC, 05, 05]
-1D0F3; [0C F3 FE, 05, 05]
+1D0F4; [0C F9 B3, 05, 05]
-1D0F4; [0C F4 07, 05, 05]
+1D0F5; [0C F9 BA, 05, 05]
-1D0F5; [0C F4 0E, 05, 05]
+1D100; [0C F9 C1, 05, 05]
-1D100; [0C F4 15, 05, 05]
+1D101; [0C F9 C8, 05, 05]
-1D101; [0C F4 1C, 05, 05]
+1D102; [0C F9 CF, 05, 05]
-1D102; [0C F4 23, 05, 05]
+1D103; [0C F9 D6, 05, 05]
-1D103; [0C F4 2A, 05, 05]
+1D104; [0C F9 DD, 05, 05]
-1D104; [0C F4 31, 05, 05]
+1D105; [0C F9 E4, 05, 05]
-1D105; [0C F4 38, 05, 05]
+1D106; [0C F9 EB, 05, 05]
-1D106; [0C F4 3F, 05, 05]
+1D107; [0C F9 F2, 05, 05]
-1D107; [0C F4 46, 05, 05]
+1D108; [0C F9 F9, 05, 05]
-1D108; [0C F4 4D, 05, 05]
+1D109; [0C FA 02, 05, 05]
-1D109; [0C F4 54, 05, 05]
+1D10A; [0C FA 09, 05, 05]
-1D10A; [0C F4 5B, 05, 05]
+1D10B; [0C FA 10, 05, 05]
-1D10B; [0C F4 62, 05, 05]
+1D10C; [0C FA 17, 05, 05]
-1D10C; [0C F4 69, 05, 05]
+1D10D; [0C FA 1E, 05, 05]
-1D10D; [0C F4 70, 05, 05]
+1D10E; [0C FA 25, 05, 05]
-1D10E; [0C F4 77, 05, 05]
+1D10F; [0C FA 2C, 05, 05]
-1D10F; [0C F4 7E, 05, 05]
+1D110; [0C FA 33, 05, 05]
-1D110; [0C F4 85, 05, 05]
+1D111; [0C FA 3A, 05, 05]
-1D111; [0C F4 8C, 05, 05]
+1D112; [0C FA 41, 05, 05]
-1D112; [0C F4 93, 05, 05]
+1D113; [0C FA 48, 05, 05]
-1D113; [0C F4 9A, 05, 05]
+1D114; [0C FA 4F, 05, 05]
-1D114; [0C F4 A1, 05, 05]
+1D115; [0C FA 56, 05, 05]
-1D115; [0C F4 A8, 05, 05]
+1D116; [0C FA 5D, 05, 05]
-1D116; [0C F4 AF, 05, 05]
+1D117; [0C FA 64, 05, 05]
-1D117; [0C F4 B6, 05, 05]
+1D118; [0C FA 6B, 05, 05]
-1D118; [0C F4 BD, 05, 05]
+1D119; [0C FA 72, 05, 05]
-1D119; [0C F4 C4, 05, 05]
+1D11A; [0C FA 79, 05, 05]
-1D11A; [0C F4 CB, 05, 05]
+1D11B; [0C FA 80, 05, 05]
-1D11B; [0C F4 D2, 05, 05]
+1D11C; [0C FA 87, 05, 05]
-1D11C; [0C F4 D9, 05, 05]
+1D11D; [0C FA 8E, 05, 05]
-1D11D; [0C F4 E0, 05, 05]
+1D11E; [0C FA 95, 05, 05]
-1D11E; [0C F4 E7, 05, 05]
+1D11F; [0C FA 9C, 05, 05]
-1D11F; [0C F4 EE, 05, 05]
+1D120; [0C FA A3, 05, 05]
-1D120; [0C F4 F5, 05, 05]
+1D121; [0C FA AA, 05, 05]
-1D121; [0C F4 FC, 05, 05]
+1D122; [0C FA B1, 05, 05]
-1D122; [0C F5 05, 05, 05]
+1D123; [0C FA B8, 05, 05]
-1D123; [0C F5 0C, 05, 05]
+1D124; [0C FA BF, 05, 05]
-1D124; [0C F5 13, 05, 05]
+1D125; [0C FA C6, 05, 05]
-1D125; [0C F5 1A, 05, 05]
+1D126; [0C FA CD, 05, 05]
-1D126; [0C F5 21, 05, 05]
+266D; [0C FA D4, 05, 05]
-266D; [0C F5 28, 05, 05]
+266E; [0C FA DB, 05, 05]
-266E; [0C F5 2F, 05, 05]
+266F; [0C FA E2, 05, 05]
-266F; [0C F5 36, 05, 05]
+1D12A; [0C FA E9, 05, 05]
-1D12A; [0C F5 3D, 05, 05]
+1D12B; [0C FA F0, 05, 05]
-1D12B; [0C F5 44, 05, 05]
+1D12C; [0C FA F7, 05, 05]
-1D12C; [0C F5 4B, 05, 05]
+1D12D; [0C FA FE, 05, 05]
-1D12D; [0C F5 52, 05, 05]
+1D12E; [0C FB 07, 05, 05]
-1D12E; [0C F5 59, 05, 05]
+1D12F; [0C FB 0E, 05, 05]
-1D12F; [0C F5 60, 05, 05]
+1D130; [0C FB 15, 05, 05]
-1D130; [0C F5 67, 05, 05]
+1D131; [0C FB 1C, 05, 05]
-1D131; [0C F5 6E, 05, 05]
+1D132; [0C FB 23, 05, 05]
-1D132; [0C F5 75, 05, 05]
+1D133; [0C FB 2A, 05, 05]
-1D133; [0C F5 7C, 05, 05]
+1D134; [0C FB 31, 05, 05]
-1D134; [0C F5 83, 05, 05]
+1D135; [0C FB 38, 05, 05]
-1D135; [0C F5 8A, 05, 05]
+1D136; [0C FB 3F, 05, 05]
-1D136; [0C F5 91, 05, 05]
+1D137; [0C FB 46, 05, 05]
-1D137; [0C F5 98, 05, 05]
+1D138; [0C FB 4D, 05, 05]
-1D138; [0C F5 9F, 05, 05]
+1D139; [0C FB 54, 05, 05]
-1D139; [0C F5 A6, 05, 05]
+1D129; [0C FB 5B, 05, 05]
-1D129; [0C F5 AD, 05, 05]
+1D13A; [0C FB 62, 05, 05]
-1D13A; [0C F5 B4, 05, 05]
+1D13B; [0C FB 69, 05, 05]
-1D13B; [0C F5 BB, 05, 05]
+1D13C; [0C FB 70, 05, 05]
-1D13C; [0C F5 C2, 05, 05]
+1D13D; [0C FB 77, 05, 05]
-1D13D; [0C F5 C9, 05, 05]
+1D13E; [0C FB 7E, 05, 05]
-1D13E; [0C F5 D0, 05, 05]
+1D13F; [0C FB 85, 05, 05]
-1D13F; [0C F5 D7, 05, 05]
+1D140; [0C FB 8C, 05, 05]
-1D140; [0C F5 DE, 05, 05]
+1D141; [0C FB 93, 05, 05]
-1D141; [0C F5 E5, 05, 05]
+1D142; [0C FB 9A, 05, 05]
-1D142; [0C F5 EC, 05, 05]
+1D143; [0C FB A1, 05, 05]
-1D143; [0C F5 F3, 05, 05]
+1D144; [0C FB A8, 05, 05]
-1D144; [0C F5 FA, 05, 05]
+1D145; [0C FB AF, 05, 05]
-1D145; [0C F6 03, 05, 05]
+1D146; [0C FB B6, 05, 05]
-1D146; [0C F6 0A, 05, 05]
+1D147; [0C FB BD, 05, 05]
-1D147; [0C F6 11, 05, 05]
+1D148; [0C FB C4, 05, 05]
-1D148; [0C F6 18, 05, 05]
+1D149; [0C FB CB, 05, 05]
-1D149; [0C F6 1F, 05, 05]
+1D14A; [0C FB D2, 05, 05]
-1D14A; [0C F6 26, 05, 05]
+1D14B; [0C FB D9, 05, 05]
-1D14B; [0C F6 2D, 05, 05]
+1D14C; [0C FB E0, 05, 05]
-1D14C; [0C F6 34, 05, 05]
+1D14D; [0C FB E7, 05, 05]
-1D14D; [0C F6 3B, 05, 05]
+1D14E; [0C FB EE, 05, 05]
-1D14E; [0C F6 42, 05, 05]
+1D14F; [0C FB F5, 05, 05]
-1D14F; [0C F6 49, 05, 05]
+1D150; [0C FB FC, 05, 05]
-1D150; [0C F6 50, 05, 05]
+1D151; [0C FC 05, 05, 05]
-1D151; [0C F6 57, 05, 05]
+1D152; [0C FC 0C, 05, 05]
-1D152; [0C F6 5E, 05, 05]
+1D153; [0C FC 13, 05, 05]
-1D153; [0C F6 65, 05, 05]
+1D154; [0C FC 1A, 05, 05]
-1D154; [0C F6 6C, 05, 05]
+1D155; [0C FC 21, 05, 05]
-1D155; [0C F6 73, 05, 05]
+1D156; [0C FC 28, 05, 05]
-1D156; [0C F6 7A, 05, 05]
+1D157; [0C FC 2F, 05, 05]
+1D15E; [0C FC 2F, 05, 05]
-1D157; [0C F6 81, 05, 05]
-1D15E; [0C F6 81, 05, 05]
+1D158; [0C FC 36, 05, 05]
+1D15F; [0C FC 36, 05, 05]
+1D160; [0C FC 36, 05, 05]
+1D161; [0C FC 36, 05, 05]
+1D162; [0C FC 36, 05, 05]
+1D163; [0C FC 36, 05, 05]
+1D164; [0C FC 36, 05, 05]
-1D158; [0C F6 88, 05, 05]
-1D15F; [0C F6 88, 05, 05]
-1D160; [0C F6 88, 05, 05]
-1D161; [0C F6 88, 05, 05]
-1D162; [0C F6 88, 05, 05]
-1D163; [0C F6 88, 05, 05]
-1D164; [0C F6 88, 05, 05]
+1D159; [0C FC 3D, 05, 05]
-1D159; [0C F6 8F, 05, 05]
+1D15A; [0C FC 44, 05, 05]
-1D15A; [0C F6 96, 05, 05]
+1D15B; [0C FC 4B, 05, 05]
-1D15B; [0C F6 9D, 05, 05]
+1D15C; [0C FC 52, 05, 05]
-1D15C; [0C F6 A4, 05, 05]
+1D15D; [0C FC 59, 05, 05]
-1D15D; [0C F6 AB, 05, 05]
+1D16A; [0C FC 60, 05, 05]
-1D16A; [0C F6 B2, 05, 05]
+1D16B; [0C FC 67, 05, 05]
-1D16B; [0C F6 B9, 05, 05]
+1D16C; [0C FC 6E, 05, 05]
-1D16C; [0C F6 C0, 05, 05]
+1D183; [0C FC 75, 05, 05]
-1D183; [0C F6 C7, 05, 05]
+1D184; [0C FC 7C, 05, 05]
-1D184; [0C F6 CE, 05, 05]
+1D18C; [0C FC 83, 05, 05]
-1D18C; [0C F6 D5, 05, 05]
+1D18D; [0C FC 8A, 05, 05]
-1D18D; [0C F6 DC, 05, 05]
+1D18E; [0C FC 91, 05, 05]
-1D18E; [0C F6 E3, 05, 05]
+1D18F; [0C FC 98, 05, 05]
-1D18F; [0C F6 EA, 05, 05]
+1D190; [0C FC 9F, 05, 05]
-1D190; [0C F6 F1, 05, 05]
+1D191; [0C FC A6, 05, 05]
-1D191; [0C F6 F8, 05, 05]
+1D192; [0C FC AD, 05, 05]
-1D192; [0C F6 FF, 05, 05]
+1D193; [0C FC B4, 05, 05]
-1D193; [0C F7 08, 05, 05]
+1D194; [0C FC BB, 05, 05]
-1D194; [0C F7 0F, 05, 05]
+1D195; [0C FC C2, 05, 05]
-1D195; [0C F7 16, 05, 05]
+1D196; [0C FC C9, 05, 05]
-1D196; [0C F7 1D, 05, 05]
+1D197; [0C FC D0, 05, 05]
-1D197; [0C F7 24, 05, 05]
+1D198; [0C FC D7, 05, 05]
-1D198; [0C F7 2B, 05, 05]
+1D199; [0C FC DE, 05, 05]
-1D199; [0C F7 32, 05, 05]
+1D19A; [0C FC E5, 05, 05]
-1D19A; [0C F7 39, 05, 05]
+1D19B; [0C FC EC, 05, 05]
-1D19B; [0C F7 40, 05, 05]
+1D19C; [0C FC F3, 05, 05]
-1D19C; [0C F7 47, 05, 05]
+1D19D; [0C FC FA, 05, 05]
-1D19D; [0C F7 4E, 05, 05]
+1D19E; [0C FD 03, 05, 05]
-1D19E; [0C F7 55, 05, 05]
+1D19F; [0C FD 0A, 05, 05]
-1D19F; [0C F7 5C, 05, 05]
+1D1A0; [0C FD 11, 05, 05]
-1D1A0; [0C F7 63, 05, 05]
+1D1A1; [0C FD 18, 05, 05]
-1D1A1; [0C F7 6A, 05, 05]
+1D1A2; [0C FD 1F, 05, 05]
-1D1A2; [0C F7 71, 05, 05]
+1D1A3; [0C FD 26, 05, 05]
-1D1A3; [0C F7 78, 05, 05]
+1D1A4; [0C FD 2D, 05, 05]
-1D1A4; [0C F7 7F, 05, 05]
+1D1A5; [0C FD 34, 05, 05]
-1D1A5; [0C F7 86, 05, 05]
+1D1A6; [0C FD 3B, 05, 05]
-1D1A6; [0C F7 8D, 05, 05]
+1D1A7; [0C FD 42, 05, 05]
-1D1A7; [0C F7 94, 05, 05]
+1D1A8; [0C FD 49, 05, 05]
-1D1A8; [0C F7 9B, 05, 05]
+1D1A9; [0C FD 50, 05, 05]
-1D1A9; [0C F7 A2, 05, 05]
+1D1AE; [0C FD 57, 05, 05]
-1D1AE; [0C F7 A9, 05, 05]
+1D1AF; [0C FD 5E, 05, 05]
-1D1AF; [0C F7 B0, 05, 05]
+1D1B0; [0C FD 65, 05, 05]
-1D1B0; [0C F7 B7, 05, 05]
+1D1B1; [0C FD 6C, 05, 05]
-1D1B1; [0C F7 BE, 05, 05]
+1D1B2; [0C FD 73, 05, 05]
-1D1B2; [0C F7 C5, 05, 05]
+1D1B3; [0C FD 7A, 05, 05]
-1D1B3; [0C F7 CC, 05, 05]
+1D1B4; [0C FD 81, 05, 05]
-1D1B4; [0C F7 D3, 05, 05]
+1D1B5; [0C FD 88, 05, 05]
-1D1B5; [0C F7 DA, 05, 05]
+1D1B6; [0C FD 8F, 05, 05]
-1D1B6; [0C F7 E1, 05, 05]
+1D1B7; [0C FD 96, 05, 05]
-1D1B7; [0C F7 E8, 05, 05]
+1D1B8; [0C FD 9D, 05, 05]
-1D1B8; [0C F7 EF, 05, 05]
+1D1B9; [0C FD A4, 05, 05]
+1D1BB; [0C FD A4, 05, 05]
+1D1BD; [0C FD A4, 05, 05]
+1D1BF; [0C FD A4, 05, 05]
-1D1B9; [0C F7 F6, 05, 05]
-1D1BB; [0C F7 F6, 05, 05]
-1D1BD; [0C F7 F6, 05, 05]
-1D1BF; [0C F7 F6, 05, 05]
+1D1BA; [0C FD AB, 05, 05]
+1D1BC; [0C FD AB, 05, 05]
+1D1BE; [0C FD AB, 05, 05]
+1D1C0; [0C FD AB, 05, 05]
-1D1BA; [0C F7 FD, 05, 05]
-1D1BC; [0C F7 FD, 05, 05]
-1D1BE; [0C F7 FD, 05, 05]
-1D1C0; [0C F7 FD, 05, 05]
+1D1C1; [0C FD B2, 05, 05]
-1D1C1; [0C F8 06, 05, 05]
+1D1C2; [0C FD B9, 05, 05]
-1D1C2; [0C F8 0D, 05, 05]
+1D1C3; [0C FD C0, 05, 05]
-1D1C3; [0C F8 14, 05, 05]
+1D1C4; [0C FD C7, 05, 05]
-1D1C4; [0C F8 1B, 05, 05]
+1D1C5; [0C FD CE, 05, 05]
-1D1C5; [0C F8 22, 05, 05]
+1D1C6; [0C FD D5, 05, 05]
-1D1C6; [0C F8 29, 05, 05]
+1D1C7; [0C FD DC, 05, 05]
-1D1C7; [0C F8 30, 05, 05]
+1D1C8; [0C FD E3, 05, 05]
-1D1C8; [0C F8 37, 05, 05]
+1D1C9; [0C FD EA, 05, 05]
-1D1C9; [0C F8 3E, 05, 05]
+1D1CA; [0C FD F1, 05, 05]
-1D1CA; [0C F8 45, 05, 05]
+1D1CB; [0C FD F8, 05, 05]
-1D1CB; [0C F8 4C, 05, 05]
+1D1CC; [0C FD FF, 05, 05]
-1D1CC; [0C F8 53, 05, 05]
+1D1CD; [0C FE 08, 05, 05]
-1D1CD; [0C F8 5A, 05, 05]
+1D1CE; [0C FE 0F, 05, 05]
-1D1CE; [0C F8 61, 05, 05]
+1D1CF; [0C FE 16, 05, 05]
-1D1CF; [0C F8 68, 05, 05]
+1D1D0; [0C FE 1D, 05, 05]
-1D1D0; [0C F8 6F, 05, 05]
+1D1D1; [0C FE 24, 05, 05]
-1D1D1; [0C F8 76, 05, 05]
+1D1D2; [0C FE 2B, 05, 05]
-1D1D2; [0C F8 7D, 05, 05]
+1D1D3; [0C FE 32, 05, 05]
-1D1D3; [0C F8 84, 05, 05]
+1D1D4; [0C FE 39, 05, 05]
-1D1D4; [0C F8 8B, 05, 05]
+1D1D5; [0C FE 40, 05, 05]
-1D1D5; [0C F8 92, 05, 05]
+1D1D6; [0C FE 47, 05, 05]
-1D1D6; [0C F8 99, 05, 05]
+1D1D7; [0C FE 4E, 05, 05]
-1D1D7; [0C F8 A0, 05, 05]
+1D1D8; [0C FE 55, 05, 05]
-1D1D8; [0C F8 A7, 05, 05]
+1D1D9; [0C FE 5C, 05, 05]
-1D1D9; [0C F8 AE, 05, 05]
+1D1DA; [0C FE 63, 05, 05]
-1D1DA; [0C F8 B5, 05, 05]
+1D1DB; [0C FE 6A, 05, 05]
-1D1DB; [0C F8 BC, 05, 05]
+1D1DC; [0C FE 71, 05, 05]
-1D1DC; [0C F8 C3, 05, 05]
+1D1DD; [0C FE 78, 05, 05]
-1D1DD; [0C F8 CA, 05, 05]
+1D1DE; [0C FE 7F, 05, 05]
-1D1DE; [0C F8 D1, 05, 05]
+1D1DF; [0C FE 86, 05, 05]
-1D1DF; [0C F8 D8, 05, 05]
+1D1E0; [0C FE 8D, 05, 05]
-1D1E0; [0C F8 DF, 05, 05]
+1D1E1; [0C FE 94, 05, 05]
-1D1E1; [0C F8 E6, 05, 05]
+1D1E2; [0C FE 9B, 05, 05]
-1D1E2; [0C F8 ED, 05, 05]
+1D1E3; [0C FE A2, 05, 05]
-1D1E3; [0C F8 F4, 05, 05]
+1D1E4; [0C FE A9, 05, 05]
-1D1E4; [0C F8 FB, 05, 05]
+1D1E5; [0C FE B0, 05, 05]
-1D1E5; [0C F9 04, 05, 05]
+1D1E6; [0C FE B7, 05, 05]
-1D1E6; [0C F9 0B, 05, 05]
+1D1E7; [0C FE BE, 05, 05]
-1D1E7; [0C F9 12, 05, 05]
+1D1E8; [0C FE C5, 05, 05]
-1D1E8; [0C F9 19, 05, 05]
+1D200; [0C FE CC, 05, 05]
-1D200; [0C F9 20, 05, 05]
+1D201; [0C FE D3, 05, 05]
-1D201; [0C F9 27, 05, 05]
+1D202; [0C FE DA, 05, 05]
-1D202; [0C F9 2E, 05, 05]
+1D203; [0C FE E1, 05, 05]
-1D203; [0C F9 35, 05, 05]
+1D204; [0C FE E8, 05, 05]
-1D204; [0C F9 3C, 05, 05]
+1D205; [0C FE EF, 05, 05]
-1D205; [0C F9 43, 05, 05]
+1D206; [0C FE F6, 05, 05]
-1D206; [0C F9 4A, 05, 05]
+1D207; [0C FE FD, 05, 05]
-1D207; [0C F9 51, 05, 05]
+1D208; [0C FF 06, 05, 05]
-1D208; [0C F9 58, 05, 05]
+1D209; [0C FF 0D, 05, 05]
-1D209; [0C F9 5F, 05, 05]
+1D20A; [0C FF 14, 05, 05]
-1D20A; [0C F9 66, 05, 05]
+1D20B; [0C FF 1B, 05, 05]
-1D20B; [0C F9 6D, 05, 05]
+1D20C; [0C FF 22, 05, 05]
-1D20C; [0C F9 74, 05, 05]
+1D20D; [0C FF 29, 05, 05]
-1D20D; [0C F9 7B, 05, 05]
+1D20E; [0C FF 30, 05, 05]
-1D20E; [0C F9 82, 05, 05]
+1D20F; [0C FF 37, 05, 05]
-1D20F; [0C F9 89, 05, 05]
+1D210; [0C FF 3E, 05, 05]
-1D210; [0C F9 90, 05, 05]
+1D211; [0C FF 45, 05, 05]
-1D211; [0C F9 97, 05, 05]
+1D212; [0C FF 4C, 05, 05]
-1D212; [0C F9 9E, 05, 05]
+1D213; [0C FF 53, 05, 05]
-1D213; [0C F9 A5, 05, 05]
+1D214; [0C FF 5A, 05, 05]
-1D214; [0C F9 AC, 05, 05]
+1D215; [0C FF 61, 05, 05]
-1D215; [0C F9 B3, 05, 05]
+1D216; [0C FF 68, 05, 05]
-1D216; [0C F9 BA, 05, 05]
+1D217; [0C FF 6F, 05, 05]
-1D217; [0C F9 C1, 05, 05]
+1D218; [0C FF 76, 05, 05]
-1D218; [0C F9 C8, 05, 05]
+1D219; [0C FF 7D, 05, 05]
-1D219; [0C F9 CF, 05, 05]
+1D21A; [0C FF 84, 05, 05]
-1D21A; [0C F9 D6, 05, 05]
+1D21B; [0C FF 8B, 05, 05]
-1D21B; [0C F9 DD, 05, 05]
+1D21C; [0C FF 92, 05, 05]
-1D21C; [0C F9 E4, 05, 05]
+1D21D; [0C FF 99, 05, 05]
-1D21D; [0C F9 EB, 05, 05]
+1D21E; [0C FF A0, 05, 05]
-1D21E; [0C F9 F2, 05, 05]
+1D21F; [0C FF A7, 05, 05]
-1D21F; [0C F9 F9, 05, 05]
+1D220; [0C FF AE, 05, 05]
-1D220; [0C FA 02, 05, 05]
+1D221; [0C FF B5, 05, 05]
-1D221; [0C FA 09, 05, 05]
+1D222; [0C FF BC, 05, 05]
-1D222; [0C FA 10, 05, 05]
+1D223; [0C FF C3, 05, 05]
-1D223; [0C FA 17, 05, 05]
+1D224; [0C FF CA, 05, 05]
-1D224; [0C FA 1E, 05, 05]
+1D225; [0C FF D1, 05, 05]
-1D225; [0C FA 25, 05, 05]
+1D226; [0C FF D8, 05, 05]
-1D226; [0C FA 2C, 05, 05]
+1D227; [0C FF DF, 05, 05]
-1D227; [0C FA 33, 05, 05]
+1D228; [0C FF E6, 05, 05]
-1D228; [0C FA 3A, 05, 05]
+1D229; [0C FF ED, 05, 05]
-1D229; [0C FA 41, 05, 05]
+1D22A; [0C FF F4, 05, 05]
-1D22A; [0C FA 48, 05, 05]
+1D22B; [0C FF FB, 05, 05]
-1D22B; [0C FA 4F, 05, 05]
+1D22C; [0D 02 04, 05, 05]
-1D22C; [0C FA 56, 05, 05]
+1D22D; [0D 02 0B, 05, 05]
-1D22D; [0C FA 5D, 05, 05]
+1D22E; [0D 02 12, 05, 05]
-1D22E; [0C FA 64, 05, 05]
+1D22F; [0D 02 19, 05, 05]
-1D22F; [0C FA 6B, 05, 05]
+1D230; [0D 02 20, 05, 05]
-1D230; [0C FA 72, 05, 05]
+1D231; [0D 02 27, 05, 05]
-1D231; [0C FA 79, 05, 05]
+1D232; [0D 02 2E, 05, 05]
-1D232; [0C FA 80, 05, 05]
+1D233; [0D 02 35, 05, 05]
-1D233; [0C FA 87, 05, 05]
+1D234; [0D 02 3C, 05, 05]
-1D234; [0C FA 8E, 05, 05]
+1D235; [0D 02 43, 05, 05]
-1D235; [0C FA 95, 05, 05]
+1D236; [0D 02 4A, 05, 05]
-1D236; [0C FA 9C, 05, 05]
+1D237; [0D 02 51, 05, 05]
-1D237; [0C FA A3, 05, 05]
+1D238; [0D 02 58, 05, 05]
-1D238; [0C FA AA, 05, 05]
+1D239; [0D 02 5F, 05, 05]
-1D239; [0C FA B1, 05, 05]
+1D23A; [0D 02 66, 05, 05]
-1D23A; [0C FA B8, 05, 05]
+1D23B; [0D 02 6D, 05, 05]
-1D23B; [0C FA BF, 05, 05]
+1D23C; [0D 02 74, 05, 05]
-1D23C; [0C FA C6, 05, 05]
+1D23D; [0D 02 7B, 05, 05]
-1D23D; [0C FA CD, 05, 05]
+1D23E; [0D 02 82, 05, 05]
-1D23E; [0C FA D4, 05, 05]
+1D23F; [0D 02 89, 05, 05]
-1D23F; [0C FA DB, 05, 05]
+1D240; [0D 02 90, 05, 05]
-1D240; [0C FA E2, 05, 05]
+1D241; [0D 02 97, 05, 05]
-1D241; [0C FA E9, 05, 05]
+1D245; [0D 02 9E, 05, 05]
-1D245; [0C FA F0, 05, 05]
+1BC9C; [0D 02 A5, 05, 05]
-1BC9C; [0C FA F7, 05, 05]
+1ECAC; [0D 02 AC, 05, 05]
-1ECAC; [0C FA FE, 05, 05]
+1ED2E; [0D 02 B3, 05, 05]
-1ED2E; [0C FB 07, 05, 05]
+1F000; [0D 02 BA, 05, 05]
-1F000; [0C FB 0E, 05, 05]
+1F001; [0D 02 C1, 05, 05]
-1F001; [0C FB 15, 05, 05]
+1F002; [0D 02 C8, 05, 05]
-1F002; [0C FB 1C, 05, 05]
+1F003; [0D 02 CF, 05, 05]
-1F003; [0C FB 23, 05, 05]
+1F004; [0D 02 D6, 05, 05]
-1F004; [0C FB 2A, 05, 05]
+1F005; [0D 02 DD, 05, 05]
-1F005; [0C FB 31, 05, 05]
+1F006; [0D 02 E4, 05, 05]
-1F006; [0C FB 38, 05, 05]
+1F007; [0D 02 EB, 05, 05]
-1F007; [0C FB 3F, 05, 05]
+1F008; [0D 02 F2, 05, 05]
-1F008; [0C FB 46, 05, 05]
+1F009; [0D 02 F9, 05, 05]
-1F009; [0C FB 4D, 05, 05]
+1F00A; [0D 03 02, 05, 05]
-1F00A; [0C FB 54, 05, 05]
+1F00B; [0D 03 09, 05, 05]
-1F00B; [0C FB 5B, 05, 05]
+1F00C; [0D 03 10, 05, 05]
-1F00C; [0C FB 62, 05, 05]
+1F00D; [0D 03 17, 05, 05]
-1F00D; [0C FB 69, 05, 05]
+1F00E; [0D 03 1E, 05, 05]
-1F00E; [0C FB 70, 05, 05]
+1F00F; [0D 03 25, 05, 05]
-1F00F; [0C FB 77, 05, 05]
+1F010; [0D 03 2C, 05, 05]
-1F010; [0C FB 7E, 05, 05]
+1F011; [0D 03 33, 05, 05]
-1F011; [0C FB 85, 05, 05]
+1F012; [0D 03 3A, 05, 05]
-1F012; [0C FB 8C, 05, 05]
+1F013; [0D 03 41, 05, 05]
-1F013; [0C FB 93, 05, 05]
+1F014; [0D 03 48, 05, 05]
-1F014; [0C FB 9A, 05, 05]
+1F015; [0D 03 4F, 05, 05]
-1F015; [0C FB A1, 05, 05]
+1F016; [0D 03 56, 05, 05]
-1F016; [0C FB A8, 05, 05]
+1F017; [0D 03 5D, 05, 05]
-1F017; [0C FB AF, 05, 05]
+1F018; [0D 03 64, 05, 05]
-1F018; [0C FB B6, 05, 05]
+1F019; [0D 03 6B, 05, 05]
-1F019; [0C FB BD, 05, 05]
+1F01A; [0D 03 72, 05, 05]
-1F01A; [0C FB C4, 05, 05]
+1F01B; [0D 03 79, 05, 05]
-1F01B; [0C FB CB, 05, 05]
+1F01C; [0D 03 80, 05, 05]
-1F01C; [0C FB D2, 05, 05]
+1F01D; [0D 03 87, 05, 05]
-1F01D; [0C FB D9, 05, 05]
+1F01E; [0D 03 8E, 05, 05]
-1F01E; [0C FB E0, 05, 05]
+1F01F; [0D 03 95, 05, 05]
-1F01F; [0C FB E7, 05, 05]
+1F020; [0D 03 9C, 05, 05]
-1F020; [0C FB EE, 05, 05]
+1F021; [0D 03 A3, 05, 05]
-1F021; [0C FB F5, 05, 05]
+1F022; [0D 03 AA, 05, 05]
-1F022; [0C FB FC, 05, 05]
+1F023; [0D 03 B1, 05, 05]
-1F023; [0C FC 05, 05, 05]
+1F024; [0D 03 B8, 05, 05]
-1F024; [0C FC 0C, 05, 05]
+1F025; [0D 03 BF, 05, 05]
-1F025; [0C FC 13, 05, 05]
+1F026; [0D 03 C6, 05, 05]
-1F026; [0C FC 1A, 05, 05]
+1F027; [0D 03 CD, 05, 05]
-1F027; [0C FC 21, 05, 05]
+1F028; [0D 03 D4, 05, 05]
-1F028; [0C FC 28, 05, 05]
+1F029; [0D 03 DB, 05, 05]
-1F029; [0C FC 2F, 05, 05]
+1F02A; [0D 03 E2, 05, 05]
-1F02A; [0C FC 36, 05, 05]
+1F02B; [0D 03 E9, 05, 05]
-1F02B; [0C FC 3D, 05, 05]
+1F030; [0D 03 F0, 05, 05]
-1F030; [0C FC 44, 05, 05]
+1F031; [0D 03 F7, 05, 05]
-1F031; [0C FC 4B, 05, 05]
+1F032; [0D 03 FE, 05, 05]
-1F032; [0C FC 52, 05, 05]
+1F033; [0D 04 07, 05, 05]
-1F033; [0C FC 59, 05, 05]
+1F034; [0D 04 0E, 05, 05]
-1F034; [0C FC 60, 05, 05]
+1F035; [0D 04 15, 05, 05]
-1F035; [0C FC 67, 05, 05]
+1F036; [0D 04 1C, 05, 05]
-1F036; [0C FC 6E, 05, 05]
+1F037; [0D 04 23, 05, 05]
-1F037; [0C FC 75, 05, 05]
+1F038; [0D 04 2A, 05, 05]
-1F038; [0C FC 7C, 05, 05]
+1F039; [0D 04 31, 05, 05]
-1F039; [0C FC 83, 05, 05]
+1F03A; [0D 04 38, 05, 05]
-1F03A; [0C FC 8A, 05, 05]
+1F03B; [0D 04 3F, 05, 05]
-1F03B; [0C FC 91, 05, 05]
+1F03C; [0D 04 46, 05, 05]
-1F03C; [0C FC 98, 05, 05]
+1F03D; [0D 04 4D, 05, 05]
-1F03D; [0C FC 9F, 05, 05]
+1F03E; [0D 04 54, 05, 05]
-1F03E; [0C FC A6, 05, 05]
+1F03F; [0D 04 5B, 05, 05]
-1F03F; [0C FC AD, 05, 05]
+1F040; [0D 04 62, 05, 05]
-1F040; [0C FC B4, 05, 05]
+1F041; [0D 04 69, 05, 05]
-1F041; [0C FC BB, 05, 05]
+1F042; [0D 04 70, 05, 05]
-1F042; [0C FC C2, 05, 05]
+1F043; [0D 04 77, 05, 05]
-1F043; [0C FC C9, 05, 05]
+1F044; [0D 04 7E, 05, 05]
-1F044; [0C FC D0, 05, 05]
+1F045; [0D 04 85, 05, 05]
-1F045; [0C FC D7, 05, 05]
+1F046; [0D 04 8C, 05, 05]
-1F046; [0C FC DE, 05, 05]
+1F047; [0D 04 93, 05, 05]
-1F047; [0C FC E5, 05, 05]
+1F048; [0D 04 9A, 05, 05]
-1F048; [0C FC EC, 05, 05]
+1F049; [0D 04 A1, 05, 05]
-1F049; [0C FC F3, 05, 05]
+1F04A; [0D 04 A8, 05, 05]
-1F04A; [0C FC FA, 05, 05]
+1F04B; [0D 04 AF, 05, 05]
-1F04B; [0C FD 03, 05, 05]
+1F04C; [0D 04 B6, 05, 05]
-1F04C; [0C FD 0A, 05, 05]
+1F04D; [0D 04 BD, 05, 05]
-1F04D; [0C FD 11, 05, 05]
+1F04E; [0D 04 C4, 05, 05]
-1F04E; [0C FD 18, 05, 05]
+1F04F; [0D 04 CB, 05, 05]
-1F04F; [0C FD 1F, 05, 05]
+1F050; [0D 04 D2, 05, 05]
-1F050; [0C FD 26, 05, 05]
+1F051; [0D 04 D9, 05, 05]
-1F051; [0C FD 2D, 05, 05]
+1F052; [0D 04 E0, 05, 05]
-1F052; [0C FD 34, 05, 05]
+1F053; [0D 04 E7, 05, 05]
-1F053; [0C FD 3B, 05, 05]
+1F054; [0D 04 EE, 05, 05]
-1F054; [0C FD 42, 05, 05]
+1F055; [0D 04 F5, 05, 05]
-1F055; [0C FD 49, 05, 05]
+1F056; [0D 04 FC, 05, 05]
-1F056; [0C FD 50, 05, 05]
+1F057; [0D 05 05, 05, 05]
-1F057; [0C FD 57, 05, 05]
+1F058; [0D 05 0C, 05, 05]
-1F058; [0C FD 5E, 05, 05]
+1F059; [0D 05 13, 05, 05]
-1F059; [0C FD 65, 05, 05]
+1F05A; [0D 05 1A, 05, 05]
-1F05A; [0C FD 6C, 05, 05]
+1F05B; [0D 05 21, 05, 05]
-1F05B; [0C FD 73, 05, 05]
+1F05C; [0D 05 28, 05, 05]
-1F05C; [0C FD 7A, 05, 05]
+1F05D; [0D 05 2F, 05, 05]
-1F05D; [0C FD 81, 05, 05]
+1F05E; [0D 05 36, 05, 05]
-1F05E; [0C FD 88, 05, 05]
+1F05F; [0D 05 3D, 05, 05]
-1F05F; [0C FD 8F, 05, 05]
+1F060; [0D 05 44, 05, 05]
-1F060; [0C FD 96, 05, 05]
+1F061; [0D 05 4B, 05, 05]
-1F061; [0C FD 9D, 05, 05]
+1F062; [0D 05 52, 05, 05]
-1F062; [0C FD A4, 05, 05]
+1F063; [0D 05 59, 05, 05]
-1F063; [0C FD AB, 05, 05]
+1F064; [0D 05 60, 05, 05]
-1F064; [0C FD B2, 05, 05]
+1F065; [0D 05 67, 05, 05]
-1F065; [0C FD B9, 05, 05]
+1F066; [0D 05 6E, 05, 05]
-1F066; [0C FD C0, 05, 05]
+1F067; [0D 05 75, 05, 05]
-1F067; [0C FD C7, 05, 05]
+1F068; [0D 05 7C, 05, 05]
-1F068; [0C FD CE, 05, 05]
+1F069; [0D 05 83, 05, 05]
-1F069; [0C FD D5, 05, 05]
+1F06A; [0D 05 8A, 05, 05]
-1F06A; [0C FD DC, 05, 05]
+1F06B; [0D 05 91, 05, 05]
-1F06B; [0C FD E3, 05, 05]
+1F06C; [0D 05 98, 05, 05]
-1F06C; [0C FD EA, 05, 05]
+1F06D; [0D 05 9F, 05, 05]
-1F06D; [0C FD F1, 05, 05]
+1F06E; [0D 05 A6, 05, 05]
-1F06E; [0C FD F8, 05, 05]
+1F06F; [0D 05 AD, 05, 05]
-1F06F; [0C FD FF, 05, 05]
+1F070; [0D 05 B4, 05, 05]
-1F070; [0C FE 08, 05, 05]
+1F071; [0D 05 BB, 05, 05]
-1F071; [0C FE 0F, 05, 05]
+1F072; [0D 05 C2, 05, 05]
-1F072; [0C FE 16, 05, 05]
+1F073; [0D 05 C9, 05, 05]
-1F073; [0C FE 1D, 05, 05]
+1F074; [0D 05 D0, 05, 05]
-1F074; [0C FE 24, 05, 05]
+1F075; [0D 05 D7, 05, 05]
-1F075; [0C FE 2B, 05, 05]
+1F076; [0D 05 DE, 05, 05]
-1F076; [0C FE 32, 05, 05]
+1F077; [0D 05 E5, 05, 05]
-1F077; [0C FE 39, 05, 05]
+1F078; [0D 05 EC, 05, 05]
-1F078; [0C FE 40, 05, 05]
+1F079; [0D 05 F3, 05, 05]
-1F079; [0C FE 47, 05, 05]
+1F07A; [0D 05 FA, 05, 05]
-1F07A; [0C FE 4E, 05, 05]
+1F07B; [0D 06 03, 05, 05]
-1F07B; [0C FE 55, 05, 05]
+1F07C; [0D 06 0A, 05, 05]
-1F07C; [0C FE 5C, 05, 05]
+1F07D; [0D 06 11, 05, 05]
-1F07D; [0C FE 63, 05, 05]
+1F07E; [0D 06 18, 05, 05]
-1F07E; [0C FE 6A, 05, 05]
+1F07F; [0D 06 1F, 05, 05]
-1F07F; [0C FE 71, 05, 05]
+1F080; [0D 06 26, 05, 05]
-1F080; [0C FE 78, 05, 05]
+1F081; [0D 06 2D, 05, 05]
-1F081; [0C FE 7F, 05, 05]
+1F082; [0D 06 34, 05, 05]
-1F082; [0C FE 86, 05, 05]
+1F083; [0D 06 3B, 05, 05]
-1F083; [0C FE 8D, 05, 05]
+1F084; [0D 06 42, 05, 05]
-1F084; [0C FE 94, 05, 05]
+1F085; [0D 06 49, 05, 05]
-1F085; [0C FE 9B, 05, 05]
+1F086; [0D 06 50, 05, 05]
-1F086; [0C FE A2, 05, 05]
+1F087; [0D 06 57, 05, 05]
-1F087; [0C FE A9, 05, 05]
+1F088; [0D 06 5E, 05, 05]
-1F088; [0C FE B0, 05, 05]
+1F089; [0D 06 65, 05, 05]
-1F089; [0C FE B7, 05, 05]
+1F08A; [0D 06 6C, 05, 05]
-1F08A; [0C FE BE, 05, 05]
+1F08B; [0D 06 73, 05, 05]
-1F08B; [0C FE C5, 05, 05]
+1F08C; [0D 06 7A, 05, 05]
-1F08C; [0C FE CC, 05, 05]
+1F08D; [0D 06 81, 05, 05]
-1F08D; [0C FE D3, 05, 05]
+1F08E; [0D 06 88, 05, 05]
-1F08E; [0C FE DA, 05, 05]
+1F08F; [0D 06 8F, 05, 05]
-1F08F; [0C FE E1, 05, 05]
+1F090; [0D 06 96, 05, 05]
-1F090; [0C FE E8, 05, 05]
+1F091; [0D 06 9D, 05, 05]
-1F091; [0C FE EF, 05, 05]
+1F092; [0D 06 A4, 05, 05]
-1F092; [0C FE F6, 05, 05]
+1F093; [0D 06 AB, 05, 05]
-1F093; [0C FE FD, 05, 05]
+1F0A0; [0D 06 B2, 05, 05]
-1F0A0; [0C FF 06, 05, 05]
+1F0A1; [0D 06 B9, 05, 05]
-1F0A1; [0C FF 0D, 05, 05]
+1F0A2; [0D 06 C0, 05, 05]
-1F0A2; [0C FF 14, 05, 05]
+1F0A3; [0D 06 C7, 05, 05]
-1F0A3; [0C FF 1B, 05, 05]
+1F0A4; [0D 06 CE, 05, 05]
-1F0A4; [0C FF 22, 05, 05]
+1F0A5; [0D 06 D5, 05, 05]
-1F0A5; [0C FF 29, 05, 05]
+1F0A6; [0D 06 DC, 05, 05]
-1F0A6; [0C FF 30, 05, 05]
+1F0A7; [0D 06 E3, 05, 05]
-1F0A7; [0C FF 37, 05, 05]
+1F0A8; [0D 06 EA, 05, 05]
-1F0A8; [0C FF 3E, 05, 05]
+1F0A9; [0D 06 F1, 05, 05]
-1F0A9; [0C FF 45, 05, 05]
+1F0AA; [0D 06 F8, 05, 05]
-1F0AA; [0C FF 4C, 05, 05]
+1F0AB; [0D 06 FF, 05, 05]
-1F0AB; [0C FF 53, 05, 05]
+1F0AC; [0D 07 08, 05, 05]
-1F0AC; [0C FF 5A, 05, 05]
+1F0AD; [0D 07 0F, 05, 05]
-1F0AD; [0C FF 61, 05, 05]
+1F0AE; [0D 07 16, 05, 05]
-1F0AE; [0C FF 68, 05, 05]
+1F0B1; [0D 07 1D, 05, 05]
-1F0B1; [0C FF 6F, 05, 05]
+1F0B2; [0D 07 24, 05, 05]
-1F0B2; [0C FF 76, 05, 05]
+1F0B3; [0D 07 2B, 05, 05]
-1F0B3; [0C FF 7D, 05, 05]
+1F0B4; [0D 07 32, 05, 05]
-1F0B4; [0C FF 84, 05, 05]
+1F0B5; [0D 07 39, 05, 05]
-1F0B5; [0C FF 8B, 05, 05]
+1F0B6; [0D 07 40, 05, 05]
-1F0B6; [0C FF 92, 05, 05]
+1F0B7; [0D 07 47, 05, 05]
-1F0B7; [0C FF 99, 05, 05]
+1F0B8; [0D 07 4E, 05, 05]
-1F0B8; [0C FF A0, 05, 05]
+1F0B9; [0D 07 55, 05, 05]
-1F0B9; [0C FF A7, 05, 05]
+1F0BA; [0D 07 5C, 05, 05]
-1F0BA; [0C FF AE, 05, 05]
+1F0BB; [0D 07 63, 05, 05]
-1F0BB; [0C FF B5, 05, 05]
+1F0BC; [0D 07 6A, 05, 05]
-1F0BC; [0C FF BC, 05, 05]
+1F0BD; [0D 07 71, 05, 05]
-1F0BD; [0C FF C3, 05, 05]
+1F0BE; [0D 07 78, 05, 05]
-1F0BE; [0C FF CA, 05, 05]
+1F0BF; [0D 07 7F, 05, 05]
-1F0BF; [0C FF D1, 05, 05]
+1F0C1; [0D 07 86, 05, 05]
-1F0C1; [0C FF D8, 05, 05]
+1F0C2; [0D 07 8D, 05, 05]
-1F0C2; [0C FF DF, 05, 05]
+1F0C3; [0D 07 94, 05, 05]
-1F0C3; [0C FF E6, 05, 05]
+1F0C4; [0D 07 9B, 05, 05]
-1F0C4; [0C FF ED, 05, 05]
+1F0C5; [0D 07 A2, 05, 05]
-1F0C5; [0C FF F4, 05, 05]
+1F0C6; [0D 07 A9, 05, 05]
-1F0C6; [0C FF FB, 05, 05]
+1F0C7; [0D 07 B0, 05, 05]
-1F0C7; [0D 02 04, 05, 05]
+1F0C8; [0D 07 B7, 05, 05]
-1F0C8; [0D 02 0B, 05, 05]
+1F0C9; [0D 07 BE, 05, 05]
-1F0C9; [0D 02 12, 05, 05]
+1F0CA; [0D 07 C5, 05, 05]
-1F0CA; [0D 02 19, 05, 05]
+1F0CB; [0D 07 CC, 05, 05]
-1F0CB; [0D 02 20, 05, 05]
+1F0CC; [0D 07 D3, 05, 05]
-1F0CC; [0D 02 27, 05, 05]
+1F0CD; [0D 07 DA, 05, 05]
-1F0CD; [0D 02 2E, 05, 05]
+1F0CE; [0D 07 E1, 05, 05]
-1F0CE; [0D 02 35, 05, 05]
+1F0CF; [0D 07 E8, 05, 05]
-1F0CF; [0D 02 3C, 05, 05]
+1F0D1; [0D 07 EF, 05, 05]
-1F0D1; [0D 02 43, 05, 05]
+1F0D2; [0D 07 F6, 05, 05]
-1F0D2; [0D 02 4A, 05, 05]
+1F0D3; [0D 07 FD, 05, 05]
-1F0D3; [0D 02 51, 05, 05]
+1F0D4; [0D 08 06, 05, 05]
-1F0D4; [0D 02 58, 05, 05]
+1F0D5; [0D 08 0D, 05, 05]
-1F0D5; [0D 02 5F, 05, 05]
+1F0D6; [0D 08 14, 05, 05]
-1F0D6; [0D 02 66, 05, 05]
+1F0D7; [0D 08 1B, 05, 05]
-1F0D7; [0D 02 6D, 05, 05]
+1F0D8; [0D 08 22, 05, 05]
-1F0D8; [0D 02 74, 05, 05]
+1F0D9; [0D 08 29, 05, 05]
-1F0D9; [0D 02 7B, 05, 05]
+1F0DA; [0D 08 30, 05, 05]
-1F0DA; [0D 02 82, 05, 05]
+1F0DB; [0D 08 37, 05, 05]
-1F0DB; [0D 02 89, 05, 05]
+1F0DC; [0D 08 3E, 05, 05]
-1F0DC; [0D 02 90, 05, 05]
+1F0DD; [0D 08 45, 05, 05]
-1F0DD; [0D 02 97, 05, 05]
+1F0DE; [0D 08 4C, 05, 05]
-1F0DE; [0D 02 9E, 05, 05]
+1F0DF; [0D 08 53, 05, 05]
-1F0DF; [0D 02 A5, 05, 05]
+1F0E0; [0D 08 5A, 05, 05]
-1F0E0; [0D 02 AC, 05, 05]
+1F0E1; [0D 08 61, 05, 05]
-1F0E1; [0D 02 B3, 05, 05]
+1F0E2; [0D 08 68, 05, 05]
-1F0E2; [0D 02 BA, 05, 05]
+1F0E3; [0D 08 6F, 05, 05]
-1F0E3; [0D 02 C1, 05, 05]
+1F0E4; [0D 08 76, 05, 05]
-1F0E4; [0D 02 C8, 05, 05]
+1F0E5; [0D 08 7D, 05, 05]
-1F0E5; [0D 02 CF, 05, 05]
+1F0E6; [0D 08 84, 05, 05]
-1F0E6; [0D 02 D6, 05, 05]
+1F0E7; [0D 08 8B, 05, 05]
-1F0E7; [0D 02 DD, 05, 05]
+1F0E8; [0D 08 92, 05, 05]
-1F0E8; [0D 02 E4, 05, 05]
+1F0E9; [0D 08 99, 05, 05]
-1F0E9; [0D 02 EB, 05, 05]
+1F0EA; [0D 08 A0, 05, 05]
-1F0EA; [0D 02 F2, 05, 05]
+1F0EB; [0D 08 A7, 05, 05]
-1F0EB; [0D 02 F9, 05, 05]
+1F0EC; [0D 08 AE, 05, 05]
-1F0EC; [0D 03 02, 05, 05]
+1F0ED; [0D 08 B5, 05, 05]
-1F0ED; [0D 03 09, 05, 05]
+1F0EE; [0D 08 BC, 05, 05]
-1F0EE; [0D 03 10, 05, 05]
+1F0EF; [0D 08 C3, 05, 05]
-1F0EF; [0D 03 17, 05, 05]
+1F0F0; [0D 08 CA, 05, 05]
-1F0F0; [0D 03 1E, 05, 05]
+1F0F1; [0D 08 D1, 05, 05]
-1F0F1; [0D 03 25, 05, 05]
+1F0F2; [0D 08 D8, 05, 05]
-1F0F2; [0D 03 2C, 05, 05]
+1F0F3; [0D 08 DF, 05, 05]
-1F0F3; [0D 03 33, 05, 05]
+1F0F4; [0D 08 E6, 05, 05]
-1F0F4; [0D 03 3A, 05, 05]
+1F0F5; [0D 08 ED, 05, 05]
-1F0F5; [0D 03 41, 05, 05]
+1FA00; [0D 08 F4, 05, 05]
-1FA00; [0D 03 48, 05, 05]
+1FA01; [0D 08 FB, 05, 05]
-1FA01; [0D 03 4F, 05, 05]
+1FA02; [0D 09 04, 05, 05]
-1FA02; [0D 03 56, 05, 05]
+1FA03; [0D 09 0B, 05, 05]
-1FA03; [0D 03 5D, 05, 05]
+1FA04; [0D 09 12, 05, 05]
-1FA04; [0D 03 64, 05, 05]
+1FA05; [0D 09 19, 05, 05]
-1FA05; [0D 03 6B, 05, 05]
+1FA06; [0D 09 20, 05, 05]
-1FA06; [0D 03 72, 05, 05]
+1FA07; [0D 09 27, 05, 05]
-1FA07; [0D 03 79, 05, 05]
+1FA08; [0D 09 2E, 05, 05]
-1FA08; [0D 03 80, 05, 05]
+1FA09; [0D 09 35, 05, 05]
-1FA09; [0D 03 87, 05, 05]
+1FA0A; [0D 09 3C, 05, 05]
-1FA0A; [0D 03 8E, 05, 05]
+1FA0B; [0D 09 43, 05, 05]
-1FA0B; [0D 03 95, 05, 05]
+1FA0C; [0D 09 4A, 05, 05]
-1FA0C; [0D 03 9C, 05, 05]
+1FA0D; [0D 09 51, 05, 05]
-1FA0D; [0D 03 A3, 05, 05]
+1FA0E; [0D 09 58, 05, 05]
-1FA0E; [0D 03 AA, 05, 05]
+1FA0F; [0D 09 5F, 05, 05]
-1FA0F; [0D 03 B1, 05, 05]
+1FA10; [0D 09 66, 05, 05]
-1FA10; [0D 03 B8, 05, 05]
+1FA11; [0D 09 6D, 05, 05]
-1FA11; [0D 03 BF, 05, 05]
+1FA12; [0D 09 74, 05, 05]
-1FA12; [0D 03 C6, 05, 05]
+1FA13; [0D 09 7B, 05, 05]
-1FA13; [0D 03 CD, 05, 05]
+1FA14; [0D 09 82, 05, 05]
-1FA14; [0D 03 D4, 05, 05]
+1FA15; [0D 09 89, 05, 05]
-1FA15; [0D 03 DB, 05, 05]
+1FA16; [0D 09 90, 05, 05]
-1FA16; [0D 03 E2, 05, 05]
+1FA17; [0D 09 97, 05, 05]
-1FA17; [0D 03 E9, 05, 05]
+1FA18; [0D 09 9E, 05, 05]
-1FA18; [0D 03 F0, 05, 05]
+1FA19; [0D 09 A5, 05, 05]
-1FA19; [0D 03 F7, 05, 05]
+1FA1A; [0D 09 AC, 05, 05]
-1FA1A; [0D 03 FE, 05, 05]
+1FA1B; [0D 09 B3, 05, 05]
-1FA1B; [0D 04 07, 05, 05]
+1FA1C; [0D 09 BA, 05, 05]
-1FA1C; [0D 04 0E, 05, 05]
+1FA1D; [0D 09 C1, 05, 05]
-1FA1D; [0D 04 15, 05, 05]
+1FA1E; [0D 09 C8, 05, 05]
-1FA1E; [0D 04 1C, 05, 05]
+1FA1F; [0D 09 CF, 05, 05]
-1FA1F; [0D 04 23, 05, 05]
+1FA20; [0D 09 D6, 05, 05]
-1FA20; [0D 04 2A, 05, 05]
+1FA21; [0D 09 DD, 05, 05]
-1FA21; [0D 04 31, 05, 05]
+1FA22; [0D 09 E4, 05, 05]
-1FA22; [0D 04 38, 05, 05]
+1FA23; [0D 09 EB, 05, 05]
-1FA23; [0D 04 3F, 05, 05]
+1FA24; [0D 09 F2, 05, 05]
-1FA24; [0D 04 46, 05, 05]
+1FA25; [0D 09 F9, 05, 05]
-1FA25; [0D 04 4D, 05, 05]
+1FA26; [0D 0A 02, 05, 05]
-1FA26; [0D 04 54, 05, 05]
+1FA27; [0D 0A 09, 05, 05]
-1FA27; [0D 04 5B, 05, 05]
+1FA28; [0D 0A 10, 05, 05]
-1FA28; [0D 04 62, 05, 05]
+1FA29; [0D 0A 17, 05, 05]
-1FA29; [0D 04 69, 05, 05]
+1FA2A; [0D 0A 1E, 05, 05]
-1FA2A; [0D 04 70, 05, 05]
+1FA2B; [0D 0A 25, 05, 05]
-1FA2B; [0D 04 77, 05, 05]
+1FA2C; [0D 0A 2C, 05, 05]
-1FA2C; [0D 04 7E, 05, 05]
+1FA2D; [0D 0A 33, 05, 05]
-1FA2D; [0D 04 85, 05, 05]
+1FA2E; [0D 0A 3A, 05, 05]
-1FA2E; [0D 04 8C, 05, 05]
+1FA2F; [0D 0A 41, 05, 05]
-1FA2F; [0D 04 93, 05, 05]
+1FA30; [0D 0A 48, 05, 05]
-1FA30; [0D 04 9A, 05, 05]
+1FA31; [0D 0A 4F, 05, 05]
-1FA31; [0D 04 A1, 05, 05]
+1FA32; [0D 0A 56, 05, 05]
-1FA32; [0D 04 A8, 05, 05]
+1FA33; [0D 0A 5D, 05, 05]
-1FA33; [0D 04 AF, 05, 05]
+1FA34; [0D 0A 64, 05, 05]
-1FA34; [0D 04 B6, 05, 05]
+1FA35; [0D 0A 6B, 05, 05]
-1FA35; [0D 04 BD, 05, 05]
+1FA36; [0D 0A 72, 05, 05]
-1FA36; [0D 04 C4, 05, 05]
+1FA37; [0D 0A 79, 05, 05]
-1FA37; [0D 04 CB, 05, 05]
+1FA38; [0D 0A 80, 05, 05]
-1FA38; [0D 04 D2, 05, 05]
+1FA39; [0D 0A 87, 05, 05]
-1FA39; [0D 04 D9, 05, 05]
+1FA3A; [0D 0A 8E, 05, 05]
-1FA3A; [0D 04 E0, 05, 05]
+1FA3B; [0D 0A 95, 05, 05]
-1FA3B; [0D 04 E7, 05, 05]
+1FA3C; [0D 0A 9C, 05, 05]
-1FA3C; [0D 04 EE, 05, 05]
+1FA3D; [0D 0A A3, 05, 05]
-1FA3D; [0D 04 F5, 05, 05]
+1FA3E; [0D 0A AA, 05, 05]
-1FA3E; [0D 04 FC, 05, 05]
+1FA3F; [0D 0A B1, 05, 05]
-1FA3F; [0D 05 05, 05, 05]
+1FA40; [0D 0A B8, 05, 05]
-1FA40; [0D 05 0C, 05, 05]
+1FA41; [0D 0A BF, 05, 05]
-1FA41; [0D 05 13, 05, 05]
+1FA42; [0D 0A C6, 05, 05]
-1FA42; [0D 05 1A, 05, 05]
+1FA43; [0D 0A CD, 05, 05]
-1FA43; [0D 05 21, 05, 05]
+1FA44; [0D 0A D4, 05, 05]
-1FA44; [0D 05 28, 05, 05]
+1FA45; [0D 0A DB, 05, 05]
-1FA45; [0D 05 2F, 05, 05]
+1FA46; [0D 0A E2, 05, 05]
-1FA46; [0D 05 36, 05, 05]
+1FA47; [0D 0A E9, 05, 05]
-1FA47; [0D 05 3D, 05, 05]
+1FA48; [0D 0A F0, 05, 05]
-1FA48; [0D 05 44, 05, 05]
+1FA49; [0D 0A F7, 05, 05]
-1FA49; [0D 05 4B, 05, 05]
+1FA4A; [0D 0A FE, 05, 05]
-1FA4A; [0D 05 52, 05, 05]
+1FA4B; [0D 0B 07, 05, 05]
-1FA4B; [0D 05 59, 05, 05]
+1FA4C; [0D 0B 0E, 05, 05]
-1FA4C; [0D 05 60, 05, 05]
+1FA4D; [0D 0B 15, 05, 05]
-1FA4D; [0D 05 67, 05, 05]
+1FA4E; [0D 0B 1C, 05, 05]
-1FA4E; [0D 05 6E, 05, 05]
+1FA4F; [0D 0B 23, 05, 05]
-1FA4F; [0D 05 75, 05, 05]
+1FA50; [0D 0B 2A, 05, 05]
-1FA50; [0D 05 7C, 05, 05]
+1FA51; [0D 0B 31, 05, 05]
-1FA51; [0D 05 83, 05, 05]
+1FA52; [0D 0B 38, 05, 05]
-1FA52; [0D 05 8A, 05, 05]
+1FA53; [0D 0B 3F, 05, 05]
-1FA53; [0D 05 91, 05, 05]
+1FA60; [0D 0B 46, 05, 05]
-1FA60; [0D 05 98, 05, 05]
+1FA61; [0D 0B 4D, 05, 05]
-1FA61; [0D 05 9F, 05, 05]
+1FA62; [0D 0B 54, 05, 05]
-1FA62; [0D 05 A6, 05, 05]
+1FA63; [0D 0B 5B, 05, 05]
-1FA63; [0D 05 AD, 05, 05]
+1FA64; [0D 0B 62, 05, 05]
-1FA64; [0D 05 B4, 05, 05]
+1FA65; [0D 0B 69, 05, 05]
-1FA65; [0D 05 BB, 05, 05]
+1FA66; [0D 0B 70, 05, 05]
-1FA66; [0D 05 C2, 05, 05]
+1FA67; [0D 0B 77, 05, 05]
-1FA67; [0D 05 C9, 05, 05]
+1FA68; [0D 0B 7E, 05, 05]
-1FA68; [0D 05 D0, 05, 05]
+1FA69; [0D 0B 85, 05, 05]
-1FA69; [0D 05 D7, 05, 05]
+1FA6A; [0D 0B 8C, 05, 05]
-1FA6A; [0D 05 DE, 05, 05]
+1FA6B; [0D 0B 93, 05, 05]
-1FA6B; [0D 05 E5, 05, 05]
+1FA6C; [0D 0B 9A, 05, 05]
-1FA6C; [0D 05 EC, 05, 05]
+1FA6D; [0D 0B A1, 05, 05]
-1FA6D; [0D 05 F3, 05, 05]
+1F10D; [0D 0B A8, 05, 05]
-1F260; [0D 05 FA, 05, 05]
+1F10E; [0D 0B AF, 05, 05]
-1F261; [0D 06 03, 05, 05]
+1F10F; [0D 0B B6, 05, 05]
-1F262; [0D 06 0A, 05, 05]
+1F16D; [0D 0B BD, 05, 05]
-1F263; [0D 06 11, 05, 05]
+1F16E; [0D 0B C4, 05, 05]
-1F264; [0D 06 18, 05, 05]
+1F16F; [0D 0B CB, 05, 05]
-1F265; [0D 06 1F, 05, 05]
+1F260; [0D 0B D2, 05, 05]
-1F300; [0D 06 26, 05, 05]
+1F261; [0D 0B D9, 05, 05]
-1F301; [0D 06 2D, 05, 05]
+1F262; [0D 0B E0, 05, 05]
-1F302; [0D 06 34, 05, 05]
+1F263; [0D 0B E7, 05, 05]
-1F303; [0D 06 3B, 05, 05]
+1F264; [0D 0B EE, 05, 05]
-1F304; [0D 06 42, 05, 05]
+1F265; [0D 0B F5, 05, 05]
-1F305; [0D 06 49, 05, 05]
+1F300; [0D 0B FC, 05, 05]
-1F306; [0D 06 50, 05, 05]
+1F301; [0D 0C 05, 05, 05]
-1F307; [0D 06 57, 05, 05]
+1F302; [0D 0C 0C, 05, 05]
-1F308; [0D 06 5E, 05, 05]
+1F303; [0D 0C 13, 05, 05]
-1F309; [0D 06 65, 05, 05]
+1F304; [0D 0C 1A, 05, 05]
-1F30A; [0D 06 6C, 05, 05]
+1F305; [0D 0C 21, 05, 05]
-1F30B; [0D 06 73, 05, 05]
+1F306; [0D 0C 28, 05, 05]
-1F30C; [0D 06 7A, 05, 05]
+1F307; [0D 0C 2F, 05, 05]
-1F30D; [0D 06 81, 05, 05]
+1F308; [0D 0C 36, 05, 05]
-1F30E; [0D 06 88, 05, 05]
+1F309; [0D 0C 3D, 05, 05]
-1F30F; [0D 06 8F, 05, 05]
+1F30A; [0D 0C 44, 05, 05]
-1F310; [0D 06 96, 05, 05]
+1F30B; [0D 0C 4B, 05, 05]
-1F311; [0D 06 9D, 05, 05]
+1F30C; [0D 0C 52, 05, 05]
-1F312; [0D 06 A4, 05, 05]
+1F30D; [0D 0C 59, 05, 05]
-1F313; [0D 06 AB, 05, 05]
+1F30E; [0D 0C 60, 05, 05]
-1F314; [0D 06 B2, 05, 05]
+1F30F; [0D 0C 67, 05, 05]
-1F315; [0D 06 B9, 05, 05]
+1F310; [0D 0C 6E, 05, 05]
-1F316; [0D 06 C0, 05, 05]
+1F311; [0D 0C 75, 05, 05]
-1F317; [0D 06 C7, 05, 05]
+1F312; [0D 0C 7C, 05, 05]
-1F318; [0D 06 CE, 05, 05]
+1F313; [0D 0C 83, 05, 05]
-1F319; [0D 06 D5, 05, 05]
+1F314; [0D 0C 8A, 05, 05]
-1F31A; [0D 06 DC, 05, 05]
+1F315; [0D 0C 91, 05, 05]
-1F31B; [0D 06 E3, 05, 05]
+1F316; [0D 0C 98, 05, 05]
-1F31C; [0D 06 EA, 05, 05]
+1F317; [0D 0C 9F, 05, 05]
-1F31D; [0D 06 F1, 05, 05]
+1F318; [0D 0C A6, 05, 05]
-1F31E; [0D 06 F8, 05, 05]
+1F319; [0D 0C AD, 05, 05]
-1F31F; [0D 06 FF, 05, 05]
+1F31A; [0D 0C B4, 05, 05]
-1F320; [0D 07 08, 05, 05]
+1F31B; [0D 0C BB, 05, 05]
-1F321; [0D 07 0F, 05, 05]
+1F31C; [0D 0C C2, 05, 05]
-1F322; [0D 07 16, 05, 05]
+1F31D; [0D 0C C9, 05, 05]
-1F323; [0D 07 1D, 05, 05]
+1F31E; [0D 0C D0, 05, 05]
-1F324; [0D 07 24, 05, 05]
+1F31F; [0D 0C D7, 05, 05]
-1F325; [0D 07 2B, 05, 05]
+1F320; [0D 0C DE, 05, 05]
-1F326; [0D 07 32, 05, 05]
+1F321; [0D 0C E5, 05, 05]
-1F327; [0D 07 39, 05, 05]
+1F322; [0D 0C EC, 05, 05]
-1F328; [0D 07 40, 05, 05]
+1F323; [0D 0C F3, 05, 05]
-1F329; [0D 07 47, 05, 05]
+1F324; [0D 0C FA, 05, 05]
-1F32A; [0D 07 4E, 05, 05]
+1F325; [0D 0D 03, 05, 05]
-1F32B; [0D 07 55, 05, 05]
+1F326; [0D 0D 0A, 05, 05]
-1F32C; [0D 07 5C, 05, 05]
+1F327; [0D 0D 11, 05, 05]
-1F32D; [0D 07 63, 05, 05]
+1F328; [0D 0D 18, 05, 05]
-1F32E; [0D 07 6A, 05, 05]
+1F329; [0D 0D 1F, 05, 05]
-1F32F; [0D 07 71, 05, 05]
+1F32A; [0D 0D 26, 05, 05]
-1F330; [0D 07 78, 05, 05]
+1F32B; [0D 0D 2D, 05, 05]
-1F331; [0D 07 7F, 05, 05]
+1F32C; [0D 0D 34, 05, 05]
-1F332; [0D 07 86, 05, 05]
+1F32D; [0D 0D 3B, 05, 05]
-1F333; [0D 07 8D, 05, 05]
+1F32E; [0D 0D 42, 05, 05]
-1F334; [0D 07 94, 05, 05]
+1F32F; [0D 0D 49, 05, 05]
-1F335; [0D 07 9B, 05, 05]
+1F330; [0D 0D 50, 05, 05]
-1F336; [0D 07 A2, 05, 05]
+1F331; [0D 0D 57, 05, 05]
-1F337; [0D 07 A9, 05, 05]
+1F332; [0D 0D 5E, 05, 05]
-1F338; [0D 07 B0, 05, 05]
+1F333; [0D 0D 65, 05, 05]
-1F339; [0D 07 B7, 05, 05]
+1F334; [0D 0D 6C, 05, 05]
-1F33A; [0D 07 BE, 05, 05]
+1F335; [0D 0D 73, 05, 05]
-1F33B; [0D 07 C5, 05, 05]
+1F336; [0D 0D 7A, 05, 05]
-1F33C; [0D 07 CC, 05, 05]
+1F337; [0D 0D 81, 05, 05]
-1F33D; [0D 07 D3, 05, 05]
+1F338; [0D 0D 88, 05, 05]
-1F33E; [0D 07 DA, 05, 05]
+1F339; [0D 0D 8F, 05, 05]
-1F33F; [0D 07 E1, 05, 05]
+1F33A; [0D 0D 96, 05, 05]
-1F340; [0D 07 E8, 05, 05]
+1F33B; [0D 0D 9D, 05, 05]
-1F341; [0D 07 EF, 05, 05]
+1F33C; [0D 0D A4, 05, 05]
-1F342; [0D 07 F6, 05, 05]
+1F33D; [0D 0D AB, 05, 05]
-1F343; [0D 07 FD, 05, 05]
+1F33E; [0D 0D B2, 05, 05]
-1F344; [0D 08 06, 05, 05]
+1F33F; [0D 0D B9, 05, 05]
-1F345; [0D 08 0D, 05, 05]
+1F340; [0D 0D C0, 05, 05]
-1F346; [0D 08 14, 05, 05]
+1F341; [0D 0D C7, 05, 05]
-1F347; [0D 08 1B, 05, 05]
+1F342; [0D 0D CE, 05, 05]
-1F348; [0D 08 22, 05, 05]
+1F343; [0D 0D D5, 05, 05]
-1F349; [0D 08 29, 05, 05]
+1F344; [0D 0D DC, 05, 05]
-1F34A; [0D 08 30, 05, 05]
+1F345; [0D 0D E3, 05, 05]
-1F34B; [0D 08 37, 05, 05]
+1F346; [0D 0D EA, 05, 05]
-1F34C; [0D 08 3E, 05, 05]
+1F347; [0D 0D F1, 05, 05]
-1F34D; [0D 08 45, 05, 05]
+1F348; [0D 0D F8, 05, 05]
-1F34E; [0D 08 4C, 05, 05]
+1F349; [0D 0D FF, 05, 05]
-1F34F; [0D 08 53, 05, 05]
+1F34A; [0D 0E 08, 05, 05]
-1F350; [0D 08 5A, 05, 05]
+1F34B; [0D 0E 0F, 05, 05]
-1F351; [0D 08 61, 05, 05]
+1F34C; [0D 0E 16, 05, 05]
-1F352; [0D 08 68, 05, 05]
+1F34D; [0D 0E 1D, 05, 05]
-1F353; [0D 08 6F, 05, 05]
+1F34E; [0D 0E 24, 05, 05]
-1F354; [0D 08 76, 05, 05]
+1F34F; [0D 0E 2B, 05, 05]
-1F355; [0D 08 7D, 05, 05]
+1F350; [0D 0E 32, 05, 05]
-1F356; [0D 08 84, 05, 05]
+1F351; [0D 0E 39, 05, 05]
-1F357; [0D 08 8B, 05, 05]
+1F352; [0D 0E 40, 05, 05]
-1F358; [0D 08 92, 05, 05]
+1F353; [0D 0E 47, 05, 05]
-1F359; [0D 08 99, 05, 05]
+1F354; [0D 0E 4E, 05, 05]
-1F35A; [0D 08 A0, 05, 05]
+1F355; [0D 0E 55, 05, 05]
-1F35B; [0D 08 A7, 05, 05]
+1F356; [0D 0E 5C, 05, 05]
-1F35C; [0D 08 AE, 05, 05]
+1F357; [0D 0E 63, 05, 05]
-1F35D; [0D 08 B5, 05, 05]
+1F358; [0D 0E 6A, 05, 05]
-1F35E; [0D 08 BC, 05, 05]
+1F359; [0D 0E 71, 05, 05]
-1F35F; [0D 08 C3, 05, 05]
+1F35A; [0D 0E 78, 05, 05]
-1F360; [0D 08 CA, 05, 05]
+1F35B; [0D 0E 7F, 05, 05]
-1F361; [0D 08 D1, 05, 05]
+1F35C; [0D 0E 86, 05, 05]
-1F362; [0D 08 D8, 05, 05]
+1F35D; [0D 0E 8D, 05, 05]
-1F363; [0D 08 DF, 05, 05]
+1F35E; [0D 0E 94, 05, 05]
-1F364; [0D 08 E6, 05, 05]
+1F35F; [0D 0E 9B, 05, 05]
-1F365; [0D 08 ED, 05, 05]
+1F360; [0D 0E A2, 05, 05]
-1F366; [0D 08 F4, 05, 05]
+1F361; [0D 0E A9, 05, 05]
-1F367; [0D 08 FB, 05, 05]
+1F362; [0D 0E B0, 05, 05]
-1F368; [0D 09 04, 05, 05]
+1F363; [0D 0E B7, 05, 05]
-1F369; [0D 09 0B, 05, 05]
+1F364; [0D 0E BE, 05, 05]
-1F36A; [0D 09 12, 05, 05]
+1F365; [0D 0E C5, 05, 05]
-1F36B; [0D 09 19, 05, 05]
+1F366; [0D 0E CC, 05, 05]
-1F36C; [0D 09 20, 05, 05]
+1F367; [0D 0E D3, 05, 05]
-1F36D; [0D 09 27, 05, 05]
+1F368; [0D 0E DA, 05, 05]
-1F36E; [0D 09 2E, 05, 05]
+1F369; [0D 0E E1, 05, 05]
-1F36F; [0D 09 35, 05, 05]
+1F36A; [0D 0E E8, 05, 05]
-1F370; [0D 09 3C, 05, 05]
+1F36B; [0D 0E EF, 05, 05]
-1F371; [0D 09 43, 05, 05]
+1F36C; [0D 0E F6, 05, 05]
-1F372; [0D 09 4A, 05, 05]
+1F36D; [0D 0E FD, 05, 05]
-1F373; [0D 09 51, 05, 05]
+1F36E; [0D 0F 06, 05, 05]
-1F374; [0D 09 58, 05, 05]
+1F36F; [0D 0F 0D, 05, 05]
-1F375; [0D 09 5F, 05, 05]
+1F370; [0D 0F 14, 05, 05]
-1F376; [0D 09 66, 05, 05]
+1F371; [0D 0F 1B, 05, 05]
-1F377; [0D 09 6D, 05, 05]
+1F372; [0D 0F 22, 05, 05]
-1F378; [0D 09 74, 05, 05]
+1F373; [0D 0F 29, 05, 05]
-1F379; [0D 09 7B, 05, 05]
+1F374; [0D 0F 30, 05, 05]
-1F37A; [0D 09 82, 05, 05]
+1F375; [0D 0F 37, 05, 05]
-1F37B; [0D 09 89, 05, 05]
+1F376; [0D 0F 3E, 05, 05]
-1F37C; [0D 09 90, 05, 05]
+1F377; [0D 0F 45, 05, 05]
-1F37D; [0D 09 97, 05, 05]
+1F378; [0D 0F 4C, 05, 05]
-1F37E; [0D 09 9E, 05, 05]
+1F379; [0D 0F 53, 05, 05]
-1F37F; [0D 09 A5, 05, 05]
+1F37A; [0D 0F 5A, 05, 05]
-1F380; [0D 09 AC, 05, 05]
+1F37B; [0D 0F 61, 05, 05]
-1F381; [0D 09 B3, 05, 05]
+1F37C; [0D 0F 68, 05, 05]
-1F382; [0D 09 BA, 05, 05]
+1F37D; [0D 0F 6F, 05, 05]
-1F383; [0D 09 C1, 05, 05]
+1F37E; [0D 0F 76, 05, 05]
-1F384; [0D 09 C8, 05, 05]
+1F37F; [0D 0F 7D, 05, 05]
-1F385; [0D 09 CF, 05, 05]
+1F380; [0D 0F 84, 05, 05]
-1F386; [0D 09 D6, 05, 05]
+1F381; [0D 0F 8B, 05, 05]
-1F387; [0D 09 DD, 05, 05]
+1F382; [0D 0F 92, 05, 05]
-1F388; [0D 09 E4, 05, 05]
+1F383; [0D 0F 99, 05, 05]
-1F389; [0D 09 EB, 05, 05]
+1F384; [0D 0F A0, 05, 05]
-1F38A; [0D 09 F2, 05, 05]
+1F385; [0D 0F A7, 05, 05]
-1F38B; [0D 09 F9, 05, 05]
+1F386; [0D 0F AE, 05, 05]
-1F38C; [0D 0A 02, 05, 05]
+1F387; [0D 0F B5, 05, 05]
-1F38D; [0D 0A 09, 05, 05]
+1F388; [0D 0F BC, 05, 05]
-1F38E; [0D 0A 10, 05, 05]
+1F389; [0D 0F C3, 05, 05]
-1F38F; [0D 0A 17, 05, 05]
+1F38A; [0D 0F CA, 05, 05]
-1F390; [0D 0A 1E, 05, 05]
+1F38B; [0D 0F D1, 05, 05]
-1F391; [0D 0A 25, 05, 05]
+1F38C; [0D 0F D8, 05, 05]
-1F392; [0D 0A 2C, 05, 05]
+1F38D; [0D 0F DF, 05, 05]
-1F393; [0D 0A 33, 05, 05]
+1F38E; [0D 0F E6, 05, 05]
-1F394; [0D 0A 3A, 05, 05]
+1F38F; [0D 0F ED, 05, 05]
-1F395; [0D 0A 41, 05, 05]
+1F390; [0D 0F F4, 05, 05]
-1F396; [0D 0A 48, 05, 05]
+1F391; [0D 0F FB, 05, 05]
-1F397; [0D 0A 4F, 05, 05]
+1F392; [0D 10 04, 05, 05]
-1F398; [0D 0A 56, 05, 05]
+1F393; [0D 10 0B, 05, 05]
-1F399; [0D 0A 5D, 05, 05]
+1F394; [0D 10 12, 05, 05]
-1F39A; [0D 0A 64, 05, 05]
+1F395; [0D 10 19, 05, 05]
-1F39B; [0D 0A 6B, 05, 05]
+1F396; [0D 10 20, 05, 05]
-1F39C; [0D 0A 72, 05, 05]
+1F397; [0D 10 27, 05, 05]
-1F39D; [0D 0A 79, 05, 05]
+1F398; [0D 10 2E, 05, 05]
-1F39E; [0D 0A 80, 05, 05]
+1F399; [0D 10 35, 05, 05]
-1F39F; [0D 0A 87, 05, 05]
+1F39A; [0D 10 3C, 05, 05]
-1F3A0; [0D 0A 8E, 05, 05]
+1F39B; [0D 10 43, 05, 05]
-1F3A1; [0D 0A 95, 05, 05]
+1F39C; [0D 10 4A, 05, 05]
-1F3A2; [0D 0A 9C, 05, 05]
+1F39D; [0D 10 51, 05, 05]
-1F3A3; [0D 0A A3, 05, 05]
+1F39E; [0D 10 58, 05, 05]
-1F3A4; [0D 0A AA, 05, 05]
+1F39F; [0D 10 5F, 05, 05]
-1F3A5; [0D 0A B1, 05, 05]
+1F3A0; [0D 10 66, 05, 05]
-1F3A6; [0D 0A B8, 05, 05]
+1F3A1; [0D 10 6D, 05, 05]
-1F3A7; [0D 0A BF, 05, 05]
+1F3A2; [0D 10 74, 05, 05]
-1F3A8; [0D 0A C6, 05, 05]
+1F3A3; [0D 10 7B, 05, 05]
-1F3A9; [0D 0A CD, 05, 05]
+1F3A4; [0D 10 82, 05, 05]
-1F3AA; [0D 0A D4, 05, 05]
+1F3A5; [0D 10 89, 05, 05]
-1F3AB; [0D 0A DB, 05, 05]
+1F3A6; [0D 10 90, 05, 05]
-1F3AC; [0D 0A E2, 05, 05]
+1F3A7; [0D 10 97, 05, 05]
-1F3AD; [0D 0A E9, 05, 05]
+1F3A8; [0D 10 9E, 05, 05]
-1F3AE; [0D 0A F0, 05, 05]
+1F3A9; [0D 10 A5, 05, 05]
-1F3AF; [0D 0A F7, 05, 05]
+1F3AA; [0D 10 AC, 05, 05]
-1F3B0; [0D 0A FE, 05, 05]
+1F3AB; [0D 10 B3, 05, 05]
-1F3B1; [0D 0B 07, 05, 05]
+1F3AC; [0D 10 BA, 05, 05]
-1F3B2; [0D 0B 0E, 05, 05]
+1F3AD; [0D 10 C1, 05, 05]
-1F3B3; [0D 0B 15, 05, 05]
+1F3AE; [0D 10 C8, 05, 05]
-1F3B4; [0D 0B 1C, 05, 05]
+1F3AF; [0D 10 CF, 05, 05]
-1F3B5; [0D 0B 23, 05, 05]
+1F3B0; [0D 10 D6, 05, 05]
-1F3B6; [0D 0B 2A, 05, 05]
+1F3B1; [0D 10 DD, 05, 05]
-1F3B7; [0D 0B 31, 05, 05]
+1F3B2; [0D 10 E4, 05, 05]
-1F3B8; [0D 0B 38, 05, 05]
+1F3B3; [0D 10 EB, 05, 05]
-1F3B9; [0D 0B 3F, 05, 05]
+1F3B4; [0D 10 F2, 05, 05]
-1F3BA; [0D 0B 46, 05, 05]
+1F3B5; [0D 10 F9, 05, 05]
-1F3BB; [0D 0B 4D, 05, 05]
+1F3B6; [0D 11 02, 05, 05]
-1F3BC; [0D 0B 54, 05, 05]
+1F3B7; [0D 11 09, 05, 05]
-1F3BD; [0D 0B 5B, 05, 05]
+1F3B8; [0D 11 10, 05, 05]
-1F3BE; [0D 0B 62, 05, 05]
+1F3B9; [0D 11 17, 05, 05]
-1F3BF; [0D 0B 69, 05, 05]
+1F3BA; [0D 11 1E, 05, 05]
-1F3C0; [0D 0B 70, 05, 05]
+1F3BB; [0D 11 25, 05, 05]
-1F3C1; [0D 0B 77, 05, 05]
+1F3BC; [0D 11 2C, 05, 05]
-1F3C2; [0D 0B 7E, 05, 05]
+1F3BD; [0D 11 33, 05, 05]
-1F3C3; [0D 0B 85, 05, 05]
+1F3BE; [0D 11 3A, 05, 05]
-1F3C4; [0D 0B 8C, 05, 05]
+1F3BF; [0D 11 41, 05, 05]
-1F3C5; [0D 0B 93, 05, 05]
+1F3C0; [0D 11 48, 05, 05]
-1F3C6; [0D 0B 9A, 05, 05]
+1F3C1; [0D 11 4F, 05, 05]
-1F3C7; [0D 0B A1, 05, 05]
+1F3C2; [0D 11 56, 05, 05]
-1F3C8; [0D 0B A8, 05, 05]
+1F3C3; [0D 11 5D, 05, 05]
-1F3C9; [0D 0B AF, 05, 05]
+1F3C4; [0D 11 64, 05, 05]
-1F3CA; [0D 0B B6, 05, 05]
+1F3C5; [0D 11 6B, 05, 05]
-1F3CB; [0D 0B BD, 05, 05]
+1F3C6; [0D 11 72, 05, 05]
-1F3CC; [0D 0B C4, 05, 05]
+1F3C7; [0D 11 79, 05, 05]
-1F3CD; [0D 0B CB, 05, 05]
+1F3C8; [0D 11 80, 05, 05]
-1F3CE; [0D 0B D2, 05, 05]
+1F3C9; [0D 11 87, 05, 05]
-1F3CF; [0D 0B D9, 05, 05]
+1F3CA; [0D 11 8E, 05, 05]
-1F3D0; [0D 0B E0, 05, 05]
+1F3CB; [0D 11 95, 05, 05]
-1F3D1; [0D 0B E7, 05, 05]
+1F3CC; [0D 11 9C, 05, 05]
-1F3D2; [0D 0B EE, 05, 05]
+1F3CD; [0D 11 A3, 05, 05]
-1F3D3; [0D 0B F5, 05, 05]
+1F3CE; [0D 11 AA, 05, 05]
-1F3D4; [0D 0B FC, 05, 05]
+1F3CF; [0D 11 B1, 05, 05]
-1F3D5; [0D 0C 05, 05, 05]
+1F3D0; [0D 11 B8, 05, 05]
-1F3D6; [0D 0C 0C, 05, 05]
+1F3D1; [0D 11 BF, 05, 05]
-1F3D7; [0D 0C 13, 05, 05]
+1F3D2; [0D 11 C6, 05, 05]
-1F3D8; [0D 0C 1A, 05, 05]
+1F3D3; [0D 11 CD, 05, 05]
-1F3D9; [0D 0C 21, 05, 05]
+1F3D4; [0D 11 D4, 05, 05]
-1F3DA; [0D 0C 28, 05, 05]
+1F3D5; [0D 11 DB, 05, 05]
-1F3DB; [0D 0C 2F, 05, 05]
+1F3D6; [0D 11 E2, 05, 05]
-1F3DC; [0D 0C 36, 05, 05]
+1F3D7; [0D 11 E9, 05, 05]
-1F3DD; [0D 0C 3D, 05, 05]
+1F3D8; [0D 11 F0, 05, 05]
-1F3DE; [0D 0C 44, 05, 05]
+1F3D9; [0D 11 F7, 05, 05]
-1F3DF; [0D 0C 4B, 05, 05]
+1F3DA; [0D 11 FE, 05, 05]
-1F3E0; [0D 0C 52, 05, 05]
+1F3DB; [0D 12 07, 05, 05]
-1F3E1; [0D 0C 59, 05, 05]
+1F3DC; [0D 12 0E, 05, 05]
-1F3E2; [0D 0C 60, 05, 05]
+1F3DD; [0D 12 15, 05, 05]
-1F3E3; [0D 0C 67, 05, 05]
+1F3DE; [0D 12 1C, 05, 05]
-1F3E4; [0D 0C 6E, 05, 05]
+1F3DF; [0D 12 23, 05, 05]
-1F3E5; [0D 0C 75, 05, 05]
+1F3E0; [0D 12 2A, 05, 05]
-1F3E6; [0D 0C 7C, 05, 05]
+1F3E1; [0D 12 31, 05, 05]
-1F3E7; [0D 0C 83, 05, 05]
+1F3E2; [0D 12 38, 05, 05]
-1F3E8; [0D 0C 8A, 05, 05]
+1F3E3; [0D 12 3F, 05, 05]
-1F3E9; [0D 0C 91, 05, 05]
+1F3E4; [0D 12 46, 05, 05]
-1F3EA; [0D 0C 98, 05, 05]
+1F3E5; [0D 12 4D, 05, 05]
-1F3EB; [0D 0C 9F, 05, 05]
+1F3E6; [0D 12 54, 05, 05]
-1F3EC; [0D 0C A6, 05, 05]
+1F3E7; [0D 12 5B, 05, 05]
-1F3ED; [0D 0C AD, 05, 05]
+1F3E8; [0D 12 62, 05, 05]
-1F3EE; [0D 0C B4, 05, 05]
+1F3E9; [0D 12 69, 05, 05]
-1F3EF; [0D 0C BB, 05, 05]
+1F3EA; [0D 12 70, 05, 05]
-1F3F0; [0D 0C C2, 05, 05]
+1F3EB; [0D 12 77, 05, 05]
-1F3F1; [0D 0C C9, 05, 05]
+1F3EC; [0D 12 7E, 05, 05]
-1F3F2; [0D 0C D0, 05, 05]
+1F3ED; [0D 12 85, 05, 05]
-1F3F3; [0D 0C D7, 05, 05]
+1F3EE; [0D 12 8C, 05, 05]
-1F3F4; [0D 0C DE, 05, 05]
+1F3EF; [0D 12 93, 05, 05]
-1F3F5; [0D 0C E5, 05, 05]
+1F3F0; [0D 12 9A, 05, 05]
-1F3F6; [0D 0C EC, 05, 05]
+1F3F1; [0D 12 A1, 05, 05]
-1F3F7; [0D 0C F3, 05, 05]
+1F3F2; [0D 12 A8, 05, 05]
-1F3F8; [0D 0C FA, 05, 05]
+1F3F3; [0D 12 AF, 05, 05]
-1F3F9; [0D 0D 03, 05, 05]
+1F3F4; [0D 12 B6, 05, 05]
-1F3FA; [0D 0D 0A, 05, 05]
+1F3F5; [0D 12 BD, 05, 05]
-1F3FB; [0D 0D 11, 05, 05]
+1F3F6; [0D 12 C4, 05, 05]
-1F3FC; [0D 0D 18, 05, 05]
+1F3F7; [0D 12 CB, 05, 05]
-1F3FD; [0D 0D 1F, 05, 05]
+1F3F8; [0D 12 D2, 05, 05]
-1F3FE; [0D 0D 26, 05, 05]
+1F3F9; [0D 12 D9, 05, 05]
-1F3FF; [0D 0D 2D, 05, 05]
+1F3FA; [0D 12 E0, 05, 05]
-1F400; [0D 0D 34, 05, 05]
+1F3FB; [0D 12 E7, 05, 05]
-1F401; [0D 0D 3B, 05, 05]
+1F3FC; [0D 12 EE, 05, 05]
-1F402; [0D 0D 42, 05, 05]
+1F3FD; [0D 12 F5, 05, 05]
-1F403; [0D 0D 49, 05, 05]
+1F3FE; [0D 12 FC, 05, 05]
-1F404; [0D 0D 50, 05, 05]
+1F3FF; [0D 13 05, 05, 05]
-1F405; [0D 0D 57, 05, 05]
+1F400; [0D 13 0C, 05, 05]
-1F406; [0D 0D 5E, 05, 05]
+1F401; [0D 13 13, 05, 05]
-1F407; [0D 0D 65, 05, 05]
+1F402; [0D 13 1A, 05, 05]
-1F408; [0D 0D 6C, 05, 05]
+1F403; [0D 13 21, 05, 05]
-1F409; [0D 0D 73, 05, 05]
+1F404; [0D 13 28, 05, 05]
-1F40A; [0D 0D 7A, 05, 05]
+1F405; [0D 13 2F, 05, 05]
-1F40B; [0D 0D 81, 05, 05]
+1F406; [0D 13 36, 05, 05]
-1F40C; [0D 0D 88, 05, 05]
+1F407; [0D 13 3D, 05, 05]
-1F40D; [0D 0D 8F, 05, 05]
+1F408; [0D 13 44, 05, 05]
-1F40E; [0D 0D 96, 05, 05]
+1F409; [0D 13 4B, 05, 05]
-1F40F; [0D 0D 9D, 05, 05]
+1F40A; [0D 13 52, 05, 05]
-1F410; [0D 0D A4, 05, 05]
+1F40B; [0D 13 59, 05, 05]
-1F411; [0D 0D AB, 05, 05]
+1F40C; [0D 13 60, 05, 05]
-1F412; [0D 0D B2, 05, 05]
+1F40D; [0D 13 67, 05, 05]
-1F413; [0D 0D B9, 05, 05]
+1F40E; [0D 13 6E, 05, 05]
-1F414; [0D 0D C0, 05, 05]
+1F40F; [0D 13 75, 05, 05]
-1F415; [0D 0D C7, 05, 05]
+1F410; [0D 13 7C, 05, 05]
-1F416; [0D 0D CE, 05, 05]
+1F411; [0D 13 83, 05, 05]
-1F417; [0D 0D D5, 05, 05]
+1F412; [0D 13 8A, 05, 05]
-1F418; [0D 0D DC, 05, 05]
+1F413; [0D 13 91, 05, 05]
-1F419; [0D 0D E3, 05, 05]
+1F414; [0D 13 98, 05, 05]
-1F41A; [0D 0D EA, 05, 05]
+1F415; [0D 13 9F, 05, 05]
-1F41B; [0D 0D F1, 05, 05]
+1F416; [0D 13 A6, 05, 05]
-1F41C; [0D 0D F8, 05, 05]
+1F417; [0D 13 AD, 05, 05]
-1F41D; [0D 0D FF, 05, 05]
+1F418; [0D 13 B4, 05, 05]
-1F41E; [0D 0E 08, 05, 05]
+1F419; [0D 13 BB, 05, 05]
-1F41F; [0D 0E 0F, 05, 05]
+1F41A; [0D 13 C2, 05, 05]
-1F420; [0D 0E 16, 05, 05]
+1F41B; [0D 13 C9, 05, 05]
-1F421; [0D 0E 1D, 05, 05]
+1F41C; [0D 13 D0, 05, 05]
-1F422; [0D 0E 24, 05, 05]
+1F41D; [0D 13 D7, 05, 05]
-1F423; [0D 0E 2B, 05, 05]
+1F41E; [0D 13 DE, 05, 05]
-1F424; [0D 0E 32, 05, 05]
+1F41F; [0D 13 E5, 05, 05]
-1F425; [0D 0E 39, 05, 05]
+1F420; [0D 13 EC, 05, 05]
-1F426; [0D 0E 40, 05, 05]
+1F421; [0D 13 F3, 05, 05]
-1F427; [0D 0E 47, 05, 05]
+1F422; [0D 13 FA, 05, 05]
-1F428; [0D 0E 4E, 05, 05]
+1F423; [0D 14 03, 05, 05]
-1F429; [0D 0E 55, 05, 05]
+1F424; [0D 14 0A, 05, 05]
-1F42A; [0D 0E 5C, 05, 05]
+1F425; [0D 14 11, 05, 05]
-1F42B; [0D 0E 63, 05, 05]
+1F426; [0D 14 18, 05, 05]
-1F42C; [0D 0E 6A, 05, 05]
+1F427; [0D 14 1F, 05, 05]
-1F42D; [0D 0E 71, 05, 05]
+1F428; [0D 14 26, 05, 05]
-1F42E; [0D 0E 78, 05, 05]
+1F429; [0D 14 2D, 05, 05]
-1F42F; [0D 0E 7F, 05, 05]
+1F42A; [0D 14 34, 05, 05]
-1F430; [0D 0E 86, 05, 05]
+1F42B; [0D 14 3B, 05, 05]
-1F431; [0D 0E 8D, 05, 05]
+1F42C; [0D 14 42, 05, 05]
-1F432; [0D 0E 94, 05, 05]
+1F42D; [0D 14 49, 05, 05]
-1F433; [0D 0E 9B, 05, 05]
+1F42E; [0D 14 50, 05, 05]
-1F434; [0D 0E A2, 05, 05]
+1F42F; [0D 14 57, 05, 05]
-1F435; [0D 0E A9, 05, 05]
+1F430; [0D 14 5E, 05, 05]
-1F436; [0D 0E B0, 05, 05]
+1F431; [0D 14 65, 05, 05]
-1F437; [0D 0E B7, 05, 05]
+1F432; [0D 14 6C, 05, 05]
-1F438; [0D 0E BE, 05, 05]
+1F433; [0D 14 73, 05, 05]
-1F439; [0D 0E C5, 05, 05]
+1F434; [0D 14 7A, 05, 05]
-1F43A; [0D 0E CC, 05, 05]
+1F435; [0D 14 81, 05, 05]
-1F43B; [0D 0E D3, 05, 05]
+1F436; [0D 14 88, 05, 05]
-1F43C; [0D 0E DA, 05, 05]
+1F437; [0D 14 8F, 05, 05]
-1F43D; [0D 0E E1, 05, 05]
+1F438; [0D 14 96, 05, 05]
-1F43E; [0D 0E E8, 05, 05]
+1F439; [0D 14 9D, 05, 05]
-1F43F; [0D 0E EF, 05, 05]
+1F43A; [0D 14 A4, 05, 05]
-1F440; [0D 0E F6, 05, 05]
+1F43B; [0D 14 AB, 05, 05]
-1F441; [0D 0E FD, 05, 05]
+1F43C; [0D 14 B2, 05, 05]
-1F442; [0D 0F 06, 05, 05]
+1F43D; [0D 14 B9, 05, 05]
-1F443; [0D 0F 0D, 05, 05]
+1F43E; [0D 14 C0, 05, 05]
-1F444; [0D 0F 14, 05, 05]
+1F43F; [0D 14 C7, 05, 05]
-1F445; [0D 0F 1B, 05, 05]
+1F440; [0D 14 CE, 05, 05]
-1F446; [0D 0F 22, 05, 05]
+1F441; [0D 14 D5, 05, 05]
-1F447; [0D 0F 29, 05, 05]
+1F442; [0D 14 DC, 05, 05]
-1F448; [0D 0F 30, 05, 05]
+1F443; [0D 14 E3, 05, 05]
-1F449; [0D 0F 37, 05, 05]
+1F444; [0D 14 EA, 05, 05]
-1F44A; [0D 0F 3E, 05, 05]
+1F445; [0D 14 F1, 05, 05]
-1F44B; [0D 0F 45, 05, 05]
+1F446; [0D 14 F8, 05, 05]
-1F44C; [0D 0F 4C, 05, 05]
+1F447; [0D 14 FF, 05, 05]
-1F44D; [0D 0F 53, 05, 05]
+1F448; [0D 15 08, 05, 05]
-1F44E; [0D 0F 5A, 05, 05]
+1F449; [0D 15 0F, 05, 05]
-1F44F; [0D 0F 61, 05, 05]
+1F44A; [0D 15 16, 05, 05]
-1F450; [0D 0F 68, 05, 05]
+1F44B; [0D 15 1D, 05, 05]
-1F451; [0D 0F 6F, 05, 05]
+1F44C; [0D 15 24, 05, 05]
-1F452; [0D 0F 76, 05, 05]
+1F44D; [0D 15 2B, 05, 05]
-1F453; [0D 0F 7D, 05, 05]
+1F44E; [0D 15 32, 05, 05]
-1F454; [0D 0F 84, 05, 05]
+1F44F; [0D 15 39, 05, 05]
-1F455; [0D 0F 8B, 05, 05]
+1F450; [0D 15 40, 05, 05]
-1F456; [0D 0F 92, 05, 05]
+1F451; [0D 15 47, 05, 05]
-1F457; [0D 0F 99, 05, 05]
+1F452; [0D 15 4E, 05, 05]
-1F458; [0D 0F A0, 05, 05]
+1F453; [0D 15 55, 05, 05]
-1F459; [0D 0F A7, 05, 05]
+1F454; [0D 15 5C, 05, 05]
-1F45A; [0D 0F AE, 05, 05]
+1F455; [0D 15 63, 05, 05]
-1F45B; [0D 0F B5, 05, 05]
+1F456; [0D 15 6A, 05, 05]
-1F45C; [0D 0F BC, 05, 05]
+1F457; [0D 15 71, 05, 05]
-1F45D; [0D 0F C3, 05, 05]
+1F458; [0D 15 78, 05, 05]
-1F45E; [0D 0F CA, 05, 05]
+1F459; [0D 15 7F, 05, 05]
-1F45F; [0D 0F D1, 05, 05]
+1F45A; [0D 15 86, 05, 05]
-1F460; [0D 0F D8, 05, 05]
+1F45B; [0D 15 8D, 05, 05]
-1F461; [0D 0F DF, 05, 05]
+1F45C; [0D 15 94, 05, 05]
-1F462; [0D 0F E6, 05, 05]
+1F45D; [0D 15 9B, 05, 05]
-1F463; [0D 0F ED, 05, 05]
+1F45E; [0D 15 A2, 05, 05]
-1F464; [0D 0F F4, 05, 05]
+1F45F; [0D 15 A9, 05, 05]
-1F465; [0D 0F FB, 05, 05]
+1F460; [0D 15 B0, 05, 05]
-1F466; [0D 10 04, 05, 05]
+1F461; [0D 15 B7, 05, 05]
-1F467; [0D 10 0B, 05, 05]
+1F462; [0D 15 BE, 05, 05]
-1F468; [0D 10 12, 05, 05]
+1F463; [0D 15 C5, 05, 05]
-1F469; [0D 10 19, 05, 05]
+1F464; [0D 15 CC, 05, 05]
-1F46A; [0D 10 20, 05, 05]
+1F465; [0D 15 D3, 05, 05]
-1F46B; [0D 10 27, 05, 05]
+1F466; [0D 15 DA, 05, 05]
-1F46C; [0D 10 2E, 05, 05]
+1F467; [0D 15 E1, 05, 05]
-1F46D; [0D 10 35, 05, 05]
+1F468; [0D 15 E8, 05, 05]
-1F46E; [0D 10 3C, 05, 05]
+1F469; [0D 15 EF, 05, 05]
-1F46F; [0D 10 43, 05, 05]
+1F46A; [0D 15 F6, 05, 05]
-1F470; [0D 10 4A, 05, 05]
+1F46B; [0D 15 FD, 05, 05]
-1F471; [0D 10 51, 05, 05]
+1F46C; [0D 16 06, 05, 05]
-1F472; [0D 10 58, 05, 05]
+1F46D; [0D 16 0D, 05, 05]
-1F473; [0D 10 5F, 05, 05]
+1F46E; [0D 16 14, 05, 05]
-1F474; [0D 10 66, 05, 05]
+1F46F; [0D 16 1B, 05, 05]
-1F475; [0D 10 6D, 05, 05]
+1F470; [0D 16 22, 05, 05]
-1F476; [0D 10 74, 05, 05]
+1F471; [0D 16 29, 05, 05]
-1F477; [0D 10 7B, 05, 05]
+1F472; [0D 16 30, 05, 05]
-1F478; [0D 10 82, 05, 05]
+1F473; [0D 16 37, 05, 05]
-1F479; [0D 10 89, 05, 05]
+1F474; [0D 16 3E, 05, 05]
-1F47A; [0D 10 90, 05, 05]
+1F475; [0D 16 45, 05, 05]
-1F47B; [0D 10 97, 05, 05]
+1F476; [0D 16 4C, 05, 05]
-1F47C; [0D 10 9E, 05, 05]
+1F477; [0D 16 53, 05, 05]
-1F47D; [0D 10 A5, 05, 05]
+1F478; [0D 16 5A, 05, 05]
-1F47E; [0D 10 AC, 05, 05]
+1F479; [0D 16 61, 05, 05]
-1F47F; [0D 10 B3, 05, 05]
+1F47A; [0D 16 68, 05, 05]
-1F480; [0D 10 BA, 05, 05]
+1F47B; [0D 16 6F, 05, 05]
-1F481; [0D 10 C1, 05, 05]
+1F47C; [0D 16 76, 05, 05]
-1F482; [0D 10 C8, 05, 05]
+1F47D; [0D 16 7D, 05, 05]
-1F483; [0D 10 CF, 05, 05]
+1F47E; [0D 16 84, 05, 05]
-1F484; [0D 10 D6, 05, 05]
+1F47F; [0D 16 8B, 05, 05]
-1F485; [0D 10 DD, 05, 05]
+1F480; [0D 16 92, 05, 05]
-1F486; [0D 10 E4, 05, 05]
+1F481; [0D 16 99, 05, 05]
-1F487; [0D 10 EB, 05, 05]
+1F482; [0D 16 A0, 05, 05]
-1F488; [0D 10 F2, 05, 05]
+1F483; [0D 16 A7, 05, 05]
-1F489; [0D 10 F9, 05, 05]
+1F484; [0D 16 AE, 05, 05]
-1F48A; [0D 11 02, 05, 05]
+1F485; [0D 16 B5, 05, 05]
-1F48B; [0D 11 09, 05, 05]
+1F486; [0D 16 BC, 05, 05]
-1F48C; [0D 11 10, 05, 05]
+1F487; [0D 16 C3, 05, 05]
-1F48D; [0D 11 17, 05, 05]
+1F488; [0D 16 CA, 05, 05]
-1F48E; [0D 11 1E, 05, 05]
+1F489; [0D 16 D1, 05, 05]
-1F48F; [0D 11 25, 05, 05]
+1F48A; [0D 16 D8, 05, 05]
-1F490; [0D 11 2C, 05, 05]
+1F48B; [0D 16 DF, 05, 05]
-1F491; [0D 11 33, 05, 05]
+1F48C; [0D 16 E6, 05, 05]
-1F492; [0D 11 3A, 05, 05]
+1F48D; [0D 16 ED, 05, 05]
-1F493; [0D 11 41, 05, 05]
+1F48E; [0D 16 F4, 05, 05]
-1F494; [0D 11 48, 05, 05]
+1F48F; [0D 16 FB, 05, 05]
-1F495; [0D 11 4F, 05, 05]
+1F490; [0D 17 04, 05, 05]
-1F496; [0D 11 56, 05, 05]
+1F491; [0D 17 0B, 05, 05]
-1F497; [0D 11 5D, 05, 05]
+1F492; [0D 17 12, 05, 05]
-1F498; [0D 11 64, 05, 05]
+1F493; [0D 17 19, 05, 05]
-1F499; [0D 11 6B, 05, 05]
+1F494; [0D 17 20, 05, 05]
-1F49A; [0D 11 72, 05, 05]
+1F495; [0D 17 27, 05, 05]
-1F49B; [0D 11 79, 05, 05]
+1F496; [0D 17 2E, 05, 05]
-1F49C; [0D 11 80, 05, 05]
+1F497; [0D 17 35, 05, 05]
-1F49D; [0D 11 87, 05, 05]
+1F498; [0D 17 3C, 05, 05]
-1F49E; [0D 11 8E, 05, 05]
+1F499; [0D 17 43, 05, 05]
-1F49F; [0D 11 95, 05, 05]
+1F49A; [0D 17 4A, 05, 05]
-1F4A0; [0D 11 9C, 05, 05]
+1F49B; [0D 17 51, 05, 05]
-1F4A1; [0D 11 A3, 05, 05]
+1F49C; [0D 17 58, 05, 05]
-1F4A2; [0D 11 AA, 05, 05]
+1F49D; [0D 17 5F, 05, 05]
-1F4A3; [0D 11 B1, 05, 05]
+1F49E; [0D 17 66, 05, 05]
-1F4A4; [0D 11 B8, 05, 05]
+1F49F; [0D 17 6D, 05, 05]
-1F4A5; [0D 11 BF, 05, 05]
+1F4A0; [0D 17 74, 05, 05]
-1F4A6; [0D 11 C6, 05, 05]
+1F4A1; [0D 17 7B, 05, 05]
-1F4A7; [0D 11 CD, 05, 05]
+1F4A2; [0D 17 82, 05, 05]
-1F4A8; [0D 11 D4, 05, 05]
+1F4A3; [0D 17 89, 05, 05]
-1F4A9; [0D 11 DB, 05, 05]
+1F4A4; [0D 17 90, 05, 05]
-1F4AA; [0D 11 E2, 05, 05]
+1F4A5; [0D 17 97, 05, 05]
-1F4AB; [0D 11 E9, 05, 05]
+1F4A6; [0D 17 9E, 05, 05]
-1F4AC; [0D 11 F0, 05, 05]
+1F4A7; [0D 17 A5, 05, 05]
-1F4AD; [0D 11 F7, 05, 05]
+1F4A8; [0D 17 AC, 05, 05]
-1F4AE; [0D 11 FE, 05, 05]
+1F4A9; [0D 17 B3, 05, 05]
-1F4AF; [0D 12 07, 05, 05]
+1F4AA; [0D 17 BA, 05, 05]
-1F4B0; [0D 12 0E, 05, 05]
+1F4AB; [0D 17 C1, 05, 05]
-1F4B1; [0D 12 15, 05, 05]
+1F4AC; [0D 17 C8, 05, 05]
-1F4B2; [0D 12 1C, 05, 05]
+1F4AD; [0D 17 CF, 05, 05]
-1F4B3; [0D 12 23, 05, 05]
+1F4AE; [0D 17 D6, 05, 05]
-1F4B4; [0D 12 2A, 05, 05]
+1F4AF; [0D 17 DD, 05, 05]
-1F4B5; [0D 12 31, 05, 05]
+1F4B0; [0D 17 E4, 05, 05]
-1F4B6; [0D 12 38, 05, 05]
+1F4B1; [0D 17 EB, 05, 05]
-1F4B7; [0D 12 3F, 05, 05]
+1F4B2; [0D 17 F2, 05, 05]
-1F4B8; [0D 12 46, 05, 05]
+1F4B3; [0D 17 F9, 05, 05]
-1F4B9; [0D 12 4D, 05, 05]
+1F4B4; [0D 18 02, 05, 05]
-1F4BA; [0D 12 54, 05, 05]
+1F4B5; [0D 18 09, 05, 05]
-1F4BB; [0D 12 5B, 05, 05]
+1F4B6; [0D 18 10, 05, 05]
-1F4BC; [0D 12 62, 05, 05]
+1F4B7; [0D 18 17, 05, 05]
-1F4BD; [0D 12 69, 05, 05]
+1F4B8; [0D 18 1E, 05, 05]
-1F4BE; [0D 12 70, 05, 05]
+1F4B9; [0D 18 25, 05, 05]
-1F4BF; [0D 12 77, 05, 05]
+1F4BA; [0D 18 2C, 05, 05]
-1F4C0; [0D 12 7E, 05, 05]
+1F4BB; [0D 18 33, 05, 05]
-1F4C1; [0D 12 85, 05, 05]
+1F4BC; [0D 18 3A, 05, 05]
-1F4C2; [0D 12 8C, 05, 05]
+1F4BD; [0D 18 41, 05, 05]
-1F4C3; [0D 12 93, 05, 05]
+1F4BE; [0D 18 48, 05, 05]
-1F4C4; [0D 12 9A, 05, 05]
+1F4BF; [0D 18 4F, 05, 05]
-1F4C5; [0D 12 A1, 05, 05]
+1F4C0; [0D 18 56, 05, 05]
-1F4C6; [0D 12 A8, 05, 05]
+1F4C1; [0D 18 5D, 05, 05]
-1F4C7; [0D 12 AF, 05, 05]
+1F4C2; [0D 18 64, 05, 05]
-1F4C8; [0D 12 B6, 05, 05]
+1F4C3; [0D 18 6B, 05, 05]
-1F4C9; [0D 12 BD, 05, 05]
+1F4C4; [0D 18 72, 05, 05]
-1F4CA; [0D 12 C4, 05, 05]
+1F4C5; [0D 18 79, 05, 05]
-1F4CB; [0D 12 CB, 05, 05]
+1F4C6; [0D 18 80, 05, 05]
-1F4CC; [0D 12 D2, 05, 05]
+1F4C7; [0D 18 87, 05, 05]
-1F4CD; [0D 12 D9, 05, 05]
+1F4C8; [0D 18 8E, 05, 05]
-1F4CE; [0D 12 E0, 05, 05]
+1F4C9; [0D 18 95, 05, 05]
-1F4CF; [0D 12 E7, 05, 05]
+1F4CA; [0D 18 9C, 05, 05]
-1F4D0; [0D 12 EE, 05, 05]
+1F4CB; [0D 18 A3, 05, 05]
-1F4D1; [0D 12 F5, 05, 05]
+1F4CC; [0D 18 AA, 05, 05]
-1F4D2; [0D 12 FC, 05, 05]
+1F4CD; [0D 18 B1, 05, 05]
-1F4D3; [0D 13 05, 05, 05]
+1F4CE; [0D 18 B8, 05, 05]
-1F4D4; [0D 13 0C, 05, 05]
+1F4CF; [0D 18 BF, 05, 05]
-1F4D5; [0D 13 13, 05, 05]
+1F4D0; [0D 18 C6, 05, 05]
-1F4D6; [0D 13 1A, 05, 05]
+1F4D1; [0D 18 CD, 05, 05]
-1F4D7; [0D 13 21, 05, 05]
+1F4D2; [0D 18 D4, 05, 05]
-1F4D8; [0D 13 28, 05, 05]
+1F4D3; [0D 18 DB, 05, 05]
-1F4D9; [0D 13 2F, 05, 05]
+1F4D4; [0D 18 E2, 05, 05]
-1F4DA; [0D 13 36, 05, 05]
+1F4D5; [0D 18 E9, 05, 05]
-1F4DB; [0D 13 3D, 05, 05]
+1F4D6; [0D 18 F0, 05, 05]
-1F4DC; [0D 13 44, 05, 05]
+1F4D7; [0D 18 F7, 05, 05]
-1F4DD; [0D 13 4B, 05, 05]
+1F4D8; [0D 18 FE, 05, 05]
-1F4DE; [0D 13 52, 05, 05]
+1F4D9; [0D 19 07, 05, 05]
-1F4DF; [0D 13 59, 05, 05]
+1F4DA; [0D 19 0E, 05, 05]
-1F4E0; [0D 13 60, 05, 05]
+1F4DB; [0D 19 15, 05, 05]
-1F4E1; [0D 13 67, 05, 05]
+1F4DC; [0D 19 1C, 05, 05]
-1F4E2; [0D 13 6E, 05, 05]
+1F4DD; [0D 19 23, 05, 05]
-1F4E3; [0D 13 75, 05, 05]
+1F4DE; [0D 19 2A, 05, 05]
-1F4E4; [0D 13 7C, 05, 05]
+1F4DF; [0D 19 31, 05, 05]
-1F4E5; [0D 13 83, 05, 05]
+1F4E0; [0D 19 38, 05, 05]
-1F4E6; [0D 13 8A, 05, 05]
+1F4E1; [0D 19 3F, 05, 05]
-1F4E7; [0D 13 91, 05, 05]
+1F4E2; [0D 19 46, 05, 05]
-1F4E8; [0D 13 98, 05, 05]
+1F4E3; [0D 19 4D, 05, 05]
-1F4E9; [0D 13 9F, 05, 05]
+1F4E4; [0D 19 54, 05, 05]
-1F4EA; [0D 13 A6, 05, 05]
+1F4E5; [0D 19 5B, 05, 05]
-1F4EB; [0D 13 AD, 05, 05]
+1F4E6; [0D 19 62, 05, 05]
-1F4EC; [0D 13 B4, 05, 05]
+1F4E7; [0D 19 69, 05, 05]
-1F4ED; [0D 13 BB, 05, 05]
+1F4E8; [0D 19 70, 05, 05]
-1F4EE; [0D 13 C2, 05, 05]
+1F4E9; [0D 19 77, 05, 05]
-1F4EF; [0D 13 C9, 05, 05]
+1F4EA; [0D 19 7E, 05, 05]
-1F4F0; [0D 13 D0, 05, 05]
+1F4EB; [0D 19 85, 05, 05]
-1F4F1; [0D 13 D7, 05, 05]
+1F4EC; [0D 19 8C, 05, 05]
-1F4F2; [0D 13 DE, 05, 05]
+1F4ED; [0D 19 93, 05, 05]
-1F4F3; [0D 13 E5, 05, 05]
+1F4EE; [0D 19 9A, 05, 05]
-1F4F4; [0D 13 EC, 05, 05]
+1F4EF; [0D 19 A1, 05, 05]
-1F4F5; [0D 13 F3, 05, 05]
+1F4F0; [0D 19 A8, 05, 05]
-1F4F6; [0D 13 FA, 05, 05]
+1F4F1; [0D 19 AF, 05, 05]
-1F4F7; [0D 14 03, 05, 05]
+1F4F2; [0D 19 B6, 05, 05]
-1F4F8; [0D 14 0A, 05, 05]
+1F4F3; [0D 19 BD, 05, 05]
-1F4F9; [0D 14 11, 05, 05]
+1F4F4; [0D 19 C4, 05, 05]
-1F4FA; [0D 14 18, 05, 05]
+1F4F5; [0D 19 CB, 05, 05]
-1F4FB; [0D 14 1F, 05, 05]
+1F4F6; [0D 19 D2, 05, 05]
-1F4FC; [0D 14 26, 05, 05]
+1F4F7; [0D 19 D9, 05, 05]
-1F4FD; [0D 14 2D, 05, 05]
+1F4F8; [0D 19 E0, 05, 05]
-1F4FE; [0D 14 34, 05, 05]
+1F4F9; [0D 19 E7, 05, 05]
-1F4FF; [0D 14 3B, 05, 05]
+1F4FA; [0D 19 EE, 05, 05]
-1F500; [0D 14 42, 05, 05]
+1F4FB; [0D 19 F5, 05, 05]
-1F501; [0D 14 49, 05, 05]
+1F4FC; [0D 19 FC, 05, 05]
-1F502; [0D 14 50, 05, 05]
+1F4FD; [0D 1A 05, 05, 05]
-1F503; [0D 14 57, 05, 05]
+1F4FE; [0D 1A 0C, 05, 05]
-1F504; [0D 14 5E, 05, 05]
+1F4FF; [0D 1A 13, 05, 05]
-1F505; [0D 14 65, 05, 05]
+1F500; [0D 1A 1A, 05, 05]
-1F506; [0D 14 6C, 05, 05]
+1F501; [0D 1A 21, 05, 05]
-1F507; [0D 14 73, 05, 05]
+1F502; [0D 1A 28, 05, 05]
-1F508; [0D 14 7A, 05, 05]
+1F503; [0D 1A 2F, 05, 05]
-1F509; [0D 14 81, 05, 05]
+1F504; [0D 1A 36, 05, 05]
-1F50A; [0D 14 88, 05, 05]
+1F505; [0D 1A 3D, 05, 05]
-1F50B; [0D 14 8F, 05, 05]
+1F506; [0D 1A 44, 05, 05]
-1F50C; [0D 14 96, 05, 05]
+1F507; [0D 1A 4B, 05, 05]
-1F50D; [0D 14 9D, 05, 05]
+1F508; [0D 1A 52, 05, 05]
-1F50E; [0D 14 A4, 05, 05]
+1F509; [0D 1A 59, 05, 05]
-1F50F; [0D 14 AB, 05, 05]
+1F50A; [0D 1A 60, 05, 05]
-1F510; [0D 14 B2, 05, 05]
+1F50B; [0D 1A 67, 05, 05]
-1F511; [0D 14 B9, 05, 05]
+1F50C; [0D 1A 6E, 05, 05]
-1F512; [0D 14 C0, 05, 05]
+1F50D; [0D 1A 75, 05, 05]
-1F513; [0D 14 C7, 05, 05]
+1F50E; [0D 1A 7C, 05, 05]
-1F514; [0D 14 CE, 05, 05]
+1F50F; [0D 1A 83, 05, 05]
-1F515; [0D 14 D5, 05, 05]
+1F510; [0D 1A 8A, 05, 05]
-1F516; [0D 14 DC, 05, 05]
+1F511; [0D 1A 91, 05, 05]
-1F517; [0D 14 E3, 05, 05]
+1F512; [0D 1A 98, 05, 05]
-1F518; [0D 14 EA, 05, 05]
+1F513; [0D 1A 9F, 05, 05]
-1F519; [0D 14 F1, 05, 05]
+1F514; [0D 1A A6, 05, 05]
-1F51A; [0D 14 F8, 05, 05]
+1F515; [0D 1A AD, 05, 05]
-1F51B; [0D 14 FF, 05, 05]
+1F516; [0D 1A B4, 05, 05]
-1F51C; [0D 15 08, 05, 05]
+1F517; [0D 1A BB, 05, 05]
-1F51D; [0D 15 0F, 05, 05]
+1F518; [0D 1A C2, 05, 05]
-1F51E; [0D 15 16, 05, 05]
+1F519; [0D 1A C9, 05, 05]
-1F51F; [0D 15 1D, 05, 05]
+1F51A; [0D 1A D0, 05, 05]
-1F520; [0D 15 24, 05, 05]
+1F51B; [0D 1A D7, 05, 05]
-1F521; [0D 15 2B, 05, 05]
+1F51C; [0D 1A DE, 05, 05]
-1F522; [0D 15 32, 05, 05]
+1F51D; [0D 1A E5, 05, 05]
-1F523; [0D 15 39, 05, 05]
+1F51E; [0D 1A EC, 05, 05]
-1F524; [0D 15 40, 05, 05]
+1F51F; [0D 1A F3, 05, 05]
-1F525; [0D 15 47, 05, 05]
+1F520; [0D 1A FA, 05, 05]
-1F526; [0D 15 4E, 05, 05]
+1F521; [0D 1B 03, 05, 05]
-1F527; [0D 15 55, 05, 05]
+1F522; [0D 1B 0A, 05, 05]
-1F528; [0D 15 5C, 05, 05]
+1F523; [0D 1B 11, 05, 05]
-1F529; [0D 15 63, 05, 05]
+1F524; [0D 1B 18, 05, 05]
-1F52A; [0D 15 6A, 05, 05]
+1F525; [0D 1B 1F, 05, 05]
-1F52B; [0D 15 71, 05, 05]
+1F526; [0D 1B 26, 05, 05]
-1F52C; [0D 15 78, 05, 05]
+1F527; [0D 1B 2D, 05, 05]
-1F52D; [0D 15 7F, 05, 05]
+1F528; [0D 1B 34, 05, 05]
-1F52E; [0D 15 86, 05, 05]
+1F529; [0D 1B 3B, 05, 05]
-1F52F; [0D 15 8D, 05, 05]
+1F52A; [0D 1B 42, 05, 05]
-1F530; [0D 15 94, 05, 05]
+1F52B; [0D 1B 49, 05, 05]
-1F531; [0D 15 9B, 05, 05]
+1F52C; [0D 1B 50, 05, 05]
-1F532; [0D 15 A2, 05, 05]
+1F52D; [0D 1B 57, 05, 05]
-1F533; [0D 15 A9, 05, 05]
+1F52E; [0D 1B 5E, 05, 05]
-1F534; [0D 15 B0, 05, 05]
+1F52F; [0D 1B 65, 05, 05]
-1F535; [0D 15 B7, 05, 05]
+1F530; [0D 1B 6C, 05, 05]
-1F536; [0D 15 BE, 05, 05]
+1F531; [0D 1B 73, 05, 05]
-1F537; [0D 15 C5, 05, 05]
+1F532; [0D 1B 7A, 05, 05]
-1F538; [0D 15 CC, 05, 05]
+1F533; [0D 1B 81, 05, 05]
-1F539; [0D 15 D3, 05, 05]
+1F534; [0D 1B 88, 05, 05]
-1F53A; [0D 15 DA, 05, 05]
+1F535; [0D 1B 8F, 05, 05]
-1F53B; [0D 15 E1, 05, 05]
+1F536; [0D 1B 96, 05, 05]
-1F53C; [0D 15 E8, 05, 05]
+1F537; [0D 1B 9D, 05, 05]
-1F53D; [0D 15 EF, 05, 05]
+1F538; [0D 1B A4, 05, 05]
-1F53E; [0D 15 F6, 05, 05]
+1F539; [0D 1B AB, 05, 05]
-1F53F; [0D 15 FD, 05, 05]
+1F53A; [0D 1B B2, 05, 05]
-1F540; [0D 16 06, 05, 05]
+1F53B; [0D 1B B9, 05, 05]
-1F541; [0D 16 0D, 05, 05]
+1F53C; [0D 1B C0, 05, 05]
-1F542; [0D 16 14, 05, 05]
+1F53D; [0D 1B C7, 05, 05]
-1F543; [0D 16 1B, 05, 05]
+1F53E; [0D 1B CE, 05, 05]
-1F544; [0D 16 22, 05, 05]
+1F53F; [0D 1B D5, 05, 05]
-1F545; [0D 16 29, 05, 05]
+1F540; [0D 1B DC, 05, 05]
-1F546; [0D 16 30, 05, 05]
+1F541; [0D 1B E3, 05, 05]
-1F547; [0D 16 37, 05, 05]
+1F542; [0D 1B EA, 05, 05]
-1F548; [0D 16 3E, 05, 05]
+1F543; [0D 1B F1, 05, 05]
-1F549; [0D 16 45, 05, 05]
+1F544; [0D 1B F8, 05, 05]
-1F54A; [0D 16 4C, 05, 05]
+1F545; [0D 1B FF, 05, 05]
-1F54B; [0D 16 53, 05, 05]
+1F546; [0D 1C 08, 05, 05]
-1F54C; [0D 16 5A, 05, 05]
+1F547; [0D 1C 0F, 05, 05]
-1F54D; [0D 16 61, 05, 05]
+1F548; [0D 1C 16, 05, 05]
-1F54E; [0D 16 68, 05, 05]
+1F549; [0D 1C 1D, 05, 05]
-1F54F; [0D 16 6F, 05, 05]
+1F54A; [0D 1C 24, 05, 05]
-1F550; [0D 16 76, 05, 05]
+1F54B; [0D 1C 2B, 05, 05]
-1F551; [0D 16 7D, 05, 05]
+1F54C; [0D 1C 32, 05, 05]
-1F552; [0D 16 84, 05, 05]
+1F54D; [0D 1C 39, 05, 05]
-1F553; [0D 16 8B, 05, 05]
+1F54E; [0D 1C 40, 05, 05]
-1F554; [0D 16 92, 05, 05]
+1F54F; [0D 1C 47, 05, 05]
-1F555; [0D 16 99, 05, 05]
+1F550; [0D 1C 4E, 05, 05]
-1F556; [0D 16 A0, 05, 05]
+1F551; [0D 1C 55, 05, 05]
-1F557; [0D 16 A7, 05, 05]
+1F552; [0D 1C 5C, 05, 05]
-1F558; [0D 16 AE, 05, 05]
+1F553; [0D 1C 63, 05, 05]
-1F559; [0D 16 B5, 05, 05]
+1F554; [0D 1C 6A, 05, 05]
-1F55A; [0D 16 BC, 05, 05]
+1F555; [0D 1C 71, 05, 05]
-1F55B; [0D 16 C3, 05, 05]
+1F556; [0D 1C 78, 05, 05]
-1F55C; [0D 16 CA, 05, 05]
+1F557; [0D 1C 7F, 05, 05]
-1F55D; [0D 16 D1, 05, 05]
+1F558; [0D 1C 86, 05, 05]
-1F55E; [0D 16 D8, 05, 05]
+1F559; [0D 1C 8D, 05, 05]
-1F55F; [0D 16 DF, 05, 05]
+1F55A; [0D 1C 94, 05, 05]
-1F560; [0D 16 E6, 05, 05]
+1F55B; [0D 1C 9B, 05, 05]
-1F561; [0D 16 ED, 05, 05]
+1F55C; [0D 1C A2, 05, 05]
-1F562; [0D 16 F4, 05, 05]
+1F55D; [0D 1C A9, 05, 05]
-1F563; [0D 16 FB, 05, 05]
+1F55E; [0D 1C B0, 05, 05]
-1F564; [0D 17 04, 05, 05]
+1F55F; [0D 1C B7, 05, 05]
-1F565; [0D 17 0B, 05, 05]
+1F560; [0D 1C BE, 05, 05]
-1F566; [0D 17 12, 05, 05]
+1F561; [0D 1C C5, 05, 05]
-1F567; [0D 17 19, 05, 05]
+1F562; [0D 1C CC, 05, 05]
-1F568; [0D 17 20, 05, 05]
+1F563; [0D 1C D3, 05, 05]
-1F569; [0D 17 27, 05, 05]
+1F564; [0D 1C DA, 05, 05]
-1F56A; [0D 17 2E, 05, 05]
+1F565; [0D 1C E1, 05, 05]
-1F56B; [0D 17 35, 05, 05]
+1F566; [0D 1C E8, 05, 05]
-1F56C; [0D 17 3C, 05, 05]
+1F567; [0D 1C EF, 05, 05]
-1F56D; [0D 17 43, 05, 05]
+1F568; [0D 1C F6, 05, 05]
-1F56E; [0D 17 4A, 05, 05]
+1F569; [0D 1C FD, 05, 05]
-1F56F; [0D 17 51, 05, 05]
+1F56A; [0D 1D 06, 05, 05]
-1F570; [0D 17 58, 05, 05]
+1F56B; [0D 1D 0D, 05, 05]
-1F571; [0D 17 5F, 05, 05]
+1F56C; [0D 1D 14, 05, 05]
-1F572; [0D 17 66, 05, 05]
+1F56D; [0D 1D 1B, 05, 05]
-1F573; [0D 17 6D, 05, 05]
+1F56E; [0D 1D 22, 05, 05]
-1F574; [0D 17 74, 05, 05]
+1F56F; [0D 1D 29, 05, 05]
-1F575; [0D 17 7B, 05, 05]
+1F570; [0D 1D 30, 05, 05]
-1F576; [0D 17 82, 05, 05]
+1F571; [0D 1D 37, 05, 05]
-1F577; [0D 17 89, 05, 05]
+1F572; [0D 1D 3E, 05, 05]
-1F578; [0D 17 90, 05, 05]
+1F573; [0D 1D 45, 05, 05]
-1F579; [0D 17 97, 05, 05]
+1F574; [0D 1D 4C, 05, 05]
-1F57A; [0D 17 9E, 05, 05]
+1F575; [0D 1D 53, 05, 05]
-1F57B; [0D 17 A5, 05, 05]
+1F576; [0D 1D 5A, 05, 05]
-1F57C; [0D 17 AC, 05, 05]
+1F577; [0D 1D 61, 05, 05]
-1F57D; [0D 17 B3, 05, 05]
+1F578; [0D 1D 68, 05, 05]
-1F57E; [0D 17 BA, 05, 05]
+1F579; [0D 1D 6F, 05, 05]
-1F57F; [0D 17 C1, 05, 05]
+1F57A; [0D 1D 76, 05, 05]
-1F580; [0D 17 C8, 05, 05]
+1F57B; [0D 1D 7D, 05, 05]
-1F581; [0D 17 CF, 05, 05]
+1F57C; [0D 1D 84, 05, 05]
-1F582; [0D 17 D6, 05, 05]
+1F57D; [0D 1D 8B, 05, 05]
-1F583; [0D 17 DD, 05, 05]
+1F57E; [0D 1D 92, 05, 05]
-1F584; [0D 17 E4, 05, 05]
+1F57F; [0D 1D 99, 05, 05]
-1F585; [0D 17 EB, 05, 05]
+1F580; [0D 1D A0, 05, 05]
-1F586; [0D 17 F2, 05, 05]
+1F581; [0D 1D A7, 05, 05]
-1F587; [0D 17 F9, 05, 05]
+1F582; [0D 1D AE, 05, 05]
-1F588; [0D 18 02, 05, 05]
+1F583; [0D 1D B5, 05, 05]
-1F589; [0D 18 09, 05, 05]
+1F584; [0D 1D BC, 05, 05]
-1F58A; [0D 18 10, 05, 05]
+1F585; [0D 1D C3, 05, 05]
-1F58B; [0D 18 17, 05, 05]
+1F586; [0D 1D CA, 05, 05]
-1F58C; [0D 18 1E, 05, 05]
+1F587; [0D 1D D1, 05, 05]
-1F58D; [0D 18 25, 05, 05]
+1F588; [0D 1D D8, 05, 05]
-1F58E; [0D 18 2C, 05, 05]
+1F589; [0D 1D DF, 05, 05]
-1F58F; [0D 18 33, 05, 05]
+1F58A; [0D 1D E6, 05, 05]
-1F590; [0D 18 3A, 05, 05]
+1F58B; [0D 1D ED, 05, 05]
-1F591; [0D 18 41, 05, 05]
+1F58C; [0D 1D F4, 05, 05]
-1F592; [0D 18 48, 05, 05]
+1F58D; [0D 1D FB, 05, 05]
-1F593; [0D 18 4F, 05, 05]
+1F58E; [0D 1E 04, 05, 05]
-1F594; [0D 18 56, 05, 05]
+1F58F; [0D 1E 0B, 05, 05]
-1F595; [0D 18 5D, 05, 05]
+1F590; [0D 1E 12, 05, 05]
-1F596; [0D 18 64, 05, 05]
+1F591; [0D 1E 19, 05, 05]
-1F597; [0D 18 6B, 05, 05]
+1F592; [0D 1E 20, 05, 05]
-1F598; [0D 18 72, 05, 05]
+1F593; [0D 1E 27, 05, 05]
-1F599; [0D 18 79, 05, 05]
+1F594; [0D 1E 2E, 05, 05]
-1F59A; [0D 18 80, 05, 05]
+1F595; [0D 1E 35, 05, 05]
-1F59B; [0D 18 87, 05, 05]
+1F596; [0D 1E 3C, 05, 05]
-1F59C; [0D 18 8E, 05, 05]
+1F597; [0D 1E 43, 05, 05]
-1F59D; [0D 18 95, 05, 05]
+1F598; [0D 1E 4A, 05, 05]
-1F59E; [0D 18 9C, 05, 05]
+1F599; [0D 1E 51, 05, 05]
-1F59F; [0D 18 A3, 05, 05]
+1F59A; [0D 1E 58, 05, 05]
-1F5A0; [0D 18 AA, 05, 05]
+1F59B; [0D 1E 5F, 05, 05]
-1F5A1; [0D 18 B1, 05, 05]
+1F59C; [0D 1E 66, 05, 05]
-1F5A2; [0D 18 B8, 05, 05]
+1F59D; [0D 1E 6D, 05, 05]
-1F5A3; [0D 18 BF, 05, 05]
+1F59E; [0D 1E 74, 05, 05]
-1F5A4; [0D 18 C6, 05, 05]
+1F59F; [0D 1E 7B, 05, 05]
-1F5A5; [0D 18 CD, 05, 05]
+1F5A0; [0D 1E 82, 05, 05]
-1F5A6; [0D 18 D4, 05, 05]
+1F5A1; [0D 1E 89, 05, 05]
-1F5A7; [0D 18 DB, 05, 05]
+1F5A2; [0D 1E 90, 05, 05]
-1F5A8; [0D 18 E2, 05, 05]
+1F5A3; [0D 1E 97, 05, 05]
-1F5A9; [0D 18 E9, 05, 05]
+1F5A4; [0D 1E 9E, 05, 05]
-1F5AA; [0D 18 F0, 05, 05]
+1F5A5; [0D 1E A5, 05, 05]
-1F5AB; [0D 18 F7, 05, 05]
+1F5A6; [0D 1E AC, 05, 05]
-1F5AC; [0D 18 FE, 05, 05]
+1F5A7; [0D 1E B3, 05, 05]
-1F5AD; [0D 19 07, 05, 05]
+1F5A8; [0D 1E BA, 05, 05]
-1F5AE; [0D 19 0E, 05, 05]
+1F5A9; [0D 1E C1, 05, 05]
-1F5AF; [0D 19 15, 05, 05]
+1F5AA; [0D 1E C8, 05, 05]
-1F5B0; [0D 19 1C, 05, 05]
+1F5AB; [0D 1E CF, 05, 05]
-1F5B1; [0D 19 23, 05, 05]
+1F5AC; [0D 1E D6, 05, 05]
-1F5B2; [0D 19 2A, 05, 05]
+1F5AD; [0D 1E DD, 05, 05]
-1F5B3; [0D 19 31, 05, 05]
+1F5AE; [0D 1E E4, 05, 05]
-1F5B4; [0D 19 38, 05, 05]
+1F5AF; [0D 1E EB, 05, 05]
-1F5B5; [0D 19 3F, 05, 05]
+1F5B0; [0D 1E F2, 05, 05]
-1F5B6; [0D 19 46, 05, 05]
+1F5B1; [0D 1E F9, 05, 05]
-1F5B7; [0D 19 4D, 05, 05]
+1F5B2; [0D 1F 02, 05, 05]
-1F5B8; [0D 19 54, 05, 05]
+1F5B3; [0D 1F 09, 05, 05]
-1F5B9; [0D 19 5B, 05, 05]
+1F5B4; [0D 1F 10, 05, 05]
-1F5BA; [0D 19 62, 05, 05]
+1F5B5; [0D 1F 17, 05, 05]
-1F5BB; [0D 19 69, 05, 05]
+1F5B6; [0D 1F 1E, 05, 05]
-1F5BC; [0D 19 70, 05, 05]
+1F5B7; [0D 1F 25, 05, 05]
-1F5BD; [0D 19 77, 05, 05]
+1F5B8; [0D 1F 2C, 05, 05]
-1F5BE; [0D 19 7E, 05, 05]
+1F5B9; [0D 1F 33, 05, 05]
-1F5BF; [0D 19 85, 05, 05]
+1F5BA; [0D 1F 3A, 05, 05]
-1F5C0; [0D 19 8C, 05, 05]
+1F5BB; [0D 1F 41, 05, 05]
-1F5C1; [0D 19 93, 05, 05]
+1F5BC; [0D 1F 48, 05, 05]
-1F5C2; [0D 19 9A, 05, 05]
+1F5BD; [0D 1F 4F, 05, 05]
-1F5C3; [0D 19 A1, 05, 05]
+1F5BE; [0D 1F 56, 05, 05]
-1F5C4; [0D 19 A8, 05, 05]
+1F5BF; [0D 1F 5D, 05, 05]
-1F5C5; [0D 19 AF, 05, 05]
+1F5C0; [0D 1F 64, 05, 05]
-1F5C6; [0D 19 B6, 05, 05]
+1F5C1; [0D 1F 6B, 05, 05]
-1F5C7; [0D 19 BD, 05, 05]
+1F5C2; [0D 1F 72, 05, 05]
-1F5C8; [0D 19 C4, 05, 05]
+1F5C3; [0D 1F 79, 05, 05]
-1F5C9; [0D 19 CB, 05, 05]
+1F5C4; [0D 1F 80, 05, 05]
-1F5CA; [0D 19 D2, 05, 05]
+1F5C5; [0D 1F 87, 05, 05]
-1F5CB; [0D 19 D9, 05, 05]
+1F5C6; [0D 1F 8E, 05, 05]
-1F5CC; [0D 19 E0, 05, 05]
+1F5C7; [0D 1F 95, 05, 05]
-1F5CD; [0D 19 E7, 05, 05]
+1F5C8; [0D 1F 9C, 05, 05]
-1F5CE; [0D 19 EE, 05, 05]
+1F5C9; [0D 1F A3, 05, 05]
-1F5CF; [0D 19 F5, 05, 05]
+1F5CA; [0D 1F AA, 05, 05]
-1F5D0; [0D 19 FC, 05, 05]
+1F5CB; [0D 1F B1, 05, 05]
-1F5D1; [0D 1A 05, 05, 05]
+1F5CC; [0D 1F B8, 05, 05]
-1F5D2; [0D 1A 0C, 05, 05]
+1F5CD; [0D 1F BF, 05, 05]
-1F5D3; [0D 1A 13, 05, 05]
+1F5CE; [0D 1F C6, 05, 05]
-1F5D4; [0D 1A 1A, 05, 05]
+1F5CF; [0D 1F CD, 05, 05]
-1F5D5; [0D 1A 21, 05, 05]
+1F5D0; [0D 1F D4, 05, 05]
-1F5D6; [0D 1A 28, 05, 05]
+1F5D1; [0D 1F DB, 05, 05]
-1F5D7; [0D 1A 2F, 05, 05]
+1F5D2; [0D 1F E2, 05, 05]
-1F5D8; [0D 1A 36, 05, 05]
+1F5D3; [0D 1F E9, 05, 05]
-1F5D9; [0D 1A 3D, 05, 05]
+1F5D4; [0D 1F F0, 05, 05]
-1F5DA; [0D 1A 44, 05, 05]
+1F5D5; [0D 1F F7, 05, 05]
-1F5DB; [0D 1A 4B, 05, 05]
+1F5D6; [0D 1F FE, 05, 05]
-1F5DC; [0D 1A 52, 05, 05]
+1F5D7; [0D 20 07, 05, 05]
-1F5DD; [0D 1A 59, 05, 05]
+1F5D8; [0D 20 0E, 05, 05]
-1F5DE; [0D 1A 60, 05, 05]
+1F5D9; [0D 20 15, 05, 05]
-1F5DF; [0D 1A 67, 05, 05]
+1F5DA; [0D 20 1C, 05, 05]
-1F5E0; [0D 1A 6E, 05, 05]
+1F5DB; [0D 20 23, 05, 05]
-1F5E1; [0D 1A 75, 05, 05]
+1F5DC; [0D 20 2A, 05, 05]
-1F5E2; [0D 1A 7C, 05, 05]
+1F5DD; [0D 20 31, 05, 05]
-1F5E3; [0D 1A 83, 05, 05]
+1F5DE; [0D 20 38, 05, 05]
-1F5E4; [0D 1A 8A, 05, 05]
+1F5DF; [0D 20 3F, 05, 05]
-1F5E5; [0D 1A 91, 05, 05]
+1F5E0; [0D 20 46, 05, 05]
-1F5E6; [0D 1A 98, 05, 05]
+1F5E1; [0D 20 4D, 05, 05]
-1F5E7; [0D 1A 9F, 05, 05]
+1F5E2; [0D 20 54, 05, 05]
-1F5E8; [0D 1A A6, 05, 05]
+1F5E3; [0D 20 5B, 05, 05]
-1F5E9; [0D 1A AD, 05, 05]
+1F5E4; [0D 20 62, 05, 05]
-1F5EA; [0D 1A B4, 05, 05]
+1F5E5; [0D 20 69, 05, 05]
-1F5EB; [0D 1A BB, 05, 05]
+1F5E6; [0D 20 70, 05, 05]
-1F5EC; [0D 1A C2, 05, 05]
+1F5E7; [0D 20 77, 05, 05]
-1F5ED; [0D 1A C9, 05, 05]
+1F5E8; [0D 20 7E, 05, 05]
-1F5EE; [0D 1A D0, 05, 05]
+1F5E9; [0D 20 85, 05, 05]
-1F5EF; [0D 1A D7, 05, 05]
+1F5EA; [0D 20 8C, 05, 05]
-1F5F0; [0D 1A DE, 05, 05]
+1F5EB; [0D 20 93, 05, 05]
-1F5F1; [0D 1A E5, 05, 05]
+1F5EC; [0D 20 9A, 05, 05]
-1F5F2; [0D 1A EC, 05, 05]
+1F5ED; [0D 20 A1, 05, 05]
-1F5F3; [0D 1A F3, 05, 05]
+1F5EE; [0D 20 A8, 05, 05]
-1F5F4; [0D 1A FA, 05, 05]
+1F5EF; [0D 20 AF, 05, 05]
-1F5F5; [0D 1B 03, 05, 05]
+1F5F0; [0D 20 B6, 05, 05]
-1F5F6; [0D 1B 0A, 05, 05]
+1F5F1; [0D 20 BD, 05, 05]
-1F5F7; [0D 1B 11, 05, 05]
+1F5F2; [0D 20 C4, 05, 05]
-1F5F8; [0D 1B 18, 05, 05]
+1F5F3; [0D 20 CB, 05, 05]
-1F5F9; [0D 1B 1F, 05, 05]
+1F5F4; [0D 20 D2, 05, 05]
-1F5FA; [0D 1B 26, 05, 05]
+1F5F5; [0D 20 D9, 05, 05]
-1F5FB; [0D 1B 2D, 05, 05]
+1F5F6; [0D 20 E0, 05, 05]
-1F5FC; [0D 1B 34, 05, 05]
+1F5F7; [0D 20 E7, 05, 05]
-1F5FD; [0D 1B 3B, 05, 05]
+1F5F8; [0D 20 EE, 05, 05]
-1F5FE; [0D 1B 42, 05, 05]
+1F5F9; [0D 20 F5, 05, 05]
-1F5FF; [0D 1B 49, 05, 05]
+1F5FA; [0D 20 FC, 05, 05]
-1F900; [0D 1B 50, 05, 05]
+1F5FB; [0D 21 05, 05, 05]
-1F901; [0D 1B 57, 05, 05]
+1F5FC; [0D 21 0C, 05, 05]
-1F902; [0D 1B 5E, 05, 05]
+1F5FD; [0D 21 13, 05, 05]
-1F903; [0D 1B 65, 05, 05]
+1F5FE; [0D 21 1A, 05, 05]
-1F904; [0D 1B 6C, 05, 05]
+1F5FF; [0D 21 21, 05, 05]
-1F905; [0D 1B 73, 05, 05]
+1F900; [0D 21 28, 05, 05]
-1F906; [0D 1B 7A, 05, 05]
+1F901; [0D 21 2F, 05, 05]
-1F907; [0D 1B 81, 05, 05]
+1F902; [0D 21 36, 05, 05]
-1F908; [0D 1B 88, 05, 05]
+1F903; [0D 21 3D, 05, 05]
-1F909; [0D 1B 8F, 05, 05]
+1F904; [0D 21 44, 05, 05]
-1F90A; [0D 1B 96, 05, 05]
+1F905; [0D 21 4B, 05, 05]
-1F90B; [0D 1B 9D, 05, 05]
+1F906; [0D 21 52, 05, 05]
-1F90D; [0D 1B A4, 05, 05]
+1F907; [0D 21 59, 05, 05]
-1F90E; [0D 1B AB, 05, 05]
+1F908; [0D 21 60, 05, 05]
-1F90F; [0D 1B B2, 05, 05]
+1F909; [0D 21 67, 05, 05]
-1F910; [0D 1B B9, 05, 05]
+1F90A; [0D 21 6E, 05, 05]
-1F911; [0D 1B C0, 05, 05]
+1F90B; [0D 21 75, 05, 05]
-1F912; [0D 1B C7, 05, 05]
+1F90C; [0D 21 7C, 05, 05]
-1F913; [0D 1B CE, 05, 05]
+1F90D; [0D 21 83, 05, 05]
-1F914; [0D 1B D5, 05, 05]
+1F90E; [0D 21 8A, 05, 05]
-1F915; [0D 1B DC, 05, 05]
+1F90F; [0D 21 91, 05, 05]
-1F916; [0D 1B E3, 05, 05]
+1F910; [0D 21 98, 05, 05]
-1F917; [0D 1B EA, 05, 05]
+1F911; [0D 21 9F, 05, 05]
-1F918; [0D 1B F1, 05, 05]
+1F912; [0D 21 A6, 05, 05]
-1F919; [0D 1B F8, 05, 05]
+1F913; [0D 21 AD, 05, 05]
-1F91A; [0D 1B FF, 05, 05]
+1F914; [0D 21 B4, 05, 05]
-1F91B; [0D 1C 08, 05, 05]
+1F915; [0D 21 BB, 05, 05]
-1F91C; [0D 1C 0F, 05, 05]
+1F916; [0D 21 C2, 05, 05]
-1F91D; [0D 1C 16, 05, 05]
+1F917; [0D 21 C9, 05, 05]
-1F91E; [0D 1C 1D, 05, 05]
+1F918; [0D 21 D0, 05, 05]
-1F91F; [0D 1C 24, 05, 05]
+1F919; [0D 21 D7, 05, 05]
-1F920; [0D 1C 2B, 05, 05]
+1F91A; [0D 21 DE, 05, 05]
-1F921; [0D 1C 32, 05, 05]
+1F91B; [0D 21 E5, 05, 05]
-1F922; [0D 1C 39, 05, 05]
+1F91C; [0D 21 EC, 05, 05]
-1F923; [0D 1C 40, 05, 05]
+1F91D; [0D 21 F3, 05, 05]
-1F924; [0D 1C 47, 05, 05]
+1F91E; [0D 21 FA, 05, 05]
-1F925; [0D 1C 4E, 05, 05]
+1F91F; [0D 22 03, 05, 05]
-1F926; [0D 1C 55, 05, 05]
+1F920; [0D 22 0A, 05, 05]
-1F927; [0D 1C 5C, 05, 05]
+1F921; [0D 22 11, 05, 05]
-1F928; [0D 1C 63, 05, 05]
+1F922; [0D 22 18, 05, 05]
-1F929; [0D 1C 6A, 05, 05]
+1F923; [0D 22 1F, 05, 05]
-1F92A; [0D 1C 71, 05, 05]
+1F924; [0D 22 26, 05, 05]
-1F92B; [0D 1C 78, 05, 05]
+1F925; [0D 22 2D, 05, 05]
-1F92C; [0D 1C 7F, 05, 05]
+1F926; [0D 22 34, 05, 05]
-1F92D; [0D 1C 86, 05, 05]
+1F927; [0D 22 3B, 05, 05]
-1F92E; [0D 1C 8D, 05, 05]
+1F928; [0D 22 42, 05, 05]
-1F92F; [0D 1C 94, 05, 05]
+1F929; [0D 22 49, 05, 05]
-1F930; [0D 1C 9B, 05, 05]
+1F92A; [0D 22 50, 05, 05]
-1F931; [0D 1C A2, 05, 05]
+1F92B; [0D 22 57, 05, 05]
-1F932; [0D 1C A9, 05, 05]
+1F92C; [0D 22 5E, 05, 05]
-1F933; [0D 1C B0, 05, 05]
+1F92D; [0D 22 65, 05, 05]
-1F934; [0D 1C B7, 05, 05]
+1F92E; [0D 22 6C, 05, 05]
-1F935; [0D 1C BE, 05, 05]
+1F92F; [0D 22 73, 05, 05]
-1F936; [0D 1C C5, 05, 05]
+1F930; [0D 22 7A, 05, 05]
-1F937; [0D 1C CC, 05, 05]
+1F931; [0D 22 81, 05, 05]
-1F938; [0D 1C D3, 05, 05]
+1F932; [0D 22 88, 05, 05]
-1F939; [0D 1C DA, 05, 05]
+1F933; [0D 22 8F, 05, 05]
-1F93A; [0D 1C E1, 05, 05]
+1F934; [0D 22 96, 05, 05]
-1F93B; [0D 1C E8, 05, 05]
+1F935; [0D 22 9D, 05, 05]
-1F93C; [0D 1C EF, 05, 05]
+1F936; [0D 22 A4, 05, 05]
-1F93D; [0D 1C F6, 05, 05]
+1F937; [0D 22 AB, 05, 05]
-1F93E; [0D 1C FD, 05, 05]
+1F938; [0D 22 B2, 05, 05]
-1F93F; [0D 1D 06, 05, 05]
+1F939; [0D 22 B9, 05, 05]
-1F940; [0D 1D 0D, 05, 05]
+1F93A; [0D 22 C0, 05, 05]
-1F941; [0D 1D 14, 05, 05]
+1F93B; [0D 22 C7, 05, 05]
-1F942; [0D 1D 1B, 05, 05]
+1F93C; [0D 22 CE, 05, 05]
-1F943; [0D 1D 22, 05, 05]
+1F93D; [0D 22 D5, 05, 05]
-1F944; [0D 1D 29, 05, 05]
+1F93E; [0D 22 DC, 05, 05]
-1F945; [0D 1D 30, 05, 05]
+1F93F; [0D 22 E3, 05, 05]
-1F946; [0D 1D 37, 05, 05]
+1F940; [0D 22 EA, 05, 05]
-1F947; [0D 1D 3E, 05, 05]
+1F941; [0D 22 F1, 05, 05]
-1F948; [0D 1D 45, 05, 05]
+1F942; [0D 22 F8, 05, 05]
-1F949; [0D 1D 4C, 05, 05]
+1F943; [0D 22 FF, 05, 05]
-1F94A; [0D 1D 53, 05, 05]
+1F944; [0D 23 08, 05, 05]
-1F94B; [0D 1D 5A, 05, 05]
+1F945; [0D 23 0F, 05, 05]
-1F94C; [0D 1D 61, 05, 05]
+1F946; [0D 23 16, 05, 05]
-1F94D; [0D 1D 68, 05, 05]
+1F947; [0D 23 1D, 05, 05]
-1F94E; [0D 1D 6F, 05, 05]
+1F948; [0D 23 24, 05, 05]
-1F94F; [0D 1D 76, 05, 05]
+1F949; [0D 23 2B, 05, 05]
-1F950; [0D 1D 7D, 05, 05]
+1F94A; [0D 23 32, 05, 05]
-1F951; [0D 1D 84, 05, 05]
+1F94B; [0D 23 39, 05, 05]
-1F952; [0D 1D 8B, 05, 05]
+1F94C; [0D 23 40, 05, 05]
-1F953; [0D 1D 92, 05, 05]
+1F94D; [0D 23 47, 05, 05]
-1F954; [0D 1D 99, 05, 05]
+1F94E; [0D 23 4E, 05, 05]
-1F955; [0D 1D A0, 05, 05]
+1F94F; [0D 23 55, 05, 05]
-1F956; [0D 1D A7, 05, 05]
+1F950; [0D 23 5C, 05, 05]
-1F957; [0D 1D AE, 05, 05]
+1F951; [0D 23 63, 05, 05]
-1F958; [0D 1D B5, 05, 05]
+1F952; [0D 23 6A, 05, 05]
-1F959; [0D 1D BC, 05, 05]
+1F953; [0D 23 71, 05, 05]
-1F95A; [0D 1D C3, 05, 05]
+1F954; [0D 23 78, 05, 05]
-1F95B; [0D 1D CA, 05, 05]
+1F955; [0D 23 7F, 05, 05]
-1F95C; [0D 1D D1, 05, 05]
+1F956; [0D 23 86, 05, 05]
-1F95D; [0D 1D D8, 05, 05]
+1F957; [0D 23 8D, 05, 05]
-1F95E; [0D 1D DF, 05, 05]
+1F958; [0D 23 94, 05, 05]
-1F95F; [0D 1D E6, 05, 05]
+1F959; [0D 23 9B, 05, 05]
-1F960; [0D 1D ED, 05, 05]
+1F95A; [0D 23 A2, 05, 05]
-1F961; [0D 1D F4, 05, 05]
+1F95B; [0D 23 A9, 05, 05]
-1F962; [0D 1D FB, 05, 05]
+1F95C; [0D 23 B0, 05, 05]
-1F963; [0D 1E 04, 05, 05]
+1F95D; [0D 23 B7, 05, 05]
-1F964; [0D 1E 0B, 05, 05]
+1F95E; [0D 23 BE, 05, 05]
-1F965; [0D 1E 12, 05, 05]
+1F95F; [0D 23 C5, 05, 05]
-1F966; [0D 1E 19, 05, 05]
+1F960; [0D 23 CC, 05, 05]
-1F967; [0D 1E 20, 05, 05]
+1F961; [0D 23 D3, 05, 05]
-1F968; [0D 1E 27, 05, 05]
+1F962; [0D 23 DA, 05, 05]
-1F969; [0D 1E 2E, 05, 05]
+1F963; [0D 23 E1, 05, 05]
-1F96A; [0D 1E 35, 05, 05]
+1F964; [0D 23 E8, 05, 05]
-1F96B; [0D 1E 3C, 05, 05]
+1F965; [0D 23 EF, 05, 05]
-1F96C; [0D 1E 43, 05, 05]
+1F966; [0D 23 F6, 05, 05]
-1F96D; [0D 1E 4A, 05, 05]
+1F967; [0D 23 FD, 05, 05]
-1F96E; [0D 1E 51, 05, 05]
+1F968; [0D 24 06, 05, 05]
-1F96F; [0D 1E 58, 05, 05]
+1F969; [0D 24 0D, 05, 05]
-1F970; [0D 1E 5F, 05, 05]
+1F96A; [0D 24 14, 05, 05]
-1F971; [0D 1E 66, 05, 05]
+1F96B; [0D 24 1B, 05, 05]
-1F973; [0D 1E 6D, 05, 05]
+1F96C; [0D 24 22, 05, 05]
-1F974; [0D 1E 74, 05, 05]
+1F96D; [0D 24 29, 05, 05]
-1F975; [0D 1E 7B, 05, 05]
+1F96E; [0D 24 30, 05, 05]
-1F976; [0D 1E 82, 05, 05]
+1F96F; [0D 24 37, 05, 05]
-1F97A; [0D 1E 89, 05, 05]
+1F970; [0D 24 3E, 05, 05]
-1F97B; [0D 1E 90, 05, 05]
+1F971; [0D 24 45, 05, 05]
-1F97C; [0D 1E 97, 05, 05]
+1F972; [0D 24 4C, 05, 05]
-1F97D; [0D 1E 9E, 05, 05]
+1F973; [0D 24 53, 05, 05]
-1F97E; [0D 1E A5, 05, 05]
+1F974; [0D 24 5A, 05, 05]
-1F97F; [0D 1E AC, 05, 05]
+1F975; [0D 24 61, 05, 05]
-1F980; [0D 1E B3, 05, 05]
+1F976; [0D 24 68, 05, 05]
-1F981; [0D 1E BA, 05, 05]
+1F977; [0D 24 6F, 05, 05]
-1F982; [0D 1E C1, 05, 05]
+1F978; [0D 24 76, 05, 05]
-1F983; [0D 1E C8, 05, 05]
+1F97A; [0D 24 7D, 05, 05]
-1F984; [0D 1E CF, 05, 05]
+1F97B; [0D 24 84, 05, 05]
-1F985; [0D 1E D6, 05, 05]
+1F97C; [0D 24 8B, 05, 05]
-1F986; [0D 1E DD, 05, 05]
+1F97D; [0D 24 92, 05, 05]
-1F987; [0D 1E E4, 05, 05]
+1F97E; [0D 24 99, 05, 05]
-1F988; [0D 1E EB, 05, 05]
+1F97F; [0D 24 A0, 05, 05]
-1F989; [0D 1E F2, 05, 05]
+1F980; [0D 24 A7, 05, 05]
-1F98A; [0D 1E F9, 05, 05]
+1F981; [0D 24 AE, 05, 05]
-1F98B; [0D 1F 02, 05, 05]
+1F982; [0D 24 B5, 05, 05]
-1F98C; [0D 1F 09, 05, 05]
+1F983; [0D 24 BC, 05, 05]
-1F98D; [0D 1F 10, 05, 05]
+1F984; [0D 24 C3, 05, 05]
-1F98E; [0D 1F 17, 05, 05]
+1F985; [0D 24 CA, 05, 05]
-1F98F; [0D 1F 1E, 05, 05]
+1F986; [0D 24 D1, 05, 05]
-1F990; [0D 1F 25, 05, 05]
+1F987; [0D 24 D8, 05, 05]
-1F991; [0D 1F 2C, 05, 05]
+1F988; [0D 24 DF, 05, 05]
-1F992; [0D 1F 33, 05, 05]
+1F989; [0D 24 E6, 05, 05]
-1F993; [0D 1F 3A, 05, 05]
+1F98A; [0D 24 ED, 05, 05]
-1F994; [0D 1F 41, 05, 05]
+1F98B; [0D 24 F4, 05, 05]
-1F995; [0D 1F 48, 05, 05]
+1F98C; [0D 24 FB, 05, 05]
-1F996; [0D 1F 4F, 05, 05]
+1F98D; [0D 25 04, 05, 05]
-1F997; [0D 1F 56, 05, 05]
+1F98E; [0D 25 0B, 05, 05]
-1F998; [0D 1F 5D, 05, 05]
+1F98F; [0D 25 12, 05, 05]
-1F999; [0D 1F 64, 05, 05]
+1F990; [0D 25 19, 05, 05]
-1F99A; [0D 1F 6B, 05, 05]
+1F991; [0D 25 20, 05, 05]
-1F99B; [0D 1F 72, 05, 05]
+1F992; [0D 25 27, 05, 05]
-1F99C; [0D 1F 79, 05, 05]
+1F993; [0D 25 2E, 05, 05]
-1F99D; [0D 1F 80, 05, 05]
+1F994; [0D 25 35, 05, 05]
-1F99E; [0D 1F 87, 05, 05]
+1F995; [0D 25 3C, 05, 05]
-1F99F; [0D 1F 8E, 05, 05]
+1F996; [0D 25 43, 05, 05]
-1F9A0; [0D 1F 95, 05, 05]
+1F997; [0D 25 4A, 05, 05]
-1F9A1; [0D 1F 9C, 05, 05]
+1F998; [0D 25 51, 05, 05]
-1F9A2; [0D 1F A3, 05, 05]
+1F999; [0D 25 58, 05, 05]
-1F9A5; [0D 1F AA, 05, 05]
+1F99A; [0D 25 5F, 05, 05]
-1F9A6; [0D 1F B1, 05, 05]
+1F99B; [0D 25 66, 05, 05]
-1F9A7; [0D 1F B8, 05, 05]
+1F99C; [0D 25 6D, 05, 05]
-1F9A8; [0D 1F BF, 05, 05]
+1F99D; [0D 25 74, 05, 05]
-1F9A9; [0D 1F C6, 05, 05]
+1F99E; [0D 25 7B, 05, 05]
-1F9AA; [0D 1F CD, 05, 05]
+1F99F; [0D 25 82, 05, 05]
-1F9AE; [0D 1F D4, 05, 05]
+1F9A0; [0D 25 89, 05, 05]
-1F9AF; [0D 1F DB, 05, 05]
+1F9A1; [0D 25 90, 05, 05]
-1F9B0; [0D 1F E2, 05, 05]
+1F9A2; [0D 25 97, 05, 05]
-1F9B1; [0D 1F E9, 05, 05]
+1F9A3; [0D 25 9E, 05, 05]
-1F9B2; [0D 1F F0, 05, 05]
+1F9A4; [0D 25 A5, 05, 05]
-1F9B3; [0D 1F F7, 05, 05]
+1F9A5; [0D 25 AC, 05, 05]
-1F9B4; [0D 1F FE, 05, 05]
+1F9A6; [0D 25 B3, 05, 05]
-1F9B5; [0D 20 07, 05, 05]
+1F9A7; [0D 25 BA, 05, 05]
-1F9B6; [0D 20 0E, 05, 05]
+1F9A8; [0D 25 C1, 05, 05]
-1F9B7; [0D 20 15, 05, 05]
+1F9A9; [0D 25 C8, 05, 05]
-1F9B8; [0D 20 1C, 05, 05]
+1F9AA; [0D 25 CF, 05, 05]
-1F9B9; [0D 20 23, 05, 05]
+1F9AB; [0D 25 D6, 05, 05]
-1F9BA; [0D 20 2A, 05, 05]
+1F9AC; [0D 25 DD, 05, 05]
-1F9BB; [0D 20 31, 05, 05]
+1F9AD; [0D 25 E4, 05, 05]
-1F9BC; [0D 20 38, 05, 05]
+1F9AE; [0D 25 EB, 05, 05]
-1F9BD; [0D 20 3F, 05, 05]
+1F9AF; [0D 25 F2, 05, 05]
-1F9BE; [0D 20 46, 05, 05]
+1F9B0; [0D 25 F9, 05, 05]
-1F9BF; [0D 20 4D, 05, 05]
+1F9B1; [0D 26 02, 05, 05]
-1F9C0; [0D 20 54, 05, 05]
+1F9B2; [0D 26 09, 05, 05]
-1F9C1; [0D 20 5B, 05, 05]
+1F9B3; [0D 26 10, 05, 05]
-1F9C2; [0D 20 62, 05, 05]
+1F9B4; [0D 26 17, 05, 05]
-1F9C3; [0D 20 69, 05, 05]
+1F9B5; [0D 26 1E, 05, 05]
-1F9C4; [0D 20 70, 05, 05]
+1F9B6; [0D 26 25, 05, 05]
-1F9C5; [0D 20 77, 05, 05]
+1F9B7; [0D 26 2C, 05, 05]
-1F9C6; [0D 20 7E, 05, 05]
+1F9B8; [0D 26 33, 05, 05]
-1F9C7; [0D 20 85, 05, 05]
+1F9B9; [0D 26 3A, 05, 05]
-1F9C8; [0D 20 8C, 05, 05]
+1F9BA; [0D 26 41, 05, 05]
-1F9C9; [0D 20 93, 05, 05]
+1F9BB; [0D 26 48, 05, 05]
-1F9CA; [0D 20 9A, 05, 05]
+1F9BC; [0D 26 4F, 05, 05]
-1F9CD; [0D 20 A1, 05, 05]
+1F9BD; [0D 26 56, 05, 05]
-1F9CE; [0D 20 A8, 05, 05]
+1F9BE; [0D 26 5D, 05, 05]
-1F9CF; [0D 20 AF, 05, 05]
+1F9BF; [0D 26 64, 05, 05]
-1F9D0; [0D 20 B6, 05, 05]
+1F9C0; [0D 26 6B, 05, 05]
-1F9D1; [0D 20 BD, 05, 05]
+1F9C1; [0D 26 72, 05, 05]
-1F9D2; [0D 20 C4, 05, 05]
+1F9C2; [0D 26 79, 05, 05]
-1F9D3; [0D 20 CB, 05, 05]
+1F9C3; [0D 26 80, 05, 05]
-1F9D4; [0D 20 D2, 05, 05]
+1F9C4; [0D 26 87, 05, 05]
-1F9D5; [0D 20 D9, 05, 05]
+1F9C5; [0D 26 8E, 05, 05]
-1F9D6; [0D 20 E0, 05, 05]
+1F9C6; [0D 26 95, 05, 05]
-1F9D7; [0D 20 E7, 05, 05]
+1F9C7; [0D 26 9C, 05, 05]
-1F9D8; [0D 20 EE, 05, 05]
+1F9C8; [0D 26 A3, 05, 05]
-1F9D9; [0D 20 F5, 05, 05]
+1F9C9; [0D 26 AA, 05, 05]
-1F9DA; [0D 20 FC, 05, 05]
+1F9CA; [0D 26 B1, 05, 05]
-1F9DB; [0D 21 05, 05, 05]
+1F9CB; [0D 26 B8, 05, 05]
-1F9DC; [0D 21 0C, 05, 05]
+1F9CD; [0D 26 BF, 05, 05]
-1F9DD; [0D 21 13, 05, 05]
+1F9CE; [0D 26 C6, 05, 05]
-1F9DE; [0D 21 1A, 05, 05]
+1F9CF; [0D 26 CD, 05, 05]
-1F9DF; [0D 21 21, 05, 05]
+1F9D0; [0D 26 D4, 05, 05]
-1F9E0; [0D 21 28, 05, 05]
+1F9D1; [0D 26 DB, 05, 05]
-1F9E1; [0D 21 2F, 05, 05]
+1F9D2; [0D 26 E2, 05, 05]
-1F9E2; [0D 21 36, 05, 05]
+1F9D3; [0D 26 E9, 05, 05]
-1F9E3; [0D 21 3D, 05, 05]
+1F9D4; [0D 26 F0, 05, 05]
-1F9E4; [0D 21 44, 05, 05]
+1F9D5; [0D 26 F7, 05, 05]
-1F9E5; [0D 21 4B, 05, 05]
+1F9D6; [0D 26 FE, 05, 05]
-1F9E6; [0D 21 52, 05, 05]
+1F9D7; [0D 27 07, 05, 05]
-1F9E7; [0D 21 59, 05, 05]
+1F9D8; [0D 27 0E, 05, 05]
-1F9E8; [0D 21 60, 05, 05]
+1F9D9; [0D 27 15, 05, 05]
-1F9E9; [0D 21 67, 05, 05]
+1F9DA; [0D 27 1C, 05, 05]
-1F9EA; [0D 21 6E, 05, 05]
+1F9DB; [0D 27 23, 05, 05]
-1F9EB; [0D 21 75, 05, 05]
+1F9DC; [0D 27 2A, 05, 05]
-1F9EC; [0D 21 7C, 05, 05]
+1F9DD; [0D 27 31, 05, 05]
-1F9ED; [0D 21 83, 05, 05]
+1F9DE; [0D 27 38, 05, 05]
-1F9EE; [0D 21 8A, 05, 05]
+1F9DF; [0D 27 3F, 05, 05]
-1F9EF; [0D 21 91, 05, 05]
+1F9E0; [0D 27 46, 05, 05]
-1F9F0; [0D 21 98, 05, 05]
+1F9E1; [0D 27 4D, 05, 05]
-1F9F1; [0D 21 9F, 05, 05]
+1F9E2; [0D 27 54, 05, 05]
-1F9F2; [0D 21 A6, 05, 05]
+1F9E3; [0D 27 5B, 05, 05]
-1F9F3; [0D 21 AD, 05, 05]
+1F9E4; [0D 27 62, 05, 05]
-1F9F4; [0D 21 B4, 05, 05]
+1F9E5; [0D 27 69, 05, 05]
-1F9F5; [0D 21 BB, 05, 05]
+1F9E6; [0D 27 70, 05, 05]
-1F9F6; [0D 21 C2, 05, 05]
+1F9E7; [0D 27 77, 05, 05]
-1F9F7; [0D 21 C9, 05, 05]
+1F9E8; [0D 27 7E, 05, 05]
-1F9F8; [0D 21 D0, 05, 05]
+1F9E9; [0D 27 85, 05, 05]
-1F9F9; [0D 21 D7, 05, 05]
+1F9EA; [0D 27 8C, 05, 05]
-1F9FA; [0D 21 DE, 05, 05]
+1F9EB; [0D 27 93, 05, 05]
-1F9FB; [0D 21 E5, 05, 05]
+1F9EC; [0D 27 9A, 05, 05]
-1F9FC; [0D 21 EC, 05, 05]
+1F9ED; [0D 27 A1, 05, 05]
-1F9FD; [0D 21 F3, 05, 05]
+1F9EE; [0D 27 A8, 05, 05]
-1F9FE; [0D 21 FA, 05, 05]
+1F9EF; [0D 27 AF, 05, 05]
-1F9FF; [0D 22 03, 05, 05]
+1F9F0; [0D 27 B6, 05, 05]
-1FA70; [0D 22 0A, 05, 05]
+1F9F1; [0D 27 BD, 05, 05]
-1FA71; [0D 22 11, 05, 05]
+1F9F2; [0D 27 C4, 05, 05]
-1FA72; [0D 22 18, 05, 05]
+1F9F3; [0D 27 CB, 05, 05]
-1FA73; [0D 22 1F, 05, 05]
+1F9F4; [0D 27 D2, 05, 05]
-1FA78; [0D 22 26, 05, 05]
+1F9F5; [0D 27 D9, 05, 05]
-1FA79; [0D 22 2D, 05, 05]
+1F9F6; [0D 27 E0, 05, 05]
-1FA7A; [0D 22 34, 05, 05]
+1F9F7; [0D 27 E7, 05, 05]
-1FA80; [0D 22 3B, 05, 05]
+1F9F8; [0D 27 EE, 05, 05]
-1FA81; [0D 22 42, 05, 05]
+1F9F9; [0D 27 F5, 05, 05]
-1FA82; [0D 22 49, 05, 05]
+1F9FA; [0D 27 FC, 05, 05]
-1FA90; [0D 22 50, 05, 05]
+1F9FB; [0D 28 05, 05, 05]
-1FA91; [0D 22 57, 05, 05]
+1F9FC; [0D 28 0C, 05, 05]
-1FA92; [0D 22 5E, 05, 05]
+1F9FD; [0D 28 13, 05, 05]
-1FA93; [0D 22 65, 05, 05]
+1F9FE; [0D 28 1A, 05, 05]
-1FA94; [0D 22 6C, 05, 05]
+1F9FF; [0D 28 21, 05, 05]
-1FA95; [0D 22 73, 05, 05]
+1FA70; [0D 28 28, 05, 05]
-1F600; [0D 22 7A, 05, 05]
+1FA71; [0D 28 2F, 05, 05]
-1F601; [0D 22 81, 05, 05]
+1FA72; [0D 28 36, 05, 05]
-1F602; [0D 22 88, 05, 05]
+1FA73; [0D 28 3D, 05, 05]
-1F603; [0D 22 8F, 05, 05]
+1FA74; [0D 28 44, 05, 05]
-1F604; [0D 22 96, 05, 05]
+1FA78; [0D 28 4B, 05, 05]
-1F605; [0D 22 9D, 05, 05]
+1FA79; [0D 28 52, 05, 05]
-1F606; [0D 22 A4, 05, 05]
+1FA7A; [0D 28 59, 05, 05]
-1F607; [0D 22 AB, 05, 05]
+1FA80; [0D 28 60, 05, 05]
-1F608; [0D 22 B2, 05, 05]
+1FA81; [0D 28 67, 05, 05]
-1F609; [0D 22 B9, 05, 05]
+1FA82; [0D 28 6E, 05, 05]
-1F60A; [0D 22 C0, 05, 05]
+1FA83; [0D 28 75, 05, 05]
-1F60B; [0D 22 C7, 05, 05]
+1FA84; [0D 28 7C, 05, 05]
-1F60C; [0D 22 CE, 05, 05]
+1FA85; [0D 28 83, 05, 05]
-1F60D; [0D 22 D5, 05, 05]
+1FA86; [0D 28 8A, 05, 05]
-1F60E; [0D 22 DC, 05, 05]
+1FA90; [0D 28 91, 05, 05]
-1F60F; [0D 22 E3, 05, 05]
+1FA91; [0D 28 98, 05, 05]
-1F610; [0D 22 EA, 05, 05]
+1FA92; [0D 28 9F, 05, 05]
-1F611; [0D 22 F1, 05, 05]
+1FA93; [0D 28 A6, 05, 05]
-1F612; [0D 22 F8, 05, 05]
+1FA94; [0D 28 AD, 05, 05]
-1F613; [0D 22 FF, 05, 05]
+1FA95; [0D 28 B4, 05, 05]
-1F614; [0D 23 08, 05, 05]
+1FA96; [0D 28 BB, 05, 05]
-1F615; [0D 23 0F, 05, 05]
+1FA97; [0D 28 C2, 05, 05]
-1F616; [0D 23 16, 05, 05]
+1FA98; [0D 28 C9, 05, 05]
-1F617; [0D 23 1D, 05, 05]
+1FA99; [0D 28 D0, 05, 05]
-1F618; [0D 23 24, 05, 05]
+1FA9A; [0D 28 D7, 05, 05]
-1F619; [0D 23 2B, 05, 05]
+1FA9B; [0D 28 DE, 05, 05]
-1F61A; [0D 23 32, 05, 05]
+1FA9C; [0D 28 E5, 05, 05]
-1F61B; [0D 23 39, 05, 05]
+1FA9D; [0D 28 EC, 05, 05]
-1F61C; [0D 23 40, 05, 05]
+1FA9E; [0D 28 F3, 05, 05]
-1F61D; [0D 23 47, 05, 05]
+1FA9F; [0D 28 FA, 05, 05]
-1F61E; [0D 23 4E, 05, 05]
+1FAA0; [0D 29 03, 05, 05]
-1F61F; [0D 23 55, 05, 05]
+1FAA1; [0D 29 0A, 05, 05]
-1F620; [0D 23 5C, 05, 05]
+1FAA2; [0D 29 11, 05, 05]
-1F621; [0D 23 63, 05, 05]
+1FAA3; [0D 29 18, 05, 05]
-1F622; [0D 23 6A, 05, 05]
+1FAA4; [0D 29 1F, 05, 05]
-1F623; [0D 23 71, 05, 05]
+1FAA5; [0D 29 26, 05, 05]
-1F624; [0D 23 78, 05, 05]
+1FAA6; [0D 29 2D, 05, 05]
-1F625; [0D 23 7F, 05, 05]
+1FAA7; [0D 29 34, 05, 05]
-1F626; [0D 23 86, 05, 05]
+1FAA8; [0D 29 3B, 05, 05]
-1F627; [0D 23 8D, 05, 05]
+1FAB0; [0D 29 42, 05, 05]
-1F628; [0D 23 94, 05, 05]
+1FAB1; [0D 29 49, 05, 05]
-1F629; [0D 23 9B, 05, 05]
+1FAB2; [0D 29 50, 05, 05]
-1F62A; [0D 23 A2, 05, 05]
+1FAB3; [0D 29 57, 05, 05]
-1F62B; [0D 23 A9, 05, 05]
+1FAB4; [0D 29 5E, 05, 05]
-1F62C; [0D 23 B0, 05, 05]
+1FAB5; [0D 29 65, 05, 05]
-1F62D; [0D 23 B7, 05, 05]
+1FAB6; [0D 29 6C, 05, 05]
-1F62E; [0D 23 BE, 05, 05]
+1FAC0; [0D 29 73, 05, 05]
-1F62F; [0D 23 C5, 05, 05]
+1FAC1; [0D 29 7A, 05, 05]
-1F630; [0D 23 CC, 05, 05]
+1FAC2; [0D 29 81, 05, 05]
-1F631; [0D 23 D3, 05, 05]
+1FAD0; [0D 29 88, 05, 05]
-1F632; [0D 23 DA, 05, 05]
+1FAD1; [0D 29 8F, 05, 05]
-1F633; [0D 23 E1, 05, 05]
+1FAD2; [0D 29 96, 05, 05]
-1F634; [0D 23 E8, 05, 05]
+1FAD3; [0D 29 9D, 05, 05]
-1F635; [0D 23 EF, 05, 05]
+1FAD4; [0D 29 A4, 05, 05]
-1F636; [0D 23 F6, 05, 05]
+1FAD5; [0D 29 AB, 05, 05]
-1F637; [0D 23 FD, 05, 05]
+1FAD6; [0D 29 B2, 05, 05]
-1F638; [0D 24 06, 05, 05]
+1F600; [0D 29 B9, 05, 05]
-1F639; [0D 24 0D, 05, 05]
+1F601; [0D 29 C0, 05, 05]
-1F63A; [0D 24 14, 05, 05]
+1F602; [0D 29 C7, 05, 05]
-1F63B; [0D 24 1B, 05, 05]
+1F603; [0D 29 CE, 05, 05]
-1F63C; [0D 24 22, 05, 05]
+1F604; [0D 29 D5, 05, 05]
-1F63D; [0D 24 29, 05, 05]
+1F605; [0D 29 DC, 05, 05]
-1F63E; [0D 24 30, 05, 05]
+1F606; [0D 29 E3, 05, 05]
-1F63F; [0D 24 37, 05, 05]
+1F607; [0D 29 EA, 05, 05]
-1F640; [0D 24 3E, 05, 05]
+1F608; [0D 29 F1, 05, 05]
-1F641; [0D 24 45, 05, 05]
+1F609; [0D 29 F8, 05, 05]
-1F642; [0D 24 4C, 05, 05]
+1F60A; [0D 29 FF, 05, 05]
-1F643; [0D 24 53, 05, 05]
+1F60B; [0D 2A 08, 05, 05]
-1F644; [0D 24 5A, 05, 05]
+1F60C; [0D 2A 0F, 05, 05]
-1F645; [0D 24 61, 05, 05]
+1F60D; [0D 2A 16, 05, 05]
-1F646; [0D 24 68, 05, 05]
+1F60E; [0D 2A 1D, 05, 05]
-1F647; [0D 24 6F, 05, 05]
+1F60F; [0D 2A 24, 05, 05]
-1F648; [0D 24 76, 05, 05]
+1F610; [0D 2A 2B, 05, 05]
-1F649; [0D 24 7D, 05, 05]
+1F611; [0D 2A 32, 05, 05]
-1F64A; [0D 24 84, 05, 05]
+1F612; [0D 2A 39, 05, 05]
-1F64B; [0D 24 8B, 05, 05]
+1F613; [0D 2A 40, 05, 05]
-1F64C; [0D 24 92, 05, 05]
+1F614; [0D 2A 47, 05, 05]
-1F64D; [0D 24 99, 05, 05]
+1F615; [0D 2A 4E, 05, 05]
-1F64E; [0D 24 A0, 05, 05]
+1F616; [0D 2A 55, 05, 05]
-1F64F; [0D 24 A7, 05, 05]
+1F617; [0D 2A 5C, 05, 05]
-1F650; [0D 24 AE, 05, 05]
+1F618; [0D 2A 63, 05, 05]
-1F651; [0D 24 B5, 05, 05]
+1F619; [0D 2A 6A, 05, 05]
-1F652; [0D 24 BC, 05, 05]
+1F61A; [0D 2A 71, 05, 05]
-1F653; [0D 24 C3, 05, 05]
+1F61B; [0D 2A 78, 05, 05]
-1F654; [0D 24 CA, 05, 05]
+1F61C; [0D 2A 7F, 05, 05]
-1F655; [0D 24 D1, 05, 05]
+1F61D; [0D 2A 86, 05, 05]
-1F656; [0D 24 D8, 05, 05]
+1F61E; [0D 2A 8D, 05, 05]
-1F657; [0D 24 DF, 05, 05]
+1F61F; [0D 2A 94, 05, 05]
-1F658; [0D 24 E6, 05, 05]
+1F620; [0D 2A 9B, 05, 05]
-1F659; [0D 24 ED, 05, 05]
+1F621; [0D 2A A2, 05, 05]
-1F65A; [0D 24 F4, 05, 05]
+1F622; [0D 2A A9, 05, 05]
-1F65B; [0D 24 FB, 05, 05]
+1F623; [0D 2A B0, 05, 05]
-1F65C; [0D 25 04, 05, 05]
+1F624; [0D 2A B7, 05, 05]
-1F65D; [0D 25 0B, 05, 05]
+1F625; [0D 2A BE, 05, 05]
-1F65E; [0D 25 12, 05, 05]
+1F626; [0D 2A C5, 05, 05]
-1F65F; [0D 25 19, 05, 05]
+1F627; [0D 2A CC, 05, 05]
-1F660; [0D 25 20, 05, 05]
+1F628; [0D 2A D3, 05, 05]
-1F661; [0D 25 27, 05, 05]
+1F629; [0D 2A DA, 05, 05]
-1F662; [0D 25 2E, 05, 05]
+1F62A; [0D 2A E1, 05, 05]
-1F663; [0D 25 35, 05, 05]
+1F62B; [0D 2A E8, 05, 05]
-1F664; [0D 25 3C, 05, 05]
+1F62C; [0D 2A EF, 05, 05]
-1F665; [0D 25 43, 05, 05]
+1F62D; [0D 2A F6, 05, 05]
-1F666; [0D 25 4A, 05, 05]
+1F62E; [0D 2A FD, 05, 05]
-1F667; [0D 25 51, 05, 05]
+1F62F; [0D 2B 06, 05, 05]
-1F668; [0D 25 58, 05, 05]
+1F630; [0D 2B 0D, 05, 05]
-1F669; [0D 25 5F, 05, 05]
+1F631; [0D 2B 14, 05, 05]
-1F66A; [0D 25 66, 05, 05]
+1F632; [0D 2B 1B, 05, 05]
-1F66B; [0D 25 6D, 05, 05]
+1F633; [0D 2B 22, 05, 05]
-1F66C; [0D 25 74, 05, 05]
+1F634; [0D 2B 29, 05, 05]
-1F66D; [0D 25 7B, 05, 05]
+1F635; [0D 2B 30, 05, 05]
-1F66E; [0D 25 82, 05, 05]
+1F636; [0D 2B 37, 05, 05]
-1F66F; [0D 25 89, 05, 05]
+1F637; [0D 2B 3E, 05, 05]
-1F670; [0D 25 90, 05, 05]
+1F638; [0D 2B 45, 05, 05]
-1F671; [0D 25 97, 05, 05]
+1F639; [0D 2B 4C, 05, 05]
-1F672; [0D 25 9E, 05, 05]
+1F63A; [0D 2B 53, 05, 05]
-1F673; [0D 25 A5, 05, 05]
+1F63B; [0D 2B 5A, 05, 05]
-1F674; [0D 25 AC, 05, 05]
+1F63C; [0D 2B 61, 05, 05]
-1F675; [0D 25 B3, 05, 05]
+1F63D; [0D 2B 68, 05, 05]
-1F676; [0D 25 BA, 05, 05]
+1F63E; [0D 2B 6F, 05, 05]
-1F677; [0D 25 C1, 05, 05]
+1F63F; [0D 2B 76, 05, 05]
-1F678; [0D 25 C8, 05, 05]
+1F640; [0D 2B 7D, 05, 05]
-1F679; [0D 25 CF, 05, 05]
+1F641; [0D 2B 84, 05, 05]
-1F67A; [0D 25 D6, 05, 05]
+1F642; [0D 2B 8B, 05, 05]
-1F67B; [0D 25 DD, 05, 05]
+1F643; [0D 2B 92, 05, 05]
-1F67C; [0D 25 E4, 05, 05]
+1F644; [0D 2B 99, 05, 05]
-1F67D; [0D 25 EB, 05, 05]
+1F645; [0D 2B A0, 05, 05]
-1F67E; [0D 25 F2, 05, 05]
+1F646; [0D 2B A7, 05, 05]
-1F67F; [0D 25 F9, 05, 05]
+1F647; [0D 2B AE, 05, 05]
-1F680; [0D 26 02, 05, 05]
+1F648; [0D 2B B5, 05, 05]
-1F681; [0D 26 09, 05, 05]
+1F649; [0D 2B BC, 05, 05]
-1F682; [0D 26 10, 05, 05]
+1F64A; [0D 2B C3, 05, 05]
-1F683; [0D 26 17, 05, 05]
+1F64B; [0D 2B CA, 05, 05]
-1F684; [0D 26 1E, 05, 05]
+1F64C; [0D 2B D1, 05, 05]
-1F685; [0D 26 25, 05, 05]
+1F64D; [0D 2B D8, 05, 05]
-1F686; [0D 26 2C, 05, 05]
+1F64E; [0D 2B DF, 05, 05]
-1F687; [0D 26 33, 05, 05]
+1F64F; [0D 2B E6, 05, 05]
-1F688; [0D 26 3A, 05, 05]
+1F650; [0D 2B ED, 05, 05]
-1F689; [0D 26 41, 05, 05]
+1F651; [0D 2B F4, 05, 05]
-1F68A; [0D 26 48, 05, 05]
+1F652; [0D 2B FB, 05, 05]
-1F68B; [0D 26 4F, 05, 05]
+1F653; [0D 2C 04, 05, 05]
-1F68C; [0D 26 56, 05, 05]
+1F654; [0D 2C 0B, 05, 05]
-1F68D; [0D 26 5D, 05, 05]
+1F655; [0D 2C 12, 05, 05]
-1F68E; [0D 26 64, 05, 05]
+1F656; [0D 2C 19, 05, 05]
-1F68F; [0D 26 6B, 05, 05]
+1F657; [0D 2C 20, 05, 05]
-1F690; [0D 26 72, 05, 05]
+1F658; [0D 2C 27, 05, 05]
-1F691; [0D 26 79, 05, 05]
+1F659; [0D 2C 2E, 05, 05]
-1F692; [0D 26 80, 05, 05]
+1F65A; [0D 2C 35, 05, 05]
-1F693; [0D 26 87, 05, 05]
+1F65B; [0D 2C 3C, 05, 05]
-1F694; [0D 26 8E, 05, 05]
+1F65C; [0D 2C 43, 05, 05]
-1F695; [0D 26 95, 05, 05]
+1F65D; [0D 2C 4A, 05, 05]
-1F696; [0D 26 9C, 05, 05]
+1F65E; [0D 2C 51, 05, 05]
-1F697; [0D 26 A3, 05, 05]
+1F65F; [0D 2C 58, 05, 05]
-1F698; [0D 26 AA, 05, 05]
+1F660; [0D 2C 5F, 05, 05]
-1F699; [0D 26 B1, 05, 05]
+1F661; [0D 2C 66, 05, 05]
-1F69A; [0D 26 B8, 05, 05]
+1F662; [0D 2C 6D, 05, 05]
-1F69B; [0D 26 BF, 05, 05]
+1F663; [0D 2C 74, 05, 05]
-1F69C; [0D 26 C6, 05, 05]
+1F664; [0D 2C 7B, 05, 05]
-1F69D; [0D 26 CD, 05, 05]
+1F665; [0D 2C 82, 05, 05]
-1F69E; [0D 26 D4, 05, 05]
+1F666; [0D 2C 89, 05, 05]
-1F69F; [0D 26 DB, 05, 05]
+1F667; [0D 2C 90, 05, 05]
-1F6A0; [0D 26 E2, 05, 05]
+1F668; [0D 2C 97, 05, 05]
-1F6A1; [0D 26 E9, 05, 05]
+1F669; [0D 2C 9E, 05, 05]
-1F6A2; [0D 26 F0, 05, 05]
+1F66A; [0D 2C A5, 05, 05]
-1F6A3; [0D 26 F7, 05, 05]
+1F66B; [0D 2C AC, 05, 05]
-1F6A4; [0D 26 FE, 05, 05]
+1F66C; [0D 2C B3, 05, 05]
-1F6A5; [0D 27 07, 05, 05]
+1F66D; [0D 2C BA, 05, 05]
-1F6A6; [0D 27 0E, 05, 05]
+1F66E; [0D 2C C1, 05, 05]
-1F6A7; [0D 27 15, 05, 05]
+1F66F; [0D 2C C8, 05, 05]
-1F6A8; [0D 27 1C, 05, 05]
+1F670; [0D 2C CF, 05, 05]
-1F6A9; [0D 27 23, 05, 05]
+1F671; [0D 2C D6, 05, 05]
-1F6AA; [0D 27 2A, 05, 05]
+1F672; [0D 2C DD, 05, 05]
-1F6AB; [0D 27 31, 05, 05]
+1F673; [0D 2C E4, 05, 05]
-1F6AC; [0D 27 38, 05, 05]
+1F674; [0D 2C EB, 05, 05]
-1F6AD; [0D 27 3F, 05, 05]
+1F675; [0D 2C F2, 05, 05]
-1F6AE; [0D 27 46, 05, 05]
+1F676; [0D 2C F9, 05, 05]
-1F6AF; [0D 27 4D, 05, 05]
+1F677; [0D 2D 02, 05, 05]
-1F6B0; [0D 27 54, 05, 05]
+1F678; [0D 2D 09, 05, 05]
-1F6B1; [0D 27 5B, 05, 05]
+1F679; [0D 2D 10, 05, 05]
-1F6B2; [0D 27 62, 05, 05]
+1F67A; [0D 2D 17, 05, 05]
-1F6B3; [0D 27 69, 05, 05]
+1F67B; [0D 2D 1E, 05, 05]
-1F6B4; [0D 27 70, 05, 05]
+1F67C; [0D 2D 25, 05, 05]
-1F6B5; [0D 27 77, 05, 05]
+1F67D; [0D 2D 2C, 05, 05]
-1F6B6; [0D 27 7E, 05, 05]
+1F67E; [0D 2D 33, 05, 05]
-1F6B7; [0D 27 85, 05, 05]
+1F67F; [0D 2D 3A, 05, 05]
-1F6B8; [0D 27 8C, 05, 05]
+1F680; [0D 2D 41, 05, 05]
-1F6B9; [0D 27 93, 05, 05]
+1F681; [0D 2D 48, 05, 05]
-1F6BA; [0D 27 9A, 05, 05]
+1F682; [0D 2D 4F, 05, 05]
-1F6BB; [0D 27 A1, 05, 05]
+1F683; [0D 2D 56, 05, 05]
-1F6BC; [0D 27 A8, 05, 05]
+1F684; [0D 2D 5D, 05, 05]
-1F6BD; [0D 27 AF, 05, 05]
+1F685; [0D 2D 64, 05, 05]
-1F6BE; [0D 27 B6, 05, 05]
+1F686; [0D 2D 6B, 05, 05]
-1F6BF; [0D 27 BD, 05, 05]
+1F687; [0D 2D 72, 05, 05]
-1F6C0; [0D 27 C4, 05, 05]
+1F688; [0D 2D 79, 05, 05]
-1F6C1; [0D 27 CB, 05, 05]
+1F689; [0D 2D 80, 05, 05]
-1F6C2; [0D 27 D2, 05, 05]
+1F68A; [0D 2D 87, 05, 05]
-1F6C3; [0D 27 D9, 05, 05]
+1F68B; [0D 2D 8E, 05, 05]
-1F6C4; [0D 27 E0, 05, 05]
+1F68C; [0D 2D 95, 05, 05]
-1F6C5; [0D 27 E7, 05, 05]
+1F68D; [0D 2D 9C, 05, 05]
-1F6C6; [0D 27 EE, 05, 05]
+1F68E; [0D 2D A3, 05, 05]
-1F6C7; [0D 27 F5, 05, 05]
+1F68F; [0D 2D AA, 05, 05]
-1F6C8; [0D 27 FC, 05, 05]
+1F690; [0D 2D B1, 05, 05]
-1F6C9; [0D 28 05, 05, 05]
+1F691; [0D 2D B8, 05, 05]
-1F6CA; [0D 28 0C, 05, 05]
+1F692; [0D 2D BF, 05, 05]
-1F6CB; [0D 28 13, 05, 05]
+1F693; [0D 2D C6, 05, 05]
-1F6CC; [0D 28 1A, 05, 05]
+1F694; [0D 2D CD, 05, 05]
-1F6CD; [0D 28 21, 05, 05]
+1F695; [0D 2D D4, 05, 05]
-1F6CE; [0D 28 28, 05, 05]
+1F696; [0D 2D DB, 05, 05]
-1F6CF; [0D 28 2F, 05, 05]
+1F697; [0D 2D E2, 05, 05]
-1F6D0; [0D 28 36, 05, 05]
+1F698; [0D 2D E9, 05, 05]
-1F6D1; [0D 28 3D, 05, 05]
+1F699; [0D 2D F0, 05, 05]
-1F6D2; [0D 28 44, 05, 05]
+1F69A; [0D 2D F7, 05, 05]
-1F6D3; [0D 28 4B, 05, 05]
+1F69B; [0D 2D FE, 05, 05]
-1F6D4; [0D 28 52, 05, 05]
+1F69C; [0D 2E 07, 05, 05]
-1F6D5; [0D 28 59, 05, 05]
+1F69D; [0D 2E 0E, 05, 05]
-1F6E0; [0D 28 60, 05, 05]
+1F69E; [0D 2E 15, 05, 05]
-1F6E1; [0D 28 67, 05, 05]
+1F69F; [0D 2E 1C, 05, 05]
-1F6E2; [0D 28 6E, 05, 05]
+1F6A0; [0D 2E 23, 05, 05]
-1F6E3; [0D 28 75, 05, 05]
+1F6A1; [0D 2E 2A, 05, 05]
-1F6E4; [0D 28 7C, 05, 05]
+1F6A2; [0D 2E 31, 05, 05]
-1F6E5; [0D 28 83, 05, 05]
+1F6A3; [0D 2E 38, 05, 05]
-1F6E6; [0D 28 8A, 05, 05]
+1F6A4; [0D 2E 3F, 05, 05]
-1F6E7; [0D 28 91, 05, 05]
+1F6A5; [0D 2E 46, 05, 05]
-1F6E8; [0D 28 98, 05, 05]
+1F6A6; [0D 2E 4D, 05, 05]
-1F6E9; [0D 28 9F, 05, 05]
+1F6A7; [0D 2E 54, 05, 05]
-1F6EA; [0D 28 A6, 05, 05]
+1F6A8; [0D 2E 5B, 05, 05]
-1F6EB; [0D 28 AD, 05, 05]
+1F6A9; [0D 2E 62, 05, 05]
-1F6EC; [0D 28 B4, 05, 05]
+1F6AA; [0D 2E 69, 05, 05]
-1F6F0; [0D 28 BB, 05, 05]
+1F6AB; [0D 2E 70, 05, 05]
-1F6F1; [0D 28 C2, 05, 05]
+1F6AC; [0D 2E 77, 05, 05]
-1F6F2; [0D 28 C9, 05, 05]
+1F6AD; [0D 2E 7E, 05, 05]
-1F6F3; [0D 28 D0, 05, 05]
+1F6AE; [0D 2E 85, 05, 05]
-1F6F4; [0D 28 D7, 05, 05]
+1F6AF; [0D 2E 8C, 05, 05]
-1F6F5; [0D 28 DE, 05, 05]
+1F6B0; [0D 2E 93, 05, 05]
-1F6F6; [0D 28 E5, 05, 05]
+1F6B1; [0D 2E 9A, 05, 05]
-1F6F7; [0D 28 EC, 05, 05]
+1F6B2; [0D 2E A1, 05, 05]
-1F6F8; [0D 28 F3, 05, 05]
+1F6B3; [0D 2E A8, 05, 05]
-1F6F9; [0D 28 FA, 05, 05]
+1F6B4; [0D 2E AF, 05, 05]
-1F6FA; [0D 29 03, 05, 05]
+1F6B5; [0D 2E B6, 05, 05]
-1F700; [0D 29 0A, 05, 05]
+1F6B6; [0D 2E BD, 05, 05]
-1F701; [0D 29 11, 05, 05]
+1F6B7; [0D 2E C4, 05, 05]
-1F702; [0D 29 18, 05, 05]
+1F6B8; [0D 2E CB, 05, 05]
-1F703; [0D 29 1F, 05, 05]
+1F6B9; [0D 2E D2, 05, 05]
-1F704; [0D 29 26, 05, 05]
+1F6BA; [0D 2E D9, 05, 05]
-1F705; [0D 29 2D, 05, 05]
+1F6BB; [0D 2E E0, 05, 05]
-1F706; [0D 29 34, 05, 05]
+1F6BC; [0D 2E E7, 05, 05]
-1F707; [0D 29 3B, 05, 05]
+1F6BD; [0D 2E EE, 05, 05]
-1F708; [0D 29 42, 05, 05]
+1F6BE; [0D 2E F5, 05, 05]
-1F709; [0D 29 49, 05, 05]
+1F6BF; [0D 2E FC, 05, 05]
-1F70A; [0D 29 50, 05, 05]
+1F6C0; [0D 2F 05, 05, 05]
-1F70B; [0D 29 57, 05, 05]
+1F6C1; [0D 2F 0C, 05, 05]
-1F70C; [0D 29 5E, 05, 05]
+1F6C2; [0D 2F 13, 05, 05]
-1F70D; [0D 29 65, 05, 05]
+1F6C3; [0D 2F 1A, 05, 05]
-1F70E; [0D 29 6C, 05, 05]
+1F6C4; [0D 2F 21, 05, 05]
-1F70F; [0D 29 73, 05, 05]
+1F6C5; [0D 2F 28, 05, 05]
-1F710; [0D 29 7A, 05, 05]
+1F6C6; [0D 2F 2F, 05, 05]
-1F711; [0D 29 81, 05, 05]
+1F6C7; [0D 2F 36, 05, 05]
-1F712; [0D 29 88, 05, 05]
+1F6C8; [0D 2F 3D, 05, 05]
-1F713; [0D 29 8F, 05, 05]
+1F6C9; [0D 2F 44, 05, 05]
-1F714; [0D 29 96, 05, 05]
+1F6CA; [0D 2F 4B, 05, 05]
-1F715; [0D 29 9D, 05, 05]
+1F6CB; [0D 2F 52, 05, 05]
-1F716; [0D 29 A4, 05, 05]
+1F6CC; [0D 2F 59, 05, 05]
-1F717; [0D 29 AB, 05, 05]
+1F6CD; [0D 2F 60, 05, 05]
-1F718; [0D 29 B2, 05, 05]
+1F6CE; [0D 2F 67, 05, 05]
-1F719; [0D 29 B9, 05, 05]
+1F6CF; [0D 2F 6E, 05, 05]
-1F71A; [0D 29 C0, 05, 05]
+1F6D0; [0D 2F 75, 05, 05]
-1F71B; [0D 29 C7, 05, 05]
+1F6D1; [0D 2F 7C, 05, 05]
-1F71C; [0D 29 CE, 05, 05]
+1F6D2; [0D 2F 83, 05, 05]
-1F71D; [0D 29 D5, 05, 05]
+1F6D3; [0D 2F 8A, 05, 05]
-1F71E; [0D 29 DC, 05, 05]
+1F6D4; [0D 2F 91, 05, 05]
-1F71F; [0D 29 E3, 05, 05]
+1F6D5; [0D 2F 98, 05, 05]
-1F720; [0D 29 EA, 05, 05]
+1F6D6; [0D 2F 9F, 05, 05]
-1F721; [0D 29 F1, 05, 05]
+1F6D7; [0D 2F A6, 05, 05]
-1F722; [0D 29 F8, 05, 05]
+1F6E0; [0D 2F AD, 05, 05]
-1F723; [0D 29 FF, 05, 05]
+1F6E1; [0D 2F B4, 05, 05]
-1F724; [0D 2A 08, 05, 05]
+1F6E2; [0D 2F BB, 05, 05]
-1F725; [0D 2A 0F, 05, 05]
+1F6E3; [0D 2F C2, 05, 05]
-1F726; [0D 2A 16, 05, 05]
+1F6E4; [0D 2F C9, 05, 05]
-1F727; [0D 2A 1D, 05, 05]
+1F6E5; [0D 2F D0, 05, 05]
-1F728; [0D 2A 24, 05, 05]
+1F6E6; [0D 2F D7, 05, 05]
-1F729; [0D 2A 2B, 05, 05]
+1F6E7; [0D 2F DE, 05, 05]
-1F72A; [0D 2A 32, 05, 05]
+1F6E8; [0D 2F E5, 05, 05]
-1F72B; [0D 2A 39, 05, 05]
+1F6E9; [0D 2F EC, 05, 05]
-1F72C; [0D 2A 40, 05, 05]
+1F6EA; [0D 2F F3, 05, 05]
-1F72D; [0D 2A 47, 05, 05]
+1F6EB; [0D 2F FA, 05, 05]
-1F72E; [0D 2A 4E, 05, 05]
+1F6EC; [0D 30 03, 05, 05]
-1F72F; [0D 2A 55, 05, 05]
+1F6F0; [0D 30 0A, 05, 05]
-1F730; [0D 2A 5C, 05, 05]
+1F6F1; [0D 30 11, 05, 05]
-1F731; [0D 2A 63, 05, 05]
+1F6F2; [0D 30 18, 05, 05]
-1F732; [0D 2A 6A, 05, 05]
+1F6F3; [0D 30 1F, 05, 05]
-1F733; [0D 2A 71, 05, 05]
+1F6F4; [0D 30 26, 05, 05]
-1F734; [0D 2A 78, 05, 05]
+1F6F5; [0D 30 2D, 05, 05]
-1F735; [0D 2A 7F, 05, 05]
+1F6F6; [0D 30 34, 05, 05]
-1F736; [0D 2A 86, 05, 05]
+1F6F7; [0D 30 3B, 05, 05]
-1F737; [0D 2A 8D, 05, 05]
+1F6F8; [0D 30 42, 05, 05]
-1F738; [0D 2A 94, 05, 05]
+1F6F9; [0D 30 49, 05, 05]
-1F739; [0D 2A 9B, 05, 05]
+1F6FA; [0D 30 50, 05, 05]
-1F73A; [0D 2A A2, 05, 05]
+1F6FB; [0D 30 57, 05, 05]
-1F73B; [0D 2A A9, 05, 05]
+1F6FC; [0D 30 5E, 05, 05]
-1F73C; [0D 2A B0, 05, 05]
+1F700; [0D 30 65, 05, 05]
-1F73D; [0D 2A B7, 05, 05]
+1F701; [0D 30 6C, 05, 05]
-1F73E; [0D 2A BE, 05, 05]
+1F702; [0D 30 73, 05, 05]
-1F73F; [0D 2A C5, 05, 05]
+1F703; [0D 30 7A, 05, 05]
-1F740; [0D 2A CC, 05, 05]
+1F704; [0D 30 81, 05, 05]
-1F741; [0D 2A D3, 05, 05]
+1F705; [0D 30 88, 05, 05]
-1F742; [0D 2A DA, 05, 05]
+1F706; [0D 30 8F, 05, 05]
-1F743; [0D 2A E1, 05, 05]
+1F707; [0D 30 96, 05, 05]
-1F744; [0D 2A E8, 05, 05]
+1F708; [0D 30 9D, 05, 05]
-1F745; [0D 2A EF, 05, 05]
+1F709; [0D 30 A4, 05, 05]
-1F746; [0D 2A F6, 05, 05]
+1F70A; [0D 30 AB, 05, 05]
-1F747; [0D 2A FD, 05, 05]
+1F70B; [0D 30 B2, 05, 05]
-1F748; [0D 2B 06, 05, 05]
+1F70C; [0D 30 B9, 05, 05]
-1F749; [0D 2B 0D, 05, 05]
+1F70D; [0D 30 C0, 05, 05]
-1F74A; [0D 2B 14, 05, 05]
+1F70E; [0D 30 C7, 05, 05]
-1F74B; [0D 2B 1B, 05, 05]
+1F70F; [0D 30 CE, 05, 05]
-1F74C; [0D 2B 22, 05, 05]
+1F710; [0D 30 D5, 05, 05]
-1F74D; [0D 2B 29, 05, 05]
+1F711; [0D 30 DC, 05, 05]
-1F74E; [0D 2B 30, 05, 05]
+1F712; [0D 30 E3, 05, 05]
-1F74F; [0D 2B 37, 05, 05]
+1F713; [0D 30 EA, 05, 05]
-1F750; [0D 2B 3E, 05, 05]
+1F714; [0D 30 F1, 05, 05]
-1F751; [0D 2B 45, 05, 05]
+1F715; [0D 30 F8, 05, 05]
-1F752; [0D 2B 4C, 05, 05]
+1F716; [0D 30 FF, 05, 05]
-1F753; [0D 2B 53, 05, 05]
+1F717; [0D 31 08, 05, 05]
-1F754; [0D 2B 5A, 05, 05]
+1F718; [0D 31 0F, 05, 05]
-1F755; [0D 2B 61, 05, 05]
+1F719; [0D 31 16, 05, 05]
-1F756; [0D 2B 68, 05, 05]
+1F71A; [0D 31 1D, 05, 05]
-1F757; [0D 2B 6F, 05, 05]
+1F71B; [0D 31 24, 05, 05]
-1F758; [0D 2B 76, 05, 05]
+1F71C; [0D 31 2B, 05, 05]
-1F759; [0D 2B 7D, 05, 05]
+1F71D; [0D 31 32, 05, 05]
-1F75A; [0D 2B 84, 05, 05]
+1F71E; [0D 31 39, 05, 05]
-1F75B; [0D 2B 8B, 05, 05]
+1F71F; [0D 31 40, 05, 05]
-1F75C; [0D 2B 92, 05, 05]
+1F720; [0D 31 47, 05, 05]
-1F75D; [0D 2B 99, 05, 05]
+1F721; [0D 31 4E, 05, 05]
-1F75E; [0D 2B A0, 05, 05]
+1F722; [0D 31 55, 05, 05]
-1F75F; [0D 2B A7, 05, 05]
+1F723; [0D 31 5C, 05, 05]
-1F760; [0D 2B AE, 05, 05]
+1F724; [0D 31 63, 05, 05]
-1F761; [0D 2B B5, 05, 05]
+1F725; [0D 31 6A, 05, 05]
-1F762; [0D 2B BC, 05, 05]
+1F726; [0D 31 71, 05, 05]
-1F763; [0D 2B C3, 05, 05]
+1F727; [0D 31 78, 05, 05]
-1F764; [0D 2B CA, 05, 05]
+1F728; [0D 31 7F, 05, 05]
-1F765; [0D 2B D1, 05, 05]
+1F729; [0D 31 86, 05, 05]
-1F766; [0D 2B D8, 05, 05]
+1F72A; [0D 31 8D, 05, 05]
-1F767; [0D 2B DF, 05, 05]
+1F72B; [0D 31 94, 05, 05]
-1F768; [0D 2B E6, 05, 05]
+1F72C; [0D 31 9B, 05, 05]
-1F769; [0D 2B ED, 05, 05]
+1F72D; [0D 31 A2, 05, 05]
-1F76A; [0D 2B F4, 05, 05]
+1F72E; [0D 31 A9, 05, 05]
-1F76B; [0D 2B FB, 05, 05]
+1F72F; [0D 31 B0, 05, 05]
-1F76C; [0D 2C 04, 05, 05]
+1F730; [0D 31 B7, 05, 05]
-1F76D; [0D 2C 0B, 05, 05]
+1F731; [0D 31 BE, 05, 05]
-1F76E; [0D 2C 12, 05, 05]
+1F732; [0D 31 C5, 05, 05]
-1F76F; [0D 2C 19, 05, 05]
+1F733; [0D 31 CC, 05, 05]
-1F770; [0D 2C 20, 05, 05]
+1F734; [0D 31 D3, 05, 05]
-1F771; [0D 2C 27, 05, 05]
+1F735; [0D 31 DA, 05, 05]
-1F772; [0D 2C 2E, 05, 05]
+1F736; [0D 31 E1, 05, 05]
-1F773; [0D 2C 35, 05, 05]
+1F737; [0D 31 E8, 05, 05]
-1F780; [0D 2C 3C, 05, 05]
+1F738; [0D 31 EF, 05, 05]
-1F781; [0D 2C 43, 05, 05]
+1F739; [0D 31 F6, 05, 05]
-1F782; [0D 2C 4A, 05, 05]
+1F73A; [0D 31 FD, 05, 05]
-1F783; [0D 2C 51, 05, 05]
+1F73B; [0D 32 06, 05, 05]
-1F784; [0D 2C 58, 05, 05]
+1F73C; [0D 32 0D, 05, 05]
-1F785; [0D 2C 5F, 05, 05]
+1F73D; [0D 32 14, 05, 05]
-1F786; [0D 2C 66, 05, 05]
+1F73E; [0D 32 1B, 05, 05]
-1F787; [0D 2C 6D, 05, 05]
+1F73F; [0D 32 22, 05, 05]
-1F788; [0D 2C 74, 05, 05]
+1F740; [0D 32 29, 05, 05]
-1F789; [0D 2C 7B, 05, 05]
+1F741; [0D 32 30, 05, 05]
-1F78A; [0D 2C 82, 05, 05]
+1F742; [0D 32 37, 05, 05]
-1F78B; [0D 2C 89, 05, 05]
+1F743; [0D 32 3E, 05, 05]
-1F78C; [0D 2C 90, 05, 05]
+1F744; [0D 32 45, 05, 05]
-1F78D; [0D 2C 97, 05, 05]
+1F745; [0D 32 4C, 05, 05]
-1F78E; [0D 2C 9E, 05, 05]
+1F746; [0D 32 53, 05, 05]
-1F78F; [0D 2C A5, 05, 05]
+1F747; [0D 32 5A, 05, 05]
-1F790; [0D 2C AC, 05, 05]
+1F748; [0D 32 61, 05, 05]
-1F791; [0D 2C B3, 05, 05]
+1F749; [0D 32 68, 05, 05]
-1F792; [0D 2C BA, 05, 05]
+1F74A; [0D 32 6F, 05, 05]
-1F793; [0D 2C C1, 05, 05]
+1F74B; [0D 32 76, 05, 05]
-1F794; [0D 2C C8, 05, 05]
+1F74C; [0D 32 7D, 05, 05]
-1F795; [0D 2C CF, 05, 05]
+1F74D; [0D 32 84, 05, 05]
-1F796; [0D 2C D6, 05, 05]
+1F74E; [0D 32 8B, 05, 05]
-1F797; [0D 2C DD, 05, 05]
+1F74F; [0D 32 92, 05, 05]
-1F798; [0D 2C E4, 05, 05]
+1F750; [0D 32 99, 05, 05]
-1F799; [0D 2C EB, 05, 05]
+1F751; [0D 32 A0, 05, 05]
-1F79A; [0D 2C F2, 05, 05]
+1F752; [0D 32 A7, 05, 05]
-1F79B; [0D 2C F9, 05, 05]
+1F753; [0D 32 AE, 05, 05]
-1F79C; [0D 2D 02, 05, 05]
+1F754; [0D 32 B5, 05, 05]
-1F79D; [0D 2D 09, 05, 05]
+1F755; [0D 32 BC, 05, 05]
-1F79E; [0D 2D 10, 05, 05]
+1F756; [0D 32 C3, 05, 05]
-1F79F; [0D 2D 17, 05, 05]
+1F757; [0D 32 CA, 05, 05]
-1F7A0; [0D 2D 1E, 05, 05]
+1F758; [0D 32 D1, 05, 05]
-1F7A1; [0D 2D 25, 05, 05]
+1F759; [0D 32 D8, 05, 05]
-1F7A2; [0D 2D 2C, 05, 05]
+1F75A; [0D 32 DF, 05, 05]
-1F7A3; [0D 2D 33, 05, 05]
+1F75B; [0D 32 E6, 05, 05]
-1F7A4; [0D 2D 3A, 05, 05]
+1F75C; [0D 32 ED, 05, 05]
-1F7A5; [0D 2D 41, 05, 05]
+1F75D; [0D 32 F4, 05, 05]
-1F7A6; [0D 2D 48, 05, 05]
+1F75E; [0D 32 FB, 05, 05]
-1F7A7; [0D 2D 4F, 05, 05]
+1F75F; [0D 33 04, 05, 05]
-1F7A8; [0D 2D 56, 05, 05]
+1F760; [0D 33 0B, 05, 05]
-1F7A9; [0D 2D 5D, 05, 05]
+1F761; [0D 33 12, 05, 05]
-1F7AA; [0D 2D 64, 05, 05]
+1F762; [0D 33 19, 05, 05]
-1F7AB; [0D 2D 6B, 05, 05]
+1F763; [0D 33 20, 05, 05]
-1F7AC; [0D 2D 72, 05, 05]
+1F764; [0D 33 27, 05, 05]
-1F7AD; [0D 2D 79, 05, 05]
+1F765; [0D 33 2E, 05, 05]
-1F7AE; [0D 2D 80, 05, 05]
+1F766; [0D 33 35, 05, 05]
-1F7AF; [0D 2D 87, 05, 05]
+1F767; [0D 33 3C, 05, 05]
-1F7B0; [0D 2D 8E, 05, 05]
+1F768; [0D 33 43, 05, 05]
-1F7B1; [0D 2D 95, 05, 05]
+1F769; [0D 33 4A, 05, 05]
-1F7B2; [0D 2D 9C, 05, 05]
+1F76A; [0D 33 51, 05, 05]
-1F7B3; [0D 2D A3, 05, 05]
+1F76B; [0D 33 58, 05, 05]
-1F7B4; [0D 2D AA, 05, 05]
+1F76C; [0D 33 5F, 05, 05]
-1F7B5; [0D 2D B1, 05, 05]
+1F76D; [0D 33 66, 05, 05]
-1F7B6; [0D 2D B8, 05, 05]
+1F76E; [0D 33 6D, 05, 05]
-1F7B7; [0D 2D BF, 05, 05]
+1F76F; [0D 33 74, 05, 05]
-1F7B8; [0D 2D C6, 05, 05]
+1F770; [0D 33 7B, 05, 05]
-1F7B9; [0D 2D CD, 05, 05]
+1F771; [0D 33 82, 05, 05]
-1F7BA; [0D 2D D4, 05, 05]
+1F772; [0D 33 89, 05, 05]
-1F7BB; [0D 2D DB, 05, 05]
+1F773; [0D 33 90, 05, 05]
-1F7BC; [0D 2D E2, 05, 05]
+1F780; [0D 33 97, 05, 05]
-1F7BD; [0D 2D E9, 05, 05]
+1F781; [0D 33 9E, 05, 05]
-1F7BE; [0D 2D F0, 05, 05]
+1F782; [0D 33 A5, 05, 05]
-1F7BF; [0D 2D F7, 05, 05]
+1F783; [0D 33 AC, 05, 05]
-1F7C0; [0D 2D FE, 05, 05]
+1F784; [0D 33 B3, 05, 05]
-1F7C1; [0D 2E 07, 05, 05]
+1F785; [0D 33 BA, 05, 05]
-1F7C2; [0D 2E 0E, 05, 05]
+1F786; [0D 33 C1, 05, 05]
-1F7C3; [0D 2E 15, 05, 05]
+1F787; [0D 33 C8, 05, 05]
-1F7C4; [0D 2E 1C, 05, 05]
+1F788; [0D 33 CF, 05, 05]
-1F7C5; [0D 2E 23, 05, 05]
+1F789; [0D 33 D6, 05, 05]
-1F7C6; [0D 2E 2A, 05, 05]
+1F78A; [0D 33 DD, 05, 05]
-1F7C7; [0D 2E 31, 05, 05]
+1F78B; [0D 33 E4, 05, 05]
-1F7C8; [0D 2E 38, 05, 05]
+1F78C; [0D 33 EB, 05, 05]
-1F7C9; [0D 2E 3F, 05, 05]
+1F78D; [0D 33 F2, 05, 05]
-1F7CA; [0D 2E 46, 05, 05]
+1F78E; [0D 33 F9, 05, 05]
-1F7CB; [0D 2E 4D, 05, 05]
+1F78F; [0D 34 02, 05, 05]
-1F7CC; [0D 2E 54, 05, 05]
+1F790; [0D 34 09, 05, 05]
-1F7CD; [0D 2E 5B, 05, 05]
+1F791; [0D 34 10, 05, 05]
-1F7CE; [0D 2E 62, 05, 05]
+1F792; [0D 34 17, 05, 05]
-1F7CF; [0D 2E 69, 05, 05]
+1F793; [0D 34 1E, 05, 05]
-1F7D0; [0D 2E 70, 05, 05]
+1F794; [0D 34 25, 05, 05]
-1F7D1; [0D 2E 77, 05, 05]
+1F795; [0D 34 2C, 05, 05]
-1F7D2; [0D 2E 7E, 05, 05]
+1F796; [0D 34 33, 05, 05]
-1F7D3; [0D 2E 85, 05, 05]
+1F797; [0D 34 3A, 05, 05]
-1F7D4; [0D 2E 8C, 05, 05]
+1F798; [0D 34 41, 05, 05]
-1F7D5; [0D 2E 93, 05, 05]
+1F799; [0D 34 48, 05, 05]
-1F7D6; [0D 2E 9A, 05, 05]
+1F79A; [0D 34 4F, 05, 05]
-1F7D7; [0D 2E A1, 05, 05]
+1F79B; [0D 34 56, 05, 05]
-1F7D8; [0D 2E A8, 05, 05]
+1F79C; [0D 34 5D, 05, 05]
-1F7E0; [0D 2E AF, 05, 05]
+1F79D; [0D 34 64, 05, 05]
-1F7E1; [0D 2E B6, 05, 05]
+1F79E; [0D 34 6B, 05, 05]
-1F7E2; [0D 2E BD, 05, 05]
+1F79F; [0D 34 72, 05, 05]
-1F7E3; [0D 2E C4, 05, 05]
+1F7A0; [0D 34 79, 05, 05]
-1F7E4; [0D 2E CB, 05, 05]
+1F7A1; [0D 34 80, 05, 05]
-1F7E5; [0D 2E D2, 05, 05]
+1F7A2; [0D 34 87, 05, 05]
-1F7E6; [0D 2E D9, 05, 05]
+1F7A3; [0D 34 8E, 05, 05]
-1F7E7; [0D 2E E0, 05, 05]
+1F7A4; [0D 34 95, 05, 05]
-1F7E8; [0D 2E E7, 05, 05]
+1F7A5; [0D 34 9C, 05, 05]
-1F7E9; [0D 2E EE, 05, 05]
+1F7A6; [0D 34 A3, 05, 05]
-1F7EA; [0D 2E F5, 05, 05]
+1F7A7; [0D 34 AA, 05, 05]
-1F7EB; [0D 2E FC, 05, 05]
+1F7A8; [0D 34 B1, 05, 05]
-1F800; [0D 2F 05, 05, 05]
+1F7A9; [0D 34 B8, 05, 05]
-1F801; [0D 2F 0C, 05, 05]
+1F7AA; [0D 34 BF, 05, 05]
-1F802; [0D 2F 13, 05, 05]
+1F7AB; [0D 34 C6, 05, 05]
-1F803; [0D 2F 1A, 05, 05]
+1F7AC; [0D 34 CD, 05, 05]
-1F804; [0D 2F 21, 05, 05]
+1F7AD; [0D 34 D4, 05, 05]
-1F805; [0D 2F 28, 05, 05]
+1F7AE; [0D 34 DB, 05, 05]
-1F806; [0D 2F 2F, 05, 05]
+1F7AF; [0D 34 E2, 05, 05]
-1F807; [0D 2F 36, 05, 05]
+1F7B0; [0D 34 E9, 05, 05]
-1F808; [0D 2F 3D, 05, 05]
+1F7B1; [0D 34 F0, 05, 05]
-1F809; [0D 2F 44, 05, 05]
+1F7B2; [0D 34 F7, 05, 05]
-1F80A; [0D 2F 4B, 05, 05]
+1F7B3; [0D 34 FE, 05, 05]
-1F80B; [0D 2F 52, 05, 05]
+1F7B4; [0D 35 07, 05, 05]
-1F810; [0D 2F 59, 05, 05]
+1F7B5; [0D 35 0E, 05, 05]
-1F811; [0D 2F 60, 05, 05]
+1F7B6; [0D 35 15, 05, 05]
-1F812; [0D 2F 67, 05, 05]
+1F7B7; [0D 35 1C, 05, 05]
-1F813; [0D 2F 6E, 05, 05]
+1F7B8; [0D 35 23, 05, 05]
-1F814; [0D 2F 75, 05, 05]
+1F7B9; [0D 35 2A, 05, 05]
-1F815; [0D 2F 7C, 05, 05]
+1F7BA; [0D 35 31, 05, 05]
-1F816; [0D 2F 83, 05, 05]
+1F7BB; [0D 35 38, 05, 05]
-1F817; [0D 2F 8A, 05, 05]
+1F7BC; [0D 35 3F, 05, 05]
-1F818; [0D 2F 91, 05, 05]
+1F7BD; [0D 35 46, 05, 05]
-1F819; [0D 2F 98, 05, 05]
+1F7BE; [0D 35 4D, 05, 05]
-1F81A; [0D 2F 9F, 05, 05]
+1F7BF; [0D 35 54, 05, 05]
-1F81B; [0D 2F A6, 05, 05]
+1F7C0; [0D 35 5B, 05, 05]
-1F81C; [0D 2F AD, 05, 05]
+1F7C1; [0D 35 62, 05, 05]
-1F81D; [0D 2F B4, 05, 05]
+1F7C2; [0D 35 69, 05, 05]
-1F81E; [0D 2F BB, 05, 05]
+1F7C3; [0D 35 70, 05, 05]
-1F81F; [0D 2F C2, 05, 05]
+1F7C4; [0D 35 77, 05, 05]
-1F820; [0D 2F C9, 05, 05]
+1F7C5; [0D 35 7E, 05, 05]
-1F821; [0D 2F D0, 05, 05]
+1F7C6; [0D 35 85, 05, 05]
-1F822; [0D 2F D7, 05, 05]
+1F7C7; [0D 35 8C, 05, 05]
-1F823; [0D 2F DE, 05, 05]
+1F7C8; [0D 35 93, 05, 05]
-1F824; [0D 2F E5, 05, 05]
+1F7C9; [0D 35 9A, 05, 05]
-1F825; [0D 2F EC, 05, 05]
+1F7CA; [0D 35 A1, 05, 05]
-1F826; [0D 2F F3, 05, 05]
+1F7CB; [0D 35 A8, 05, 05]
-1F827; [0D 2F FA, 05, 05]
+1F7CC; [0D 35 AF, 05, 05]
-1F828; [0D 30 03, 05, 05]
+1F7CD; [0D 35 B6, 05, 05]
-1F829; [0D 30 0A, 05, 05]
+1F7CE; [0D 35 BD, 05, 05]
-1F82A; [0D 30 11, 05, 05]
+1F7CF; [0D 35 C4, 05, 05]
-1F82B; [0D 30 18, 05, 05]
+1F7D0; [0D 35 CB, 05, 05]
-1F82C; [0D 30 1F, 05, 05]
+1F7D1; [0D 35 D2, 05, 05]
-1F82D; [0D 30 26, 05, 05]
+1F7D2; [0D 35 D9, 05, 05]
-1F82E; [0D 30 2D, 05, 05]
+1F7D3; [0D 35 E0, 05, 05]
-1F82F; [0D 30 34, 05, 05]
+1F7D4; [0D 35 E7, 05, 05]
-1F830; [0D 30 3B, 05, 05]
+1F7D5; [0D 35 EE, 05, 05]
-1F831; [0D 30 42, 05, 05]
+1F7D6; [0D 35 F5, 05, 05]
-1F832; [0D 30 49, 05, 05]
+1F7D7; [0D 35 FC, 05, 05]
-1F833; [0D 30 50, 05, 05]
+1F7D8; [0D 36 05, 05, 05]
-1F834; [0D 30 57, 05, 05]
+1F7E0; [0D 36 0C, 05, 05]
-1F835; [0D 30 5E, 05, 05]
+1F7E1; [0D 36 13, 05, 05]
-1F836; [0D 30 65, 05, 05]
+1F7E2; [0D 36 1A, 05, 05]
-1F837; [0D 30 6C, 05, 05]
+1F7E3; [0D 36 21, 05, 05]
-1F838; [0D 30 73, 05, 05]
+1F7E4; [0D 36 28, 05, 05]
-1F839; [0D 30 7A, 05, 05]
+1F7E5; [0D 36 2F, 05, 05]
-1F83A; [0D 30 81, 05, 05]
+1F7E6; [0D 36 36, 05, 05]
-1F83B; [0D 30 88, 05, 05]
+1F7E7; [0D 36 3D, 05, 05]
-1F83C; [0D 30 8F, 05, 05]
+1F7E8; [0D 36 44, 05, 05]
-1F83D; [0D 30 96, 05, 05]
+1F7E9; [0D 36 4B, 05, 05]
-1F83E; [0D 30 9D, 05, 05]
+1F7EA; [0D 36 52, 05, 05]
-1F83F; [0D 30 A4, 05, 05]
+1F7EB; [0D 36 59, 05, 05]
-1F840; [0D 30 AB, 05, 05]
+1F800; [0D 36 60, 05, 05]
-1F841; [0D 30 B2, 05, 05]
+1F801; [0D 36 67, 05, 05]
-1F842; [0D 30 B9, 05, 05]
+1F802; [0D 36 6E, 05, 05]
-1F843; [0D 30 C0, 05, 05]
+1F803; [0D 36 75, 05, 05]
-1F844; [0D 30 C7, 05, 05]
+1F804; [0D 36 7C, 05, 05]
-1F845; [0D 30 CE, 05, 05]
+1F805; [0D 36 83, 05, 05]
-1F846; [0D 30 D5, 05, 05]
+1F806; [0D 36 8A, 05, 05]
-1F847; [0D 30 DC, 05, 05]
+1F807; [0D 36 91, 05, 05]
-1F850; [0D 30 E3, 05, 05]
+1F808; [0D 36 98, 05, 05]
-1F851; [0D 30 EA, 05, 05]
+1F809; [0D 36 9F, 05, 05]
-1F852; [0D 30 F1, 05, 05]
+1F80A; [0D 36 A6, 05, 05]
-1F853; [0D 30 F8, 05, 05]
+1F80B; [0D 36 AD, 05, 05]
-1F854; [0D 30 FF, 05, 05]
+1F810; [0D 36 B4, 05, 05]
-1F855; [0D 31 08, 05, 05]
+1F811; [0D 36 BB, 05, 05]
-1F856; [0D 31 0F, 05, 05]
+1F812; [0D 36 C2, 05, 05]
-1F857; [0D 31 16, 05, 05]
+1F813; [0D 36 C9, 05, 05]
-1F858; [0D 31 1D, 05, 05]
+1F814; [0D 36 D0, 05, 05]
-1F859; [0D 31 24, 05, 05]
+1F815; [0D 36 D7, 05, 05]
-1F860; [0D 31 2B, 05, 05]
+1F816; [0D 36 DE, 05, 05]
-1F861; [0D 31 32, 05, 05]
+1F817; [0D 36 E5, 05, 05]
-1F862; [0D 31 39, 05, 05]
+1F818; [0D 36 EC, 05, 05]
-1F863; [0D 31 40, 05, 05]
+1F819; [0D 36 F3, 05, 05]
-1F864; [0D 31 47, 05, 05]
+1F81A; [0D 36 FA, 05, 05]
-1F865; [0D 31 4E, 05, 05]
+1F81B; [0D 37 03, 05, 05]
-1F866; [0D 31 55, 05, 05]
+1F81C; [0D 37 0A, 05, 05]
-1F867; [0D 31 5C, 05, 05]
+1F81D; [0D 37 11, 05, 05]
-1F868; [0D 31 63, 05, 05]
+1F81E; [0D 37 18, 05, 05]
-1F869; [0D 31 6A, 05, 05]
+1F81F; [0D 37 1F, 05, 05]
-1F86A; [0D 31 71, 05, 05]
+1F820; [0D 37 26, 05, 05]
-1F86B; [0D 31 78, 05, 05]
+1F821; [0D 37 2D, 05, 05]
-1F86C; [0D 31 7F, 05, 05]
+1F822; [0D 37 34, 05, 05]
-1F86D; [0D 31 86, 05, 05]
+1F823; [0D 37 3B, 05, 05]
-1F86E; [0D 31 8D, 05, 05]
+1F824; [0D 37 42, 05, 05]
-1F86F; [0D 31 94, 05, 05]
+1F825; [0D 37 49, 05, 05]
-1F870; [0D 31 9B, 05, 05]
+1F826; [0D 37 50, 05, 05]
-1F871; [0D 31 A2, 05, 05]
+1F827; [0D 37 57, 05, 05]
-1F872; [0D 31 A9, 05, 05]
+1F828; [0D 37 5E, 05, 05]
-1F873; [0D 31 B0, 05, 05]
+1F829; [0D 37 65, 05, 05]
-1F874; [0D 31 B7, 05, 05]
+1F82A; [0D 37 6C, 05, 05]
-1F875; [0D 31 BE, 05, 05]
+1F82B; [0D 37 73, 05, 05]
-1F876; [0D 31 C5, 05, 05]
+1F82C; [0D 37 7A, 05, 05]
-1F877; [0D 31 CC, 05, 05]
+1F82D; [0D 37 81, 05, 05]
-1F878; [0D 31 D3, 05, 05]
+1F82E; [0D 37 88, 05, 05]
-1F879; [0D 31 DA, 05, 05]
+1F82F; [0D 37 8F, 05, 05]
-1F87A; [0D 31 E1, 05, 05]
+1F830; [0D 37 96, 05, 05]
-1F87B; [0D 31 E8, 05, 05]
+1F831; [0D 37 9D, 05, 05]
-1F87C; [0D 31 EF, 05, 05]
+1F832; [0D 37 A4, 05, 05]
-1F87D; [0D 31 F6, 05, 05]
+1F833; [0D 37 AB, 05, 05]
-1F87E; [0D 31 FD, 05, 05]
+1F834; [0D 37 B2, 05, 05]
-1F87F; [0D 32 06, 05, 05]
+1F835; [0D 37 B9, 05, 05]
-1F880; [0D 32 0D, 05, 05]
+1F836; [0D 37 C0, 05, 05]
-1F881; [0D 32 14, 05, 05]
+1F837; [0D 37 C7, 05, 05]
-1F882; [0D 32 1B, 05, 05]
+1F838; [0D 37 CE, 05, 05]
-1F883; [0D 32 22, 05, 05]
+1F839; [0D 37 D5, 05, 05]
-1F884; [0D 32 29, 05, 05]
+1F83A; [0D 37 DC, 05, 05]
-1F885; [0D 32 30, 05, 05]
+1F83B; [0D 37 E3, 05, 05]
-1F886; [0D 32 37, 05, 05]
+1F83C; [0D 37 EA, 05, 05]
-1F887; [0D 32 3E, 05, 05]
+1F83D; [0D 37 F1, 05, 05]
-1F890; [0D 32 45, 05, 05]
+1F83E; [0D 37 F8, 05, 05]
-1F891; [0D 32 4C, 05, 05]
+1F83F; [0D 37 FF, 05, 05]
-1F892; [0D 32 53, 05, 05]
+1F840; [0D 38 08, 05, 05]
-1F893; [0D 32 5A, 05, 05]
+1F841; [0D 38 0F, 05, 05]
-1F894; [0D 32 61, 05, 05]
+1F842; [0D 38 16, 05, 05]
-1F895; [0D 32 68, 05, 05]
+1F843; [0D 38 1D, 05, 05]
-1F896; [0D 32 6F, 05, 05]
+1F844; [0D 38 24, 05, 05]
-1F897; [0D 32 76, 05, 05]
+1F845; [0D 38 2B, 05, 05]
-1F898; [0D 32 7D, 05, 05]
+1F846; [0D 38 32, 05, 05]
-1F899; [0D 32 84, 05, 05]
+1F847; [0D 38 39, 05, 05]
-1F89A; [0D 32 8B, 05, 05]
+1F850; [0D 38 40, 05, 05]
-1F89B; [0D 32 92, 05, 05]
+1F851; [0D 38 47, 05, 05]
-1F89C; [0D 32 99, 05, 05]
+1F852; [0D 38 4E, 05, 05]
-1F89D; [0D 32 A0, 05, 05]
+1F853; [0D 38 55, 05, 05]
-1F89E; [0D 32 A7, 05, 05]
+1F854; [0D 38 5C, 05, 05]
-1F89F; [0D 32 AE, 05, 05]
+1F855; [0D 38 63, 05, 05]
-1F8A0; [0D 32 B5, 05, 05]
+1F856; [0D 38 6A, 05, 05]
-1F8A1; [0D 32 BC, 05, 05]
+1F857; [0D 38 71, 05, 05]
-1F8A2; [0D 32 C3, 05, 05]
+1F858; [0D 38 78, 05, 05]
-1F8A3; [0D 32 CA, 05, 05]
+1F859; [0D 38 7F, 05, 05]
-1F8A4; [0D 32 D1, 05, 05]
+1F860; [0D 38 86, 05, 05]
-1F8A5; [0D 32 D8, 05, 05]
+1F861; [0D 38 8D, 05, 05]
-1F8A6; [0D 32 DF, 05, 05]
+1F862; [0D 38 94, 05, 05]
-1F8A7; [0D 32 E6, 05, 05]
+1F863; [0D 38 9B, 05, 05]
-1F8A8; [0D 32 ED, 05, 05]
+1F864; [0D 38 A2, 05, 05]
-1F8A9; [0D 32 F4, 05, 05]
+1F865; [0D 38 A9, 05, 05]
-1F8AA; [0D 32 FB, 05, 05]
+1F866; [0D 38 B0, 05, 05]
-1F8AB; [0D 33 04, 05, 05]
+1F867; [0D 38 B7, 05, 05]
-1F8AC; [0D 33 0B, 05, 05]
+1F868; [0D 38 BE, 05, 05]
-1F8AD; [0D 33 12, 05, 05]
+1F869; [0D 38 C5, 05, 05]
-1D800; [0D 33 19, 05, 05]
+1F86A; [0D 38 CC, 05, 05]
-1D801; [0D 33 20, 05, 05]
+1F86B; [0D 38 D3, 05, 05]
-1D802; [0D 33 27, 05, 05]
+1F86C; [0D 38 DA, 05, 05]
-1D803; [0D 33 2E, 05, 05]
+1F86D; [0D 38 E1, 05, 05]
-1D804; [0D 33 35, 05, 05]
+1F86E; [0D 38 E8, 05, 05]
-1D805; [0D 33 3C, 05, 05]
+1F86F; [0D 38 EF, 05, 05]
-1D806; [0D 33 43, 05, 05]
+1F870; [0D 38 F6, 05, 05]
-1D807; [0D 33 4A, 05, 05]
+1F871; [0D 38 FD, 05, 05]
-1D808; [0D 33 51, 05, 05]
+1F872; [0D 39 06, 05, 05]
-1D809; [0D 33 58, 05, 05]
+1F873; [0D 39 0D, 05, 05]
-1D80A; [0D 33 5F, 05, 05]
+1F874; [0D 39 14, 05, 05]
-1D80B; [0D 33 66, 05, 05]
+1F875; [0D 39 1B, 05, 05]
-1D80C; [0D 33 6D, 05, 05]
+1F876; [0D 39 22, 05, 05]
-1D80D; [0D 33 74, 05, 05]
+1F877; [0D 39 29, 05, 05]
-1D80E; [0D 33 7B, 05, 05]
+1F878; [0D 39 30, 05, 05]
-1D80F; [0D 33 82, 05, 05]
+1F879; [0D 39 37, 05, 05]
-1D810; [0D 33 89, 05, 05]
+1F87A; [0D 39 3E, 05, 05]
-1D811; [0D 33 90, 05, 05]
+1F87B; [0D 39 45, 05, 05]
-1D812; [0D 33 97, 05, 05]
+1F87C; [0D 39 4C, 05, 05]
-1D813; [0D 33 9E, 05, 05]
+1F87D; [0D 39 53, 05, 05]
-1D814; [0D 33 A5, 05, 05]
+1F87E; [0D 39 5A, 05, 05]
-1D815; [0D 33 AC, 05, 05]
+1F87F; [0D 39 61, 05, 05]
-1D816; [0D 33 B3, 05, 05]
+1F880; [0D 39 68, 05, 05]
-1D817; [0D 33 BA, 05, 05]
+1F881; [0D 39 6F, 05, 05]
-1D818; [0D 33 C1, 05, 05]
+1F882; [0D 39 76, 05, 05]
-1D819; [0D 33 C8, 05, 05]
+1F883; [0D 39 7D, 05, 05]
-1D81A; [0D 33 CF, 05, 05]
+1F884; [0D 39 84, 05, 05]
-1D81B; [0D 33 D6, 05, 05]
+1F885; [0D 39 8B, 05, 05]
-1D81C; [0D 33 DD, 05, 05]
+1F886; [0D 39 92, 05, 05]
-1D81D; [0D 33 E4, 05, 05]
+1F887; [0D 39 99, 05, 05]
-1D81E; [0D 33 EB, 05, 05]
+1F890; [0D 39 A0, 05, 05]
-1D81F; [0D 33 F2, 05, 05]
+1F891; [0D 39 A7, 05, 05]
-1D820; [0D 33 F9, 05, 05]
+1F892; [0D 39 AE, 05, 05]
-1D821; [0D 34 02, 05, 05]
+1F893; [0D 39 B5, 05, 05]
-1D822; [0D 34 09, 05, 05]
+1F894; [0D 39 BC, 05, 05]
-1D823; [0D 34 10, 05, 05]
+1F895; [0D 39 C3, 05, 05]
-1D824; [0D 34 17, 05, 05]
+1F896; [0D 39 CA, 05, 05]
-1D825; [0D 34 1E, 05, 05]
+1F897; [0D 39 D1, 05, 05]
-1D826; [0D 34 25, 05, 05]
+1F898; [0D 39 D8, 05, 05]
-1D827; [0D 34 2C, 05, 05]
+1F899; [0D 39 DF, 05, 05]
-1D828; [0D 34 33, 05, 05]
+1F89A; [0D 39 E6, 05, 05]
-1D829; [0D 34 3A, 05, 05]
+1F89B; [0D 39 ED, 05, 05]
-1D82A; [0D 34 41, 05, 05]
+1F89C; [0D 39 F4, 05, 05]
-1D82B; [0D 34 48, 05, 05]
+1F89D; [0D 39 FB, 05, 05]
-1D82C; [0D 34 4F, 05, 05]
+1F89E; [0D 3A 04, 05, 05]
-1D82D; [0D 34 56, 05, 05]
+1F89F; [0D 3A 0B, 05, 05]
-1D82E; [0D 34 5D, 05, 05]
+1F8A0; [0D 3A 12, 05, 05]
-1D82F; [0D 34 64, 05, 05]
+1F8A1; [0D 3A 19, 05, 05]
-1D830; [0D 34 6B, 05, 05]
+1F8A2; [0D 3A 20, 05, 05]
-1D831; [0D 34 72, 05, 05]
+1F8A3; [0D 3A 27, 05, 05]
-1D832; [0D 34 79, 05, 05]
+1F8A4; [0D 3A 2E, 05, 05]
-1D833; [0D 34 80, 05, 05]
+1F8A5; [0D 3A 35, 05, 05]
-1D834; [0D 34 87, 05, 05]
+1F8A6; [0D 3A 3C, 05, 05]
-1D835; [0D 34 8E, 05, 05]
+1F8A7; [0D 3A 43, 05, 05]
-1D836; [0D 34 95, 05, 05]
+1F8A8; [0D 3A 4A, 05, 05]
-1D837; [0D 34 9C, 05, 05]
+1F8A9; [0D 3A 51, 05, 05]
-1D838; [0D 34 A3, 05, 05]
+1F8AA; [0D 3A 58, 05, 05]
-1D839; [0D 34 AA, 05, 05]
+1F8AB; [0D 3A 5F, 05, 05]
-1D83A; [0D 34 B1, 05, 05]
+1F8AC; [0D 3A 66, 05, 05]
-1D83B; [0D 34 B8, 05, 05]
+1F8AD; [0D 3A 6D, 05, 05]
-1D83C; [0D 34 BF, 05, 05]
+1F8B0; [0D 3A 74, 05, 05]
-1D83D; [0D 34 C6, 05, 05]
+1F8B1; [0D 3A 7B, 05, 05]
-1D83E; [0D 34 CD, 05, 05]
+1D800; [0D 3A 82, 05, 05]
-1D83F; [0D 34 D4, 05, 05]
+1D801; [0D 3A 89, 05, 05]
-1D840; [0D 34 DB, 05, 05]
+1D802; [0D 3A 90, 05, 05]
-1D841; [0D 34 E2, 05, 05]
+1D803; [0D 3A 97, 05, 05]
-1D842; [0D 34 E9, 05, 05]
+1D804; [0D 3A 9E, 05, 05]
-1D843; [0D 34 F0, 05, 05]
+1D805; [0D 3A A5, 05, 05]
-1D844; [0D 34 F7, 05, 05]
+1D806; [0D 3A AC, 05, 05]
-1D845; [0D 34 FE, 05, 05]
+1D807; [0D 3A B3, 05, 05]
-1D846; [0D 35 07, 05, 05]
+1D808; [0D 3A BA, 05, 05]
-1D847; [0D 35 0E, 05, 05]
+1D809; [0D 3A C1, 05, 05]
-1D848; [0D 35 15, 05, 05]
+1D80A; [0D 3A C8, 05, 05]
-1D849; [0D 35 1C, 05, 05]
+1D80B; [0D 3A CF, 05, 05]
-1D84A; [0D 35 23, 05, 05]
+1D80C; [0D 3A D6, 05, 05]
-1D84B; [0D 35 2A, 05, 05]
+1D80D; [0D 3A DD, 05, 05]
-1D84C; [0D 35 31, 05, 05]
+1D80E; [0D 3A E4, 05, 05]
-1D84D; [0D 35 38, 05, 05]
+1D80F; [0D 3A EB, 05, 05]
-1D84E; [0D 35 3F, 05, 05]
+1D810; [0D 3A F2, 05, 05]
-1D84F; [0D 35 46, 05, 05]
+1D811; [0D 3A F9, 05, 05]
-1D850; [0D 35 4D, 05, 05]
+1D812; [0D 3B 02, 05, 05]
-1D851; [0D 35 54, 05, 05]
+1D813; [0D 3B 09, 05, 05]
-1D852; [0D 35 5B, 05, 05]
+1D814; [0D 3B 10, 05, 05]
-1D853; [0D 35 62, 05, 05]
+1D815; [0D 3B 17, 05, 05]
-1D854; [0D 35 69, 05, 05]
+1D816; [0D 3B 1E, 05, 05]
-1D855; [0D 35 70, 05, 05]
+1D817; [0D 3B 25, 05, 05]
-1D856; [0D 35 77, 05, 05]
+1D818; [0D 3B 2C, 05, 05]
-1D857; [0D 35 7E, 05, 05]
+1D819; [0D 3B 33, 05, 05]
-1D858; [0D 35 85, 05, 05]
+1D81A; [0D 3B 3A, 05, 05]
-1D859; [0D 35 8C, 05, 05]
+1D81B; [0D 3B 41, 05, 05]
-1D85A; [0D 35 93, 05, 05]
+1D81C; [0D 3B 48, 05, 05]
-1D85B; [0D 35 9A, 05, 05]
+1D81D; [0D 3B 4F, 05, 05]
-1D85C; [0D 35 A1, 05, 05]
+1D81E; [0D 3B 56, 05, 05]
-1D85D; [0D 35 A8, 05, 05]
+1D81F; [0D 3B 5D, 05, 05]
-1D85E; [0D 35 AF, 05, 05]
+1D820; [0D 3B 64, 05, 05]
-1D85F; [0D 35 B6, 05, 05]
+1D821; [0D 3B 6B, 05, 05]
-1D860; [0D 35 BD, 05, 05]
+1D822; [0D 3B 72, 05, 05]
-1D861; [0D 35 C4, 05, 05]
+1D823; [0D 3B 79, 05, 05]
-1D862; [0D 35 CB, 05, 05]
+1D824; [0D 3B 80, 05, 05]
-1D863; [0D 35 D2, 05, 05]
+1D825; [0D 3B 87, 05, 05]
-1D864; [0D 35 D9, 05, 05]
+1D826; [0D 3B 8E, 05, 05]
-1D865; [0D 35 E0, 05, 05]
+1D827; [0D 3B 95, 05, 05]
-1D866; [0D 35 E7, 05, 05]
+1D828; [0D 3B 9C, 05, 05]
-1D867; [0D 35 EE, 05, 05]
+1D829; [0D 3B A3, 05, 05]
-1D868; [0D 35 F5, 05, 05]
+1D82A; [0D 3B AA, 05, 05]
-1D869; [0D 35 FC, 05, 05]
+1D82B; [0D 3B B1, 05, 05]
-1D86A; [0D 36 05, 05, 05]
+1D82C; [0D 3B B8, 05, 05]
-1D86B; [0D 36 0C, 05, 05]
+1D82D; [0D 3B BF, 05, 05]
-1D86C; [0D 36 13, 05, 05]
+1D82E; [0D 3B C6, 05, 05]
-1D86D; [0D 36 1A, 05, 05]
+1D82F; [0D 3B CD, 05, 05]
-1D86E; [0D 36 21, 05, 05]
+1D830; [0D 3B D4, 05, 05]
-1D86F; [0D 36 28, 05, 05]
+1D831; [0D 3B DB, 05, 05]
-1D870; [0D 36 2F, 05, 05]
+1D832; [0D 3B E2, 05, 05]
-1D871; [0D 36 36, 05, 05]
+1D833; [0D 3B E9, 05, 05]
-1D872; [0D 36 3D, 05, 05]
+1D834; [0D 3B F0, 05, 05]
-1D873; [0D 36 44, 05, 05]
+1D835; [0D 3B F7, 05, 05]
-1D874; [0D 36 4B, 05, 05]
+1D836; [0D 3B FE, 05, 05]
-1D875; [0D 36 52, 05, 05]
+1D837; [0D 3C 07, 05, 05]
-1D876; [0D 36 59, 05, 05]
+1D838; [0D 3C 0E, 05, 05]
-1D877; [0D 36 60, 05, 05]
+1D839; [0D 3C 15, 05, 05]
-1D878; [0D 36 67, 05, 05]
+1D83A; [0D 3C 1C, 05, 05]
-1D879; [0D 36 6E, 05, 05]
+1D83B; [0D 3C 23, 05, 05]
-1D87A; [0D 36 75, 05, 05]
+1D83C; [0D 3C 2A, 05, 05]
-1D87B; [0D 36 7C, 05, 05]
+1D83D; [0D 3C 31, 05, 05]
-1D87C; [0D 36 83, 05, 05]
+1D83E; [0D 3C 38, 05, 05]
-1D87D; [0D 36 8A, 05, 05]
+1D83F; [0D 3C 3F, 05, 05]
-1D87E; [0D 36 91, 05, 05]
+1D840; [0D 3C 46, 05, 05]
-1D87F; [0D 36 98, 05, 05]
+1D841; [0D 3C 4D, 05, 05]
-1D880; [0D 36 9F, 05, 05]
+1D842; [0D 3C 54, 05, 05]
-1D881; [0D 36 A6, 05, 05]
+1D843; [0D 3C 5B, 05, 05]
-1D882; [0D 36 AD, 05, 05]
+1D844; [0D 3C 62, 05, 05]
-1D883; [0D 36 B4, 05, 05]
+1D845; [0D 3C 69, 05, 05]
-1D884; [0D 36 BB, 05, 05]
+1D846; [0D 3C 70, 05, 05]
-1D885; [0D 36 C2, 05, 05]
+1D847; [0D 3C 77, 05, 05]
-1D886; [0D 36 C9, 05, 05]
+1D848; [0D 3C 7E, 05, 05]
-1D887; [0D 36 D0, 05, 05]
+1D849; [0D 3C 85, 05, 05]
-1D888; [0D 36 D7, 05, 05]
+1D84A; [0D 3C 8C, 05, 05]
-1D889; [0D 36 DE, 05, 05]
+1D84B; [0D 3C 93, 05, 05]
-1D88A; [0D 36 E5, 05, 05]
+1D84C; [0D 3C 9A, 05, 05]
-1D88B; [0D 36 EC, 05, 05]
+1D84D; [0D 3C A1, 05, 05]
-1D88C; [0D 36 F3, 05, 05]
+1D84E; [0D 3C A8, 05, 05]
-1D88D; [0D 36 FA, 05, 05]
+1D84F; [0D 3C AF, 05, 05]
-1D88E; [0D 37 03, 05, 05]
+1D850; [0D 3C B6, 05, 05]
-1D88F; [0D 37 0A, 05, 05]
+1D851; [0D 3C BD, 05, 05]
-1D890; [0D 37 11, 05, 05]
+1D852; [0D 3C C4, 05, 05]
-1D891; [0D 37 18, 05, 05]
+1D853; [0D 3C CB, 05, 05]
-1D892; [0D 37 1F, 05, 05]
+1D854; [0D 3C D2, 05, 05]
-1D893; [0D 37 26, 05, 05]
+1D855; [0D 3C D9, 05, 05]
-1D894; [0D 37 2D, 05, 05]
+1D856; [0D 3C E0, 05, 05]
-1D895; [0D 37 34, 05, 05]
+1D857; [0D 3C E7, 05, 05]
-1D896; [0D 37 3B, 05, 05]
+1D858; [0D 3C EE, 05, 05]
-1D897; [0D 37 42, 05, 05]
+1D859; [0D 3C F5, 05, 05]
-1D898; [0D 37 49, 05, 05]
+1D85A; [0D 3C FC, 05, 05]
-1D899; [0D 37 50, 05, 05]
+1D85B; [0D 3D 05, 05, 05]
-1D89A; [0D 37 57, 05, 05]
+1D85C; [0D 3D 0C, 05, 05]
-1D89B; [0D 37 5E, 05, 05]
+1D85D; [0D 3D 13, 05, 05]
-1D89C; [0D 37 65, 05, 05]
+1D85E; [0D 3D 1A, 05, 05]
-1D89D; [0D 37 6C, 05, 05]
+1D85F; [0D 3D 21, 05, 05]
-1D89E; [0D 37 73, 05, 05]
+1D860; [0D 3D 28, 05, 05]
-1D89F; [0D 37 7A, 05, 05]
+1D861; [0D 3D 2F, 05, 05]
-1D8A0; [0D 37 81, 05, 05]
+1D862; [0D 3D 36, 05, 05]
-1D8A1; [0D 37 88, 05, 05]
+1D863; [0D 3D 3D, 05, 05]
-1D8A2; [0D 37 8F, 05, 05]
+1D864; [0D 3D 44, 05, 05]
-1D8A3; [0D 37 96, 05, 05]
+1D865; [0D 3D 4B, 05, 05]
-1D8A4; [0D 37 9D, 05, 05]
+1D866; [0D 3D 52, 05, 05]
-1D8A5; [0D 37 A4, 05, 05]
+1D867; [0D 3D 59, 05, 05]
-1D8A6; [0D 37 AB, 05, 05]
+1D868; [0D 3D 60, 05, 05]
-1D8A7; [0D 37 B2, 05, 05]
+1D869; [0D 3D 67, 05, 05]
-1D8A8; [0D 37 B9, 05, 05]
+1D86A; [0D 3D 6E, 05, 05]
-1D8A9; [0D 37 C0, 05, 05]
+1D86B; [0D 3D 75, 05, 05]
-1D8AA; [0D 37 C7, 05, 05]
+1D86C; [0D 3D 7C, 05, 05]
-1D8AB; [0D 37 CE, 05, 05]
+1D86D; [0D 3D 83, 05, 05]
-1D8AC; [0D 37 D5, 05, 05]
+1D86E; [0D 3D 8A, 05, 05]
-1D8AD; [0D 37 DC, 05, 05]
+1D86F; [0D 3D 91, 05, 05]
-1D8AE; [0D 37 E3, 05, 05]
+1D870; [0D 3D 98, 05, 05]
-1D8AF; [0D 37 EA, 05, 05]
+1D871; [0D 3D 9F, 05, 05]
-1D8B0; [0D 37 F1, 05, 05]
+1D872; [0D 3D A6, 05, 05]
-1D8B1; [0D 37 F8, 05, 05]
+1D873; [0D 3D AD, 05, 05]
-1D8B2; [0D 37 FF, 05, 05]
+1D874; [0D 3D B4, 05, 05]
-1D8B3; [0D 38 08, 05, 05]
+1D875; [0D 3D BB, 05, 05]
-1D8B4; [0D 38 0F, 05, 05]
+1D876; [0D 3D C2, 05, 05]
-1D8B5; [0D 38 16, 05, 05]
+1D877; [0D 3D C9, 05, 05]
-1D8B6; [0D 38 1D, 05, 05]
+1D878; [0D 3D D0, 05, 05]
-1D8B7; [0D 38 24, 05, 05]
+1D879; [0D 3D D7, 05, 05]
-1D8B8; [0D 38 2B, 05, 05]
+1D87A; [0D 3D DE, 05, 05]
-1D8B9; [0D 38 32, 05, 05]
+1D87B; [0D 3D E5, 05, 05]
-1D8BA; [0D 38 39, 05, 05]
+1D87C; [0D 3D EC, 05, 05]
-1D8BB; [0D 38 40, 05, 05]
+1D87D; [0D 3D F3, 05, 05]
-1D8BC; [0D 38 47, 05, 05]
+1D87E; [0D 3D FA, 05, 05]
-1D8BD; [0D 38 4E, 05, 05]
+1D87F; [0D 3E 03, 05, 05]
-1D8BE; [0D 38 55, 05, 05]
+1D880; [0D 3E 0A, 05, 05]
-1D8BF; [0D 38 5C, 05, 05]
+1D881; [0D 3E 11, 05, 05]
-1D8C0; [0D 38 63, 05, 05]
+1D882; [0D 3E 18, 05, 05]
-1D8C1; [0D 38 6A, 05, 05]
+1D883; [0D 3E 1F, 05, 05]
-1D8C2; [0D 38 71, 05, 05]
+1D884; [0D 3E 26, 05, 05]
-1D8C3; [0D 38 78, 05, 05]
+1D885; [0D 3E 2D, 05, 05]
-1D8C4; [0D 38 7F, 05, 05]
+1D886; [0D 3E 34, 05, 05]
-1D8C5; [0D 38 86, 05, 05]
+1D887; [0D 3E 3B, 05, 05]
-1D8C6; [0D 38 8D, 05, 05]
+1D888; [0D 3E 42, 05, 05]
-1D8C7; [0D 38 94, 05, 05]
+1D889; [0D 3E 49, 05, 05]
-1D8C8; [0D 38 9B, 05, 05]
+1D88A; [0D 3E 50, 05, 05]
-1D8C9; [0D 38 A2, 05, 05]
+1D88B; [0D 3E 57, 05, 05]
-1D8CA; [0D 38 A9, 05, 05]
+1D88C; [0D 3E 5E, 05, 05]
-1D8CB; [0D 38 B0, 05, 05]
+1D88D; [0D 3E 65, 05, 05]
-1D8CC; [0D 38 B7, 05, 05]
+1D88E; [0D 3E 6C, 05, 05]
-1D8CD; [0D 38 BE, 05, 05]
+1D88F; [0D 3E 73, 05, 05]
-1D8CE; [0D 38 C5, 05, 05]
+1D890; [0D 3E 7A, 05, 05]
-1D8CF; [0D 38 CC, 05, 05]
+1D891; [0D 3E 81, 05, 05]
-1D8D0; [0D 38 D3, 05, 05]
+1D892; [0D 3E 88, 05, 05]
-1D8D1; [0D 38 DA, 05, 05]
+1D893; [0D 3E 8F, 05, 05]
-1D8D2; [0D 38 E1, 05, 05]
+1D894; [0D 3E 96, 05, 05]
-1D8D3; [0D 38 E8, 05, 05]
+1D895; [0D 3E 9D, 05, 05]
-1D8D4; [0D 38 EF, 05, 05]
+1D896; [0D 3E A4, 05, 05]
-1D8D5; [0D 38 F6, 05, 05]
+1D897; [0D 3E AB, 05, 05]
-1D8D6; [0D 38 FD, 05, 05]
+1D898; [0D 3E B2, 05, 05]
-1D8D7; [0D 39 06, 05, 05]
+1D899; [0D 3E B9, 05, 05]
-1D8D8; [0D 39 0D, 05, 05]
+1D89A; [0D 3E C0, 05, 05]
-1D8D9; [0D 39 14, 05, 05]
+1D89B; [0D 3E C7, 05, 05]
-1D8DA; [0D 39 1B, 05, 05]
+1D89C; [0D 3E CE, 05, 05]
-1D8DB; [0D 39 22, 05, 05]
+1D89D; [0D 3E D5, 05, 05]
-1D8DC; [0D 39 29, 05, 05]
+1D89E; [0D 3E DC, 05, 05]
-1D8DD; [0D 39 30, 05, 05]
+1D89F; [0D 3E E3, 05, 05]
-1D8DE; [0D 39 37, 05, 05]
+1D8A0; [0D 3E EA, 05, 05]
-1D8DF; [0D 39 3E, 05, 05]
+1D8A1; [0D 3E F1, 05, 05]
-1D8E0; [0D 39 45, 05, 05]
+1D8A2; [0D 3E F8, 05, 05]
-1D8E1; [0D 39 4C, 05, 05]
+1D8A3; [0D 3E FF, 05, 05]
-1D8E2; [0D 39 53, 05, 05]
+1D8A4; [0D 3F 08, 05, 05]
-1D8E3; [0D 39 5A, 05, 05]
+1D8A5; [0D 3F 0F, 05, 05]
-1D8E4; [0D 39 61, 05, 05]
+1D8A6; [0D 3F 16, 05, 05]
-1D8E5; [0D 39 68, 05, 05]
+1D8A7; [0D 3F 1D, 05, 05]
-1D8E6; [0D 39 6F, 05, 05]
+1D8A8; [0D 3F 24, 05, 05]
-1D8E7; [0D 39 76, 05, 05]
+1D8A9; [0D 3F 2B, 05, 05]
-1D8E8; [0D 39 7D, 05, 05]
+1D8AA; [0D 3F 32, 05, 05]
-1D8E9; [0D 39 84, 05, 05]
+1D8AB; [0D 3F 39, 05, 05]
-1D8EA; [0D 39 8B, 05, 05]
+1D8AC; [0D 3F 40, 05, 05]
-1D8EB; [0D 39 92, 05, 05]
+1D8AD; [0D 3F 47, 05, 05]
-1D8EC; [0D 39 99, 05, 05]
+1D8AE; [0D 3F 4E, 05, 05]
-1D8ED; [0D 39 A0, 05, 05]
+1D8AF; [0D 3F 55, 05, 05]
-1D8EE; [0D 39 A7, 05, 05]
+1D8B0; [0D 3F 5C, 05, 05]
-1D8EF; [0D 39 AE, 05, 05]
+1D8B1; [0D 3F 63, 05, 05]
-1D8F0; [0D 39 B5, 05, 05]
+1D8B2; [0D 3F 6A, 05, 05]
-1D8F1; [0D 39 BC, 05, 05]
+1D8B3; [0D 3F 71, 05, 05]
-1D8F2; [0D 39 C3, 05, 05]
+1D8B4; [0D 3F 78, 05, 05]
-1D8F3; [0D 39 CA, 05, 05]
+1D8B5; [0D 3F 7F, 05, 05]
-1D8F4; [0D 39 D1, 05, 05]
+1D8B6; [0D 3F 86, 05, 05]
-1D8F5; [0D 39 D8, 05, 05]
+1D8B7; [0D 3F 8D, 05, 05]
-1D8F6; [0D 39 DF, 05, 05]
+1D8B8; [0D 3F 94, 05, 05]
-1D8F7; [0D 39 E6, 05, 05]
+1D8B9; [0D 3F 9B, 05, 05]
-1D8F8; [0D 39 ED, 05, 05]
+1D8BA; [0D 3F A2, 05, 05]
-1D8F9; [0D 39 F4, 05, 05]
+1D8BB; [0D 3F A9, 05, 05]
-1D8FA; [0D 39 FB, 05, 05]
+1D8BC; [0D 3F B0, 05, 05]
-1D8FB; [0D 3A 04, 05, 05]
+1D8BD; [0D 3F B7, 05, 05]
-1D8FC; [0D 3A 0B, 05, 05]
+1D8BE; [0D 3F BE, 05, 05]
-1D8FD; [0D 3A 12, 05, 05]
+1D8BF; [0D 3F C5, 05, 05]
-1D8FE; [0D 3A 19, 05, 05]
+1D8C0; [0D 3F CC, 05, 05]
-1D8FF; [0D 3A 20, 05, 05]
+1D8C1; [0D 3F D3, 05, 05]
-1D900; [0D 3A 27, 05, 05]
+1D8C2; [0D 3F DA, 05, 05]
-1D901; [0D 3A 2E, 05, 05]
+1D8C3; [0D 3F E1, 05, 05]
-1D902; [0D 3A 35, 05, 05]
+1D8C4; [0D 3F E8, 05, 05]
-1D903; [0D 3A 3C, 05, 05]
+1D8C5; [0D 3F EF, 05, 05]
-1D904; [0D 3A 43, 05, 05]
+1D8C6; [0D 3F F6, 05, 05]
-1D905; [0D 3A 4A, 05, 05]
+1D8C7; [0D 3F FD, 05, 05]
-1D906; [0D 3A 51, 05, 05]
+1D8C8; [0D 40 06, 05, 05]
-1D907; [0D 3A 58, 05, 05]
+1D8C9; [0D 40 0D, 05, 05]
-1D908; [0D 3A 5F, 05, 05]
+1D8CA; [0D 40 14, 05, 05]
-1D909; [0D 3A 66, 05, 05]
+1D8CB; [0D 40 1B, 05, 05]
-1D90A; [0D 3A 6D, 05, 05]
+1D8CC; [0D 40 22, 05, 05]
-1D90B; [0D 3A 74, 05, 05]
+1D8CD; [0D 40 29, 05, 05]
-1D90C; [0D 3A 7B, 05, 05]
+1D8CE; [0D 40 30, 05, 05]
-1D90D; [0D 3A 82, 05, 05]
+1D8CF; [0D 40 37, 05, 05]
-1D90E; [0D 3A 89, 05, 05]
+1D8D0; [0D 40 3E, 05, 05]
-1D90F; [0D 3A 90, 05, 05]
+1D8D1; [0D 40 45, 05, 05]
-1D910; [0D 3A 97, 05, 05]
+1D8D2; [0D 40 4C, 05, 05]
-1D911; [0D 3A 9E, 05, 05]
+1D8D3; [0D 40 53, 05, 05]
-1D912; [0D 3A A5, 05, 05]
+1D8D4; [0D 40 5A, 05, 05]
-1D913; [0D 3A AC, 05, 05]
+1D8D5; [0D 40 61, 05, 05]
-1D914; [0D 3A B3, 05, 05]
+1D8D6; [0D 40 68, 05, 05]
-1D915; [0D 3A BA, 05, 05]
+1D8D7; [0D 40 6F, 05, 05]
-1D916; [0D 3A C1, 05, 05]
+1D8D8; [0D 40 76, 05, 05]
-1D917; [0D 3A C8, 05, 05]
+1D8D9; [0D 40 7D, 05, 05]
-1D918; [0D 3A CF, 05, 05]
+1D8DA; [0D 40 84, 05, 05]
-1D919; [0D 3A D6, 05, 05]
+1D8DB; [0D 40 8B, 05, 05]
-1D91A; [0D 3A DD, 05, 05]
+1D8DC; [0D 40 92, 05, 05]
-1D91B; [0D 3A E4, 05, 05]
+1D8DD; [0D 40 99, 05, 05]
-1D91C; [0D 3A EB, 05, 05]
+1D8DE; [0D 40 A0, 05, 05]
-1D91D; [0D 3A F2, 05, 05]
+1D8DF; [0D 40 A7, 05, 05]
-1D91E; [0D 3A F9, 05, 05]
+1D8E0; [0D 40 AE, 05, 05]
-1D91F; [0D 3B 02, 05, 05]
+1D8E1; [0D 40 B5, 05, 05]
-1D920; [0D 3B 09, 05, 05]
+1D8E2; [0D 40 BC, 05, 05]
-1D921; [0D 3B 10, 05, 05]
+1D8E3; [0D 40 C3, 05, 05]
-1D922; [0D 3B 17, 05, 05]
+1D8E4; [0D 40 CA, 05, 05]
-1D923; [0D 3B 1E, 05, 05]
+1D8E5; [0D 40 D1, 05, 05]
-1D924; [0D 3B 25, 05, 05]
+1D8E6; [0D 40 D8, 05, 05]
-1D925; [0D 3B 2C, 05, 05]
+1D8E7; [0D 40 DF, 05, 05]
-1D926; [0D 3B 33, 05, 05]
+1D8E8; [0D 40 E6, 05, 05]
-1D927; [0D 3B 3A, 05, 05]
+1D8E9; [0D 40 ED, 05, 05]
-1D928; [0D 3B 41, 05, 05]
+1D8EA; [0D 40 F4, 05, 05]
-1D929; [0D 3B 48, 05, 05]
+1D8EB; [0D 40 FB, 05, 05]
-1D92A; [0D 3B 4F, 05, 05]
+1D8EC; [0D 41 04, 05, 05]
-1D92B; [0D 3B 56, 05, 05]
+1D8ED; [0D 41 0B, 05, 05]
-1D92C; [0D 3B 5D, 05, 05]
+1D8EE; [0D 41 12, 05, 05]
-1D92D; [0D 3B 64, 05, 05]
+1D8EF; [0D 41 19, 05, 05]
-1D92E; [0D 3B 6B, 05, 05]
+1D8F0; [0D 41 20, 05, 05]
-1D92F; [0D 3B 72, 05, 05]
+1D8F1; [0D 41 27, 05, 05]
-1D930; [0D 3B 79, 05, 05]
+1D8F2; [0D 41 2E, 05, 05]
-1D931; [0D 3B 80, 05, 05]
+1D8F3; [0D 41 35, 05, 05]
-1D932; [0D 3B 87, 05, 05]
+1D8F4; [0D 41 3C, 05, 05]
-1D933; [0D 3B 8E, 05, 05]
+1D8F5; [0D 41 43, 05, 05]
-1D934; [0D 3B 95, 05, 05]
+1D8F6; [0D 41 4A, 05, 05]
-1D935; [0D 3B 9C, 05, 05]
+1D8F7; [0D 41 51, 05, 05]
-1D936; [0D 3B A3, 05, 05]
+1D8F8; [0D 41 58, 05, 05]
-1D937; [0D 3B AA, 05, 05]
+1D8F9; [0D 41 5F, 05, 05]
-1D938; [0D 3B B1, 05, 05]
+1D8FA; [0D 41 66, 05, 05]
-1D939; [0D 3B B8, 05, 05]
+1D8FB; [0D 41 6D, 05, 05]
-1D93A; [0D 3B BF, 05, 05]
+1D8FC; [0D 41 74, 05, 05]
-1D93B; [0D 3B C6, 05, 05]
+1D8FD; [0D 41 7B, 05, 05]
-1D93C; [0D 3B CD, 05, 05]
+1D8FE; [0D 41 82, 05, 05]
-1D93D; [0D 3B D4, 05, 05]
+1D8FF; [0D 41 89, 05, 05]
-1D93E; [0D 3B DB, 05, 05]
+1D900; [0D 41 90, 05, 05]
-1D93F; [0D 3B E2, 05, 05]
+1D901; [0D 41 97, 05, 05]
-1D940; [0D 3B E9, 05, 05]
+1D902; [0D 41 9E, 05, 05]
-1D941; [0D 3B F0, 05, 05]
+1D903; [0D 41 A5, 05, 05]
-1D942; [0D 3B F7, 05, 05]
+1D904; [0D 41 AC, 05, 05]
-1D943; [0D 3B FE, 05, 05]
+1D905; [0D 41 B3, 05, 05]
-1D944; [0D 3C 07, 05, 05]
+1D906; [0D 41 BA, 05, 05]
-1D945; [0D 3C 0E, 05, 05]
+1D907; [0D 41 C1, 05, 05]
-1D946; [0D 3C 15, 05, 05]
+1D908; [0D 41 C8, 05, 05]
-1D947; [0D 3C 1C, 05, 05]
+1D909; [0D 41 CF, 05, 05]
-1D948; [0D 3C 23, 05, 05]
+1D90A; [0D 41 D6, 05, 05]
-1D949; [0D 3C 2A, 05, 05]
+1D90B; [0D 41 DD, 05, 05]
-1D94A; [0D 3C 31, 05, 05]
+1D90C; [0D 41 E4, 05, 05]
-1D94B; [0D 3C 38, 05, 05]
+1D90D; [0D 41 EB, 05, 05]
-1D94C; [0D 3C 3F, 05, 05]
+1D90E; [0D 41 F2, 05, 05]
-1D94D; [0D 3C 46, 05, 05]
+1D90F; [0D 41 F9, 05, 05]
-1D94E; [0D 3C 4D, 05, 05]
+1D910; [0D 42 02, 05, 05]
-1D94F; [0D 3C 54, 05, 05]
+1D911; [0D 42 09, 05, 05]
-1D950; [0D 3C 5B, 05, 05]
+1D912; [0D 42 10, 05, 05]
-1D951; [0D 3C 62, 05, 05]
+1D913; [0D 42 17, 05, 05]
-1D952; [0D 3C 69, 05, 05]
+1D914; [0D 42 1E, 05, 05]
-1D953; [0D 3C 70, 05, 05]
+1D915; [0D 42 25, 05, 05]
-1D954; [0D 3C 77, 05, 05]
+1D916; [0D 42 2C, 05, 05]
-1D955; [0D 3C 7E, 05, 05]
+1D917; [0D 42 33, 05, 05]
-1D956; [0D 3C 85, 05, 05]
+1D918; [0D 42 3A, 05, 05]
-1D957; [0D 3C 8C, 05, 05]
+1D919; [0D 42 41, 05, 05]
-1D958; [0D 3C 93, 05, 05]
+1D91A; [0D 42 48, 05, 05]
-1D959; [0D 3C 9A, 05, 05]
+1D91B; [0D 42 4F, 05, 05]
-1D95A; [0D 3C A1, 05, 05]
+1D91C; [0D 42 56, 05, 05]
-1D95B; [0D 3C A8, 05, 05]
+1D91D; [0D 42 5D, 05, 05]
-1D95C; [0D 3C AF, 05, 05]
+1D91E; [0D 42 64, 05, 05]
-1D95D; [0D 3C B6, 05, 05]
+1D91F; [0D 42 6B, 05, 05]
-1D95E; [0D 3C BD, 05, 05]
+1D920; [0D 42 72, 05, 05]
-1D95F; [0D 3C C4, 05, 05]
+1D921; [0D 42 79, 05, 05]
-1D960; [0D 3C CB, 05, 05]
+1D922; [0D 42 80, 05, 05]
-1D961; [0D 3C D2, 05, 05]
+1D923; [0D 42 87, 05, 05]
-1D962; [0D 3C D9, 05, 05]
+1D924; [0D 42 8E, 05, 05]
-1D963; [0D 3C E0, 05, 05]
+1D925; [0D 42 95, 05, 05]
-1D964; [0D 3C E7, 05, 05]
+1D926; [0D 42 9C, 05, 05]
-1D965; [0D 3C EE, 05, 05]
+1D927; [0D 42 A3, 05, 05]
-1D966; [0D 3C F5, 05, 05]
+1D928; [0D 42 AA, 05, 05]
-1D967; [0D 3C FC, 05, 05]
+1D929; [0D 42 B1, 05, 05]
-1D968; [0D 3D 05, 05, 05]
+1D92A; [0D 42 B8, 05, 05]
-1D969; [0D 3D 0C, 05, 05]
+1D92B; [0D 42 BF, 05, 05]
-1D96A; [0D 3D 13, 05, 05]
+1D92C; [0D 42 C6, 05, 05]
-1D96B; [0D 3D 1A, 05, 05]
+1D92D; [0D 42 CD, 05, 05]
-1D96C; [0D 3D 21, 05, 05]
+1D92E; [0D 42 D4, 05, 05]
-1D96D; [0D 3D 28, 05, 05]
+1D92F; [0D 42 DB, 05, 05]
-1D96E; [0D 3D 2F, 05, 05]
+1D930; [0D 42 E2, 05, 05]
-1D96F; [0D 3D 36, 05, 05]
+1D931; [0D 42 E9, 05, 05]
-1D970; [0D 3D 3D, 05, 05]
+1D932; [0D 42 F0, 05, 05]
-1D971; [0D 3D 44, 05, 05]
+1D933; [0D 42 F7, 05, 05]
-1D972; [0D 3D 4B, 05, 05]
+1D934; [0D 42 FE, 05, 05]
-1D973; [0D 3D 52, 05, 05]
+1D935; [0D 43 07, 05, 05]
-1D974; [0D 3D 59, 05, 05]
+1D936; [0D 43 0E, 05, 05]
-1D975; [0D 3D 60, 05, 05]
+1D937; [0D 43 15, 05, 05]
-1D976; [0D 3D 67, 05, 05]
+1D938; [0D 43 1C, 05, 05]
-1D977; [0D 3D 6E, 05, 05]
+1D939; [0D 43 23, 05, 05]
-1D978; [0D 3D 75, 05, 05]
+1D93A; [0D 43 2A, 05, 05]
-1D979; [0D 3D 7C, 05, 05]
+1D93B; [0D 43 31, 05, 05]
-1D97A; [0D 3D 83, 05, 05]
+1D93C; [0D 43 38, 05, 05]
-1D97B; [0D 3D 8A, 05, 05]
+1D93D; [0D 43 3F, 05, 05]
-1D97C; [0D 3D 91, 05, 05]
+1D93E; [0D 43 46, 05, 05]
-1D97D; [0D 3D 98, 05, 05]
+1D93F; [0D 43 4D, 05, 05]
-1D97E; [0D 3D 9F, 05, 05]
+1D940; [0D 43 54, 05, 05]
-1D97F; [0D 3D A6, 05, 05]
+1D941; [0D 43 5B, 05, 05]
-1D980; [0D 3D AD, 05, 05]
+1D942; [0D 43 62, 05, 05]
-1D981; [0D 3D B4, 05, 05]
+1D943; [0D 43 69, 05, 05]
-1D982; [0D 3D BB, 05, 05]
+1D944; [0D 43 70, 05, 05]
-1D983; [0D 3D C2, 05, 05]
+1D945; [0D 43 77, 05, 05]
-1D984; [0D 3D C9, 05, 05]
+1D946; [0D 43 7E, 05, 05]
-1D985; [0D 3D D0, 05, 05]
+1D947; [0D 43 85, 05, 05]
-1D986; [0D 3D D7, 05, 05]
+1D948; [0D 43 8C, 05, 05]
-1D987; [0D 3D DE, 05, 05]
+1D949; [0D 43 93, 05, 05]
-1D988; [0D 3D E5, 05, 05]
+1D94A; [0D 43 9A, 05, 05]
-1D989; [0D 3D EC, 05, 05]
+1D94B; [0D 43 A1, 05, 05]
-1D98A; [0D 3D F3, 05, 05]
+1D94C; [0D 43 A8, 05, 05]
-1D98B; [0D 3D FA, 05, 05]
+1D94D; [0D 43 AF, 05, 05]
-1D98C; [0D 3E 03, 05, 05]
+1D94E; [0D 43 B6, 05, 05]
-1D98D; [0D 3E 0A, 05, 05]
+1D94F; [0D 43 BD, 05, 05]
-1D98E; [0D 3E 11, 05, 05]
+1D950; [0D 43 C4, 05, 05]
-1D98F; [0D 3E 18, 05, 05]
+1D951; [0D 43 CB, 05, 05]
-1D990; [0D 3E 1F, 05, 05]
+1D952; [0D 43 D2, 05, 05]
-1D991; [0D 3E 26, 05, 05]
+1D953; [0D 43 D9, 05, 05]
-1D992; [0D 3E 2D, 05, 05]
+1D954; [0D 43 E0, 05, 05]
-1D993; [0D 3E 34, 05, 05]
+1D955; [0D 43 E7, 05, 05]
-1D994; [0D 3E 3B, 05, 05]
+1D956; [0D 43 EE, 05, 05]
-1D995; [0D 3E 42, 05, 05]
+1D957; [0D 43 F5, 05, 05]
-1D996; [0D 3E 49, 05, 05]
+1D958; [0D 43 FC, 05, 05]
-1D997; [0D 3E 50, 05, 05]
+1D959; [0D 44 05, 05, 05]
-1D998; [0D 3E 57, 05, 05]
+1D95A; [0D 44 0C, 05, 05]
-1D999; [0D 3E 5E, 05, 05]
+1D95B; [0D 44 13, 05, 05]
-1D99A; [0D 3E 65, 05, 05]
+1D95C; [0D 44 1A, 05, 05]
-1D99B; [0D 3E 6C, 05, 05]
+1D95D; [0D 44 21, 05, 05]
-1D99C; [0D 3E 73, 05, 05]
+1D95E; [0D 44 28, 05, 05]
-1D99D; [0D 3E 7A, 05, 05]
+1D95F; [0D 44 2F, 05, 05]
-1D99E; [0D 3E 81, 05, 05]
+1D960; [0D 44 36, 05, 05]
-1D99F; [0D 3E 88, 05, 05]
+1D961; [0D 44 3D, 05, 05]
-1D9A0; [0D 3E 8F, 05, 05]
+1D962; [0D 44 44, 05, 05]
-1D9A1; [0D 3E 96, 05, 05]
+1D963; [0D 44 4B, 05, 05]
-1D9A2; [0D 3E 9D, 05, 05]
+1D964; [0D 44 52, 05, 05]
-1D9A3; [0D 3E A4, 05, 05]
+1D965; [0D 44 59, 05, 05]
-1D9A4; [0D 3E AB, 05, 05]
+1D966; [0D 44 60, 05, 05]
-1D9A5; [0D 3E B2, 05, 05]
+1D967; [0D 44 67, 05, 05]
-1D9A6; [0D 3E B9, 05, 05]
+1D968; [0D 44 6E, 05, 05]
-1D9A7; [0D 3E C0, 05, 05]
+1D969; [0D 44 75, 05, 05]
-1D9A8; [0D 3E C7, 05, 05]
+1D96A; [0D 44 7C, 05, 05]
-1D9A9; [0D 3E CE, 05, 05]
+1D96B; [0D 44 83, 05, 05]
-1D9AA; [0D 3E D5, 05, 05]
+1D96C; [0D 44 8A, 05, 05]
-1D9AB; [0D 3E DC, 05, 05]
+1D96D; [0D 44 91, 05, 05]
-1D9AC; [0D 3E E3, 05, 05]
+1D96E; [0D 44 98, 05, 05]
-1D9AD; [0D 3E EA, 05, 05]
+1D96F; [0D 44 9F, 05, 05]
-1D9AE; [0D 3E F1, 05, 05]
+1D970; [0D 44 A6, 05, 05]
-1D9AF; [0D 3E F8, 05, 05]
+1D971; [0D 44 AD, 05, 05]
-1D9B0; [0D 3E FF, 05, 05]
+1D972; [0D 44 B4, 05, 05]
-1D9B1; [0D 3F 08, 05, 05]
+1D973; [0D 44 BB, 05, 05]
-1D9B2; [0D 3F 0F, 05, 05]
+1D974; [0D 44 C2, 05, 05]
-1D9B3; [0D 3F 16, 05, 05]
+1D975; [0D 44 C9, 05, 05]
-1D9B4; [0D 3F 1D, 05, 05]
+1D976; [0D 44 D0, 05, 05]
-1D9B5; [0D 3F 24, 05, 05]
+1D977; [0D 44 D7, 05, 05]
-1D9B6; [0D 3F 2B, 05, 05]
+1D978; [0D 44 DE, 05, 05]
-1D9B7; [0D 3F 32, 05, 05]
+1D979; [0D 44 E5, 05, 05]
-1D9B8; [0D 3F 39, 05, 05]
+1D97A; [0D 44 EC, 05, 05]
-1D9B9; [0D 3F 40, 05, 05]
+1D97B; [0D 44 F3, 05, 05]
-1D9BA; [0D 3F 47, 05, 05]
+1D97C; [0D 44 FA, 05, 05]
-1D9BB; [0D 3F 4E, 05, 05]
+1D97D; [0D 45 03, 05, 05]
-1D9BC; [0D 3F 55, 05, 05]
+1D97E; [0D 45 0A, 05, 05]
-1D9BD; [0D 3F 5C, 05, 05]
+1D97F; [0D 45 11, 05, 05]
-1D9BE; [0D 3F 63, 05, 05]
+1D980; [0D 45 18, 05, 05]
-1D9BF; [0D 3F 6A, 05, 05]
+1D981; [0D 45 1F, 05, 05]
-1D9C0; [0D 3F 71, 05, 05]
+1D982; [0D 45 26, 05, 05]
-1D9C1; [0D 3F 78, 05, 05]
+1D983; [0D 45 2D, 05, 05]
-1D9C2; [0D 3F 7F, 05, 05]
+1D984; [0D 45 34, 05, 05]
-1D9C3; [0D 3F 86, 05, 05]
+1D985; [0D 45 3B, 05, 05]
-1D9C4; [0D 3F 8D, 05, 05]
+1D986; [0D 45 42, 05, 05]
-1D9C5; [0D 3F 94, 05, 05]
+1D987; [0D 45 49, 05, 05]
-1D9C6; [0D 3F 9B, 05, 05]
+1D988; [0D 45 50, 05, 05]
-1D9C7; [0D 3F A2, 05, 05]
+1D989; [0D 45 57, 05, 05]
-1D9C8; [0D 3F A9, 05, 05]
+1D98A; [0D 45 5E, 05, 05]
-1D9C9; [0D 3F B0, 05, 05]
+1D98B; [0D 45 65, 05, 05]
-1D9CA; [0D 3F B7, 05, 05]
+1D98C; [0D 45 6C, 05, 05]
-1D9CB; [0D 3F BE, 05, 05]
+1D98D; [0D 45 73, 05, 05]
-1D9CC; [0D 3F C5, 05, 05]
+1D98E; [0D 45 7A, 05, 05]
-1D9CD; [0D 3F CC, 05, 05]
+1D98F; [0D 45 81, 05, 05]
-1D9CE; [0D 3F D3, 05, 05]
+1D990; [0D 45 88, 05, 05]
-1D9CF; [0D 3F DA, 05, 05]
+1D991; [0D 45 8F, 05, 05]
-1D9D0; [0D 3F E1, 05, 05]
+1D992; [0D 45 96, 05, 05]
-1D9D1; [0D 3F E8, 05, 05]
+1D993; [0D 45 9D, 05, 05]
-1D9D2; [0D 3F EF, 05, 05]
+1D994; [0D 45 A4, 05, 05]
-1D9D3; [0D 3F F6, 05, 05]
+1D995; [0D 45 AB, 05, 05]
-1D9D4; [0D 3F FD, 05, 05]
+1D996; [0D 45 B2, 05, 05]
-1D9D5; [0D 40 06, 05, 05]
+1D997; [0D 45 B9, 05, 05]
-1D9D6; [0D 40 0D, 05, 05]
+1D998; [0D 45 C0, 05, 05]
-1D9D7; [0D 40 14, 05, 05]
+1D999; [0D 45 C7, 05, 05]
-1D9D8; [0D 40 1B, 05, 05]
+1D99A; [0D 45 CE, 05, 05]
-1D9D9; [0D 40 22, 05, 05]
+1D99B; [0D 45 D5, 05, 05]
-1D9DA; [0D 40 29, 05, 05]
+1D99C; [0D 45 DC, 05, 05]
-1D9DB; [0D 40 30, 05, 05]
+1D99D; [0D 45 E3, 05, 05]
-1D9DC; [0D 40 37, 05, 05]
+1D99E; [0D 45 EA, 05, 05]
-1D9DD; [0D 40 3E, 05, 05]
+1D99F; [0D 45 F1, 05, 05]
-1D9DE; [0D 40 45, 05, 05]
+1D9A0; [0D 45 F8, 05, 05]
-1D9DF; [0D 40 4C, 05, 05]
+1D9A1; [0D 45 FF, 05, 05]
-1D9E0; [0D 40 53, 05, 05]
+1D9A2; [0D 46 08, 05, 05]
-1D9E1; [0D 40 5A, 05, 05]
+1D9A3; [0D 46 0F, 05, 05]
-1D9E2; [0D 40 61, 05, 05]
+1D9A4; [0D 46 16, 05, 05]
-1D9E3; [0D 40 68, 05, 05]
+1D9A5; [0D 46 1D, 05, 05]
-1D9E4; [0D 40 6F, 05, 05]
+1D9A6; [0D 46 24, 05, 05]
-1D9E5; [0D 40 76, 05, 05]
+1D9A7; [0D 46 2B, 05, 05]
-1D9E6; [0D 40 7D, 05, 05]
+1D9A8; [0D 46 32, 05, 05]
-1D9E7; [0D 40 84, 05, 05]
+1D9A9; [0D 46 39, 05, 05]
-1D9E8; [0D 40 8B, 05, 05]
+1D9AA; [0D 46 40, 05, 05]
-1D9E9; [0D 40 92, 05, 05]
+1D9AB; [0D 46 47, 05, 05]
-1D9EA; [0D 40 99, 05, 05]
+1D9AC; [0D 46 4E, 05, 05]
-1D9EB; [0D 40 A0, 05, 05]
+1D9AD; [0D 46 55, 05, 05]
-1D9EC; [0D 40 A7, 05, 05]
+1D9AE; [0D 46 5C, 05, 05]
-1D9ED; [0D 40 AE, 05, 05]
+1D9AF; [0D 46 63, 05, 05]
-1D9EE; [0D 40 B5, 05, 05]
+1D9B0; [0D 46 6A, 05, 05]
-1D9EF; [0D 40 BC, 05, 05]
+1D9B1; [0D 46 71, 05, 05]
-1D9F0; [0D 40 C3, 05, 05]
+1D9B2; [0D 46 78, 05, 05]
-1D9F1; [0D 40 CA, 05, 05]
+1D9B3; [0D 46 7F, 05, 05]
-1D9F2; [0D 40 D1, 05, 05]
+1D9B4; [0D 46 86, 05, 05]
-1D9F3; [0D 40 D8, 05, 05]
+1D9B5; [0D 46 8D, 05, 05]
-1D9F4; [0D 40 DF, 05, 05]
+1D9B6; [0D 46 94, 05, 05]
-1D9F5; [0D 40 E6, 05, 05]
+1D9B7; [0D 46 9B, 05, 05]
-1D9F6; [0D 40 ED, 05, 05]
+1D9B8; [0D 46 A2, 05, 05]
-1D9F7; [0D 40 F4, 05, 05]
+1D9B9; [0D 46 A9, 05, 05]
-1D9F8; [0D 40 FB, 05, 05]
+1D9BA; [0D 46 B0, 05, 05]
-1D9F9; [0D 41 04, 05, 05]
+1D9BB; [0D 46 B7, 05, 05]
-1D9FA; [0D 41 0B, 05, 05]
+1D9BC; [0D 46 BE, 05, 05]
-1D9FB; [0D 41 12, 05, 05]
+1D9BD; [0D 46 C5, 05, 05]
-1D9FC; [0D 41 19, 05, 05]
+1D9BE; [0D 46 CC, 05, 05]
-1D9FD; [0D 41 20, 05, 05]
+1D9BF; [0D 46 D3, 05, 05]
-1D9FE; [0D 41 27, 05, 05]
+1D9C0; [0D 46 DA, 05, 05]
-1D9FF; [0D 41 2E, 05, 05]
+1D9C1; [0D 46 E1, 05, 05]
-1DA37; [0D 41 35, 05, 05]
+1D9C2; [0D 46 E8, 05, 05]
-1DA38; [0D 41 3C, 05, 05]
+1D9C3; [0D 46 EF, 05, 05]
-1DA39; [0D 41 43, 05, 05]
+1D9C4; [0D 46 F6, 05, 05]
-1DA3A; [0D 41 4A, 05, 05]
+1D9C5; [0D 46 FD, 05, 05]
-1DA6D; [0D 41 51, 05, 05]
+1D9C6; [0D 47 06, 05, 05]
-1DA6E; [0D 41 58, 05, 05]
+1D9C7; [0D 47 0D, 05, 05]
-1DA6F; [0D 41 5F, 05, 05]
+1D9C8; [0D 47 14, 05, 05]
-1DA70; [0D 41 66, 05, 05]
+1D9C9; [0D 47 1B, 05, 05]
-1DA71; [0D 41 6D, 05, 05]
+1D9CA; [0D 47 22, 05, 05]
-1DA72; [0D 41 74, 05, 05]
+1D9CB; [0D 47 29, 05, 05]
-1DA73; [0D 41 7B, 05, 05]
+1D9CC; [0D 47 30, 05, 05]
-1DA74; [0D 41 82, 05, 05]
+1D9CD; [0D 47 37, 05, 05]
-1DA76; [0D 41 89, 05, 05]
+1D9CE; [0D 47 3E, 05, 05]
-1DA77; [0D 41 90, 05, 05]
+1D9CF; [0D 47 45, 05, 05]
-1DA78; [0D 41 97, 05, 05]
+1D9D0; [0D 47 4C, 05, 05]
-1DA79; [0D 41 9E, 05, 05]
+1D9D1; [0D 47 53, 05, 05]
-1DA7A; [0D 41 A5, 05, 05]
+1D9D2; [0D 47 5A, 05, 05]
-1DA7B; [0D 41 AC, 05, 05]
+1D9D3; [0D 47 61, 05, 05]
-1DA7C; [0D 41 B3, 05, 05]
+1D9D4; [0D 47 68, 05, 05]
-1DA7D; [0D 41 BA, 05, 05]
+1D9D5; [0D 47 6F, 05, 05]
-1DA7E; [0D 41 C1, 05, 05]
+1D9D6; [0D 47 76, 05, 05]
-1DA7F; [0D 41 C8, 05, 05]
+1D9D7; [0D 47 7D, 05, 05]
-1DA80; [0D 41 CF, 05, 05]
+1D9D8; [0D 47 84, 05, 05]
-1DA81; [0D 41 D6, 05, 05]
+1D9D9; [0D 47 8B, 05, 05]
-1DA82; [0D 41 DD, 05, 05]
+1D9DA; [0D 47 92, 05, 05]
-1DA83; [0D 41 E4, 05, 05]
+1D9DB; [0D 47 99, 05, 05]
-1DA85; [0D 41 EB, 05, 05]
+1D9DC; [0D 47 A0, 05, 05]
-1DA86; [0D 41 F2, 05, 05]
+1D9DD; [0D 47 A7, 05, 05]
-2FF0; [0D 41 F9, 05, 05]
+1D9DE; [0D 47 AE, 05, 05]
-2FF1; [0D 42 02, 05, 05]
+1D9DF; [0D 47 B5, 05, 05]
-2FF2; [0D 42 09, 05, 05]
+1D9E0; [0D 47 BC, 05, 05]
-2FF3; [0D 42 10, 05, 05]
+1D9E1; [0D 47 C3, 05, 05]
-2FF4; [0D 42 17, 05, 05]
+1D9E2; [0D 47 CA, 05, 05]
-2FF5; [0D 42 1E, 05, 05]
+1D9E3; [0D 47 D1, 05, 05]
-2FF6; [0D 42 25, 05, 05]
+1D9E4; [0D 47 D8, 05, 05]
-2FF7; [0D 42 2C, 05, 05]
+1D9E5; [0D 47 DF, 05, 05]
-2FF8; [0D 42 33, 05, 05]
+1D9E6; [0D 47 E6, 05, 05]
-2FF9; [0D 42 3A, 05, 05]
+1D9E7; [0D 47 ED, 05, 05]
-2FFA; [0D 42 41, 05, 05]
+1D9E8; [0D 47 F4, 05, 05]
-2FFB; [0D 42 48, 05, 05]
+1D9E9; [0D 47 FB, 05, 05]
-31C0; [0D 42 4F, 05, 05]
+1D9EA; [0D 48 04, 05, 05]
-31C1; [0D 42 56, 05, 05]
+1D9EB; [0D 48 0B, 05, 05]
-31C2; [0D 42 5D, 05, 05]
+1D9EC; [0D 48 12, 05, 05]
-31C3; [0D 42 64, 05, 05]
+1D9ED; [0D 48 19, 05, 05]
-31C4; [0D 42 6B, 05, 05]
+1D9EE; [0D 48 20, 05, 05]
-31C5; [0D 42 72, 05, 05]
+1D9EF; [0D 48 27, 05, 05]
-31C6; [0D 42 79, 05, 05]
+1D9F0; [0D 48 2E, 05, 05]
-31C7; [0D 42 80, 05, 05]
+1D9F1; [0D 48 35, 05, 05]
-31C8; [0D 42 87, 05, 05]
+1D9F2; [0D 48 3C, 05, 05]
-31C9; [0D 42 8E, 05, 05]
+1D9F3; [0D 48 43, 05, 05]
-31CA; [0D 42 95, 05, 05]
+1D9F4; [0D 48 4A, 05, 05]
-31CB; [0D 42 9C, 05, 05]
+1D9F5; [0D 48 51, 05, 05]
-31CC; [0D 42 A3, 05, 05]
+1D9F6; [0D 48 58, 05, 05]
-31CD; [0D 42 AA, 05, 05]
+1D9F7; [0D 48 5F, 05, 05]
-31CE; [0D 42 B1, 05, 05]
+1D9F8; [0D 48 66, 05, 05]
-31CF; [0D 42 B8, 05, 05]
+1D9F9; [0D 48 6D, 05, 05]
-31D0; [0D 42 BF, 05, 05]
+1D9FA; [0D 48 74, 05, 05]
-31D1; [0D 42 C6, 05, 05]
+1D9FB; [0D 48 7B, 05, 05]
-31D2; [0D 42 CD, 05, 05]
+1D9FC; [0D 48 82, 05, 05]
-31D3; [0D 42 D4, 05, 05]
+1D9FD; [0D 48 89, 05, 05]
-31D4; [0D 42 DB, 05, 05]
+1D9FE; [0D 48 90, 05, 05]
-31D5; [0D 42 E2, 05, 05]
+1D9FF; [0D 48 97, 05, 05]
-31D6; [0D 42 E9, 05, 05]
+1DA37; [0D 48 9E, 05, 05]
-31D7; [0D 42 F0, 05, 05]
+1DA38; [0D 48 A5, 05, 05]
-31D8; [0D 42 F7, 05, 05]
+1DA39; [0D 48 AC, 05, 05]
-31D9; [0D 42 FE, 05, 05]
+1DA3A; [0D 48 B3, 05, 05]
-31DA; [0D 43 07, 05, 05]
+1DA6D; [0D 48 BA, 05, 05]
-31DB; [0D 43 0E, 05, 05]
+1DA6E; [0D 48 C1, 05, 05]
-31DC; [0D 43 15, 05, 05]
+1DA6F; [0D 48 C8, 05, 05]
-31DD; [0D 43 1C, 05, 05]
+1DA70; [0D 48 CF, 05, 05]
-31DE; [0D 43 23, 05, 05]
+1DA71; [0D 48 D6, 05, 05]
-31DF; [0D 43 2A, 05, 05]
+1DA72; [0D 48 DD, 05, 05]
-31E0; [0D 43 31, 05, 05]
+1DA73; [0D 48 E4, 05, 05]
-31E1; [0D 43 38, 05, 05]
+1DA74; [0D 48 EB, 05, 05]
-31E2; [0D 43 3F, 05, 05]
+1DA76; [0D 48 F2, 05, 05]
-31E3; [0D 43 46, 05, 05]
+1DA77; [0D 48 F9, 05, 05]
-3004; [0D 43 4D, 05, 05]
+1DA78; [0D 49 02, 05, 05]
-3012; [0D 45, 05, 05]
-3036; [0D 45, 05, 20]
+1DA79; [0D 49 09, 05, 05]
-3013; [0D 47 02, 05, 05]
+1DA7A; [0D 49 10, 05, 05]
-3020; [0D 47 09, 05, 05]
+1DA7B; [0D 49 17, 05, 05]
-3037; [0D 47 10, 05, 05]
+1DA7C; [0D 49 1E, 05, 05]
-303E; [0D 47 17, 05, 05]
+1DA7D; [0D 49 25, 05, 05]
-303F; [0D 47 1E, 05, 05]
+1DA7E; [0D 49 2C, 05, 05]
-3190; [0D 47 25, 05, 05]
+1DA7F; [0D 49 33, 05, 05]
-3191; [0D 47 2C, 05, 05]
+1DA80; [0D 49 3A, 05, 05]
-327F; [0D 47 33, 05, 05]
+1DA81; [0D 49 41, 05, 05]
-FFFC; [0D 47 3A, 05, 05]
+1DA82; [0D 49 48, 05, 05]
-02D0; [0D 49, 05, 05]
+1DA83; [0D 49 4F, 05, 05]
-02D1; [0D 4B, 05, 05]
+1DA85; [0D 49 56, 05, 05]
-0971; [0D 4D, 05, 05]
+1DA86; [0D 49 5D, 05, 05]
-0E46; [0D 4F, 05, 05]
+2FF0; [0D 49 64, 05, 05]
-0EC6; [0D 51, 05, 05]
+2FF1; [0D 49 6B, 05, 05]
-17D7; [0D 53, 05, 05]
+2FF2; [0D 49 72, 05, 05]
-1AA7; [0D 55, 05, 05]
+2FF3; [0D 49 79, 05, 05]
-A9CF; [0D 57, 05, 05]
+2FF4; [0D 49 80, 05, 05]
-A9E6; [0D 59, 05, 05]
+2FF5; [0D 49 87, 05, 05]
-AA70; [0D 5B, 05, 05]
+2FF6; [0D 49 8E, 05, 05]
-AADD; [0D 5D 02, 05, 05]
+2FF7; [0D 49 95, 05, 05]
-AAF3; [0D 5D 09, 05, 05]
+2FF8; [0D 49 9C, 05, 05]
-AAF4; [0D 5D 10, 05, 05]
+2FF9; [0D 49 A3, 05, 05]
-16B42; [0D 5D 17, 05, 05]
+2FFA; [0D 49 AA, 05, 05]
-16B43; [0D 5D 1E, 05, 05]
+2FFB; [0D 49 B1, 05, 05]
-1E13C; [0D 5D 25, 05, 05]
+31C0; [0D 49 B8, 05, 05]
-1E13D; [0D 5D 2C, 05, 05]
+31C1; [0D 49 BF, 05, 05]
-3005; [0D 5F, 05, 05]
+31C2; [0D 49 C6, 05, 05]
-303B; [0D 61, 05, 05]
+31C3; [0D 49 CD, 05, 05]
-16FE0; [0D 63 02, 05, 05]
+31C4; [0D 49 D4, 05, 05]
-16FE1; [0D 63 09, 05, 05]
+31C5; [0D 49 DB, 05, 05]
-16FE3; [0D 65, 05, 05]
+31C6; [0D 49 E2, 05, 05]
-3031; [0D 67, 05, 05]
-3032; [0D 67, 05, 05][, AE, 05]
+31C7; [0D 49 E9, 05, 05]
-3033; [0D 69, 05, 05]
-3034; [0D 69, 05, 05][, AE, 05]
+31C8; [0D 49 F0, 05, 05]
-3035; [0D 6B, 05, 05]
+31C9; [0D 49 F7, 05, 05]
-309D; [0D 6D, 05, 05]
-309E; [0D 6D, 05, 05][, AE, 05]
+31CA; [0D 49 FE, 05, 05]
-30FC; [0D 6F, 05, 05]
-FF70; [0D 6F, 05, A0]
+31CB; [0D 4A 07, 05, 05]
-30FD; [0D 71, 05, 05]
-30FE; [0D 71, 05, 05][, AE, 05]
+31CC; [0D 4A 0E, 05, 05]
-FDD1 20AC; [0D 7D 02, 05, 05] # CURRENCY first primary
+31CD; [0D 4A 15, 05, 05]
-00A4; [0D 7F, 05, 05]
+31CE; [0D 4A 1C, 05, 05]
-00A2; [0D 81, 05, 05]
-FFE0; [0D 81, 05, 20]
+31CF; [0D 4A 23, 05, 05]
-0024; [0D 83, 05, 05]
-FF04; [0D 83, 05, 20]
-FE69; [0D 83, 05, 2E]
+31D0; [0D 4A 2A, 05, 05]
-00A3; [0D 85, 05, 05]
-FFE1; [0D 85, 05, 20]
+31D1; [0D 4A 31, 05, 05]
-00A5; [0D 87, 05, 05]
-FFE5; [0D 87, 05, 20]
+31D2; [0D 4A 38, 05, 05]
-058F; [0D 89, 05, 05]
+31D3; [0D 4A 3F, 05, 05]
-060B; [0D 8B, 05, 05]
+31D4; [0D 4A 46, 05, 05]
-07FE; [0D 8D 02, 05, 05]
+31D5; [0D 4A 4D, 05, 05]
-07FF; [0D 8D 09, 05, 05]
+31D6; [0D 4A 54, 05, 05]
-09F2; [0D 8F, 05, 05]
+31D7; [0D 4A 5B, 05, 05]
-09F3; [0D 91, 05, 05]
+31D8; [0D 4A 62, 05, 05]
-09FB; [0D 93, 05, 05]
+31D9; [0D 4A 69, 05, 05]
-0AF1; [0D 95, 05, 05]
+31DA; [0D 4A 70, 05, 05]
-A838; [0D 97, 05, 05]
+31DB; [0D 4A 77, 05, 05]
-0BF9; [0D 99, 05, 05]
+31DC; [0D 4A 7E, 05, 05]
-11FDD; [0D 9B, 05, 05]
+31DD; [0D 4A 85, 05, 05]
-11FDE; [0D 9D, 05, 05]
+31DE; [0D 4A 8C, 05, 05]
-11FDF; [0D 9F, 05, 05]
+31DF; [0D 4A 93, 05, 05]
-11FE0; [0D A1, 05, 05]
+31E0; [0D 4A 9A, 05, 05]
-0E3F; [0D A3, 05, 05]
+31E1; [0D 4A A1, 05, 05]
-17DB; [0D A5, 05, 05]
+31E2; [0D 4A A8, 05, 05]
-1E2FF; [0D A7, 05, 05]
+31E3; [0D 4A AF, 05, 05]
-20A0; [0D A9, 05, 05]
+3004; [0D 4A B6, 05, 05]
-20A1; [0D AB, 05, 05]
+3012; [0D 4C, 05, 05]
+3036; [0D 4C, 05, 20]
-20A2; [0D AD, 05, 05]
+3013; [0D 4E 02, 05, 05]
-20A3; [0D AF, 05, 05]
+3020; [0D 4E 09, 05, 05]
-20A4; [0D B1, 05, 05]
+3037; [0D 4E 10, 05, 05]
-20A5; [0D B3, 05, 05]
+303E; [0D 4E 17, 05, 05]
-20A6; [0D B5, 05, 05]
+303F; [0D 4E 1E, 05, 05]
-20A7; [0D B7, 05, 05]
+3190; [0D 4E 25, 05, 05]
-20A9; [0D B9, 05, 05]
-FFE6; [0D B9, 05, 20]
+3191; [0D 4E 2C, 05, 05]
-20AA; [0D BB, 05, 05]
+327F; [0D 4E 33, 05, 05]
-20AB; [0D BD, 05, 05]
+FFFC; [0D 4E 3A, 05, 05]
-20AC; [0D BF, 05, 05]
+02D0; [0D 50, 05, 05]
-20AD; [0D C1, 05, 05]
+02D1; [0D 52, 05, 05]
-20AE; [0D C3, 05, 05]
+0971; [0D 54, 05, 05]
-20AF; [0D C5, 05, 05]
+0E46; [0D 56, 05, 05]
-20B0; [0D C7, 05, 05]
+0EC6; [0D 58, 05, 05]
-20B1; [0D C9, 05, 05]
+17D7; [0D 5A, 05, 05]
-20B2; [0D CB, 05, 05]
+1AA7; [0D 5C, 05, 05]
-20B3; [0D CD, 05, 05]
+A9CF; [0D 5E, 05, 05]
-20B4; [0D CF, 05, 05]
+A9E6; [0D 60, 05, 05]
-20B5; [0D D1, 05, 05]
+AA70; [0D 62, 05, 05]
-20B6; [0D D3, 05, 05]
+AADD; [0D 64 02, 05, 05]
-20B7; [0D D5, 05, 05]
+AAF3; [0D 64 09, 05, 05]
-20B8; [0D D7, 05, 05]
+AAF4; [0D 64 10, 05, 05]
-20B9; [0D D9, 05, 05]
+16B42; [0D 64 17, 05, 05]
-1ECB0; [0D DB, 05, 05]
+16B43; [0D 64 1E, 05, 05]
-20BA; [0D DD, 05, 05]
+1E13C; [0D 64 25, 05, 05]
-20BB; [0D DF, 05, 05]
+1E13D; [0D 64 2C, 05, 05]
-20BC; [0D E1, 05, 05]
+3005; [0D 66, 05, 05]
-20BD; [0D E3, 05, 05]
+303B; [0D 68, 05, 05]
-20BE; [0D E5, 05, 05]
+16FE0; [0D 6A 02, 05, 05]
-20BF; [0D E7, 05, 05]
+16FE1; [0D 6A 09, 05, 05]
-20A8; [0D E9, 05, 05]
+16FE3; [0D 6C, 05, 05]
-FDFC; [0D EB, 05, 05]
+3031; [0D 6E, 05, 05]
+3032; [0D 6E, 05, 05][, AE, 05]
+
+3033; [0D 70, 05, 05]
+3034; [0D 70, 05, 05][, AE, 05]
+
+3035; [0D 72, 05, 05]
+
+309D; [0D 74, 05, 05]
+309E; [0D 74, 05, 05][, AE, 05]
+
+30FC; [0D 76, 05, 05]
+FF70; [0D 76, 05, A0]
+
+30FD; [0D 78, 05, 05]
+30FE; [0D 78, 05, 05][, AE, 05]
+
+FDD1 20AC; [0D 84 02, 05, 05] # CURRENCY first primary
+
+00A4; [0D 86, 05, 05]
+
+00A2; [0D 88, 05, 05]
+FFE0; [0D 88, 05, 20]
+
+0024; [0D 8A, 05, 05]
+FF04; [0D 8A, 05, 20]
+FE69; [0D 8A, 05, 2E]
+
+00A3; [0D 8C, 05, 05]
+FFE1; [0D 8C, 05, 20]
+
+00A5; [0D 8E, 05, 05]
+FFE5; [0D 8E, 05, 20]
+
+058F; [0D 90, 05, 05]
+
+060B; [0D 92, 05, 05]
+
+07FE; [0D 94 02, 05, 05]
+
+07FF; [0D 94 09, 05, 05]
+
+09F2; [0D 96, 05, 05]
+
+09F3; [0D 98, 05, 05]
+
+09FB; [0D 9A, 05, 05]
+
+0AF1; [0D 9C, 05, 05]
+
+A838; [0D 9E, 05, 05]
+
+0BF9; [0D A0, 05, 05]
+
+11FDD; [0D A2, 05, 05]
+
+11FDE; [0D A4, 05, 05]
+
+11FDF; [0D A6, 05, 05]
+
+11FE0; [0D A8, 05, 05]
+
+0E3F; [0D AA, 05, 05]
+
+17DB; [0D AC, 05, 05]
+
+1E2FF; [0D AE, 05, 05]
+
+20A0; [0D B0, 05, 05]
+
+20A1; [0D B2, 05, 05]
+
+20A2; [0D B4, 05, 05]
+
+20A3; [0D B6, 05, 05]
+
+20A4; [0D B8, 05, 05]
+
+20A5; [0D BA, 05, 05]
+
+20A6; [0D BC, 05, 05]
+
+20A7; [0D BE, 05, 05]
+
+20A9; [0D C0, 05, 05]
+FFE6; [0D C0, 05, 20]
+
+20AA; [0D C2, 05, 05]
+
+20AB; [0D C4, 05, 05]
+
+20AC; [0D C6, 05, 05]
+
+20AD; [0D C8, 05, 05]
+
+20AE; [0D CA, 05, 05]
+
+20AF; [0D CC, 05, 05]
+
+20B0; [0D CE, 05, 05]
+
+20B1; [0D D0, 05, 05]
+
+20B2; [0D D2, 05, 05]
+
+20B3; [0D D4, 05, 05]
+
+20B4; [0D D6, 05, 05]
+
+20B5; [0D D8, 05, 05]
+
+20B6; [0D DA, 05, 05]
+
+20B7; [0D DC, 05, 05]
+
+20B8; [0D DE, 05, 05]
+
+20B9; [0D E0, 05, 05]
+
+1ECB0; [0D E2, 05, 05]
+
+20BA; [0D E4, 05, 05]
+
+20BB; [0D E6, 05, 05]
+
+20BC; [0D E8, 05, 05]
+
+20BD; [0D EA, 05, 05]
+
+20BE; [0D EC, 05, 05]
+
+20BF; [0D EE, 05, 05]
+
+20A8; [0D F0, 05, 05]
+
+FDFC; [0D F2, 05, 05]
FDD1 0034; [0E 02 02, 05, 05] # DIGIT first primary starts new lead byte
@@ -16482,495 +17049,501 @@ A835; [10 28, 05, 05]
10F54; [11 93 31, 05, 05]
-1173A; [11 93 38, 05, 05]
+10FC9; [11 93 38, 05, 05]
+
+10FCA; [11 93 3F, 05, 05]
+
+10FCB; [11 93 46, 05, 05]
+
+1173A; [11 93 4D, 05, 05]
-1173B; [11 93 3F, 05, 05]
+1173B; [11 93 54, 05, 05]
-1105B; [11 93 46, 05, 05]
+1105B; [11 93 5B, 05, 05]
-1105C; [11 93 4D, 05, 05]
+1105C; [11 93 62, 05, 05]
-1105D; [11 93 54, 05, 05]
+1105D; [11 93 69, 05, 05]
-1105E; [11 93 5B, 05, 05]
+1105E; [11 93 70, 05, 05]
-1105F; [11 93 62, 05, 05]
+1105F; [11 93 77, 05, 05]
-11060; [11 93 69, 05, 05]
+11060; [11 93 7E, 05, 05]
-11061; [11 93 70, 05, 05]
+11061; [11 93 85, 05, 05]
-11062; [11 93 77, 05, 05]
+11062; [11 93 8C, 05, 05]
-11063; [11 93 7E, 05, 05]
+11063; [11 93 93, 05, 05]
-11064; [11 93 85, 05, 05]
+11064; [11 93 9A, 05, 05]
-11065; [11 93 8C, 05, 05]
+11065; [11 93 A1, 05, 05]
-10A44; [11 93 93, 05, 05]
+10A44; [11 93 A8, 05, 05]
-10A45; [11 93 9A, 05, 05]
+10A45; [11 93 AF, 05, 05]
-10A46; [11 93 A1, 05, 05]
+10A46; [11 93 B6, 05, 05]
-10A47; [11 93 A8, 05, 05]
+10A47; [11 93 BD, 05, 05]
-10A48; [11 93 AF, 05, 05]
+10A48; [11 93 C4, 05, 05]
-11C63; [11 93 B6, 05, 05]
+11C63; [11 93 CB, 05, 05]
-11C64; [11 93 BD, 05, 05]
+11C64; [11 93 D2, 05, 05]
-11C65; [11 93 C4, 05, 05]
+11C65; [11 93 D9, 05, 05]
-11C66; [11 93 CB, 05, 05]
+11C66; [11 93 E0, 05, 05]
-11C67; [11 93 D2, 05, 05]
+11C67; [11 93 E7, 05, 05]
-11C68; [11 93 D9, 05, 05]
+11C68; [11 93 EE, 05, 05]
-11C69; [11 93 E0, 05, 05]
+11C69; [11 93 F5, 05, 05]
-11C6A; [11 93 E7, 05, 05]
+11C6A; [11 93 FC, 05, 05]
-11C6B; [11 93 EE, 05, 05]
+11C6B; [11 94 05, 05, 05]
-11C6C; [11 93 F5, 05, 05]
+11C6C; [11 94 0C, 05, 05]
-111EA; [11 95, 05, 05]
+111EA; [11 96, 05, 05]
-111EB; [11 97, 05, 05]
+111EB; [11 98, 05, 05]
-111EC; [11 99, 05, 05]
+111EC; [11 9A, 05, 05]
-111ED; [11 9B, 05, 05]
+111ED; [11 9C, 05, 05]
-111EE; [11 9D, 05, 05]
+111EE; [11 9E, 05, 05]
-111EF; [11 9F, 05, 05]
+111EF; [11 A0, 05, 05]
-111F0; [11 A1, 05, 05]
+111F0; [11 A2, 05, 05]
-111F1; [11 A3, 05, 05]
+111F1; [11 A4, 05, 05]
-111F2; [11 A5, 05, 05]
+111F2; [11 A6, 05, 05]
-111F3; [11 A7, 05, 05]
+111F3; [11 A8, 05, 05]
-111F4; [11 A9, 05, 05]
+111F4; [11 AA, 05, 05]
-118EA; [11 AB 02, 05, 05]
+118EA; [11 AC 02, 05, 05]
-118EB; [11 AB 09, 05, 05]
+118EB; [11 AC 09, 05, 05]
-118EC; [11 AB 10, 05, 05]
+118EC; [11 AC 10, 05, 05]
-118ED; [11 AB 17, 05, 05]
+118ED; [11 AC 17, 05, 05]
-118EE; [11 AB 1E, 05, 05]
+118EE; [11 AC 1E, 05, 05]
-118EF; [11 AB 25, 05, 05]
+118EF; [11 AC 25, 05, 05]
-118F0; [11 AB 2C, 05, 05]
+118F0; [11 AC 2C, 05, 05]
-118F1; [11 AB 33, 05, 05]
+118F1; [11 AC 33, 05, 05]
-118F2; [11 AB 3A, 05, 05]
+118F2; [11 AC 3A, 05, 05]
-16B5B; [11 AB 41, 05, 05]
+16B5B; [11 AC 41, 05, 05]
-16B5C; [11 AB 48, 05, 05]
+16B5C; [11 AC 48, 05, 05]
-16B5D; [11 AB 4F, 05, 05]
+16B5D; [11 AC 4F, 05, 05]
-16B5E; [11 AB 56, 05, 05]
+16B5E; [11 AC 56, 05, 05]
-16B5F; [11 AB 5D, 05, 05]
+16B5F; [11 AC 5D, 05, 05]
-16B60; [11 AB 64, 05, 05]
+16B60; [11 AC 64, 05, 05]
-16B61; [11 AB 6B, 05, 05]
+16B61; [11 AC 6B, 05, 05]
-16E8A; [11 AB 72, 05, 05]
+16E8A; [11 AC 72, 05, 05]
-16E8B; [11 AB 79, 05, 05]
+16E8B; [11 AC 79, 05, 05]
-16E8C; [11 AB 80, 05, 05]
+16E8C; [11 AC 80, 05, 05]
-16E8D; [11 AB 87, 05, 05]
+16E8D; [11 AC 87, 05, 05]
-16E8E; [11 AB 8E, 05, 05]
+16E8E; [11 AC 8E, 05, 05]
-16E8F; [11 AB 95, 05, 05]
+16E8F; [11 AC 95, 05, 05]
-16E90; [11 AB 9C, 05, 05]
+16E90; [11 AC 9C, 05, 05]
-16E91; [11 AB A3, 05, 05]
+16E91; [11 AC A3, 05, 05]
-16E92; [11 AB AA, 05, 05]
+16E92; [11 AC AA, 05, 05]
-16E93; [11 AB B1, 05, 05]
+16E93; [11 AC B1, 05, 05]
-1D2EA; [11 AD, 05, 05]
+1D2EA; [11 AE, 05, 05]
-1D2EB; [11 AF, 05, 05]
+1D2EB; [11 B0, 05, 05]
-1D2EC; [11 B1, 05, 05]
+1D2EC; [11 B2, 05, 05]
-1D2ED; [11 B3, 05, 05]
+1D2ED; [11 B4, 05, 05]
-1D2EE; [11 B5, 05, 05]
+1D2EE; [11 B6, 05, 05]
-1D2EF; [11 B7, 05, 05]
+1D2EF; [11 B8, 05, 05]
-1D2F0; [11 B9, 05, 05]
+1D2F0; [11 BA, 05, 05]
-1D2F1; [11 BB, 05, 05]
+1D2F1; [11 BC, 05, 05]
-1D2F2; [11 BD, 05, 05]
+1D2F2; [11 BE, 05, 05]
-1D2F3; [11 BF, 05, 05]
+1D2F3; [11 C0, 05, 05]
-1EC7A; [11 C1, 05, 05]
+1EC7A; [11 C2, 05, 05]
-1EC7B; [11 C3, 05, 05]
+1EC7B; [11 C4, 05, 05]
-1EC7C; [11 C5, 05, 05]
+1EC7C; [11 C6, 05, 05]
-1EC7D; [11 C7, 05, 05]
+1EC7D; [11 C8, 05, 05]
-1EC7E; [11 C9, 05, 05]
+1EC7E; [11 CA, 05, 05]
-1EC7F; [11 CB, 05, 05]
+1EC7F; [11 CC, 05, 05]
-1EC80; [11 CD, 05, 05]
+1EC80; [11 CE, 05, 05]
-1EC81; [11 CF, 05, 05]
+1EC81; [11 D0, 05, 05]
-1EC82; [11 D1, 05, 05]
+1EC82; [11 D2, 05, 05]
-1EC83; [11 D3, 05, 05]
+1EC83; [11 D4, 05, 05]
-1EC84; [11 D5, 05, 05]
+1EC84; [11 D6, 05, 05]
-1EC85; [11 D7, 05, 05]
+1EC85; [11 D8, 05, 05]
-1EC86; [11 D9, 05, 05]
+1EC86; [11 DA, 05, 05]
-1EC87; [11 DB, 05, 05]
+1EC87; [11 DC, 05, 05]
-1EC88; [11 DD, 05, 05]
+1EC88; [11 DE, 05, 05]
-1EC89; [11 DF, 05, 05]
+1EC89; [11 E0, 05, 05]
-1EC8A; [11 E1, 05, 05]
+1EC8A; [11 E2, 05, 05]
-1EC8B; [11 E3, 05, 05]
+1EC8B; [11 E4, 05, 05]
-1EC8C; [11 E5, 05, 05]
+1EC8C; [11 E6, 05, 05]
-1EC8D; [11 E7, 05, 05]
+1EC8D; [11 E8, 05, 05]
-1EC8E; [11 E9, 05, 05]
+1EC8E; [11 EA, 05, 05]
-1EC8F; [11 EB, 05, 05]
+1EC8F; [11 EC, 05, 05]
-1EC90; [11 ED, 05, 05]
+1EC90; [11 EE, 05, 05]
-1EC91; [11 EF, 05, 05]
+1EC91; [11 F0, 05, 05]
-1EC92; [11 F1, 05, 05]
+1EC92; [11 F2, 05, 05]
-1EC93; [11 F3, 05, 05]
+1EC93; [11 F4, 05, 05]
-1EC94; [11 F5, 05, 05]
+1EC94; [11 F6, 05, 05]
-1EC95; [11 F7, 05, 05]
+1EC95; [11 F8, 05, 05]
-1EC96; [11 F9, 05, 05]
+1EC96; [11 FA, 05, 05]
-1EC97; [11 FB, 05, 05]
+1EC97; [11 FC, 05, 05]
-1EC98; [11 FD, 05, 05]
+1EC98; [11 FE, 05, 05]
-1EC99; [11 FF, 05, 05]
+1EC99; [12 02, 05, 05]
-1EC9A; [12 03, 05, 05]
+1EC9A; [12 04, 05, 05]
-1EC9B; [12 05, 05, 05]
+1EC9B; [12 06, 05, 05]
-1EC9C; [12 07, 05, 05]
+1EC9C; [12 08, 05, 05]
-1EC9D; [12 09, 05, 05]
+1EC9D; [12 0A, 05, 05]
-1EC9E; [12 0B, 05, 05]
+1EC9E; [12 0C, 05, 05]
-1EC9F; [12 0D, 05, 05]
+1EC9F; [12 0E, 05, 05]
-1ECA0; [12 0F, 05, 05]
+1ECA0; [12 10, 05, 05]
-1ECA1; [12 11, 05, 05]
+1ECA1; [12 12, 05, 05]
-1ECA2; [12 13, 05, 05]
+1ECA2; [12 14, 05, 05]
-1ECAD; [12 15, 05, 05]
+1ECAD; [12 16, 05, 05]
-1ECAE; [12 17, 05, 05]
+1ECAE; [12 18, 05, 05]
-1ECAF; [12 19, 05, 05]
+1ECAF; [12 1A, 05, 05]
-1ECB3; [12 1B, 05, 05]
+1ECB3; [12 1C, 05, 05]
-1ECB4; [12 1D, 05, 05]
+1ECB4; [12 1E, 05, 05]
-1ED0A; [12 1F, 05, 05]
+1ED0A; [12 20, 05, 05]
-1ED0B; [12 21, 05, 05]
+1ED0B; [12 22, 05, 05]
-1ED0C; [12 23, 05, 05]
+1ED0C; [12 24, 05, 05]
-1ED0D; [12 25, 05, 05]
+1ED0D; [12 26, 05, 05]
-1ED0E; [12 27, 05, 05]
+1ED0E; [12 28, 05, 05]
-1ED0F; [12 29, 05, 05]
+1ED0F; [12 2A, 05, 05]
-1ED10; [12 2B, 05, 05]
+1ED10; [12 2C, 05, 05]
-1ED11; [12 2D, 05, 05]
+1ED11; [12 2E, 05, 05]
-1ED12; [12 2F, 05, 05]
+1ED12; [12 30, 05, 05]
-1ED13; [12 31, 05, 05]
+1ED13; [12 32, 05, 05]
-1ED14; [12 33, 05, 05]
+1ED14; [12 34, 05, 05]
-1ED15; [12 35, 05, 05]
+1ED15; [12 36, 05, 05]
-1ED16; [12 37, 05, 05]
+1ED16; [12 38, 05, 05]
-1ED17; [12 39, 05, 05]
+1ED17; [12 3A, 05, 05]
-1ED18; [12 3B, 05, 05]
+1ED18; [12 3C, 05, 05]
-1ED19; [12 3D, 05, 05]
+1ED19; [12 3E, 05, 05]
-1ED1A; [12 3F, 05, 05]
+1ED1A; [12 40, 05, 05]
-1ED1B; [12 41, 05, 05]
+1ED1B; [12 42, 05, 05]
-1ED1C; [12 43, 05, 05]
+1ED1C; [12 44, 05, 05]
-1ED1D; [12 45, 05, 05]
+1ED1D; [12 46, 05, 05]
-1ED1E; [12 47, 05, 05]
+1ED1E; [12 48, 05, 05]
-1ED1F; [12 49, 05, 05]
+1ED1F; [12 4A, 05, 05]
-1ED20; [12 4B, 05, 05]
+1ED20; [12 4C, 05, 05]
-1ED21; [12 4D, 05, 05]
+1ED21; [12 4E, 05, 05]
-1ED22; [12 4F, 05, 05]
+1ED22; [12 50, 05, 05]
-1ED23; [12 51, 05, 05]
+1ED23; [12 52, 05, 05]
-1ED24; [12 53, 05, 05]
+1ED24; [12 54, 05, 05]
-1ED25; [12 55, 05, 05]
+1ED25; [12 56, 05, 05]
-1ED26; [12 57, 05, 05]
+1ED26; [12 58, 05, 05]
-1ED27; [12 59, 05, 05]
+1ED27; [12 5A, 05, 05]
-1ED28; [12 5B, 05, 05]
+1ED28; [12 5C, 05, 05]
-1ED29; [12 5D, 05, 05]
+1ED29; [12 5E, 05, 05]
-1ED2A; [12 5F, 05, 05]
+1ED2A; [12 60, 05, 05]
-1ED2B; [12 61, 05, 05]
+1ED2B; [12 62, 05, 05]
-1ED2C; [12 63, 05, 05]
+1ED2C; [12 64, 05, 05]
-1ED2D; [12 65, 05, 05]
+1ED2D; [12 66, 05, 05]
-1ED37; [12 67, 05, 05]
+1ED37; [12 68, 05, 05]
-1ED38; [12 69, 05, 05]
+1ED38; [12 6A, 05, 05]
-1ED39; [12 6B, 05, 05]
+1ED39; [12 6C, 05, 05]
-1ED3A; [12 6D, 05, 05]
+1ED3A; [12 6E, 05, 05]
-1ED3B; [12 6F, 05, 05]
+1ED3B; [12 70, 05, 05]
-1ED3C; [12 71, 05, 05]
+1ED3C; [12 72, 05, 05]
-1ED3D; [12 73, 05, 05]
+1ED3D; [12 74, 05, 05]
-109C9; [12 75 02, 05, 05]
+109C9; [12 76 02, 05, 05]
-109CA; [12 75 09, 05, 05]
+109CA; [12 76 09, 05, 05]
-109CB; [12 75 10, 05, 05]
+109CB; [12 76 10, 05, 05]
-109CC; [12 75 17, 05, 05]
+109CC; [12 76 17, 05, 05]
-109CD; [12 75 1E, 05, 05]
+109CD; [12 76 1E, 05, 05]
-109CE; [12 75 25, 05, 05]
+109CE; [12 76 25, 05, 05]
-109CF; [12 75 2C, 05, 05]
+109CF; [12 76 2C, 05, 05]
-109D2; [12 75 33, 05, 05]
+109D2; [12 76 33, 05, 05]
-109D3; [12 75 3A, 05, 05]
+109D3; [12 76 3A, 05, 05]
-109D4; [12 75 41, 05, 05]
+109D4; [12 76 41, 05, 05]
-109D5; [12 75 48, 05, 05]
+109D5; [12 76 48, 05, 05]
-109D6; [12 75 4F, 05, 05]
+109D6; [12 76 4F, 05, 05]
-109D7; [12 75 56, 05, 05]
+109D7; [12 76 56, 05, 05]
-109D8; [12 75 5D, 05, 05]
+109D8; [12 76 5D, 05, 05]
-109D9; [12 75 64, 05, 05]
+109D9; [12 76 64, 05, 05]
-109DA; [12 75 6B, 05, 05]
+109DA; [12 76 6B, 05, 05]
-109DB; [12 75 72, 05, 05]
+109DB; [12 76 72, 05, 05]
-109DC; [12 75 79, 05, 05]
+109DC; [12 76 79, 05, 05]
-109DD; [12 75 80, 05, 05]
+109DD; [12 76 80, 05, 05]
-109DE; [12 75 87, 05, 05]
+109DE; [12 76 87, 05, 05]
-109DF; [12 75 8E, 05, 05]
+109DF; [12 76 8E, 05, 05]
-109E0; [12 75 95, 05, 05]
+109E0; [12 76 95, 05, 05]
-109E1; [12 75 9C, 05, 05]
+109E1; [12 76 9C, 05, 05]
-109E2; [12 75 A3, 05, 05]
+109E2; [12 76 A3, 05, 05]
-109E3; [12 75 AA, 05, 05]
+109E3; [12 76 AA, 05, 05]
-109E4; [12 75 B1, 05, 05]
+109E4; [12 76 B1, 05, 05]
-109E5; [12 75 B8, 05, 05]
+109E5; [12 76 B8, 05, 05]
-109E6; [12 75 BF, 05, 05]
+109E6; [12 76 BF, 05, 05]
-109E7; [12 75 C6, 05, 05]
+109E7; [12 76 C6, 05, 05]
-109E8; [12 75 CD, 05, 05]
+109E8; [12 76 CD, 05, 05]
-109E9; [12 75 D4, 05, 05]
+109E9; [12 76 D4, 05, 05]
-109EA; [12 75 DB, 05, 05]
+109EA; [12 76 DB, 05, 05]
-109EB; [12 75 E2, 05, 05]
+109EB; [12 76 E2, 05, 05]
-109EC; [12 75 E9, 05, 05]
+109EC; [12 76 E9, 05, 05]
-109ED; [12 75 F0, 05, 05]
+109ED; [12 76 F0, 05, 05]
-109EE; [12 75 F7, 05, 05]
+109EE; [12 76 F7, 05, 05]
-109EF; [12 75 FE, 05, 05]
+109EF; [12 76 FE, 05, 05]
-109F0; [12 76 07, 05, 05]
+109F0; [12 77 07, 05, 05]
-109F1; [12 76 0E, 05, 05]
+109F1; [12 77 0E, 05, 05]
-109F2; [12 76 15, 05, 05]
+109F2; [12 77 15, 05, 05]
-109F3; [12 76 1C, 05, 05]
+109F3; [12 77 1C, 05, 05]
-109F4; [12 76 23, 05, 05]
+109F4; [12 77 23, 05, 05]
-109F5; [12 76 2A, 05, 05]
+109F5; [12 77 2A, 05, 05]
-109BD; [12 76 31, 05, 05]
+109BD; [12 77 31, 05, 05]
-109F6; [12 76 38, 05, 05]
+109F6; [12 77 38, 05, 05]
-109F7; [12 76 3F, 05, 05]
+109F7; [12 77 3F, 05, 05]
-109F8; [12 76 46, 05, 05]
+109F8; [12 77 46, 05, 05]
-109F9; [12 76 4D, 05, 05]
+109F9; [12 77 4D, 05, 05]
-109FA; [12 76 54, 05, 05]
+109FA; [12 77 54, 05, 05]
-109FB; [12 76 5B, 05, 05]
+109FB; [12 77 5B, 05, 05]
-109FC; [12 76 62, 05, 05]
+109FC; [12 77 62, 05, 05]
-109FD; [12 76 69, 05, 05]
+109FD; [12 77 69, 05, 05]
-109FE; [12 76 70, 05, 05]
+109FE; [12 77 70, 05, 05]
-109FF; [12 76 77, 05, 05]
+109FF; [12 77 77, 05, 05]
-109BC; [12 76 7E, 05, 05]
+109BC; [12 77 7E, 05, 05]
-12432; [12 76 85, 05, 05]
+12432; [12 77 85, 05, 05]
-12433; [12 76 8C, 05, 05]
+12433; [12 77 8C, 05, 05]
-1245A; [12 76 93, 05, 05]
+1245A; [12 77 93, 05, 05]
-1245B; [12 76 9A, 05, 05]
+1245B; [12 77 9A, 05, 05]
-1245C; [12 76 A1, 05, 05]
+1245C; [12 77 A1, 05, 05]
-1245D; [12 76 A8, 05, 05]
+1245D; [12 77 A8, 05, 05]
-1245E; [12 76 AF, 05, 05]
+1245E; [12 77 AF, 05, 05]
-1245F; [12 76 B6, 05, 05]
+1245F; [12 77 B6, 05, 05]
-12460; [12 76 BD, 05, 05]
+12460; [12 77 BD, 05, 05]
-12461; [12 76 C4, 05, 05]
+12461; [12 77 C4, 05, 05]
-12462; [12 76 CB, 05, 05]
+12462; [12 77 CB, 05, 05]
-12463; [12 76 D2, 05, 05]
+12463; [12 77 D2, 05, 05]
-12464; [12 76 D9, 05, 05]
+12464; [12 77 D9, 05, 05]
-12465; [12 76 E0, 05, 05]
+12465; [12 77 E0, 05, 05]
-12466; [12 76 E7, 05, 05]
+12466; [12 77 E7, 05, 05]
-12467; [12 76 EE, 05, 05]
+12467; [12 77 EE, 05, 05]
-12468; [12 76 F5, 05, 05]
+12468; [12 77 F5, 05, 05]
-1D369; [12 78, 05, 05]
+1D369; [12 79, 05, 05]
-1D36A; [12 7A, 05, 05]
+1D36A; [12 7B, 05, 05]
-1D36B; [12 7C, 05, 05]
+1D36B; [12 7D, 05, 05]
-1D36C; [12 7E, 05, 05]
+1D36C; [12 7F, 05, 05]
-1D36D; [12 80, 05, 05]
+1D36D; [12 81, 05, 05]
-1D36E; [12 82, 05, 05]
+1D36E; [12 83, 05, 05]
-1D36F; [12 84, 05, 05]
+1D36F; [12 85, 05, 05]
-1D370; [12 86, 05, 05]
+1D370; [12 87, 05, 05]
-1D371; [12 88, 05, 05]
+1D371; [12 89, 05, 05]
0030; [13, 05, 05]
0660; [13, 05, 05]
@@ -17025,6 +17598,7 @@ ABF0; [13, 05, 05]
116C0; [13, 05, 05]
11730; [13, 05, 05]
118E0; [13, 05, 05]
+11950; [13, 05, 05]
11C50; [13, 05, 05]
11D50; [13, 05, 05]
11DA0; [13, 05, 05]
@@ -17042,6 +17616,7 @@ FF10; [13, 05, 10]
1D7E2; [13, 05, 1A]
1D7EC; [13, 05, 1A]
1D7F6; [13, 05, 1A]
+1FBF0; [13, 05, 1A]
24EA; [13, 05, 1F]
24FF; [13, 05, 1F]
1F10B; [13, 05, 1F]
@@ -17122,6 +17697,7 @@ ABF1; [15, 05, 05]
10E60; [15, 05, 05]
10F1D; [15, 05, 05]
10F51; [15, 05, 05]
+10FC5; [15, 05, 05]
11052; [15, 05, 05]
11067; [15, 05, 05]
110F1; [15, 05, 05]
@@ -17135,6 +17711,7 @@ ABF1; [15, 05, 05]
116C1; [15, 05, 05]
11731; [15, 05, 05]
118E1; [15, 05, 05]
+11951; [15, 05, 05]
11C51; [15, 05, 05]
11C5A; [15, 05, 05]
11D51; [15, 05, 05]
@@ -17166,6 +17743,7 @@ FF11; [15, 05, 10]
1D7E3; [15, 05, 1A]
1D7ED; [15, 05, 1A]
1D7F7; [15, 05, 1A]
+1FBF1; [15, 05, 1A]
2460; [15, 05, 1F]
24F5; [15, 05, 1F]
2776; [15, 05, 1F]
@@ -17310,6 +17888,7 @@ ABF2; [17, 05, 05]
10D32; [17, 05, 05]
10E61; [17, 05, 05]
10F1E; [17, 05, 05]
+10FC6; [17, 05, 05]
11053; [17, 05, 05]
11068; [17, 05, 05]
110F2; [17, 05, 05]
@@ -17323,6 +17902,7 @@ ABF2; [17, 05, 05]
116C2; [17, 05, 05]
11732; [17, 05, 05]
118E2; [17, 05, 05]
+11952; [17, 05, 05]
11C52; [17, 05, 05]
11C5B; [17, 05, 05]
11D52; [17, 05, 05]
@@ -17357,6 +17937,7 @@ FF12; [17, 05, 10]
1D7E4; [17, 05, 1A]
1D7EE; [17, 05, 1A]
1D7F8; [17, 05, 1A]
+1FBF2; [17, 05, 1A]
2461; [17, 05, 1F]
24F6; [17, 05, 1F]
2777; [17, 05, 1F]
@@ -17462,6 +18043,7 @@ ABF3; [19, 05, 05]
10D33; [19, 05, 05]
10E62; [19, 05, 05]
10F1F; [19, 05, 05]
+10FC7; [19, 05, 05]
11054; [19, 05, 05]
11069; [19, 05, 05]
110F3; [19, 05, 05]
@@ -17475,6 +18057,7 @@ ABF3; [19, 05, 05]
116C3; [19, 05, 05]
11733; [19, 05, 05]
118E3; [19, 05, 05]
+11953; [19, 05, 05]
11C53; [19, 05, 05]
11C5C; [19, 05, 05]
11D53; [19, 05, 05]
@@ -17514,6 +18097,7 @@ FF13; [19, 05, 10]
1D7E5; [19, 05, 1A]
1D7EF; [19, 05, 1A]
1D7F9; [19, 05, 1A]
+1FBF3; [19, 05, 1A]
2462; [19, 05, 1F]
24F7; [19, 05, 1F]
2778; [19, 05, 1F]
@@ -17599,6 +18183,7 @@ ABF4; [1B, 05, 05]
10D34; [1B, 05, 05]
10E63; [1B, 05, 05]
10F20; [1B, 05, 05]
+10FC8; [1B, 05, 05]
11055; [1B, 05, 05]
1106A; [1B, 05, 05]
110F4; [1B, 05, 05]
@@ -17612,6 +18197,7 @@ ABF4; [1B, 05, 05]
116C4; [1B, 05, 05]
11734; [1B, 05, 05]
118E4; [1B, 05, 05]
+11954; [1B, 05, 05]
11C54; [1B, 05, 05]
11C5D; [1B, 05, 05]
11D54; [1B, 05, 05]
@@ -17652,6 +18238,7 @@ FF14; [1B, 05, 10]
1D7E6; [1B, 05, 1A]
1D7F0; [1B, 05, 1A]
1D7FA; [1B, 05, 1A]
+1FBF4; [1B, 05, 1A]
2463; [1B, 05, 1F]
24F8; [1B, 05, 1F]
2779; [1B, 05, 1F]
@@ -17749,6 +18336,7 @@ ABF5; [1D, 05, 05]
116C5; [1D, 05, 05]
11735; [1D, 05, 05]
118E5; [1D, 05, 05]
+11955; [1D, 05, 05]
11C55; [1D, 05, 05]
11C5E; [1D, 05, 05]
11D55; [1D, 05, 05]
@@ -17786,6 +18374,7 @@ FF15; [1D, 05, 10]
1D7E7; [1D, 05, 1A]
1D7F1; [1D, 05, 1A]
1D7FB; [1D, 05, 1A]
+1FBF5; [1D, 05, 1A]
2464; [1D, 05, 1F]
24F9; [1D, 05, 1F]
277A; [1D, 05, 1F]
@@ -17864,6 +18453,7 @@ ABF6; [1F, 05, 05]
116C6; [1F, 05, 05]
11736; [1F, 05, 05]
118E6; [1F, 05, 05]
+11956; [1F, 05, 05]
11C56; [1F, 05, 05]
11C5F; [1F, 05, 05]
11D56; [1F, 05, 05]
@@ -17895,6 +18485,7 @@ FF16; [1F, 05, 10]
1D7E8; [1F, 05, 1A]
1D7F2; [1F, 05, 1A]
1D7FC; [1F, 05, 1A]
+1FBF6; [1F, 05, 1A]
2465; [1F, 05, 1F]
24FA; [1F, 05, 1F]
277B; [1F, 05, 1F]
@@ -17969,6 +18560,7 @@ ABF7; [21, 05, 05]
116C7; [21, 05, 05]
11737; [21, 05, 05]
118E7; [21, 05, 05]
+11957; [21, 05, 05]
11C57; [21, 05, 05]
11C60; [21, 05, 05]
11D57; [21, 05, 05]
@@ -18001,6 +18593,7 @@ FF17; [21, 05, 10]
1D7E9; [21, 05, 1A]
1D7F3; [21, 05, 1A]
1D7FD; [21, 05, 1A]
+1FBF7; [21, 05, 1A]
2466; [21, 05, 1F]
24FB; [21, 05, 1F]
277C; [21, 05, 1F]
@@ -18076,6 +18669,7 @@ ABF8; [23, 05, 05]
116C8; [23, 05, 05]
11738; [23, 05, 05]
118E8; [23, 05, 05]
+11958; [23, 05, 05]
11C58; [23, 05, 05]
11C61; [23, 05, 05]
11D58; [23, 05, 05]
@@ -18107,6 +18701,7 @@ FF18; [23, 05, 10]
1D7EA; [23, 05, 1A]
1D7F4; [23, 05, 1A]
1D7FE; [23, 05, 1A]
+1FBF8; [23, 05, 1A]
2467; [23, 05, 1F]
24FC; [23, 05, 1F]
277D; [23, 05, 1F]
@@ -18181,6 +18776,7 @@ ABF9; [25, 05, 05]
116C9; [25, 05, 05]
11739; [25, 05, 05]
118E9; [25, 05, 05]
+11959; [25, 05, 05]
11C59; [25, 05, 05]
11C62; [25, 05, 05]
11D59; [25, 05, 05]
@@ -18214,6 +18810,7 @@ FF19; [25, 05, 10]
1D7EB; [25, 05, 1C]
1D7F5; [25, 05, 1C]
1D7FF; [25, 05, 1C]
+1FBF9; [25, 05, 1C]
2468; [25, 05, 22]
24FD; [25, 05, 22]
277E; [25, 05, 22]
@@ -18652,26 +19249,29 @@ AB66; [30, 05, 13][5D 10, 05, 20]
1D06; [31 08, 05, 05]
-1D6D; [31 0A, 05, 05]
+A7C8; [31 0A, 05, 05]
+A7C7; [31 0A, 05, A0]
-1D81; [31 0C, 05, 05]
+1D6D; [31 0C, 05, 05]
-0256; [31 0E, 05, 05]
-0189; [31 0E, 05, A0]
+1D81; [31 0E, 05, 05]
-0257; [31 10, 05, 05]
-018A; [31 10, 05, A0]
+0256; [31 10, 05, 05]
+0189; [31 10, 05, A0]
-1D91; [31 12, 05, 05]
+0257; [31 12, 05, 05]
+018A; [31 12, 05, A0]
-018C; [31 14, 05, 05]
-018B; [31 14, 05, A0]
+1D91; [31 14, 05, 05]
-0221; [31 16, 05, 05]
+018C; [31 16, 05, 05]
+018B; [31 16, 05, A0]
-A771; [31 18, 05, 05]
+0221; [31 18, 05, 05]
-1E9F; [31 1A, 05, 05]
+A771; [31 1A, 05, 05]
+
+1E9F; [31 1C, 05, 05]
0065; [32, 05, 05]
FF45; [32, 05, 10]
@@ -19071,15 +19671,18 @@ A7AA; [39 0C, 05, A0]
2C76; [39 10, 05, 05]
2C75; [39 10, 05, A0]
-A727; [39 12, 05, 05]
-A726; [39 12, 05, A0]
-AB5C; [39 12, 05, 2E]
+A7F6; [39 12, 05, 05]
+A7F5; [39 12, 05, A0]
+
+A727; [39 14, 05, 05]
+A726; [39 14, 05, A0]
+AB5C; [39 14, 05, 2E]
-0267; [39 14, 05, 05]
+0267; [39 16, 05, 05]
-02BB; [39 16, 05, 05]
+02BB; [39 18, 05, 05]
-02BD; [39 18, 05, 05]
+02BD; [39 1A, 05, 05]
0069; [3A, 05, 05]
FF49; [3A, 05, 10]
@@ -19411,8 +20014,8 @@ FF2C; [40, 05, 9F]
1E3C; [40, 05, 9C][, CC, 05]
1E3B; [40, 05, 05][, D2, 05]
1E3A; [40, 05, 9C][, D2, 05]
-0140; [40, 05, 05][, FB 99, 05]
-013F; [40, 05, 9C][, FB 99, 05]
+0140; [40, 05, 05][, FB DB, 05]
+013F; [40, 05, 9C][, FB DB, 05]
01C9; [40, 05, 13][3C, 05, 13]
01C8; [40, 05, A2][3C, 05, 13]
01C7; [40, 05, A2][3C, 05, A2]
@@ -20139,12 +20742,14 @@ AB4C; [4D 34, 05, 05]
0281; [4D 36, 05, 05]
02B6; [4D 36, 05, 20]
-A775; [4D 38, 05, 05]
+AB68; [4D 38, 05, 05]
+
+A775; [4D 3A, 05, 05]
-A776; [4D 3A, 05, 05]
+A776; [4D 3C, 05, 05]
-A75D; [4D 3C, 05, 05]
-A75C; [4D 3C, 05, A0]
+A75D; [4D 3E, 05, 05]
+A75C; [4D 3E, 05, A0]
0073; [4E, 05, 05]
FF53; [4E, 05, 10]
@@ -20226,37 +20831,40 @@ FB05; [4E, 78, 05][50, 05, 13]
A731; [4F 06, 05, 05]
-1D74; [4F 08, 05, 05]
+A7CA; [4F 08, 05, 05]
+A7C9; [4F 08, 05, A0]
-1D8A; [4F 0A, 05, 05]
+1D74; [4F 0A, 05, 05]
-0282; [4F 0C, 05, 05]
-A7C5; [4F 0C, 05, 9E]
-1DB3; [4F 0C, 05, 2C]
+1D8A; [4F 0C, 05, 05]
-023F; [4F 0E, 05, 05]
-2C7E; [4F 0E, 05, A0]
+0282; [4F 0E, 05, 05]
+A7C5; [4F 0E, 05, 9E]
+1DB3; [4F 0E, 05, 2C]
-1E9C; [4F 10, 05, 05]
+023F; [4F 10, 05, 05]
+2C7E; [4F 10, 05, A0]
-1E9D; [4F 12, 05, 05]
+1E9C; [4F 12, 05, 05]
-0283; [4F 14, 05, 05]
-1DEF; [4F 14, 05, 10]
-01A9; [4F 14, 05, 9E]
-1DB4; [4F 14, 05, 2C]
+1E9D; [4F 14, 05, 05]
-AB4D; [4F 16, 05, 05]
+0283; [4F 16, 05, 05]
+1DEF; [4F 16, 05, 10]
+01A9; [4F 16, 05, 9E]
+1DB4; [4F 16, 05, 2C]
-1D8B; [4F 18, 05, 05]
+AB4D; [4F 18, 05, 05]
-01AA; [4F 1A, 05, 05]
+1D8B; [4F 1A, 05, 05]
-0285; [4F 1C, 05, 05]
+01AA; [4F 1C, 05, 05]
-1D98; [4F 1E, 05, 05]
+0285; [4F 1E, 05, 05]
-0286; [4F 20, 05, 05]
+1D98; [4F 20, 05, 05]
+
+0286; [4F 22, 05, 05]
0074; [50, 05, 05]
FF54; [50, 05, 10]
@@ -20321,8 +20929,8 @@ A786; [50, 78, A0]
2122; [50, 05, 2B][42, 05, 2B]
01BE; [50, 05, 13][4E, 05, 13]
02A6; [50, 05, 13][4E, 05, 13]
-AB67; [50, 05, 13][4F 0C, 05, 10]
-02A7; [50, 05, 13][4F 14, 05, 10]
+AB67; [50, 05, 13][4F 0E, 05, 10]
+02A7; [50, 05, 13][4F 16, 05, 10]
A729; [50, 05, 13][5C, 05, 13]
A728; [50, 05, A2][5C, 05, 13]
@@ -20599,6 +21207,7 @@ A75E; [55 08, 05, A0]
0077; [56, 05, 05]
FF57; [56, 05, 10]
+1ABF; [56, 05, 14]
1DF1; [56, 05, 14]
1D430; [56, 05, 18]
1D464; [56, 05, 18]
@@ -20662,6 +21271,8 @@ A7C2; [57 08, 05, A0]
2C72; [57 0A, 05, A0]
028D; [57 0C, 05, 05]
+1AC0; [57 0C, 05, 20]
+AB69; [57 0C, 05, 2E]
0078; [58, 05, 05]
FF58; [58, 05, 10]
@@ -23502,11 +24113,13 @@ FB5A; [66 24, 05, 31]
0756; [66 26 33, 05, 05]
-08A1; [66 26 3A, 05, 05]
+08BE; [66 26 3A, 05, 05]
+
+08A1; [66 26 41, 05, 05]
-08B6; [66 26 41, 05, 05]
+08B6; [66 26 48, 05, 05]
-08B7; [66 26 48, 05, 05]
+08B7; [66 26 4F, 05, 05]
0629; [66 28, 05, 05]
FE94; [66 28, 05, 20]
@@ -23602,7 +24215,11 @@ FB65; [66 36, 05, 1B]
FB63; [66 36, 05, 26]
FB62; [66 36, 05, 31]
-08B8; [66 38, 05, 05]
+08B8; [66 38 02, 05, 05]
+
+08BF; [66 38 09, 05, 05]
+
+08C0; [66 38 10, 05, 05]
062C; [66 3A, 05, 05]
1EE02; [66 3A, 05, 10]
@@ -23657,7 +24274,13 @@ FB81; [66 44, 05, 1B]
FB7F; [66 44, 05, 26]
FB7E; [66 44, 05, 31]
-08A2; [66 46, 05, 05]
+08A2; [66 46 02, 05, 05]
+
+08C1; [66 46 09, 05, 05]
+
+08C5; [66 46 10, 05, 05]
+
+08C6; [66 46 17, 05, 05]
062D; [66 48, 05, 05]
1EE07; [66 48, 05, 10]
@@ -24090,15 +24713,17 @@ FCFA; [66 A8, 05, 30][66 EE, 05, 33]
06A0; [66 AA, 05, 05]
-06FC; [66 AC 02, 05, 05]
+08C3; [66 AC 02, 05, 05]
-075D; [66 AC 09, 05, 05]
+06FC; [66 AC 09, 05, 05]
-075E; [66 AC 10, 05, 05]
+075D; [66 AC 10, 05, 05]
-075F; [66 AC 17, 05, 05]
+075E; [66 AC 17, 05, 05]
-08B3; [66 AC 1E, 05, 05]
+075F; [66 AC 1E, 05, 05]
+
+08B3; [66 AC 25, 05, 05]
0641; [66 AE, 05, 05]
1EE10; [66 AE, 05, 10]
@@ -24191,7 +24816,9 @@ FC36; [66 B2, 05, 30][66 EE, 05, 33]
06A8; [66 B4 10, 05, 05]
-08A5; [66 B4 17, 05, 05]
+08C4; [66 B4 17, 05, 05]
+
+08A5; [66 B4 1E, 05, 05]
0643; [66 B6, 05, 05]
1EE0A; [66 B6, 05, 10]
@@ -24285,6 +24912,8 @@ FB96; [66 C2 1E, 05, 31]
0764; [66 C2 48, 05, 05]
+08C2; [66 C2 4F, 05, 05]
+
0644; [66 C4, 05, 05]
1EE0B; [66 C4, 05, 10]
1EE2B; [66 C4, 05, 10]
@@ -24345,6 +24974,8 @@ FC44; [66 C4, 05, 30][66 EE, 05, 33]
08A6; [66 C6 25, 05, 05]
+08C7; [66 C6 2C, 05, 05]
+
0645; [66 C8, 05, 05]
1EE0C; [66 C8, 05, 10]
1EE2C; [66 C8, 05, 10]
@@ -27191,7 +27822,7 @@ FDD1 0D15; [70 04 02, 05, 05] # MALAYALAM first primary starts new lead byte (co
0D14; [70 26, 05, 05]
0D15; [70 28, 05, 05]
-0D7F; [70 28, 05, 20][70 96, 05, 20]
+0D7F; [70 28, 05, 20][70 98, 05, 20]
0D16; [70 2A, 05, 05]
@@ -27220,7 +27851,7 @@ FDD1 0D15; [70 04 02, 05, 05] # MALAYALAM first primary starts new lead byte (co
0D22; [70 42, 05, 05]
0D23; [70 44, 05, 05]
-0D7A; [70 44, 05, 20][70 96, 05, 20]
+0D7A; [70 44, 05, 20][70 98, 05, 20]
0D24; [70 46, 05, 05]
@@ -27231,7 +27862,7 @@ FDD1 0D15; [70 04 02, 05, 05] # MALAYALAM first primary starts new lead byte (co
0D27; [70 4C, 05, 05]
0D28; [70 4E, 05, 05]
-0D7B; [70 4E, 05, 20][70 96, 05, 20]
+0D7B; [70 4E, 05, 20][70 98, 05, 20]
0D29; [70 50, 05, 05]
@@ -27244,17 +27875,17 @@ FDD1 0D15; [70 04 02, 05, 05] # MALAYALAM first primary starts new lead byte (co
0D2D; [70 58, 05, 05]
0D2E; [70 5A, 05, 05]
-0D54; [70 5A, 05, 20][70 96, 05, 20]
+0D54; [70 5A, 05, 20][70 98, 05, 20]
0D2F; [70 5C, 05, 05]
-0D55; [70 5C, 05, 20][70 96, 05, 20]
+0D55; [70 5C, 05, 20][70 98, 05, 20]
0D30; [70 5E, 05, 05]
-0D4E; [70 5E, 05, 20][70 96, 05, 20]
-0D7C; [70 5E, 05, 20][70 96, 05, 20]
+0D4E; [70 5E, 05, 20][70 98, 05, 20]
+0D7C; [70 5E, 05, 20][70 98, 05, 20]
0D32; [70 60, 05, 05]
-0D7D; [70 60, 05, 20][70 96, 05, 20]
+0D7D; [70 60, 05, 20][70 98, 05, 20]
0D35; [70 62, 05, 05]
@@ -27267,10 +27898,10 @@ FDD1 0D15; [70 04 02, 05, 05] # MALAYALAM first primary starts new lead byte (co
0D39; [70 6A, 05, 05]
0D33; [70 6C, 05, 05]
-0D7E; [70 6C, 05, 20][70 96, 05, 20]
+0D7E; [70 6C, 05, 20][70 98, 05, 20]
0D34; [70 6E, 05, 05]
-0D56; [70 6E, 05, 20][70 96, 05, 20]
+0D56; [70 6E, 05, 20][70 98, 05, 20]
0D31; [70 70, 05, 05]
@@ -27278,44 +27909,46 @@ FDD1 0D15; [70 04 02, 05, 05] # MALAYALAM first primary starts new lead byte (co
0D3D; [70 74, 05, 05]
-0D3E; [70 76, 05, 05]
+0D04; [70 76, 05, 05]
+
+0D3E; [70 78, 05, 05]
-0D3F; [70 78, 05, 05]
+0D3F; [70 7A, 05, 05]
-0D40; [70 7A, 05, 05]
+0D40; [70 7C, 05, 05]
-0D41; [70 7C, 05, 05]
+0D41; [70 7E, 05, 05]
-0D42; [70 7E, 05, 05]
+0D42; [70 80, 05, 05]
-0D43; [70 80, 05, 05]
+0D43; [70 82, 05, 05]
-0D44; [70 82, 05, 05]
+0D44; [70 84, 05, 05]
-0D62; [70 84, 05, 05]
+0D62; [70 86, 05, 05]
-0D63; [70 86, 05, 05]
+0D63; [70 88, 05, 05]
-0D46; [70 88, 05, 05]
+0D46; [70 8A, 05, 05]
-0D47; [70 8A, 05, 05]
+0D47; [70 8C, 05, 05]
-0D48; [70 8C, 05, 05]
+0D48; [70 8E, 05, 05]
-0D46 0D3E; [70 8E, 05, 05]
-0D4A; [70 8E, 05, 05]
+0D46 0D3E; [70 90, 05, 05]
+0D4A; [70 90, 05, 05]
-0D47 0D3E; [70 90, 05, 05]
-0D4B; [70 90, 05, 05]
+0D47 0D3E; [70 92, 05, 05]
+0D4B; [70 92, 05, 05]
-0D46 0D57; [70 92, 05, 05]
-0D4C; [70 92, 05, 05]
+0D46 0D57; [70 94, 05, 05]
+0D4C; [70 94, 05, 05]
-0D57; [70 94, 05, 05]
+0D57; [70 96, 05, 05]
-0D4D; [70 96, 05, 05]
-0D3B; [70 96, 05, 20]
-0D3C; [70 96, 05, 20]
+0D4D; [70 98, 05, 05]
+0D3B; [70 98, 05, 20]
+0D3C; [70 98, 05, 20]
FDD1 0D85; [71 04 02, 05, 05] # SINHALA first primary starts new lead byte (compressible)
@@ -27622,69 +28255,71 @@ A805; [71 A2 2C, 05, 05]
A806; [71 A2 33, 05, 05]
-A807; [71 A2 3A, 05, 05]
+A82C; [71 A2 3A, 05, 05]
+
+A807; [71 A2 41, 05, 05]
-A808; [71 A2 41, 05, 05]
+A808; [71 A2 48, 05, 05]
-A809; [71 A2 48, 05, 05]
+A809; [71 A2 4F, 05, 05]
-A80A; [71 A2 4F, 05, 05]
+A80A; [71 A2 56, 05, 05]
-A80C; [71 A2 56, 05, 05]
+A80C; [71 A2 5D, 05, 05]
-A80D; [71 A2 5D, 05, 05]
+A80D; [71 A2 64, 05, 05]
-A80E; [71 A2 64, 05, 05]
+A80E; [71 A2 6B, 05, 05]
-A80F; [71 A2 6B, 05, 05]
+A80F; [71 A2 72, 05, 05]
-A810; [71 A2 72, 05, 05]
+A810; [71 A2 79, 05, 05]
-A811; [71 A2 79, 05, 05]
+A811; [71 A2 80, 05, 05]
-A812; [71 A2 80, 05, 05]
+A812; [71 A2 87, 05, 05]
-A813; [71 A2 87, 05, 05]
+A813; [71 A2 8E, 05, 05]
-A814; [71 A2 8E, 05, 05]
+A814; [71 A2 95, 05, 05]
-A815; [71 A2 95, 05, 05]
+A815; [71 A2 9C, 05, 05]
-A816; [71 A2 9C, 05, 05]
+A816; [71 A2 A3, 05, 05]
-A817; [71 A2 A3, 05, 05]
+A817; [71 A2 AA, 05, 05]
-A818; [71 A2 AA, 05, 05]
+A818; [71 A2 B1, 05, 05]
-A819; [71 A2 B1, 05, 05]
+A819; [71 A2 B8, 05, 05]
-A81A; [71 A2 B8, 05, 05]
+A81A; [71 A2 BF, 05, 05]
-A81B; [71 A2 BF, 05, 05]
+A81B; [71 A2 C6, 05, 05]
-A81C; [71 A2 C6, 05, 05]
+A81C; [71 A2 CD, 05, 05]
-A81D; [71 A2 CD, 05, 05]
+A81D; [71 A2 D4, 05, 05]
-A81E; [71 A2 D4, 05, 05]
+A81E; [71 A2 DB, 05, 05]
-A81F; [71 A2 DB, 05, 05]
+A81F; [71 A2 E2, 05, 05]
-A820; [71 A2 E2, 05, 05]
+A820; [71 A2 E9, 05, 05]
-A821; [71 A2 E9, 05, 05]
+A821; [71 A2 F0, 05, 05]
-A822; [71 A2 F0, 05, 05]
+A822; [71 A2 F7, 05, 05]
-A823; [71 A2 F7, 05, 05]
+A823; [71 A2 FE, 05, 05]
-A824; [71 A2 FE, 05, 05]
+A824; [71 A3 07, 05, 05]
-A825; [71 A3 07, 05, 05]
+A825; [71 A3 0E, 05, 05]
-A826; [71 A3 0E, 05, 05]
+A826; [71 A3 15, 05, 05]
-A827; [71 A3 15, 05, 05]
+A827; [71 A3 1C, 05, 05]
FDD1 A882; [71 A4 02, 05, 05] # Saurashtra first primary (compressible)
@@ -28135,13 +28770,15 @@ FDD1 11183; [71 AA 02, 05, 05] # Sharada first primary (compressible)
111BC; [71 AB C4, 05, 05]
-111BD; [71 AB CB, 05, 05]
+111CE; [71 AB CB, 05, 05]
-111BE; [71 AB D2, 05, 05]
+111BD; [71 AB D2, 05, 05]
-111BF; [71 AB D9, 05, 05]
+111BE; [71 AB D9, 05, 05]
-111C0; [71 AB E0, 05, 05]
+111BF; [71 AB E0, 05, 05]
+
+111C0; [71 AB E7, 05, 05]
FDD1 11208; [71 AC 02, 05, 05] # Khojki first primary (compressible)
@@ -28695,37 +29332,41 @@ FDD1 11412; [71 B4 02, 05, 05] # Newa first primary (compressible)
11447; [71 B5 8C, 05, 05]
-11448; [71 B5 93, 05, 05]
+11460; [71 B5 93, 05, 05]
+
+11461; [71 B5 9A, 05, 05]
-1145F; [71 B5 9A, 05, 05]
+11448; [71 B5 A1, 05, 05]
-11435; [71 B5 A1, 05, 05]
+1145F; [71 B5 A8, 05, 05]
-11436; [71 B5 A8, 05, 05]
+11435; [71 B5 AF, 05, 05]
-11437; [71 B5 AF, 05, 05]
+11436; [71 B5 B6, 05, 05]
-11438; [71 B5 B6, 05, 05]
+11437; [71 B5 BD, 05, 05]
-11439; [71 B5 BD, 05, 05]
+11438; [71 B5 C4, 05, 05]
-1143A; [71 B5 C4, 05, 05]
+11439; [71 B5 CB, 05, 05]
-1143B; [71 B5 CB, 05, 05]
+1143A; [71 B5 D2, 05, 05]
-1143C; [71 B5 D2, 05, 05]
+1143B; [71 B5 D9, 05, 05]
-1143D; [71 B5 D9, 05, 05]
+1143C; [71 B5 E0, 05, 05]
-1143E; [71 B5 E0, 05, 05]
+1143D; [71 B5 E7, 05, 05]
-1143F; [71 B5 E7, 05, 05]
+1143E; [71 B5 EE, 05, 05]
-11440; [71 B5 EE, 05, 05]
+1143F; [71 B5 F5, 05, 05]
-11441; [71 B5 F5, 05, 05]
+11440; [71 B5 FC, 05, 05]
-11442; [71 B5 FC, 05, 05]
+11441; [71 B6 05, 05, 05]
+
+11442; [71 B6 0C, 05, 05]
FDD1 11484; [71 B7 02, 05, 05] # Tirhuta first primary (compressible)
@@ -29232,1007 +29873,1122 @@ FDD1 11680; [71 CB 02, 05, 05] # Takri first primary (compressible)
116B6; [71 CC 7E, 05, 05]
-FDD1 119CE; [71 CD 02, 05, 05] # Nandinagari first primary (compressible)
+FDD1 1190C; [71 CD 02, 05, 05] # Dives_Akuru first primary (compressible)
+
+11900; [71 CD 09, 05, 05]
+
+11901; [71 CD 10, 05, 05]
+
+11902; [71 CD 17, 05, 05]
+
+11903; [71 CD 1E, 05, 05]
+
+11904; [71 CD 25, 05, 05]
+
+11905; [71 CD 2C, 05, 05]
+
+11906; [71 CD 33, 05, 05]
+
+11909; [71 CD 3A, 05, 05]
+
+1190C; [71 CD 41, 05, 05]
+
+1190D; [71 CD 48, 05, 05]
+
+1190E; [71 CD 4F, 05, 05]
+
+1190F; [71 CD 56, 05, 05]
+
+11910; [71 CD 5D, 05, 05]
+
+1193F; [71 CD 64, 05, 05]
+
+11911; [71 CD 6B, 05, 05]
+
+11912; [71 CD 72, 05, 05]
+
+11913; [71 CD 79, 05, 05]
+
+11915; [71 CD 80, 05, 05]
+
+11916; [71 CD 87, 05, 05]
+
+11918; [71 CD 8E, 05, 05]
+
+11919; [71 CD 95, 05, 05]
+
+1191A; [71 CD 9C, 05, 05]
+
+1191B; [71 CD A3, 05, 05]
+
+1191C; [71 CD AA, 05, 05]
-119A0; [71 CD 09, 05, 05]
+1191D; [71 CD B1, 05, 05]
-119A1; [71 CD 10, 05, 05]
+1191E; [71 CD B8, 05, 05]
-119A2; [71 CD 17, 05, 05]
+1191F; [71 CD BF, 05, 05]
-119A3; [71 CD 1E, 05, 05]
+11920; [71 CD C6, 05, 05]
-119A4; [71 CD 25, 05, 05]
+11921; [71 CD CD, 05, 05]
-119A5; [71 CD 2C, 05, 05]
+11922; [71 CD D4, 05, 05]
-119A6; [71 CD 33, 05, 05]
+11923; [71 CD DB, 05, 05]
-119A7; [71 CD 3A, 05, 05]
+11924; [71 CD E2, 05, 05]
-119AA; [71 CD 41, 05, 05]
+11925; [71 CD E9, 05, 05]
-119AB; [71 CD 48, 05, 05]
+11940; [71 CD F0, 05, 05]
-119AC; [71 CD 4F, 05, 05]
+11926; [71 CD F7, 05, 05]
-119AD; [71 CD 56, 05, 05]
+11941; [71 CD FE, 05, 05]
-119AE; [71 CD 5D, 05, 05]
+11927; [71 CE 07, 05, 05]
-119AF; [71 CD 64, 05, 05]
+11942; [71 CE 0E, 05, 05]
-119B0; [71 CD 6B, 05, 05]
+11928; [71 CE 15, 05, 05]
-119B1; [71 CD 72, 05, 05]
+11929; [71 CE 1C, 05, 05]
-119B2; [71 CD 79, 05, 05]
+1192A; [71 CE 23, 05, 05]
-119B3; [71 CD 80, 05, 05]
+1192B; [71 CE 2A, 05, 05]
-119B4; [71 CD 87, 05, 05]
+1192C; [71 CE 31, 05, 05]
-119B5; [71 CD 8E, 05, 05]
+1192D; [71 CE 38, 05, 05]
-119B6; [71 CD 95, 05, 05]
+1192E; [71 CE 3F, 05, 05]
-119B7; [71 CD 9C, 05, 05]
+1192F; [71 CE 46, 05, 05]
-119B8; [71 CD A3, 05, 05]
+11930; [71 CE 4D, 05, 05]
-119B9; [71 CD AA, 05, 05]
+11931; [71 CE 54, 05, 05]
-119BA; [71 CD B1, 05, 05]
+11932; [71 CE 5B, 05, 05]
-119BB; [71 CD B8, 05, 05]
+11933; [71 CE 62, 05, 05]
-119BC; [71 CD BF, 05, 05]
+11934; [71 CE 69, 05, 05]
-119BD; [71 CD C6, 05, 05]
+11935; [71 CE 70, 05, 05]
-119BE; [71 CD CD, 05, 05]
+11937; [71 CE 77, 05, 05]
-119BF; [71 CD D4, 05, 05]
+11935 11930; [71 CE 7E, 05, 05]
+11938; [71 CE 7E, 05, 05]
-119C0; [71 CD DB, 05, 05]
+1193D; [71 CE 85, 05, 05]
-119C1; [71 CD E2, 05, 05]
+1193E; [71 CE 8C, 05, 05]
-119C2; [71 CD E9, 05, 05]
+FDD1 119CE; [71 CF 02, 05, 05] # Nandinagari first primary (compressible)
-119C3; [71 CD F0, 05, 05]
+119A0; [71 CF 09, 05, 05]
-119C4; [71 CD F7, 05, 05]
+119A1; [71 CF 10, 05, 05]
-119C5; [71 CD FE, 05, 05]
+119A2; [71 CF 17, 05, 05]
-119C6; [71 CE 07, 05, 05]
+119A3; [71 CF 1E, 05, 05]
-119C7; [71 CE 0E, 05, 05]
+119A4; [71 CF 25, 05, 05]
-119C8; [71 CE 15, 05, 05]
+119A5; [71 CF 2C, 05, 05]
-119C9; [71 CE 1C, 05, 05]
+119A6; [71 CF 33, 05, 05]
-119CA; [71 CE 23, 05, 05]
+119A7; [71 CF 3A, 05, 05]
-119CB; [71 CE 2A, 05, 05]
+119AA; [71 CF 41, 05, 05]
-119CC; [71 CE 31, 05, 05]
+119AB; [71 CF 48, 05, 05]
-119CD; [71 CE 38, 05, 05]
+119AC; [71 CF 4F, 05, 05]
-119CE; [71 CE 3F, 05, 05]
+119AD; [71 CF 56, 05, 05]
-119CF; [71 CE 46, 05, 05]
+119AE; [71 CF 5D, 05, 05]
-119D0; [71 CE 4D, 05, 05]
+119AF; [71 CF 64, 05, 05]
-119E1; [71 CE 54, 05, 05]
+119B0; [71 CF 6B, 05, 05]
-119E3; [71 CE 5B, 05, 05]
+119B1; [71 CF 72, 05, 05]
-119D1; [71 CE 62, 05, 05]
+119B2; [71 CF 79, 05, 05]
-119D2; [71 CE 69, 05, 05]
+119B3; [71 CF 80, 05, 05]
-119D3; [71 CE 70, 05, 05]
+119B4; [71 CF 87, 05, 05]
-119D4; [71 CE 77, 05, 05]
+119B5; [71 CF 8E, 05, 05]
-119D5; [71 CE 7E, 05, 05]
+119B6; [71 CF 95, 05, 05]
-119D6; [71 CE 85, 05, 05]
+119B7; [71 CF 9C, 05, 05]
-119D7; [71 CE 8C, 05, 05]
+119B8; [71 CF A3, 05, 05]
-119DA; [71 CE 93, 05, 05]
+119B9; [71 CF AA, 05, 05]
-119E4; [71 CE 9A, 05, 05]
+119BA; [71 CF B1, 05, 05]
-119DB; [71 CE A1, 05, 05]
+119BB; [71 CF B8, 05, 05]
-119DC; [71 CE A8, 05, 05]
+119BC; [71 CF BF, 05, 05]
-119DD; [71 CE AF, 05, 05]
+119BD; [71 CF C6, 05, 05]
-119E0; [71 CE B6, 05, 05]
+119BE; [71 CF CD, 05, 05]
-FDD1 1180B; [71 CF 02, 05, 05] # Dogra first primary (compressible)
+119BF; [71 CF D4, 05, 05]
-11800; [71 CF 09, 05, 05]
+119C0; [71 CF DB, 05, 05]
-11801; [71 CF 10, 05, 05]
+119C1; [71 CF E2, 05, 05]
-11802; [71 CF 17, 05, 05]
+119C2; [71 CF E9, 05, 05]
-11803; [71 CF 1E, 05, 05]
+119C3; [71 CF F0, 05, 05]
-11804; [71 CF 25, 05, 05]
+119C4; [71 CF F7, 05, 05]
-11805; [71 CF 2C, 05, 05]
+119C5; [71 CF FE, 05, 05]
-11806; [71 CF 33, 05, 05]
+119C6; [71 D0 07, 05, 05]
-11807; [71 CF 3A, 05, 05]
+119C7; [71 D0 0E, 05, 05]
-11808; [71 CF 41, 05, 05]
+119C8; [71 D0 15, 05, 05]
-11809; [71 CF 48, 05, 05]
+119C9; [71 D0 1C, 05, 05]
-1180A; [71 CF 4F, 05, 05]
+119CA; [71 D0 23, 05, 05]
-1180B; [71 CF 56, 05, 05]
+119CB; [71 D0 2A, 05, 05]
-1180C; [71 CF 5D, 05, 05]
+119CC; [71 D0 31, 05, 05]
-1180D; [71 CF 64, 05, 05]
+119CD; [71 D0 38, 05, 05]
-1180E; [71 CF 6B, 05, 05]
+119CE; [71 D0 3F, 05, 05]
-1180F; [71 CF 72, 05, 05]
+119CF; [71 D0 46, 05, 05]
-11810; [71 CF 79, 05, 05]
+119D0; [71 D0 4D, 05, 05]
-11811; [71 CF 80, 05, 05]
+119E1; [71 D0 54, 05, 05]
-11812; [71 CF 87, 05, 05]
+119E3; [71 D0 5B, 05, 05]
-11813; [71 CF 8E, 05, 05]
+119D1; [71 D0 62, 05, 05]
-11814; [71 CF 95, 05, 05]
+119D2; [71 D0 69, 05, 05]
-11815; [71 CF 9C, 05, 05]
+119D3; [71 D0 70, 05, 05]
-11816; [71 CF A3, 05, 05]
+119D4; [71 D0 77, 05, 05]
-11817; [71 CF AA, 05, 05]
+119D5; [71 D0 7E, 05, 05]
-11818; [71 CF B1, 05, 05]
+119D6; [71 D0 85, 05, 05]
-11819; [71 CF B8, 05, 05]
+119D7; [71 D0 8C, 05, 05]
-1181A; [71 CF BF, 05, 05]
+119DA; [71 D0 93, 05, 05]
-1181B; [71 CF C6, 05, 05]
+119E4; [71 D0 9A, 05, 05]
-1181C; [71 CF CD, 05, 05]
+119DB; [71 D0 A1, 05, 05]
-1181D; [71 CF D4, 05, 05]
+119DC; [71 D0 A8, 05, 05]
-1181E; [71 CF DB, 05, 05]
+119DD; [71 D0 AF, 05, 05]
-1181F; [71 CF E2, 05, 05]
+119E0; [71 D0 B6, 05, 05]
-11820; [71 CF E9, 05, 05]
+FDD1 1180B; [71 D1 02, 05, 05] # Dogra first primary (compressible)
-11821; [71 CF F0, 05, 05]
+11800; [71 D1 09, 05, 05]
-11822; [71 CF F7, 05, 05]
+11801; [71 D1 10, 05, 05]
-11823; [71 CF FE, 05, 05]
+11802; [71 D1 17, 05, 05]
-11824; [71 D0 07, 05, 05]
+11803; [71 D1 1E, 05, 05]
-11825; [71 D0 0E, 05, 05]
+11804; [71 D1 25, 05, 05]
-11826; [71 D0 15, 05, 05]
+11805; [71 D1 2C, 05, 05]
-11827; [71 D0 1C, 05, 05]
+11806; [71 D1 33, 05, 05]
-11828; [71 D0 23, 05, 05]
+11807; [71 D1 3A, 05, 05]
-11829; [71 D0 2A, 05, 05]
+11808; [71 D1 41, 05, 05]
-1182A; [71 D0 31, 05, 05]
+11809; [71 D1 48, 05, 05]
-1182B; [71 D0 38, 05, 05]
+1180A; [71 D1 4F, 05, 05]
-1182C; [71 D0 3F, 05, 05]
+1180B; [71 D1 56, 05, 05]
-1182D; [71 D0 46, 05, 05]
+1180C; [71 D1 5D, 05, 05]
-1182E; [71 D0 4D, 05, 05]
+1180D; [71 D1 64, 05, 05]
-1182F; [71 D0 54, 05, 05]
+1180E; [71 D1 6B, 05, 05]
-11830; [71 D0 5B, 05, 05]
+1180F; [71 D1 72, 05, 05]
-11831; [71 D0 62, 05, 05]
+11810; [71 D1 79, 05, 05]
-11832; [71 D0 69, 05, 05]
+11811; [71 D1 80, 05, 05]
-11833; [71 D0 70, 05, 05]
+11812; [71 D1 87, 05, 05]
-11834; [71 D0 77, 05, 05]
+11813; [71 D1 8E, 05, 05]
-11835; [71 D0 7E, 05, 05]
+11814; [71 D1 95, 05, 05]
-11836; [71 D0 85, 05, 05]
+11815; [71 D1 9C, 05, 05]
-11839; [71 D0 8C, 05, 05]
+11816; [71 D1 A3, 05, 05]
-FDD1 11717; [71 D1 02, 05, 05] # Ahom first primary (compressible)
+11817; [71 D1 AA, 05, 05]
-11700; [71 D1 09, 05, 05]
+11818; [71 D1 B1, 05, 05]
-11701; [71 D1 10, 05, 05]
+11819; [71 D1 B8, 05, 05]
-11702; [71 D1 17, 05, 05]
+1181A; [71 D1 BF, 05, 05]
-11703; [71 D1 1E, 05, 05]
+1181B; [71 D1 C6, 05, 05]
-11704; [71 D3, 05, 05]
-11705; [71 D3, 70, 05]
+1181C; [71 D1 CD, 05, 05]
-11706; [71 D5 02, 05, 05]
+1181D; [71 D1 D4, 05, 05]
-11707; [71 D5 09, 05, 05]
+1181E; [71 D1 DB, 05, 05]
-11708; [71 D7, 05, 05]
-1171A; [71 D7, 70, 05]
+1181F; [71 D1 E2, 05, 05]
-11709; [71 D9 02, 05, 05]
+11820; [71 D1 E9, 05, 05]
-1170A; [71 D9 09, 05, 05]
+11821; [71 D1 F0, 05, 05]
-1170B; [71 D9 10, 05, 05]
+11822; [71 D1 F7, 05, 05]
-1170C; [71 D9 17, 05, 05]
+11823; [71 D1 FE, 05, 05]
-1170D; [71 D9 1E, 05, 05]
+11824; [71 D2 07, 05, 05]
-1170E; [71 D9 25, 05, 05]
+11825; [71 D2 0E, 05, 05]
-1170F; [71 D9 2C, 05, 05]
+11826; [71 D2 15, 05, 05]
-11710; [71 D9 33, 05, 05]
+11827; [71 D2 1C, 05, 05]
-11711; [71 D9 3A, 05, 05]
+11828; [71 D2 23, 05, 05]
-11712; [71 D9 41, 05, 05]
+11829; [71 D2 2A, 05, 05]
-11713; [71 D9 48, 05, 05]
+1182A; [71 D2 31, 05, 05]
-11714; [71 D9 4F, 05, 05]
+1182B; [71 D2 38, 05, 05]
-11715; [71 DB, 05, 05]
-11716; [71 DB, 70, 05]
+1182C; [71 D2 3F, 05, 05]
-11717; [71 DD 02, 05, 05]
+1182D; [71 D2 46, 05, 05]
-11718; [71 DD 09, 05, 05]
+1182E; [71 D2 4D, 05, 05]
-11719; [71 DD 10, 05, 05]
+1182F; [71 D2 54, 05, 05]
-11720; [71 DD 17, 05, 05]
+11830; [71 D2 5B, 05, 05]
-11721; [71 DD 1E, 05, 05]
+11831; [71 D2 62, 05, 05]
-11722; [71 DD 25, 05, 05]
+11832; [71 D2 69, 05, 05]
-11723; [71 DD 2C, 05, 05]
+11833; [71 D2 70, 05, 05]
-11724; [71 DD 33, 05, 05]
+11834; [71 D2 77, 05, 05]
-11725; [71 DD 3A, 05, 05]
+11835; [71 D2 7E, 05, 05]
-11726; [71 DD 41, 05, 05]
+11836; [71 D2 85, 05, 05]
-11727; [71 DD 48, 05, 05]
+11839; [71 D2 8C, 05, 05]
-11728; [71 DD 4F, 05, 05]
+FDD1 11717; [71 D3 02, 05, 05] # Ahom first primary (compressible)
-11729; [71 DD 56, 05, 05]
+11700; [71 D3 09, 05, 05]
-1172A; [71 DD 5D, 05, 05]
+11701; [71 D3 10, 05, 05]
-1172B; [71 DD 64, 05, 05]
+11702; [71 D3 17, 05, 05]
-1171D; [71 DD 6B, 05, 05]
+11703; [71 D3 1E, 05, 05]
-1171E; [71 DD 72, 05, 05]
+11704; [71 D5, 05, 05]
+11705; [71 D5, 70, 05]
-1171F; [71 DD 79, 05, 05]
+11706; [71 D7 02, 05, 05]
-FDD1 11D10; [71 DE 02, 05, 05] # Masaram_Gondi first primary (compressible)
+11707; [71 D7 09, 05, 05]
-11D00; [71 DE 09, 05, 05]
+11708; [71 D9, 05, 05]
+1171A; [71 D9, 70, 05]
-11D01; [71 DE 10, 05, 05]
+11709; [71 DB 02, 05, 05]
-11D02; [71 DE 17, 05, 05]
+1170A; [71 DB 09, 05, 05]
-11D03; [71 DE 1E, 05, 05]
+1170B; [71 DB 10, 05, 05]
-11D04; [71 DE 25, 05, 05]
+1170C; [71 DB 17, 05, 05]
-11D05; [71 DE 2C, 05, 05]
+1170D; [71 DB 1E, 05, 05]
-11D06; [71 DE 33, 05, 05]
+1170E; [71 DB 25, 05, 05]
-11D08; [71 DE 3A, 05, 05]
+1170F; [71 DB 2C, 05, 05]
-11D09; [71 DE 41, 05, 05]
+11710; [71 DB 33, 05, 05]
-11D0B; [71 DE 48, 05, 05]
+11711; [71 DB 3A, 05, 05]
-11D0C; [71 DE 4F, 05, 05]
+11712; [71 DB 41, 05, 05]
-11D0D; [71 DE 56, 05, 05]
+11713; [71 DB 48, 05, 05]
-11D0E; [71 DE 5D, 05, 05]
+11714; [71 DB 4F, 05, 05]
-11D0F; [71 DE 64, 05, 05]
+11715; [71 DD, 05, 05]
+11716; [71 DD, 70, 05]
-11D10; [71 DE 6B, 05, 05]
+11717; [71 DF 02, 05, 05]
-11D11; [71 DE 72, 05, 05]
+11718; [71 DF 09, 05, 05]
-11D12; [71 DE 79, 05, 05]
+11719; [71 DF 10, 05, 05]
-11D13; [71 DE 80, 05, 05]
+11720; [71 DF 17, 05, 05]
-11D14; [71 DE 87, 05, 05]
+11721; [71 DF 1E, 05, 05]
-11D15; [71 DE 8E, 05, 05]
+11722; [71 DF 25, 05, 05]
-11D16; [71 DE 95, 05, 05]
+11723; [71 DF 2C, 05, 05]
-11D17; [71 DE 9C, 05, 05]
+11724; [71 DF 33, 05, 05]
-11D18; [71 DE A3, 05, 05]
+11725; [71 DF 3A, 05, 05]
-11D19; [71 DE AA, 05, 05]
+11726; [71 DF 41, 05, 05]
-11D1A; [71 DE B1, 05, 05]
+11727; [71 DF 48, 05, 05]
-11D1B; [71 DE B8, 05, 05]
+11728; [71 DF 4F, 05, 05]
-11D1C; [71 DE BF, 05, 05]
+11729; [71 DF 56, 05, 05]
-11D1D; [71 DE C6, 05, 05]
+1172A; [71 DF 5D, 05, 05]
-11D1E; [71 DE CD, 05, 05]
+1172B; [71 DF 64, 05, 05]
-11D1F; [71 DE D4, 05, 05]
+1171D; [71 DF 6B, 05, 05]
-11D20; [71 DE DB, 05, 05]
+1171E; [71 DF 72, 05, 05]
-11D21; [71 DE E2, 05, 05]
+1171F; [71 DF 79, 05, 05]
-11D22; [71 DE E9, 05, 05]
+FDD1 11D10; [71 E0 02, 05, 05] # Masaram_Gondi first primary (compressible)
-11D23; [71 DE F0, 05, 05]
+11D00; [71 E0 09, 05, 05]
-11D24; [71 DE F7, 05, 05]
+11D01; [71 E0 10, 05, 05]
-11D25; [71 DE FE, 05, 05]
+11D02; [71 E0 17, 05, 05]
-11D26; [71 E0, 05, 05]
-11D46; [71 E0, 05, 20]
-11D47; [71 E0, 05, 2E]
+11D03; [71 E0 1E, 05, 05]
-11D27; [71 E2 02, 05, 05]
+11D04; [71 E0 25, 05, 05]
-11D28; [71 E2 09, 05, 05]
+11D05; [71 E0 2C, 05, 05]
-11D29; [71 E2 10, 05, 05]
+11D06; [71 E0 33, 05, 05]
-11D2A; [71 E2 17, 05, 05]
+11D08; [71 E0 3A, 05, 05]
-11D2B; [71 E2 1E, 05, 05]
+11D09; [71 E0 41, 05, 05]
-11D2C; [71 E2 25, 05, 05]
+11D0B; [71 E0 48, 05, 05]
-11D2D; [71 E2 2C, 05, 05]
+11D0C; [71 E0 4F, 05, 05]
-11D2E; [71 E2 33, 05, 05]
+11D0D; [71 E0 56, 05, 05]
-11D2F; [71 E2 3A, 05, 05]
+11D0E; [71 E0 5D, 05, 05]
-11D30; [71 E2 41, 05, 05]
+11D0F; [71 E0 64, 05, 05]
-11D31; [71 E2 48, 05, 05]
+11D10; [71 E0 6B, 05, 05]
-11D32; [71 E2 4F, 05, 05]
+11D11; [71 E0 72, 05, 05]
-11D33; [71 E2 56, 05, 05]
+11D12; [71 E0 79, 05, 05]
-11D34; [71 E2 5D, 05, 05]
+11D13; [71 E0 80, 05, 05]
-11D35; [71 E2 64, 05, 05]
+11D14; [71 E0 87, 05, 05]
-11D36; [71 E2 6B, 05, 05]
+11D15; [71 E0 8E, 05, 05]
-11D3A; [71 E2 72, 05, 05]
+11D16; [71 E0 95, 05, 05]
-11D3C; [71 E2 79, 05, 05]
+11D17; [71 E0 9C, 05, 05]
-11D3D; [71 E2 80, 05, 05]
+11D18; [71 E0 A3, 05, 05]
-11D3F; [71 E2 87, 05, 05]
+11D19; [71 E0 AA, 05, 05]
-11D44; [71 E2 8E, 05, 05]
+11D1A; [71 E0 B1, 05, 05]
-11D45; [71 E2 95, 05, 05]
+11D1B; [71 E0 B8, 05, 05]
-FDD1 11D71; [71 E3 02, 05, 05] # Gunjala_Gondi first primary (compressible)
+11D1C; [71 E0 BF, 05, 05]
-11D98; [71 E3 09, 05, 05]
+11D1D; [71 E0 C6, 05, 05]
-11D60; [71 E3 10, 05, 05]
+11D1E; [71 E0 CD, 05, 05]
-11D61; [71 E3 17, 05, 05]
+11D1F; [71 E0 D4, 05, 05]
-11D62; [71 E3 1E, 05, 05]
+11D20; [71 E0 DB, 05, 05]
-11D63; [71 E3 25, 05, 05]
+11D21; [71 E0 E2, 05, 05]
-11D64; [71 E3 2C, 05, 05]
+11D22; [71 E0 E9, 05, 05]
-11D65; [71 E3 33, 05, 05]
+11D23; [71 E0 F0, 05, 05]
-11D67; [71 E3 3A, 05, 05]
+11D24; [71 E0 F7, 05, 05]
-11D68; [71 E3 41, 05, 05]
+11D25; [71 E0 FE, 05, 05]
-11D6A; [71 E3 48, 05, 05]
+11D26; [71 E2, 05, 05]
+11D46; [71 E2, 05, 20]
+11D47; [71 E2, 05, 2E]
-11D6B; [71 E3 4F, 05, 05]
+11D27; [71 E4 02, 05, 05]
-11D6C; [71 E3 56, 05, 05]
+11D28; [71 E4 09, 05, 05]
-11D6D; [71 E3 5D, 05, 05]
+11D29; [71 E4 10, 05, 05]
-11D6E; [71 E3 64, 05, 05]
+11D2A; [71 E4 17, 05, 05]
-11D6F; [71 E3 6B, 05, 05]
+11D2B; [71 E4 1E, 05, 05]
-11D70; [71 E3 72, 05, 05]
+11D2C; [71 E4 25, 05, 05]
-11D71; [71 E3 79, 05, 05]
+11D2D; [71 E4 2C, 05, 05]
-11D72; [71 E3 80, 05, 05]
+11D2E; [71 E4 33, 05, 05]
-11D73; [71 E3 87, 05, 05]
+11D2F; [71 E4 3A, 05, 05]
-11D74; [71 E3 8E, 05, 05]
+11D30; [71 E4 41, 05, 05]
-11D75; [71 E3 95, 05, 05]
+11D31; [71 E4 48, 05, 05]
-11D76; [71 E3 9C, 05, 05]
+11D32; [71 E4 4F, 05, 05]
-11D77; [71 E3 A3, 05, 05]
+11D33; [71 E4 56, 05, 05]
-11D78; [71 E3 AA, 05, 05]
+11D34; [71 E4 5D, 05, 05]
-11D79; [71 E3 B1, 05, 05]
+11D35; [71 E4 64, 05, 05]
-11D7A; [71 E3 B8, 05, 05]
+11D36; [71 E4 6B, 05, 05]
-11D7B; [71 E3 BF, 05, 05]
+11D3A; [71 E4 72, 05, 05]
-11D7C; [71 E3 C6, 05, 05]
+11D3C; [71 E4 79, 05, 05]
-11D7D; [71 E3 CD, 05, 05]
+11D3D; [71 E4 80, 05, 05]
-11D7E; [71 E3 D4, 05, 05]
+11D3F; [71 E4 87, 05, 05]
-11D7F; [71 E3 DB, 05, 05]
+11D44; [71 E4 8E, 05, 05]
-11D80; [71 E3 E2, 05, 05]
+11D45; [71 E4 95, 05, 05]
-11D81; [71 E3 E9, 05, 05]
+FDD1 11D71; [71 E5 02, 05, 05] # Gunjala_Gondi first primary (compressible)
-11D82; [71 E3 F0, 05, 05]
+11D98; [71 E5 09, 05, 05]
-11D83; [71 E3 F7, 05, 05]
+11D60; [71 E5 10, 05, 05]
-11D84; [71 E3 FE, 05, 05]
+11D61; [71 E5 17, 05, 05]
-11D85; [71 E4 07, 05, 05]
+11D62; [71 E5 1E, 05, 05]
-11D86; [71 E4 0E, 05, 05]
+11D63; [71 E5 25, 05, 05]
-11D87; [71 E4 15, 05, 05]
+11D64; [71 E5 2C, 05, 05]
-11D88; [71 E4 1C, 05, 05]
+11D65; [71 E5 33, 05, 05]
-11D89; [71 E4 23, 05, 05]
+11D67; [71 E5 3A, 05, 05]
-11D8A; [71 E4 2A, 05, 05]
+11D68; [71 E5 41, 05, 05]
-11D8B; [71 E4 31, 05, 05]
+11D6A; [71 E5 48, 05, 05]
-11D8C; [71 E4 38, 05, 05]
+11D6B; [71 E5 4F, 05, 05]
-11D8D; [71 E4 3F, 05, 05]
+11D6C; [71 E5 56, 05, 05]
-11D8E; [71 E4 46, 05, 05]
+11D6D; [71 E5 5D, 05, 05]
-11D90; [71 E4 4D, 05, 05]
+11D6E; [71 E5 64, 05, 05]
-11D91; [71 E4 54, 05, 05]
+11D6F; [71 E5 6B, 05, 05]
-11D93; [71 E4 5B, 05, 05]
+11D70; [71 E5 72, 05, 05]
-11D94; [71 E4 62, 05, 05]
+11D71; [71 E5 79, 05, 05]
-11D97; [71 E4 69, 05, 05]
+11D72; [71 E5 80, 05, 05]
-FDD1 1B83; [71 E5 02, 05, 05] # Sundanese first primary (compressible)
+11D73; [71 E5 87, 05, 05]
-1B83; [71 E7, 05, 05]
-1BBA; [71 E7, 05, 20]
+11D74; [71 E5 8E, 05, 05]
-1B84; [71 E9 02, 05, 05]
+11D75; [71 E5 95, 05, 05]
-1B85; [71 E9 09, 05, 05]
+11D76; [71 E5 9C, 05, 05]
-1B86; [71 E9 10, 05, 05]
+11D77; [71 E5 A3, 05, 05]
-1B87; [71 E9 17, 05, 05]
+11D78; [71 E5 AA, 05, 05]
-1B88; [71 E9 1E, 05, 05]
+11D79; [71 E5 B1, 05, 05]
-1B89; [71 E9 25, 05, 05]
+11D7A; [71 E5 B8, 05, 05]
-1B8A; [71 EB, 05, 05]
-1BBE; [71 EB, 05, 20]
+11D7B; [71 E5 BF, 05, 05]
-1BAE; [71 ED 02, 05, 05]
+11D7C; [71 E5 C6, 05, 05]
-1B8B; [71 ED 09, 05, 05]
+11D7D; [71 E5 CD, 05, 05]
-1B8C; [71 ED 10, 05, 05]
+11D7E; [71 E5 D4, 05, 05]
-1B8D; [71 ED 17, 05, 05]
+11D7F; [71 E5 DB, 05, 05]
-1B8E; [71 ED 1E, 05, 05]
+11D80; [71 E5 E2, 05, 05]
-1B8F; [71 ED 25, 05, 05]
+11D81; [71 E5 E9, 05, 05]
-1B90; [71 ED 2C, 05, 05]
+11D82; [71 E5 F0, 05, 05]
-1B91; [71 ED 33, 05, 05]
+11D83; [71 E5 F7, 05, 05]
-1B92; [71 ED 3A, 05, 05]
+11D84; [71 E5 FE, 05, 05]
-1B93; [71 ED 41, 05, 05]
+11D85; [71 E6 07, 05, 05]
-1B94; [71 ED 48, 05, 05]
+11D86; [71 E6 0E, 05, 05]
-1B95; [71 ED 4F, 05, 05]
+11D87; [71 E6 15, 05, 05]
-1B96; [71 ED 56, 05, 05]
+11D88; [71 E6 1C, 05, 05]
-1B97; [71 ED 5D, 05, 05]
+11D89; [71 E6 23, 05, 05]
-1B98; [71 ED 64, 05, 05]
+11D8A; [71 E6 2A, 05, 05]
-1BBD; [71 ED 6B, 05, 05]
+11D8B; [71 E6 31, 05, 05]
-1B99; [71 EF, 05, 05]
-1BBF; [71 EF, 05, 20]
+11D8C; [71 E6 38, 05, 05]
-1BAC; [71 F1 02, 05, 05]
+11D8D; [71 E6 3F, 05, 05]
-1B9A; [71 F1 09, 05, 05]
+11D8E; [71 E6 46, 05, 05]
-1BA1; [71 F1 10, 05, 05]
+11D90; [71 E6 4D, 05, 05]
-1B9B; [71 F1 17, 05, 05]
+11D91; [71 E6 54, 05, 05]
-1BA2; [71 F1 1E, 05, 05]
+11D93; [71 E6 5B, 05, 05]
-1BBB; [71 F1 25, 05, 05]
+11D94; [71 E6 62, 05, 05]
-1B9C; [71 F1 2C, 05, 05]
+11D97; [71 E6 69, 05, 05]
-1BA3; [71 F1 33, 05, 05]
+FDD1 1B83; [71 E7 02, 05, 05] # Sundanese first primary (compressible)
-1BBC; [71 F1 3A, 05, 05]
+1B83; [71 E9, 05, 05]
+1BBA; [71 E9, 05, 20]
-1B9D; [71 F1 41, 05, 05]
+1B84; [71 EB 02, 05, 05]
-1BAD; [71 F1 48, 05, 05]
+1B85; [71 EB 09, 05, 05]
-1B9E; [71 F1 4F, 05, 05]
+1B86; [71 EB 10, 05, 05]
-1B9F; [71 F1 56, 05, 05]
+1B87; [71 EB 17, 05, 05]
-1BAF; [71 F1 5D, 05, 05]
+1B88; [71 EB 1E, 05, 05]
-1BA0; [71 F1 64, 05, 05]
+1B89; [71 EB 25, 05, 05]
-1BA4; [71 F1 6B, 05, 05]
+1B8A; [71 ED, 05, 05]
+1BBE; [71 ED, 05, 20]
-1BA5; [71 F1 72, 05, 05]
+1BAE; [71 EF 02, 05, 05]
-1BA6; [71 F1 79, 05, 05]
+1B8B; [71 EF 09, 05, 05]
-1BA7; [71 F1 80, 05, 05]
+1B8C; [71 EF 10, 05, 05]
-1BA8; [71 F1 87, 05, 05]
+1B8D; [71 EF 17, 05, 05]
-1BA9; [71 F1 8E, 05, 05]
+1B8E; [71 EF 1E, 05, 05]
-1BAA; [71 F1 95, 05, 05]
+1B8F; [71 EF 25, 05, 05]
-1BAB; [71 F1 9C, 05, 05]
+1B90; [71 EF 2C, 05, 05]
-FDD1 11005; [71 F2 02, 05, 05] # Brahmi first primary (compressible)
+1B91; [71 EF 33, 05, 05]
-11005; [71 F2 09, 05, 05]
+1B92; [71 EF 3A, 05, 05]
-11006; [71 F2 10, 05, 05]
+1B93; [71 EF 41, 05, 05]
-11007; [71 F2 17, 05, 05]
+1B94; [71 EF 48, 05, 05]
-11008; [71 F2 1E, 05, 05]
+1B95; [71 EF 4F, 05, 05]
-11009; [71 F2 25, 05, 05]
+1B96; [71 EF 56, 05, 05]
-1100A; [71 F2 2C, 05, 05]
+1B97; [71 EF 5D, 05, 05]
-1100B; [71 F2 33, 05, 05]
+1B98; [71 EF 64, 05, 05]
-1100C; [71 F2 3A, 05, 05]
+1BBD; [71 EF 6B, 05, 05]
-1100D; [71 F2 41, 05, 05]
+1B99; [71 F1, 05, 05]
+1BBF; [71 F1, 05, 20]
-1100E; [71 F2 48, 05, 05]
+1BAC; [71 F3 02, 05, 05]
-1100F; [71 F2 4F, 05, 05]
+1B9A; [71 F3 09, 05, 05]
-11010; [71 F2 56, 05, 05]
+1BA1; [71 F3 10, 05, 05]
-11011; [71 F2 5D, 05, 05]
+1B9B; [71 F3 17, 05, 05]
-11012; [71 F2 64, 05, 05]
+1BA2; [71 F3 1E, 05, 05]
-11013; [71 F2 6B, 05, 05]
+1BBB; [71 F3 25, 05, 05]
-11014; [71 F2 72, 05, 05]
+1B9C; [71 F3 2C, 05, 05]
-11015; [71 F2 79, 05, 05]
+1BA3; [71 F3 33, 05, 05]
-11016; [71 F2 80, 05, 05]
+1BBC; [71 F3 3A, 05, 05]
-11017; [71 F2 87, 05, 05]
+1B9D; [71 F3 41, 05, 05]
-11018; [71 F2 8E, 05, 05]
+1BAD; [71 F3 48, 05, 05]
-11019; [71 F2 95, 05, 05]
+1B9E; [71 F3 4F, 05, 05]
-1101A; [71 F2 9C, 05, 05]
+1B9F; [71 F3 56, 05, 05]
-1101B; [71 F2 A3, 05, 05]
+1BAF; [71 F3 5D, 05, 05]
-1101C; [71 F2 AA, 05, 05]
+1BA0; [71 F3 64, 05, 05]
-1101D; [71 F2 B1, 05, 05]
+1BA4; [71 F3 6B, 05, 05]
-1101E; [71 F2 B8, 05, 05]
+1BA5; [71 F3 72, 05, 05]
-1101F; [71 F2 BF, 05, 05]
+1BA6; [71 F3 79, 05, 05]
-11020; [71 F2 C6, 05, 05]
+1BA7; [71 F3 80, 05, 05]
-11021; [71 F2 CD, 05, 05]
+1BA8; [71 F3 87, 05, 05]
-11022; [71 F2 D4, 05, 05]
+1BA9; [71 F3 8E, 05, 05]
-11023; [71 F2 DB, 05, 05]
+1BAA; [71 F3 95, 05, 05]
-11024; [71 F2 E2, 05, 05]
+1BAB; [71 F3 9C, 05, 05]
-11025; [71 F2 E9, 05, 05]
+FDD1 11005; [71 F4 02, 05, 05] # Brahmi first primary (compressible)
-11026; [71 F2 F0, 05, 05]
+11005; [71 F4 09, 05, 05]
-11027; [71 F2 F7, 05, 05]
+11006; [71 F4 10, 05, 05]
-11028; [71 F2 FE, 05, 05]
+11007; [71 F4 17, 05, 05]
-11029; [71 F3 07, 05, 05]
+11008; [71 F4 1E, 05, 05]
-1102A; [71 F3 0E, 05, 05]
+11009; [71 F4 25, 05, 05]
-1102B; [71 F3 15, 05, 05]
+1100A; [71 F4 2C, 05, 05]
-1102C; [71 F3 1C, 05, 05]
+1100B; [71 F4 33, 05, 05]
-1102D; [71 F3 23, 05, 05]
+1100C; [71 F4 3A, 05, 05]
-1102E; [71 F3 2A, 05, 05]
+1100D; [71 F4 41, 05, 05]
-1102F; [71 F3 31, 05, 05]
+1100E; [71 F4 48, 05, 05]
-11030; [71 F3 38, 05, 05]
+1100F; [71 F4 4F, 05, 05]
-11031; [71 F3 3F, 05, 05]
+11010; [71 F4 56, 05, 05]
-11032; [71 F3 46, 05, 05]
+11011; [71 F4 5D, 05, 05]
-11033; [71 F3 4D, 05, 05]
+11012; [71 F4 64, 05, 05]
-11003; [71 F3 54, 05, 05]
+11013; [71 F4 6B, 05, 05]
-11004; [71 F3 5B, 05, 05]
+11014; [71 F4 72, 05, 05]
-11034; [71 F3 62, 05, 05]
+11015; [71 F4 79, 05, 05]
-11035; [71 F3 69, 05, 05]
+11016; [71 F4 80, 05, 05]
-11036; [71 F3 70, 05, 05]
+11017; [71 F4 87, 05, 05]
-11037; [71 F3 77, 05, 05]
+11018; [71 F4 8E, 05, 05]
-11038; [71 F3 7E, 05, 05]
+11019; [71 F4 95, 05, 05]
-11039; [71 F3 85, 05, 05]
+1101A; [71 F4 9C, 05, 05]
-1103A; [71 F3 8C, 05, 05]
+1101B; [71 F4 A3, 05, 05]
-1103B; [71 F3 93, 05, 05]
+1101C; [71 F4 AA, 05, 05]
-1103C; [71 F3 9A, 05, 05]
+1101D; [71 F4 B1, 05, 05]
-1103D; [71 F3 A1, 05, 05]
+1101E; [71 F4 B8, 05, 05]
-1103E; [71 F3 A8, 05, 05]
+1101F; [71 F4 BF, 05, 05]
-1103F; [71 F3 AF, 05, 05]
+11020; [71 F4 C6, 05, 05]
-11040; [71 F3 B6, 05, 05]
+11021; [71 F4 CD, 05, 05]
-11041; [71 F3 BD, 05, 05]
+11022; [71 F4 D4, 05, 05]
-11042; [71 F3 C4, 05, 05]
+11023; [71 F4 DB, 05, 05]
-11043; [71 F3 CB, 05, 05]
+11024; [71 F4 E2, 05, 05]
-11044; [71 F3 D2, 05, 05]
+11025; [71 F4 E9, 05, 05]
-11045; [71 F3 D9, 05, 05]
+11026; [71 F4 F0, 05, 05]
-11046; [71 F3 E0, 05, 05]
+11027; [71 F4 F7, 05, 05]
-1107F; [71 F3 E7, 05, 05]
+11028; [71 F4 FE, 05, 05]
-FDD1 10A00; [71 F4 02, 05, 05] # KHAROSHTHI first primary (compressible)
+11029; [71 F5 07, 05, 05]
-10A00; [71 F4 09, 05, 05]
+1102A; [71 F5 0E, 05, 05]
-10A01; [71 F4 10, 05, 05]
+1102B; [71 F5 15, 05, 05]
-10A02; [71 F4 17, 05, 05]
+1102C; [71 F5 1C, 05, 05]
-10A03; [71 F4 1E, 05, 05]
+1102D; [71 F5 23, 05, 05]
-10A05; [71 F4 25, 05, 05]
+1102E; [71 F5 2A, 05, 05]
-10A06; [71 F4 2C, 05, 05]
+1102F; [71 F5 31, 05, 05]
-10A0C; [71 F4 33, 05, 05]
+11030; [71 F5 38, 05, 05]
-10A10; [71 F4 3A, 05, 05]
+11031; [71 F5 3F, 05, 05]
-10A32; [71 F4 41, 05, 05]
+11032; [71 F5 46, 05, 05]
-10A11; [71 F4 48, 05, 05]
+11033; [71 F5 4D, 05, 05]
-10A12; [71 F4 4F, 05, 05]
+11003; [71 F5 54, 05, 05]
-10A13; [71 F4 56, 05, 05]
+11004; [71 F5 5B, 05, 05]
-10A15; [71 F4 5D, 05, 05]
+11034; [71 F5 62, 05, 05]
-10A16; [71 F4 64, 05, 05]
+11035; [71 F5 69, 05, 05]
-10A17; [71 F4 6B, 05, 05]
+11036; [71 F5 70, 05, 05]
-10A19; [71 F4 72, 05, 05]
+11037; [71 F5 77, 05, 05]
-10A1A; [71 F4 79, 05, 05]
+11038; [71 F5 7E, 05, 05]
-10A34; [71 F4 80, 05, 05]
+11039; [71 F5 85, 05, 05]
-10A1B; [71 F4 87, 05, 05]
+1103A; [71 F5 8C, 05, 05]
-10A33; [71 F4 8E, 05, 05]
+1103B; [71 F5 93, 05, 05]
-10A1C; [71 F4 95, 05, 05]
+1103C; [71 F5 9A, 05, 05]
-10A1D; [71 F4 9C, 05, 05]
+1103D; [71 F5 A1, 05, 05]
-10A1E; [71 F4 A3, 05, 05]
+1103E; [71 F5 A8, 05, 05]
-10A1F; [71 F4 AA, 05, 05]
+1103F; [71 F5 AF, 05, 05]
-10A20; [71 F4 B1, 05, 05]
+11040; [71 F5 B6, 05, 05]
-10A21; [71 F4 B8, 05, 05]
+11041; [71 F5 BD, 05, 05]
-10A22; [71 F4 BF, 05, 05]
+11042; [71 F5 C4, 05, 05]
-10A23; [71 F4 C6, 05, 05]
+11043; [71 F5 CB, 05, 05]
-10A24; [71 F4 CD, 05, 05]
+11044; [71 F5 D2, 05, 05]
-10A25; [71 F4 D4, 05, 05]
+11045; [71 F5 D9, 05, 05]
-10A26; [71 F4 DB, 05, 05]
+11046; [71 F5 E0, 05, 05]
-10A27; [71 F4 E2, 05, 05]
+1107F; [71 F5 E7, 05, 05]
-10A28; [71 F4 E9, 05, 05]
+FDD1 10A00; [71 F6 02, 05, 05] # KHAROSHTHI first primary (compressible)
-10A29; [71 F4 F0, 05, 05]
+10A00; [71 F6 09, 05, 05]
-10A2A; [71 F4 F7, 05, 05]
+10A01; [71 F6 10, 05, 05]
-10A2B; [71 F4 FE, 05, 05]
+10A02; [71 F6 17, 05, 05]
-10A2C; [71 F5 07, 05, 05]
+10A03; [71 F6 1E, 05, 05]
-10A35; [71 F5 0E, 05, 05]
+10A05; [71 F6 25, 05, 05]
-10A2D; [71 F5 15, 05, 05]
+10A06; [71 F6 2C, 05, 05]
-10A2E; [71 F5 1C, 05, 05]
+10A0C; [71 F6 33, 05, 05]
-10A2F; [71 F5 23, 05, 05]
+10A10; [71 F6 3A, 05, 05]
-10A30; [71 F5 2A, 05, 05]
+10A32; [71 F6 41, 05, 05]
-10A31; [71 F5 31, 05, 05]
+10A11; [71 F6 48, 05, 05]
-10A3F; [71 F5 38, 05, 05]
+10A12; [71 F6 4F, 05, 05]
-FDD1 11C0E; [71 F6 02, 05, 05] # Bhaiksuki first primary (compressible)
+10A13; [71 F6 56, 05, 05]
-11C00; [71 F6 09, 05, 05]
+10A15; [71 F6 5D, 05, 05]
-11C01; [71 F6 10, 05, 05]
+10A16; [71 F6 64, 05, 05]
-11C02; [71 F6 17, 05, 05]
+10A17; [71 F6 6B, 05, 05]
-11C03; [71 F6 1E, 05, 05]
+10A19; [71 F6 72, 05, 05]
-11C04; [71 F6 25, 05, 05]
+10A1A; [71 F6 79, 05, 05]
-11C05; [71 F6 2C, 05, 05]
+10A34; [71 F6 80, 05, 05]
-11C06; [71 F6 33, 05, 05]
+10A1B; [71 F6 87, 05, 05]
-11C07; [71 F6 3A, 05, 05]
+10A33; [71 F6 8E, 05, 05]
-11C08; [71 F6 41, 05, 05]
+10A1C; [71 F6 95, 05, 05]
-11C0A; [71 F6 48, 05, 05]
+10A1D; [71 F6 9C, 05, 05]
-11C0B; [71 F6 4F, 05, 05]
+10A1E; [71 F6 A3, 05, 05]
-11C0C; [71 F6 56, 05, 05]
+10A1F; [71 F6 AA, 05, 05]
-11C0D; [71 F6 5D, 05, 05]
+10A20; [71 F6 B1, 05, 05]
-11C0E; [71 F6 64, 05, 05]
+10A21; [71 F6 B8, 05, 05]
-11C0F; [71 F6 6B, 05, 05]
+10A22; [71 F6 BF, 05, 05]
-11C10; [71 F6 72, 05, 05]
+10A23; [71 F6 C6, 05, 05]
-11C11; [71 F6 79, 05, 05]
+10A24; [71 F6 CD, 05, 05]
-11C12; [71 F6 80, 05, 05]
+10A25; [71 F6 D4, 05, 05]
-11C13; [71 F6 87, 05, 05]
+10A26; [71 F6 DB, 05, 05]
-11C14; [71 F6 8E, 05, 05]
+10A27; [71 F6 E2, 05, 05]
-11C15; [71 F6 95, 05, 05]
+10A28; [71 F6 E9, 05, 05]
-11C16; [71 F6 9C, 05, 05]
+10A29; [71 F6 F0, 05, 05]
-11C17; [71 F6 A3, 05, 05]
+10A2A; [71 F6 F7, 05, 05]
-11C18; [71 F6 AA, 05, 05]
+10A2B; [71 F6 FE, 05, 05]
-11C19; [71 F6 B1, 05, 05]
+10A2C; [71 F7 07, 05, 05]
-11C1A; [71 F6 B8, 05, 05]
+10A35; [71 F7 0E, 05, 05]
-11C1B; [71 F6 BF, 05, 05]
+10A2D; [71 F7 15, 05, 05]
-11C1C; [71 F6 C6, 05, 05]
+10A2E; [71 F7 1C, 05, 05]
-11C1D; [71 F6 CD, 05, 05]
+10A2F; [71 F7 23, 05, 05]
-11C1E; [71 F6 D4, 05, 05]
+10A30; [71 F7 2A, 05, 05]
-11C1F; [71 F6 DB, 05, 05]
+10A31; [71 F7 31, 05, 05]
-11C20; [71 F6 E2, 05, 05]
+10A3F; [71 F7 38, 05, 05]
-11C21; [71 F6 E9, 05, 05]
+FDD1 11C0E; [71 F8 02, 05, 05] # Bhaiksuki first primary (compressible)
-11C22; [71 F6 F0, 05, 05]
+11C00; [71 F8 09, 05, 05]
-11C23; [71 F6 F7, 05, 05]
+11C01; [71 F8 10, 05, 05]
-11C24; [71 F6 FE, 05, 05]
+11C02; [71 F8 17, 05, 05]
-11C25; [71 F7 07, 05, 05]
+11C03; [71 F8 1E, 05, 05]
-11C26; [71 F7 0E, 05, 05]
+11C04; [71 F8 25, 05, 05]
-11C27; [71 F7 15, 05, 05]
+11C05; [71 F8 2C, 05, 05]
-11C28; [71 F7 1C, 05, 05]
+11C06; [71 F8 33, 05, 05]
-11C29; [71 F7 23, 05, 05]
+11C07; [71 F8 3A, 05, 05]
-11C2A; [71 F7 2A, 05, 05]
+11C08; [71 F8 41, 05, 05]
-11C2B; [71 F7 31, 05, 05]
+11C0A; [71 F8 48, 05, 05]
-11C2C; [71 F7 38, 05, 05]
+11C0B; [71 F8 4F, 05, 05]
-11C2D; [71 F7 3F, 05, 05]
+11C0C; [71 F8 56, 05, 05]
-11C2E; [71 F7 46, 05, 05]
+11C0D; [71 F8 5D, 05, 05]
-11C40; [71 F7 4D, 05, 05]
+11C0E; [71 F8 64, 05, 05]
-11C2F; [71 F7 54, 05, 05]
+11C0F; [71 F8 6B, 05, 05]
-11C30; [71 F7 5B, 05, 05]
+11C10; [71 F8 72, 05, 05]
-11C31; [71 F7 62, 05, 05]
+11C11; [71 F8 79, 05, 05]
-11C32; [71 F7 69, 05, 05]
+11C12; [71 F8 80, 05, 05]
-11C33; [71 F7 70, 05, 05]
+11C13; [71 F8 87, 05, 05]
-11C34; [71 F7 77, 05, 05]
+11C14; [71 F8 8E, 05, 05]
-11C35; [71 F7 7E, 05, 05]
+11C15; [71 F8 95, 05, 05]
-11C36; [71 F7 85, 05, 05]
+11C16; [71 F8 9C, 05, 05]
-11C38; [71 F7 8C, 05, 05]
+11C17; [71 F8 A3, 05, 05]
-11C39; [71 F7 93, 05, 05]
+11C18; [71 F8 AA, 05, 05]
-11C3A; [71 F7 9A, 05, 05]
+11C19; [71 F8 B1, 05, 05]
-11C3B; [71 F7 A1, 05, 05]
+11C1A; [71 F8 B8, 05, 05]
-11C3F; [71 F7 A8, 05, 05]
+11C1B; [71 F8 BF, 05, 05]
+
+11C1C; [71 F8 C6, 05, 05]
+
+11C1D; [71 F8 CD, 05, 05]
+
+11C1E; [71 F8 D4, 05, 05]
+
+11C1F; [71 F8 DB, 05, 05]
+
+11C20; [71 F8 E2, 05, 05]
+
+11C21; [71 F8 E9, 05, 05]
+
+11C22; [71 F8 F0, 05, 05]
+
+11C23; [71 F8 F7, 05, 05]
+
+11C24; [71 F8 FE, 05, 05]
+
+11C25; [71 F9 07, 05, 05]
+
+11C26; [71 F9 0E, 05, 05]
+
+11C27; [71 F9 15, 05, 05]
+
+11C28; [71 F9 1C, 05, 05]
+
+11C29; [71 F9 23, 05, 05]
+
+11C2A; [71 F9 2A, 05, 05]
+
+11C2B; [71 F9 31, 05, 05]
+
+11C2C; [71 F9 38, 05, 05]
+
+11C2D; [71 F9 3F, 05, 05]
+
+11C2E; [71 F9 46, 05, 05]
+
+11C40; [71 F9 4D, 05, 05]
+
+11C2F; [71 F9 54, 05, 05]
+
+11C30; [71 F9 5B, 05, 05]
+
+11C31; [71 F9 62, 05, 05]
+
+11C32; [71 F9 69, 05, 05]
+
+11C33; [71 F9 70, 05, 05]
+
+11C34; [71 F9 77, 05, 05]
+
+11C35; [71 F9 7E, 05, 05]
+
+11C36; [71 F9 85, 05, 05]
+
+11C38; [71 F9 8C, 05, 05]
+
+11C39; [71 F9 93, 05, 05]
+
+11C3A; [71 F9 9A, 05, 05]
+
+11C3B; [71 F9 A1, 05, 05]
+
+11C3F; [71 F9 A8, 05, 05]
FDD1 0E17; [72 04 02, 05, 05] # THAI first primary starts new lead byte (compressible)
@@ -33253,47 +34009,49 @@ FDD1 11103; [75 60 02, 05, 05] # Chakma first primary (compressible)
11123; [75 60 E9, 05, 05]
-11124; [75 60 F0, 05, 05]
+11147; [75 60 F0, 05, 05]
+
+11124; [75 60 F7, 05, 05]
-11125; [75 60 F7, 05, 05]
+11125; [75 60 FE, 05, 05]
-11126; [75 60 FE, 05, 05]
+11126; [75 61 07, 05, 05]
-11144; [75 61 07, 05, 05]
+11144; [75 61 0E, 05, 05]
-11127; [75 61 0E, 05, 05]
+11127; [75 61 15, 05, 05]
-11128; [75 61 15, 05, 05]
+11128; [75 61 1C, 05, 05]
-11129; [75 61 1C, 05, 05]
+11129; [75 61 23, 05, 05]
-1112A; [75 61 23, 05, 05]
+1112A; [75 61 2A, 05, 05]
-1112B; [75 61 2A, 05, 05]
+1112B; [75 61 31, 05, 05]
-1112C; [75 61 31, 05, 05]
+1112C; [75 61 38, 05, 05]
-1112D; [75 61 38, 05, 05]
+1112D; [75 61 3F, 05, 05]
-1112E; [75 61 3F, 05, 05]
-11131 11127; [75 61 3F, 05, 05]
+1112E; [75 61 46, 05, 05]
+11131 11127; [75 61 46, 05, 05]
-1112F; [75 61 46, 05, 05]
-11132 11127; [75 61 46, 05, 05]
+1112F; [75 61 4D, 05, 05]
+11132 11127; [75 61 4D, 05, 05]
-11130; [75 61 4D, 05, 05]
+11130; [75 61 54, 05, 05]
-11131; [75 61 54, 05, 05]
+11131; [75 61 5B, 05, 05]
-11132; [75 61 5B, 05, 05]
+11132; [75 61 62, 05, 05]
-11145; [75 61 62, 05, 05]
+11145; [75 61 69, 05, 05]
-11146; [75 61 69, 05, 05]
+11146; [75 61 70, 05, 05]
-11133; [75 61 70, 05, 05]
+11133; [75 61 77, 05, 05]
-11134; [75 61 77, 05, 05]
+11134; [75 61 7E, 05, 05]
FDD1 1780; [75 62 02, 05, 05] # KHMER first primary (compressible)
@@ -34383,2207 +35141,2206 @@ A9B1; [76 2F 25, 05, 05]
A9B2; [76 2F 2C, 05, 05]
-A9B4; [76 2F 33, 05, 05]
+A9B4; [76 31, 05, 05]
+A9B5; [76 31, 05, 20]
-A9BC; [76 2F 3A, 05, 05]
+A9BC; [76 33 02, 05, 05]
-A9B6; [76 2F 41, 05, 05]
+A9B6; [76 33 09, 05, 05]
-A9B7; [76 2F 48, 05, 05]
+A9B7; [76 33 10, 05, 05]
-A9B8; [76 2F 4F, 05, 05]
+A9B8; [76 33 17, 05, 05]
-A9B9; [76 2F 56, 05, 05]
+A9B9; [76 33 1E, 05, 05]
-A9BD; [76 2F 5D, 05, 05]
+A9BD; [76 33 25, 05, 05]
-A9BA; [76 2F 64, 05, 05]
+A9BA; [76 33 2C, 05, 05]
-A9BB; [76 2F 6B, 05, 05]
+A9BB; [76 33 33, 05, 05]
-A9B5; [76 2F 72, 05, 05]
+A9C0; [76 33 3A, 05, 05]
-A9C0; [76 2F 79, 05, 05]
+FDD1 1826; [76 34 02, 05, 05] # MONGOLIAN first primary (compressible)
-FDD1 1826; [76 30 02, 05, 05] # MONGOLIAN first primary (compressible)
+1880; [76 34 09, 05, 05]
-1880; [76 30 09, 05, 05]
+1881; [76 34 10, 05, 05]
-1881; [76 30 10, 05, 05]
+1882; [76 34 17, 05, 05]
-1882; [76 30 17, 05, 05]
+1883; [76 34 1E, 05, 05]
-1883; [76 30 1E, 05, 05]
+1884; [76 34 25, 05, 05]
-1884; [76 30 25, 05, 05]
+1885; [76 34 2C, 05, 05]
-1885; [76 30 2C, 05, 05]
+1886; [76 34 33, 05, 05]
-1886; [76 30 33, 05, 05]
+1843; [76 34 3A, 05, 05]
-1843; [76 30 3A, 05, 05]
+1820; [76 34 41, 05, 05]
-1820; [76 30 41, 05, 05]
+1887; [76 34 48, 05, 05]
-1887; [76 30 48, 05, 05]
+1821; [76 34 4F, 05, 05]
-1821; [76 30 4F, 05, 05]
+1844; [76 34 56, 05, 05]
-1844; [76 30 56, 05, 05]
+185D; [76 34 5D, 05, 05]
-185D; [76 30 5D, 05, 05]
+1822; [76 34 64, 05, 05]
-1822; [76 30 64, 05, 05]
+1845; [76 34 6B, 05, 05]
-1845; [76 30 6B, 05, 05]
+185E; [76 34 72, 05, 05]
-185E; [76 30 72, 05, 05]
+1873; [76 34 79, 05, 05]
-1873; [76 30 79, 05, 05]
+1888; [76 34 80, 05, 05]
-1888; [76 30 80, 05, 05]
+185F; [76 34 87, 05, 05]
-185F; [76 30 87, 05, 05]
+1823; [76 34 8E, 05, 05]
-1823; [76 30 8E, 05, 05]
+1846; [76 34 95, 05, 05]
-1846; [76 30 95, 05, 05]
+1824; [76 34 9C, 05, 05]
-1824; [76 30 9C, 05, 05]
+1847; [76 34 A3, 05, 05]
-1847; [76 30 A3, 05, 05]
+1861; [76 34 AA, 05, 05]
-1861; [76 30 AA, 05, 05]
+1825; [76 34 B1, 05, 05]
-1825; [76 30 B1, 05, 05]
+1848; [76 34 B8, 05, 05]
-1848; [76 30 B8, 05, 05]
+1826; [76 34 BF, 05, 05]
-1826; [76 30 BF, 05, 05]
+1849; [76 34 C6, 05, 05]
-1849; [76 30 C6, 05, 05]
+1860; [76 34 CD, 05, 05]
-1860; [76 30 CD, 05, 05]
+1827; [76 34 D4, 05, 05]
-1827; [76 30 D4, 05, 05]
+1828; [76 34 DB, 05, 05]
-1828; [76 30 DB, 05, 05]
+1829; [76 34 E2, 05, 05]
-1829; [76 30 E2, 05, 05]
+184A; [76 34 E9, 05, 05]
-184A; [76 30 E9, 05, 05]
+1862; [76 34 F0, 05, 05]
-1862; [76 30 F0, 05, 05]
+188A; [76 34 F7, 05, 05]
-188A; [76 30 F7, 05, 05]
+189B; [76 34 FE, 05, 05]
-189B; [76 30 FE, 05, 05]
+182A; [76 35 07, 05, 05]
-182A; [76 31 07, 05, 05]
+184B; [76 35 0E, 05, 05]
-184B; [76 31 0E, 05, 05]
+182B; [76 35 15, 05, 05]
-182B; [76 31 15, 05, 05]
+184C; [76 35 1C, 05, 05]
-184C; [76 31 1C, 05, 05]
+1866; [76 35 23, 05, 05]
-1866; [76 31 23, 05, 05]
+182C; [76 35 2A, 05, 05]
-182C; [76 31 2A, 05, 05]
+184D; [76 35 31, 05, 05]
-184D; [76 31 31, 05, 05]
+182D; [76 35 38, 05, 05]
-182D; [76 31 38, 05, 05]
+184E; [76 35 3F, 05, 05]
-184E; [76 31 3F, 05, 05]
+1864; [76 35 46, 05, 05]
-1864; [76 31 46, 05, 05]
+189A; [76 35 4D, 05, 05]
-189A; [76 31 4D, 05, 05]
+1865; [76 35 54, 05, 05]
-1865; [76 31 54, 05, 05]
+182E; [76 35 5B, 05, 05]
-182E; [76 31 5B, 05, 05]
+184F; [76 35 62, 05, 05]
-184F; [76 31 62, 05, 05]
+182F; [76 35 69, 05, 05]
-182F; [76 31 69, 05, 05]
+1830; [76 35 70, 05, 05]
-1830; [76 31 70, 05, 05]
+1831; [76 35 77, 05, 05]
-1831; [76 31 77, 05, 05]
+1867; [76 35 7E, 05, 05]
-1867; [76 31 7E, 05, 05]
+189C; [76 35 85, 05, 05]
-189C; [76 31 85, 05, 05]
+189D; [76 35 8C, 05, 05]
-189D; [76 31 8C, 05, 05]
+18A2; [76 35 93, 05, 05]
-18A2; [76 31 93, 05, 05]
+18A4; [76 35 9A, 05, 05]
-18A4; [76 31 9A, 05, 05]
+18A5; [76 35 A1, 05, 05]
-18A5; [76 31 A1, 05, 05]
+1832; [76 35 A8, 05, 05]
-1832; [76 31 A8, 05, 05]
+1850; [76 35 AF, 05, 05]
-1850; [76 31 AF, 05, 05]
+1868; [76 35 B6, 05, 05]
-1868; [76 31 B6, 05, 05]
+1833; [76 35 BD, 05, 05]
-1833; [76 31 BD, 05, 05]
+1851; [76 35 C4, 05, 05]
-1851; [76 31 C4, 05, 05]
+1869; [76 35 CB, 05, 05]
-1869; [76 31 CB, 05, 05]
+1834; [76 35 D2, 05, 05]
-1834; [76 31 D2, 05, 05]
+1852; [76 35 D9, 05, 05]
-1852; [76 31 D9, 05, 05]
+1871; [76 35 E0, 05, 05]
-1871; [76 31 E0, 05, 05]
+1878; [76 35 E7, 05, 05]
-1878; [76 31 E7, 05, 05]
+185C; [76 35 EE, 05, 05]
-185C; [76 31 EE, 05, 05]
+188B; [76 35 F5, 05, 05]
-188B; [76 31 F5, 05, 05]
+1835; [76 35 FC, 05, 05]
-1835; [76 31 FC, 05, 05]
+1853; [76 36 05, 05, 05]
-1853; [76 32 05, 05, 05]
+186A; [76 36 0C, 05, 05]
-186A; [76 32 0C, 05, 05]
+1877; [76 36 13, 05, 05]
-1877; [76 32 13, 05, 05]
+1836; [76 36 1A, 05, 05]
-1836; [76 32 1A, 05, 05]
+1855; [76 36 21, 05, 05]
-1855; [76 32 21, 05, 05]
+1872; [76 36 28, 05, 05]
-1872; [76 32 28, 05, 05]
+1837; [76 36 2F, 05, 05]
-1837; [76 32 2F, 05, 05]
+1875; [76 36 36, 05, 05]
-1875; [76 32 36, 05, 05]
+1838; [76 36 3D, 05, 05]
-1838; [76 32 3D, 05, 05]
+1856; [76 36 44, 05, 05]
-1856; [76 32 44, 05, 05]
+1839; [76 36 4B, 05, 05]
-1839; [76 32 4B, 05, 05]
+186B; [76 36 52, 05, 05]
-186B; [76 32 52, 05, 05]
+1876; [76 36 59, 05, 05]
-1876; [76 32 59, 05, 05]
+183A; [76 36 60, 05, 05]
-183A; [76 32 60, 05, 05]
+1857; [76 36 67, 05, 05]
-1857; [76 32 67, 05, 05]
+1863; [76 36 6E, 05, 05]
-1863; [76 32 6E, 05, 05]
+1874; [76 36 75, 05, 05]
-1874; [76 32 75, 05, 05]
+1889; [76 36 7C, 05, 05]
-1889; [76 32 7C, 05, 05]
+183B; [76 36 83, 05, 05]
-183B; [76 32 83, 05, 05]
+183C; [76 36 8A, 05, 05]
-183C; [76 32 8A, 05, 05]
+1854; [76 36 91, 05, 05]
-1854; [76 32 91, 05, 05]
+186E; [76 36 98, 05, 05]
-186E; [76 32 98, 05, 05]
+183D; [76 36 9F, 05, 05]
-183D; [76 32 9F, 05, 05]
+186F; [76 36 A6, 05, 05]
-186F; [76 32 A6, 05, 05]
+1858; [76 36 AD, 05, 05]
-1858; [76 32 AD, 05, 05]
+186C; [76 36 B4, 05, 05]
-186C; [76 32 B4, 05, 05]
+183E; [76 36 BB, 05, 05]
-183E; [76 32 BB, 05, 05]
+1859; [76 36 C2, 05, 05]
-1859; [76 32 C2, 05, 05]
+186D; [76 36 C9, 05, 05]
-186D; [76 32 C9, 05, 05]
+183F; [76 36 D0, 05, 05]
-183F; [76 32 D0, 05, 05]
+1840; [76 36 D7, 05, 05]
-1840; [76 32 D7, 05, 05]
+1841; [76 36 DE, 05, 05]
-1841; [76 32 DE, 05, 05]
+1842; [76 36 E5, 05, 05]
-1842; [76 32 E5, 05, 05]
+185A; [76 36 EC, 05, 05]
-185A; [76 32 EC, 05, 05]
+185B; [76 36 F3, 05, 05]
-185B; [76 32 F3, 05, 05]
+1870; [76 36 FA, 05, 05]
-1870; [76 32 FA, 05, 05]
+188C; [76 37 03, 05, 05]
-188C; [76 33 03, 05, 05]
+189E; [76 37 0A, 05, 05]
-189E; [76 33 0A, 05, 05]
+188D; [76 37 11, 05, 05]
-188D; [76 33 11, 05, 05]
+188E; [76 37 18, 05, 05]
-188E; [76 33 18, 05, 05]
+189F; [76 37 1F, 05, 05]
-189F; [76 33 1F, 05, 05]
+188F; [76 37 26, 05, 05]
-188F; [76 33 26, 05, 05]
+1890; [76 37 2D, 05, 05]
-1890; [76 33 2D, 05, 05]
+1898; [76 37 34, 05, 05]
-1898; [76 33 34, 05, 05]
+18A0; [76 37 3B, 05, 05]
-18A0; [76 33 3B, 05, 05]
+1891; [76 37 42, 05, 05]
-1891; [76 33 42, 05, 05]
+18A1; [76 37 49, 05, 05]
-18A1; [76 33 49, 05, 05]
+1892; [76 37 50, 05, 05]
-1892; [76 33 50, 05, 05]
+1893; [76 37 57, 05, 05]
-1893; [76 33 57, 05, 05]
+18A8; [76 37 5E, 05, 05]
-18A8; [76 33 5E, 05, 05]
+1894; [76 37 65, 05, 05]
-1894; [76 33 65, 05, 05]
+18A3; [76 37 6C, 05, 05]
-18A3; [76 33 6C, 05, 05]
+1895; [76 37 73, 05, 05]
-1895; [76 33 73, 05, 05]
+1899; [76 37 7A, 05, 05]
-1899; [76 33 7A, 05, 05]
+1896; [76 37 81, 05, 05]
-1896; [76 33 81, 05, 05]
+1897; [76 37 88, 05, 05]
-1897; [76 33 88, 05, 05]
+18A6; [76 37 8F, 05, 05]
-18A6; [76 33 8F, 05, 05]
+18A7; [76 37 96, 05, 05]
-18A7; [76 33 96, 05, 05]
+18AA; [76 37 9D, 05, 05]
-18AA; [76 33 9D, 05, 05]
+18A9; [76 37 A4, 05, 05]
-18A9; [76 33 A4, 05, 05]
+FDD1 1C5A; [76 38 02, 05, 05] # Ol Chiki first primary (compressible)
-FDD1 1C5A; [76 34 02, 05, 05] # Ol Chiki first primary (compressible)
+1C5A; [76 38 09, 05, 05]
-1C5A; [76 34 09, 05, 05]
+1C5B; [76 38 10, 05, 05]
-1C5B; [76 34 10, 05, 05]
+1C5C; [76 38 17, 05, 05]
-1C5C; [76 34 17, 05, 05]
+1C5D; [76 38 1E, 05, 05]
-1C5D; [76 34 1E, 05, 05]
+1C5E; [76 38 25, 05, 05]
-1C5E; [76 34 25, 05, 05]
+1C5F; [76 38 2C, 05, 05]
-1C5F; [76 34 2C, 05, 05]
+1C60; [76 38 33, 05, 05]
-1C60; [76 34 33, 05, 05]
+1C61; [76 38 3A, 05, 05]
-1C61; [76 34 3A, 05, 05]
+1C62; [76 38 41, 05, 05]
-1C62; [76 34 41, 05, 05]
+1C63; [76 38 48, 05, 05]
-1C63; [76 34 48, 05, 05]
+1C64; [76 38 4F, 05, 05]
-1C64; [76 34 4F, 05, 05]
+1C65; [76 38 56, 05, 05]
-1C65; [76 34 56, 05, 05]
+1C66; [76 38 5D, 05, 05]
-1C66; [76 34 5D, 05, 05]
+1C67; [76 38 64, 05, 05]
-1C67; [76 34 64, 05, 05]
+1C68; [76 38 6B, 05, 05]
-1C68; [76 34 6B, 05, 05]
+1C69; [76 38 72, 05, 05]
-1C69; [76 34 72, 05, 05]
+1C6A; [76 38 79, 05, 05]
-1C6A; [76 34 79, 05, 05]
+1C6B; [76 38 80, 05, 05]
-1C6B; [76 34 80, 05, 05]
+1C6C; [76 38 87, 05, 05]
-1C6C; [76 34 87, 05, 05]
+1C6D; [76 38 8E, 05, 05]
-1C6D; [76 34 8E, 05, 05]
+1C6E; [76 38 95, 05, 05]
-1C6E; [76 34 95, 05, 05]
+1C6F; [76 38 9C, 05, 05]
-1C6F; [76 34 9C, 05, 05]
+1C70; [76 38 A3, 05, 05]
-1C70; [76 34 A3, 05, 05]
+1C71; [76 38 AA, 05, 05]
-1C71; [76 34 AA, 05, 05]
+1C72; [76 38 B1, 05, 05]
-1C72; [76 34 B1, 05, 05]
+1C73; [76 38 B8, 05, 05]
-1C73; [76 34 B8, 05, 05]
+1C74; [76 38 BF, 05, 05]
-1C74; [76 34 BF, 05, 05]
+1C75; [76 38 C6, 05, 05]
-1C75; [76 34 C6, 05, 05]
+1C76; [76 38 CD, 05, 05]
-1C76; [76 34 CD, 05, 05]
+1C77; [76 38 D4, 05, 05]
-1C77; [76 34 D4, 05, 05]
+1C78; [76 38 DB, 05, 05]
-1C78; [76 34 DB, 05, 05]
+1C79; [76 38 E2, 05, 05]
-1C79; [76 34 E2, 05, 05]
+1C7A; [76 38 E9, 05, 05]
-1C7A; [76 34 E9, 05, 05]
+1C7B; [76 38 F0, 05, 05]
-1C7B; [76 34 F0, 05, 05]
+1C7C; [76 38 F7, 05, 05]
-1C7C; [76 34 F7, 05, 05]
+1C7D; [76 38 FE, 05, 05]
-1C7D; [76 34 FE, 05, 05]
+FDD1 13C4; [76 3A 02, 05, 05] # CHEROKEE first primary (compressible)
-FDD1 13C4; [76 36 02, 05, 05] # CHEROKEE first primary (compressible)
+AB70; [76 3C, 05, 05]
+13A0; [76 3C, 05, A0]
-AB70; [76 38, 05, 05]
-13A0; [76 38, 05, A0]
+AB71; [76 3E, 05, 05]
+13A1; [76 3E, 05, A0]
-AB71; [76 3A, 05, 05]
-13A1; [76 3A, 05, A0]
+AB72; [76 40, 05, 05]
+13A2; [76 40, 05, A0]
-AB72; [76 3C, 05, 05]
-13A2; [76 3C, 05, A0]
+AB73; [76 42, 05, 05]
+13A3; [76 42, 05, A0]
-AB73; [76 3E, 05, 05]
-13A3; [76 3E, 05, A0]
+AB74; [76 44, 05, 05]
+13A4; [76 44, 05, A0]
-AB74; [76 40, 05, 05]
-13A4; [76 40, 05, A0]
+AB75; [76 46, 05, 05]
+13A5; [76 46, 05, A0]
-AB75; [76 42, 05, 05]
-13A5; [76 42, 05, A0]
+AB76; [76 48, 05, 05]
+13A6; [76 48, 05, A0]
-AB76; [76 44, 05, 05]
-13A6; [76 44, 05, A0]
+AB77; [76 4A, 05, 05]
+13A7; [76 4A, 05, A0]
-AB77; [76 46, 05, 05]
-13A7; [76 46, 05, A0]
+AB78; [76 4C, 05, 05]
+13A8; [76 4C, 05, A0]
-AB78; [76 48, 05, 05]
-13A8; [76 48, 05, A0]
+AB79; [76 4E, 05, 05]
+13A9; [76 4E, 05, A0]
-AB79; [76 4A, 05, 05]
-13A9; [76 4A, 05, A0]
+AB7A; [76 50, 05, 05]
+13AA; [76 50, 05, A0]
-AB7A; [76 4C, 05, 05]
-13AA; [76 4C, 05, A0]
+AB7B; [76 52, 05, 05]
+13AB; [76 52, 05, A0]
-AB7B; [76 4E, 05, 05]
-13AB; [76 4E, 05, A0]
+AB7C; [76 54, 05, 05]
+13AC; [76 54, 05, A0]
-AB7C; [76 50, 05, 05]
-13AC; [76 50, 05, A0]
+AB7D; [76 56, 05, 05]
+13AD; [76 56, 05, A0]
-AB7D; [76 52, 05, 05]
-13AD; [76 52, 05, A0]
+AB7E; [76 58, 05, 05]
+13AE; [76 58, 05, A0]
-AB7E; [76 54, 05, 05]
-13AE; [76 54, 05, A0]
+AB7F; [76 5A, 05, 05]
+13AF; [76 5A, 05, A0]
-AB7F; [76 56, 05, 05]
-13AF; [76 56, 05, A0]
+AB80; [76 5C, 05, 05]
+13B0; [76 5C, 05, A0]
-AB80; [76 58, 05, 05]
-13B0; [76 58, 05, A0]
+AB81; [76 5E, 05, 05]
+13B1; [76 5E, 05, A0]
-AB81; [76 5A, 05, 05]
-13B1; [76 5A, 05, A0]
+AB82; [76 60, 05, 05]
+13B2; [76 60, 05, A0]
-AB82; [76 5C, 05, 05]
-13B2; [76 5C, 05, A0]
+AB83; [76 62, 05, 05]
+13B3; [76 62, 05, A0]
-AB83; [76 5E, 05, 05]
-13B3; [76 5E, 05, A0]
+AB84; [76 64, 05, 05]
+13B4; [76 64, 05, A0]
-AB84; [76 60, 05, 05]
-13B4; [76 60, 05, A0]
+AB85; [76 66, 05, 05]
+13B5; [76 66, 05, A0]
-AB85; [76 62, 05, 05]
-13B5; [76 62, 05, A0]
+AB86; [76 68, 05, 05]
+13B6; [76 68, 05, A0]
-AB86; [76 64, 05, 05]
-13B6; [76 64, 05, A0]
+AB87; [76 6A, 05, 05]
+13B7; [76 6A, 05, A0]
-AB87; [76 66, 05, 05]
-13B7; [76 66, 05, A0]
+AB88; [76 6C, 05, 05]
+13B8; [76 6C, 05, A0]
-AB88; [76 68, 05, 05]
-13B8; [76 68, 05, A0]
+AB89; [76 6E, 05, 05]
+13B9; [76 6E, 05, A0]
-AB89; [76 6A, 05, 05]
-13B9; [76 6A, 05, A0]
+AB8A; [76 70, 05, 05]
+13BA; [76 70, 05, A0]
-AB8A; [76 6C, 05, 05]
-13BA; [76 6C, 05, A0]
+AB8B; [76 72, 05, 05]
+13BB; [76 72, 05, A0]
-AB8B; [76 6E, 05, 05]
-13BB; [76 6E, 05, A0]
+AB8C; [76 74, 05, 05]
+13BC; [76 74, 05, A0]
-AB8C; [76 70, 05, 05]
-13BC; [76 70, 05, A0]
+AB8D; [76 76, 05, 05]
+13BD; [76 76, 05, A0]
-AB8D; [76 72, 05, 05]
-13BD; [76 72, 05, A0]
+AB8E; [76 78, 05, 05]
+13BE; [76 78, 05, A0]
-AB8E; [76 74, 05, 05]
-13BE; [76 74, 05, A0]
+AB8F; [76 7A, 05, 05]
+13BF; [76 7A, 05, A0]
-AB8F; [76 76, 05, 05]
-13BF; [76 76, 05, A0]
+AB90; [76 7C, 05, 05]
+13C0; [76 7C, 05, A0]
-AB90; [76 78, 05, 05]
-13C0; [76 78, 05, A0]
+AB91; [76 7E, 05, 05]
+13C1; [76 7E, 05, A0]
-AB91; [76 7A, 05, 05]
-13C1; [76 7A, 05, A0]
+AB92; [76 80, 05, 05]
+13C2; [76 80, 05, A0]
-AB92; [76 7C, 05, 05]
-13C2; [76 7C, 05, A0]
+AB93; [76 82, 05, 05]
+13C3; [76 82, 05, A0]
-AB93; [76 7E, 05, 05]
-13C3; [76 7E, 05, A0]
+AB94; [76 84, 05, 05]
+13C4; [76 84, 05, A0]
-AB94; [76 80, 05, 05]
-13C4; [76 80, 05, A0]
+AB95; [76 86, 05, 05]
+13C5; [76 86, 05, A0]
-AB95; [76 82, 05, 05]
-13C5; [76 82, 05, A0]
+AB96; [76 88, 05, 05]
+13C6; [76 88, 05, A0]
-AB96; [76 84, 05, 05]
-13C6; [76 84, 05, A0]
+AB97; [76 8A, 05, 05]
+13C7; [76 8A, 05, A0]
-AB97; [76 86, 05, 05]
-13C7; [76 86, 05, A0]
+AB98; [76 8C, 05, 05]
+13C8; [76 8C, 05, A0]
-AB98; [76 88, 05, 05]
-13C8; [76 88, 05, A0]
+AB99; [76 8E, 05, 05]
+13C9; [76 8E, 05, A0]
-AB99; [76 8A, 05, 05]
-13C9; [76 8A, 05, A0]
+AB9A; [76 90, 05, 05]
+13CA; [76 90, 05, A0]
-AB9A; [76 8C, 05, 05]
-13CA; [76 8C, 05, A0]
+AB9B; [76 92, 05, 05]
+13CB; [76 92, 05, A0]
-AB9B; [76 8E, 05, 05]
-13CB; [76 8E, 05, A0]
+AB9C; [76 94, 05, 05]
+13CC; [76 94, 05, A0]
-AB9C; [76 90, 05, 05]
-13CC; [76 90, 05, A0]
+AB9D; [76 96, 05, 05]
+13CD; [76 96, 05, A0]
-AB9D; [76 92, 05, 05]
-13CD; [76 92, 05, A0]
+AB9E; [76 98, 05, 05]
+13CE; [76 98, 05, A0]
-AB9E; [76 94, 05, 05]
-13CE; [76 94, 05, A0]
+AB9F; [76 9A, 05, 05]
+13CF; [76 9A, 05, A0]
-AB9F; [76 96, 05, 05]
-13CF; [76 96, 05, A0]
+ABA0; [76 9C, 05, 05]
+13D0; [76 9C, 05, A0]
-ABA0; [76 98, 05, 05]
-13D0; [76 98, 05, A0]
+ABA1; [76 9E, 05, 05]
+13D1; [76 9E, 05, A0]
-ABA1; [76 9A, 05, 05]
-13D1; [76 9A, 05, A0]
+ABA2; [76 A0, 05, 05]
+13D2; [76 A0, 05, A0]
-ABA2; [76 9C, 05, 05]
-13D2; [76 9C, 05, A0]
+ABA3; [76 A2, 05, 05]
+13D3; [76 A2, 05, A0]
-ABA3; [76 9E, 05, 05]
-13D3; [76 9E, 05, A0]
+ABA4; [76 A4, 05, 05]
+13D4; [76 A4, 05, A0]
-ABA4; [76 A0, 05, 05]
-13D4; [76 A0, 05, A0]
+ABA5; [76 A6, 05, 05]
+13D5; [76 A6, 05, A0]
-ABA5; [76 A2, 05, 05]
-13D5; [76 A2, 05, A0]
+ABA6; [76 A8, 05, 05]
+13D6; [76 A8, 05, A0]
-ABA6; [76 A4, 05, 05]
-13D6; [76 A4, 05, A0]
+ABA7; [76 AA, 05, 05]
+13D7; [76 AA, 05, A0]
-ABA7; [76 A6, 05, 05]
-13D7; [76 A6, 05, A0]
+ABA8; [76 AC, 05, 05]
+13D8; [76 AC, 05, A0]
-ABA8; [76 A8, 05, 05]
-13D8; [76 A8, 05, A0]
+ABA9; [76 AE, 05, 05]
+13D9; [76 AE, 05, A0]
-ABA9; [76 AA, 05, 05]
-13D9; [76 AA, 05, A0]
+ABAA; [76 B0, 05, 05]
+13DA; [76 B0, 05, A0]
-ABAA; [76 AC, 05, 05]
-13DA; [76 AC, 05, A0]
+ABAB; [76 B2, 05, 05]
+13DB; [76 B2, 05, A0]
-ABAB; [76 AE, 05, 05]
-13DB; [76 AE, 05, A0]
+ABAC; [76 B4, 05, 05]
+13DC; [76 B4, 05, A0]
-ABAC; [76 B0, 05, 05]
-13DC; [76 B0, 05, A0]
+ABAD; [76 B6, 05, 05]
+13DD; [76 B6, 05, A0]
-ABAD; [76 B2, 05, 05]
-13DD; [76 B2, 05, A0]
+ABAE; [76 B8, 05, 05]
+13DE; [76 B8, 05, A0]
-ABAE; [76 B4, 05, 05]
-13DE; [76 B4, 05, A0]
+ABAF; [76 BA, 05, 05]
+13DF; [76 BA, 05, A0]
-ABAF; [76 B6, 05, 05]
-13DF; [76 B6, 05, A0]
+ABB0; [76 BC, 05, 05]
+13E0; [76 BC, 05, A0]
-ABB0; [76 B8, 05, 05]
-13E0; [76 B8, 05, A0]
+ABB1; [76 BE, 05, 05]
+13E1; [76 BE, 05, A0]
-ABB1; [76 BA, 05, 05]
-13E1; [76 BA, 05, A0]
+ABB2; [76 C0, 05, 05]
+13E2; [76 C0, 05, A0]
-ABB2; [76 BC, 05, 05]
-13E2; [76 BC, 05, A0]
+ABB3; [76 C2, 05, 05]
+13E3; [76 C2, 05, A0]
-ABB3; [76 BE, 05, 05]
-13E3; [76 BE, 05, A0]
+ABB4; [76 C4, 05, 05]
+13E4; [76 C4, 05, A0]
-ABB4; [76 C0, 05, 05]
-13E4; [76 C0, 05, A0]
+ABB5; [76 C6, 05, 05]
+13E5; [76 C6, 05, A0]
-ABB5; [76 C2, 05, 05]
-13E5; [76 C2, 05, A0]
+ABB6; [76 C8, 05, 05]
+13E6; [76 C8, 05, A0]
-ABB6; [76 C4, 05, 05]
-13E6; [76 C4, 05, A0]
+ABB7; [76 CA, 05, 05]
+13E7; [76 CA, 05, A0]
-ABB7; [76 C6, 05, 05]
-13E7; [76 C6, 05, A0]
+ABB8; [76 CC, 05, 05]
+13E8; [76 CC, 05, A0]
-ABB8; [76 C8, 05, 05]
-13E8; [76 C8, 05, A0]
+ABB9; [76 CE, 05, 05]
+13E9; [76 CE, 05, A0]
-ABB9; [76 CA, 05, 05]
-13E9; [76 CA, 05, A0]
+ABBA; [76 D0, 05, 05]
+13EA; [76 D0, 05, A0]
-ABBA; [76 CC, 05, 05]
-13EA; [76 CC, 05, A0]
+ABBB; [76 D2, 05, 05]
+13EB; [76 D2, 05, A0]
-ABBB; [76 CE, 05, 05]
-13EB; [76 CE, 05, A0]
+ABBC; [76 D4, 05, 05]
+13EC; [76 D4, 05, A0]
-ABBC; [76 D0, 05, 05]
-13EC; [76 D0, 05, A0]
+ABBD; [76 D6, 05, 05]
+13ED; [76 D6, 05, A0]
-ABBD; [76 D2, 05, 05]
-13ED; [76 D2, 05, A0]
+ABBE; [76 D8, 05, 05]
+13EE; [76 D8, 05, A0]
-ABBE; [76 D4, 05, 05]
-13EE; [76 D4, 05, A0]
+ABBF; [76 DA, 05, 05]
+13EF; [76 DA, 05, A0]
-ABBF; [76 D6, 05, 05]
-13EF; [76 D6, 05, A0]
+13F8; [76 DC, 05, 05]
+13F0; [76 DC, 05, A0]
-13F8; [76 D8, 05, 05]
-13F0; [76 D8, 05, A0]
+13F9; [76 DE, 05, 05]
+13F1; [76 DE, 05, A0]
-13F9; [76 DA, 05, 05]
-13F1; [76 DA, 05, A0]
+13FA; [76 E0, 05, 05]
+13F2; [76 E0, 05, A0]
-13FA; [76 DC, 05, 05]
-13F2; [76 DC, 05, A0]
+13FB; [76 E2, 05, 05]
+13F3; [76 E2, 05, A0]
-13FB; [76 DE, 05, 05]
-13F3; [76 DE, 05, A0]
+13FC; [76 E4, 05, 05]
+13F4; [76 E4, 05, A0]
-13FC; [76 E0, 05, 05]
-13F4; [76 E0, 05, A0]
+13FD; [76 E6, 05, 05]
+13F5; [76 E6, 05, A0]
-13FD; [76 E2, 05, 05]
-13F5; [76 E2, 05, A0]
+FDD1 104B5; [76 E8 02, 05, 05] # Osage first primary (compressible)
-FDD1 104B5; [76 E4 02, 05, 05] # Osage first primary (compressible)
+104D8; [76 E8 09, 05, 05]
+104B0; [76 E8 09, 05, A0]
-104D8; [76 E4 09, 05, 05]
-104B0; [76 E4 09, 05, A0]
+104D9; [76 E8 10, 05, 05]
+104B1; [76 E8 10, 05, A0]
-104D9; [76 E4 10, 05, 05]
-104B1; [76 E4 10, 05, A0]
+104DA; [76 E8 17, 05, 05]
+104B2; [76 E8 17, 05, A0]
-104DA; [76 E4 17, 05, 05]
-104B2; [76 E4 17, 05, A0]
+104DB; [76 E8 1E, 05, 05]
+104B3; [76 E8 1E, 05, A0]
-104DB; [76 E4 1E, 05, 05]
-104B3; [76 E4 1E, 05, A0]
+104DC; [76 E8 25, 05, 05]
+104B4; [76 E8 25, 05, A0]
-104DC; [76 E4 25, 05, 05]
-104B4; [76 E4 25, 05, A0]
+104DD; [76 E8 2C, 05, 05]
+104B5; [76 E8 2C, 05, A0]
-104DD; [76 E4 2C, 05, 05]
-104B5; [76 E4 2C, 05, A0]
+104DE; [76 E8 33, 05, 05]
+104B6; [76 E8 33, 05, A0]
-104DE; [76 E4 33, 05, 05]
-104B6; [76 E4 33, 05, A0]
+104DF; [76 E8 3A, 05, 05]
+104B7; [76 E8 3A, 05, A0]
-104DF; [76 E4 3A, 05, 05]
-104B7; [76 E4 3A, 05, A0]
+104E0; [76 E8 41, 05, 05]
+104B8; [76 E8 41, 05, A0]
-104E0; [76 E4 41, 05, 05]
-104B8; [76 E4 41, 05, A0]
+104E1; [76 E8 48, 05, 05]
+104B9; [76 E8 48, 05, A0]
-104E1; [76 E4 48, 05, 05]
-104B9; [76 E4 48, 05, A0]
+104E2; [76 E8 4F, 05, 05]
+104BA; [76 E8 4F, 05, A0]
-104E2; [76 E4 4F, 05, 05]
-104BA; [76 E4 4F, 05, A0]
+104E3; [76 E8 56, 05, 05]
+104BB; [76 E8 56, 05, A0]
-104E3; [76 E4 56, 05, 05]
-104BB; [76 E4 56, 05, A0]
+104E4; [76 E8 5D, 05, 05]
+104BC; [76 E8 5D, 05, A0]
-104E4; [76 E4 5D, 05, 05]
-104BC; [76 E4 5D, 05, A0]
+104E5; [76 E8 64, 05, 05]
+104BD; [76 E8 64, 05, A0]
-104E5; [76 E4 64, 05, 05]
-104BD; [76 E4 64, 05, A0]
+104E6; [76 E8 6B, 05, 05]
+104BE; [76 E8 6B, 05, A0]
-104E6; [76 E4 6B, 05, 05]
-104BE; [76 E4 6B, 05, A0]
+104E7; [76 E8 72, 05, 05]
+104BF; [76 E8 72, 05, A0]
-104E7; [76 E4 72, 05, 05]
-104BF; [76 E4 72, 05, A0]
+104E8; [76 E8 79, 05, 05]
+104C0; [76 E8 79, 05, A0]
-104E8; [76 E4 79, 05, 05]
-104C0; [76 E4 79, 05, A0]
+104E9; [76 E8 80, 05, 05]
+104C1; [76 E8 80, 05, A0]
-104E9; [76 E4 80, 05, 05]
-104C1; [76 E4 80, 05, A0]
+104EA; [76 E8 87, 05, 05]
+104C2; [76 E8 87, 05, A0]
-104EA; [76 E4 87, 05, 05]
-104C2; [76 E4 87, 05, A0]
+104EB; [76 E8 8E, 05, 05]
+104C3; [76 E8 8E, 05, A0]
-104EB; [76 E4 8E, 05, 05]
-104C3; [76 E4 8E, 05, A0]
+104EC; [76 E8 95, 05, 05]
+104C4; [76 E8 95, 05, A0]
-104EC; [76 E4 95, 05, 05]
-104C4; [76 E4 95, 05, A0]
+104ED; [76 E8 9C, 05, 05]
+104C5; [76 E8 9C, 05, A0]
-104ED; [76 E4 9C, 05, 05]
-104C5; [76 E4 9C, 05, A0]
+104EE; [76 E8 A3, 05, 05]
+104C6; [76 E8 A3, 05, A0]
-104EE; [76 E4 A3, 05, 05]
-104C6; [76 E4 A3, 05, A0]
+104EF; [76 E8 AA, 05, 05]
+104C7; [76 E8 AA, 05, A0]
-104EF; [76 E4 AA, 05, 05]
-104C7; [76 E4 AA, 05, A0]
+104F0; [76 E8 B1, 05, 05]
+104C8; [76 E8 B1, 05, A0]
-104F0; [76 E4 B1, 05, 05]
-104C8; [76 E4 B1, 05, A0]
+104F1; [76 E8 B8, 05, 05]
+104C9; [76 E8 B8, 05, A0]
-104F1; [76 E4 B8, 05, 05]
-104C9; [76 E4 B8, 05, A0]
+104F2; [76 E8 BF, 05, 05]
+104CA; [76 E8 BF, 05, A0]
-104F2; [76 E4 BF, 05, 05]
-104CA; [76 E4 BF, 05, A0]
+104F3; [76 E8 C6, 05, 05]
+104CB; [76 E8 C6, 05, A0]
-104F3; [76 E4 C6, 05, 05]
-104CB; [76 E4 C6, 05, A0]
+104F4; [76 E8 CD, 05, 05]
+104CC; [76 E8 CD, 05, A0]
-104F4; [76 E4 CD, 05, 05]
-104CC; [76 E4 CD, 05, A0]
+104F5; [76 E8 D4, 05, 05]
+104CD; [76 E8 D4, 05, A0]
-104F5; [76 E4 D4, 05, 05]
-104CD; [76 E4 D4, 05, A0]
+104F6; [76 E8 DB, 05, 05]
+104CE; [76 E8 DB, 05, A0]
-104F6; [76 E4 DB, 05, 05]
-104CE; [76 E4 DB, 05, A0]
+104F7; [76 E8 E2, 05, 05]
+104CF; [76 E8 E2, 05, A0]
-104F7; [76 E4 E2, 05, 05]
-104CF; [76 E4 E2, 05, A0]
+104F8; [76 E8 E9, 05, 05]
+104D0; [76 E8 E9, 05, A0]
-104F8; [76 E4 E9, 05, 05]
-104D0; [76 E4 E9, 05, A0]
+104F9; [76 E8 F0, 05, 05]
+104D1; [76 E8 F0, 05, A0]
-104F9; [76 E4 F0, 05, 05]
-104D1; [76 E4 F0, 05, A0]
+104FA; [76 E8 F7, 05, 05]
+104D2; [76 E8 F7, 05, A0]
-104FA; [76 E4 F7, 05, 05]
-104D2; [76 E4 F7, 05, A0]
+104FB; [76 E8 FE, 05, 05]
+104D3; [76 E8 FE, 05, A0]
-104FB; [76 E4 FE, 05, 05]
-104D3; [76 E4 FE, 05, A0]
+FDD1 14C0; [76 EA 02, 05, 05] # CANADIAN-ABORIGINAL first primary (compressible)
-FDD1 14C0; [76 E6 02, 05, 05] # CANADIAN-ABORIGINAL first primary (compressible)
+1401; [76 EA 09, 05, 05]
-1401; [76 E6 09, 05, 05]
+1402; [76 EA 10, 05, 05]
-1402; [76 E6 10, 05, 05]
+1403; [76 EA 17, 05, 05]
-1403; [76 E6 17, 05, 05]
+1404; [76 EA 1E, 05, 05]
-1404; [76 E6 1E, 05, 05]
+1405; [76 EA 25, 05, 05]
-1405; [76 E6 25, 05, 05]
+1406; [76 EA 2C, 05, 05]
-1406; [76 E6 2C, 05, 05]
+1407; [76 EA 33, 05, 05]
-1407; [76 E6 33, 05, 05]
+1408; [76 EA 3A, 05, 05]
-1408; [76 E6 3A, 05, 05]
+1409; [76 EA 41, 05, 05]
-1409; [76 E6 41, 05, 05]
+140A; [76 EA 48, 05, 05]
-140A; [76 E6 48, 05, 05]
+140B; [76 EA 4F, 05, 05]
-140B; [76 E6 4F, 05, 05]
+140C; [76 EA 56, 05, 05]
-140C; [76 E6 56, 05, 05]
+140D; [76 EA 5D, 05, 05]
-140D; [76 E6 5D, 05, 05]
+140E; [76 EA 64, 05, 05]
-140E; [76 E6 64, 05, 05]
+140F; [76 EA 6B, 05, 05]
-140F; [76 E6 6B, 05, 05]
+1410; [76 EA 72, 05, 05]
-1410; [76 E6 72, 05, 05]
+1411; [76 EA 79, 05, 05]
-1411; [76 E6 79, 05, 05]
+1412; [76 EA 80, 05, 05]
-1412; [76 E6 80, 05, 05]
+1413; [76 EA 87, 05, 05]
-1413; [76 E6 87, 05, 05]
+1414; [76 EA 8E, 05, 05]
-1414; [76 E6 8E, 05, 05]
+1415; [76 EA 95, 05, 05]
-1415; [76 E6 95, 05, 05]
+1416; [76 EA 9C, 05, 05]
-1416; [76 E6 9C, 05, 05]
+1417; [76 EA A3, 05, 05]
-1417; [76 E6 A3, 05, 05]
+1418; [76 EA AA, 05, 05]
-1418; [76 E6 AA, 05, 05]
+1419; [76 EA B1, 05, 05]
-1419; [76 E6 B1, 05, 05]
+141A; [76 EA B8, 05, 05]
-141A; [76 E6 B8, 05, 05]
+141B; [76 EA BF, 05, 05]
-141B; [76 E6 BF, 05, 05]
+141C; [76 EA C6, 05, 05]
-141C; [76 E6 C6, 05, 05]
+141D; [76 EA CD, 05, 05]
-141D; [76 E6 CD, 05, 05]
+141E; [76 EA D4, 05, 05]
-141E; [76 E6 D4, 05, 05]
+141F; [76 EA DB, 05, 05]
-141F; [76 E6 DB, 05, 05]
+1420; [76 EA E2, 05, 05]
-1420; [76 E6 E2, 05, 05]
+1421; [76 EA E9, 05, 05]
-1421; [76 E6 E9, 05, 05]
+1422; [76 EA F0, 05, 05]
-1422; [76 E6 F0, 05, 05]
+1423; [76 EA F7, 05, 05]
-1423; [76 E6 F7, 05, 05]
+1424; [76 EA FE, 05, 05]
-1424; [76 E6 FE, 05, 05]
+1425; [76 EB 07, 05, 05]
-1425; [76 E7 07, 05, 05]
+1426; [76 EB 0E, 05, 05]
-1426; [76 E7 0E, 05, 05]
+1427; [76 EB 15, 05, 05]
-1427; [76 E7 15, 05, 05]
+1428; [76 EB 1C, 05, 05]
-1428; [76 E7 1C, 05, 05]
+1429; [76 EB 23, 05, 05]
-1429; [76 E7 23, 05, 05]
+142A; [76 EB 2A, 05, 05]
-142A; [76 E7 2A, 05, 05]
+142B; [76 EB 31, 05, 05]
-142B; [76 E7 31, 05, 05]
+142C; [76 EB 38, 05, 05]
-142C; [76 E7 38, 05, 05]
+142D; [76 EB 3F, 05, 05]
-142D; [76 E7 3F, 05, 05]
+142E; [76 EB 46, 05, 05]
-142E; [76 E7 46, 05, 05]
+142F; [76 EB 4D, 05, 05]
-142F; [76 E7 4D, 05, 05]
+1430; [76 EB 54, 05, 05]
-1430; [76 E7 54, 05, 05]
+1431; [76 EB 5B, 05, 05]
-1431; [76 E7 5B, 05, 05]
+1432; [76 EB 62, 05, 05]
-1432; [76 E7 62, 05, 05]
+1433; [76 EB 69, 05, 05]
-1433; [76 E7 69, 05, 05]
+1434; [76 EB 70, 05, 05]
-1434; [76 E7 70, 05, 05]
+1435; [76 EB 77, 05, 05]
-1435; [76 E7 77, 05, 05]
+1436; [76 EB 7E, 05, 05]
-1436; [76 E7 7E, 05, 05]
+1437; [76 EB 85, 05, 05]
-1437; [76 E7 85, 05, 05]
+1438; [76 EB 8C, 05, 05]
-1438; [76 E7 8C, 05, 05]
+1439; [76 EB 93, 05, 05]
-1439; [76 E7 93, 05, 05]
+143A; [76 EB 9A, 05, 05]
-143A; [76 E7 9A, 05, 05]
+143B; [76 EB A1, 05, 05]
-143B; [76 E7 A1, 05, 05]
+143C; [76 EB A8, 05, 05]
-143C; [76 E7 A8, 05, 05]
+143D; [76 EB AF, 05, 05]
-143D; [76 E7 AF, 05, 05]
+143E; [76 EB B6, 05, 05]
-143E; [76 E7 B6, 05, 05]
+143F; [76 EB BD, 05, 05]
-143F; [76 E7 BD, 05, 05]
+1440; [76 EB C4, 05, 05]
-1440; [76 E7 C4, 05, 05]
+1441; [76 EB CB, 05, 05]
-1441; [76 E7 CB, 05, 05]
+1442; [76 EB D2, 05, 05]
-1442; [76 E7 D2, 05, 05]
+1443; [76 EB D9, 05, 05]
-1443; [76 E7 D9, 05, 05]
+1444; [76 EB E0, 05, 05]
-1444; [76 E7 E0, 05, 05]
+1445; [76 EB E7, 05, 05]
-1445; [76 E7 E7, 05, 05]
+1446; [76 EB EE, 05, 05]
-1446; [76 E7 EE, 05, 05]
+1447; [76 EB F5, 05, 05]
-1447; [76 E7 F5, 05, 05]
+1448; [76 EB FC, 05, 05]
-1448; [76 E7 FC, 05, 05]
+1449; [76 EC 05, 05, 05]
-1449; [76 E8 05, 05, 05]
+144A; [76 EC 0C, 05, 05]
-144A; [76 E8 0C, 05, 05]
+144B; [76 EC 13, 05, 05]
-144B; [76 E8 13, 05, 05]
+144C; [76 EC 1A, 05, 05]
-144C; [76 E8 1A, 05, 05]
+144D; [76 EC 21, 05, 05]
-144D; [76 E8 21, 05, 05]
+144E; [76 EC 28, 05, 05]
-144E; [76 E8 28, 05, 05]
+144F; [76 EC 2F, 05, 05]
-144F; [76 E8 2F, 05, 05]
+1450; [76 EC 36, 05, 05]
-1450; [76 E8 36, 05, 05]
+1451; [76 EC 3D, 05, 05]
-1451; [76 E8 3D, 05, 05]
+1452; [76 EC 44, 05, 05]
-1452; [76 E8 44, 05, 05]
+1453; [76 EC 4B, 05, 05]
-1453; [76 E8 4B, 05, 05]
+1454; [76 EC 52, 05, 05]
-1454; [76 E8 52, 05, 05]
+1455; [76 EC 59, 05, 05]
-1455; [76 E8 59, 05, 05]
+1456; [76 EC 60, 05, 05]
-1456; [76 E8 60, 05, 05]
+1457; [76 EC 67, 05, 05]
-1457; [76 E8 67, 05, 05]
+1458; [76 EC 6E, 05, 05]
-1458; [76 E8 6E, 05, 05]
+1459; [76 EC 75, 05, 05]
-1459; [76 E8 75, 05, 05]
+145A; [76 EC 7C, 05, 05]
-145A; [76 E8 7C, 05, 05]
+145B; [76 EC 83, 05, 05]
-145B; [76 E8 83, 05, 05]
+145C; [76 EC 8A, 05, 05]
-145C; [76 E8 8A, 05, 05]
+145D; [76 EC 91, 05, 05]
-145D; [76 E8 91, 05, 05]
+145E; [76 EC 98, 05, 05]
-145E; [76 E8 98, 05, 05]
+145F; [76 EC 9F, 05, 05]
-145F; [76 E8 9F, 05, 05]
+1460; [76 EC A6, 05, 05]
-1460; [76 E8 A6, 05, 05]
+1461; [76 EC AD, 05, 05]
-1461; [76 E8 AD, 05, 05]
+1462; [76 EC B4, 05, 05]
-1462; [76 E8 B4, 05, 05]
+1463; [76 EC BB, 05, 05]
-1463; [76 E8 BB, 05, 05]
+1464; [76 EC C2, 05, 05]
-1464; [76 E8 C2, 05, 05]
+1465; [76 EC C9, 05, 05]
-1465; [76 E8 C9, 05, 05]
+1466; [76 EC D0, 05, 05]
-1466; [76 E8 D0, 05, 05]
+1467; [76 EC D7, 05, 05]
-1467; [76 E8 D7, 05, 05]
+1468; [76 EC DE, 05, 05]
-1468; [76 E8 DE, 05, 05]
+1469; [76 EC E5, 05, 05]
-1469; [76 E8 E5, 05, 05]
+146A; [76 EC EC, 05, 05]
-146A; [76 E8 EC, 05, 05]
+146B; [76 EC F3, 05, 05]
-146B; [76 E8 F3, 05, 05]
+146C; [76 EC FA, 05, 05]
-146C; [76 E8 FA, 05, 05]
+146D; [76 ED 03, 05, 05]
-146D; [76 E9 03, 05, 05]
+146E; [76 ED 0A, 05, 05]
-146E; [76 E9 0A, 05, 05]
+146F; [76 ED 11, 05, 05]
-146F; [76 E9 11, 05, 05]
+1470; [76 ED 18, 05, 05]
-1470; [76 E9 18, 05, 05]
+1471; [76 ED 1F, 05, 05]
-1471; [76 E9 1F, 05, 05]
+1472; [76 ED 26, 05, 05]
-1472; [76 E9 26, 05, 05]
+1473; [76 ED 2D, 05, 05]
-1473; [76 E9 2D, 05, 05]
+1474; [76 ED 34, 05, 05]
-1474; [76 E9 34, 05, 05]
+1475; [76 ED 3B, 05, 05]
-1475; [76 E9 3B, 05, 05]
+1476; [76 ED 42, 05, 05]
-1476; [76 E9 42, 05, 05]
+1477; [76 ED 49, 05, 05]
-1477; [76 E9 49, 05, 05]
+1478; [76 ED 50, 05, 05]
-1478; [76 E9 50, 05, 05]
+1479; [76 ED 57, 05, 05]
-1479; [76 E9 57, 05, 05]
+147A; [76 ED 5E, 05, 05]
-147A; [76 E9 5E, 05, 05]
+147B; [76 ED 65, 05, 05]
-147B; [76 E9 65, 05, 05]
+147C; [76 ED 6C, 05, 05]
-147C; [76 E9 6C, 05, 05]
+147D; [76 ED 73, 05, 05]
-147D; [76 E9 73, 05, 05]
+147E; [76 ED 7A, 05, 05]
-147E; [76 E9 7A, 05, 05]
+147F; [76 ED 81, 05, 05]
-147F; [76 E9 81, 05, 05]
+1480; [76 ED 88, 05, 05]
-1480; [76 E9 88, 05, 05]
+1481; [76 ED 8F, 05, 05]
-1481; [76 E9 8F, 05, 05]
+1482; [76 ED 96, 05, 05]
-1482; [76 E9 96, 05, 05]
+1483; [76 ED 9D, 05, 05]
-1483; [76 E9 9D, 05, 05]
+1484; [76 ED A4, 05, 05]
-1484; [76 E9 A4, 05, 05]
+1485; [76 ED AB, 05, 05]
-1485; [76 E9 AB, 05, 05]
+1486; [76 ED B2, 05, 05]
-1486; [76 E9 B2, 05, 05]
+1487; [76 ED B9, 05, 05]
-1487; [76 E9 B9, 05, 05]
+1488; [76 ED C0, 05, 05]
-1488; [76 E9 C0, 05, 05]
+1489; [76 ED C7, 05, 05]
-1489; [76 E9 C7, 05, 05]
+148A; [76 ED CE, 05, 05]
-148A; [76 E9 CE, 05, 05]
+148B; [76 ED D5, 05, 05]
-148B; [76 E9 D5, 05, 05]
+148C; [76 ED DC, 05, 05]
-148C; [76 E9 DC, 05, 05]
+148D; [76 ED E3, 05, 05]
-148D; [76 E9 E3, 05, 05]
+148E; [76 ED EA, 05, 05]
-148E; [76 E9 EA, 05, 05]
+148F; [76 ED F1, 05, 05]
-148F; [76 E9 F1, 05, 05]
+1490; [76 ED F8, 05, 05]
-1490; [76 E9 F8, 05, 05]
+1491; [76 ED FF, 05, 05]
-1491; [76 E9 FF, 05, 05]
+1492; [76 EE 08, 05, 05]
-1492; [76 EA 08, 05, 05]
+1493; [76 EE 0F, 05, 05]
-1493; [76 EA 0F, 05, 05]
+1494; [76 EE 16, 05, 05]
-1494; [76 EA 16, 05, 05]
+1495; [76 EE 1D, 05, 05]
-1495; [76 EA 1D, 05, 05]
+1496; [76 EE 24, 05, 05]
-1496; [76 EA 24, 05, 05]
+1497; [76 EE 2B, 05, 05]
-1497; [76 EA 2B, 05, 05]
+1498; [76 EE 32, 05, 05]
-1498; [76 EA 32, 05, 05]
+1499; [76 EE 39, 05, 05]
-1499; [76 EA 39, 05, 05]
+149A; [76 EE 40, 05, 05]
-149A; [76 EA 40, 05, 05]
+149B; [76 EE 47, 05, 05]
-149B; [76 EA 47, 05, 05]
+149C; [76 EE 4E, 05, 05]
-149C; [76 EA 4E, 05, 05]
+149D; [76 EE 55, 05, 05]
-149D; [76 EA 55, 05, 05]
+149E; [76 EE 5C, 05, 05]
-149E; [76 EA 5C, 05, 05]
+149F; [76 EE 63, 05, 05]
-149F; [76 EA 63, 05, 05]
+14A0; [76 EE 6A, 05, 05]
-14A0; [76 EA 6A, 05, 05]
+14A1; [76 EE 71, 05, 05]
-14A1; [76 EA 71, 05, 05]
+14A2; [76 EE 78, 05, 05]
-14A2; [76 EA 78, 05, 05]
+14A3; [76 EE 7F, 05, 05]
-14A3; [76 EA 7F, 05, 05]
+14A4; [76 EE 86, 05, 05]
-14A4; [76 EA 86, 05, 05]
+14A5; [76 EE 8D, 05, 05]
-14A5; [76 EA 8D, 05, 05]
+14A6; [76 EE 94, 05, 05]
-14A6; [76 EA 94, 05, 05]
+14A7; [76 EE 9B, 05, 05]
-14A7; [76 EA 9B, 05, 05]
+14A8; [76 EE A2, 05, 05]
-14A8; [76 EA A2, 05, 05]
+14A9; [76 EE A9, 05, 05]
-14A9; [76 EA A9, 05, 05]
+14AA; [76 EE B0, 05, 05]
-14AA; [76 EA B0, 05, 05]
+14AB; [76 EE B7, 05, 05]
-14AB; [76 EA B7, 05, 05]
+14AC; [76 EE BE, 05, 05]
-14AC; [76 EA BE, 05, 05]
+14AD; [76 EE C5, 05, 05]
-14AD; [76 EA C5, 05, 05]
+14AE; [76 EE CC, 05, 05]
-14AE; [76 EA CC, 05, 05]
+14AF; [76 EE D3, 05, 05]
-14AF; [76 EA D3, 05, 05]
+14B0; [76 EE DA, 05, 05]
-14B0; [76 EA DA, 05, 05]
+14B1; [76 EE E1, 05, 05]
-14B1; [76 EA E1, 05, 05]
+14B2; [76 EE E8, 05, 05]
-14B2; [76 EA E8, 05, 05]
+14B3; [76 EE EF, 05, 05]
-14B3; [76 EA EF, 05, 05]
+14B4; [76 EE F6, 05, 05]
-14B4; [76 EA F6, 05, 05]
+14B5; [76 EE FD, 05, 05]
-14B5; [76 EA FD, 05, 05]
+14B6; [76 EF 06, 05, 05]
-14B6; [76 EB 06, 05, 05]
+14B7; [76 EF 0D, 05, 05]
-14B7; [76 EB 0D, 05, 05]
+14B8; [76 EF 14, 05, 05]
-14B8; [76 EB 14, 05, 05]
+14B9; [76 EF 1B, 05, 05]
-14B9; [76 EB 1B, 05, 05]
+14BA; [76 EF 22, 05, 05]
-14BA; [76 EB 22, 05, 05]
+14BB; [76 EF 29, 05, 05]
-14BB; [76 EB 29, 05, 05]
+14BC; [76 EF 30, 05, 05]
-14BC; [76 EB 30, 05, 05]
+14BD; [76 EF 37, 05, 05]
-14BD; [76 EB 37, 05, 05]
+14BE; [76 EF 3E, 05, 05]
-14BE; [76 EB 3E, 05, 05]
+14BF; [76 EF 45, 05, 05]
-14BF; [76 EB 45, 05, 05]
+14C0; [76 EF 4C, 05, 05]
-14C0; [76 EB 4C, 05, 05]
+14C1; [76 EF 53, 05, 05]
-14C1; [76 EB 53, 05, 05]
+14C2; [76 EF 5A, 05, 05]
-14C2; [76 EB 5A, 05, 05]
+14C3; [76 EF 61, 05, 05]
-14C3; [76 EB 61, 05, 05]
+14C4; [76 EF 68, 05, 05]
-14C4; [76 EB 68, 05, 05]
+14C5; [76 EF 6F, 05, 05]
-14C5; [76 EB 6F, 05, 05]
+14C6; [76 EF 76, 05, 05]
-14C6; [76 EB 76, 05, 05]
+14C7; [76 EF 7D, 05, 05]
-14C7; [76 EB 7D, 05, 05]
+14C8; [76 EF 84, 05, 05]
-14C8; [76 EB 84, 05, 05]
+14C9; [76 EF 8B, 05, 05]
-14C9; [76 EB 8B, 05, 05]
+14CA; [76 EF 92, 05, 05]
-14CA; [76 EB 92, 05, 05]
+14CB; [76 EF 99, 05, 05]
-14CB; [76 EB 99, 05, 05]
+14CC; [76 EF A0, 05, 05]
-14CC; [76 EB A0, 05, 05]
+14CD; [76 EF A7, 05, 05]
-14CD; [76 EB A7, 05, 05]
+14CE; [76 EF AE, 05, 05]
-14CE; [76 EB AE, 05, 05]
+14CF; [76 EF B5, 05, 05]
-14CF; [76 EB B5, 05, 05]
+14D0; [76 EF BC, 05, 05]
-14D0; [76 EB BC, 05, 05]
+14D1; [76 EF C3, 05, 05]
-14D1; [76 EB C3, 05, 05]
+14D2; [76 EF CA, 05, 05]
-14D2; [76 EB CA, 05, 05]
+14D3; [76 EF D1, 05, 05]
-14D3; [76 EB D1, 05, 05]
+14D4; [76 EF D8, 05, 05]
-14D4; [76 EB D8, 05, 05]
+14D5; [76 EF DF, 05, 05]
-14D5; [76 EB DF, 05, 05]
+14D6; [76 EF E6, 05, 05]
-14D6; [76 EB E6, 05, 05]
+14D7; [76 EF ED, 05, 05]
-14D7; [76 EB ED, 05, 05]
+14D8; [76 EF F4, 05, 05]
-14D8; [76 EB F4, 05, 05]
+14D9; [76 EF FB, 05, 05]
-14D9; [76 EB FB, 05, 05]
+14DA; [76 F0 04, 05, 05]
-14DA; [76 EC 04, 05, 05]
+14DB; [76 F0 0B, 05, 05]
-14DB; [76 EC 0B, 05, 05]
+14DC; [76 F0 12, 05, 05]
-14DC; [76 EC 12, 05, 05]
+14DD; [76 F0 19, 05, 05]
-14DD; [76 EC 19, 05, 05]
+14DE; [76 F0 20, 05, 05]
-14DE; [76 EC 20, 05, 05]
+14DF; [76 F0 27, 05, 05]
-14DF; [76 EC 27, 05, 05]
+14E0; [76 F0 2E, 05, 05]
-14E0; [76 EC 2E, 05, 05]
+14E1; [76 F0 35, 05, 05]
-14E1; [76 EC 35, 05, 05]
+14E2; [76 F0 3C, 05, 05]
-14E2; [76 EC 3C, 05, 05]
+14E3; [76 F0 43, 05, 05]
-14E3; [76 EC 43, 05, 05]
+14E4; [76 F0 4A, 05, 05]
-14E4; [76 EC 4A, 05, 05]
+14E5; [76 F0 51, 05, 05]
-14E5; [76 EC 51, 05, 05]
+14E6; [76 F0 58, 05, 05]
-14E6; [76 EC 58, 05, 05]
+14E7; [76 F0 5F, 05, 05]
-14E7; [76 EC 5F, 05, 05]
+14E8; [76 F0 66, 05, 05]
-14E8; [76 EC 66, 05, 05]
+14E9; [76 F0 6D, 05, 05]
-14E9; [76 EC 6D, 05, 05]
+14EA; [76 F0 74, 05, 05]
-14EA; [76 EC 74, 05, 05]
+14EB; [76 F0 7B, 05, 05]
-14EB; [76 EC 7B, 05, 05]
+14EC; [76 F0 82, 05, 05]
-14EC; [76 EC 82, 05, 05]
+14ED; [76 F0 89, 05, 05]
-14ED; [76 EC 89, 05, 05]
+14EE; [76 F0 90, 05, 05]
-14EE; [76 EC 90, 05, 05]
+14EF; [76 F0 97, 05, 05]
-14EF; [76 EC 97, 05, 05]
+14F0; [76 F0 9E, 05, 05]
-14F0; [76 EC 9E, 05, 05]
+14F1; [76 F0 A5, 05, 05]
-14F1; [76 EC A5, 05, 05]
+14F2; [76 F0 AC, 05, 05]
-14F2; [76 EC AC, 05, 05]
+14F3; [76 F0 B3, 05, 05]
-14F3; [76 EC B3, 05, 05]
+14F4; [76 F0 BA, 05, 05]
-14F4; [76 EC BA, 05, 05]
+14F5; [76 F0 C1, 05, 05]
-14F5; [76 EC C1, 05, 05]
+14F6; [76 F0 C8, 05, 05]
-14F6; [76 EC C8, 05, 05]
+14F7; [76 F0 CF, 05, 05]
-14F7; [76 EC CF, 05, 05]
+14F8; [76 F0 D6, 05, 05]
-14F8; [76 EC D6, 05, 05]
+14F9; [76 F0 DD, 05, 05]
-14F9; [76 EC DD, 05, 05]
+14FA; [76 F0 E4, 05, 05]
-14FA; [76 EC E4, 05, 05]
+14FB; [76 F0 EB, 05, 05]
-14FB; [76 EC EB, 05, 05]
+14FC; [76 F0 F2, 05, 05]
-14FC; [76 EC F2, 05, 05]
+14FD; [76 F0 F9, 05, 05]
-14FD; [76 EC F9, 05, 05]
+14FE; [76 F1 02, 05, 05]
-14FE; [76 ED 02, 05, 05]
+14FF; [76 F1 09, 05, 05]
-14FF; [76 ED 09, 05, 05]
+1500; [76 F1 10, 05, 05]
-1500; [76 ED 10, 05, 05]
+1501; [76 F1 17, 05, 05]
-1501; [76 ED 17, 05, 05]
+1502; [76 F1 1E, 05, 05]
-1502; [76 ED 1E, 05, 05]
+1503; [76 F1 25, 05, 05]
-1503; [76 ED 25, 05, 05]
+1504; [76 F1 2C, 05, 05]
-1504; [76 ED 2C, 05, 05]
+1505; [76 F1 33, 05, 05]
-1505; [76 ED 33, 05, 05]
+1506; [76 F1 3A, 05, 05]
-1506; [76 ED 3A, 05, 05]
+1507; [76 F1 41, 05, 05]
-1507; [76 ED 41, 05, 05]
+1508; [76 F1 48, 05, 05]
-1508; [76 ED 48, 05, 05]
+1509; [76 F1 4F, 05, 05]
-1509; [76 ED 4F, 05, 05]
+150A; [76 F1 56, 05, 05]
-150A; [76 ED 56, 05, 05]
+150B; [76 F1 5D, 05, 05]
-150B; [76 ED 5D, 05, 05]
+150C; [76 F1 64, 05, 05]
-150C; [76 ED 64, 05, 05]
+150D; [76 F1 6B, 05, 05]
-150D; [76 ED 6B, 05, 05]
+150E; [76 F1 72, 05, 05]
-150E; [76 ED 72, 05, 05]
+150F; [76 F1 79, 05, 05]
-150F; [76 ED 79, 05, 05]
+1510; [76 F1 80, 05, 05]
-1510; [76 ED 80, 05, 05]
+1511; [76 F1 87, 05, 05]
-1511; [76 ED 87, 05, 05]
+1512; [76 F1 8E, 05, 05]
-1512; [76 ED 8E, 05, 05]
+1513; [76 F1 95, 05, 05]
-1513; [76 ED 95, 05, 05]
+1514; [76 F1 9C, 05, 05]
-1514; [76 ED 9C, 05, 05]
+1515; [76 F1 A3, 05, 05]
-1515; [76 ED A3, 05, 05]
+1516; [76 F1 AA, 05, 05]
-1516; [76 ED AA, 05, 05]
+1517; [76 F1 B1, 05, 05]
-1517; [76 ED B1, 05, 05]
+1518; [76 F1 B8, 05, 05]
-1518; [76 ED B8, 05, 05]
+1519; [76 F1 BF, 05, 05]
-1519; [76 ED BF, 05, 05]
+151A; [76 F1 C6, 05, 05]
-151A; [76 ED C6, 05, 05]
+151B; [76 F1 CD, 05, 05]
-151B; [76 ED CD, 05, 05]
+151C; [76 F1 D4, 05, 05]
-151C; [76 ED D4, 05, 05]
+151D; [76 F1 DB, 05, 05]
-151D; [76 ED DB, 05, 05]
+151E; [76 F1 E2, 05, 05]
-151E; [76 ED E2, 05, 05]
+151F; [76 F1 E9, 05, 05]
-151F; [76 ED E9, 05, 05]
+1520; [76 F1 F0, 05, 05]
-1520; [76 ED F0, 05, 05]
+1521; [76 F1 F7, 05, 05]
-1521; [76 ED F7, 05, 05]
+1522; [76 F1 FE, 05, 05]
-1522; [76 ED FE, 05, 05]
+1523; [76 F2 07, 05, 05]
-1523; [76 EE 07, 05, 05]
+1524; [76 F2 0E, 05, 05]
-1524; [76 EE 0E, 05, 05]
+1525; [76 F2 15, 05, 05]
-1525; [76 EE 15, 05, 05]
+1526; [76 F2 1C, 05, 05]
-1526; [76 EE 1C, 05, 05]
+1527; [76 F2 23, 05, 05]
-1527; [76 EE 23, 05, 05]
+1528; [76 F2 2A, 05, 05]
-1528; [76 EE 2A, 05, 05]
+1529; [76 F2 31, 05, 05]
-1529; [76 EE 31, 05, 05]
+152A; [76 F2 38, 05, 05]
-152A; [76 EE 38, 05, 05]
+152B; [76 F2 3F, 05, 05]
-152B; [76 EE 3F, 05, 05]
+152C; [76 F2 46, 05, 05]
-152C; [76 EE 46, 05, 05]
+152D; [76 F2 4D, 05, 05]
-152D; [76 EE 4D, 05, 05]
+152E; [76 F2 54, 05, 05]
-152E; [76 EE 54, 05, 05]
+152F; [76 F2 5B, 05, 05]
-152F; [76 EE 5B, 05, 05]
+1530; [76 F2 62, 05, 05]
-1530; [76 EE 62, 05, 05]
+1531; [76 F2 69, 05, 05]
-1531; [76 EE 69, 05, 05]
+1532; [76 F2 70, 05, 05]
-1532; [76 EE 70, 05, 05]
+1533; [76 F2 77, 05, 05]
-1533; [76 EE 77, 05, 05]
+1534; [76 F2 7E, 05, 05]
-1534; [76 EE 7E, 05, 05]
+1535; [76 F2 85, 05, 05]
-1535; [76 EE 85, 05, 05]
+1536; [76 F2 8C, 05, 05]
-1536; [76 EE 8C, 05, 05]
+1537; [76 F2 93, 05, 05]
-1537; [76 EE 93, 05, 05]
+1538; [76 F2 9A, 05, 05]
-1538; [76 EE 9A, 05, 05]
+1539; [76 F2 A1, 05, 05]
-1539; [76 EE A1, 05, 05]
+153A; [76 F2 A8, 05, 05]
-153A; [76 EE A8, 05, 05]
+153B; [76 F2 AF, 05, 05]
-153B; [76 EE AF, 05, 05]
+153C; [76 F2 B6, 05, 05]
-153C; [76 EE B6, 05, 05]
+153D; [76 F2 BD, 05, 05]
-153D; [76 EE BD, 05, 05]
+153E; [76 F2 C4, 05, 05]
-153E; [76 EE C4, 05, 05]
+153F; [76 F2 CB, 05, 05]
-153F; [76 EE CB, 05, 05]
+1540; [76 F2 D2, 05, 05]
-1540; [76 EE D2, 05, 05]
+1541; [76 F2 D9, 05, 05]
-1541; [76 EE D9, 05, 05]
+1542; [76 F2 E0, 05, 05]
-1542; [76 EE E0, 05, 05]
+1543; [76 F2 E7, 05, 05]
-1543; [76 EE E7, 05, 05]
+1544; [76 F2 EE, 05, 05]
-1544; [76 EE EE, 05, 05]
+1545; [76 F2 F5, 05, 05]
-1545; [76 EE F5, 05, 05]
+1546; [76 F2 FC, 05, 05]
-1546; [76 EE FC, 05, 05]
+1547; [76 F3 05, 05, 05]
-1547; [76 EF 05, 05, 05]
+1548; [76 F3 0C, 05, 05]
-1548; [76 EF 0C, 05, 05]
+1549; [76 F3 13, 05, 05]
-1549; [76 EF 13, 05, 05]
+154A; [76 F3 1A, 05, 05]
-154A; [76 EF 1A, 05, 05]
+154B; [76 F3 21, 05, 05]
-154B; [76 EF 21, 05, 05]
+154C; [76 F3 28, 05, 05]
-154C; [76 EF 28, 05, 05]
+154D; [76 F3 2F, 05, 05]
-154D; [76 EF 2F, 05, 05]
+154E; [76 F3 36, 05, 05]
-154E; [76 EF 36, 05, 05]
+154F; [76 F3 3D, 05, 05]
-154F; [76 EF 3D, 05, 05]
+1550; [76 F3 44, 05, 05]
-1550; [76 EF 44, 05, 05]
+1551; [76 F3 4B, 05, 05]
-1551; [76 EF 4B, 05, 05]
+1552; [76 F3 52, 05, 05]
-1552; [76 EF 52, 05, 05]
+1553; [76 F3 59, 05, 05]
-1553; [76 EF 59, 05, 05]
+1554; [76 F3 60, 05, 05]
-1554; [76 EF 60, 05, 05]
+1555; [76 F3 67, 05, 05]
-1555; [76 EF 67, 05, 05]
+1556; [76 F3 6E, 05, 05]
-1556; [76 EF 6E, 05, 05]
+1557; [76 F3 75, 05, 05]
-1557; [76 EF 75, 05, 05]
+1558; [76 F3 7C, 05, 05]
-1558; [76 EF 7C, 05, 05]
+1559; [76 F3 83, 05, 05]
-1559; [76 EF 83, 05, 05]
+155A; [76 F3 8A, 05, 05]
-155A; [76 EF 8A, 05, 05]
+155B; [76 F3 91, 05, 05]
-155B; [76 EF 91, 05, 05]
+155C; [76 F3 98, 05, 05]
-155C; [76 EF 98, 05, 05]
+155D; [76 F3 9F, 05, 05]
-155D; [76 EF 9F, 05, 05]
+155E; [76 F3 A6, 05, 05]
-155E; [76 EF A6, 05, 05]
+155F; [76 F3 AD, 05, 05]
-155F; [76 EF AD, 05, 05]
+1560; [76 F3 B4, 05, 05]
-1560; [76 EF B4, 05, 05]
+1561; [76 F3 BB, 05, 05]
-1561; [76 EF BB, 05, 05]
+1562; [76 F3 C2, 05, 05]
-1562; [76 EF C2, 05, 05]
+1563; [76 F3 C9, 05, 05]
-1563; [76 EF C9, 05, 05]
+1564; [76 F3 D0, 05, 05]
-1564; [76 EF D0, 05, 05]
+1565; [76 F3 D7, 05, 05]
-1565; [76 EF D7, 05, 05]
+1566; [76 F3 DE, 05, 05]
-1566; [76 EF DE, 05, 05]
+1567; [76 F3 E5, 05, 05]
-1567; [76 EF E5, 05, 05]
+1568; [76 F3 EC, 05, 05]
-1568; [76 EF EC, 05, 05]
+1569; [76 F3 F3, 05, 05]
-1569; [76 EF F3, 05, 05]
+156A; [76 F3 FA, 05, 05]
-156A; [76 EF FA, 05, 05]
+156B; [76 F4 03, 05, 05]
-156B; [76 F0 03, 05, 05]
+156C; [76 F4 0A, 05, 05]
-156C; [76 F0 0A, 05, 05]
+156D; [76 F4 11, 05, 05]
-156D; [76 F0 11, 05, 05]
+156E; [76 F4 18, 05, 05]
-156E; [76 F0 18, 05, 05]
+156F; [76 F4 1F, 05, 05]
-156F; [76 F0 1F, 05, 05]
+1570; [76 F4 26, 05, 05]
-1570; [76 F0 26, 05, 05]
+1571; [76 F4 2D, 05, 05]
-1571; [76 F0 2D, 05, 05]
+1572; [76 F4 34, 05, 05]
-1572; [76 F0 34, 05, 05]
+1573; [76 F4 3B, 05, 05]
-1573; [76 F0 3B, 05, 05]
+1574; [76 F4 42, 05, 05]
-1574; [76 F0 42, 05, 05]
+1575; [76 F4 49, 05, 05]
-1575; [76 F0 49, 05, 05]
+1576; [76 F4 50, 05, 05]
-1576; [76 F0 50, 05, 05]
+1577; [76 F4 57, 05, 05]
-1577; [76 F0 57, 05, 05]
+1578; [76 F4 5E, 05, 05]
-1578; [76 F0 5E, 05, 05]
+1579; [76 F4 65, 05, 05]
-1579; [76 F0 65, 05, 05]
+157A; [76 F4 6C, 05, 05]
-157A; [76 F0 6C, 05, 05]
+157B; [76 F4 73, 05, 05]
-157B; [76 F0 73, 05, 05]
+157D; [76 F4 7A, 05, 05]
-157D; [76 F0 7A, 05, 05]
+166F; [76 F4 81, 05, 05]
-166F; [76 F0 81, 05, 05]
+157E; [76 F4 88, 05, 05]
-157E; [76 F0 88, 05, 05]
+157F; [76 F4 8F, 05, 05]
-157F; [76 F0 8F, 05, 05]
+1580; [76 F4 96, 05, 05]
-1580; [76 F0 96, 05, 05]
+1581; [76 F4 9D, 05, 05]
-1581; [76 F0 9D, 05, 05]
+1582; [76 F4 A4, 05, 05]
-1582; [76 F0 A4, 05, 05]
+1583; [76 F4 AB, 05, 05]
-1583; [76 F0 AB, 05, 05]
+1584; [76 F4 B2, 05, 05]
-1584; [76 F0 B2, 05, 05]
+1585; [76 F4 B9, 05, 05]
-1585; [76 F0 B9, 05, 05]
+1586; [76 F4 C0, 05, 05]
-1586; [76 F0 C0, 05, 05]
+1587; [76 F4 C7, 05, 05]
-1587; [76 F0 C7, 05, 05]
+1588; [76 F4 CE, 05, 05]
-1588; [76 F0 CE, 05, 05]
+1589; [76 F4 D5, 05, 05]
-1589; [76 F0 D5, 05, 05]
+158A; [76 F4 DC, 05, 05]
-158A; [76 F0 DC, 05, 05]
+158B; [76 F4 E3, 05, 05]
-158B; [76 F0 E3, 05, 05]
+158C; [76 F4 EA, 05, 05]
-158C; [76 F0 EA, 05, 05]
+158D; [76 F4 F1, 05, 05]
-158D; [76 F0 F1, 05, 05]
+1670; [76 F4 F8, 05, 05]
-1670; [76 F0 F8, 05, 05]
+158E; [76 F4 FF, 05, 05]
-158E; [76 F0 FF, 05, 05]
+158F; [76 F5 08, 05, 05]
-158F; [76 F1 08, 05, 05]
+1590; [76 F5 0F, 05, 05]
-1590; [76 F1 0F, 05, 05]
+1591; [76 F5 16, 05, 05]
-1591; [76 F1 16, 05, 05]
+1592; [76 F5 1D, 05, 05]
-1592; [76 F1 1D, 05, 05]
+1593; [76 F5 24, 05, 05]
-1593; [76 F1 24, 05, 05]
+1594; [76 F5 2B, 05, 05]
-1594; [76 F1 2B, 05, 05]
+1595; [76 F5 32, 05, 05]
-1595; [76 F1 32, 05, 05]
+1671; [76 F5 39, 05, 05]
-1671; [76 F1 39, 05, 05]
+1672; [76 F5 40, 05, 05]
-1672; [76 F1 40, 05, 05]
+1673; [76 F5 47, 05, 05]
-1673; [76 F1 47, 05, 05]
+1674; [76 F5 4E, 05, 05]
-1674; [76 F1 4E, 05, 05]
+1675; [76 F5 55, 05, 05]
-1675; [76 F1 55, 05, 05]
+1676; [76 F5 5C, 05, 05]
-1676; [76 F1 5C, 05, 05]
+1596; [76 F5 63, 05, 05]
-1596; [76 F1 63, 05, 05]
+1597; [76 F5 6A, 05, 05]
-1597; [76 F1 6A, 05, 05]
+1598; [76 F5 71, 05, 05]
-1598; [76 F1 71, 05, 05]
+1599; [76 F5 78, 05, 05]
-1599; [76 F1 78, 05, 05]
+159A; [76 F5 7F, 05, 05]
-159A; [76 F1 7F, 05, 05]
+159B; [76 F5 86, 05, 05]
-159B; [76 F1 86, 05, 05]
+159C; [76 F5 8D, 05, 05]
-159C; [76 F1 8D, 05, 05]
+159D; [76 F5 94, 05, 05]
-159D; [76 F1 94, 05, 05]
+159E; [76 F5 9B, 05, 05]
-159E; [76 F1 9B, 05, 05]
+159F; [76 F5 A2, 05, 05]
-159F; [76 F1 A2, 05, 05]
+15A0; [76 F5 A9, 05, 05]
-15A0; [76 F1 A9, 05, 05]
+15A1; [76 F5 B0, 05, 05]
-15A1; [76 F1 B0, 05, 05]
+15A2; [76 F5 B7, 05, 05]
-15A2; [76 F1 B7, 05, 05]
+15A3; [76 F5 BE, 05, 05]
-15A3; [76 F1 BE, 05, 05]
+15A4; [76 F5 C5, 05, 05]
-15A4; [76 F1 C5, 05, 05]
+15A5; [76 F5 CC, 05, 05]
-15A5; [76 F1 CC, 05, 05]
+15A6; [76 F5 D3, 05, 05]
-15A6; [76 F1 D3, 05, 05]
+157C; [76 F5 DA, 05, 05]
-157C; [76 F1 DA, 05, 05]
+15A7; [76 F5 E1, 05, 05]
-15A7; [76 F1 E1, 05, 05]
+15A8; [76 F5 E8, 05, 05]
-15A8; [76 F1 E8, 05, 05]
+15A9; [76 F5 EF, 05, 05]
-15A9; [76 F1 EF, 05, 05]
+15AA; [76 F5 F6, 05, 05]
-15AA; [76 F1 F6, 05, 05]
+15AB; [76 F5 FD, 05, 05]
-15AB; [76 F1 FD, 05, 05]
+15AC; [76 F6 06, 05, 05]
-15AC; [76 F2 06, 05, 05]
+15AD; [76 F6 0D, 05, 05]
-15AD; [76 F2 0D, 05, 05]
+15AE; [76 F6 14, 05, 05]
-15AE; [76 F2 14, 05, 05]
+15AF; [76 F6 1B, 05, 05]
-15AF; [76 F2 1B, 05, 05]
+15B0; [76 F6 22, 05, 05]
-15B0; [76 F2 22, 05, 05]
+15B1; [76 F6 29, 05, 05]
-15B1; [76 F2 29, 05, 05]
+15B2; [76 F6 30, 05, 05]
-15B2; [76 F2 30, 05, 05]
+15B3; [76 F6 37, 05, 05]
-15B3; [76 F2 37, 05, 05]
+15B4; [76 F6 3E, 05, 05]
-15B4; [76 F2 3E, 05, 05]
+15B5; [76 F6 45, 05, 05]
-15B5; [76 F2 45, 05, 05]
+15B6; [76 F6 4C, 05, 05]
-15B6; [76 F2 4C, 05, 05]
+15B7; [76 F6 53, 05, 05]
-15B7; [76 F2 53, 05, 05]
+15B8; [76 F6 5A, 05, 05]
-15B8; [76 F2 5A, 05, 05]
+15B9; [76 F6 61, 05, 05]
-15B9; [76 F2 61, 05, 05]
+15BA; [76 F6 68, 05, 05]
-15BA; [76 F2 68, 05, 05]
+15BB; [76 F6 6F, 05, 05]
-15BB; [76 F2 6F, 05, 05]
+15BC; [76 F6 76, 05, 05]
-15BC; [76 F2 76, 05, 05]
+15BD; [76 F6 7D, 05, 05]
-15BD; [76 F2 7D, 05, 05]
+15BE; [76 F6 84, 05, 05]
-15BE; [76 F2 84, 05, 05]
+15BF; [76 F6 8B, 05, 05]
-15BF; [76 F2 8B, 05, 05]
+15C0; [76 F6 92, 05, 05]
-15C0; [76 F2 92, 05, 05]
+15C1; [76 F6 99, 05, 05]
-15C1; [76 F2 99, 05, 05]
+15C2; [76 F6 A0, 05, 05]
-15C2; [76 F2 A0, 05, 05]
+15C3; [76 F6 A7, 05, 05]
-15C3; [76 F2 A7, 05, 05]
+15C4; [76 F6 AE, 05, 05]
-15C4; [76 F2 AE, 05, 05]
+15C5; [76 F6 B5, 05, 05]
-15C5; [76 F2 B5, 05, 05]
+15C6; [76 F6 BC, 05, 05]
-15C6; [76 F2 BC, 05, 05]
+15C7; [76 F6 C3, 05, 05]
-15C7; [76 F2 C3, 05, 05]
+15C8; [76 F6 CA, 05, 05]
-15C8; [76 F2 CA, 05, 05]
+15C9; [76 F6 D1, 05, 05]
-15C9; [76 F2 D1, 05, 05]
+15CA; [76 F6 D8, 05, 05]
-15CA; [76 F2 D8, 05, 05]
+15CB; [76 F6 DF, 05, 05]
-15CB; [76 F2 DF, 05, 05]
+15CC; [76 F6 E6, 05, 05]
-15CC; [76 F2 E6, 05, 05]
+15CD; [76 F6 ED, 05, 05]
-15CD; [76 F2 ED, 05, 05]
+15CE; [76 F6 F4, 05, 05]
-15CE; [76 F2 F4, 05, 05]
+15CF; [76 F6 FB, 05, 05]
-15CF; [76 F2 FB, 05, 05]
+15D0; [76 F7 04, 05, 05]
-15D0; [76 F3 04, 05, 05]
+15D1; [76 F7 0B, 05, 05]
-15D1; [76 F3 0B, 05, 05]
+15D2; [76 F7 12, 05, 05]
-15D2; [76 F3 12, 05, 05]
+15D3; [76 F7 19, 05, 05]
-15D3; [76 F3 19, 05, 05]
+15D4; [76 F7 20, 05, 05]
-15D4; [76 F3 20, 05, 05]
+15D5; [76 F7 27, 05, 05]
-15D5; [76 F3 27, 05, 05]
+15D6; [76 F7 2E, 05, 05]
-15D6; [76 F3 2E, 05, 05]
+15D7; [76 F7 35, 05, 05]
-15D7; [76 F3 35, 05, 05]
+15D8; [76 F7 3C, 05, 05]
-15D8; [76 F3 3C, 05, 05]
+15D9; [76 F7 43, 05, 05]
-15D9; [76 F3 43, 05, 05]
+15DA; [76 F7 4A, 05, 05]
-15DA; [76 F3 4A, 05, 05]
+15DB; [76 F7 51, 05, 05]
-15DB; [76 F3 51, 05, 05]
+15DC; [76 F7 58, 05, 05]
-15DC; [76 F3 58, 05, 05]
+15DD; [76 F7 5F, 05, 05]
-15DD; [76 F3 5F, 05, 05]
+15DE; [76 F7 66, 05, 05]
-15DE; [76 F3 66, 05, 05]
+15DF; [76 F7 6D, 05, 05]
-15DF; [76 F3 6D, 05, 05]
+15E0; [76 F7 74, 05, 05]
-15E0; [76 F3 74, 05, 05]
+15E1; [76 F7 7B, 05, 05]
-15E1; [76 F3 7B, 05, 05]
+15E2; [76 F7 82, 05, 05]
-15E2; [76 F3 82, 05, 05]
+15E3; [76 F7 89, 05, 05]
-15E3; [76 F3 89, 05, 05]
+15E4; [76 F7 90, 05, 05]
-15E4; [76 F3 90, 05, 05]
+15E5; [76 F7 97, 05, 05]
-15E5; [76 F3 97, 05, 05]
+15E6; [76 F7 9E, 05, 05]
-15E6; [76 F3 9E, 05, 05]
+15E7; [76 F7 A5, 05, 05]
-15E7; [76 F3 A5, 05, 05]
+15E8; [76 F7 AC, 05, 05]
-15E8; [76 F3 AC, 05, 05]
+15E9; [76 F7 B3, 05, 05]
-15E9; [76 F3 B3, 05, 05]
+15EA; [76 F7 BA, 05, 05]
-15EA; [76 F3 BA, 05, 05]
+15EB; [76 F7 C1, 05, 05]
-15EB; [76 F3 C1, 05, 05]
+15EC; [76 F7 C8, 05, 05]
-15EC; [76 F3 C8, 05, 05]
+15ED; [76 F7 CF, 05, 05]
-15ED; [76 F3 CF, 05, 05]
+15EE; [76 F7 D6, 05, 05]
-15EE; [76 F3 D6, 05, 05]
+15EF; [76 F7 DD, 05, 05]
-15EF; [76 F3 DD, 05, 05]
+15F0; [76 F7 E4, 05, 05]
-15F0; [76 F3 E4, 05, 05]
+15F1; [76 F7 EB, 05, 05]
-15F1; [76 F3 EB, 05, 05]
+15F2; [76 F7 F2, 05, 05]
-15F2; [76 F3 F2, 05, 05]
+15F3; [76 F7 F9, 05, 05]
-15F3; [76 F3 F9, 05, 05]
+15F4; [76 F8 02, 05, 05]
-15F4; [76 F4 02, 05, 05]
+15F5; [76 F8 09, 05, 05]
-15F5; [76 F4 09, 05, 05]
+15F6; [76 F8 10, 05, 05]
-15F6; [76 F4 10, 05, 05]
+15F7; [76 F8 17, 05, 05]
-15F7; [76 F4 17, 05, 05]
+15F8; [76 F8 1E, 05, 05]
-15F8; [76 F4 1E, 05, 05]
+15F9; [76 F8 25, 05, 05]
-15F9; [76 F4 25, 05, 05]
+15FA; [76 F8 2C, 05, 05]
-15FA; [76 F4 2C, 05, 05]
+15FB; [76 F8 33, 05, 05]
-15FB; [76 F4 33, 05, 05]
+15FC; [76 F8 3A, 05, 05]
-15FC; [76 F4 3A, 05, 05]
+15FD; [76 F8 41, 05, 05]
-15FD; [76 F4 41, 05, 05]
+15FE; [76 F8 48, 05, 05]
-15FE; [76 F4 48, 05, 05]
+15FF; [76 F8 4F, 05, 05]
-15FF; [76 F4 4F, 05, 05]
+1600; [76 F8 56, 05, 05]
-1600; [76 F4 56, 05, 05]
+1601; [76 F8 5D, 05, 05]
-1601; [76 F4 5D, 05, 05]
+1602; [76 F8 64, 05, 05]
-1602; [76 F4 64, 05, 05]
+1603; [76 F8 6B, 05, 05]
-1603; [76 F4 6B, 05, 05]
+1604; [76 F8 72, 05, 05]
-1604; [76 F4 72, 05, 05]
+1605; [76 F8 79, 05, 05]
-1605; [76 F4 79, 05, 05]
+1606; [76 F8 80, 05, 05]
-1606; [76 F4 80, 05, 05]
+1607; [76 F8 87, 05, 05]
-1607; [76 F4 87, 05, 05]
+1608; [76 F8 8E, 05, 05]
-1608; [76 F4 8E, 05, 05]
+1609; [76 F8 95, 05, 05]
-1609; [76 F4 95, 05, 05]
+160A; [76 F8 9C, 05, 05]
-160A; [76 F4 9C, 05, 05]
+160B; [76 F8 A3, 05, 05]
-160B; [76 F4 A3, 05, 05]
+160C; [76 F8 AA, 05, 05]
-160C; [76 F4 AA, 05, 05]
+160D; [76 F8 B1, 05, 05]
-160D; [76 F4 B1, 05, 05]
+160E; [76 F8 B8, 05, 05]
-160E; [76 F4 B8, 05, 05]
+160F; [76 F8 BF, 05, 05]
-160F; [76 F4 BF, 05, 05]
+1610; [76 F8 C6, 05, 05]
-1610; [76 F4 C6, 05, 05]
+1611; [76 F8 CD, 05, 05]
-1611; [76 F4 CD, 05, 05]
+1612; [76 F8 D4, 05, 05]
-1612; [76 F4 D4, 05, 05]
+1613; [76 F8 DB, 05, 05]
-1613; [76 F4 DB, 05, 05]
+1614; [76 F8 E2, 05, 05]
-1614; [76 F4 E2, 05, 05]
+1615; [76 F8 E9, 05, 05]
-1615; [76 F4 E9, 05, 05]
+1616; [76 F8 F0, 05, 05]
-1616; [76 F4 F0, 05, 05]
+1617; [76 F8 F7, 05, 05]
-1617; [76 F4 F7, 05, 05]
+1618; [76 F8 FE, 05, 05]
-1618; [76 F4 FE, 05, 05]
+1619; [76 F9 07, 05, 05]
-1619; [76 F5 07, 05, 05]
+161A; [76 F9 0E, 05, 05]
-161A; [76 F5 0E, 05, 05]
+161B; [76 F9 15, 05, 05]
-161B; [76 F5 15, 05, 05]
+161C; [76 F9 1C, 05, 05]
-161C; [76 F5 1C, 05, 05]
+161D; [76 F9 23, 05, 05]
-161D; [76 F5 23, 05, 05]
+161E; [76 F9 2A, 05, 05]
-161E; [76 F5 2A, 05, 05]
+161F; [76 F9 31, 05, 05]
-161F; [76 F5 31, 05, 05]
+1620; [76 F9 38, 05, 05]
-1620; [76 F5 38, 05, 05]
+1621; [76 F9 3F, 05, 05]
-1621; [76 F5 3F, 05, 05]
+1622; [76 F9 46, 05, 05]
-1622; [76 F5 46, 05, 05]
+1623; [76 F9 4D, 05, 05]
-1623; [76 F5 4D, 05, 05]
+1624; [76 F9 54, 05, 05]
-1624; [76 F5 54, 05, 05]
+1625; [76 F9 5B, 05, 05]
-1625; [76 F5 5B, 05, 05]
+1626; [76 F9 62, 05, 05]
-1626; [76 F5 62, 05, 05]
+1627; [76 F9 69, 05, 05]
-1627; [76 F5 69, 05, 05]
+1628; [76 F9 70, 05, 05]
-1628; [76 F5 70, 05, 05]
+1629; [76 F9 77, 05, 05]
-1629; [76 F5 77, 05, 05]
+162A; [76 F9 7E, 05, 05]
-162A; [76 F5 7E, 05, 05]
+162B; [76 F9 85, 05, 05]
-162B; [76 F5 85, 05, 05]
+162C; [76 F9 8C, 05, 05]
-162C; [76 F5 8C, 05, 05]
+162D; [76 F9 93, 05, 05]
-162D; [76 F5 93, 05, 05]
+162E; [76 F9 9A, 05, 05]
-162E; [76 F5 9A, 05, 05]
+162F; [76 F9 A1, 05, 05]
-162F; [76 F5 A1, 05, 05]
+1630; [76 F9 A8, 05, 05]
-1630; [76 F5 A8, 05, 05]
+1631; [76 F9 AF, 05, 05]
-1631; [76 F5 AF, 05, 05]
+1632; [76 F9 B6, 05, 05]
-1632; [76 F5 B6, 05, 05]
+1633; [76 F9 BD, 05, 05]
-1633; [76 F5 BD, 05, 05]
+1634; [76 F9 C4, 05, 05]
-1634; [76 F5 C4, 05, 05]
+1635; [76 F9 CB, 05, 05]
-1635; [76 F5 CB, 05, 05]
+1636; [76 F9 D2, 05, 05]
-1636; [76 F5 D2, 05, 05]
+1637; [76 F9 D9, 05, 05]
-1637; [76 F5 D9, 05, 05]
+1638; [76 F9 E0, 05, 05]
-1638; [76 F5 E0, 05, 05]
+1639; [76 F9 E7, 05, 05]
-1639; [76 F5 E7, 05, 05]
+163A; [76 F9 EE, 05, 05]
-163A; [76 F5 EE, 05, 05]
+163B; [76 F9 F5, 05, 05]
-163B; [76 F5 F5, 05, 05]
+163C; [76 F9 FC, 05, 05]
-163C; [76 F5 FC, 05, 05]
+163D; [76 FA 05, 05, 05]
-163D; [76 F6 05, 05, 05]
+163E; [76 FA 0C, 05, 05]
-163E; [76 F6 0C, 05, 05]
+163F; [76 FA 13, 05, 05]
-163F; [76 F6 13, 05, 05]
+1640; [76 FA 1A, 05, 05]
-1640; [76 F6 1A, 05, 05]
+1641; [76 FA 21, 05, 05]
-1641; [76 F6 21, 05, 05]
+1642; [76 FA 28, 05, 05]
-1642; [76 F6 28, 05, 05]
+1643; [76 FA 2F, 05, 05]
-1643; [76 F6 2F, 05, 05]
+1644; [76 FA 36, 05, 05]
-1644; [76 F6 36, 05, 05]
+1645; [76 FA 3D, 05, 05]
-1645; [76 F6 3D, 05, 05]
+1646; [76 FA 44, 05, 05]
-1646; [76 F6 44, 05, 05]
+1647; [76 FA 4B, 05, 05]
-1647; [76 F6 4B, 05, 05]
+1648; [76 FA 52, 05, 05]
-1648; [76 F6 52, 05, 05]
+1649; [76 FA 59, 05, 05]
-1649; [76 F6 59, 05, 05]
+164A; [76 FA 60, 05, 05]
-164A; [76 F6 60, 05, 05]
+164B; [76 FA 67, 05, 05]
-164B; [76 F6 67, 05, 05]
+164C; [76 FA 6E, 05, 05]
-164C; [76 F6 6E, 05, 05]
+164D; [76 FA 75, 05, 05]
-164D; [76 F6 75, 05, 05]
+164E; [76 FA 7C, 05, 05]
-164E; [76 F6 7C, 05, 05]
+164F; [76 FA 83, 05, 05]
-164F; [76 F6 83, 05, 05]
+1650; [76 FA 8A, 05, 05]
-1650; [76 F6 8A, 05, 05]
+1651; [76 FA 91, 05, 05]
-1651; [76 F6 91, 05, 05]
+1652; [76 FA 98, 05, 05]
-1652; [76 F6 98, 05, 05]
+1653; [76 FA 9F, 05, 05]
-1653; [76 F6 9F, 05, 05]
+1654; [76 FA A6, 05, 05]
-1654; [76 F6 A6, 05, 05]
+1655; [76 FA AD, 05, 05]
-1655; [76 F6 AD, 05, 05]
+1656; [76 FA B4, 05, 05]
-1656; [76 F6 B4, 05, 05]
+1657; [76 FA BB, 05, 05]
-1657; [76 F6 BB, 05, 05]
+1658; [76 FA C2, 05, 05]
-1658; [76 F6 C2, 05, 05]
+1659; [76 FA C9, 05, 05]
-1659; [76 F6 C9, 05, 05]
+165A; [76 FA D0, 05, 05]
-165A; [76 F6 D0, 05, 05]
+165B; [76 FA D7, 05, 05]
-165B; [76 F6 D7, 05, 05]
+165C; [76 FA DE, 05, 05]
-165C; [76 F6 DE, 05, 05]
+165D; [76 FA E5, 05, 05]
-165D; [76 F6 E5, 05, 05]
+165E; [76 FA EC, 05, 05]
-165E; [76 F6 EC, 05, 05]
+165F; [76 FA F3, 05, 05]
-165F; [76 F6 F3, 05, 05]
+1660; [76 FA FA, 05, 05]
-1660; [76 F6 FA, 05, 05]
+1661; [76 FB 03, 05, 05]
-1661; [76 F7 03, 05, 05]
+1662; [76 FB 0A, 05, 05]
-1662; [76 F7 0A, 05, 05]
+1663; [76 FB 11, 05, 05]
-1663; [76 F7 11, 05, 05]
+1664; [76 FB 18, 05, 05]
-1664; [76 F7 18, 05, 05]
+1665; [76 FB 1F, 05, 05]
-1665; [76 F7 1F, 05, 05]
+1666; [76 FB 26, 05, 05]
-1666; [76 F7 26, 05, 05]
+1667; [76 FB 2D, 05, 05]
-1667; [76 F7 2D, 05, 05]
+1668; [76 FB 34, 05, 05]
-1668; [76 F7 34, 05, 05]
+1669; [76 FB 3B, 05, 05]
-1669; [76 F7 3B, 05, 05]
+166A; [76 FB 42, 05, 05]
-166A; [76 F7 42, 05, 05]
+166B; [76 FB 49, 05, 05]
-166B; [76 F7 49, 05, 05]
+166C; [76 FB 50, 05, 05]
-166C; [76 F7 50, 05, 05]
+1677; [76 FB 57, 05, 05]
-1677; [76 F7 57, 05, 05]
+1678; [76 FB 5E, 05, 05]
-1678; [76 F7 5E, 05, 05]
+1679; [76 FB 65, 05, 05]
-1679; [76 F7 65, 05, 05]
+167A; [76 FB 6C, 05, 05]
-167A; [76 F7 6C, 05, 05]
+167B; [76 FB 73, 05, 05]
-167B; [76 F7 73, 05, 05]
+167C; [76 FB 7A, 05, 05]
-167C; [76 F7 7A, 05, 05]
+167D; [76 FB 81, 05, 05]
-167D; [76 F7 81, 05, 05]
+167E; [76 FB 88, 05, 05]
-167E; [76 F7 88, 05, 05]
+167F; [76 FB 8F, 05, 05]
-167F; [76 F7 8F, 05, 05]
+18B0; [76 FB 96, 05, 05]
-18B0; [76 F7 96, 05, 05]
+18B1; [76 FB 9D, 05, 05]
-18B1; [76 F7 9D, 05, 05]
+18B2; [76 FB A4, 05, 05]
-18B2; [76 F7 A4, 05, 05]
+18B3; [76 FB AB, 05, 05]
-18B3; [76 F7 AB, 05, 05]
+18B4; [76 FB B2, 05, 05]
-18B4; [76 F7 B2, 05, 05]
+18B5; [76 FB B9, 05, 05]
-18B5; [76 F7 B9, 05, 05]
+18B6; [76 FB C0, 05, 05]
-18B6; [76 F7 C0, 05, 05]
+18B7; [76 FB C7, 05, 05]
-18B7; [76 F7 C7, 05, 05]
+18B8; [76 FB CE, 05, 05]
-18B8; [76 F7 CE, 05, 05]
+18B9; [76 FB D5, 05, 05]
-18B9; [76 F7 D5, 05, 05]
+18BA; [76 FB DC, 05, 05]
-18BA; [76 F7 DC, 05, 05]
+18BB; [76 FB E3, 05, 05]
-18BB; [76 F7 E3, 05, 05]
+18BC; [76 FB EA, 05, 05]
-18BC; [76 F7 EA, 05, 05]
+18BD; [76 FB F1, 05, 05]
-18BD; [76 F7 F1, 05, 05]
+18BE; [76 FB F8, 05, 05]
-18BE; [76 F7 F8, 05, 05]
+18BF; [76 FB FF, 05, 05]
-18BF; [76 F7 FF, 05, 05]
+18C0; [76 FC 08, 05, 05]
-18C0; [76 F8 08, 05, 05]
+18C1; [76 FC 0F, 05, 05]
-18C1; [76 F8 0F, 05, 05]
+18C2; [76 FC 16, 05, 05]
-18C2; [76 F8 16, 05, 05]
+18C3; [76 FC 1D, 05, 05]
-18C3; [76 F8 1D, 05, 05]
+18C4; [76 FC 24, 05, 05]
-18C4; [76 F8 24, 05, 05]
+18C5; [76 FC 2B, 05, 05]
-18C5; [76 F8 2B, 05, 05]
+18C6; [76 FC 32, 05, 05]
-18C6; [76 F8 32, 05, 05]
+18C7; [76 FC 39, 05, 05]
-18C7; [76 F8 39, 05, 05]
+18C8; [76 FC 40, 05, 05]
-18C8; [76 F8 40, 05, 05]
+18C9; [76 FC 47, 05, 05]
-18C9; [76 F8 47, 05, 05]
+18CA; [76 FC 4E, 05, 05]
-18CA; [76 F8 4E, 05, 05]
+18CB; [76 FC 55, 05, 05]
-18CB; [76 F8 55, 05, 05]
+18CC; [76 FC 5C, 05, 05]
-18CC; [76 F8 5C, 05, 05]
+18CD; [76 FC 63, 05, 05]
-18CD; [76 F8 63, 05, 05]
+18CE; [76 FC 6A, 05, 05]
-18CE; [76 F8 6A, 05, 05]
+18CF; [76 FC 71, 05, 05]
-18CF; [76 F8 71, 05, 05]
+18D0; [76 FC 78, 05, 05]
-18D0; [76 F8 78, 05, 05]
+18D1; [76 FC 7F, 05, 05]
-18D1; [76 F8 7F, 05, 05]
+18D2; [76 FC 86, 05, 05]
-18D2; [76 F8 86, 05, 05]
+18D3; [76 FC 8D, 05, 05]
-18D3; [76 F8 8D, 05, 05]
+18D4; [76 FC 94, 05, 05]
-18D4; [76 F8 94, 05, 05]
+18D5; [76 FC 9B, 05, 05]
-18D5; [76 F8 9B, 05, 05]
+18D6; [76 FC A2, 05, 05]
-18D6; [76 F8 A2, 05, 05]
+18D7; [76 FC A9, 05, 05]
-18D7; [76 F8 A9, 05, 05]
+18D8; [76 FC B0, 05, 05]
-18D8; [76 F8 B0, 05, 05]
+18D9; [76 FC B7, 05, 05]
-18D9; [76 F8 B7, 05, 05]
+18DA; [76 FC BE, 05, 05]
-18DA; [76 F8 BE, 05, 05]
+18DB; [76 FC C5, 05, 05]
-18DB; [76 F8 C5, 05, 05]
+18DC; [76 FC CC, 05, 05]
-18DC; [76 F8 CC, 05, 05]
+18DD; [76 FC D3, 05, 05]
-18DD; [76 F8 D3, 05, 05]
+18DE; [76 FC DA, 05, 05]
-18DE; [76 F8 DA, 05, 05]
+18DF; [76 FC E1, 05, 05]
-18DF; [76 F8 E1, 05, 05]
+18E0; [76 FC E8, 05, 05]
-18E0; [76 F8 E8, 05, 05]
+18E1; [76 FC EF, 05, 05]
-18E1; [76 F8 EF, 05, 05]
+18E2; [76 FC F6, 05, 05]
-18E2; [76 F8 F6, 05, 05]
+18E3; [76 FC FD, 05, 05]
-18E3; [76 F8 FD, 05, 05]
+18E4; [76 FD 06, 05, 05]
-18E4; [76 F9 06, 05, 05]
+18E5; [76 FD 0D, 05, 05]
-18E5; [76 F9 0D, 05, 05]
+18E6; [76 FD 14, 05, 05]
-18E6; [76 F9 14, 05, 05]
+18E7; [76 FD 1B, 05, 05]
-18E7; [76 F9 1B, 05, 05]
+18E8; [76 FD 22, 05, 05]
-18E8; [76 F9 22, 05, 05]
+18E9; [76 FD 29, 05, 05]
-18E9; [76 F9 29, 05, 05]
+18EA; [76 FD 30, 05, 05]
-18EA; [76 F9 30, 05, 05]
+18EB; [76 FD 37, 05, 05]
-18EB; [76 F9 37, 05, 05]
+18EC; [76 FD 3E, 05, 05]
-18EC; [76 F9 3E, 05, 05]
+18ED; [76 FD 45, 05, 05]
-18ED; [76 F9 45, 05, 05]
+18EE; [76 FD 4C, 05, 05]
-18EE; [76 F9 4C, 05, 05]
+18EF; [76 FD 53, 05, 05]
-18EF; [76 F9 53, 05, 05]
+18F0; [76 FD 5A, 05, 05]
-18F0; [76 F9 5A, 05, 05]
+18F1; [76 FD 61, 05, 05]
-18F1; [76 F9 61, 05, 05]
+18F2; [76 FD 68, 05, 05]
-18F2; [76 F9 68, 05, 05]
+18F3; [76 FD 6F, 05, 05]
-18F3; [76 F9 6F, 05, 05]
+18F4; [76 FD 76, 05, 05]
-18F4; [76 F9 76, 05, 05]
+18F5; [76 FD 7D, 05, 05]
-18F5; [76 F9 7D, 05, 05]
+FDD1 168F; [76 FE 02, 05, 05] # OGHAM first primary (compressible)
-FDD1 168F; [76 FA 02, 05, 05] # OGHAM first primary (compressible)
+1681; [76 FE 09, 05, 05]
-1681; [76 FA 09, 05, 05]
+1682; [76 FE 10, 05, 05]
-1682; [76 FA 10, 05, 05]
+1683; [76 FE 17, 05, 05]
-1683; [76 FA 17, 05, 05]
+1684; [76 FE 1E, 05, 05]
-1684; [76 FA 1E, 05, 05]
+1685; [76 FE 25, 05, 05]
-1685; [76 FA 25, 05, 05]
+1686; [76 FE 2C, 05, 05]
-1686; [76 FA 2C, 05, 05]
+1687; [76 FE 33, 05, 05]
-1687; [76 FA 33, 05, 05]
+1688; [76 FE 3A, 05, 05]
-1688; [76 FA 3A, 05, 05]
+1689; [76 FE 41, 05, 05]
-1689; [76 FA 41, 05, 05]
+168A; [76 FE 48, 05, 05]
-168A; [76 FA 48, 05, 05]
+168B; [76 FE 4F, 05, 05]
-168B; [76 FA 4F, 05, 05]
+168C; [76 FE 56, 05, 05]
-168C; [76 FA 56, 05, 05]
+168D; [76 FE 5D, 05, 05]
-168D; [76 FA 5D, 05, 05]
+168E; [76 FE 64, 05, 05]
-168E; [76 FA 64, 05, 05]
+168F; [76 FE 6B, 05, 05]
-168F; [76 FA 6B, 05, 05]
+1690; [76 FE 72, 05, 05]
-1690; [76 FA 72, 05, 05]
+1691; [76 FE 79, 05, 05]
-1691; [76 FA 79, 05, 05]
+1692; [76 FE 80, 05, 05]
-1692; [76 FA 80, 05, 05]
+1693; [76 FE 87, 05, 05]
-1693; [76 FA 87, 05, 05]
+1694; [76 FE 8E, 05, 05]
-1694; [76 FA 8E, 05, 05]
+1695; [76 FE 95, 05, 05]
-1695; [76 FA 95, 05, 05]
+1696; [76 FE 9C, 05, 05]
-1696; [76 FA 9C, 05, 05]
+1697; [76 FE A3, 05, 05]
-1697; [76 FA A3, 05, 05]
+1698; [76 FE AA, 05, 05]
-1698; [76 FA AA, 05, 05]
+1699; [76 FE B1, 05, 05]
-1699; [76 FA B1, 05, 05]
-
-169A; [76 FA B8, 05, 05]
+169A; [76 FE B8, 05, 05]
FDD1 16A0; [77 04 02, 05, 05] # RUNIC first primary starts new lead byte (compressible)
@@ -40408,8 +41165,8 @@ FF67; [7A 06, 05, 17]
30A2; [7A 06, 05, 9E]
FF71; [7A 06, 05, A5]
32D0; [7A 06, 05, 2C]
-3303; [7A 06, 05, 33][0D 6F, 05, 2E][7A 58, 05, 30]
-3300; [7A 06, 05, 33][7A 3A, 05, 30][, B0, 2E][0D 6F, 05, 2E][7A 2E, 05, 33]
+3303; [7A 06, 05, 33][0D 76, 05, 2E][7A 58, 05, 30]
+3300; [7A 06, 05, 33][7A 3A, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 2E, 05, 33]
3301; [7A 06, 05, 33][7A 58, 05, 30][7A 3E, 05, 30][7A 06, 05, 33]
3302; [7A 06, 05, 33][7A 66, 05, 31][7A 40, 05, 30][, B0, 2E][7A 06, 05, 33]
@@ -40443,8 +41200,8 @@ FF6A; [7A 0E, 05, 17]
30A8; [7A 0E, 05, 9E]
FF74; [7A 0E, 05, A5]
32D3; [7A 0E, 05, 2C]
-3308; [7A 0E, 05, 33][0D 6F, 05, 2E][7A 12, 05, 30][0D 6F, 05, 2E]
-3307; [7A 0E, 05, 33][7A 20, 05, 30][7A 16, 05, 30][0D 6F, 05, 2E][7A 2E, 05, 33][, AE, 2E]
+3308; [7A 0E, 05, 33][0D 76, 05, 2E][7A 12, 05, 30][0D 76, 05, 2E]
+3307; [7A 0E, 05, 33][7A 20, 05, 30][7A 16, 05, 30][0D 76, 05, 2E][7A 2E, 05, 33][, AE, 2E]
3049; [7A 10, 05, 03]
304A; [7A 10, 05, 85]
@@ -40453,7 +41210,7 @@ FF6B; [7A 10, 05, 17]
30AA; [7A 10, 05, 9E]
FF75; [7A 10, 05, A5]
32D4; [7A 10, 05, 2C]
-330A; [7A 10, 05, 33][0D 6F, 05, 2E][7A 48, 05, 30]
+330A; [7A 10, 05, 33][0D 76, 05, 2E][7A 48, 05, 30]
3309; [7A 10, 05, 33][7A 66, 05, 31][7A 20, 05, 30]
3095; [7A 12, 05, 03]
@@ -40466,7 +41223,7 @@ FF76; [7A 12, 05, A0]
30AC; [7A 12, 05, 98][, AE, 05]
330B; [7A 12, 05, 30][7A 08, 05, 33][7A 56, 05, 33]
330C; [7A 12, 05, 30][7A 54, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
-330D; [7A 12, 05, 30][7A 5C, 05, 30][7A 56, 05, 33][0D 6F, 05, 2E]
+330D; [7A 12, 05, 30][7A 5C, 05, 30][7A 56, 05, 33][0D 76, 05, 2E]
330E; [7A 12, 05, 30][, AE, 2E][7A 5C, 05, 30][7A 66, 05, 31]
330F; [7A 12, 05, 30][, AE, 2E][7A 66, 05, 31][7A 44, 05, 31]
@@ -40477,12 +41234,12 @@ FF77; [7A 14, 05, 9B]
304E; [7A 14, 05, 85][, AE, 05]
30AE; [7A 14, 05, 90][, AE, 05]
3310; [7A 14, 05, 31][, AE, 2E][7A 12, 05, 30][, AE, 2E]
-3311; [7A 14, 05, 31][, AE, 2E][7A 32, 05, 31][0D 6F, 05, 2E]
-3312; [7A 14, 05, 31][7A 50, 05, 33][7A 56, 05, 33][0D 6F, 05, 2E]
-3313; [7A 14, 05, 31][, AE, 2E][7A 58, 05, 30][7A 26, 05, 31][, AE, 2E][0D 6F, 05, 2E]
+3311; [7A 14, 05, 31][, AE, 2E][7A 32, 05, 31][0D 76, 05, 2E]
+3312; [7A 14, 05, 31][7A 50, 05, 33][7A 56, 05, 33][0D 76, 05, 2E]
+3313; [7A 14, 05, 31][, AE, 2E][7A 58, 05, 30][7A 26, 05, 31][, AE, 2E][0D 76, 05, 2E]
3314; [7A 14, 05, 31][7A 5C, 05, 30]
3315; [7A 14, 05, 31][7A 5C, 05, 30][7A 16, 05, 30][, AE, 2E][7A 54, 05, 30][7A 48, 05, 30]
-3316; [7A 14, 05, 31][7A 5C, 05, 30][7A 4A, 05, 31][0D 6F, 05, 2E][7A 2E, 05, 33][7A 58, 05, 30]
+3316; [7A 14, 05, 31][7A 5C, 05, 30][7A 4A, 05, 31][0D 76, 05, 2E][7A 2E, 05, 33][7A 58, 05, 30]
3317; [7A 14, 05, 31][7A 5C, 05, 30][7A 5E, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
304F; [7A 16, 05, 85]
@@ -40495,7 +41252,7 @@ FF78; [7A 16, 05, A0]
3318; [7A 16, 05, 30][, AE, 2E][7A 54, 05, 30][7A 48, 05, 30]
3319; [7A 16, 05, 30][, AE, 2E][7A 54, 05, 30][7A 48, 05, 30][7A 2E, 05, 33][7A 66, 05, 31]
331A; [7A 16, 05, 30][7A 58, 05, 30][7A 22, 05, 31][, AE, 2E][7A 08, 05, 33][7A 5C, 05, 30]
-331B; [7A 16, 05, 30][7A 5C, 05, 30][0D 6F, 05, 2E][7A 36, 05, 31]
+331B; [7A 16, 05, 30][7A 5C, 05, 30][0D 76, 05, 2E][7A 36, 05, 31]
3096; [7A 18, 05, 03]
3051; [7A 18, 05, 85]
@@ -40505,7 +41262,7 @@ FF79; [7A 18, 05, A0]
32D8; [7A 18, 05, 28]
3052; [7A 18, 05, 85][, AE, 05]
30B2; [7A 18, 05, 98][, AE, 05]
-331C; [7A 18, 05, 30][0D 6F, 05, 2E][7A 20, 05, 30]
+331C; [7A 18, 05, 30][0D 76, 05, 2E][7A 20, 05, 30]
3053; [7A 1A, 05, 85]
30B3; [7A 1A, 05, 90]
@@ -40513,7 +41270,7 @@ FF7A; [7A 1A, 05, 98]
32D9; [7A 1A, 05, 20]
3054; [7A 1A, 05, 85][, AE, 05]
30B4; [7A 1A, 05, 90][, AE, 05]
-331E; [7A 1A, 05, 30][0D 6F, 05, 2E][7A 42, 05, 30][, B0, 2E]
+331E; [7A 1A, 05, 30][0D 76, 05, 2E][7A 42, 05, 30][, B0, 2E]
1F201; [7A 1A, 05, 30][7A 1A, 05, 30]
30FF; [7A 1A, 05, 28][7A 2E, 05, 2C]
331D; [7A 1A, 05, 30][7A 58, 05, 30][7A 30, 05, 31]
@@ -40526,7 +41283,7 @@ FF7B; [7A 1C, 05, 9B]
3056; [7A 1C, 05, 85][, AE, 05]
30B6; [7A 1C, 05, 90][, AE, 05]
331F; [7A 1C, 05, 31][7A 08, 05, 33][7A 16, 05, 30][7A 58, 05, 30]
-3320; [7A 1C, 05, 31][7A 66, 05, 31][7A 28, 05, 31][0D 6F, 05, 2E][7A 48, 05, 30]
+3320; [7A 1C, 05, 31][7A 66, 05, 31][7A 28, 05, 31][0D 76, 05, 2E][7A 48, 05, 30]
3057; [7A 1E, 05, 85]
31F1; [7A 1E, 05, 10]
@@ -40568,7 +41325,7 @@ FF80; [7A 26, 05, 9B]
32DF; [7A 26, 05, 26]
3060; [7A 26, 05, 85][, AE, 05]
30C0; [7A 26, 05, 90][, AE, 05]
-3324; [7A 26, 05, 31][, AE, 2E][0D 6F, 05, 2E][7A 20, 05, 30]
+3324; [7A 26, 05, 31][, AE, 2E][0D 76, 05, 2E][7A 20, 05, 30]
3061; [7A 28, 05, 85]
30C1; [7A 28, 05, 90]
@@ -40643,9 +41400,9 @@ FF8A; [7A 3A, 05, A0]
30D0; [7A 3A, 05, 98][, AE, 05]
3071; [7A 3A, 05, 85][, B0, 05]
30D1; [7A 3A, 05, 98][, B0, 05]
-332B; [7A 3A, 05, 30][, B0, 2E][0D 6F, 05, 2E][7A 22, 05, 31][7A 66, 05, 31][7A 2E, 05, 33]
-332C; [7A 3A, 05, 30][, B0, 2E][0D 6F, 05, 2E][7A 2A, 05, 33]
-332D; [7A 3A, 05, 30][, AE, 2E][0D 6F, 05, 2E][7A 5A, 05, 30][7A 58, 05, 30]
+332B; [7A 3A, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 22, 05, 31][7A 66, 05, 31][7A 2E, 05, 33]
+332C; [7A 3A, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 2A, 05, 33]
+332D; [7A 3A, 05, 30][, AE, 2E][0D 76, 05, 2E][7A 5A, 05, 30][7A 58, 05, 30]
332A; [7A 3A, 05, 30][7A 08, 05, 33][7A 2A, 05, 33]
3072; [7A 3C, 05, 85]
@@ -40672,7 +41429,7 @@ FF8C; [7A 3E, 05, A0]
3077; [7A 3E, 05, 85][, B0, 05]
30D7; [7A 3E, 05, 98][, B0, 05]
3332; [7A 3E, 05, 30][7A 06, 05, 33][7A 54, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33][, AE, 2E]
-3333; [7A 3E, 05, 30][7A 08, 05, 33][0D 6F, 05, 2E][7A 2E, 05, 33]
+3333; [7A 3E, 05, 30][7A 08, 05, 33][0D 76, 05, 2E][7A 2E, 05, 33]
3334; [7A 3E, 05, 30][, AE, 2E][7A 2A, 05, 33][7A 1E, 05, 30][7A 0E, 05, 33][7A 58, 05, 30]
3335; [7A 3E, 05, 30][7A 54, 05, 30][7A 66, 05, 31]
@@ -40685,9 +41442,9 @@ FF8D; [7A 40, 05, A0]
30D9; [7A 40, 05, 98][, AE, 05]
307A; [7A 40, 05, 85][, B0, 05]
30DA; [7A 40, 05, 98][, B0, 05]
-333B; [7A 40, 05, 30][, B0, 2E][0D 6F, 05, 2E][7A 1E, 05, 30][, AE, 2E]
-333C; [7A 40, 05, 30][, AE, 2E][0D 6F, 05, 2E][7A 26, 05, 31]
-3336; [7A 40, 05, 30][7A 16, 05, 30][7A 26, 05, 31][0D 6F, 05, 2E][7A 58, 05, 30]
+333B; [7A 40, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 1E, 05, 30][, AE, 2E]
+333C; [7A 40, 05, 30][, AE, 2E][0D 76, 05, 2E][7A 26, 05, 31]
+3336; [7A 40, 05, 30][7A 16, 05, 30][7A 26, 05, 31][0D 76, 05, 2E][7A 58, 05, 30]
3337; [7A 40, 05, 30][, B0, 2E][7A 24, 05, 31]
3338; [7A 40, 05, 30][, B0, 2E][7A 32, 05, 31][7A 3C, 05, 30]
3339; [7A 40, 05, 30][7A 58, 05, 30][7A 2A, 05, 33]
@@ -40702,8 +41459,8 @@ FF8E; [7A 42, 05, A0]
30DC; [7A 42, 05, 98][, AE, 05]
307D; [7A 42, 05, 85][, B0, 05]
30DD; [7A 42, 05, 98][, B0, 05]
-3341; [7A 42, 05, 30][0D 6F, 05, 2E][7A 58, 05, 30]
-3342; [7A 42, 05, 30][0D 6F, 05, 2E][7A 66, 05, 31]
+3341; [7A 42, 05, 30][0D 76, 05, 2E][7A 58, 05, 30]
+3342; [7A 42, 05, 30][0D 76, 05, 2E][7A 66, 05, 31]
333D; [7A 42, 05, 30][, B0, 2E][7A 08, 05, 33][7A 66, 05, 31][7A 2E, 05, 33]
1F200; [7A 42, 05, 30][7A 12, 05, 30]
333E; [7A 42, 05, 30][, AE, 2E][7A 58, 05, 30][7A 2E, 05, 33]
@@ -40727,7 +41484,7 @@ FF90; [7A 46, 05, 9B]
32EF; [7A 46, 05, 26]
3348; [7A 46, 05, 31][7A 16, 05, 30][7A 5C, 05, 30][7A 66, 05, 31]
3349; [7A 46, 05, 31][7A 56, 05, 33]
-334A; [7A 46, 05, 31][7A 56, 05, 33][7A 3A, 05, 30][, AE, 2E][0D 6F, 05, 2E][7A 58, 05, 30]
+334A; [7A 46, 05, 31][7A 56, 05, 33][7A 3A, 05, 30][, AE, 2E][0D 76, 05, 2E][7A 58, 05, 30]
3080; [7A 48, 05, 85]
31FA; [7A 48, 05, 10]
@@ -40739,7 +41496,7 @@ FF91; [7A 48, 05, A0]
30E1; [7A 4A, 05, 90]
FF92; [7A 4A, 05, 9B]
32F1; [7A 4A, 05, 26]
-334D; [7A 4A, 05, 31][0D 6F, 05, 2E][7A 2E, 05, 33][7A 58, 05, 30]
+334D; [7A 4A, 05, 31][0D 76, 05, 2E][7A 2E, 05, 33][7A 58, 05, 30]
334B; [7A 4A, 05, 31][7A 12, 05, 30][, AE, 2E]
334C; [7A 4A, 05, 31][7A 12, 05, 30][, AE, 2E][7A 2E, 05, 33][7A 66, 05, 31]
@@ -40755,8 +41512,8 @@ FF6C; [7A 4E, 05, 17]
30E4; [7A 4E, 05, 9E]
FF94; [7A 4E, 05, A5]
32F3; [7A 4E, 05, 2C]
-334E; [7A 4E, 05, 33][0D 6F, 05, 2E][7A 2E, 05, 33][, AE, 2E]
-334F; [7A 4E, 05, 33][0D 6F, 05, 2E][7A 58, 05, 30]
+334E; [7A 4E, 05, 33][0D 76, 05, 2E][7A 2E, 05, 33][, AE, 2E]
+334F; [7A 4E, 05, 33][0D 76, 05, 2E][7A 58, 05, 30]
3085; [7A 50, 05, 03]
3086; [7A 50, 05, 85]
@@ -40795,8 +41552,8 @@ FF98; [7A 56, 05, 9E]
30EB; [7A 58, 05, 98]
FF99; [7A 58, 05, A0]
32F8; [7A 58, 05, 28]
-3354; [7A 58, 05, 30][0D 6F, 05, 2E][7A 3E, 05, 30][, AE, 2E][7A 58, 05, 30]
-3353; [7A 58, 05, 30][7A 3C, 05, 30][, B0, 2E][0D 6F, 05, 2E]
+3354; [7A 58, 05, 30][0D 76, 05, 2E][7A 3E, 05, 30][, AE, 2E][7A 58, 05, 30]
+3353; [7A 58, 05, 30][7A 3C, 05, 30][, B0, 2E][0D 76, 05, 2E]
308C; [7A 5A, 05, 85]
31FE; [7A 5A, 05, 10]
@@ -41448,6 +42205,7 @@ FDD1 3105; [7B 04 02, 05, 05] # BOPOMOFO first primary starts new lead byte (com
310C; [7B 1A, 05, 05]
310D; [7B 1C, 05, 05]
+31BB; [7B 1C, 05, 20]
31A3; [7B 1C, 70, 05]
310E; [7B 1E, 05, 05]
@@ -41469,3736 +42227,3746 @@ FDD1 3105; [7B 04 02, 05, 05] # BOPOMOFO first primary starts new lead byte (com
312C; [7B 2C, 05, 05]
-3113; [7B 2E, 05, 05]
+31BC; [7B 2E, 05, 05]
+
+31BD; [7B 30, 05, 05]
+
+3113; [7B 32, 05, 05]
+
+3114; [7B 34, 05, 05]
-3114; [7B 30, 05, 05]
+3115; [7B 36, 05, 05]
-3115; [7B 32, 05, 05]
+3116; [7B 38, 05, 05]
-3116; [7B 34, 05, 05]
+3117; [7B 3A, 05, 05]
+31A1; [7B 3A, 70, 05]
-3117; [7B 36, 05, 05]
-31A1; [7B 36, 70, 05]
+3118; [7B 3C, 05, 05]
-3118; [7B 38, 05, 05]
+3119; [7B 3E, 05, 05]
-3119; [7B 3A, 05, 05]
+31B8; [7B 40, 05, 05]
-31B8; [7B 3C, 05, 05]
+31B9; [7B 42, 05, 05]
-31B9; [7B 3E, 05, 05]
+31BA; [7B 44, 05, 05]
-31BA; [7B 40, 05, 05]
+311A; [7B 46, 05, 05]
+31A9; [7B 46, 70, 05]
-311A; [7B 42, 05, 05]
-31A9; [7B 42, 70, 05]
+311B; [7B 48, 05, 05]
+31A7; [7B 48, 70, 05]
-311B; [7B 44, 05, 05]
-31A7; [7B 44, 70, 05]
+31A6; [7B 4A, 05, 05]
-31A6; [7B 46, 05, 05]
+311C; [7B 4C, 05, 05]
+312E; [7B 4C, 05, 20]
-311C; [7B 48, 05, 05]
-312E; [7B 48, 05, 20]
+311D; [7B 4E, 05, 05]
-311D; [7B 4A, 05, 05]
+31A4; [7B 50, 05, 05]
+31A5; [7B 50, 70, 05]
-31A4; [7B 4C, 05, 05]
-31A5; [7B 4C, 70, 05]
+311E; [7B 52, 05, 05]
+31AE; [7B 52, 70, 05]
-311E; [7B 4E, 05, 05]
-31AE; [7B 4E, 70, 05]
+311F; [7B 54, 05, 05]
-311F; [7B 50, 05, 05]
+3120; [7B 56, 05, 05]
+31AF; [7B 56, 70, 05]
-3120; [7B 52, 05, 05]
-31AF; [7B 52, 70, 05]
+3121; [7B 58, 05, 05]
-3121; [7B 54, 05, 05]
+3122; [7B 5A, 05, 05]
-3122; [7B 56, 05, 05]
+3123; [7B 5C, 05, 05]
-3123; [7B 58, 05, 05]
+3124; [7B 5E, 05, 05]
-3124; [7B 5A, 05, 05]
+31B2; [7B 60, 05, 05]
-31B2; [7B 5C, 05, 05]
+3125; [7B 62, 05, 05]
-3125; [7B 5E, 05, 05]
+31B0; [7B 64, 05, 05]
-31B0; [7B 60, 05, 05]
+31B1; [7B 66, 05, 05]
-31B1; [7B 62, 05, 05]
+3126; [7B 68, 05, 05]
-3126; [7B 64, 05, 05]
+3127; [7B 6A, 05, 05]
+31AA; [7B 6A, 70, 05]
+31B3; [7B 6A, 70, 20]
-3127; [7B 66, 05, 05]
-31AA; [7B 66, 70, 05]
-31B3; [7B 66, 70, 20]
+3128; [7B 6C, 05, 05]
+31AB; [7B 6C, 70, 05]
+31A8; [7B 6C, 78, 05]
-3128; [7B 68, 05, 05]
-31AB; [7B 68, 70, 05]
-31A8; [7B 68, 78, 05]
+3129; [7B 6E, 05, 05]
-3129; [7B 6A, 05, 05]
+312D; [7B 70, 05, 05]
-312D; [7B 6C, 05, 05]
+31BE; [7B 72, 05, 05]
-FDD1 A288; [7B 6E 02, 05, 05] # YI first primary (compressible)
+31BF; [7B 74, 05, 05]
-A000; [7B 6E 09, 05, 05]
+FDD1 A288; [7B 76 02, 05, 05] # YI first primary (compressible)
-A001; [7B 6E 10, 05, 05]
+A000; [7B 76 09, 05, 05]
-A002; [7B 6E 17, 05, 05]
+A001; [7B 76 10, 05, 05]
-A003; [7B 6E 1E, 05, 05]
+A002; [7B 76 17, 05, 05]
-A004; [7B 6E 25, 05, 05]
+A003; [7B 76 1E, 05, 05]
-A005; [7B 6E 2C, 05, 05]
+A004; [7B 76 25, 05, 05]
-A006; [7B 6E 33, 05, 05]
+A005; [7B 76 2C, 05, 05]
-A007; [7B 6E 3A, 05, 05]
+A006; [7B 76 33, 05, 05]
-A008; [7B 6E 41, 05, 05]
+A007; [7B 76 3A, 05, 05]
-A009; [7B 6E 48, 05, 05]
+A008; [7B 76 41, 05, 05]
-A00A; [7B 6E 4F, 05, 05]
+A009; [7B 76 48, 05, 05]
-A00B; [7B 6E 56, 05, 05]
+A00A; [7B 76 4F, 05, 05]
-A00C; [7B 6E 5D, 05, 05]
+A00B; [7B 76 56, 05, 05]
-A00D; [7B 6E 64, 05, 05]
+A00C; [7B 76 5D, 05, 05]
-A00E; [7B 6E 6B, 05, 05]
+A00D; [7B 76 64, 05, 05]
-A00F; [7B 6E 72, 05, 05]
+A00E; [7B 76 6B, 05, 05]
-A010; [7B 6E 79, 05, 05]
+A00F; [7B 76 72, 05, 05]
-A011; [7B 6E 80, 05, 05]
+A010; [7B 76 79, 05, 05]
-A012; [7B 6E 87, 05, 05]
+A011; [7B 76 80, 05, 05]
-A013; [7B 6E 8E, 05, 05]
+A012; [7B 76 87, 05, 05]
-A014; [7B 6E 95, 05, 05]
+A013; [7B 76 8E, 05, 05]
-A015; [7B 6E 9C, 05, 05]
+A014; [7B 76 95, 05, 05]
-A016; [7B 6E A3, 05, 05]
+A015; [7B 76 9C, 05, 05]
-A017; [7B 6E AA, 05, 05]
+A016; [7B 76 A3, 05, 05]
-A018; [7B 6E B1, 05, 05]
+A017; [7B 76 AA, 05, 05]
-A019; [7B 6E B8, 05, 05]
+A018; [7B 76 B1, 05, 05]
-A01A; [7B 6E BF, 05, 05]
+A019; [7B 76 B8, 05, 05]
-A01B; [7B 6E C6, 05, 05]
+A01A; [7B 76 BF, 05, 05]
-A01C; [7B 6E CD, 05, 05]
+A01B; [7B 76 C6, 05, 05]
-A01D; [7B 6E D4, 05, 05]
+A01C; [7B 76 CD, 05, 05]
-A01E; [7B 6E DB, 05, 05]
+A01D; [7B 76 D4, 05, 05]
-A01F; [7B 6E E2, 05, 05]
+A01E; [7B 76 DB, 05, 05]
-A020; [7B 6E E9, 05, 05]
+A01F; [7B 76 E2, 05, 05]
-A021; [7B 6E F0, 05, 05]
+A020; [7B 76 E9, 05, 05]
-A022; [7B 6E F7, 05, 05]
+A021; [7B 76 F0, 05, 05]
-A023; [7B 6E FE, 05, 05]
+A022; [7B 76 F7, 05, 05]
-A024; [7B 6F 07, 05, 05]
+A023; [7B 76 FE, 05, 05]
-A025; [7B 6F 0E, 05, 05]
+A024; [7B 77 07, 05, 05]
-A026; [7B 6F 15, 05, 05]
+A025; [7B 77 0E, 05, 05]
-A027; [7B 6F 1C, 05, 05]
+A026; [7B 77 15, 05, 05]
-A028; [7B 6F 23, 05, 05]
+A027; [7B 77 1C, 05, 05]
-A029; [7B 6F 2A, 05, 05]
+A028; [7B 77 23, 05, 05]
-A02A; [7B 6F 31, 05, 05]
+A029; [7B 77 2A, 05, 05]
-A02B; [7B 6F 38, 05, 05]
+A02A; [7B 77 31, 05, 05]
-A02C; [7B 6F 3F, 05, 05]
+A02B; [7B 77 38, 05, 05]
-A02D; [7B 6F 46, 05, 05]
+A02C; [7B 77 3F, 05, 05]
-A02E; [7B 6F 4D, 05, 05]
+A02D; [7B 77 46, 05, 05]
-A02F; [7B 6F 54, 05, 05]
+A02E; [7B 77 4D, 05, 05]
-A030; [7B 6F 5B, 05, 05]
+A02F; [7B 77 54, 05, 05]
-A031; [7B 6F 62, 05, 05]
+A030; [7B 77 5B, 05, 05]
-A032; [7B 6F 69, 05, 05]
+A031; [7B 77 62, 05, 05]
-A033; [7B 6F 70, 05, 05]
+A032; [7B 77 69, 05, 05]
-A034; [7B 6F 77, 05, 05]
+A033; [7B 77 70, 05, 05]
-A035; [7B 6F 7E, 05, 05]
+A034; [7B 77 77, 05, 05]
-A036; [7B 6F 85, 05, 05]
+A035; [7B 77 7E, 05, 05]
-A037; [7B 6F 8C, 05, 05]
+A036; [7B 77 85, 05, 05]
-A038; [7B 6F 93, 05, 05]
+A037; [7B 77 8C, 05, 05]
-A039; [7B 6F 9A, 05, 05]
+A038; [7B 77 93, 05, 05]
-A03A; [7B 6F A1, 05, 05]
+A039; [7B 77 9A, 05, 05]
-A03B; [7B 6F A8, 05, 05]
+A03A; [7B 77 A1, 05, 05]
-A03C; [7B 6F AF, 05, 05]
+A03B; [7B 77 A8, 05, 05]
-A03D; [7B 6F B6, 05, 05]
+A03C; [7B 77 AF, 05, 05]
-A03E; [7B 6F BD, 05, 05]
+A03D; [7B 77 B6, 05, 05]
-A03F; [7B 6F C4, 05, 05]
+A03E; [7B 77 BD, 05, 05]
-A040; [7B 6F CB, 05, 05]
+A03F; [7B 77 C4, 05, 05]
-A041; [7B 6F D2, 05, 05]
+A040; [7B 77 CB, 05, 05]
-A042; [7B 6F D9, 05, 05]
+A041; [7B 77 D2, 05, 05]
-A043; [7B 6F E0, 05, 05]
+A042; [7B 77 D9, 05, 05]
-A044; [7B 6F E7, 05, 05]
+A043; [7B 77 E0, 05, 05]
-A045; [7B 6F EE, 05, 05]
+A044; [7B 77 E7, 05, 05]
-A046; [7B 6F F5, 05, 05]
+A045; [7B 77 EE, 05, 05]
-A047; [7B 6F FC, 05, 05]
+A046; [7B 77 F5, 05, 05]
-A048; [7B 70 05, 05, 05]
+A047; [7B 77 FC, 05, 05]
-A049; [7B 70 0C, 05, 05]
+A048; [7B 78 05, 05, 05]
-A04A; [7B 70 13, 05, 05]
+A049; [7B 78 0C, 05, 05]
-A04B; [7B 70 1A, 05, 05]
+A04A; [7B 78 13, 05, 05]
-A04C; [7B 70 21, 05, 05]
+A04B; [7B 78 1A, 05, 05]
-A04D; [7B 70 28, 05, 05]
+A04C; [7B 78 21, 05, 05]
-A04E; [7B 70 2F, 05, 05]
+A04D; [7B 78 28, 05, 05]
-A04F; [7B 70 36, 05, 05]
+A04E; [7B 78 2F, 05, 05]
-A050; [7B 70 3D, 05, 05]
+A04F; [7B 78 36, 05, 05]
-A051; [7B 70 44, 05, 05]
+A050; [7B 78 3D, 05, 05]
-A052; [7B 70 4B, 05, 05]
+A051; [7B 78 44, 05, 05]
-A053; [7B 70 52, 05, 05]
+A052; [7B 78 4B, 05, 05]
-A054; [7B 70 59, 05, 05]
+A053; [7B 78 52, 05, 05]
-A055; [7B 70 60, 05, 05]
+A054; [7B 78 59, 05, 05]
-A056; [7B 70 67, 05, 05]
+A055; [7B 78 60, 05, 05]
-A057; [7B 70 6E, 05, 05]
+A056; [7B 78 67, 05, 05]
-A058; [7B 70 75, 05, 05]
+A057; [7B 78 6E, 05, 05]
-A059; [7B 70 7C, 05, 05]
+A058; [7B 78 75, 05, 05]
-A05A; [7B 70 83, 05, 05]
+A059; [7B 78 7C, 05, 05]
-A05B; [7B 70 8A, 05, 05]
+A05A; [7B 78 83, 05, 05]
-A05C; [7B 70 91, 05, 05]
+A05B; [7B 78 8A, 05, 05]
-A05D; [7B 70 98, 05, 05]
+A05C; [7B 78 91, 05, 05]
-A05E; [7B 70 9F, 05, 05]
+A05D; [7B 78 98, 05, 05]
-A05F; [7B 70 A6, 05, 05]
+A05E; [7B 78 9F, 05, 05]
-A060; [7B 70 AD, 05, 05]
+A05F; [7B 78 A6, 05, 05]
-A061; [7B 70 B4, 05, 05]
+A060; [7B 78 AD, 05, 05]
-A062; [7B 70 BB, 05, 05]
+A061; [7B 78 B4, 05, 05]
-A063; [7B 70 C2, 05, 05]
+A062; [7B 78 BB, 05, 05]
-A064; [7B 70 C9, 05, 05]
+A063; [7B 78 C2, 05, 05]
-A065; [7B 70 D0, 05, 05]
+A064; [7B 78 C9, 05, 05]
-A066; [7B 70 D7, 05, 05]
+A065; [7B 78 D0, 05, 05]
-A067; [7B 70 DE, 05, 05]
+A066; [7B 78 D7, 05, 05]
-A068; [7B 70 E5, 05, 05]
+A067; [7B 78 DE, 05, 05]
-A069; [7B 70 EC, 05, 05]
+A068; [7B 78 E5, 05, 05]
-A06A; [7B 70 F3, 05, 05]
+A069; [7B 78 EC, 05, 05]
-A06B; [7B 70 FA, 05, 05]
+A06A; [7B 78 F3, 05, 05]
-A06C; [7B 71 03, 05, 05]
+A06B; [7B 78 FA, 05, 05]
-A06D; [7B 71 0A, 05, 05]
+A06C; [7B 79 03, 05, 05]
-A06E; [7B 71 11, 05, 05]
+A06D; [7B 79 0A, 05, 05]
-A06F; [7B 71 18, 05, 05]
+A06E; [7B 79 11, 05, 05]
-A070; [7B 71 1F, 05, 05]
+A06F; [7B 79 18, 05, 05]
-A071; [7B 71 26, 05, 05]
+A070; [7B 79 1F, 05, 05]
-A072; [7B 71 2D, 05, 05]
+A071; [7B 79 26, 05, 05]
-A073; [7B 71 34, 05, 05]
+A072; [7B 79 2D, 05, 05]
-A074; [7B 71 3B, 05, 05]
+A073; [7B 79 34, 05, 05]
-A075; [7B 71 42, 05, 05]
+A074; [7B 79 3B, 05, 05]
-A076; [7B 71 49, 05, 05]
+A075; [7B 79 42, 05, 05]
-A077; [7B 71 50, 05, 05]
+A076; [7B 79 49, 05, 05]
-A078; [7B 71 57, 05, 05]
+A077; [7B 79 50, 05, 05]
-A079; [7B 71 5E, 05, 05]
+A078; [7B 79 57, 05, 05]
-A07A; [7B 71 65, 05, 05]
+A079; [7B 79 5E, 05, 05]
-A07B; [7B 71 6C, 05, 05]
+A07A; [7B 79 65, 05, 05]
-A07C; [7B 71 73, 05, 05]
+A07B; [7B 79 6C, 05, 05]
-A07D; [7B 71 7A, 05, 05]
+A07C; [7B 79 73, 05, 05]
-A07E; [7B 71 81, 05, 05]
+A07D; [7B 79 7A, 05, 05]
-A07F; [7B 71 88, 05, 05]
+A07E; [7B 79 81, 05, 05]
-A080; [7B 71 8F, 05, 05]
+A07F; [7B 79 88, 05, 05]
-A081; [7B 71 96, 05, 05]
+A080; [7B 79 8F, 05, 05]
-A082; [7B 71 9D, 05, 05]
+A081; [7B 79 96, 05, 05]
-A083; [7B 71 A4, 05, 05]
+A082; [7B 79 9D, 05, 05]
-A084; [7B 71 AB, 05, 05]
+A083; [7B 79 A4, 05, 05]
-A085; [7B 71 B2, 05, 05]
+A084; [7B 79 AB, 05, 05]
-A086; [7B 71 B9, 05, 05]
+A085; [7B 79 B2, 05, 05]
-A087; [7B 71 C0, 05, 05]
+A086; [7B 79 B9, 05, 05]
-A088; [7B 71 C7, 05, 05]
+A087; [7B 79 C0, 05, 05]
-A089; [7B 71 CE, 05, 05]
+A088; [7B 79 C7, 05, 05]
-A08A; [7B 71 D5, 05, 05]
+A089; [7B 79 CE, 05, 05]
-A08B; [7B 71 DC, 05, 05]
+A08A; [7B 79 D5, 05, 05]
-A08C; [7B 71 E3, 05, 05]
+A08B; [7B 79 DC, 05, 05]
-A08D; [7B 71 EA, 05, 05]
+A08C; [7B 79 E3, 05, 05]
-A08E; [7B 71 F1, 05, 05]
+A08D; [7B 79 EA, 05, 05]
-A08F; [7B 71 F8, 05, 05]
+A08E; [7B 79 F1, 05, 05]
-A090; [7B 71 FF, 05, 05]
+A08F; [7B 79 F8, 05, 05]
-A091; [7B 72 08, 05, 05]
+A090; [7B 79 FF, 05, 05]
-A092; [7B 72 0F, 05, 05]
+A091; [7B 7A 08, 05, 05]
-A093; [7B 72 16, 05, 05]
+A092; [7B 7A 0F, 05, 05]
-A094; [7B 72 1D, 05, 05]
+A093; [7B 7A 16, 05, 05]
-A095; [7B 72 24, 05, 05]
+A094; [7B 7A 1D, 05, 05]
-A096; [7B 72 2B, 05, 05]
+A095; [7B 7A 24, 05, 05]
-A097; [7B 72 32, 05, 05]
+A096; [7B 7A 2B, 05, 05]
-A098; [7B 72 39, 05, 05]
+A097; [7B 7A 32, 05, 05]
-A099; [7B 72 40, 05, 05]
+A098; [7B 7A 39, 05, 05]
-A09A; [7B 72 47, 05, 05]
+A099; [7B 7A 40, 05, 05]
-A09B; [7B 72 4E, 05, 05]
+A09A; [7B 7A 47, 05, 05]
-A09C; [7B 72 55, 05, 05]
+A09B; [7B 7A 4E, 05, 05]
-A09D; [7B 72 5C, 05, 05]
+A09C; [7B 7A 55, 05, 05]
-A09E; [7B 72 63, 05, 05]
+A09D; [7B 7A 5C, 05, 05]
-A09F; [7B 72 6A, 05, 05]
+A09E; [7B 7A 63, 05, 05]
-A0A0; [7B 72 71, 05, 05]
+A09F; [7B 7A 6A, 05, 05]
-A0A1; [7B 72 78, 05, 05]
+A0A0; [7B 7A 71, 05, 05]
-A0A2; [7B 72 7F, 05, 05]
+A0A1; [7B 7A 78, 05, 05]
-A0A3; [7B 72 86, 05, 05]
+A0A2; [7B 7A 7F, 05, 05]
-A0A4; [7B 72 8D, 05, 05]
+A0A3; [7B 7A 86, 05, 05]
-A0A5; [7B 72 94, 05, 05]
+A0A4; [7B 7A 8D, 05, 05]
-A0A6; [7B 72 9B, 05, 05]
+A0A5; [7B 7A 94, 05, 05]
-A0A7; [7B 72 A2, 05, 05]
+A0A6; [7B 7A 9B, 05, 05]
-A0A8; [7B 72 A9, 05, 05]
+A0A7; [7B 7A A2, 05, 05]
-A0A9; [7B 72 B0, 05, 05]
+A0A8; [7B 7A A9, 05, 05]
-A0AA; [7B 72 B7, 05, 05]
+A0A9; [7B 7A B0, 05, 05]
-A0AB; [7B 72 BE, 05, 05]
+A0AA; [7B 7A B7, 05, 05]
-A0AC; [7B 72 C5, 05, 05]
+A0AB; [7B 7A BE, 05, 05]
-A0AD; [7B 72 CC, 05, 05]
+A0AC; [7B 7A C5, 05, 05]
-A0AE; [7B 72 D3, 05, 05]
+A0AD; [7B 7A CC, 05, 05]
-A0AF; [7B 72 DA, 05, 05]
+A0AE; [7B 7A D3, 05, 05]
-A0B0; [7B 72 E1, 05, 05]
+A0AF; [7B 7A DA, 05, 05]
-A0B1; [7B 72 E8, 05, 05]
+A0B0; [7B 7A E1, 05, 05]
-A0B2; [7B 72 EF, 05, 05]
+A0B1; [7B 7A E8, 05, 05]
-A0B3; [7B 72 F6, 05, 05]
+A0B2; [7B 7A EF, 05, 05]
-A0B4; [7B 72 FD, 05, 05]
+A0B3; [7B 7A F6, 05, 05]
-A0B5; [7B 73 06, 05, 05]
+A0B4; [7B 7A FD, 05, 05]
-A0B6; [7B 73 0D, 05, 05]
+A0B5; [7B 7B 06, 05, 05]
-A0B7; [7B 73 14, 05, 05]
+A0B6; [7B 7B 0D, 05, 05]
-A0B8; [7B 73 1B, 05, 05]
+A0B7; [7B 7B 14, 05, 05]
-A0B9; [7B 73 22, 05, 05]
+A0B8; [7B 7B 1B, 05, 05]
-A0BA; [7B 73 29, 05, 05]
+A0B9; [7B 7B 22, 05, 05]
-A0BB; [7B 73 30, 05, 05]
+A0BA; [7B 7B 29, 05, 05]
-A0BC; [7B 73 37, 05, 05]
+A0BB; [7B 7B 30, 05, 05]
-A0BD; [7B 73 3E, 05, 05]
+A0BC; [7B 7B 37, 05, 05]
-A0BE; [7B 73 45, 05, 05]
+A0BD; [7B 7B 3E, 05, 05]
-A0BF; [7B 73 4C, 05, 05]
+A0BE; [7B 7B 45, 05, 05]
-A0C0; [7B 73 53, 05, 05]
+A0BF; [7B 7B 4C, 05, 05]
-A0C1; [7B 73 5A, 05, 05]
+A0C0; [7B 7B 53, 05, 05]
-A0C2; [7B 73 61, 05, 05]
+A0C1; [7B 7B 5A, 05, 05]
-A0C3; [7B 73 68, 05, 05]
+A0C2; [7B 7B 61, 05, 05]
-A0C4; [7B 73 6F, 05, 05]
+A0C3; [7B 7B 68, 05, 05]
-A0C5; [7B 73 76, 05, 05]
+A0C4; [7B 7B 6F, 05, 05]
-A0C6; [7B 73 7D, 05, 05]
+A0C5; [7B 7B 76, 05, 05]
-A0C7; [7B 73 84, 05, 05]
+A0C6; [7B 7B 7D, 05, 05]
-A0C8; [7B 73 8B, 05, 05]
+A0C7; [7B 7B 84, 05, 05]
-A0C9; [7B 73 92, 05, 05]
+A0C8; [7B 7B 8B, 05, 05]
-A0CA; [7B 73 99, 05, 05]
+A0C9; [7B 7B 92, 05, 05]
-A0CB; [7B 73 A0, 05, 05]
+A0CA; [7B 7B 99, 05, 05]
-A0CC; [7B 73 A7, 05, 05]
+A0CB; [7B 7B A0, 05, 05]
-A0CD; [7B 73 AE, 05, 05]
+A0CC; [7B 7B A7, 05, 05]
-A0CE; [7B 73 B5, 05, 05]
+A0CD; [7B 7B AE, 05, 05]
-A0CF; [7B 73 BC, 05, 05]
+A0CE; [7B 7B B5, 05, 05]
-A0D0; [7B 73 C3, 05, 05]
+A0CF; [7B 7B BC, 05, 05]
-A0D1; [7B 73 CA, 05, 05]
+A0D0; [7B 7B C3, 05, 05]
-A0D2; [7B 73 D1, 05, 05]
+A0D1; [7B 7B CA, 05, 05]
-A0D3; [7B 73 D8, 05, 05]
+A0D2; [7B 7B D1, 05, 05]
-A0D4; [7B 73 DF, 05, 05]
+A0D3; [7B 7B D8, 05, 05]
-A0D5; [7B 73 E6, 05, 05]
+A0D4; [7B 7B DF, 05, 05]
-A0D6; [7B 73 ED, 05, 05]
+A0D5; [7B 7B E6, 05, 05]
-A0D7; [7B 73 F4, 05, 05]
+A0D6; [7B 7B ED, 05, 05]
-A0D8; [7B 73 FB, 05, 05]
+A0D7; [7B 7B F4, 05, 05]
-A0D9; [7B 74 04, 05, 05]
+A0D8; [7B 7B FB, 05, 05]
-A0DA; [7B 74 0B, 05, 05]
+A0D9; [7B 7C 04, 05, 05]
-A0DB; [7B 74 12, 05, 05]
+A0DA; [7B 7C 0B, 05, 05]
-A0DC; [7B 74 19, 05, 05]
+A0DB; [7B 7C 12, 05, 05]
-A0DD; [7B 74 20, 05, 05]
+A0DC; [7B 7C 19, 05, 05]
-A0DE; [7B 74 27, 05, 05]
+A0DD; [7B 7C 20, 05, 05]
-A0DF; [7B 74 2E, 05, 05]
+A0DE; [7B 7C 27, 05, 05]
-A0E0; [7B 74 35, 05, 05]
+A0DF; [7B 7C 2E, 05, 05]
-A0E1; [7B 74 3C, 05, 05]
+A0E0; [7B 7C 35, 05, 05]
-A0E2; [7B 74 43, 05, 05]
+A0E1; [7B 7C 3C, 05, 05]
-A0E3; [7B 74 4A, 05, 05]
+A0E2; [7B 7C 43, 05, 05]
-A0E4; [7B 74 51, 05, 05]
+A0E3; [7B 7C 4A, 05, 05]
-A0E5; [7B 74 58, 05, 05]
+A0E4; [7B 7C 51, 05, 05]
-A0E6; [7B 74 5F, 05, 05]
+A0E5; [7B 7C 58, 05, 05]
-A0E7; [7B 74 66, 05, 05]
+A0E6; [7B 7C 5F, 05, 05]
-A0E8; [7B 74 6D, 05, 05]
+A0E7; [7B 7C 66, 05, 05]
-A0E9; [7B 74 74, 05, 05]
+A0E8; [7B 7C 6D, 05, 05]
-A0EA; [7B 74 7B, 05, 05]
+A0E9; [7B 7C 74, 05, 05]
-A0EB; [7B 74 82, 05, 05]
+A0EA; [7B 7C 7B, 05, 05]
-A0EC; [7B 74 89, 05, 05]
+A0EB; [7B 7C 82, 05, 05]
-A0ED; [7B 74 90, 05, 05]
+A0EC; [7B 7C 89, 05, 05]
-A0EE; [7B 74 97, 05, 05]
+A0ED; [7B 7C 90, 05, 05]
-A0EF; [7B 74 9E, 05, 05]
+A0EE; [7B 7C 97, 05, 05]
-A0F0; [7B 74 A5, 05, 05]
+A0EF; [7B 7C 9E, 05, 05]
-A0F1; [7B 74 AC, 05, 05]
+A0F0; [7B 7C A5, 05, 05]
-A0F2; [7B 74 B3, 05, 05]
+A0F1; [7B 7C AC, 05, 05]
-A0F3; [7B 74 BA, 05, 05]
+A0F2; [7B 7C B3, 05, 05]
-A0F4; [7B 74 C1, 05, 05]
+A0F3; [7B 7C BA, 05, 05]
-A0F5; [7B 74 C8, 05, 05]
+A0F4; [7B 7C C1, 05, 05]
-A0F6; [7B 74 CF, 05, 05]
+A0F5; [7B 7C C8, 05, 05]
-A0F7; [7B 74 D6, 05, 05]
+A0F6; [7B 7C CF, 05, 05]
-A0F8; [7B 74 DD, 05, 05]
+A0F7; [7B 7C D6, 05, 05]
-A0F9; [7B 74 E4, 05, 05]
+A0F8; [7B 7C DD, 05, 05]
-A0FA; [7B 74 EB, 05, 05]
+A0F9; [7B 7C E4, 05, 05]
-A0FB; [7B 74 F2, 05, 05]
+A0FA; [7B 7C EB, 05, 05]
-A0FC; [7B 74 F9, 05, 05]
+A0FB; [7B 7C F2, 05, 05]
-A0FD; [7B 75 02, 05, 05]
+A0FC; [7B 7C F9, 05, 05]
-A0FE; [7B 75 09, 05, 05]
+A0FD; [7B 7D 02, 05, 05]
-A0FF; [7B 75 10, 05, 05]
+A0FE; [7B 7D 09, 05, 05]
-A100; [7B 75 17, 05, 05]
+A0FF; [7B 7D 10, 05, 05]
-A101; [7B 75 1E, 05, 05]
+A100; [7B 7D 17, 05, 05]
-A102; [7B 75 25, 05, 05]
+A101; [7B 7D 1E, 05, 05]
-A103; [7B 75 2C, 05, 05]
+A102; [7B 7D 25, 05, 05]
-A104; [7B 75 33, 05, 05]
+A103; [7B 7D 2C, 05, 05]
-A105; [7B 75 3A, 05, 05]
+A104; [7B 7D 33, 05, 05]
-A106; [7B 75 41, 05, 05]
+A105; [7B 7D 3A, 05, 05]
-A107; [7B 75 48, 05, 05]
+A106; [7B 7D 41, 05, 05]
-A108; [7B 75 4F, 05, 05]
+A107; [7B 7D 48, 05, 05]
-A109; [7B 75 56, 05, 05]
+A108; [7B 7D 4F, 05, 05]
-A10A; [7B 75 5D, 05, 05]
+A109; [7B 7D 56, 05, 05]
-A10B; [7B 75 64, 05, 05]
+A10A; [7B 7D 5D, 05, 05]
-A10C; [7B 75 6B, 05, 05]
+A10B; [7B 7D 64, 05, 05]
-A10D; [7B 75 72, 05, 05]
+A10C; [7B 7D 6B, 05, 05]
-A10E; [7B 75 79, 05, 05]
+A10D; [7B 7D 72, 05, 05]
-A10F; [7B 75 80, 05, 05]
+A10E; [7B 7D 79, 05, 05]
-A110; [7B 75 87, 05, 05]
+A10F; [7B 7D 80, 05, 05]
-A111; [7B 75 8E, 05, 05]
+A110; [7B 7D 87, 05, 05]
-A112; [7B 75 95, 05, 05]
+A111; [7B 7D 8E, 05, 05]
-A113; [7B 75 9C, 05, 05]
+A112; [7B 7D 95, 05, 05]
-A114; [7B 75 A3, 05, 05]
+A113; [7B 7D 9C, 05, 05]
-A115; [7B 75 AA, 05, 05]
+A114; [7B 7D A3, 05, 05]
-A116; [7B 75 B1, 05, 05]
+A115; [7B 7D AA, 05, 05]
-A117; [7B 75 B8, 05, 05]
+A116; [7B 7D B1, 05, 05]
-A118; [7B 75 BF, 05, 05]
+A117; [7B 7D B8, 05, 05]
-A119; [7B 75 C6, 05, 05]
+A118; [7B 7D BF, 05, 05]
-A11A; [7B 75 CD, 05, 05]
+A119; [7B 7D C6, 05, 05]
-A11B; [7B 75 D4, 05, 05]
+A11A; [7B 7D CD, 05, 05]
-A11C; [7B 75 DB, 05, 05]
+A11B; [7B 7D D4, 05, 05]
-A11D; [7B 75 E2, 05, 05]
+A11C; [7B 7D DB, 05, 05]
-A11E; [7B 75 E9, 05, 05]
+A11D; [7B 7D E2, 05, 05]
-A11F; [7B 75 F0, 05, 05]
+A11E; [7B 7D E9, 05, 05]
-A120; [7B 75 F7, 05, 05]
+A11F; [7B 7D F0, 05, 05]
-A121; [7B 75 FE, 05, 05]
+A120; [7B 7D F7, 05, 05]
-A122; [7B 76 07, 05, 05]
+A121; [7B 7D FE, 05, 05]
-A123; [7B 76 0E, 05, 05]
+A122; [7B 7E 07, 05, 05]
-A124; [7B 76 15, 05, 05]
+A123; [7B 7E 0E, 05, 05]
-A125; [7B 76 1C, 05, 05]
+A124; [7B 7E 15, 05, 05]
-A126; [7B 76 23, 05, 05]
+A125; [7B 7E 1C, 05, 05]
-A127; [7B 76 2A, 05, 05]
+A126; [7B 7E 23, 05, 05]
-A128; [7B 76 31, 05, 05]
+A127; [7B 7E 2A, 05, 05]
-A129; [7B 76 38, 05, 05]
+A128; [7B 7E 31, 05, 05]
-A12A; [7B 76 3F, 05, 05]
+A129; [7B 7E 38, 05, 05]
-A12B; [7B 76 46, 05, 05]
+A12A; [7B 7E 3F, 05, 05]
-A12C; [7B 76 4D, 05, 05]
+A12B; [7B 7E 46, 05, 05]
-A12D; [7B 76 54, 05, 05]
+A12C; [7B 7E 4D, 05, 05]
-A12E; [7B 76 5B, 05, 05]
+A12D; [7B 7E 54, 05, 05]
-A12F; [7B 76 62, 05, 05]
+A12E; [7B 7E 5B, 05, 05]
-A130; [7B 76 69, 05, 05]
+A12F; [7B 7E 62, 05, 05]
-A131; [7B 76 70, 05, 05]
+A130; [7B 7E 69, 05, 05]
-A132; [7B 76 77, 05, 05]
+A131; [7B 7E 70, 05, 05]
-A133; [7B 76 7E, 05, 05]
+A132; [7B 7E 77, 05, 05]
-A134; [7B 76 85, 05, 05]
+A133; [7B 7E 7E, 05, 05]
-A135; [7B 76 8C, 05, 05]
+A134; [7B 7E 85, 05, 05]
-A136; [7B 76 93, 05, 05]
+A135; [7B 7E 8C, 05, 05]
-A137; [7B 76 9A, 05, 05]
+A136; [7B 7E 93, 05, 05]
-A138; [7B 76 A1, 05, 05]
+A137; [7B 7E 9A, 05, 05]
-A139; [7B 76 A8, 05, 05]
+A138; [7B 7E A1, 05, 05]
-A13A; [7B 76 AF, 05, 05]
+A139; [7B 7E A8, 05, 05]
-A13B; [7B 76 B6, 05, 05]
+A13A; [7B 7E AF, 05, 05]
-A13C; [7B 76 BD, 05, 05]
+A13B; [7B 7E B6, 05, 05]
-A13D; [7B 76 C4, 05, 05]
+A13C; [7B 7E BD, 05, 05]
-A13E; [7B 76 CB, 05, 05]
+A13D; [7B 7E C4, 05, 05]
-A13F; [7B 76 D2, 05, 05]
+A13E; [7B 7E CB, 05, 05]
-A140; [7B 76 D9, 05, 05]
+A13F; [7B 7E D2, 05, 05]
-A141; [7B 76 E0, 05, 05]
+A140; [7B 7E D9, 05, 05]
-A142; [7B 76 E7, 05, 05]
+A141; [7B 7E E0, 05, 05]
-A143; [7B 76 EE, 05, 05]
+A142; [7B 7E E7, 05, 05]
-A144; [7B 76 F5, 05, 05]
+A143; [7B 7E EE, 05, 05]
-A145; [7B 76 FC, 05, 05]
+A144; [7B 7E F5, 05, 05]
-A146; [7B 77 05, 05, 05]
+A145; [7B 7E FC, 05, 05]
-A147; [7B 77 0C, 05, 05]
+A146; [7B 7F 05, 05, 05]
-A148; [7B 77 13, 05, 05]
+A147; [7B 7F 0C, 05, 05]
-A149; [7B 77 1A, 05, 05]
+A148; [7B 7F 13, 05, 05]
-A14A; [7B 77 21, 05, 05]
+A149; [7B 7F 1A, 05, 05]
-A14B; [7B 77 28, 05, 05]
+A14A; [7B 7F 21, 05, 05]
-A14C; [7B 77 2F, 05, 05]
+A14B; [7B 7F 28, 05, 05]
-A14D; [7B 77 36, 05, 05]
+A14C; [7B 7F 2F, 05, 05]
-A14E; [7B 77 3D, 05, 05]
+A14D; [7B 7F 36, 05, 05]
-A14F; [7B 77 44, 05, 05]
+A14E; [7B 7F 3D, 05, 05]
-A150; [7B 77 4B, 05, 05]
+A14F; [7B 7F 44, 05, 05]
-A151; [7B 77 52, 05, 05]
+A150; [7B 7F 4B, 05, 05]
-A152; [7B 77 59, 05, 05]
+A151; [7B 7F 52, 05, 05]
-A153; [7B 77 60, 05, 05]
+A152; [7B 7F 59, 05, 05]
-A154; [7B 77 67, 05, 05]
+A153; [7B 7F 60, 05, 05]
-A155; [7B 77 6E, 05, 05]
+A154; [7B 7F 67, 05, 05]
-A156; [7B 77 75, 05, 05]
+A155; [7B 7F 6E, 05, 05]
-A157; [7B 77 7C, 05, 05]
+A156; [7B 7F 75, 05, 05]
-A158; [7B 77 83, 05, 05]
+A157; [7B 7F 7C, 05, 05]
-A159; [7B 77 8A, 05, 05]
+A158; [7B 7F 83, 05, 05]
-A15A; [7B 77 91, 05, 05]
+A159; [7B 7F 8A, 05, 05]
-A15B; [7B 77 98, 05, 05]
+A15A; [7B 7F 91, 05, 05]
-A15C; [7B 77 9F, 05, 05]
+A15B; [7B 7F 98, 05, 05]
-A15D; [7B 77 A6, 05, 05]
+A15C; [7B 7F 9F, 05, 05]
-A15E; [7B 77 AD, 05, 05]
+A15D; [7B 7F A6, 05, 05]
-A15F; [7B 77 B4, 05, 05]
+A15E; [7B 7F AD, 05, 05]
-A160; [7B 77 BB, 05, 05]
+A15F; [7B 7F B4, 05, 05]
-A161; [7B 77 C2, 05, 05]
+A160; [7B 7F BB, 05, 05]
-A162; [7B 77 C9, 05, 05]
+A161; [7B 7F C2, 05, 05]
-A163; [7B 77 D0, 05, 05]
+A162; [7B 7F C9, 05, 05]
-A164; [7B 77 D7, 05, 05]
+A163; [7B 7F D0, 05, 05]
-A165; [7B 77 DE, 05, 05]
+A164; [7B 7F D7, 05, 05]
-A166; [7B 77 E5, 05, 05]
+A165; [7B 7F DE, 05, 05]
-A167; [7B 77 EC, 05, 05]
+A166; [7B 7F E5, 05, 05]
-A168; [7B 77 F3, 05, 05]
+A167; [7B 7F EC, 05, 05]
-A169; [7B 77 FA, 05, 05]
+A168; [7B 7F F3, 05, 05]
-A16A; [7B 78 03, 05, 05]
+A169; [7B 7F FA, 05, 05]
-A16B; [7B 78 0A, 05, 05]
+A16A; [7B 80 03, 05, 05]
-A16C; [7B 78 11, 05, 05]
+A16B; [7B 80 0A, 05, 05]
-A16D; [7B 78 18, 05, 05]
+A16C; [7B 80 11, 05, 05]
-A16E; [7B 78 1F, 05, 05]
+A16D; [7B 80 18, 05, 05]
-A16F; [7B 78 26, 05, 05]
+A16E; [7B 80 1F, 05, 05]
-A170; [7B 78 2D, 05, 05]
+A16F; [7B 80 26, 05, 05]
-A171; [7B 78 34, 05, 05]
+A170; [7B 80 2D, 05, 05]
-A172; [7B 78 3B, 05, 05]
+A171; [7B 80 34, 05, 05]
-A173; [7B 78 42, 05, 05]
+A172; [7B 80 3B, 05, 05]
-A174; [7B 78 49, 05, 05]
+A173; [7B 80 42, 05, 05]
-A175; [7B 78 50, 05, 05]
+A174; [7B 80 49, 05, 05]
-A176; [7B 78 57, 05, 05]
+A175; [7B 80 50, 05, 05]
-A177; [7B 78 5E, 05, 05]
+A176; [7B 80 57, 05, 05]
-A178; [7B 78 65, 05, 05]
+A177; [7B 80 5E, 05, 05]
-A179; [7B 78 6C, 05, 05]
+A178; [7B 80 65, 05, 05]
-A17A; [7B 78 73, 05, 05]
+A179; [7B 80 6C, 05, 05]
-A17B; [7B 78 7A, 05, 05]
+A17A; [7B 80 73, 05, 05]
-A17C; [7B 78 81, 05, 05]
+A17B; [7B 80 7A, 05, 05]
-A17D; [7B 78 88, 05, 05]
+A17C; [7B 80 81, 05, 05]
-A17E; [7B 78 8F, 05, 05]
+A17D; [7B 80 88, 05, 05]
-A17F; [7B 78 96, 05, 05]
+A17E; [7B 80 8F, 05, 05]
-A180; [7B 78 9D, 05, 05]
+A17F; [7B 80 96, 05, 05]
-A181; [7B 78 A4, 05, 05]
+A180; [7B 80 9D, 05, 05]
-A182; [7B 78 AB, 05, 05]
+A181; [7B 80 A4, 05, 05]
-A183; [7B 78 B2, 05, 05]
+A182; [7B 80 AB, 05, 05]
-A184; [7B 78 B9, 05, 05]
+A183; [7B 80 B2, 05, 05]
-A185; [7B 78 C0, 05, 05]
+A184; [7B 80 B9, 05, 05]
-A186; [7B 78 C7, 05, 05]
+A185; [7B 80 C0, 05, 05]
-A187; [7B 78 CE, 05, 05]
+A186; [7B 80 C7, 05, 05]
-A188; [7B 78 D5, 05, 05]
+A187; [7B 80 CE, 05, 05]
-A189; [7B 78 DC, 05, 05]
+A188; [7B 80 D5, 05, 05]
-A18A; [7B 78 E3, 05, 05]
+A189; [7B 80 DC, 05, 05]
-A18B; [7B 78 EA, 05, 05]
+A18A; [7B 80 E3, 05, 05]
-A18C; [7B 78 F1, 05, 05]
+A18B; [7B 80 EA, 05, 05]
-A18D; [7B 78 F8, 05, 05]
+A18C; [7B 80 F1, 05, 05]
-A18E; [7B 78 FF, 05, 05]
+A18D; [7B 80 F8, 05, 05]
-A18F; [7B 79 08, 05, 05]
+A18E; [7B 80 FF, 05, 05]
-A190; [7B 79 0F, 05, 05]
+A18F; [7B 81 08, 05, 05]
-A191; [7B 79 16, 05, 05]
+A190; [7B 81 0F, 05, 05]
-A192; [7B 79 1D, 05, 05]
+A191; [7B 81 16, 05, 05]
-A193; [7B 79 24, 05, 05]
+A192; [7B 81 1D, 05, 05]
-A194; [7B 79 2B, 05, 05]
+A193; [7B 81 24, 05, 05]
-A195; [7B 79 32, 05, 05]
+A194; [7B 81 2B, 05, 05]
-A196; [7B 79 39, 05, 05]
+A195; [7B 81 32, 05, 05]
-A197; [7B 79 40, 05, 05]
+A196; [7B 81 39, 05, 05]
-A198; [7B 79 47, 05, 05]
+A197; [7B 81 40, 05, 05]
-A199; [7B 79 4E, 05, 05]
+A198; [7B 81 47, 05, 05]
-A19A; [7B 79 55, 05, 05]
+A199; [7B 81 4E, 05, 05]
-A19B; [7B 79 5C, 05, 05]
+A19A; [7B 81 55, 05, 05]
-A19C; [7B 79 63, 05, 05]
+A19B; [7B 81 5C, 05, 05]
-A19D; [7B 79 6A, 05, 05]
+A19C; [7B 81 63, 05, 05]
-A19E; [7B 79 71, 05, 05]
+A19D; [7B 81 6A, 05, 05]
-A19F; [7B 79 78, 05, 05]
+A19E; [7B 81 71, 05, 05]
-A1A0; [7B 79 7F, 05, 05]
+A19F; [7B 81 78, 05, 05]
-A1A1; [7B 79 86, 05, 05]
+A1A0; [7B 81 7F, 05, 05]
-A1A2; [7B 79 8D, 05, 05]
+A1A1; [7B 81 86, 05, 05]
-A1A3; [7B 79 94, 05, 05]
+A1A2; [7B 81 8D, 05, 05]
-A1A4; [7B 79 9B, 05, 05]
+A1A3; [7B 81 94, 05, 05]
-A1A5; [7B 79 A2, 05, 05]
+A1A4; [7B 81 9B, 05, 05]
-A1A6; [7B 79 A9, 05, 05]
+A1A5; [7B 81 A2, 05, 05]
-A1A7; [7B 79 B0, 05, 05]
+A1A6; [7B 81 A9, 05, 05]
-A1A8; [7B 79 B7, 05, 05]
+A1A7; [7B 81 B0, 05, 05]
-A1A9; [7B 79 BE, 05, 05]
+A1A8; [7B 81 B7, 05, 05]
-A1AA; [7B 79 C5, 05, 05]
+A1A9; [7B 81 BE, 05, 05]
-A1AB; [7B 79 CC, 05, 05]
+A1AA; [7B 81 C5, 05, 05]
-A1AC; [7B 79 D3, 05, 05]
+A1AB; [7B 81 CC, 05, 05]
-A1AD; [7B 79 DA, 05, 05]
+A1AC; [7B 81 D3, 05, 05]
-A1AE; [7B 79 E1, 05, 05]
+A1AD; [7B 81 DA, 05, 05]
-A1AF; [7B 79 E8, 05, 05]
+A1AE; [7B 81 E1, 05, 05]
-A1B0; [7B 79 EF, 05, 05]
+A1AF; [7B 81 E8, 05, 05]
-A1B1; [7B 79 F6, 05, 05]
+A1B0; [7B 81 EF, 05, 05]
-A1B2; [7B 79 FD, 05, 05]
+A1B1; [7B 81 F6, 05, 05]
-A1B3; [7B 7A 06, 05, 05]
+A1B2; [7B 81 FD, 05, 05]
-A1B4; [7B 7A 0D, 05, 05]
+A1B3; [7B 82 06, 05, 05]
-A1B5; [7B 7A 14, 05, 05]
+A1B4; [7B 82 0D, 05, 05]
-A1B6; [7B 7A 1B, 05, 05]
+A1B5; [7B 82 14, 05, 05]
-A1B7; [7B 7A 22, 05, 05]
+A1B6; [7B 82 1B, 05, 05]
-A1B8; [7B 7A 29, 05, 05]
+A1B7; [7B 82 22, 05, 05]
-A1B9; [7B 7A 30, 05, 05]
+A1B8; [7B 82 29, 05, 05]
-A1BA; [7B 7A 37, 05, 05]
+A1B9; [7B 82 30, 05, 05]
-A1BB; [7B 7A 3E, 05, 05]
+A1BA; [7B 82 37, 05, 05]
-A1BC; [7B 7A 45, 05, 05]
+A1BB; [7B 82 3E, 05, 05]
-A1BD; [7B 7A 4C, 05, 05]
+A1BC; [7B 82 45, 05, 05]
-A1BE; [7B 7A 53, 05, 05]
+A1BD; [7B 82 4C, 05, 05]
-A1BF; [7B 7A 5A, 05, 05]
+A1BE; [7B 82 53, 05, 05]
-A1C0; [7B 7A 61, 05, 05]
+A1BF; [7B 82 5A, 05, 05]
-A1C1; [7B 7A 68, 05, 05]
+A1C0; [7B 82 61, 05, 05]
-A1C2; [7B 7A 6F, 05, 05]
+A1C1; [7B 82 68, 05, 05]
-A1C3; [7B 7A 76, 05, 05]
+A1C2; [7B 82 6F, 05, 05]
-A1C4; [7B 7A 7D, 05, 05]
+A1C3; [7B 82 76, 05, 05]
-A1C5; [7B 7A 84, 05, 05]
+A1C4; [7B 82 7D, 05, 05]
-A1C6; [7B 7A 8B, 05, 05]
+A1C5; [7B 82 84, 05, 05]
-A1C7; [7B 7A 92, 05, 05]
+A1C6; [7B 82 8B, 05, 05]
-A1C8; [7B 7A 99, 05, 05]
+A1C7; [7B 82 92, 05, 05]
-A1C9; [7B 7A A0, 05, 05]
+A1C8; [7B 82 99, 05, 05]
-A1CA; [7B 7A A7, 05, 05]
+A1C9; [7B 82 A0, 05, 05]
-A1CB; [7B 7A AE, 05, 05]
+A1CA; [7B 82 A7, 05, 05]
-A1CC; [7B 7A B5, 05, 05]
+A1CB; [7B 82 AE, 05, 05]
-A1CD; [7B 7A BC, 05, 05]
+A1CC; [7B 82 B5, 05, 05]
-A1CE; [7B 7A C3, 05, 05]
+A1CD; [7B 82 BC, 05, 05]
-A1CF; [7B 7A CA, 05, 05]
+A1CE; [7B 82 C3, 05, 05]
-A1D0; [7B 7A D1, 05, 05]
+A1CF; [7B 82 CA, 05, 05]
-A1D1; [7B 7A D8, 05, 05]
+A1D0; [7B 82 D1, 05, 05]
-A1D2; [7B 7A DF, 05, 05]
+A1D1; [7B 82 D8, 05, 05]
-A1D3; [7B 7A E6, 05, 05]
+A1D2; [7B 82 DF, 05, 05]
-A1D4; [7B 7A ED, 05, 05]
+A1D3; [7B 82 E6, 05, 05]
-A1D5; [7B 7A F4, 05, 05]
+A1D4; [7B 82 ED, 05, 05]
-A1D6; [7B 7A FB, 05, 05]
+A1D5; [7B 82 F4, 05, 05]
-A1D7; [7B 7B 04, 05, 05]
+A1D6; [7B 82 FB, 05, 05]
-A1D8; [7B 7B 0B, 05, 05]
+A1D7; [7B 83 04, 05, 05]
-A1D9; [7B 7B 12, 05, 05]
+A1D8; [7B 83 0B, 05, 05]
-A1DA; [7B 7B 19, 05, 05]
+A1D9; [7B 83 12, 05, 05]
-A1DB; [7B 7B 20, 05, 05]
+A1DA; [7B 83 19, 05, 05]
-A1DC; [7B 7B 27, 05, 05]
+A1DB; [7B 83 20, 05, 05]
-A1DD; [7B 7B 2E, 05, 05]
+A1DC; [7B 83 27, 05, 05]
-A1DE; [7B 7B 35, 05, 05]
+A1DD; [7B 83 2E, 05, 05]
-A1DF; [7B 7B 3C, 05, 05]
+A1DE; [7B 83 35, 05, 05]
-A1E0; [7B 7B 43, 05, 05]
+A1DF; [7B 83 3C, 05, 05]
-A1E1; [7B 7B 4A, 05, 05]
+A1E0; [7B 83 43, 05, 05]
-A1E2; [7B 7B 51, 05, 05]
+A1E1; [7B 83 4A, 05, 05]
-A1E3; [7B 7B 58, 05, 05]
+A1E2; [7B 83 51, 05, 05]
-A1E4; [7B 7B 5F, 05, 05]
+A1E3; [7B 83 58, 05, 05]
-A1E5; [7B 7B 66, 05, 05]
+A1E4; [7B 83 5F, 05, 05]
-A1E6; [7B 7B 6D, 05, 05]
+A1E5; [7B 83 66, 05, 05]
-A1E7; [7B 7B 74, 05, 05]
+A1E6; [7B 83 6D, 05, 05]
-A1E8; [7B 7B 7B, 05, 05]
+A1E7; [7B 83 74, 05, 05]
-A1E9; [7B 7B 82, 05, 05]
+A1E8; [7B 83 7B, 05, 05]
-A1EA; [7B 7B 89, 05, 05]
+A1E9; [7B 83 82, 05, 05]
-A1EB; [7B 7B 90, 05, 05]
+A1EA; [7B 83 89, 05, 05]
-A1EC; [7B 7B 97, 05, 05]
+A1EB; [7B 83 90, 05, 05]
-A1ED; [7B 7B 9E, 05, 05]
+A1EC; [7B 83 97, 05, 05]
-A1EE; [7B 7B A5, 05, 05]
+A1ED; [7B 83 9E, 05, 05]
-A1EF; [7B 7B AC, 05, 05]
+A1EE; [7B 83 A5, 05, 05]
-A1F0; [7B 7B B3, 05, 05]
+A1EF; [7B 83 AC, 05, 05]
-A1F1; [7B 7B BA, 05, 05]
+A1F0; [7B 83 B3, 05, 05]
-A1F2; [7B 7B C1, 05, 05]
+A1F1; [7B 83 BA, 05, 05]
-A1F3; [7B 7B C8, 05, 05]
+A1F2; [7B 83 C1, 05, 05]
-A1F4; [7B 7B CF, 05, 05]
+A1F3; [7B 83 C8, 05, 05]
-A1F5; [7B 7B D6, 05, 05]
+A1F4; [7B 83 CF, 05, 05]
-A1F6; [7B 7B DD, 05, 05]
+A1F5; [7B 83 D6, 05, 05]
-A1F7; [7B 7B E4, 05, 05]
+A1F6; [7B 83 DD, 05, 05]
-A1F8; [7B 7B EB, 05, 05]
+A1F7; [7B 83 E4, 05, 05]
-A1F9; [7B 7B F2, 05, 05]
+A1F8; [7B 83 EB, 05, 05]
-A1FA; [7B 7B F9, 05, 05]
+A1F9; [7B 83 F2, 05, 05]
-A1FB; [7B 7C 02, 05, 05]
+A1FA; [7B 83 F9, 05, 05]
-A1FC; [7B 7C 09, 05, 05]
+A1FB; [7B 84 02, 05, 05]
-A1FD; [7B 7C 10, 05, 05]
+A1FC; [7B 84 09, 05, 05]
-A1FE; [7B 7C 17, 05, 05]
+A1FD; [7B 84 10, 05, 05]
-A1FF; [7B 7C 1E, 05, 05]
+A1FE; [7B 84 17, 05, 05]
-A200; [7B 7C 25, 05, 05]
+A1FF; [7B 84 1E, 05, 05]
-A201; [7B 7C 2C, 05, 05]
+A200; [7B 84 25, 05, 05]
-A202; [7B 7C 33, 05, 05]
+A201; [7B 84 2C, 05, 05]
-A203; [7B 7C 3A, 05, 05]
+A202; [7B 84 33, 05, 05]
-A204; [7B 7C 41, 05, 05]
+A203; [7B 84 3A, 05, 05]
-A205; [7B 7C 48, 05, 05]
+A204; [7B 84 41, 05, 05]
-A206; [7B 7C 4F, 05, 05]
+A205; [7B 84 48, 05, 05]
-A207; [7B 7C 56, 05, 05]
+A206; [7B 84 4F, 05, 05]
-A208; [7B 7C 5D, 05, 05]
+A207; [7B 84 56, 05, 05]
-A209; [7B 7C 64, 05, 05]
+A208; [7B 84 5D, 05, 05]
-A20A; [7B 7C 6B, 05, 05]
+A209; [7B 84 64, 05, 05]
-A20B; [7B 7C 72, 05, 05]
+A20A; [7B 84 6B, 05, 05]
-A20C; [7B 7C 79, 05, 05]
+A20B; [7B 84 72, 05, 05]
-A20D; [7B 7C 80, 05, 05]
+A20C; [7B 84 79, 05, 05]
-A20E; [7B 7C 87, 05, 05]
+A20D; [7B 84 80, 05, 05]
-A20F; [7B 7C 8E, 05, 05]
+A20E; [7B 84 87, 05, 05]
-A210; [7B 7C 95, 05, 05]
+A20F; [7B 84 8E, 05, 05]
-A211; [7B 7C 9C, 05, 05]
+A210; [7B 84 95, 05, 05]
-A212; [7B 7C A3, 05, 05]
+A211; [7B 84 9C, 05, 05]
-A213; [7B 7C AA, 05, 05]
+A212; [7B 84 A3, 05, 05]
-A214; [7B 7C B1, 05, 05]
+A213; [7B 84 AA, 05, 05]
-A215; [7B 7C B8, 05, 05]
+A214; [7B 84 B1, 05, 05]
-A216; [7B 7C BF, 05, 05]
+A215; [7B 84 B8, 05, 05]
-A217; [7B 7C C6, 05, 05]
+A216; [7B 84 BF, 05, 05]
-A218; [7B 7C CD, 05, 05]
+A217; [7B 84 C6, 05, 05]
-A219; [7B 7C D4, 05, 05]
+A218; [7B 84 CD, 05, 05]
-A21A; [7B 7C DB, 05, 05]
+A219; [7B 84 D4, 05, 05]
-A21B; [7B 7C E2, 05, 05]
+A21A; [7B 84 DB, 05, 05]
-A21C; [7B 7C E9, 05, 05]
+A21B; [7B 84 E2, 05, 05]
-A21D; [7B 7C F0, 05, 05]
+A21C; [7B 84 E9, 05, 05]
-A21E; [7B 7C F7, 05, 05]
+A21D; [7B 84 F0, 05, 05]
-A21F; [7B 7C FE, 05, 05]
+A21E; [7B 84 F7, 05, 05]
-A220; [7B 7D 07, 05, 05]
+A21F; [7B 84 FE, 05, 05]
-A221; [7B 7D 0E, 05, 05]
+A220; [7B 85 07, 05, 05]
-A222; [7B 7D 15, 05, 05]
+A221; [7B 85 0E, 05, 05]
-A223; [7B 7D 1C, 05, 05]
+A222; [7B 85 15, 05, 05]
-A224; [7B 7D 23, 05, 05]
+A223; [7B 85 1C, 05, 05]
-A225; [7B 7D 2A, 05, 05]
+A224; [7B 85 23, 05, 05]
-A226; [7B 7D 31, 05, 05]
+A225; [7B 85 2A, 05, 05]
-A227; [7B 7D 38, 05, 05]
+A226; [7B 85 31, 05, 05]
-A228; [7B 7D 3F, 05, 05]
+A227; [7B 85 38, 05, 05]
-A229; [7B 7D 46, 05, 05]
+A228; [7B 85 3F, 05, 05]
-A22A; [7B 7D 4D, 05, 05]
+A229; [7B 85 46, 05, 05]
-A22B; [7B 7D 54, 05, 05]
+A22A; [7B 85 4D, 05, 05]
-A22C; [7B 7D 5B, 05, 05]
+A22B; [7B 85 54, 05, 05]
-A22D; [7B 7D 62, 05, 05]
+A22C; [7B 85 5B, 05, 05]
-A22E; [7B 7D 69, 05, 05]
+A22D; [7B 85 62, 05, 05]
-A22F; [7B 7D 70, 05, 05]
+A22E; [7B 85 69, 05, 05]
-A230; [7B 7D 77, 05, 05]
+A22F; [7B 85 70, 05, 05]
-A231; [7B 7D 7E, 05, 05]
+A230; [7B 85 77, 05, 05]
-A232; [7B 7D 85, 05, 05]
+A231; [7B 85 7E, 05, 05]
-A233; [7B 7D 8C, 05, 05]
+A232; [7B 85 85, 05, 05]
-A234; [7B 7D 93, 05, 05]
+A233; [7B 85 8C, 05, 05]
-A235; [7B 7D 9A, 05, 05]
+A234; [7B 85 93, 05, 05]
-A236; [7B 7D A1, 05, 05]
+A235; [7B 85 9A, 05, 05]
-A237; [7B 7D A8, 05, 05]
+A236; [7B 85 A1, 05, 05]
-A238; [7B 7D AF, 05, 05]
+A237; [7B 85 A8, 05, 05]
-A239; [7B 7D B6, 05, 05]
+A238; [7B 85 AF, 05, 05]
-A23A; [7B 7D BD, 05, 05]
+A239; [7B 85 B6, 05, 05]
-A23B; [7B 7D C4, 05, 05]
+A23A; [7B 85 BD, 05, 05]
-A23C; [7B 7D CB, 05, 05]
+A23B; [7B 85 C4, 05, 05]
-A23D; [7B 7D D2, 05, 05]
+A23C; [7B 85 CB, 05, 05]
-A23E; [7B 7D D9, 05, 05]
+A23D; [7B 85 D2, 05, 05]
-A23F; [7B 7D E0, 05, 05]
+A23E; [7B 85 D9, 05, 05]
-A240; [7B 7D E7, 05, 05]
+A23F; [7B 85 E0, 05, 05]
-A241; [7B 7D EE, 05, 05]
+A240; [7B 85 E7, 05, 05]
-A242; [7B 7D F5, 05, 05]
+A241; [7B 85 EE, 05, 05]
-A243; [7B 7D FC, 05, 05]
+A242; [7B 85 F5, 05, 05]
-A244; [7B 7E 05, 05, 05]
+A243; [7B 85 FC, 05, 05]
-A245; [7B 7E 0C, 05, 05]
+A244; [7B 86 05, 05, 05]
-A246; [7B 7E 13, 05, 05]
+A245; [7B 86 0C, 05, 05]
-A247; [7B 7E 1A, 05, 05]
+A246; [7B 86 13, 05, 05]
-A248; [7B 7E 21, 05, 05]
+A247; [7B 86 1A, 05, 05]
-A249; [7B 7E 28, 05, 05]
+A248; [7B 86 21, 05, 05]
-A24A; [7B 7E 2F, 05, 05]
+A249; [7B 86 28, 05, 05]
-A24B; [7B 7E 36, 05, 05]
+A24A; [7B 86 2F, 05, 05]
-A24C; [7B 7E 3D, 05, 05]
+A24B; [7B 86 36, 05, 05]
-A24D; [7B 7E 44, 05, 05]
+A24C; [7B 86 3D, 05, 05]
-A24E; [7B 7E 4B, 05, 05]
+A24D; [7B 86 44, 05, 05]
-A24F; [7B 7E 52, 05, 05]
+A24E; [7B 86 4B, 05, 05]
-A250; [7B 7E 59, 05, 05]
+A24F; [7B 86 52, 05, 05]
-A251; [7B 7E 60, 05, 05]
+A250; [7B 86 59, 05, 05]
-A252; [7B 7E 67, 05, 05]
+A251; [7B 86 60, 05, 05]
-A253; [7B 7E 6E, 05, 05]
+A252; [7B 86 67, 05, 05]
-A254; [7B 7E 75, 05, 05]
+A253; [7B 86 6E, 05, 05]
-A255; [7B 7E 7C, 05, 05]
+A254; [7B 86 75, 05, 05]
-A256; [7B 7E 83, 05, 05]
+A255; [7B 86 7C, 05, 05]
-A257; [7B 7E 8A, 05, 05]
+A256; [7B 86 83, 05, 05]
-A258; [7B 7E 91, 05, 05]
+A257; [7B 86 8A, 05, 05]
-A259; [7B 7E 98, 05, 05]
+A258; [7B 86 91, 05, 05]
-A25A; [7B 7E 9F, 05, 05]
+A259; [7B 86 98, 05, 05]
-A25B; [7B 7E A6, 05, 05]
+A25A; [7B 86 9F, 05, 05]
-A25C; [7B 7E AD, 05, 05]
+A25B; [7B 86 A6, 05, 05]
-A25D; [7B 7E B4, 05, 05]
+A25C; [7B 86 AD, 05, 05]
-A25E; [7B 7E BB, 05, 05]
+A25D; [7B 86 B4, 05, 05]
-A25F; [7B 7E C2, 05, 05]
+A25E; [7B 86 BB, 05, 05]
-A260; [7B 7E C9, 05, 05]
+A25F; [7B 86 C2, 05, 05]
-A261; [7B 7E D0, 05, 05]
+A260; [7B 86 C9, 05, 05]
-A262; [7B 7E D7, 05, 05]
+A261; [7B 86 D0, 05, 05]
-A263; [7B 7E DE, 05, 05]
+A262; [7B 86 D7, 05, 05]
-A264; [7B 7E E5, 05, 05]
+A263; [7B 86 DE, 05, 05]
-A265; [7B 7E EC, 05, 05]
+A264; [7B 86 E5, 05, 05]
-A266; [7B 7E F3, 05, 05]
+A265; [7B 86 EC, 05, 05]
-A267; [7B 7E FA, 05, 05]
+A266; [7B 86 F3, 05, 05]
-A268; [7B 7F 03, 05, 05]
+A267; [7B 86 FA, 05, 05]
-A269; [7B 7F 0A, 05, 05]
+A268; [7B 87 03, 05, 05]
-A26A; [7B 7F 11, 05, 05]
+A269; [7B 87 0A, 05, 05]
-A26B; [7B 7F 18, 05, 05]
+A26A; [7B 87 11, 05, 05]
-A26C; [7B 7F 1F, 05, 05]
+A26B; [7B 87 18, 05, 05]
-A26D; [7B 7F 26, 05, 05]
+A26C; [7B 87 1F, 05, 05]
-A26E; [7B 7F 2D, 05, 05]
+A26D; [7B 87 26, 05, 05]
-A26F; [7B 7F 34, 05, 05]
+A26E; [7B 87 2D, 05, 05]
-A270; [7B 7F 3B, 05, 05]
+A26F; [7B 87 34, 05, 05]
-A271; [7B 7F 42, 05, 05]
+A270; [7B 87 3B, 05, 05]
-A272; [7B 7F 49, 05, 05]
+A271; [7B 87 42, 05, 05]
-A273; [7B 7F 50, 05, 05]
+A272; [7B 87 49, 05, 05]
-A274; [7B 7F 57, 05, 05]
+A273; [7B 87 50, 05, 05]
-A275; [7B 7F 5E, 05, 05]
+A274; [7B 87 57, 05, 05]
-A276; [7B 7F 65, 05, 05]
+A275; [7B 87 5E, 05, 05]
-A277; [7B 7F 6C, 05, 05]
+A276; [7B 87 65, 05, 05]
-A278; [7B 7F 73, 05, 05]
+A277; [7B 87 6C, 05, 05]
-A279; [7B 7F 7A, 05, 05]
+A278; [7B 87 73, 05, 05]
-A27A; [7B 7F 81, 05, 05]
+A279; [7B 87 7A, 05, 05]
-A27B; [7B 7F 88, 05, 05]
+A27A; [7B 87 81, 05, 05]
-A27C; [7B 7F 8F, 05, 05]
+A27B; [7B 87 88, 05, 05]
-A27D; [7B 7F 96, 05, 05]
+A27C; [7B 87 8F, 05, 05]
-A27E; [7B 7F 9D, 05, 05]
+A27D; [7B 87 96, 05, 05]
-A27F; [7B 7F A4, 05, 05]
+A27E; [7B 87 9D, 05, 05]
-A280; [7B 7F AB, 05, 05]
+A27F; [7B 87 A4, 05, 05]
-A281; [7B 7F B2, 05, 05]
+A280; [7B 87 AB, 05, 05]
-A282; [7B 7F B9, 05, 05]
+A281; [7B 87 B2, 05, 05]
-A283; [7B 7F C0, 05, 05]
+A282; [7B 87 B9, 05, 05]
-A284; [7B 7F C7, 05, 05]
+A283; [7B 87 C0, 05, 05]
-A285; [7B 7F CE, 05, 05]
+A284; [7B 87 C7, 05, 05]
-A286; [7B 7F D5, 05, 05]
+A285; [7B 87 CE, 05, 05]
-A287; [7B 7F DC, 05, 05]
+A286; [7B 87 D5, 05, 05]
-A288; [7B 7F E3, 05, 05]
+A287; [7B 87 DC, 05, 05]
-A289; [7B 7F EA, 05, 05]
+A288; [7B 87 E3, 05, 05]
-A28A; [7B 7F F1, 05, 05]
+A289; [7B 87 EA, 05, 05]
-A28B; [7B 7F F8, 05, 05]
+A28A; [7B 87 F1, 05, 05]
-A28C; [7B 7F FF, 05, 05]
+A28B; [7B 87 F8, 05, 05]
-A28D; [7B 80 08, 05, 05]
+A28C; [7B 87 FF, 05, 05]
-A28E; [7B 80 0F, 05, 05]
+A28D; [7B 88 08, 05, 05]
-A28F; [7B 80 16, 05, 05]
+A28E; [7B 88 0F, 05, 05]
-A290; [7B 80 1D, 05, 05]
+A28F; [7B 88 16, 05, 05]
-A291; [7B 80 24, 05, 05]
+A290; [7B 88 1D, 05, 05]
-A292; [7B 80 2B, 05, 05]
+A291; [7B 88 24, 05, 05]
-A293; [7B 80 32, 05, 05]
+A292; [7B 88 2B, 05, 05]
-A294; [7B 80 39, 05, 05]
+A293; [7B 88 32, 05, 05]
-A295; [7B 80 40, 05, 05]
+A294; [7B 88 39, 05, 05]
-A296; [7B 80 47, 05, 05]
+A295; [7B 88 40, 05, 05]
-A297; [7B 80 4E, 05, 05]
+A296; [7B 88 47, 05, 05]
-A298; [7B 80 55, 05, 05]
+A297; [7B 88 4E, 05, 05]
-A299; [7B 80 5C, 05, 05]
+A298; [7B 88 55, 05, 05]
-A29A; [7B 80 63, 05, 05]
+A299; [7B 88 5C, 05, 05]
-A29B; [7B 80 6A, 05, 05]
+A29A; [7B 88 63, 05, 05]
-A29C; [7B 80 71, 05, 05]
+A29B; [7B 88 6A, 05, 05]
-A29D; [7B 80 78, 05, 05]
+A29C; [7B 88 71, 05, 05]
-A29E; [7B 80 7F, 05, 05]
+A29D; [7B 88 78, 05, 05]
-A29F; [7B 80 86, 05, 05]
+A29E; [7B 88 7F, 05, 05]
-A2A0; [7B 80 8D, 05, 05]
+A29F; [7B 88 86, 05, 05]
-A2A1; [7B 80 94, 05, 05]
+A2A0; [7B 88 8D, 05, 05]
-A2A2; [7B 80 9B, 05, 05]
+A2A1; [7B 88 94, 05, 05]
-A2A3; [7B 80 A2, 05, 05]
+A2A2; [7B 88 9B, 05, 05]
-A2A4; [7B 80 A9, 05, 05]
+A2A3; [7B 88 A2, 05, 05]
-A2A5; [7B 80 B0, 05, 05]
+A2A4; [7B 88 A9, 05, 05]
-A2A6; [7B 80 B7, 05, 05]
+A2A5; [7B 88 B0, 05, 05]
-A2A7; [7B 80 BE, 05, 05]
+A2A6; [7B 88 B7, 05, 05]
-A2A8; [7B 80 C5, 05, 05]
+A2A7; [7B 88 BE, 05, 05]
-A2A9; [7B 80 CC, 05, 05]
+A2A8; [7B 88 C5, 05, 05]
-A2AA; [7B 80 D3, 05, 05]
+A2A9; [7B 88 CC, 05, 05]
-A2AB; [7B 80 DA, 05, 05]
+A2AA; [7B 88 D3, 05, 05]
-A2AC; [7B 80 E1, 05, 05]
+A2AB; [7B 88 DA, 05, 05]
-A2AD; [7B 80 E8, 05, 05]
+A2AC; [7B 88 E1, 05, 05]
-A2AE; [7B 80 EF, 05, 05]
+A2AD; [7B 88 E8, 05, 05]
-A2AF; [7B 80 F6, 05, 05]
+A2AE; [7B 88 EF, 05, 05]
-A2B0; [7B 80 FD, 05, 05]
+A2AF; [7B 88 F6, 05, 05]
-A2B1; [7B 81 06, 05, 05]
+A2B0; [7B 88 FD, 05, 05]
-A2B2; [7B 81 0D, 05, 05]
+A2B1; [7B 89 06, 05, 05]
-A2B3; [7B 81 14, 05, 05]
+A2B2; [7B 89 0D, 05, 05]
-A2B4; [7B 81 1B, 05, 05]
+A2B3; [7B 89 14, 05, 05]
-A2B5; [7B 81 22, 05, 05]
+A2B4; [7B 89 1B, 05, 05]
-A2B6; [7B 81 29, 05, 05]
+A2B5; [7B 89 22, 05, 05]
-A2B7; [7B 81 30, 05, 05]
+A2B6; [7B 89 29, 05, 05]
-A2B8; [7B 81 37, 05, 05]
+A2B7; [7B 89 30, 05, 05]
-A2B9; [7B 81 3E, 05, 05]
+A2B8; [7B 89 37, 05, 05]
-A2BA; [7B 81 45, 05, 05]
+A2B9; [7B 89 3E, 05, 05]
-A2BB; [7B 81 4C, 05, 05]
+A2BA; [7B 89 45, 05, 05]
-A2BC; [7B 81 53, 05, 05]
+A2BB; [7B 89 4C, 05, 05]
-A2BD; [7B 81 5A, 05, 05]
+A2BC; [7B 89 53, 05, 05]
-A2BE; [7B 81 61, 05, 05]
+A2BD; [7B 89 5A, 05, 05]
-A2BF; [7B 81 68, 05, 05]
+A2BE; [7B 89 61, 05, 05]
-A2C0; [7B 81 6F, 05, 05]
+A2BF; [7B 89 68, 05, 05]
-A2C1; [7B 81 76, 05, 05]
+A2C0; [7B 89 6F, 05, 05]
-A2C2; [7B 81 7D, 05, 05]
+A2C1; [7B 89 76, 05, 05]
-A2C3; [7B 81 84, 05, 05]
+A2C2; [7B 89 7D, 05, 05]
-A2C4; [7B 81 8B, 05, 05]
+A2C3; [7B 89 84, 05, 05]
-A2C5; [7B 81 92, 05, 05]
+A2C4; [7B 89 8B, 05, 05]
-A2C6; [7B 81 99, 05, 05]
+A2C5; [7B 89 92, 05, 05]
-A2C7; [7B 81 A0, 05, 05]
+A2C6; [7B 89 99, 05, 05]
-A2C8; [7B 81 A7, 05, 05]
+A2C7; [7B 89 A0, 05, 05]
-A2C9; [7B 81 AE, 05, 05]
+A2C8; [7B 89 A7, 05, 05]
-A2CA; [7B 81 B5, 05, 05]
+A2C9; [7B 89 AE, 05, 05]
-A2CB; [7B 81 BC, 05, 05]
+A2CA; [7B 89 B5, 05, 05]
-A2CC; [7B 81 C3, 05, 05]
+A2CB; [7B 89 BC, 05, 05]
-A2CD; [7B 81 CA, 05, 05]
+A2CC; [7B 89 C3, 05, 05]
-A2CE; [7B 81 D1, 05, 05]
+A2CD; [7B 89 CA, 05, 05]
-A2CF; [7B 81 D8, 05, 05]
+A2CE; [7B 89 D1, 05, 05]
-A2D0; [7B 81 DF, 05, 05]
+A2CF; [7B 89 D8, 05, 05]
-A2D1; [7B 81 E6, 05, 05]
+A2D0; [7B 89 DF, 05, 05]
-A2D2; [7B 81 ED, 05, 05]
+A2D1; [7B 89 E6, 05, 05]
-A2D3; [7B 81 F4, 05, 05]
+A2D2; [7B 89 ED, 05, 05]
-A2D4; [7B 81 FB, 05, 05]
+A2D3; [7B 89 F4, 05, 05]
-A2D5; [7B 82 04, 05, 05]
+A2D4; [7B 89 FB, 05, 05]
-A2D6; [7B 82 0B, 05, 05]
+A2D5; [7B 8A 04, 05, 05]
-A2D7; [7B 82 12, 05, 05]
+A2D6; [7B 8A 0B, 05, 05]
-A2D8; [7B 82 19, 05, 05]
+A2D7; [7B 8A 12, 05, 05]
-A2D9; [7B 82 20, 05, 05]
+A2D8; [7B 8A 19, 05, 05]
-A2DA; [7B 82 27, 05, 05]
+A2D9; [7B 8A 20, 05, 05]
-A2DB; [7B 82 2E, 05, 05]
+A2DA; [7B 8A 27, 05, 05]
-A2DC; [7B 82 35, 05, 05]
+A2DB; [7B 8A 2E, 05, 05]
-A2DD; [7B 82 3C, 05, 05]
+A2DC; [7B 8A 35, 05, 05]
-A2DE; [7B 82 43, 05, 05]
+A2DD; [7B 8A 3C, 05, 05]
-A2DF; [7B 82 4A, 05, 05]
+A2DE; [7B 8A 43, 05, 05]
-A2E0; [7B 82 51, 05, 05]
+A2DF; [7B 8A 4A, 05, 05]
-A2E1; [7B 82 58, 05, 05]
+A2E0; [7B 8A 51, 05, 05]
-A2E2; [7B 82 5F, 05, 05]
+A2E1; [7B 8A 58, 05, 05]
-A2E3; [7B 82 66, 05, 05]
+A2E2; [7B 8A 5F, 05, 05]
-A2E4; [7B 82 6D, 05, 05]
+A2E3; [7B 8A 66, 05, 05]
-A2E5; [7B 82 74, 05, 05]
+A2E4; [7B 8A 6D, 05, 05]
-A2E6; [7B 82 7B, 05, 05]
+A2E5; [7B 8A 74, 05, 05]
-A2E7; [7B 82 82, 05, 05]
+A2E6; [7B 8A 7B, 05, 05]
-A2E8; [7B 82 89, 05, 05]
+A2E7; [7B 8A 82, 05, 05]
-A2E9; [7B 82 90, 05, 05]
+A2E8; [7B 8A 89, 05, 05]
-A2EA; [7B 82 97, 05, 05]
+A2E9; [7B 8A 90, 05, 05]
-A2EB; [7B 82 9E, 05, 05]
+A2EA; [7B 8A 97, 05, 05]
-A2EC; [7B 82 A5, 05, 05]
+A2EB; [7B 8A 9E, 05, 05]
-A2ED; [7B 82 AC, 05, 05]
+A2EC; [7B 8A A5, 05, 05]
-A2EE; [7B 82 B3, 05, 05]
+A2ED; [7B 8A AC, 05, 05]
-A2EF; [7B 82 BA, 05, 05]
+A2EE; [7B 8A B3, 05, 05]
-A2F0; [7B 82 C1, 05, 05]
+A2EF; [7B 8A BA, 05, 05]
-A2F1; [7B 82 C8, 05, 05]
+A2F0; [7B 8A C1, 05, 05]
-A2F2; [7B 82 CF, 05, 05]
+A2F1; [7B 8A C8, 05, 05]
-A2F3; [7B 82 D6, 05, 05]
+A2F2; [7B 8A CF, 05, 05]
-A2F4; [7B 82 DD, 05, 05]
+A2F3; [7B 8A D6, 05, 05]
-A2F5; [7B 82 E4, 05, 05]
+A2F4; [7B 8A DD, 05, 05]
-A2F6; [7B 82 EB, 05, 05]
+A2F5; [7B 8A E4, 05, 05]
-A2F7; [7B 82 F2, 05, 05]
+A2F6; [7B 8A EB, 05, 05]
-A2F8; [7B 82 F9, 05, 05]
+A2F7; [7B 8A F2, 05, 05]
-A2F9; [7B 83 02, 05, 05]
+A2F8; [7B 8A F9, 05, 05]
-A2FA; [7B 83 09, 05, 05]
+A2F9; [7B 8B 02, 05, 05]
-A2FB; [7B 83 10, 05, 05]
+A2FA; [7B 8B 09, 05, 05]
-A2FC; [7B 83 17, 05, 05]
+A2FB; [7B 8B 10, 05, 05]
-A2FD; [7B 83 1E, 05, 05]
+A2FC; [7B 8B 17, 05, 05]
-A2FE; [7B 83 25, 05, 05]
+A2FD; [7B 8B 1E, 05, 05]
-A2FF; [7B 83 2C, 05, 05]
+A2FE; [7B 8B 25, 05, 05]
-A300; [7B 83 33, 05, 05]
+A2FF; [7B 8B 2C, 05, 05]
-A301; [7B 83 3A, 05, 05]
+A300; [7B 8B 33, 05, 05]
-A302; [7B 83 41, 05, 05]
+A301; [7B 8B 3A, 05, 05]
-A303; [7B 83 48, 05, 05]
+A302; [7B 8B 41, 05, 05]
-A304; [7B 83 4F, 05, 05]
+A303; [7B 8B 48, 05, 05]
-A305; [7B 83 56, 05, 05]
+A304; [7B 8B 4F, 05, 05]
-A306; [7B 83 5D, 05, 05]
+A305; [7B 8B 56, 05, 05]
-A307; [7B 83 64, 05, 05]
+A306; [7B 8B 5D, 05, 05]
-A308; [7B 83 6B, 05, 05]
+A307; [7B 8B 64, 05, 05]
-A309; [7B 83 72, 05, 05]
+A308; [7B 8B 6B, 05, 05]
-A30A; [7B 83 79, 05, 05]
+A309; [7B 8B 72, 05, 05]
-A30B; [7B 83 80, 05, 05]
+A30A; [7B 8B 79, 05, 05]
-A30C; [7B 83 87, 05, 05]
+A30B; [7B 8B 80, 05, 05]
-A30D; [7B 83 8E, 05, 05]
+A30C; [7B 8B 87, 05, 05]
-A30E; [7B 83 95, 05, 05]
+A30D; [7B 8B 8E, 05, 05]
-A30F; [7B 83 9C, 05, 05]
+A30E; [7B 8B 95, 05, 05]
-A310; [7B 83 A3, 05, 05]
+A30F; [7B 8B 9C, 05, 05]
-A311; [7B 83 AA, 05, 05]
+A310; [7B 8B A3, 05, 05]
-A312; [7B 83 B1, 05, 05]
+A311; [7B 8B AA, 05, 05]
-A313; [7B 83 B8, 05, 05]
+A312; [7B 8B B1, 05, 05]
-A314; [7B 83 BF, 05, 05]
+A313; [7B 8B B8, 05, 05]
-A315; [7B 83 C6, 05, 05]
+A314; [7B 8B BF, 05, 05]
-A316; [7B 83 CD, 05, 05]
+A315; [7B 8B C6, 05, 05]
-A317; [7B 83 D4, 05, 05]
+A316; [7B 8B CD, 05, 05]
-A318; [7B 83 DB, 05, 05]
+A317; [7B 8B D4, 05, 05]
-A319; [7B 83 E2, 05, 05]
+A318; [7B 8B DB, 05, 05]
-A31A; [7B 83 E9, 05, 05]
+A319; [7B 8B E2, 05, 05]
-A31B; [7B 83 F0, 05, 05]
+A31A; [7B 8B E9, 05, 05]
-A31C; [7B 83 F7, 05, 05]
+A31B; [7B 8B F0, 05, 05]
-A31D; [7B 83 FE, 05, 05]
+A31C; [7B 8B F7, 05, 05]
-A31E; [7B 84 07, 05, 05]
+A31D; [7B 8B FE, 05, 05]
-A31F; [7B 84 0E, 05, 05]
+A31E; [7B 8C 07, 05, 05]
-A320; [7B 84 15, 05, 05]
+A31F; [7B 8C 0E, 05, 05]
-A321; [7B 84 1C, 05, 05]
+A320; [7B 8C 15, 05, 05]
-A322; [7B 84 23, 05, 05]
+A321; [7B 8C 1C, 05, 05]
-A323; [7B 84 2A, 05, 05]
+A322; [7B 8C 23, 05, 05]
-A324; [7B 84 31, 05, 05]
+A323; [7B 8C 2A, 05, 05]
-A325; [7B 84 38, 05, 05]
+A324; [7B 8C 31, 05, 05]
-A326; [7B 84 3F, 05, 05]
+A325; [7B 8C 38, 05, 05]
-A327; [7B 84 46, 05, 05]
+A326; [7B 8C 3F, 05, 05]
-A328; [7B 84 4D, 05, 05]
+A327; [7B 8C 46, 05, 05]
-A329; [7B 84 54, 05, 05]
+A328; [7B 8C 4D, 05, 05]
-A32A; [7B 84 5B, 05, 05]
+A329; [7B 8C 54, 05, 05]
-A32B; [7B 84 62, 05, 05]
+A32A; [7B 8C 5B, 05, 05]
-A32C; [7B 84 69, 05, 05]
+A32B; [7B 8C 62, 05, 05]
-A32D; [7B 84 70, 05, 05]
+A32C; [7B 8C 69, 05, 05]
-A32E; [7B 84 77, 05, 05]
+A32D; [7B 8C 70, 05, 05]
-A32F; [7B 84 7E, 05, 05]
+A32E; [7B 8C 77, 05, 05]
-A330; [7B 84 85, 05, 05]
+A32F; [7B 8C 7E, 05, 05]
-A331; [7B 84 8C, 05, 05]
+A330; [7B 8C 85, 05, 05]
-A332; [7B 84 93, 05, 05]
+A331; [7B 8C 8C, 05, 05]
-A333; [7B 84 9A, 05, 05]
+A332; [7B 8C 93, 05, 05]
-A334; [7B 84 A1, 05, 05]
+A333; [7B 8C 9A, 05, 05]
-A335; [7B 84 A8, 05, 05]
+A334; [7B 8C A1, 05, 05]
-A336; [7B 84 AF, 05, 05]
+A335; [7B 8C A8, 05, 05]
-A337; [7B 84 B6, 05, 05]
+A336; [7B 8C AF, 05, 05]
-A338; [7B 84 BD, 05, 05]
+A337; [7B 8C B6, 05, 05]
-A339; [7B 84 C4, 05, 05]
+A338; [7B 8C BD, 05, 05]
-A33A; [7B 84 CB, 05, 05]
+A339; [7B 8C C4, 05, 05]
-A33B; [7B 84 D2, 05, 05]
+A33A; [7B 8C CB, 05, 05]
-A33C; [7B 84 D9, 05, 05]
+A33B; [7B 8C D2, 05, 05]
-A33D; [7B 84 E0, 05, 05]
+A33C; [7B 8C D9, 05, 05]
-A33E; [7B 84 E7, 05, 05]
+A33D; [7B 8C E0, 05, 05]
-A33F; [7B 84 EE, 05, 05]
+A33E; [7B 8C E7, 05, 05]
-A340; [7B 84 F5, 05, 05]
+A33F; [7B 8C EE, 05, 05]
-A341; [7B 84 FC, 05, 05]
+A340; [7B 8C F5, 05, 05]
-A342; [7B 85 05, 05, 05]
+A341; [7B 8C FC, 05, 05]
-A343; [7B 85 0C, 05, 05]
+A342; [7B 8D 05, 05, 05]
-A344; [7B 85 13, 05, 05]
+A343; [7B 8D 0C, 05, 05]
-A345; [7B 85 1A, 05, 05]
+A344; [7B 8D 13, 05, 05]
-A346; [7B 85 21, 05, 05]
+A345; [7B 8D 1A, 05, 05]
-A347; [7B 85 28, 05, 05]
+A346; [7B 8D 21, 05, 05]
-A348; [7B 85 2F, 05, 05]
+A347; [7B 8D 28, 05, 05]
-A349; [7B 85 36, 05, 05]
+A348; [7B 8D 2F, 05, 05]
-A34A; [7B 85 3D, 05, 05]
+A349; [7B 8D 36, 05, 05]
-A34B; [7B 85 44, 05, 05]
+A34A; [7B 8D 3D, 05, 05]
-A34C; [7B 85 4B, 05, 05]
+A34B; [7B 8D 44, 05, 05]
-A34D; [7B 85 52, 05, 05]
+A34C; [7B 8D 4B, 05, 05]
-A34E; [7B 85 59, 05, 05]
+A34D; [7B 8D 52, 05, 05]
-A34F; [7B 85 60, 05, 05]
+A34E; [7B 8D 59, 05, 05]
-A350; [7B 85 67, 05, 05]
+A34F; [7B 8D 60, 05, 05]
-A351; [7B 85 6E, 05, 05]
+A350; [7B 8D 67, 05, 05]
-A352; [7B 85 75, 05, 05]
+A351; [7B 8D 6E, 05, 05]
-A353; [7B 85 7C, 05, 05]
+A352; [7B 8D 75, 05, 05]
-A354; [7B 85 83, 05, 05]
+A353; [7B 8D 7C, 05, 05]
-A355; [7B 85 8A, 05, 05]
+A354; [7B 8D 83, 05, 05]
-A356; [7B 85 91, 05, 05]
+A355; [7B 8D 8A, 05, 05]
-A357; [7B 85 98, 05, 05]
+A356; [7B 8D 91, 05, 05]
-A358; [7B 85 9F, 05, 05]
+A357; [7B 8D 98, 05, 05]
-A359; [7B 85 A6, 05, 05]
+A358; [7B 8D 9F, 05, 05]
-A35A; [7B 85 AD, 05, 05]
+A359; [7B 8D A6, 05, 05]
-A35B; [7B 85 B4, 05, 05]
+A35A; [7B 8D AD, 05, 05]
-A35C; [7B 85 BB, 05, 05]
+A35B; [7B 8D B4, 05, 05]
-A35D; [7B 85 C2, 05, 05]
+A35C; [7B 8D BB, 05, 05]
-A35E; [7B 85 C9, 05, 05]
+A35D; [7B 8D C2, 05, 05]
-A35F; [7B 85 D0, 05, 05]
+A35E; [7B 8D C9, 05, 05]
-A360; [7B 85 D7, 05, 05]
+A35F; [7B 8D D0, 05, 05]
-A361; [7B 85 DE, 05, 05]
+A360; [7B 8D D7, 05, 05]
-A362; [7B 85 E5, 05, 05]
+A361; [7B 8D DE, 05, 05]
-A363; [7B 85 EC, 05, 05]
+A362; [7B 8D E5, 05, 05]
-A364; [7B 85 F3, 05, 05]
+A363; [7B 8D EC, 05, 05]
-A365; [7B 85 FA, 05, 05]
+A364; [7B 8D F3, 05, 05]
-A366; [7B 86 03, 05, 05]
+A365; [7B 8D FA, 05, 05]
-A367; [7B 86 0A, 05, 05]
+A366; [7B 8E 03, 05, 05]
-A368; [7B 86 11, 05, 05]
+A367; [7B 8E 0A, 05, 05]
-A369; [7B 86 18, 05, 05]
+A368; [7B 8E 11, 05, 05]
-A36A; [7B 86 1F, 05, 05]
+A369; [7B 8E 18, 05, 05]
-A36B; [7B 86 26, 05, 05]
+A36A; [7B 8E 1F, 05, 05]
-A36C; [7B 86 2D, 05, 05]
+A36B; [7B 8E 26, 05, 05]
-A36D; [7B 86 34, 05, 05]
+A36C; [7B 8E 2D, 05, 05]
-A36E; [7B 86 3B, 05, 05]
+A36D; [7B 8E 34, 05, 05]
-A36F; [7B 86 42, 05, 05]
+A36E; [7B 8E 3B, 05, 05]
-A370; [7B 86 49, 05, 05]
+A36F; [7B 8E 42, 05, 05]
-A371; [7B 86 50, 05, 05]
+A370; [7B 8E 49, 05, 05]
-A372; [7B 86 57, 05, 05]
+A371; [7B 8E 50, 05, 05]
-A373; [7B 86 5E, 05, 05]
+A372; [7B 8E 57, 05, 05]
-A374; [7B 86 65, 05, 05]
+A373; [7B 8E 5E, 05, 05]
-A375; [7B 86 6C, 05, 05]
+A374; [7B 8E 65, 05, 05]
-A376; [7B 86 73, 05, 05]
+A375; [7B 8E 6C, 05, 05]
-A377; [7B 86 7A, 05, 05]
+A376; [7B 8E 73, 05, 05]
-A378; [7B 86 81, 05, 05]
+A377; [7B 8E 7A, 05, 05]
-A379; [7B 86 88, 05, 05]
+A378; [7B 8E 81, 05, 05]
-A37A; [7B 86 8F, 05, 05]
+A379; [7B 8E 88, 05, 05]
-A37B; [7B 86 96, 05, 05]
+A37A; [7B 8E 8F, 05, 05]
-A37C; [7B 86 9D, 05, 05]
+A37B; [7B 8E 96, 05, 05]
-A37D; [7B 86 A4, 05, 05]
+A37C; [7B 8E 9D, 05, 05]
-A37E; [7B 86 AB, 05, 05]
+A37D; [7B 8E A4, 05, 05]
-A37F; [7B 86 B2, 05, 05]
+A37E; [7B 8E AB, 05, 05]
-A380; [7B 86 B9, 05, 05]
+A37F; [7B 8E B2, 05, 05]
-A381; [7B 86 C0, 05, 05]
+A380; [7B 8E B9, 05, 05]
-A382; [7B 86 C7, 05, 05]
+A381; [7B 8E C0, 05, 05]
-A383; [7B 86 CE, 05, 05]
+A382; [7B 8E C7, 05, 05]
-A384; [7B 86 D5, 05, 05]
+A383; [7B 8E CE, 05, 05]
-A385; [7B 86 DC, 05, 05]
+A384; [7B 8E D5, 05, 05]
-A386; [7B 86 E3, 05, 05]
+A385; [7B 8E DC, 05, 05]
-A387; [7B 86 EA, 05, 05]
+A386; [7B 8E E3, 05, 05]
-A388; [7B 86 F1, 05, 05]
+A387; [7B 8E EA, 05, 05]
-A389; [7B 86 F8, 05, 05]
+A388; [7B 8E F1, 05, 05]
-A38A; [7B 86 FF, 05, 05]
+A389; [7B 8E F8, 05, 05]
-A38B; [7B 87 08, 05, 05]
+A38A; [7B 8E FF, 05, 05]
-A38C; [7B 87 0F, 05, 05]
+A38B; [7B 8F 08, 05, 05]
-A38D; [7B 87 16, 05, 05]
+A38C; [7B 8F 0F, 05, 05]
-A38E; [7B 87 1D, 05, 05]
+A38D; [7B 8F 16, 05, 05]
-A38F; [7B 87 24, 05, 05]
+A38E; [7B 8F 1D, 05, 05]
-A390; [7B 87 2B, 05, 05]
+A38F; [7B 8F 24, 05, 05]
-A391; [7B 87 32, 05, 05]
+A390; [7B 8F 2B, 05, 05]
-A392; [7B 87 39, 05, 05]
+A391; [7B 8F 32, 05, 05]
-A393; [7B 87 40, 05, 05]
+A392; [7B 8F 39, 05, 05]
-A394; [7B 87 47, 05, 05]
+A393; [7B 8F 40, 05, 05]
-A395; [7B 87 4E, 05, 05]
+A394; [7B 8F 47, 05, 05]
-A396; [7B 87 55, 05, 05]
+A395; [7B 8F 4E, 05, 05]
-A397; [7B 87 5C, 05, 05]
+A396; [7B 8F 55, 05, 05]
-A398; [7B 87 63, 05, 05]
+A397; [7B 8F 5C, 05, 05]
-A399; [7B 87 6A, 05, 05]
+A398; [7B 8F 63, 05, 05]
-A39A; [7B 87 71, 05, 05]
+A399; [7B 8F 6A, 05, 05]
-A39B; [7B 87 78, 05, 05]
+A39A; [7B 8F 71, 05, 05]
-A39C; [7B 87 7F, 05, 05]
+A39B; [7B 8F 78, 05, 05]
-A39D; [7B 87 86, 05, 05]
+A39C; [7B 8F 7F, 05, 05]
-A39E; [7B 87 8D, 05, 05]
+A39D; [7B 8F 86, 05, 05]
-A39F; [7B 87 94, 05, 05]
+A39E; [7B 8F 8D, 05, 05]
-A3A0; [7B 87 9B, 05, 05]
+A39F; [7B 8F 94, 05, 05]
-A3A1; [7B 87 A2, 05, 05]
+A3A0; [7B 8F 9B, 05, 05]
-A3A2; [7B 87 A9, 05, 05]
+A3A1; [7B 8F A2, 05, 05]
-A3A3; [7B 87 B0, 05, 05]
+A3A2; [7B 8F A9, 05, 05]
-A3A4; [7B 87 B7, 05, 05]
+A3A3; [7B 8F B0, 05, 05]
-A3A5; [7B 87 BE, 05, 05]
+A3A4; [7B 8F B7, 05, 05]
-A3A6; [7B 87 C5, 05, 05]
+A3A5; [7B 8F BE, 05, 05]
-A3A7; [7B 87 CC, 05, 05]
+A3A6; [7B 8F C5, 05, 05]
-A3A8; [7B 87 D3, 05, 05]
+A3A7; [7B 8F CC, 05, 05]
-A3A9; [7B 87 DA, 05, 05]
+A3A8; [7B 8F D3, 05, 05]
-A3AA; [7B 87 E1, 05, 05]
+A3A9; [7B 8F DA, 05, 05]
-A3AB; [7B 87 E8, 05, 05]
+A3AA; [7B 8F E1, 05, 05]
-A3AC; [7B 87 EF, 05, 05]
+A3AB; [7B 8F E8, 05, 05]
-A3AD; [7B 87 F6, 05, 05]
+A3AC; [7B 8F EF, 05, 05]
-A3AE; [7B 87 FD, 05, 05]
+A3AD; [7B 8F F6, 05, 05]
-A3AF; [7B 88 06, 05, 05]
+A3AE; [7B 8F FD, 05, 05]
-A3B0; [7B 88 0D, 05, 05]
+A3AF; [7B 90 06, 05, 05]
-A3B1; [7B 88 14, 05, 05]
+A3B0; [7B 90 0D, 05, 05]
-A3B2; [7B 88 1B, 05, 05]
+A3B1; [7B 90 14, 05, 05]
-A3B3; [7B 88 22, 05, 05]
+A3B2; [7B 90 1B, 05, 05]
-A3B4; [7B 88 29, 05, 05]
+A3B3; [7B 90 22, 05, 05]
-A3B5; [7B 88 30, 05, 05]
+A3B4; [7B 90 29, 05, 05]
-A3B6; [7B 88 37, 05, 05]
+A3B5; [7B 90 30, 05, 05]
-A3B7; [7B 88 3E, 05, 05]
+A3B6; [7B 90 37, 05, 05]
-A3B8; [7B 88 45, 05, 05]
+A3B7; [7B 90 3E, 05, 05]
-A3B9; [7B 88 4C, 05, 05]
+A3B8; [7B 90 45, 05, 05]
-A3BA; [7B 88 53, 05, 05]
+A3B9; [7B 90 4C, 05, 05]
-A3BB; [7B 88 5A, 05, 05]
+A3BA; [7B 90 53, 05, 05]
-A3BC; [7B 88 61, 05, 05]
+A3BB; [7B 90 5A, 05, 05]
-A3BD; [7B 88 68, 05, 05]
+A3BC; [7B 90 61, 05, 05]
-A3BE; [7B 88 6F, 05, 05]
+A3BD; [7B 90 68, 05, 05]
-A3BF; [7B 88 76, 05, 05]
+A3BE; [7B 90 6F, 05, 05]
-A3C0; [7B 88 7D, 05, 05]
+A3BF; [7B 90 76, 05, 05]
-A3C1; [7B 88 84, 05, 05]
+A3C0; [7B 90 7D, 05, 05]
-A3C2; [7B 88 8B, 05, 05]
+A3C1; [7B 90 84, 05, 05]
-A3C3; [7B 88 92, 05, 05]
+A3C2; [7B 90 8B, 05, 05]
-A3C4; [7B 88 99, 05, 05]
+A3C3; [7B 90 92, 05, 05]
-A3C5; [7B 88 A0, 05, 05]
+A3C4; [7B 90 99, 05, 05]
-A3C6; [7B 88 A7, 05, 05]
+A3C5; [7B 90 A0, 05, 05]
-A3C7; [7B 88 AE, 05, 05]
+A3C6; [7B 90 A7, 05, 05]
-A3C8; [7B 88 B5, 05, 05]
+A3C7; [7B 90 AE, 05, 05]
-A3C9; [7B 88 BC, 05, 05]
+A3C8; [7B 90 B5, 05, 05]
-A3CA; [7B 88 C3, 05, 05]
+A3C9; [7B 90 BC, 05, 05]
-A3CB; [7B 88 CA, 05, 05]
+A3CA; [7B 90 C3, 05, 05]
-A3CC; [7B 88 D1, 05, 05]
+A3CB; [7B 90 CA, 05, 05]
-A3CD; [7B 88 D8, 05, 05]
+A3CC; [7B 90 D1, 05, 05]
-A3CE; [7B 88 DF, 05, 05]
+A3CD; [7B 90 D8, 05, 05]
-A3CF; [7B 88 E6, 05, 05]
+A3CE; [7B 90 DF, 05, 05]
-A3D0; [7B 88 ED, 05, 05]
+A3CF; [7B 90 E6, 05, 05]
-A3D1; [7B 88 F4, 05, 05]
+A3D0; [7B 90 ED, 05, 05]
-A3D2; [7B 88 FB, 05, 05]
+A3D1; [7B 90 F4, 05, 05]
-A3D3; [7B 89 04, 05, 05]
+A3D2; [7B 90 FB, 05, 05]
-A3D4; [7B 89 0B, 05, 05]
+A3D3; [7B 91 04, 05, 05]
-A3D5; [7B 89 12, 05, 05]
+A3D4; [7B 91 0B, 05, 05]
-A3D6; [7B 89 19, 05, 05]
+A3D5; [7B 91 12, 05, 05]
-A3D7; [7B 89 20, 05, 05]
+A3D6; [7B 91 19, 05, 05]
-A3D8; [7B 89 27, 05, 05]
+A3D7; [7B 91 20, 05, 05]
-A3D9; [7B 89 2E, 05, 05]
+A3D8; [7B 91 27, 05, 05]
-A3DA; [7B 89 35, 05, 05]
+A3D9; [7B 91 2E, 05, 05]
-A3DB; [7B 89 3C, 05, 05]
+A3DA; [7B 91 35, 05, 05]
-A3DC; [7B 89 43, 05, 05]
+A3DB; [7B 91 3C, 05, 05]
-A3DD; [7B 89 4A, 05, 05]
+A3DC; [7B 91 43, 05, 05]
-A3DE; [7B 89 51, 05, 05]
+A3DD; [7B 91 4A, 05, 05]
-A3DF; [7B 89 58, 05, 05]
+A3DE; [7B 91 51, 05, 05]
-A3E0; [7B 89 5F, 05, 05]
+A3DF; [7B 91 58, 05, 05]
-A3E1; [7B 89 66, 05, 05]
+A3E0; [7B 91 5F, 05, 05]
-A3E2; [7B 89 6D, 05, 05]
+A3E1; [7B 91 66, 05, 05]
-A3E3; [7B 89 74, 05, 05]
+A3E2; [7B 91 6D, 05, 05]
-A3E4; [7B 89 7B, 05, 05]
+A3E3; [7B 91 74, 05, 05]
-A3E5; [7B 89 82, 05, 05]
+A3E4; [7B 91 7B, 05, 05]
-A3E6; [7B 89 89, 05, 05]
+A3E5; [7B 91 82, 05, 05]
-A3E7; [7B 89 90, 05, 05]
+A3E6; [7B 91 89, 05, 05]
-A3E8; [7B 89 97, 05, 05]
+A3E7; [7B 91 90, 05, 05]
-A3E9; [7B 89 9E, 05, 05]
+A3E8; [7B 91 97, 05, 05]
-A3EA; [7B 89 A5, 05, 05]
+A3E9; [7B 91 9E, 05, 05]
-A3EB; [7B 89 AC, 05, 05]
+A3EA; [7B 91 A5, 05, 05]
-A3EC; [7B 89 B3, 05, 05]
+A3EB; [7B 91 AC, 05, 05]
-A3ED; [7B 89 BA, 05, 05]
+A3EC; [7B 91 B3, 05, 05]
-A3EE; [7B 89 C1, 05, 05]
+A3ED; [7B 91 BA, 05, 05]
-A3EF; [7B 89 C8, 05, 05]
+A3EE; [7B 91 C1, 05, 05]
-A3F0; [7B 89 CF, 05, 05]
+A3EF; [7B 91 C8, 05, 05]
-A3F1; [7B 89 D6, 05, 05]
+A3F0; [7B 91 CF, 05, 05]
-A3F2; [7B 89 DD, 05, 05]
+A3F1; [7B 91 D6, 05, 05]
-A3F3; [7B 89 E4, 05, 05]
+A3F2; [7B 91 DD, 05, 05]
-A3F4; [7B 89 EB, 05, 05]
+A3F3; [7B 91 E4, 05, 05]
-A3F5; [7B 89 F2, 05, 05]
+A3F4; [7B 91 EB, 05, 05]
-A3F6; [7B 89 F9, 05, 05]
+A3F5; [7B 91 F2, 05, 05]
-A3F7; [7B 8A 02, 05, 05]
+A3F6; [7B 91 F9, 05, 05]
-A3F8; [7B 8A 09, 05, 05]
+A3F7; [7B 92 02, 05, 05]
-A3F9; [7B 8A 10, 05, 05]
+A3F8; [7B 92 09, 05, 05]
-A3FA; [7B 8A 17, 05, 05]
+A3F9; [7B 92 10, 05, 05]
-A3FB; [7B 8A 1E, 05, 05]
+A3FA; [7B 92 17, 05, 05]
-A3FC; [7B 8A 25, 05, 05]
+A3FB; [7B 92 1E, 05, 05]
-A3FD; [7B 8A 2C, 05, 05]
+A3FC; [7B 92 25, 05, 05]
-A3FE; [7B 8A 33, 05, 05]
+A3FD; [7B 92 2C, 05, 05]
-A3FF; [7B 8A 3A, 05, 05]
+A3FE; [7B 92 33, 05, 05]
-A400; [7B 8A 41, 05, 05]
+A3FF; [7B 92 3A, 05, 05]
-A401; [7B 8A 48, 05, 05]
+A400; [7B 92 41, 05, 05]
-A402; [7B 8A 4F, 05, 05]
+A401; [7B 92 48, 05, 05]
-A403; [7B 8A 56, 05, 05]
+A402; [7B 92 4F, 05, 05]
-A404; [7B 8A 5D, 05, 05]
+A403; [7B 92 56, 05, 05]
-A405; [7B 8A 64, 05, 05]
+A404; [7B 92 5D, 05, 05]
-A406; [7B 8A 6B, 05, 05]
+A405; [7B 92 64, 05, 05]
-A407; [7B 8A 72, 05, 05]
+A406; [7B 92 6B, 05, 05]
-A408; [7B 8A 79, 05, 05]
+A407; [7B 92 72, 05, 05]
-A409; [7B 8A 80, 05, 05]
+A408; [7B 92 79, 05, 05]
-A40A; [7B 8A 87, 05, 05]
+A409; [7B 92 80, 05, 05]
-A40B; [7B 8A 8E, 05, 05]
+A40A; [7B 92 87, 05, 05]
-A40C; [7B 8A 95, 05, 05]
+A40B; [7B 92 8E, 05, 05]
-A40D; [7B 8A 9C, 05, 05]
+A40C; [7B 92 95, 05, 05]
-A40E; [7B 8A A3, 05, 05]
+A40D; [7B 92 9C, 05, 05]
-A40F; [7B 8A AA, 05, 05]
+A40E; [7B 92 A3, 05, 05]
-A410; [7B 8A B1, 05, 05]
+A40F; [7B 92 AA, 05, 05]
-A411; [7B 8A B8, 05, 05]
+A410; [7B 92 B1, 05, 05]
-A412; [7B 8A BF, 05, 05]
+A411; [7B 92 B8, 05, 05]
-A413; [7B 8A C6, 05, 05]
+A412; [7B 92 BF, 05, 05]
-A414; [7B 8A CD, 05, 05]
+A413; [7B 92 C6, 05, 05]
-A415; [7B 8A D4, 05, 05]
+A414; [7B 92 CD, 05, 05]
-A416; [7B 8A DB, 05, 05]
+A415; [7B 92 D4, 05, 05]
-A417; [7B 8A E2, 05, 05]
+A416; [7B 92 DB, 05, 05]
-A418; [7B 8A E9, 05, 05]
+A417; [7B 92 E2, 05, 05]
-A419; [7B 8A F0, 05, 05]
+A418; [7B 92 E9, 05, 05]
-A41A; [7B 8A F7, 05, 05]
+A419; [7B 92 F0, 05, 05]
-A41B; [7B 8A FE, 05, 05]
+A41A; [7B 92 F7, 05, 05]
-A41C; [7B 8B 07, 05, 05]
+A41B; [7B 92 FE, 05, 05]
-A41D; [7B 8B 0E, 05, 05]
+A41C; [7B 93 07, 05, 05]
-A41E; [7B 8B 15, 05, 05]
+A41D; [7B 93 0E, 05, 05]
-A41F; [7B 8B 1C, 05, 05]
+A41E; [7B 93 15, 05, 05]
-A420; [7B 8B 23, 05, 05]
+A41F; [7B 93 1C, 05, 05]
-A421; [7B 8B 2A, 05, 05]
+A420; [7B 93 23, 05, 05]
-A422; [7B 8B 31, 05, 05]
+A421; [7B 93 2A, 05, 05]
-A423; [7B 8B 38, 05, 05]
+A422; [7B 93 31, 05, 05]
-A424; [7B 8B 3F, 05, 05]
+A423; [7B 93 38, 05, 05]
-A425; [7B 8B 46, 05, 05]
+A424; [7B 93 3F, 05, 05]
-A426; [7B 8B 4D, 05, 05]
+A425; [7B 93 46, 05, 05]
-A427; [7B 8B 54, 05, 05]
+A426; [7B 93 4D, 05, 05]
-A428; [7B 8B 5B, 05, 05]
+A427; [7B 93 54, 05, 05]
-A429; [7B 8B 62, 05, 05]
+A428; [7B 93 5B, 05, 05]
-A42A; [7B 8B 69, 05, 05]
+A429; [7B 93 62, 05, 05]
-A42B; [7B 8B 70, 05, 05]
+A42A; [7B 93 69, 05, 05]
-A42C; [7B 8B 77, 05, 05]
+A42B; [7B 93 70, 05, 05]
-A42D; [7B 8B 7E, 05, 05]
+A42C; [7B 93 77, 05, 05]
-A42E; [7B 8B 85, 05, 05]
+A42D; [7B 93 7E, 05, 05]
-A42F; [7B 8B 8C, 05, 05]
+A42E; [7B 93 85, 05, 05]
-A430; [7B 8B 93, 05, 05]
+A42F; [7B 93 8C, 05, 05]
-A431; [7B 8B 9A, 05, 05]
+A430; [7B 93 93, 05, 05]
-A432; [7B 8B A1, 05, 05]
+A431; [7B 93 9A, 05, 05]
-A433; [7B 8B A8, 05, 05]
+A432; [7B 93 A1, 05, 05]
-A434; [7B 8B AF, 05, 05]
+A433; [7B 93 A8, 05, 05]
-A435; [7B 8B B6, 05, 05]
+A434; [7B 93 AF, 05, 05]
-A436; [7B 8B BD, 05, 05]
+A435; [7B 93 B6, 05, 05]
-A437; [7B 8B C4, 05, 05]
+A436; [7B 93 BD, 05, 05]
-A438; [7B 8B CB, 05, 05]
+A437; [7B 93 C4, 05, 05]
-A439; [7B 8B D2, 05, 05]
+A438; [7B 93 CB, 05, 05]
-A43A; [7B 8B D9, 05, 05]
+A439; [7B 93 D2, 05, 05]
-A43B; [7B 8B E0, 05, 05]
+A43A; [7B 93 D9, 05, 05]
-A43C; [7B 8B E7, 05, 05]
+A43B; [7B 93 E0, 05, 05]
-A43D; [7B 8B EE, 05, 05]
+A43C; [7B 93 E7, 05, 05]
-A43E; [7B 8B F5, 05, 05]
+A43D; [7B 93 EE, 05, 05]
-A43F; [7B 8B FC, 05, 05]
+A43E; [7B 93 F5, 05, 05]
-A440; [7B 8C 05, 05, 05]
+A43F; [7B 93 FC, 05, 05]
-A441; [7B 8C 0C, 05, 05]
+A440; [7B 94 05, 05, 05]
-A442; [7B 8C 13, 05, 05]
+A441; [7B 94 0C, 05, 05]
-A443; [7B 8C 1A, 05, 05]
+A442; [7B 94 13, 05, 05]
-A444; [7B 8C 21, 05, 05]
+A443; [7B 94 1A, 05, 05]
-A445; [7B 8C 28, 05, 05]
+A444; [7B 94 21, 05, 05]
-A446; [7B 8C 2F, 05, 05]
+A445; [7B 94 28, 05, 05]
-A447; [7B 8C 36, 05, 05]
+A446; [7B 94 2F, 05, 05]
-A448; [7B 8C 3D, 05, 05]
+A447; [7B 94 36, 05, 05]
-A449; [7B 8C 44, 05, 05]
+A448; [7B 94 3D, 05, 05]
-A44A; [7B 8C 4B, 05, 05]
+A449; [7B 94 44, 05, 05]
-A44B; [7B 8C 52, 05, 05]
+A44A; [7B 94 4B, 05, 05]
-A44C; [7B 8C 59, 05, 05]
+A44B; [7B 94 52, 05, 05]
-A44D; [7B 8C 60, 05, 05]
+A44C; [7B 94 59, 05, 05]
-A44E; [7B 8C 67, 05, 05]
+A44D; [7B 94 60, 05, 05]
-A44F; [7B 8C 6E, 05, 05]
+A44E; [7B 94 67, 05, 05]
-A450; [7B 8C 75, 05, 05]
+A44F; [7B 94 6E, 05, 05]
-A451; [7B 8C 7C, 05, 05]
+A450; [7B 94 75, 05, 05]
-A452; [7B 8C 83, 05, 05]
+A451; [7B 94 7C, 05, 05]
-A453; [7B 8C 8A, 05, 05]
+A452; [7B 94 83, 05, 05]
-A454; [7B 8C 91, 05, 05]
+A453; [7B 94 8A, 05, 05]
-A455; [7B 8C 98, 05, 05]
+A454; [7B 94 91, 05, 05]
-A456; [7B 8C 9F, 05, 05]
+A455; [7B 94 98, 05, 05]
-A457; [7B 8C A6, 05, 05]
+A456; [7B 94 9F, 05, 05]
-A458; [7B 8C AD, 05, 05]
+A457; [7B 94 A6, 05, 05]
-A459; [7B 8C B4, 05, 05]
+A458; [7B 94 AD, 05, 05]
-A45A; [7B 8C BB, 05, 05]
+A459; [7B 94 B4, 05, 05]
-A45B; [7B 8C C2, 05, 05]
+A45A; [7B 94 BB, 05, 05]
-A45C; [7B 8C C9, 05, 05]
+A45B; [7B 94 C2, 05, 05]
-A45D; [7B 8C D0, 05, 05]
+A45C; [7B 94 C9, 05, 05]
-A45E; [7B 8C D7, 05, 05]
+A45D; [7B 94 D0, 05, 05]
-A45F; [7B 8C DE, 05, 05]
+A45E; [7B 94 D7, 05, 05]
-A460; [7B 8C E5, 05, 05]
+A45F; [7B 94 DE, 05, 05]
-A461; [7B 8C EC, 05, 05]
+A460; [7B 94 E5, 05, 05]
-A462; [7B 8C F3, 05, 05]
+A461; [7B 94 EC, 05, 05]
-A463; [7B 8C FA, 05, 05]
+A462; [7B 94 F3, 05, 05]
-A464; [7B 8D 03, 05, 05]
+A463; [7B 94 FA, 05, 05]
-A465; [7B 8D 0A, 05, 05]
+A464; [7B 95 03, 05, 05]
-A466; [7B 8D 11, 05, 05]
+A465; [7B 95 0A, 05, 05]
-A467; [7B 8D 18, 05, 05]
+A466; [7B 95 11, 05, 05]
-A468; [7B 8D 1F, 05, 05]
+A467; [7B 95 18, 05, 05]
-A469; [7B 8D 26, 05, 05]
+A468; [7B 95 1F, 05, 05]
-A46A; [7B 8D 2D, 05, 05]
+A469; [7B 95 26, 05, 05]
-A46B; [7B 8D 34, 05, 05]
+A46A; [7B 95 2D, 05, 05]
-A46C; [7B 8D 3B, 05, 05]
+A46B; [7B 95 34, 05, 05]
-A46D; [7B 8D 42, 05, 05]
+A46C; [7B 95 3B, 05, 05]
-A46E; [7B 8D 49, 05, 05]
+A46D; [7B 95 42, 05, 05]
-A46F; [7B 8D 50, 05, 05]
+A46E; [7B 95 49, 05, 05]
-A470; [7B 8D 57, 05, 05]
+A46F; [7B 95 50, 05, 05]
-A471; [7B 8D 5E, 05, 05]
+A470; [7B 95 57, 05, 05]
-A472; [7B 8D 65, 05, 05]
+A471; [7B 95 5E, 05, 05]
-A473; [7B 8D 6C, 05, 05]
+A472; [7B 95 65, 05, 05]
-A474; [7B 8D 73, 05, 05]
+A473; [7B 95 6C, 05, 05]
-A475; [7B 8D 7A, 05, 05]
+A474; [7B 95 73, 05, 05]
-A476; [7B 8D 81, 05, 05]
+A475; [7B 95 7A, 05, 05]
-A477; [7B 8D 88, 05, 05]
+A476; [7B 95 81, 05, 05]
-A478; [7B 8D 8F, 05, 05]
+A477; [7B 95 88, 05, 05]
-A479; [7B 8D 96, 05, 05]
+A478; [7B 95 8F, 05, 05]
-A47A; [7B 8D 9D, 05, 05]
+A479; [7B 95 96, 05, 05]
-A47B; [7B 8D A4, 05, 05]
+A47A; [7B 95 9D, 05, 05]
-A47C; [7B 8D AB, 05, 05]
+A47B; [7B 95 A4, 05, 05]
-A47D; [7B 8D B2, 05, 05]
+A47C; [7B 95 AB, 05, 05]
-A47E; [7B 8D B9, 05, 05]
+A47D; [7B 95 B2, 05, 05]
-A47F; [7B 8D C0, 05, 05]
+A47E; [7B 95 B9, 05, 05]
-A480; [7B 8D C7, 05, 05]
+A47F; [7B 95 C0, 05, 05]
-A481; [7B 8D CE, 05, 05]
+A480; [7B 95 C7, 05, 05]
-A482; [7B 8D D5, 05, 05]
+A481; [7B 95 CE, 05, 05]
-A483; [7B 8D DC, 05, 05]
+A482; [7B 95 D5, 05, 05]
-A484; [7B 8D E3, 05, 05]
+A483; [7B 95 DC, 05, 05]
-A485; [7B 8D EA, 05, 05]
+A484; [7B 95 E3, 05, 05]
-A486; [7B 8D F1, 05, 05]
+A485; [7B 95 EA, 05, 05]
-A487; [7B 8D F8, 05, 05]
+A486; [7B 95 F1, 05, 05]
-A488; [7B 8D FF, 05, 05]
+A487; [7B 95 F8, 05, 05]
-A489; [7B 8E 08, 05, 05]
+A488; [7B 95 FF, 05, 05]
-A48A; [7B 8E 0F, 05, 05]
+A489; [7B 96 08, 05, 05]
-A48B; [7B 8E 16, 05, 05]
+A48A; [7B 96 0F, 05, 05]
-A48C; [7B 8E 1D, 05, 05]
+A48B; [7B 96 16, 05, 05]
-FDD1 A4D0; [7B 8F 02, 05, 05] # Lisu first primary (compressible)
+A48C; [7B 96 1D, 05, 05]
-A4F8; [7B 8F 09, 05, 05]
+FDD1 A4D0; [7B 97 02, 05, 05] # Lisu first primary (compressible)
-A4F9; [7B 8F 10, 05, 05]
+A4F8; [7B 97 09, 05, 05]
-A4FA; [7B 8F 17, 05, 05]
+A4F9; [7B 97 10, 05, 05]
-A4FB; [7B 8F 1E, 05, 05]
+A4FA; [7B 97 17, 05, 05]
-A4FD; [7B 8F 25, 05, 05]
+A4FB; [7B 97 1E, 05, 05]
-A4FC; [7B 8F 2C, 05, 05]
+A4FD; [7B 97 25, 05, 05]
-A4D0; [7B 8F 33, 05, 05]
+A4FC; [7B 97 2C, 05, 05]
-A4D1; [7B 8F 3A, 05, 05]
+A4D0; [7B 97 33, 05, 05]
-A4D2; [7B 8F 41, 05, 05]
+A4D1; [7B 97 3A, 05, 05]
-A4D3; [7B 8F 48, 05, 05]
+A4D2; [7B 97 41, 05, 05]
-A4D4; [7B 8F 4F, 05, 05]
+A4D3; [7B 97 48, 05, 05]
-A4D5; [7B 8F 56, 05, 05]
+A4D4; [7B 97 4F, 05, 05]
-A4D6; [7B 8F 5D, 05, 05]
+A4D5; [7B 97 56, 05, 05]
-A4D7; [7B 8F 64, 05, 05]
+A4D6; [7B 97 5D, 05, 05]
-A4D8; [7B 8F 6B, 05, 05]
+A4D7; [7B 97 64, 05, 05]
-A4D9; [7B 8F 72, 05, 05]
+A4D8; [7B 97 6B, 05, 05]
-A4DA; [7B 8F 79, 05, 05]
+A4D9; [7B 97 72, 05, 05]
-A4DB; [7B 8F 80, 05, 05]
+A4DA; [7B 97 79, 05, 05]
-A4DC; [7B 8F 87, 05, 05]
+A4DB; [7B 97 80, 05, 05]
-A4DD; [7B 8F 8E, 05, 05]
+A4DC; [7B 97 87, 05, 05]
-A4DE; [7B 8F 95, 05, 05]
+A4DD; [7B 97 8E, 05, 05]
-A4DF; [7B 8F 9C, 05, 05]
+A4DE; [7B 97 95, 05, 05]
-A4E0; [7B 8F A3, 05, 05]
+A4DF; [7B 97 9C, 05, 05]
-A4E1; [7B 8F AA, 05, 05]
+A4E0; [7B 97 A3, 05, 05]
-A4E2; [7B 8F B1, 05, 05]
+A4E1; [7B 97 AA, 05, 05]
-A4E3; [7B 8F B8, 05, 05]
+A4E2; [7B 97 B1, 05, 05]
-A4E4; [7B 8F BF, 05, 05]
+A4E3; [7B 97 B8, 05, 05]
-A4E5; [7B 8F C6, 05, 05]
+A4E4; [7B 97 BF, 05, 05]
-A4E6; [7B 8F CD, 05, 05]
+A4E5; [7B 97 C6, 05, 05]
-A4E7; [7B 8F D4, 05, 05]
+A4E6; [7B 97 CD, 05, 05]
-A4E8; [7B 8F DB, 05, 05]
+A4E7; [7B 97 D4, 05, 05]
-A4E9; [7B 8F E2, 05, 05]
+A4E8; [7B 97 DB, 05, 05]
-A4EB; [7B 8F E9, 05, 05]
+A4E9; [7B 97 E2, 05, 05]
-A4ED; [7B 8F F0, 05, 05]
+A4EB; [7B 97 E9, 05, 05]
-A4EA; [7B 8F F7, 05, 05]
+A4ED; [7B 97 F0, 05, 05]
-A4EC; [7B 8F FE, 05, 05]
+A4EA; [7B 97 F7, 05, 05]
-A4EE; [7B 90 07, 05, 05]
+A4EC; [7B 97 FE, 05, 05]
-A4EF; [7B 90 0E, 05, 05]
+11FB0; [7B 98 07, 05, 05]
-A4F0; [7B 90 15, 05, 05]
+A4EE; [7B 98 0E, 05, 05]
-A4F1; [7B 90 1C, 05, 05]
+A4EF; [7B 98 15, 05, 05]
-A4F2; [7B 90 23, 05, 05]
+A4F0; [7B 98 1C, 05, 05]
-A4F3; [7B 90 2A, 05, 05]
+A4F1; [7B 98 23, 05, 05]
-A4F4; [7B 90 31, 05, 05]
+A4F2; [7B 98 2A, 05, 05]
-A4F5; [7B 90 38, 05, 05]
+A4F3; [7B 98 31, 05, 05]
-A4F6; [7B 90 3F, 05, 05]
+A4F4; [7B 98 38, 05, 05]
-A4F7; [7B 90 46, 05, 05]
+A4F5; [7B 98 3F, 05, 05]
-FDD1 16F00; [7B 91 02, 05, 05] # Miao first primary (compressible)
+A4F6; [7B 98 46, 05, 05]
-16F00; [7B 91 09, 05, 05]
+A4F7; [7B 98 4D, 05, 05]
-16F01; [7B 91 10, 05, 05]
+FDD1 16F00; [7B 99 02, 05, 05] # Miao first primary (compressible)
-16F02; [7B 91 17, 05, 05]
+16F00; [7B 99 09, 05, 05]
-16F03; [7B 91 1E, 05, 05]
+16F01; [7B 99 10, 05, 05]
-16F45; [7B 91 25, 05, 05]
+16F02; [7B 99 17, 05, 05]
-16F04; [7B 93, 05, 05]
-16F06; [7B 93, 05, 20]
+16F03; [7B 99 1E, 05, 05]
-16F05; [7B 95 02, 05, 05]
+16F45; [7B 99 25, 05, 05]
-16F07; [7B 95 09, 05, 05]
+16F04; [7B 9B, 05, 05]
+16F06; [7B 9B, 05, 20]
-16F08; [7B 95 10, 05, 05]
+16F05; [7B 9D 02, 05, 05]
-16F09; [7B 95 17, 05, 05]
+16F07; [7B 9D 09, 05, 05]
-16F0A; [7B 95 1E, 05, 05]
+16F08; [7B 9D 10, 05, 05]
-16F0B; [7B 95 25, 05, 05]
+16F09; [7B 9D 17, 05, 05]
-16F0C; [7B 95 2C, 05, 05]
+16F0A; [7B 9D 1E, 05, 05]
-16F0D; [7B 95 33, 05, 05]
+16F0B; [7B 9D 25, 05, 05]
-16F48; [7B 95 3A, 05, 05]
+16F0C; [7B 9D 2C, 05, 05]
-16F0E; [7B 95 41, 05, 05]
+16F0D; [7B 9D 33, 05, 05]
-16F0F; [7B 95 48, 05, 05]
+16F48; [7B 9D 3A, 05, 05]
-16F4A; [7B 95 4F, 05, 05]
+16F0E; [7B 9D 41, 05, 05]
-16F10; [7B 97, 05, 05]
-16F13; [7B 97, 05, 20]
+16F0F; [7B 9D 48, 05, 05]
-16F11; [7B 99 02, 05, 05]
+16F4A; [7B 9D 4F, 05, 05]
-16F12; [7B 99 09, 05, 05]
+16F10; [7B 9F, 05, 05]
+16F13; [7B 9F, 05, 20]
-16F14; [7B 99 10, 05, 05]
+16F11; [7B A1 02, 05, 05]
-16F15; [7B 99 17, 05, 05]
+16F12; [7B A1 09, 05, 05]
-16F16; [7B 99 1E, 05, 05]
+16F14; [7B A1 10, 05, 05]
-16F17; [7B 99 25, 05, 05]
+16F15; [7B A1 17, 05, 05]
-16F18; [7B 99 2C, 05, 05]
+16F16; [7B A1 1E, 05, 05]
-16F19; [7B 99 33, 05, 05]
+16F17; [7B A1 25, 05, 05]
-16F1A; [7B 99 3A, 05, 05]
+16F18; [7B A1 2C, 05, 05]
-16F1B; [7B 99 41, 05, 05]
+16F19; [7B A1 33, 05, 05]
-16F1C; [7B 99 48, 05, 05]
+16F1A; [7B A1 3A, 05, 05]
-16F1D; [7B 99 4F, 05, 05]
+16F1B; [7B A1 41, 05, 05]
-16F1E; [7B 99 56, 05, 05]
+16F1C; [7B A1 48, 05, 05]
-16F1F; [7B 99 5D, 05, 05]
+16F1D; [7B A1 4F, 05, 05]
-16F20; [7B 99 64, 05, 05]
+16F1E; [7B A1 56, 05, 05]
-16F21; [7B 99 6B, 05, 05]
+16F1F; [7B A1 5D, 05, 05]
-16F22; [7B 99 72, 05, 05]
+16F20; [7B A1 64, 05, 05]
-16F23; [7B 9B, 05, 05]
-16F25; [7B 9B, 05, 20]
+16F21; [7B A1 6B, 05, 05]
-16F24; [7B 9D 02, 05, 05]
+16F22; [7B A1 72, 05, 05]
-16F26; [7B 9D 09, 05, 05]
+16F23; [7B A3, 05, 05]
+16F25; [7B A3, 05, 20]
-16F27; [7B 9D 10, 05, 05]
+16F24; [7B A5 02, 05, 05]
-16F28; [7B 9D 17, 05, 05]
+16F26; [7B A5 09, 05, 05]
-16F29; [7B 9D 1E, 05, 05]
+16F27; [7B A5 10, 05, 05]
-16F2A; [7B 9D 25, 05, 05]
+16F28; [7B A5 17, 05, 05]
-16F2B; [7B 9D 2C, 05, 05]
+16F29; [7B A5 1E, 05, 05]
-16F2C; [7B 9D 33, 05, 05]
+16F2A; [7B A5 25, 05, 05]
-16F2D; [7B 9D 3A, 05, 05]
+16F2B; [7B A5 2C, 05, 05]
-16F2E; [7B 9D 41, 05, 05]
+16F2C; [7B A5 33, 05, 05]
-16F2F; [7B 9D 48, 05, 05]
+16F2D; [7B A5 3A, 05, 05]
-16F30; [7B 9D 4F, 05, 05]
+16F2E; [7B A5 41, 05, 05]
-16F31; [7B 9D 56, 05, 05]
+16F2F; [7B A5 48, 05, 05]
-16F32; [7B 9D 5D, 05, 05]
+16F30; [7B A5 4F, 05, 05]
-16F47; [7B 9D 64, 05, 05]
+16F31; [7B A5 56, 05, 05]
-16F33; [7B 9D 6B, 05, 05]
+16F32; [7B A5 5D, 05, 05]
-16F46; [7B 9D 72, 05, 05]
+16F47; [7B A5 64, 05, 05]
-16F34; [7B 9D 79, 05, 05]
+16F33; [7B A5 6B, 05, 05]
-16F35; [7B 9D 80, 05, 05]
+16F46; [7B A5 72, 05, 05]
-16F36; [7B 9D 87, 05, 05]
+16F34; [7B A5 79, 05, 05]
-16F37; [7B 9D 8E, 05, 05]
+16F35; [7B A5 80, 05, 05]
-16F38; [7B 9D 95, 05, 05]
+16F36; [7B A5 87, 05, 05]
-16F39; [7B 9D 9C, 05, 05]
+16F37; [7B A5 8E, 05, 05]
-16F49; [7B 9D A3, 05, 05]
+16F38; [7B A5 95, 05, 05]
-16F3A; [7B 9D AA, 05, 05]
+16F39; [7B A5 9C, 05, 05]
-16F3B; [7B 9D B1, 05, 05]
+16F49; [7B A5 A3, 05, 05]
-16F3C; [7B 9D B8, 05, 05]
+16F3A; [7B A5 AA, 05, 05]
-16F3D; [7B 9F, 05, 05]
-16F3F; [7B 9F, 05, 20]
+16F3B; [7B A5 B1, 05, 05]
-16F3E; [7B A1 02, 05, 05]
+16F3C; [7B A5 B8, 05, 05]
-16F40; [7B A1 09, 05, 05]
+16F3D; [7B A7, 05, 05]
+16F3F; [7B A7, 05, 20]
-16F41; [7B A1 10, 05, 05]
+16F3E; [7B A9 02, 05, 05]
-16F42; [7B A1 17, 05, 05]
+16F40; [7B A9 09, 05, 05]
-16F43; [7B A1 1E, 05, 05]
+16F41; [7B A9 10, 05, 05]
-16F44; [7B A1 25, 05, 05]
+16F42; [7B A9 17, 05, 05]
-16F50; [7B A1 2C, 05, 05]
+16F43; [7B A9 1E, 05, 05]
-16F51; [7B A1 33, 05, 05]
+16F44; [7B A9 25, 05, 05]
-16F52; [7B A1 3A, 05, 05]
+16F50; [7B A9 2C, 05, 05]
-16F53; [7B A1 41, 05, 05]
+16F51; [7B A9 33, 05, 05]
-16F4F; [7B A1 48, 05, 05]
+16F52; [7B A9 3A, 05, 05]
-16F54; [7B A1 4F, 05, 05]
+16F53; [7B A9 41, 05, 05]
-16F55; [7B A1 56, 05, 05]
+16F4F; [7B A9 48, 05, 05]
-16F56; [7B A1 5D, 05, 05]
+16F54; [7B A9 4F, 05, 05]
-16F57; [7B A1 64, 05, 05]
+16F55; [7B A9 56, 05, 05]
-16F58; [7B A1 6B, 05, 05]
+16F56; [7B A9 5D, 05, 05]
-16F81; [7B A1 72, 05, 05]
+16F57; [7B A9 64, 05, 05]
-16F59; [7B A1 79, 05, 05]
+16F58; [7B A9 6B, 05, 05]
-16F5A; [7B A1 80, 05, 05]
+16F81; [7B A9 72, 05, 05]
-16F5B; [7B A1 87, 05, 05]
+16F59; [7B A9 79, 05, 05]
-16F5C; [7B A1 8E, 05, 05]
+16F5A; [7B A9 80, 05, 05]
-16F83; [7B A1 95, 05, 05]
+16F5B; [7B A9 87, 05, 05]
-16F5D; [7B A1 9C, 05, 05]
+16F5C; [7B A9 8E, 05, 05]
-16F5E; [7B A1 A3, 05, 05]
+16F83; [7B A9 95, 05, 05]
-16F5F; [7B A1 AA, 05, 05]
+16F5D; [7B A9 9C, 05, 05]
-16F60; [7B A1 B1, 05, 05]
+16F5E; [7B A9 A3, 05, 05]
-16F84; [7B A1 B8, 05, 05]
+16F5F; [7B A9 AA, 05, 05]
-16F61; [7B A1 BF, 05, 05]
+16F60; [7B A9 B1, 05, 05]
-16F62; [7B A1 C6, 05, 05]
+16F84; [7B A9 B8, 05, 05]
-16F63; [7B A1 CD, 05, 05]
+16F61; [7B A9 BF, 05, 05]
-16F64; [7B A1 D4, 05, 05]
+16F62; [7B A9 C6, 05, 05]
-16F65; [7B A1 DB, 05, 05]
+16F63; [7B A9 CD, 05, 05]
-16F86; [7B A1 E2, 05, 05]
+16F64; [7B A9 D4, 05, 05]
-16F66; [7B A1 E9, 05, 05]
+16F65; [7B A9 DB, 05, 05]
-16F67; [7B A1 F0, 05, 05]
+16F86; [7B A9 E2, 05, 05]
-16F68; [7B A1 F7, 05, 05]
+16F66; [7B A9 E9, 05, 05]
-16F69; [7B A1 FE, 05, 05]
+16F67; [7B A9 F0, 05, 05]
-16F6A; [7B A2 07, 05, 05]
+16F68; [7B A9 F7, 05, 05]
-16F6B; [7B A2 0E, 05, 05]
+16F69; [7B A9 FE, 05, 05]
-16F6C; [7B A2 15, 05, 05]
+16F6A; [7B AA 07, 05, 05]
-16F6D; [7B A2 1C, 05, 05]
+16F6B; [7B AA 0E, 05, 05]
-16F7F; [7B A2 23, 05, 05]
+16F6C; [7B AA 15, 05, 05]
-16F87; [7B A2 2A, 05, 05]
+16F6D; [7B AA 1C, 05, 05]
-16F6E; [7B A2 31, 05, 05]
+16F7F; [7B AA 23, 05, 05]
-16F6F; [7B A2 38, 05, 05]
+16F87; [7B AA 2A, 05, 05]
-16F70; [7B A2 3F, 05, 05]
+16F6E; [7B AA 31, 05, 05]
-16F71; [7B A2 46, 05, 05]
+16F6F; [7B AA 38, 05, 05]
-16F72; [7B A2 4D, 05, 05]
+16F70; [7B AA 3F, 05, 05]
-16F80; [7B A2 54, 05, 05]
+16F71; [7B AA 46, 05, 05]
-16F73; [7B A2 5B, 05, 05]
+16F72; [7B AA 4D, 05, 05]
-16F74; [7B A2 62, 05, 05]
+16F80; [7B AA 54, 05, 05]
-16F85; [7B A2 69, 05, 05]
+16F73; [7B AA 5B, 05, 05]
-16F82; [7B A2 70, 05, 05]
+16F74; [7B AA 62, 05, 05]
-16F75; [7B A2 77, 05, 05]
+16F85; [7B AA 69, 05, 05]
-16F76; [7B A2 7E, 05, 05]
+16F82; [7B AA 70, 05, 05]
-16F77; [7B A2 85, 05, 05]
+16F75; [7B AA 77, 05, 05]
-16F78; [7B A2 8C, 05, 05]
+16F76; [7B AA 7E, 05, 05]
-16F79; [7B A2 93, 05, 05]
+16F77; [7B AA 85, 05, 05]
-16F7A; [7B A2 9A, 05, 05]
+16F78; [7B AA 8C, 05, 05]
-16F7B; [7B A2 A1, 05, 05]
+16F79; [7B AA 93, 05, 05]
-16F7C; [7B A2 A8, 05, 05]
+16F7A; [7B AA 9A, 05, 05]
-16F7D; [7B A2 AF, 05, 05]
+16F7B; [7B AA A1, 05, 05]
-16F7E; [7B A2 B6, 05, 05]
+16F7C; [7B AA A8, 05, 05]
-16F8F; [7B A2 BD, 05, 05]
+16F7D; [7B AA AF, 05, 05]
-16F90; [7B A2 C4, 05, 05]
+16F7E; [7B AA B6, 05, 05]
-16F91; [7B A2 CB, 05, 05]
+16F8F; [7B AA BD, 05, 05]
-16F92; [7B A2 D2, 05, 05]
+16F90; [7B AA C4, 05, 05]
-16F93; [7B A2 D9, 05, 05]
+16F91; [7B AA CB, 05, 05]
-16F94; [7B A2 E0, 05, 05]
+16F92; [7B AA D2, 05, 05]
-16F95; [7B A2 E7, 05, 05]
+16F93; [7B AA D9, 05, 05]
-16F96; [7B A2 EE, 05, 05]
+16F94; [7B AA E0, 05, 05]
-16F97; [7B A2 F5, 05, 05]
+16F95; [7B AA E7, 05, 05]
-16F98; [7B A2 FC, 05, 05]
+16F96; [7B AA EE, 05, 05]
-16F99; [7B A3 05, 05, 05]
+16F97; [7B AA F5, 05, 05]
-16F9A; [7B A3 0C, 05, 05]
+16F98; [7B AA FC, 05, 05]
-16F9B; [7B A3 13, 05, 05]
+16F99; [7B AB 05, 05, 05]
-16F9C; [7B A3 1A, 05, 05]
+16F9A; [7B AB 0C, 05, 05]
-16F9D; [7B A3 21, 05, 05]
+16F9B; [7B AB 13, 05, 05]
-16F9E; [7B A3 28, 05, 05]
+16F9C; [7B AB 1A, 05, 05]
-16F9F; [7B A3 2F, 05, 05]
+16F9D; [7B AB 21, 05, 05]
-FDD1 118B4; [7B A4 02, 05, 05] # Warang_Citi first primary (compressible)
+16F9E; [7B AB 28, 05, 05]
-118FF; [7B A4 09, 05, 05]
+16F9F; [7B AB 2F, 05, 05]
-118C0; [7B A6, 05, 05]
-118A0; [7B A6, 05, A0]
+FDD1 118B4; [7B AC 02, 05, 05] # Warang_Citi first primary (compressible)
-118C1; [7B A8, 05, 05]
-118A1; [7B A8, 05, A0]
+118FF; [7B AC 09, 05, 05]
-118C2; [7B AA, 05, 05]
-118A2; [7B AA, 05, A0]
+118C0; [7B AE, 05, 05]
+118A0; [7B AE, 05, A0]
-118C3; [7B AC, 05, 05]
-118A3; [7B AC, 05, A0]
+118C1; [7B B0, 05, 05]
+118A1; [7B B0, 05, A0]
-118C4; [7B AE, 05, 05]
-118A4; [7B AE, 05, A0]
+118C2; [7B B2, 05, 05]
+118A2; [7B B2, 05, A0]
-118C5; [7B B0, 05, 05]
-118A5; [7B B0, 05, A0]
+118C3; [7B B4, 05, 05]
+118A3; [7B B4, 05, A0]
-118C6; [7B B2, 05, 05]
-118A6; [7B B2, 05, A0]
+118C4; [7B B6, 05, 05]
+118A4; [7B B6, 05, A0]
-118C7; [7B B4, 05, 05]
-118A7; [7B B4, 05, A0]
+118C5; [7B B8, 05, 05]
+118A5; [7B B8, 05, A0]
-118C8; [7B B6, 05, 05]
-118A8; [7B B6, 05, A0]
+118C6; [7B BA, 05, 05]
+118A6; [7B BA, 05, A0]
-118C9; [7B B8, 05, 05]
-118A9; [7B B8, 05, A0]
+118C7; [7B BC, 05, 05]
+118A7; [7B BC, 05, A0]
-118CA; [7B BA, 05, 05]
-118AA; [7B BA, 05, A0]
+118C8; [7B BE, 05, 05]
+118A8; [7B BE, 05, A0]
-118CB; [7B BC, 05, 05]
-118AB; [7B BC, 05, A0]
+118C9; [7B C0, 05, 05]
+118A9; [7B C0, 05, A0]
-118CC; [7B BE, 05, 05]
-118AC; [7B BE, 05, A0]
+118CA; [7B C2, 05, 05]
+118AA; [7B C2, 05, A0]
-118CD; [7B C0, 05, 05]
-118AD; [7B C0, 05, A0]
+118CB; [7B C4, 05, 05]
+118AB; [7B C4, 05, A0]
-118CE; [7B C2, 05, 05]
-118AE; [7B C2, 05, A0]
+118CC; [7B C6, 05, 05]
+118AC; [7B C6, 05, A0]
-118CF; [7B C4, 05, 05]
-118AF; [7B C4, 05, A0]
+118CD; [7B C8, 05, 05]
+118AD; [7B C8, 05, A0]
-118D0; [7B C6, 05, 05]
-118B0; [7B C6, 05, A0]
+118CE; [7B CA, 05, 05]
+118AE; [7B CA, 05, A0]
-118D1; [7B C8, 05, 05]
-118B1; [7B C8, 05, A0]
+118CF; [7B CC, 05, 05]
+118AF; [7B CC, 05, A0]
-118D2; [7B CA, 05, 05]
-118B2; [7B CA, 05, A0]
+118D0; [7B CE, 05, 05]
+118B0; [7B CE, 05, A0]
-118D3; [7B CC, 05, 05]
-118B3; [7B CC, 05, A0]
+118D1; [7B D0, 05, 05]
+118B1; [7B D0, 05, A0]
-118D4; [7B CE, 05, 05]
-118B4; [7B CE, 05, A0]
+118D2; [7B D2, 05, 05]
+118B2; [7B D2, 05, A0]
-118D5; [7B D0, 05, 05]
-118B5; [7B D0, 05, A0]
+118D3; [7B D4, 05, 05]
+118B3; [7B D4, 05, A0]
-118D6; [7B D2, 05, 05]
-118B6; [7B D2, 05, A0]
+118D4; [7B D6, 05, 05]
+118B4; [7B D6, 05, A0]
-118D7; [7B D4, 05, 05]
-118B7; [7B D4, 05, A0]
+118D5; [7B D8, 05, 05]
+118B5; [7B D8, 05, A0]
-118D8; [7B D6, 05, 05]
-118B8; [7B D6, 05, A0]
+118D6; [7B DA, 05, 05]
+118B6; [7B DA, 05, A0]
-118D9; [7B D8, 05, 05]
-118B9; [7B D8, 05, A0]
+118D7; [7B DC, 05, 05]
+118B7; [7B DC, 05, A0]
-118DA; [7B DA, 05, 05]
-118BA; [7B DA, 05, A0]
+118D8; [7B DE, 05, 05]
+118B8; [7B DE, 05, A0]
-118DB; [7B DC, 05, 05]
-118BB; [7B DC, 05, A0]
+118D9; [7B E0, 05, 05]
+118B9; [7B E0, 05, A0]
-118DC; [7B DE, 05, 05]
-118BC; [7B DE, 05, A0]
+118DA; [7B E2, 05, 05]
+118BA; [7B E2, 05, A0]
-118DD; [7B E0, 05, 05]
-118BD; [7B E0, 05, A0]
+118DB; [7B E4, 05, 05]
+118BB; [7B E4, 05, A0]
-118DE; [7B E2, 05, 05]
-118BE; [7B E2, 05, A0]
+118DC; [7B E6, 05, 05]
+118BC; [7B E6, 05, A0]
-118DF; [7B E4, 05, 05]
-118BF; [7B E4, 05, A0]
+118DD; [7B E8, 05, 05]
+118BD; [7B E8, 05, A0]
-FDD1 11AC0; [7B E6 02, 05, 05] # Pau_Cin_Hau first primary (compressible)
+118DE; [7B EA, 05, 05]
+118BE; [7B EA, 05, A0]
-11AD5; [7B E6 09, 05, 05]
+118DF; [7B EC, 05, 05]
+118BF; [7B EC, 05, A0]
-11AD6; [7B E6 10, 05, 05]
+FDD1 11AC0; [7B EE 02, 05, 05] # Pau_Cin_Hau first primary (compressible)
-11AD7; [7B E6 17, 05, 05]
+11AD5; [7B EE 09, 05, 05]
-11AD8; [7B E6 1E, 05, 05]
+11AD6; [7B EE 10, 05, 05]
-11AD9; [7B E6 25, 05, 05]
+11AD7; [7B EE 17, 05, 05]
-11ADA; [7B E6 2C, 05, 05]
+11AD8; [7B EE 1E, 05, 05]
-11ADB; [7B E6 33, 05, 05]
+11AD9; [7B EE 25, 05, 05]
-11AC0; [7B E6 3A, 05, 05]
+11ADA; [7B EE 2C, 05, 05]
-11AC1; [7B E6 41, 05, 05]
+11ADB; [7B EE 33, 05, 05]
-11AC2; [7B E6 48, 05, 05]
+11AC0; [7B EE 3A, 05, 05]
-11AC3; [7B E6 4F, 05, 05]
+11AC1; [7B EE 41, 05, 05]
-11AC4; [7B E6 56, 05, 05]
+11AC2; [7B EE 48, 05, 05]
-11AC5; [7B E6 5D, 05, 05]
+11AC3; [7B EE 4F, 05, 05]
-11AC6; [7B E6 64, 05, 05]
+11AC4; [7B EE 56, 05, 05]
-11AC7; [7B E6 6B, 05, 05]
+11AC5; [7B EE 5D, 05, 05]
-11AC8; [7B E6 72, 05, 05]
+11AC6; [7B EE 64, 05, 05]
-11AC9; [7B E6 79, 05, 05]
+11AC7; [7B EE 6B, 05, 05]
-11ACA; [7B E6 80, 05, 05]
+11AC8; [7B EE 72, 05, 05]
-11ACB; [7B E6 87, 05, 05]
+11AC9; [7B EE 79, 05, 05]
-11ACC; [7B E6 8E, 05, 05]
+11ACA; [7B EE 80, 05, 05]
-11ACD; [7B E6 95, 05, 05]
+11ACB; [7B EE 87, 05, 05]
-11ACE; [7B E6 9C, 05, 05]
+11ACC; [7B EE 8E, 05, 05]
-11ACF; [7B E6 A3, 05, 05]
+11ACD; [7B EE 95, 05, 05]
-11AD0; [7B E6 AA, 05, 05]
+11ACE; [7B EE 9C, 05, 05]
-11AD1; [7B E6 B1, 05, 05]
+11ACF; [7B EE A3, 05, 05]
-11AD2; [7B E6 B8, 05, 05]
+11AD0; [7B EE AA, 05, 05]
-11AD3; [7B E6 BF, 05, 05]
+11AD1; [7B EE B1, 05, 05]
-11AD4; [7B E6 C6, 05, 05]
+11AD2; [7B EE B8, 05, 05]
-11ADC; [7B E6 CD, 05, 05]
+11AD3; [7B EE BF, 05, 05]
-11ADD; [7B E6 D4, 05, 05]
+11AD4; [7B EE C6, 05, 05]
-11ADF; [7B E6 DB, 05, 05]
+11ADC; [7B EE CD, 05, 05]
-11AE0; [7B E6 E2, 05, 05]
+11ADD; [7B EE D4, 05, 05]
-11AE1; [7B E6 E9, 05, 05]
+11ADF; [7B EE DB, 05, 05]
-11AE2; [7B E6 F0, 05, 05]
+11AE0; [7B EE E2, 05, 05]
-11AE3; [7B E6 F7, 05, 05]
+11AE1; [7B EE E9, 05, 05]
-11ADE; [7B E6 FE, 05, 05]
+11AE2; [7B EE F0, 05, 05]
-11AE4; [7B E7 07, 05, 05]
+11AE3; [7B EE F7, 05, 05]
-11AEF; [7B E7 0E, 05, 05]
+11ADE; [7B EE FE, 05, 05]
-11AF2; [7B E7 15, 05, 05]
+11AE4; [7B EF 07, 05, 05]
-11AF1; [7B E7 1C, 05, 05]
+11AEF; [7B EF 0E, 05, 05]
-11AE6; [7B E7 23, 05, 05]
+11AF2; [7B EF 15, 05, 05]
-11AE9; [7B E7 2A, 05, 05]
+11AF1; [7B EF 1C, 05, 05]
-11AE5; [7B E7 31, 05, 05]
+11AE6; [7B EF 23, 05, 05]
-11AE8; [7B E7 38, 05, 05]
+11AE9; [7B EF 2A, 05, 05]
-11AF4; [7B E7 3F, 05, 05]
+11AE5; [7B EF 31, 05, 05]
-11AF7; [7B E7 46, 05, 05]
+11AE8; [7B EF 38, 05, 05]
-11AF3; [7B E7 4D, 05, 05]
+11AF4; [7B EF 3F, 05, 05]
-11AF6; [7B E7 54, 05, 05]
+11AF7; [7B EF 46, 05, 05]
-11AEC; [7B E7 5B, 05, 05]
+11AF3; [7B EF 4D, 05, 05]
-11AEE; [7B E7 62, 05, 05]
+11AF6; [7B EF 54, 05, 05]
-11AEB; [7B E7 69, 05, 05]
+11AEC; [7B EF 5B, 05, 05]
-11AED; [7B E7 70, 05, 05]
+11AEE; [7B EF 62, 05, 05]
-11AF5; [7B E7 77, 05, 05]
+11AEB; [7B EF 69, 05, 05]
-11AF8; [7B E7 7E, 05, 05]
+11AED; [7B EF 70, 05, 05]
-11AE7; [7B E7 85, 05, 05]
+11AF5; [7B EF 77, 05, 05]
-11AEA; [7B E7 8C, 05, 05]
+11AF8; [7B EF 7E, 05, 05]
-11AF0; [7B E7 93, 05, 05]
+11AE7; [7B EF 85, 05, 05]
-FDD1 16B1C; [7B E8 02, 05, 05] # Pahawh_Hmong first primary (compressible)
+11AEA; [7B EF 8C, 05, 05]
-16B00; [7B E8 09, 05, 05]
+11AF0; [7B EF 93, 05, 05]
-16B01; [7B E8 10, 05, 05]
+FDD1 16B1C; [7B F0 02, 05, 05] # Pahawh_Hmong first primary (compressible)
-16B02; [7B E8 17, 05, 05]
+16B00; [7B F0 09, 05, 05]
-16B03; [7B E8 1E, 05, 05]
+16B01; [7B F0 10, 05, 05]
-16B04; [7B E8 25, 05, 05]
+16B02; [7B F0 17, 05, 05]
-16B05; [7B E8 2C, 05, 05]
+16B03; [7B F0 1E, 05, 05]
-16B06; [7B E8 33, 05, 05]
+16B04; [7B F0 25, 05, 05]
-16B07; [7B E8 3A, 05, 05]
+16B05; [7B F0 2C, 05, 05]
-16B08; [7B E8 41, 05, 05]
+16B06; [7B F0 33, 05, 05]
-16B09; [7B E8 48, 05, 05]
+16B07; [7B F0 3A, 05, 05]
-16B0A; [7B E8 4F, 05, 05]
+16B08; [7B F0 41, 05, 05]
-16B0B; [7B E8 56, 05, 05]
+16B09; [7B F0 48, 05, 05]
-16B0C; [7B E8 5D, 05, 05]
+16B0A; [7B F0 4F, 05, 05]
-16B0D; [7B E8 64, 05, 05]
+16B0B; [7B F0 56, 05, 05]
-16B0E; [7B E8 6B, 05, 05]
+16B0C; [7B F0 5D, 05, 05]
-16B0F; [7B E8 72, 05, 05]
+16B0D; [7B F0 64, 05, 05]
-16B10; [7B E8 79, 05, 05]
+16B0E; [7B F0 6B, 05, 05]
-16B11; [7B E8 80, 05, 05]
+16B0F; [7B F0 72, 05, 05]
-16B12; [7B E8 87, 05, 05]
+16B10; [7B F0 79, 05, 05]
-16B13; [7B E8 8E, 05, 05]
+16B11; [7B F0 80, 05, 05]
-16B14; [7B E8 95, 05, 05]
+16B12; [7B F0 87, 05, 05]
-16B15; [7B E8 9C, 05, 05]
+16B13; [7B F0 8E, 05, 05]
-16B16; [7B E8 A3, 05, 05]
+16B14; [7B F0 95, 05, 05]
-16B17; [7B E8 AA, 05, 05]
+16B15; [7B F0 9C, 05, 05]
-16B18; [7B E8 B1, 05, 05]
+16B16; [7B F0 A3, 05, 05]
-16B19; [7B E8 B8, 05, 05]
+16B17; [7B F0 AA, 05, 05]
-16B1A; [7B E8 BF, 05, 05]
+16B18; [7B F0 B1, 05, 05]
-16B1B; [7B E8 C6, 05, 05]
+16B19; [7B F0 B8, 05, 05]
-16B1C; [7B E8 CD, 05, 05]
+16B1A; [7B F0 BF, 05, 05]
-16B1D; [7B E8 D4, 05, 05]
+16B1B; [7B F0 C6, 05, 05]
-16B1E; [7B E8 DB, 05, 05]
+16B1C; [7B F0 CD, 05, 05]
-16B1F; [7B E8 E2, 05, 05]
+16B1D; [7B F0 D4, 05, 05]
-16B20; [7B E8 E9, 05, 05]
+16B1E; [7B F0 DB, 05, 05]
-16B21; [7B E8 F0, 05, 05]
+16B1F; [7B F0 E2, 05, 05]
-16B22; [7B E8 F7, 05, 05]
+16B20; [7B F0 E9, 05, 05]
-16B23; [7B E8 FE, 05, 05]
+16B21; [7B F0 F0, 05, 05]
-16B24; [7B E9 07, 05, 05]
+16B22; [7B F0 F7, 05, 05]
-16B25; [7B E9 0E, 05, 05]
+16B23; [7B F0 FE, 05, 05]
-16B26; [7B E9 15, 05, 05]
+16B24; [7B F1 07, 05, 05]
-16B27; [7B E9 1C, 05, 05]
+16B25; [7B F1 0E, 05, 05]
-16B28; [7B E9 23, 05, 05]
+16B26; [7B F1 15, 05, 05]
-16B29; [7B E9 2A, 05, 05]
+16B27; [7B F1 1C, 05, 05]
-16B2A; [7B E9 31, 05, 05]
+16B28; [7B F1 23, 05, 05]
-16B2B; [7B E9 38, 05, 05]
+16B29; [7B F1 2A, 05, 05]
-16B2C; [7B E9 3F, 05, 05]
+16B2A; [7B F1 31, 05, 05]
-16B2D; [7B E9 46, 05, 05]
+16B2B; [7B F1 38, 05, 05]
-16B2E; [7B E9 4D, 05, 05]
+16B2C; [7B F1 3F, 05, 05]
-16B2F; [7B E9 54, 05, 05]
+16B2D; [7B F1 46, 05, 05]
-16B40; [7B E9 5B, 05, 05]
+16B2E; [7B F1 4D, 05, 05]
-16B41; [7B E9 62, 05, 05]
+16B2F; [7B F1 54, 05, 05]
-16B63; [7B E9 69, 05, 05]
+16B40; [7B F1 5B, 05, 05]
-16B64; [7B E9 70, 05, 05]
+16B41; [7B F1 62, 05, 05]
-16B65; [7B E9 77, 05, 05]
+16B63; [7B F1 69, 05, 05]
-16B66; [7B E9 7E, 05, 05]
+16B64; [7B F1 70, 05, 05]
-16B67; [7B E9 85, 05, 05]
+16B65; [7B F1 77, 05, 05]
-16B68; [7B E9 8C, 05, 05]
+16B66; [7B F1 7E, 05, 05]
-16B69; [7B E9 93, 05, 05]
+16B67; [7B F1 85, 05, 05]
-16B6A; [7B E9 9A, 05, 05]
+16B68; [7B F1 8C, 05, 05]
-16B6B; [7B E9 A1, 05, 05]
+16B69; [7B F1 93, 05, 05]
-16B6C; [7B E9 A8, 05, 05]
+16B6A; [7B F1 9A, 05, 05]
-16B6D; [7B E9 AF, 05, 05]
+16B6B; [7B F1 A1, 05, 05]
-16B6E; [7B E9 B6, 05, 05]
+16B6C; [7B F1 A8, 05, 05]
-16B6F; [7B E9 BD, 05, 05]
+16B6D; [7B F1 AF, 05, 05]
-16B70; [7B E9 C4, 05, 05]
+16B6E; [7B F1 B6, 05, 05]
-16B71; [7B E9 CB, 05, 05]
+16B6F; [7B F1 BD, 05, 05]
-16B72; [7B E9 D2, 05, 05]
+16B70; [7B F1 C4, 05, 05]
-16B73; [7B E9 D9, 05, 05]
+16B71; [7B F1 CB, 05, 05]
-16B74; [7B E9 E0, 05, 05]
+16B72; [7B F1 D2, 05, 05]
-16B75; [7B E9 E7, 05, 05]
+16B73; [7B F1 D9, 05, 05]
-16B76; [7B E9 EE, 05, 05]
+16B74; [7B F1 E0, 05, 05]
-16B77; [7B E9 F5, 05, 05]
+16B75; [7B F1 E7, 05, 05]
-16B7D; [7B E9 FC, 05, 05]
+16B76; [7B F1 EE, 05, 05]
-16B7E; [7B EA 05, 05, 05]
+16B77; [7B F1 F5, 05, 05]
-16B7F; [7B EA 0C, 05, 05]
+16B7D; [7B F1 FC, 05, 05]
-16B80; [7B EA 13, 05, 05]
+16B7E; [7B F2 05, 05, 05]
-16B81; [7B EA 1A, 05, 05]
+16B7F; [7B F2 0C, 05, 05]
-16B82; [7B EA 21, 05, 05]
+16B80; [7B F2 13, 05, 05]
-16B83; [7B EA 28, 05, 05]
+16B81; [7B F2 1A, 05, 05]
-16B84; [7B EA 2F, 05, 05]
+16B82; [7B F2 21, 05, 05]
-16B85; [7B EA 36, 05, 05]
+16B83; [7B F2 28, 05, 05]
-16B86; [7B EA 3D, 05, 05]
+16B84; [7B F2 2F, 05, 05]
-16B87; [7B EA 44, 05, 05]
+16B85; [7B F2 36, 05, 05]
-16B88; [7B EA 4B, 05, 05]
+16B86; [7B F2 3D, 05, 05]
-16B89; [7B EA 52, 05, 05]
+16B87; [7B F2 44, 05, 05]
-16B8A; [7B EA 59, 05, 05]
+16B88; [7B F2 4B, 05, 05]
-16B8B; [7B EA 60, 05, 05]
+16B89; [7B F2 52, 05, 05]
-16B8C; [7B EA 67, 05, 05]
+16B8A; [7B F2 59, 05, 05]
-16B8D; [7B EA 6E, 05, 05]
+16B8B; [7B F2 60, 05, 05]
-16B8E; [7B EA 75, 05, 05]
+16B8C; [7B F2 67, 05, 05]
-16B8F; [7B EA 7C, 05, 05]
+16B8D; [7B F2 6E, 05, 05]
-FDD1 1E108; [7B EB 02, 05, 05] # Nyiakeng_Puachue_Hmong first primary (compressible)
+16B8E; [7B F2 75, 05, 05]
-1E100; [7B EB 09, 05, 05]
+16B8F; [7B F2 7C, 05, 05]
-1E101; [7B EB 10, 05, 05]
+FDD1 1E108; [7B F3 02, 05, 05] # Nyiakeng_Puachue_Hmong first primary (compressible)
-1E102; [7B EB 17, 05, 05]
+1E100; [7B F3 09, 05, 05]
-1E103; [7B EB 1E, 05, 05]
+1E101; [7B F3 10, 05, 05]
-1E104; [7B EB 25, 05, 05]
+1E102; [7B F3 17, 05, 05]
-1E105; [7B EB 2C, 05, 05]
+1E103; [7B F3 1E, 05, 05]
-1E106; [7B EB 33, 05, 05]
+1E104; [7B F3 25, 05, 05]
-1E107; [7B EB 3A, 05, 05]
+1E105; [7B F3 2C, 05, 05]
-1E108; [7B EB 41, 05, 05]
+1E106; [7B F3 33, 05, 05]
-1E109; [7B EB 48, 05, 05]
+1E107; [7B F3 3A, 05, 05]
-1E10A; [7B EB 4F, 05, 05]
+1E108; [7B F3 41, 05, 05]
-1E10B; [7B EB 56, 05, 05]
+1E109; [7B F3 48, 05, 05]
-1E10C; [7B EB 5D, 05, 05]
+1E10A; [7B F3 4F, 05, 05]
-1E10D; [7B EB 64, 05, 05]
+1E10B; [7B F3 56, 05, 05]
-1E10E; [7B EB 6B, 05, 05]
+1E10C; [7B F3 5D, 05, 05]
-1E10F; [7B EB 72, 05, 05]
+1E10D; [7B F3 64, 05, 05]
-1E110; [7B EB 79, 05, 05]
+1E10E; [7B F3 6B, 05, 05]
-1E111; [7B EB 80, 05, 05]
+1E10F; [7B F3 72, 05, 05]
-1E112; [7B EB 87, 05, 05]
+1E110; [7B F3 79, 05, 05]
-1E113; [7B EB 8E, 05, 05]
+1E111; [7B F3 80, 05, 05]
-1E114; [7B EB 95, 05, 05]
+1E112; [7B F3 87, 05, 05]
-1E115; [7B EB 9C, 05, 05]
+1E113; [7B F3 8E, 05, 05]
-1E116; [7B EB A3, 05, 05]
+1E114; [7B F3 95, 05, 05]
-1E117; [7B EB AA, 05, 05]
+1E115; [7B F3 9C, 05, 05]
-1E118; [7B EB B1, 05, 05]
+1E116; [7B F3 A3, 05, 05]
-1E119; [7B EB B8, 05, 05]
+1E117; [7B F3 AA, 05, 05]
-1E11A; [7B EB BF, 05, 05]
+1E118; [7B F3 B1, 05, 05]
-1E11B; [7B EB C6, 05, 05]
+1E119; [7B F3 B8, 05, 05]
-1E11C; [7B EB CD, 05, 05]
+1E11A; [7B F3 BF, 05, 05]
-1E11D; [7B EB D4, 05, 05]
+1E11B; [7B F3 C6, 05, 05]
-1E11E; [7B EB DB, 05, 05]
+1E11C; [7B F3 CD, 05, 05]
-1E11F; [7B EB E2, 05, 05]
+1E11D; [7B F3 D4, 05, 05]
-1E120; [7B EB E9, 05, 05]
+1E11E; [7B F3 DB, 05, 05]
-1E121; [7B EB F0, 05, 05]
+1E11F; [7B F3 E2, 05, 05]
-1E122; [7B EB F7, 05, 05]
+1E120; [7B F3 E9, 05, 05]
-1E123; [7B EB FE, 05, 05]
+1E121; [7B F3 F0, 05, 05]
-1E124; [7B EC 07, 05, 05]
+1E122; [7B F3 F7, 05, 05]
-1E125; [7B EC 0E, 05, 05]
+1E123; [7B F3 FE, 05, 05]
-1E126; [7B EC 15, 05, 05]
+1E124; [7B F4 07, 05, 05]
-1E127; [7B EC 1C, 05, 05]
+1E125; [7B F4 0E, 05, 05]
-1E128; [7B EC 23, 05, 05]
+1E126; [7B F4 15, 05, 05]
-1E129; [7B EC 2A, 05, 05]
+1E127; [7B F4 1C, 05, 05]
-1E12A; [7B EC 31, 05, 05]
+1E128; [7B F4 23, 05, 05]
-1E12B; [7B EC 38, 05, 05]
+1E129; [7B F4 2A, 05, 05]
-1E12C; [7B EC 3F, 05, 05]
+1E12A; [7B F4 31, 05, 05]
-1E137; [7B EC 46, 05, 05]
+1E12B; [7B F4 38, 05, 05]
-1E138; [7B EC 4D, 05, 05]
+1E12C; [7B F4 3F, 05, 05]
-1E139; [7B EC 54, 05, 05]
+1E137; [7B F4 46, 05, 05]
-1E13A; [7B EC 5B, 05, 05]
+1E138; [7B F4 4D, 05, 05]
-1E13B; [7B EC 62, 05, 05]
+1E139; [7B F4 54, 05, 05]
-1E14E; [7B EC 69, 05, 05]
+1E13A; [7B F4 5B, 05, 05]
-FDD1 1E2E1; [7B ED 02, 05, 05] # Wancho first primary (compressible)
+1E13B; [7B F4 62, 05, 05]
-1E2C0; [7B ED 09, 05, 05]
+1E14E; [7B F4 69, 05, 05]
-1E2C1; [7B ED 10, 05, 05]
+FDD1 1E2E1; [7B F5 02, 05, 05] # Wancho first primary (compressible)
-1E2C2; [7B ED 17, 05, 05]
+1E2C0; [7B F5 09, 05, 05]
-1E2C3; [7B ED 1E, 05, 05]
+1E2C1; [7B F5 10, 05, 05]
-1E2C4; [7B ED 25, 05, 05]
+1E2C2; [7B F5 17, 05, 05]
-1E2C5; [7B ED 2C, 05, 05]
+1E2C3; [7B F5 1E, 05, 05]
-1E2C6; [7B ED 33, 05, 05]
+1E2C4; [7B F5 25, 05, 05]
-1E2C7; [7B ED 3A, 05, 05]
+1E2C5; [7B F5 2C, 05, 05]
-1E2C8; [7B ED 41, 05, 05]
+1E2C6; [7B F5 33, 05, 05]
-1E2C9; [7B ED 48, 05, 05]
+1E2C7; [7B F5 3A, 05, 05]
-1E2CA; [7B ED 4F, 05, 05]
+1E2C8; [7B F5 41, 05, 05]
-1E2CB; [7B ED 56, 05, 05]
+1E2C9; [7B F5 48, 05, 05]
-1E2CC; [7B ED 5D, 05, 05]
+1E2CA; [7B F5 4F, 05, 05]
-1E2CD; [7B ED 64, 05, 05]
+1E2CB; [7B F5 56, 05, 05]
-1E2CE; [7B ED 6B, 05, 05]
+1E2CC; [7B F5 5D, 05, 05]
-1E2CF; [7B ED 72, 05, 05]
+1E2CD; [7B F5 64, 05, 05]
-1E2D0; [7B ED 79, 05, 05]
+1E2CE; [7B F5 6B, 05, 05]
-1E2D1; [7B ED 80, 05, 05]
+1E2CF; [7B F5 72, 05, 05]
-1E2D2; [7B ED 87, 05, 05]
+1E2D0; [7B F5 79, 05, 05]
-1E2D3; [7B ED 8E, 05, 05]
+1E2D1; [7B F5 80, 05, 05]
-1E2D4; [7B ED 95, 05, 05]
+1E2D2; [7B F5 87, 05, 05]
-1E2D5; [7B ED 9C, 05, 05]
+1E2D3; [7B F5 8E, 05, 05]
-1E2D6; [7B ED A3, 05, 05]
+1E2D4; [7B F5 95, 05, 05]
-1E2D7; [7B ED AA, 05, 05]
+1E2D5; [7B F5 9C, 05, 05]
-1E2D8; [7B ED B1, 05, 05]
+1E2D6; [7B F5 A3, 05, 05]
-1E2D9; [7B ED B8, 05, 05]
+1E2D7; [7B F5 AA, 05, 05]
-1E2DA; [7B ED BF, 05, 05]
+1E2D8; [7B F5 B1, 05, 05]
-1E2DB; [7B ED C6, 05, 05]
+1E2D9; [7B F5 B8, 05, 05]
-1E2DC; [7B ED CD, 05, 05]
+1E2DA; [7B F5 BF, 05, 05]
-1E2DD; [7B ED D4, 05, 05]
+1E2DB; [7B F5 C6, 05, 05]
-1E2DE; [7B ED DB, 05, 05]
+1E2DC; [7B F5 CD, 05, 05]
-1E2DF; [7B ED E2, 05, 05]
+1E2DD; [7B F5 D4, 05, 05]
-1E2E0; [7B ED E9, 05, 05]
+1E2DE; [7B F5 DB, 05, 05]
-1E2E1; [7B ED F0, 05, 05]
+1E2DF; [7B F5 E2, 05, 05]
-1E2E2; [7B ED F7, 05, 05]
+1E2E0; [7B F5 E9, 05, 05]
-1E2E3; [7B ED FE, 05, 05]
+1E2E1; [7B F5 F0, 05, 05]
-1E2E4; [7B EE 07, 05, 05]
+1E2E2; [7B F5 F7, 05, 05]
-1E2E5; [7B EE 0E, 05, 05]
+1E2E3; [7B F5 FE, 05, 05]
-1E2E6; [7B EE 15, 05, 05]
+1E2E4; [7B F6 07, 05, 05]
-1E2E7; [7B EE 1C, 05, 05]
+1E2E5; [7B F6 0E, 05, 05]
-1E2E8; [7B EE 23, 05, 05]
+1E2E6; [7B F6 15, 05, 05]
-1E2E9; [7B EE 2A, 05, 05]
+1E2E7; [7B F6 1C, 05, 05]
-1E2EA; [7B EE 31, 05, 05]
+1E2E8; [7B F6 23, 05, 05]
-1E2EB; [7B EE 38, 05, 05]
+1E2E9; [7B F6 2A, 05, 05]
-FDD1 10280; [7B EF 02, 05, 05] # Lycian first primary (compressible)
+1E2EA; [7B F6 31, 05, 05]
-10280; [7B EF 09, 05, 05]
+1E2EB; [7B F6 38, 05, 05]
-10281; [7B EF 10, 05, 05]
+FDD1 10280; [7B F7 02, 05, 05] # Lycian first primary (compressible)
-10282; [7B EF 17, 05, 05]
+10280; [7B F7 09, 05, 05]
-10283; [7B EF 1E, 05, 05]
+10281; [7B F7 10, 05, 05]
-10284; [7B EF 25, 05, 05]
+10282; [7B F7 17, 05, 05]
-10285; [7B EF 2C, 05, 05]
+10283; [7B F7 1E, 05, 05]
-10286; [7B EF 33, 05, 05]
+10284; [7B F7 25, 05, 05]
-10287; [7B EF 3A, 05, 05]
+10285; [7B F7 2C, 05, 05]
-10288; [7B EF 41, 05, 05]
+10286; [7B F7 33, 05, 05]
-10289; [7B EF 48, 05, 05]
+10287; [7B F7 3A, 05, 05]
-1028A; [7B EF 4F, 05, 05]
+10288; [7B F7 41, 05, 05]
-1028B; [7B EF 56, 05, 05]
+10289; [7B F7 48, 05, 05]
-1028C; [7B EF 5D, 05, 05]
+1028A; [7B F7 4F, 05, 05]
-1028D; [7B EF 64, 05, 05]
+1028B; [7B F7 56, 05, 05]
-1028E; [7B EF 6B, 05, 05]
+1028C; [7B F7 5D, 05, 05]
-1028F; [7B EF 72, 05, 05]
+1028D; [7B F7 64, 05, 05]
-10290; [7B EF 79, 05, 05]
+1028E; [7B F7 6B, 05, 05]
-10291; [7B EF 80, 05, 05]
+1028F; [7B F7 72, 05, 05]
-10292; [7B EF 87, 05, 05]
+10290; [7B F7 79, 05, 05]
-10293; [7B EF 8E, 05, 05]
+10291; [7B F7 80, 05, 05]
-10294; [7B EF 95, 05, 05]
+10292; [7B F7 87, 05, 05]
-10295; [7B EF 9C, 05, 05]
+10293; [7B F7 8E, 05, 05]
-10296; [7B EF A3, 05, 05]
+10294; [7B F7 95, 05, 05]
-10297; [7B EF AA, 05, 05]
+10295; [7B F7 9C, 05, 05]
-10298; [7B EF B1, 05, 05]
+10296; [7B F7 A3, 05, 05]
-10299; [7B EF B8, 05, 05]
+10297; [7B F7 AA, 05, 05]
-1029A; [7B EF BF, 05, 05]
+10298; [7B F7 B1, 05, 05]
-1029B; [7B EF C6, 05, 05]
+10299; [7B F7 B8, 05, 05]
-1029C; [7B EF CD, 05, 05]
+1029A; [7B F7 BF, 05, 05]
-FDD1 102A0; [7B F0 02, 05, 05] # Carian first primary (compressible)
+1029B; [7B F7 C6, 05, 05]
-102A0; [7B F0 09, 05, 05]
+1029C; [7B F7 CD, 05, 05]
-102A1; [7B F0 10, 05, 05]
+FDD1 102A0; [7B F8 02, 05, 05] # Carian first primary (compressible)
-102A2; [7B F0 17, 05, 05]
+102A0; [7B F8 09, 05, 05]
-102A3; [7B F0 1E, 05, 05]
+102A1; [7B F8 10, 05, 05]
-102A4; [7B F0 25, 05, 05]
+102A2; [7B F8 17, 05, 05]
-102A5; [7B F0 2C, 05, 05]
+102A3; [7B F8 1E, 05, 05]
-102A6; [7B F0 33, 05, 05]
+102A4; [7B F8 25, 05, 05]
-102A7; [7B F0 3A, 05, 05]
+102A5; [7B F8 2C, 05, 05]
-102A8; [7B F0 41, 05, 05]
+102A6; [7B F8 33, 05, 05]
-102A9; [7B F0 48, 05, 05]
+102A7; [7B F8 3A, 05, 05]
-102AA; [7B F0 4F, 05, 05]
+102A8; [7B F8 41, 05, 05]
-102AB; [7B F0 56, 05, 05]
+102A9; [7B F8 48, 05, 05]
-102AC; [7B F0 5D, 05, 05]
+102AA; [7B F8 4F, 05, 05]
-102AD; [7B F0 64, 05, 05]
+102AB; [7B F8 56, 05, 05]
-102AE; [7B F0 6B, 05, 05]
+102AC; [7B F8 5D, 05, 05]
-102AF; [7B F0 72, 05, 05]
+102AD; [7B F8 64, 05, 05]
-102B0; [7B F0 79, 05, 05]
+102AE; [7B F8 6B, 05, 05]
-102B1; [7B F0 80, 05, 05]
+102AF; [7B F8 72, 05, 05]
-102B2; [7B F0 87, 05, 05]
+102B0; [7B F8 79, 05, 05]
-102B3; [7B F0 8E, 05, 05]
+102B1; [7B F8 80, 05, 05]
-102B4; [7B F0 95, 05, 05]
+102B2; [7B F8 87, 05, 05]
-102B5; [7B F0 9C, 05, 05]
+102B3; [7B F8 8E, 05, 05]
-102B6; [7B F0 A3, 05, 05]
+102B4; [7B F8 95, 05, 05]
-102B7; [7B F0 AA, 05, 05]
+102B5; [7B F8 9C, 05, 05]
-102B8; [7B F0 B1, 05, 05]
+102B6; [7B F8 A3, 05, 05]
-102B9; [7B F0 B8, 05, 05]
+102B7; [7B F8 AA, 05, 05]
-102BA; [7B F0 BF, 05, 05]
+102B8; [7B F8 B1, 05, 05]
-102BB; [7B F0 C6, 05, 05]
+102B9; [7B F8 B8, 05, 05]
-102BC; [7B F0 CD, 05, 05]
+102BA; [7B F8 BF, 05, 05]
-102BD; [7B F0 D4, 05, 05]
+102BB; [7B F8 C6, 05, 05]
-102BE; [7B F0 DB, 05, 05]
+102BC; [7B F8 CD, 05, 05]
-102BF; [7B F0 E2, 05, 05]
+102BD; [7B F8 D4, 05, 05]
-102C0; [7B F0 E9, 05, 05]
+102BE; [7B F8 DB, 05, 05]
-102C1; [7B F0 F0, 05, 05]
+102BF; [7B F8 E2, 05, 05]
-102C2; [7B F0 F7, 05, 05]
+102C0; [7B F8 E9, 05, 05]
-102C3; [7B F0 FE, 05, 05]
+102C1; [7B F8 F0, 05, 05]
-102C4; [7B F1 07, 05, 05]
+102C2; [7B F8 F7, 05, 05]
-102C5; [7B F1 0E, 05, 05]
+102C3; [7B F8 FE, 05, 05]
-102C6; [7B F1 15, 05, 05]
+102C4; [7B F9 07, 05, 05]
-102C7; [7B F1 1C, 05, 05]
+102C5; [7B F9 0E, 05, 05]
-102C8; [7B F1 23, 05, 05]
+102C6; [7B F9 15, 05, 05]
-102C9; [7B F1 2A, 05, 05]
+102C7; [7B F9 1C, 05, 05]
-102CA; [7B F1 31, 05, 05]
+102C8; [7B F9 23, 05, 05]
-102CB; [7B F1 38, 05, 05]
+102C9; [7B F9 2A, 05, 05]
-102CC; [7B F1 3F, 05, 05]
+102CA; [7B F9 31, 05, 05]
-102CD; [7B F1 46, 05, 05]
+102CB; [7B F9 38, 05, 05]
-102CE; [7B F1 4D, 05, 05]
+102CC; [7B F9 3F, 05, 05]
-102CF; [7B F1 54, 05, 05]
+102CD; [7B F9 46, 05, 05]
-102D0; [7B F1 5B, 05, 05]
+102CE; [7B F9 4D, 05, 05]
-FDD1 10920; [7B F2 02, 05, 05] # Lydian first primary (compressible)
+102CF; [7B F9 54, 05, 05]
-10920; [7B F2 09, 05, 05]
+102D0; [7B F9 5B, 05, 05]
-10921; [7B F2 10, 05, 05]
+FDD1 10920; [7B FA 02, 05, 05] # Lydian first primary (compressible)
-10922; [7B F2 17, 05, 05]
+10920; [7B FA 09, 05, 05]
-10923; [7B F2 1E, 05, 05]
+10921; [7B FA 10, 05, 05]
-10924; [7B F2 25, 05, 05]
+10922; [7B FA 17, 05, 05]
-10925; [7B F2 2C, 05, 05]
+10923; [7B FA 1E, 05, 05]
-10926; [7B F2 33, 05, 05]
+10924; [7B FA 25, 05, 05]
-10927; [7B F2 3A, 05, 05]
+10925; [7B FA 2C, 05, 05]
-10928; [7B F2 41, 05, 05]
+10926; [7B FA 33, 05, 05]
-10929; [7B F2 48, 05, 05]
+10927; [7B FA 3A, 05, 05]
-1092A; [7B F2 4F, 05, 05]
+10928; [7B FA 41, 05, 05]
-1092B; [7B F2 56, 05, 05]
+10929; [7B FA 48, 05, 05]
-1092C; [7B F2 5D, 05, 05]
+1092A; [7B FA 4F, 05, 05]
-1092D; [7B F2 64, 05, 05]
+1092B; [7B FA 56, 05, 05]
-1092E; [7B F2 6B, 05, 05]
+1092C; [7B FA 5D, 05, 05]
-1092F; [7B F2 72, 05, 05]
+1092D; [7B FA 64, 05, 05]
-10930; [7B F2 79, 05, 05]
+1092E; [7B FA 6B, 05, 05]
-10931; [7B F2 80, 05, 05]
+1092F; [7B FA 72, 05, 05]
-10932; [7B F2 87, 05, 05]
+10930; [7B FA 79, 05, 05]
-10933; [7B F2 8E, 05, 05]
+10931; [7B FA 80, 05, 05]
-10934; [7B F2 95, 05, 05]
+10932; [7B FA 87, 05, 05]
-10935; [7B F2 9C, 05, 05]
+10933; [7B FA 8E, 05, 05]
-10936; [7B F2 A3, 05, 05]
+10934; [7B FA 95, 05, 05]
-10937; [7B F2 AA, 05, 05]
+10935; [7B FA 9C, 05, 05]
-10938; [7B F2 B1, 05, 05]
+10936; [7B FA A3, 05, 05]
-10939; [7B F2 B8, 05, 05]
+10937; [7B FA AA, 05, 05]
-FDD1 10300; [7B F3 02, 05, 05] # OLD_ITALIC first primary (compressible)
+10938; [7B FA B1, 05, 05]
-10300; [7B F3 09, 05, 05]
+10939; [7B FA B8, 05, 05]
-10301; [7B F3 10, 05, 05]
+FDD1 10300; [7B FB 02, 05, 05] # OLD_ITALIC first primary (compressible)
-10302; [7B F3 17, 05, 05]
+10300; [7B FB 09, 05, 05]
-10303; [7B F3 1E, 05, 05]
+10301; [7B FB 10, 05, 05]
-10304; [7B F3 25, 05, 05]
+10302; [7B FB 17, 05, 05]
-10305; [7B F3 2C, 05, 05]
+10303; [7B FB 1E, 05, 05]
-10306; [7B F3 33, 05, 05]
+10304; [7B FB 25, 05, 05]
-10307; [7B F3 3A, 05, 05]
+10305; [7B FB 2C, 05, 05]
-10308; [7B F3 41, 05, 05]
+10306; [7B FB 33, 05, 05]
-10309; [7B F3 48, 05, 05]
+10307; [7B FB 3A, 05, 05]
-1030A; [7B F3 4F, 05, 05]
+10308; [7B FB 41, 05, 05]
-1030B; [7B F3 56, 05, 05]
+10309; [7B FB 48, 05, 05]
-1030C; [7B F3 5D, 05, 05]
+1030A; [7B FB 4F, 05, 05]
-1030D; [7B F3 64, 05, 05]
+1030B; [7B FB 56, 05, 05]
-1030E; [7B F3 6B, 05, 05]
+1030C; [7B FB 5D, 05, 05]
-1031F; [7B F3 72, 05, 05]
+1030D; [7B FB 64, 05, 05]
-1030F; [7B F3 79, 05, 05]
+1030E; [7B FB 6B, 05, 05]
-10310; [7B F3 80, 05, 05]
+1031F; [7B FB 72, 05, 05]
-10311; [7B F3 87, 05, 05]
+1030F; [7B FB 79, 05, 05]
-10312; [7B F3 8E, 05, 05]
+10310; [7B FB 80, 05, 05]
-10313; [7B F3 95, 05, 05]
+10311; [7B FB 87, 05, 05]
-10314; [7B F3 9C, 05, 05]
+10312; [7B FB 8E, 05, 05]
-10315; [7B F3 A3, 05, 05]
+10313; [7B FB 95, 05, 05]
-10316; [7B F3 AA, 05, 05]
+10314; [7B FB 9C, 05, 05]
-10317; [7B F3 B1, 05, 05]
+10315; [7B FB A3, 05, 05]
-10318; [7B F3 B8, 05, 05]
+10316; [7B FB AA, 05, 05]
-10319; [7B F3 BF, 05, 05]
+10317; [7B FB B1, 05, 05]
-1031A; [7B F3 C6, 05, 05]
+10318; [7B FB B8, 05, 05]
-1031B; [7B F3 CD, 05, 05]
+10319; [7B FB BF, 05, 05]
-1031C; [7B F3 D4, 05, 05]
+1031A; [7B FB C6, 05, 05]
-1031D; [7B F3 DB, 05, 05]
+1031B; [7B FB CD, 05, 05]
-1031E; [7B F3 E2, 05, 05]
+1031C; [7B FB D4, 05, 05]
-1032D; [7B F3 E9, 05, 05]
+1031D; [7B FB DB, 05, 05]
-1032E; [7B F3 F0, 05, 05]
+1031E; [7B FB E2, 05, 05]
-1032F; [7B F3 F7, 05, 05]
+1032D; [7B FB E9, 05, 05]
-FDD1 10330; [7B F4 02, 05, 05] # GOTHIC first primary (compressible)
+1032E; [7B FB F0, 05, 05]
-10330; [7B F4 09, 05, 05]
+1032F; [7B FB F7, 05, 05]
-10331; [7B F4 10, 05, 05]
+FDD1 10330; [7B FC 02, 05, 05] # GOTHIC first primary (compressible)
-10332; [7B F4 17, 05, 05]
+10330; [7B FC 09, 05, 05]
-10333; [7B F4 1E, 05, 05]
+10331; [7B FC 10, 05, 05]
-10334; [7B F4 25, 05, 05]
+10332; [7B FC 17, 05, 05]
-10335; [7B F4 2C, 05, 05]
+10333; [7B FC 1E, 05, 05]
-10336; [7B F4 33, 05, 05]
+10334; [7B FC 25, 05, 05]
-10337; [7B F4 3A, 05, 05]
+10335; [7B FC 2C, 05, 05]
-10338; [7B F4 41, 05, 05]
+10336; [7B FC 33, 05, 05]
-10339; [7B F4 48, 05, 05]
+10337; [7B FC 3A, 05, 05]
-1033A; [7B F4 4F, 05, 05]
+10338; [7B FC 41, 05, 05]
-1033B; [7B F4 56, 05, 05]
+10339; [7B FC 48, 05, 05]
-1033C; [7B F4 5D, 05, 05]
+1033A; [7B FC 4F, 05, 05]
-1033D; [7B F4 64, 05, 05]
+1033B; [7B FC 56, 05, 05]
-1033E; [7B F4 6B, 05, 05]
+1033C; [7B FC 5D, 05, 05]
-1033F; [7B F4 72, 05, 05]
+1033D; [7B FC 64, 05, 05]
-10340; [7B F4 79, 05, 05]
+1033E; [7B FC 6B, 05, 05]
-10341; [7B F4 80, 05, 05]
+1033F; [7B FC 72, 05, 05]
-10342; [7B F4 87, 05, 05]
+10340; [7B FC 79, 05, 05]
-10343; [7B F4 8E, 05, 05]
+10341; [7B FC 80, 05, 05]
-10344; [7B F4 95, 05, 05]
+10342; [7B FC 87, 05, 05]
-10345; [7B F4 9C, 05, 05]
+10343; [7B FC 8E, 05, 05]
-10346; [7B F4 A3, 05, 05]
+10344; [7B FC 95, 05, 05]
-10347; [7B F4 AA, 05, 05]
+10345; [7B FC 9C, 05, 05]
-10348; [7B F4 B1, 05, 05]
+10346; [7B FC A3, 05, 05]
-10349; [7B F4 B8, 05, 05]
+10347; [7B FC AA, 05, 05]
-1034A; [7B F4 BF, 05, 05]
+10348; [7B FC B1, 05, 05]
+
+10349; [7B FC B8, 05, 05]
+
+1034A; [7B FC BF, 05, 05]
FDD1 10414; [7C 04 02, 05, 05] # DESERET first primary starts new lead byte (compressible)
@@ -48049,2395 +48817,2529 @@ FDD1 10F42; [7C C4 02, 05, 05] # Sogdian first primary (compressible)
10F44; [7C C8 10, 05, 05]
-FDD1 10380; [7C C9 02, 05, 05] # UGARITIC first primary (compressible)
+FDD1 10E88; [7C C9 02, 05, 05] # Yezidi first primary (compressible)
+
+10E80; [7C C9 09, 05, 05]
+
+10E81; [7C C9 10, 05, 05]
+
+10E82; [7C C9 17, 05, 05]
+
+10E83; [7C C9 1E, 05, 05]
+
+10E84; [7C C9 25, 05, 05]
+
+10E85; [7C C9 2C, 05, 05]
+
+10E86; [7C C9 33, 05, 05]
+
+10E87; [7C C9 3A, 05, 05]
+
+10E88; [7C C9 41, 05, 05]
+
+10E89; [7C C9 48, 05, 05]
+
+10E8A; [7C C9 4F, 05, 05]
+
+10E8B; [7C C9 56, 05, 05]
+
+10E8C; [7C C9 5D, 05, 05]
+
+10E8D; [7C C9 64, 05, 05]
-10380; [7C C9 09, 05, 05]
+10E8E; [7C C9 6B, 05, 05]
-10381; [7C C9 10, 05, 05]
+10E8F; [7C C9 72, 05, 05]
-10382; [7C C9 17, 05, 05]
+10E90; [7C C9 79, 05, 05]
-10383; [7C C9 1E, 05, 05]
+10E91; [7C C9 80, 05, 05]
-10384; [7C C9 25, 05, 05]
+10E92; [7C C9 87, 05, 05]
-10385; [7C C9 2C, 05, 05]
+10E93; [7C C9 8E, 05, 05]
-10386; [7C C9 33, 05, 05]
+10E94; [7C C9 95, 05, 05]
-10387; [7C C9 3A, 05, 05]
+10E95; [7C C9 9C, 05, 05]
-10388; [7C C9 41, 05, 05]
+10E96; [7C C9 A3, 05, 05]
-10389; [7C C9 48, 05, 05]
+10E97; [7C C9 AA, 05, 05]
-1038A; [7C C9 4F, 05, 05]
+10E98; [7C C9 B1, 05, 05]
-1038B; [7C C9 56, 05, 05]
+10E99; [7C C9 B8, 05, 05]
-1038C; [7C C9 5D, 05, 05]
+10E9A; [7C C9 BF, 05, 05]
-1038D; [7C C9 64, 05, 05]
+10E9B; [7C C9 C6, 05, 05]
-1038E; [7C C9 6B, 05, 05]
+10E9C; [7C C9 CD, 05, 05]
-1038F; [7C C9 72, 05, 05]
+10E9D; [7C C9 D4, 05, 05]
-10390; [7C C9 79, 05, 05]
+10E9E; [7C C9 DB, 05, 05]
-10391; [7C C9 80, 05, 05]
+10E9F; [7C C9 E2, 05, 05]
-10392; [7C C9 87, 05, 05]
+10EA0; [7C C9 E9, 05, 05]
-10393; [7C C9 8E, 05, 05]
+10EB0; [7C C9 F0, 05, 05]
-10394; [7C C9 95, 05, 05]
+10EA1; [7C C9 F7, 05, 05]
-10395; [7C C9 9C, 05, 05]
+10EA2; [7C C9 FE, 05, 05]
-10396; [7C C9 A3, 05, 05]
+10EA3; [7C CA 07, 05, 05]
-10397; [7C C9 AA, 05, 05]
+10EA4; [7C CA 0E, 05, 05]
-10398; [7C C9 B1, 05, 05]
+10EA5; [7C CA 15, 05, 05]
-10399; [7C C9 B8, 05, 05]
+10EA6; [7C CA 1C, 05, 05]
-1039A; [7C C9 BF, 05, 05]
+10EA7; [7C CA 23, 05, 05]
-1039B; [7C C9 C6, 05, 05]
+10EA8; [7C CA 2A, 05, 05]
-1039C; [7C C9 CD, 05, 05]
+10EB1; [7C CA 31, 05, 05]
-1039D; [7C C9 D4, 05, 05]
+10EA9; [7C CA 38, 05, 05]
-FDD1 103A0; [7C CA 02, 05, 05] # OLD_PERSIAN first primary (compressible)
+FDD1 10FBF; [7C CB 02, 05, 05] # Chorasmian first primary (compressible)
-103A0; [7C CA 09, 05, 05]
+10FB0; [7C CB 09, 05, 05]
-103A1; [7C CA 10, 05, 05]
+10FB1; [7C CB 10, 05, 05]
-103A2; [7C CA 17, 05, 05]
+10FB2; [7C CB 17, 05, 05]
-103A3; [7C CA 1E, 05, 05]
+10FB3; [7C CB 1E, 05, 05]
-103A4; [7C CA 25, 05, 05]
+10FB4; [7C CB 25, 05, 05]
-103A5; [7C CA 2C, 05, 05]
+10FB5; [7C CB 2C, 05, 05]
-103A6; [7C CA 33, 05, 05]
+10FB6; [7C CB 33, 05, 05]
-103A7; [7C CA 3A, 05, 05]
+10FB7; [7C CB 3A, 05, 05]
-103A8; [7C CA 41, 05, 05]
+10FB8; [7C CB 41, 05, 05]
-103A9; [7C CA 48, 05, 05]
+10FB9; [7C CB 48, 05, 05]
-103AA; [7C CA 4F, 05, 05]
+10FBA; [7C CB 4F, 05, 05]
-103AB; [7C CA 56, 05, 05]
+10FBB; [7C CB 56, 05, 05]
-103AC; [7C CA 5D, 05, 05]
+10FBC; [7C CB 5D, 05, 05]
-103AD; [7C CA 64, 05, 05]
+10FBD; [7C CB 64, 05, 05]
-103AE; [7C CA 6B, 05, 05]
+10FBE; [7C CB 6B, 05, 05]
-103AF; [7C CA 72, 05, 05]
+10FBF; [7C CB 72, 05, 05]
-103B0; [7C CA 79, 05, 05]
+10FC0; [7C CB 79, 05, 05]
-103B1; [7C CA 80, 05, 05]
+10FC1; [7C CB 80, 05, 05]
-103B2; [7C CA 87, 05, 05]
+10FC2; [7C CB 87, 05, 05]
-103B3; [7C CA 8E, 05, 05]
+10FC3; [7C CB 8E, 05, 05]
-103B4; [7C CA 95, 05, 05]
+10FC4; [7C CB 95, 05, 05]
-103B5; [7C CA 9C, 05, 05]
+FDD1 10380; [7C CC 02, 05, 05] # UGARITIC first primary (compressible)
-103B6; [7C CA A3, 05, 05]
+10380; [7C CC 09, 05, 05]
-103B7; [7C CA AA, 05, 05]
+10381; [7C CC 10, 05, 05]
-103B8; [7C CA B1, 05, 05]
+10382; [7C CC 17, 05, 05]
-103B9; [7C CA B8, 05, 05]
+10383; [7C CC 1E, 05, 05]
-103BA; [7C CA BF, 05, 05]
+10384; [7C CC 25, 05, 05]
-103BB; [7C CA C6, 05, 05]
+10385; [7C CC 2C, 05, 05]
-103BC; [7C CA CD, 05, 05]
+10386; [7C CC 33, 05, 05]
-103BD; [7C CA D4, 05, 05]
+10387; [7C CC 3A, 05, 05]
-103BE; [7C CA DB, 05, 05]
+10388; [7C CC 41, 05, 05]
-103BF; [7C CA E2, 05, 05]
+10389; [7C CC 48, 05, 05]
-103C0; [7C CA E9, 05, 05]
+1038A; [7C CC 4F, 05, 05]
-103C1; [7C CA F0, 05, 05]
+1038B; [7C CC 56, 05, 05]
-103C2; [7C CA F7, 05, 05]
+1038C; [7C CC 5D, 05, 05]
-103C3; [7C CA FE, 05, 05]
+1038D; [7C CC 64, 05, 05]
-103C8; [7C CB 07, 05, 05]
+1038E; [7C CC 6B, 05, 05]
-103C9; [7C CB 0E, 05, 05]
+1038F; [7C CC 72, 05, 05]
-103CA; [7C CB 15, 05, 05]
+10390; [7C CC 79, 05, 05]
-103CB; [7C CB 1C, 05, 05]
+10391; [7C CC 80, 05, 05]
-103CC; [7C CB 23, 05, 05]
+10392; [7C CC 87, 05, 05]
-103CD; [7C CB 2A, 05, 05]
+10393; [7C CC 8E, 05, 05]
-103CE; [7C CB 31, 05, 05]
+10394; [7C CC 95, 05, 05]
-103CF; [7C CB 38, 05, 05]
+10395; [7C CC 9C, 05, 05]
-FDD1 12000; [7C CC 02, 05, 05] # Cuneiform first primary (compressible)
+10396; [7C CC A3, 05, 05]
-12000; [7C CC 09, 05, 05]
+10397; [7C CC AA, 05, 05]
-12001; [7C CC 10, 05, 05]
+10398; [7C CC B1, 05, 05]
-12002; [7C CC 17, 05, 05]
+10399; [7C CC B8, 05, 05]
-12003; [7C CC 1E, 05, 05]
+1039A; [7C CC BF, 05, 05]
-12004; [7C CC 25, 05, 05]
+1039B; [7C CC C6, 05, 05]
-12005; [7C CC 2C, 05, 05]
+1039C; [7C CC CD, 05, 05]
-12006; [7C CC 33, 05, 05]
+1039D; [7C CC D4, 05, 05]
-12007; [7C CC 3A, 05, 05]
+FDD1 103A0; [7C CD 02, 05, 05] # OLD_PERSIAN first primary (compressible)
-12008; [7C CC 41, 05, 05]
+103A0; [7C CD 09, 05, 05]
-12009; [7C CC 48, 05, 05]
+103A1; [7C CD 10, 05, 05]
-1200A; [7C CC 4F, 05, 05]
+103A2; [7C CD 17, 05, 05]
-1200B; [7C CC 56, 05, 05]
+103A3; [7C CD 1E, 05, 05]
-1200C; [7C CC 5D, 05, 05]
+103A4; [7C CD 25, 05, 05]
-1200D; [7C CC 64, 05, 05]
+103A5; [7C CD 2C, 05, 05]
-1200E; [7C CC 6B, 05, 05]
+103A6; [7C CD 33, 05, 05]
-1200F; [7C CC 72, 05, 05]
+103A7; [7C CD 3A, 05, 05]
-12010; [7C CC 79, 05, 05]
+103A8; [7C CD 41, 05, 05]
-12011; [7C CC 80, 05, 05]
+103A9; [7C CD 48, 05, 05]
-12012; [7C CC 87, 05, 05]
+103AA; [7C CD 4F, 05, 05]
-12013; [7C CC 8E, 05, 05]
+103AB; [7C CD 56, 05, 05]
-12014; [7C CC 95, 05, 05]
+103AC; [7C CD 5D, 05, 05]
-12015; [7C CC 9C, 05, 05]
+103AD; [7C CD 64, 05, 05]
-12016; [7C CC A3, 05, 05]
+103AE; [7C CD 6B, 05, 05]
-12017; [7C CC AA, 05, 05]
+103AF; [7C CD 72, 05, 05]
-12018; [7C CC B1, 05, 05]
+103B0; [7C CD 79, 05, 05]
-12019; [7C CC B8, 05, 05]
+103B1; [7C CD 80, 05, 05]
-1201A; [7C CC BF, 05, 05]
+103B2; [7C CD 87, 05, 05]
-1201B; [7C CC C6, 05, 05]
+103B3; [7C CD 8E, 05, 05]
-1201C; [7C CC CD, 05, 05]
+103B4; [7C CD 95, 05, 05]
-1201D; [7C CC D4, 05, 05]
+103B5; [7C CD 9C, 05, 05]
-1201E; [7C CC DB, 05, 05]
+103B6; [7C CD A3, 05, 05]
-1201F; [7C CC E2, 05, 05]
+103B7; [7C CD AA, 05, 05]
-12020; [7C CC E9, 05, 05]
+103B8; [7C CD B1, 05, 05]
-12021; [7C CC F0, 05, 05]
+103B9; [7C CD B8, 05, 05]
-12022; [7C CC F7, 05, 05]
+103BA; [7C CD BF, 05, 05]
-12023; [7C CC FE, 05, 05]
+103BB; [7C CD C6, 05, 05]
-12024; [7C CD 07, 05, 05]
+103BC; [7C CD CD, 05, 05]
-12025; [7C CD 0E, 05, 05]
+103BD; [7C CD D4, 05, 05]
-12026; [7C CD 15, 05, 05]
+103BE; [7C CD DB, 05, 05]
-12027; [7C CD 1C, 05, 05]
+103BF; [7C CD E2, 05, 05]
-12028; [7C CD 23, 05, 05]
+103C0; [7C CD E9, 05, 05]
-12029; [7C CD 2A, 05, 05]
+103C1; [7C CD F0, 05, 05]
-1202A; [7C CD 31, 05, 05]
+103C2; [7C CD F7, 05, 05]
-1202B; [7C CD 38, 05, 05]
+103C3; [7C CD FE, 05, 05]
-1202C; [7C CD 3F, 05, 05]
+103C8; [7C CE 07, 05, 05]
-1202D; [7C CD 46, 05, 05]
+103C9; [7C CE 0E, 05, 05]
-1202E; [7C CD 4D, 05, 05]
+103CA; [7C CE 15, 05, 05]
-1202F; [7C CD 54, 05, 05]
+103CB; [7C CE 1C, 05, 05]
-12030; [7C CD 5B, 05, 05]
+103CC; [7C CE 23, 05, 05]
-12031; [7C CD 62, 05, 05]
+103CD; [7C CE 2A, 05, 05]
-12032; [7C CD 69, 05, 05]
+103CE; [7C CE 31, 05, 05]
-12033; [7C CD 70, 05, 05]
+103CF; [7C CE 38, 05, 05]
-12034; [7C CD 77, 05, 05]
+FDD1 12000; [7C CF 02, 05, 05] # Cuneiform first primary (compressible)
-12035; [7C CD 7E, 05, 05]
+12000; [7C CF 09, 05, 05]
-12036; [7C CD 85, 05, 05]
+12001; [7C CF 10, 05, 05]
-12037; [7C CD 8C, 05, 05]
+12002; [7C CF 17, 05, 05]
-12038; [7C CD 93, 05, 05]
+12003; [7C CF 1E, 05, 05]
-12039; [7C CD 9A, 05, 05]
+12004; [7C CF 25, 05, 05]
-1203A; [7C CD A1, 05, 05]
+12005; [7C CF 2C, 05, 05]
-1203B; [7C CD A8, 05, 05]
+12006; [7C CF 33, 05, 05]
-1203C; [7C CD AF, 05, 05]
+12007; [7C CF 3A, 05, 05]
-1203D; [7C CD B6, 05, 05]
+12008; [7C CF 41, 05, 05]
-1203E; [7C CD BD, 05, 05]
+12009; [7C CF 48, 05, 05]
-1203F; [7C CD C4, 05, 05]
+1200A; [7C CF 4F, 05, 05]
-12040; [7C CD CB, 05, 05]
+1200B; [7C CF 56, 05, 05]
-12041; [7C CD D2, 05, 05]
+1200C; [7C CF 5D, 05, 05]
-12042; [7C CD D9, 05, 05]
+1200D; [7C CF 64, 05, 05]
-12043; [7C CD E0, 05, 05]
+1200E; [7C CF 6B, 05, 05]
-12044; [7C CD E7, 05, 05]
+1200F; [7C CF 72, 05, 05]
-12045; [7C CD EE, 05, 05]
+12010; [7C CF 79, 05, 05]
-12046; [7C CD F5, 05, 05]
+12011; [7C CF 80, 05, 05]
-12047; [7C CD FC, 05, 05]
+12012; [7C CF 87, 05, 05]
-12048; [7C CE 05, 05, 05]
+12013; [7C CF 8E, 05, 05]
-12049; [7C CE 0C, 05, 05]
+12014; [7C CF 95, 05, 05]
-1204A; [7C CE 13, 05, 05]
+12015; [7C CF 9C, 05, 05]
-1204B; [7C CE 1A, 05, 05]
+12016; [7C CF A3, 05, 05]
-1204C; [7C CE 21, 05, 05]
+12017; [7C CF AA, 05, 05]
-1204D; [7C CE 28, 05, 05]
+12018; [7C CF B1, 05, 05]
-1204E; [7C CE 2F, 05, 05]
+12019; [7C CF B8, 05, 05]
-1204F; [7C CE 36, 05, 05]
+1201A; [7C CF BF, 05, 05]
-12050; [7C CE 3D, 05, 05]
+1201B; [7C CF C6, 05, 05]
-12051; [7C CE 44, 05, 05]
+1201C; [7C CF CD, 05, 05]
-12052; [7C CE 4B, 05, 05]
+1201D; [7C CF D4, 05, 05]
-12053; [7C CE 52, 05, 05]
+1201E; [7C CF DB, 05, 05]
-12054; [7C CE 59, 05, 05]
+1201F; [7C CF E2, 05, 05]
-12055; [7C CE 60, 05, 05]
+12020; [7C CF E9, 05, 05]
-12056; [7C CE 67, 05, 05]
+12021; [7C CF F0, 05, 05]
-12057; [7C CE 6E, 05, 05]
+12022; [7C CF F7, 05, 05]
-12058; [7C CE 75, 05, 05]
+12023; [7C CF FE, 05, 05]
-12059; [7C CE 7C, 05, 05]
+12024; [7C D0 07, 05, 05]
-1205A; [7C CE 83, 05, 05]
+12025; [7C D0 0E, 05, 05]
-1205B; [7C CE 8A, 05, 05]
+12026; [7C D0 15, 05, 05]
-1205C; [7C CE 91, 05, 05]
+12027; [7C D0 1C, 05, 05]
-1205D; [7C CE 98, 05, 05]
+12028; [7C D0 23, 05, 05]
-1205E; [7C CE 9F, 05, 05]
+12029; [7C D0 2A, 05, 05]
-1205F; [7C CE A6, 05, 05]
+1202A; [7C D0 31, 05, 05]
-12060; [7C CE AD, 05, 05]
+1202B; [7C D0 38, 05, 05]
-12061; [7C CE B4, 05, 05]
+1202C; [7C D0 3F, 05, 05]
-12062; [7C CE BB, 05, 05]
+1202D; [7C D0 46, 05, 05]
-12063; [7C CE C2, 05, 05]
+1202E; [7C D0 4D, 05, 05]
-12064; [7C CE C9, 05, 05]
+1202F; [7C D0 54, 05, 05]
-12065; [7C CE D0, 05, 05]
+12030; [7C D0 5B, 05, 05]
-12066; [7C CE D7, 05, 05]
+12031; [7C D0 62, 05, 05]
-12067; [7C CE DE, 05, 05]
+12032; [7C D0 69, 05, 05]
-12068; [7C CE E5, 05, 05]
+12033; [7C D0 70, 05, 05]
-12069; [7C CE EC, 05, 05]
+12034; [7C D0 77, 05, 05]
-1206A; [7C CE F3, 05, 05]
+12035; [7C D0 7E, 05, 05]
-1206B; [7C CE FA, 05, 05]
+12036; [7C D0 85, 05, 05]
-1206C; [7C CF 03, 05, 05]
+12037; [7C D0 8C, 05, 05]
-1206D; [7C CF 0A, 05, 05]
+12038; [7C D0 93, 05, 05]
-1206E; [7C CF 11, 05, 05]
+12039; [7C D0 9A, 05, 05]
-1206F; [7C CF 18, 05, 05]
+1203A; [7C D0 A1, 05, 05]
-12070; [7C CF 1F, 05, 05]
+1203B; [7C D0 A8, 05, 05]
-12071; [7C CF 26, 05, 05]
+1203C; [7C D0 AF, 05, 05]
-12072; [7C CF 2D, 05, 05]
+1203D; [7C D0 B6, 05, 05]
-12073; [7C CF 34, 05, 05]
+1203E; [7C D0 BD, 05, 05]
-12074; [7C CF 3B, 05, 05]
+1203F; [7C D0 C4, 05, 05]
-12075; [7C CF 42, 05, 05]
+12040; [7C D0 CB, 05, 05]
-12076; [7C CF 49, 05, 05]
+12041; [7C D0 D2, 05, 05]
-12077; [7C CF 50, 05, 05]
+12042; [7C D0 D9, 05, 05]
-12078; [7C CF 57, 05, 05]
+12043; [7C D0 E0, 05, 05]
-12079; [7C CF 5E, 05, 05]
+12044; [7C D0 E7, 05, 05]
-1207A; [7C CF 65, 05, 05]
+12045; [7C D0 EE, 05, 05]
-1207B; [7C CF 6C, 05, 05]
+12046; [7C D0 F5, 05, 05]
-1207C; [7C CF 73, 05, 05]
+12047; [7C D0 FC, 05, 05]
-1207D; [7C CF 7A, 05, 05]
+12048; [7C D1 05, 05, 05]
-1207E; [7C CF 81, 05, 05]
+12049; [7C D1 0C, 05, 05]
-1207F; [7C CF 88, 05, 05]
+1204A; [7C D1 13, 05, 05]
-12080; [7C CF 8F, 05, 05]
+1204B; [7C D1 1A, 05, 05]
-12081; [7C CF 96, 05, 05]
+1204C; [7C D1 21, 05, 05]
-12082; [7C CF 9D, 05, 05]
+1204D; [7C D1 28, 05, 05]
-12083; [7C CF A4, 05, 05]
+1204E; [7C D1 2F, 05, 05]
-12084; [7C CF AB, 05, 05]
+1204F; [7C D1 36, 05, 05]
-12085; [7C CF B2, 05, 05]
+12050; [7C D1 3D, 05, 05]
-12086; [7C CF B9, 05, 05]
+12051; [7C D1 44, 05, 05]
-12087; [7C CF C0, 05, 05]
+12052; [7C D1 4B, 05, 05]
-12088; [7C CF C7, 05, 05]
+12053; [7C D1 52, 05, 05]
-12089; [7C CF CE, 05, 05]
+12054; [7C D1 59, 05, 05]
-1208A; [7C CF D5, 05, 05]
+12055; [7C D1 60, 05, 05]
-1208B; [7C CF DC, 05, 05]
+12056; [7C D1 67, 05, 05]
-1208C; [7C CF E3, 05, 05]
+12057; [7C D1 6E, 05, 05]
-1208D; [7C CF EA, 05, 05]
+12058; [7C D1 75, 05, 05]
-1208E; [7C CF F1, 05, 05]
+12059; [7C D1 7C, 05, 05]
-1208F; [7C CF F8, 05, 05]
+1205A; [7C D1 83, 05, 05]
-12090; [7C CF FF, 05, 05]
+1205B; [7C D1 8A, 05, 05]
-12091; [7C D0 08, 05, 05]
+1205C; [7C D1 91, 05, 05]
-12092; [7C D0 0F, 05, 05]
+1205D; [7C D1 98, 05, 05]
-12093; [7C D0 16, 05, 05]
+1205E; [7C D1 9F, 05, 05]
-12094; [7C D0 1D, 05, 05]
+1205F; [7C D1 A6, 05, 05]
-12095; [7C D0 24, 05, 05]
+12060; [7C D1 AD, 05, 05]
-12096; [7C D0 2B, 05, 05]
+12061; [7C D1 B4, 05, 05]
-12097; [7C D0 32, 05, 05]
+12062; [7C D1 BB, 05, 05]
-12098; [7C D0 39, 05, 05]
+12063; [7C D1 C2, 05, 05]
-12099; [7C D0 40, 05, 05]
+12064; [7C D1 C9, 05, 05]
-1209A; [7C D0 47, 05, 05]
+12065; [7C D1 D0, 05, 05]
-1209B; [7C D0 4E, 05, 05]
+12066; [7C D1 D7, 05, 05]
-1209C; [7C D0 55, 05, 05]
+12067; [7C D1 DE, 05, 05]
-1209D; [7C D0 5C, 05, 05]
+12068; [7C D1 E5, 05, 05]
-1209E; [7C D0 63, 05, 05]
+12069; [7C D1 EC, 05, 05]
-1209F; [7C D0 6A, 05, 05]
+1206A; [7C D1 F3, 05, 05]
-120A0; [7C D0 71, 05, 05]
+1206B; [7C D1 FA, 05, 05]
-120A1; [7C D0 78, 05, 05]
+1206C; [7C D2 03, 05, 05]
-120A2; [7C D0 7F, 05, 05]
+1206D; [7C D2 0A, 05, 05]
-120A3; [7C D0 86, 05, 05]
+1206E; [7C D2 11, 05, 05]
-120A4; [7C D0 8D, 05, 05]
+1206F; [7C D2 18, 05, 05]
-120A5; [7C D0 94, 05, 05]
+12070; [7C D2 1F, 05, 05]
-120A6; [7C D0 9B, 05, 05]
+12071; [7C D2 26, 05, 05]
-120A7; [7C D0 A2, 05, 05]
+12072; [7C D2 2D, 05, 05]
-120A8; [7C D0 A9, 05, 05]
+12073; [7C D2 34, 05, 05]
-120A9; [7C D0 B0, 05, 05]
+12074; [7C D2 3B, 05, 05]
-120AA; [7C D0 B7, 05, 05]
+12075; [7C D2 42, 05, 05]
-120AB; [7C D0 BE, 05, 05]
+12076; [7C D2 49, 05, 05]
-120AC; [7C D0 C5, 05, 05]
+12077; [7C D2 50, 05, 05]
-120AD; [7C D0 CC, 05, 05]
+12078; [7C D2 57, 05, 05]
-120AE; [7C D0 D3, 05, 05]
+12079; [7C D2 5E, 05, 05]
-120AF; [7C D0 DA, 05, 05]
+1207A; [7C D2 65, 05, 05]
-120B0; [7C D0 E1, 05, 05]
+1207B; [7C D2 6C, 05, 05]
-120B1; [7C D0 E8, 05, 05]
+1207C; [7C D2 73, 05, 05]
-120B2; [7C D0 EF, 05, 05]
+1207D; [7C D2 7A, 05, 05]
-120B3; [7C D0 F6, 05, 05]
+1207E; [7C D2 81, 05, 05]
-120B4; [7C D0 FD, 05, 05]
+1207F; [7C D2 88, 05, 05]
-120B5; [7C D1 06, 05, 05]
+12080; [7C D2 8F, 05, 05]
-120B6; [7C D1 0D, 05, 05]
+12081; [7C D2 96, 05, 05]
-120B7; [7C D1 14, 05, 05]
+12082; [7C D2 9D, 05, 05]
-120B8; [7C D1 1B, 05, 05]
+12083; [7C D2 A4, 05, 05]
-120B9; [7C D1 22, 05, 05]
+12084; [7C D2 AB, 05, 05]
-120BA; [7C D1 29, 05, 05]
+12085; [7C D2 B2, 05, 05]
-120BB; [7C D1 30, 05, 05]
+12086; [7C D2 B9, 05, 05]
-120BC; [7C D1 37, 05, 05]
+12087; [7C D2 C0, 05, 05]
-120BD; [7C D1 3E, 05, 05]
+12088; [7C D2 C7, 05, 05]
-120BE; [7C D1 45, 05, 05]
+12089; [7C D2 CE, 05, 05]
-120BF; [7C D1 4C, 05, 05]
+1208A; [7C D2 D5, 05, 05]
-120C0; [7C D1 53, 05, 05]
+1208B; [7C D2 DC, 05, 05]
-120C1; [7C D1 5A, 05, 05]
+1208C; [7C D2 E3, 05, 05]
-120C2; [7C D1 61, 05, 05]
+1208D; [7C D2 EA, 05, 05]
-120C3; [7C D1 68, 05, 05]
+1208E; [7C D2 F1, 05, 05]
-120C4; [7C D1 6F, 05, 05]
+1208F; [7C D2 F8, 05, 05]
-120C5; [7C D1 76, 05, 05]
+12090; [7C D2 FF, 05, 05]
-120C6; [7C D1 7D, 05, 05]
+12091; [7C D3 08, 05, 05]
-120C7; [7C D1 84, 05, 05]
+12092; [7C D3 0F, 05, 05]
-120C8; [7C D1 8B, 05, 05]
+12093; [7C D3 16, 05, 05]
-120C9; [7C D1 92, 05, 05]
+12094; [7C D3 1D, 05, 05]
-120CA; [7C D1 99, 05, 05]
+12095; [7C D3 24, 05, 05]
-120CB; [7C D1 A0, 05, 05]
+12096; [7C D3 2B, 05, 05]
-120CC; [7C D1 A7, 05, 05]
+12097; [7C D3 32, 05, 05]
-120CD; [7C D1 AE, 05, 05]
+12098; [7C D3 39, 05, 05]
-120CE; [7C D1 B5, 05, 05]
+12099; [7C D3 40, 05, 05]
-120CF; [7C D1 BC, 05, 05]
+1209A; [7C D3 47, 05, 05]
-120D0; [7C D1 C3, 05, 05]
+1209B; [7C D3 4E, 05, 05]
-120D1; [7C D1 CA, 05, 05]
+1209C; [7C D3 55, 05, 05]
-120D2; [7C D1 D1, 05, 05]
+1209D; [7C D3 5C, 05, 05]
-120D3; [7C D1 D8, 05, 05]
+1209E; [7C D3 63, 05, 05]
-120D4; [7C D1 DF, 05, 05]
+1209F; [7C D3 6A, 05, 05]
-120D5; [7C D1 E6, 05, 05]
+120A0; [7C D3 71, 05, 05]
-120D6; [7C D1 ED, 05, 05]
+120A1; [7C D3 78, 05, 05]
-120D7; [7C D1 F4, 05, 05]
+120A2; [7C D3 7F, 05, 05]
-120D8; [7C D1 FB, 05, 05]
+120A3; [7C D3 86, 05, 05]
-120D9; [7C D2 04, 05, 05]
+120A4; [7C D3 8D, 05, 05]
-120DA; [7C D2 0B, 05, 05]
+120A5; [7C D3 94, 05, 05]
-120DB; [7C D2 12, 05, 05]
+120A6; [7C D3 9B, 05, 05]
-120DC; [7C D2 19, 05, 05]
+120A7; [7C D3 A2, 05, 05]
-120DD; [7C D2 20, 05, 05]
+120A8; [7C D3 A9, 05, 05]
-120DE; [7C D2 27, 05, 05]
+120A9; [7C D3 B0, 05, 05]
-120DF; [7C D2 2E, 05, 05]
+120AA; [7C D3 B7, 05, 05]
-120E0; [7C D2 35, 05, 05]
+120AB; [7C D3 BE, 05, 05]
-120E1; [7C D2 3C, 05, 05]
+120AC; [7C D3 C5, 05, 05]
-120E2; [7C D2 43, 05, 05]
+120AD; [7C D3 CC, 05, 05]
-120E3; [7C D2 4A, 05, 05]
+120AE; [7C D3 D3, 05, 05]
-120E4; [7C D2 51, 05, 05]
+120AF; [7C D3 DA, 05, 05]
-120E5; [7C D2 58, 05, 05]
+120B0; [7C D3 E1, 05, 05]
-120E6; [7C D2 5F, 05, 05]
+120B1; [7C D3 E8, 05, 05]
-120E7; [7C D2 66, 05, 05]
+120B2; [7C D3 EF, 05, 05]
-120E8; [7C D2 6D, 05, 05]
+120B3; [7C D3 F6, 05, 05]
-120E9; [7C D2 74, 05, 05]
+120B4; [7C D3 FD, 05, 05]
-120EA; [7C D2 7B, 05, 05]
+120B5; [7C D4 06, 05, 05]
-120EB; [7C D2 82, 05, 05]
+120B6; [7C D4 0D, 05, 05]
-120EC; [7C D2 89, 05, 05]
+120B7; [7C D4 14, 05, 05]
-120ED; [7C D2 90, 05, 05]
+120B8; [7C D4 1B, 05, 05]
-120EE; [7C D2 97, 05, 05]
+120B9; [7C D4 22, 05, 05]
-120EF; [7C D2 9E, 05, 05]
+120BA; [7C D4 29, 05, 05]
-120F0; [7C D2 A5, 05, 05]
+120BB; [7C D4 30, 05, 05]
-120F1; [7C D2 AC, 05, 05]
+120BC; [7C D4 37, 05, 05]
-120F2; [7C D2 B3, 05, 05]
+120BD; [7C D4 3E, 05, 05]
-120F3; [7C D2 BA, 05, 05]
+120BE; [7C D4 45, 05, 05]
-120F4; [7C D2 C1, 05, 05]
+120BF; [7C D4 4C, 05, 05]
-120F5; [7C D2 C8, 05, 05]
+120C0; [7C D4 53, 05, 05]
-120F6; [7C D2 CF, 05, 05]
+120C1; [7C D4 5A, 05, 05]
-120F7; [7C D2 D6, 05, 05]
+120C2; [7C D4 61, 05, 05]
-120F8; [7C D2 DD, 05, 05]
+120C3; [7C D4 68, 05, 05]
-120F9; [7C D2 E4, 05, 05]
+120C4; [7C D4 6F, 05, 05]
-120FA; [7C D2 EB, 05, 05]
+120C5; [7C D4 76, 05, 05]
-120FB; [7C D2 F2, 05, 05]
+120C6; [7C D4 7D, 05, 05]
-120FC; [7C D2 F9, 05, 05]
+120C7; [7C D4 84, 05, 05]
-120FD; [7C D3 02, 05, 05]
+120C8; [7C D4 8B, 05, 05]
-120FE; [7C D3 09, 05, 05]
+120C9; [7C D4 92, 05, 05]
-120FF; [7C D3 10, 05, 05]
+120CA; [7C D4 99, 05, 05]
-12100; [7C D3 17, 05, 05]
+120CB; [7C D4 A0, 05, 05]
-12101; [7C D3 1E, 05, 05]
+120CC; [7C D4 A7, 05, 05]
-12102; [7C D3 25, 05, 05]
+120CD; [7C D4 AE, 05, 05]
-12103; [7C D3 2C, 05, 05]
+120CE; [7C D4 B5, 05, 05]
-12104; [7C D3 33, 05, 05]
+120CF; [7C D4 BC, 05, 05]
-12105; [7C D3 3A, 05, 05]
+120D0; [7C D4 C3, 05, 05]
-12106; [7C D3 41, 05, 05]
+120D1; [7C D4 CA, 05, 05]
-12107; [7C D3 48, 05, 05]
+120D2; [7C D4 D1, 05, 05]
-12108; [7C D3 4F, 05, 05]
+120D3; [7C D4 D8, 05, 05]
-12109; [7C D3 56, 05, 05]
+120D4; [7C D4 DF, 05, 05]
-1210A; [7C D3 5D, 05, 05]
+120D5; [7C D4 E6, 05, 05]
-1210B; [7C D3 64, 05, 05]
+120D6; [7C D4 ED, 05, 05]
-1210C; [7C D3 6B, 05, 05]
+120D7; [7C D4 F4, 05, 05]
-1210D; [7C D3 72, 05, 05]
+120D8; [7C D4 FB, 05, 05]
-1210E; [7C D3 79, 05, 05]
+120D9; [7C D5 04, 05, 05]
-1210F; [7C D3 80, 05, 05]
+120DA; [7C D5 0B, 05, 05]
-12110; [7C D3 87, 05, 05]
+120DB; [7C D5 12, 05, 05]
-12111; [7C D3 8E, 05, 05]
+120DC; [7C D5 19, 05, 05]
-12112; [7C D3 95, 05, 05]
+120DD; [7C D5 20, 05, 05]
-12113; [7C D3 9C, 05, 05]
+120DE; [7C D5 27, 05, 05]
-12114; [7C D3 A3, 05, 05]
+120DF; [7C D5 2E, 05, 05]
-12115; [7C D3 AA, 05, 05]
+120E0; [7C D5 35, 05, 05]
-12116; [7C D3 B1, 05, 05]
+120E1; [7C D5 3C, 05, 05]
-12117; [7C D3 B8, 05, 05]
+120E2; [7C D5 43, 05, 05]
-12118; [7C D3 BF, 05, 05]
+120E3; [7C D5 4A, 05, 05]
-12119; [7C D3 C6, 05, 05]
+120E4; [7C D5 51, 05, 05]
-1211A; [7C D3 CD, 05, 05]
+120E5; [7C D5 58, 05, 05]
-1211B; [7C D3 D4, 05, 05]
+120E6; [7C D5 5F, 05, 05]
-1211C; [7C D3 DB, 05, 05]
+120E7; [7C D5 66, 05, 05]
-1211D; [7C D3 E2, 05, 05]
+120E8; [7C D5 6D, 05, 05]
-1211E; [7C D3 E9, 05, 05]
+120E9; [7C D5 74, 05, 05]
-1211F; [7C D3 F0, 05, 05]
+120EA; [7C D5 7B, 05, 05]
-12120; [7C D3 F7, 05, 05]
+120EB; [7C D5 82, 05, 05]
-12121; [7C D3 FE, 05, 05]
+120EC; [7C D5 89, 05, 05]
-12122; [7C D4 07, 05, 05]
+120ED; [7C D5 90, 05, 05]
-12123; [7C D4 0E, 05, 05]
+120EE; [7C D5 97, 05, 05]
-12124; [7C D4 15, 05, 05]
+120EF; [7C D5 9E, 05, 05]
-12125; [7C D4 1C, 05, 05]
+120F0; [7C D5 A5, 05, 05]
-12126; [7C D4 23, 05, 05]
+120F1; [7C D5 AC, 05, 05]
-12127; [7C D4 2A, 05, 05]
+120F2; [7C D5 B3, 05, 05]
-12128; [7C D4 31, 05, 05]
+120F3; [7C D5 BA, 05, 05]
-12129; [7C D4 38, 05, 05]
+120F4; [7C D5 C1, 05, 05]
-1212A; [7C D4 3F, 05, 05]
+120F5; [7C D5 C8, 05, 05]
-1212B; [7C D4 46, 05, 05]
+120F6; [7C D5 CF, 05, 05]
-1212C; [7C D4 4D, 05, 05]
+120F7; [7C D5 D6, 05, 05]
-1212D; [7C D4 54, 05, 05]
+120F8; [7C D5 DD, 05, 05]
-1212E; [7C D4 5B, 05, 05]
+120F9; [7C D5 E4, 05, 05]
-1212F; [7C D4 62, 05, 05]
+120FA; [7C D5 EB, 05, 05]
-12130; [7C D4 69, 05, 05]
+120FB; [7C D5 F2, 05, 05]
-12131; [7C D4 70, 05, 05]
+120FC; [7C D5 F9, 05, 05]
-12132; [7C D4 77, 05, 05]
+120FD; [7C D6 02, 05, 05]
-12133; [7C D4 7E, 05, 05]
+120FE; [7C D6 09, 05, 05]
-12134; [7C D4 85, 05, 05]
+120FF; [7C D6 10, 05, 05]
-12135; [7C D4 8C, 05, 05]
+12100; [7C D6 17, 05, 05]
-12136; [7C D4 93, 05, 05]
+12101; [7C D6 1E, 05, 05]
-12137; [7C D4 9A, 05, 05]
+12102; [7C D6 25, 05, 05]
-12138; [7C D4 A1, 05, 05]
+12103; [7C D6 2C, 05, 05]
-12139; [7C D4 A8, 05, 05]
+12104; [7C D6 33, 05, 05]
-1213A; [7C D4 AF, 05, 05]
+12105; [7C D6 3A, 05, 05]
-1213B; [7C D4 B6, 05, 05]
+12106; [7C D6 41, 05, 05]
-1213C; [7C D4 BD, 05, 05]
+12107; [7C D6 48, 05, 05]
-1213D; [7C D4 C4, 05, 05]
+12108; [7C D6 4F, 05, 05]
-1213E; [7C D4 CB, 05, 05]
+12109; [7C D6 56, 05, 05]
-1213F; [7C D4 D2, 05, 05]
+1210A; [7C D6 5D, 05, 05]
-12140; [7C D4 D9, 05, 05]
+1210B; [7C D6 64, 05, 05]
-12141; [7C D4 E0, 05, 05]
+1210C; [7C D6 6B, 05, 05]
-12142; [7C D4 E7, 05, 05]
+1210D; [7C D6 72, 05, 05]
-12143; [7C D4 EE, 05, 05]
+1210E; [7C D6 79, 05, 05]
-12144; [7C D4 F5, 05, 05]
+1210F; [7C D6 80, 05, 05]
-12145; [7C D4 FC, 05, 05]
+12110; [7C D6 87, 05, 05]
-12146; [7C D5 05, 05, 05]
+12111; [7C D6 8E, 05, 05]
-12147; [7C D5 0C, 05, 05]
+12112; [7C D6 95, 05, 05]
-12148; [7C D5 13, 05, 05]
+12113; [7C D6 9C, 05, 05]
-12149; [7C D5 1A, 05, 05]
+12114; [7C D6 A3, 05, 05]
-1214A; [7C D5 21, 05, 05]
+12115; [7C D6 AA, 05, 05]
-1214B; [7C D5 28, 05, 05]
+12116; [7C D6 B1, 05, 05]
-1214C; [7C D5 2F, 05, 05]
+12117; [7C D6 B8, 05, 05]
-1214D; [7C D5 36, 05, 05]
+12118; [7C D6 BF, 05, 05]
-1214E; [7C D5 3D, 05, 05]
+12119; [7C D6 C6, 05, 05]
-1214F; [7C D5 44, 05, 05]
+1211A; [7C D6 CD, 05, 05]
-12150; [7C D5 4B, 05, 05]
+1211B; [7C D6 D4, 05, 05]
-12151; [7C D5 52, 05, 05]
+1211C; [7C D6 DB, 05, 05]
-12152; [7C D5 59, 05, 05]
+1211D; [7C D6 E2, 05, 05]
-12153; [7C D5 60, 05, 05]
+1211E; [7C D6 E9, 05, 05]
-12154; [7C D5 67, 05, 05]
+1211F; [7C D6 F0, 05, 05]
-12155; [7C D5 6E, 05, 05]
+12120; [7C D6 F7, 05, 05]
-12156; [7C D5 75, 05, 05]
+12121; [7C D6 FE, 05, 05]
-12157; [7C D5 7C, 05, 05]
+12122; [7C D7 07, 05, 05]
-12158; [7C D5 83, 05, 05]
+12123; [7C D7 0E, 05, 05]
-12159; [7C D5 8A, 05, 05]
+12124; [7C D7 15, 05, 05]
-1215A; [7C D5 91, 05, 05]
+12125; [7C D7 1C, 05, 05]
-1215B; [7C D5 98, 05, 05]
+12126; [7C D7 23, 05, 05]
-1215C; [7C D5 9F, 05, 05]
+12127; [7C D7 2A, 05, 05]
-1215D; [7C D5 A6, 05, 05]
+12128; [7C D7 31, 05, 05]
-1215E; [7C D5 AD, 05, 05]
+12129; [7C D7 38, 05, 05]
-1215F; [7C D5 B4, 05, 05]
+1212A; [7C D7 3F, 05, 05]
-12160; [7C D5 BB, 05, 05]
+1212B; [7C D7 46, 05, 05]
-12161; [7C D5 C2, 05, 05]
+1212C; [7C D7 4D, 05, 05]
-12162; [7C D5 C9, 05, 05]
+1212D; [7C D7 54, 05, 05]
-12163; [7C D5 D0, 05, 05]
+1212E; [7C D7 5B, 05, 05]
-12164; [7C D5 D7, 05, 05]
+1212F; [7C D7 62, 05, 05]
-12165; [7C D5 DE, 05, 05]
+12130; [7C D7 69, 05, 05]
-12166; [7C D5 E5, 05, 05]
+12131; [7C D7 70, 05, 05]
-12167; [7C D5 EC, 05, 05]
+12132; [7C D7 77, 05, 05]
-12168; [7C D5 F3, 05, 05]
+12133; [7C D7 7E, 05, 05]
-12169; [7C D5 FA, 05, 05]
+12134; [7C D7 85, 05, 05]
-1216A; [7C D6 03, 05, 05]
+12135; [7C D7 8C, 05, 05]
-1216B; [7C D6 0A, 05, 05]
+12136; [7C D7 93, 05, 05]
-1216C; [7C D6 11, 05, 05]
+12137; [7C D7 9A, 05, 05]
-1216D; [7C D6 18, 05, 05]
+12138; [7C D7 A1, 05, 05]
-1216E; [7C D6 1F, 05, 05]
+12139; [7C D7 A8, 05, 05]
-1216F; [7C D6 26, 05, 05]
+1213A; [7C D7 AF, 05, 05]
-12170; [7C D6 2D, 05, 05]
+1213B; [7C D7 B6, 05, 05]
-12171; [7C D6 34, 05, 05]
+1213C; [7C D7 BD, 05, 05]
-12172; [7C D6 3B, 05, 05]
+1213D; [7C D7 C4, 05, 05]
-12173; [7C D6 42, 05, 05]
+1213E; [7C D7 CB, 05, 05]
-12174; [7C D6 49, 05, 05]
+1213F; [7C D7 D2, 05, 05]
-12175; [7C D6 50, 05, 05]
+12140; [7C D7 D9, 05, 05]
-12176; [7C D6 57, 05, 05]
+12141; [7C D7 E0, 05, 05]
-12177; [7C D6 5E, 05, 05]
+12142; [7C D7 E7, 05, 05]
-12178; [7C D6 65, 05, 05]
+12143; [7C D7 EE, 05, 05]
-12179; [7C D6 6C, 05, 05]
+12144; [7C D7 F5, 05, 05]
-1217A; [7C D6 73, 05, 05]
+12145; [7C D7 FC, 05, 05]
-1217B; [7C D6 7A, 05, 05]
+12146; [7C D8 05, 05, 05]
-1217C; [7C D6 81, 05, 05]
+12147; [7C D8 0C, 05, 05]
-1217D; [7C D6 88, 05, 05]
+12148; [7C D8 13, 05, 05]
-1217E; [7C D6 8F, 05, 05]
+12149; [7C D8 1A, 05, 05]
-1217F; [7C D6 96, 05, 05]
+1214A; [7C D8 21, 05, 05]
-12180; [7C D6 9D, 05, 05]
+1214B; [7C D8 28, 05, 05]
-12181; [7C D6 A4, 05, 05]
+1214C; [7C D8 2F, 05, 05]
-12182; [7C D6 AB, 05, 05]
+1214D; [7C D8 36, 05, 05]
-12183; [7C D6 B2, 05, 05]
+1214E; [7C D8 3D, 05, 05]
-12184; [7C D6 B9, 05, 05]
+1214F; [7C D8 44, 05, 05]
-12185; [7C D6 C0, 05, 05]
+12150; [7C D8 4B, 05, 05]
-12186; [7C D6 C7, 05, 05]
+12151; [7C D8 52, 05, 05]
-12187; [7C D6 CE, 05, 05]
+12152; [7C D8 59, 05, 05]
-12188; [7C D6 D5, 05, 05]
+12153; [7C D8 60, 05, 05]
-12189; [7C D6 DC, 05, 05]
+12154; [7C D8 67, 05, 05]
-1218A; [7C D6 E3, 05, 05]
+12155; [7C D8 6E, 05, 05]
-1218B; [7C D6 EA, 05, 05]
+12156; [7C D8 75, 05, 05]
-1218C; [7C D6 F1, 05, 05]
+12157; [7C D8 7C, 05, 05]
-1218D; [7C D6 F8, 05, 05]
+12158; [7C D8 83, 05, 05]
-1218E; [7C D6 FF, 05, 05]
+12159; [7C D8 8A, 05, 05]
-1218F; [7C D7 08, 05, 05]
+1215A; [7C D8 91, 05, 05]
-12190; [7C D7 0F, 05, 05]
+1215B; [7C D8 98, 05, 05]
-12191; [7C D7 16, 05, 05]
+1215C; [7C D8 9F, 05, 05]
-12192; [7C D7 1D, 05, 05]
+1215D; [7C D8 A6, 05, 05]
-12193; [7C D7 24, 05, 05]
+1215E; [7C D8 AD, 05, 05]
-12194; [7C D7 2B, 05, 05]
+1215F; [7C D8 B4, 05, 05]
-12195; [7C D7 32, 05, 05]
+12160; [7C D8 BB, 05, 05]
-12196; [7C D7 39, 05, 05]
+12161; [7C D8 C2, 05, 05]
-12197; [7C D7 40, 05, 05]
+12162; [7C D8 C9, 05, 05]
-12198; [7C D7 47, 05, 05]
+12163; [7C D8 D0, 05, 05]
-12199; [7C D7 4E, 05, 05]
+12164; [7C D8 D7, 05, 05]
-1219A; [7C D7 55, 05, 05]
+12165; [7C D8 DE, 05, 05]
-1219B; [7C D7 5C, 05, 05]
+12166; [7C D8 E5, 05, 05]
-1219C; [7C D7 63, 05, 05]
+12167; [7C D8 EC, 05, 05]
-1219D; [7C D7 6A, 05, 05]
+12168; [7C D8 F3, 05, 05]
-1219E; [7C D7 71, 05, 05]
+12169; [7C D8 FA, 05, 05]
-1219F; [7C D7 78, 05, 05]
+1216A; [7C D9 03, 05, 05]
-121A0; [7C D7 7F, 05, 05]
+1216B; [7C D9 0A, 05, 05]
-121A1; [7C D7 86, 05, 05]
+1216C; [7C D9 11, 05, 05]
-121A2; [7C D7 8D, 05, 05]
+1216D; [7C D9 18, 05, 05]
-121A3; [7C D7 94, 05, 05]
+1216E; [7C D9 1F, 05, 05]
-121A4; [7C D7 9B, 05, 05]
+1216F; [7C D9 26, 05, 05]
-121A5; [7C D7 A2, 05, 05]
+12170; [7C D9 2D, 05, 05]
-121A6; [7C D7 A9, 05, 05]
+12171; [7C D9 34, 05, 05]
-121A7; [7C D7 B0, 05, 05]
+12172; [7C D9 3B, 05, 05]
-121A8; [7C D7 B7, 05, 05]
+12173; [7C D9 42, 05, 05]
-121A9; [7C D7 BE, 05, 05]
+12174; [7C D9 49, 05, 05]
-121AA; [7C D7 C5, 05, 05]
+12175; [7C D9 50, 05, 05]
-121AB; [7C D7 CC, 05, 05]
+12176; [7C D9 57, 05, 05]
-121AC; [7C D7 D3, 05, 05]
+12177; [7C D9 5E, 05, 05]
-121AD; [7C D7 DA, 05, 05]
+12178; [7C D9 65, 05, 05]
-121AE; [7C D7 E1, 05, 05]
+12179; [7C D9 6C, 05, 05]
-121AF; [7C D7 E8, 05, 05]
+1217A; [7C D9 73, 05, 05]
-121B0; [7C D7 EF, 05, 05]
+1217B; [7C D9 7A, 05, 05]
-121B1; [7C D7 F6, 05, 05]
+1217C; [7C D9 81, 05, 05]
-121B2; [7C D7 FD, 05, 05]
+1217D; [7C D9 88, 05, 05]
-121B3; [7C D8 06, 05, 05]
+1217E; [7C D9 8F, 05, 05]
-121B4; [7C D8 0D, 05, 05]
+1217F; [7C D9 96, 05, 05]
-121B5; [7C D8 14, 05, 05]
+12180; [7C D9 9D, 05, 05]
-121B6; [7C D8 1B, 05, 05]
+12181; [7C D9 A4, 05, 05]
-121B7; [7C D8 22, 05, 05]
+12182; [7C D9 AB, 05, 05]
-121B8; [7C D8 29, 05, 05]
+12183; [7C D9 B2, 05, 05]
-121B9; [7C D8 30, 05, 05]
+12184; [7C D9 B9, 05, 05]
-121BA; [7C D8 37, 05, 05]
+12185; [7C D9 C0, 05, 05]
-121BB; [7C D8 3E, 05, 05]
+12186; [7C D9 C7, 05, 05]
-121BC; [7C D8 45, 05, 05]
+12187; [7C D9 CE, 05, 05]
-121BD; [7C D8 4C, 05, 05]
+12188; [7C D9 D5, 05, 05]
-121BE; [7C D8 53, 05, 05]
+12189; [7C D9 DC, 05, 05]
-121BF; [7C D8 5A, 05, 05]
+1218A; [7C D9 E3, 05, 05]
-121C0; [7C D8 61, 05, 05]
+1218B; [7C D9 EA, 05, 05]
-121C1; [7C D8 68, 05, 05]
+1218C; [7C D9 F1, 05, 05]
-121C2; [7C D8 6F, 05, 05]
+1218D; [7C D9 F8, 05, 05]
-121C3; [7C D8 76, 05, 05]
+1218E; [7C D9 FF, 05, 05]
-121C4; [7C D8 7D, 05, 05]
+1218F; [7C DA 08, 05, 05]
-121C5; [7C D8 84, 05, 05]
+12190; [7C DA 0F, 05, 05]
-121C6; [7C D8 8B, 05, 05]
+12191; [7C DA 16, 05, 05]
-121C7; [7C D8 92, 05, 05]
+12192; [7C DA 1D, 05, 05]
-121C8; [7C D8 99, 05, 05]
+12193; [7C DA 24, 05, 05]
-121C9; [7C D8 A0, 05, 05]
+12194; [7C DA 2B, 05, 05]
-121CA; [7C D8 A7, 05, 05]
+12195; [7C DA 32, 05, 05]
-121CB; [7C D8 AE, 05, 05]
+12196; [7C DA 39, 05, 05]
-121CC; [7C D8 B5, 05, 05]
+12197; [7C DA 40, 05, 05]
-121CD; [7C D8 BC, 05, 05]
+12198; [7C DA 47, 05, 05]
-121CE; [7C D8 C3, 05, 05]
+12199; [7C DA 4E, 05, 05]
-121CF; [7C D8 CA, 05, 05]
+1219A; [7C DA 55, 05, 05]
-121D0; [7C D8 D1, 05, 05]
+1219B; [7C DA 5C, 05, 05]
-121D1; [7C D8 D8, 05, 05]
+1219C; [7C DA 63, 05, 05]
-121D2; [7C D8 DF, 05, 05]
+1219D; [7C DA 6A, 05, 05]
-121D3; [7C D8 E6, 05, 05]
+1219E; [7C DA 71, 05, 05]
-121D4; [7C D8 ED, 05, 05]
+1219F; [7C DA 78, 05, 05]
-121D5; [7C D8 F4, 05, 05]
+121A0; [7C DA 7F, 05, 05]
-121D6; [7C D8 FB, 05, 05]
+121A1; [7C DA 86, 05, 05]
-121D7; [7C D9 04, 05, 05]
+121A2; [7C DA 8D, 05, 05]
-121D8; [7C D9 0B, 05, 05]
+121A3; [7C DA 94, 05, 05]
-121D9; [7C D9 12, 05, 05]
+121A4; [7C DA 9B, 05, 05]
-121DA; [7C D9 19, 05, 05]
+121A5; [7C DA A2, 05, 05]
-121DB; [7C D9 20, 05, 05]
+121A6; [7C DA A9, 05, 05]
-121DC; [7C D9 27, 05, 05]
+121A7; [7C DA B0, 05, 05]
-121DD; [7C D9 2E, 05, 05]
+121A8; [7C DA B7, 05, 05]
-121DE; [7C D9 35, 05, 05]
+121A9; [7C DA BE, 05, 05]
-121DF; [7C D9 3C, 05, 05]
+121AA; [7C DA C5, 05, 05]
-121E0; [7C D9 43, 05, 05]
+121AB; [7C DA CC, 05, 05]
-121E1; [7C D9 4A, 05, 05]
+121AC; [7C DA D3, 05, 05]
-121E2; [7C D9 51, 05, 05]
+121AD; [7C DA DA, 05, 05]
-121E3; [7C D9 58, 05, 05]
+121AE; [7C DA E1, 05, 05]
-121E4; [7C D9 5F, 05, 05]
+121AF; [7C DA E8, 05, 05]
-121E5; [7C D9 66, 05, 05]
+121B0; [7C DA EF, 05, 05]
-121E6; [7C D9 6D, 05, 05]
+121B1; [7C DA F6, 05, 05]
-121E7; [7C D9 74, 05, 05]
+121B2; [7C DA FD, 05, 05]
-121E8; [7C D9 7B, 05, 05]
+121B3; [7C DB 06, 05, 05]
-121E9; [7C D9 82, 05, 05]
+121B4; [7C DB 0D, 05, 05]
-121EA; [7C D9 89, 05, 05]
+121B5; [7C DB 14, 05, 05]
-121EB; [7C D9 90, 05, 05]
+121B6; [7C DB 1B, 05, 05]
-121EC; [7C D9 97, 05, 05]
+121B7; [7C DB 22, 05, 05]
-121ED; [7C D9 9E, 05, 05]
+121B8; [7C DB 29, 05, 05]
-121EE; [7C D9 A5, 05, 05]
+121B9; [7C DB 30, 05, 05]
-121EF; [7C D9 AC, 05, 05]
+121BA; [7C DB 37, 05, 05]
-121F0; [7C D9 B3, 05, 05]
+121BB; [7C DB 3E, 05, 05]
-121F1; [7C D9 BA, 05, 05]
+121BC; [7C DB 45, 05, 05]
-121F2; [7C D9 C1, 05, 05]
+121BD; [7C DB 4C, 05, 05]
-121F3; [7C D9 C8, 05, 05]
+121BE; [7C DB 53, 05, 05]
-121F4; [7C D9 CF, 05, 05]
+121BF; [7C DB 5A, 05, 05]
-121F5; [7C D9 D6, 05, 05]
+121C0; [7C DB 61, 05, 05]
-121F6; [7C D9 DD, 05, 05]
+121C1; [7C DB 68, 05, 05]
-121F7; [7C D9 E4, 05, 05]
+121C2; [7C DB 6F, 05, 05]
-121F8; [7C D9 EB, 05, 05]
+121C3; [7C DB 76, 05, 05]
-121F9; [7C D9 F2, 05, 05]
+121C4; [7C DB 7D, 05, 05]
-121FA; [7C D9 F9, 05, 05]
+121C5; [7C DB 84, 05, 05]
-121FB; [7C DA 02, 05, 05]
+121C6; [7C DB 8B, 05, 05]
-121FC; [7C DA 09, 05, 05]
+121C7; [7C DB 92, 05, 05]
-121FD; [7C DA 10, 05, 05]
+121C8; [7C DB 99, 05, 05]
-121FE; [7C DA 17, 05, 05]
+121C9; [7C DB A0, 05, 05]
-121FF; [7C DA 1E, 05, 05]
+121CA; [7C DB A7, 05, 05]
-12200; [7C DA 25, 05, 05]
+121CB; [7C DB AE, 05, 05]
-12201; [7C DA 2C, 05, 05]
+121CC; [7C DB B5, 05, 05]
-12202; [7C DA 33, 05, 05]
+121CD; [7C DB BC, 05, 05]
-12203; [7C DA 3A, 05, 05]
+121CE; [7C DB C3, 05, 05]
-12204; [7C DA 41, 05, 05]
+121CF; [7C DB CA, 05, 05]
-12205; [7C DA 48, 05, 05]
+121D0; [7C DB D1, 05, 05]
-12206; [7C DA 4F, 05, 05]
+121D1; [7C DB D8, 05, 05]
-12207; [7C DA 56, 05, 05]
+121D2; [7C DB DF, 05, 05]
-12208; [7C DA 5D, 05, 05]
+121D3; [7C DB E6, 05, 05]
-12209; [7C DA 64, 05, 05]
+121D4; [7C DB ED, 05, 05]
-1220A; [7C DA 6B, 05, 05]
+121D5; [7C DB F4, 05, 05]
-1220B; [7C DA 72, 05, 05]
+121D6; [7C DB FB, 05, 05]
-1220C; [7C DA 79, 05, 05]
+121D7; [7C DC 04, 05, 05]
-1220D; [7C DA 80, 05, 05]
+121D8; [7C DC 0B, 05, 05]
-1220E; [7C DA 87, 05, 05]
+121D9; [7C DC 12, 05, 05]
-1220F; [7C DA 8E, 05, 05]
+121DA; [7C DC 19, 05, 05]
-12210; [7C DA 95, 05, 05]
+121DB; [7C DC 20, 05, 05]
-12211; [7C DA 9C, 05, 05]
+121DC; [7C DC 27, 05, 05]
-12212; [7C DA A3, 05, 05]
+121DD; [7C DC 2E, 05, 05]
-12213; [7C DA AA, 05, 05]
+121DE; [7C DC 35, 05, 05]
-12214; [7C DA B1, 05, 05]
+121DF; [7C DC 3C, 05, 05]
-12215; [7C DA B8, 05, 05]
+121E0; [7C DC 43, 05, 05]
-12216; [7C DA BF, 05, 05]
+121E1; [7C DC 4A, 05, 05]
-12217; [7C DA C6, 05, 05]
+121E2; [7C DC 51, 05, 05]
-12218; [7C DA CD, 05, 05]
+121E3; [7C DC 58, 05, 05]
-12219; [7C DA D4, 05, 05]
+121E4; [7C DC 5F, 05, 05]
-1221A; [7C DA DB, 05, 05]
+121E5; [7C DC 66, 05, 05]
-1221B; [7C DA E2, 05, 05]
+121E6; [7C DC 6D, 05, 05]
-1221C; [7C DA E9, 05, 05]
+121E7; [7C DC 74, 05, 05]
-1221D; [7C DA F0, 05, 05]
+121E8; [7C DC 7B, 05, 05]
-1221E; [7C DA F7, 05, 05]
+121E9; [7C DC 82, 05, 05]
-1221F; [7C DA FE, 05, 05]
+121EA; [7C DC 89, 05, 05]
-12220; [7C DB 07, 05, 05]
+121EB; [7C DC 90, 05, 05]
-12221; [7C DB 0E, 05, 05]
+121EC; [7C DC 97, 05, 05]
-12222; [7C DB 15, 05, 05]
+121ED; [7C DC 9E, 05, 05]
-12223; [7C DB 1C, 05, 05]
+121EE; [7C DC A5, 05, 05]
-12224; [7C DB 23, 05, 05]
+121EF; [7C DC AC, 05, 05]
-12225; [7C DB 2A, 05, 05]
+121F0; [7C DC B3, 05, 05]
-12226; [7C DB 31, 05, 05]
+121F1; [7C DC BA, 05, 05]
-12227; [7C DB 38, 05, 05]
+121F2; [7C DC C1, 05, 05]
-12228; [7C DB 3F, 05, 05]
+121F3; [7C DC C8, 05, 05]
-12229; [7C DB 46, 05, 05]
+121F4; [7C DC CF, 05, 05]
-1222A; [7C DB 4D, 05, 05]
+121F5; [7C DC D6, 05, 05]
-1222B; [7C DB 54, 05, 05]
+121F6; [7C DC DD, 05, 05]
-1222C; [7C DB 5B, 05, 05]
+121F7; [7C DC E4, 05, 05]
-1222D; [7C DB 62, 05, 05]
+121F8; [7C DC EB, 05, 05]
-1222E; [7C DB 69, 05, 05]
+121F9; [7C DC F2, 05, 05]
-1222F; [7C DB 70, 05, 05]
+121FA; [7C DC F9, 05, 05]
-12230; [7C DB 77, 05, 05]
+121FB; [7C DD 02, 05, 05]
-12231; [7C DB 7E, 05, 05]
+121FC; [7C DD 09, 05, 05]
-12232; [7C DB 85, 05, 05]
+121FD; [7C DD 10, 05, 05]
-12233; [7C DB 8C, 05, 05]
+121FE; [7C DD 17, 05, 05]
-12234; [7C DB 93, 05, 05]
+121FF; [7C DD 1E, 05, 05]
-12235; [7C DB 9A, 05, 05]
+12200; [7C DD 25, 05, 05]
-12236; [7C DB A1, 05, 05]
+12201; [7C DD 2C, 05, 05]
-12237; [7C DB A8, 05, 05]
+12202; [7C DD 33, 05, 05]
-12238; [7C DB AF, 05, 05]
+12203; [7C DD 3A, 05, 05]
-12239; [7C DB B6, 05, 05]
+12204; [7C DD 41, 05, 05]
-1223A; [7C DB BD, 05, 05]
+12205; [7C DD 48, 05, 05]
-1223B; [7C DB C4, 05, 05]
+12206; [7C DD 4F, 05, 05]
-1223C; [7C DB CB, 05, 05]
+12207; [7C DD 56, 05, 05]
-1223D; [7C DB D2, 05, 05]
+12208; [7C DD 5D, 05, 05]
-1223E; [7C DB D9, 05, 05]
+12209; [7C DD 64, 05, 05]
-1223F; [7C DB E0, 05, 05]
+1220A; [7C DD 6B, 05, 05]
-12240; [7C DB E7, 05, 05]
+1220B; [7C DD 72, 05, 05]
-12241; [7C DB EE, 05, 05]
+1220C; [7C DD 79, 05, 05]
-12242; [7C DB F5, 05, 05]
+1220D; [7C DD 80, 05, 05]
-12243; [7C DB FC, 05, 05]
+1220E; [7C DD 87, 05, 05]
-12244; [7C DC 05, 05, 05]
+1220F; [7C DD 8E, 05, 05]
-12245; [7C DC 0C, 05, 05]
+12210; [7C DD 95, 05, 05]
-12246; [7C DC 13, 05, 05]
+12211; [7C DD 9C, 05, 05]
-12247; [7C DC 1A, 05, 05]
+12212; [7C DD A3, 05, 05]
-12248; [7C DC 21, 05, 05]
+12213; [7C DD AA, 05, 05]
-12249; [7C DC 28, 05, 05]
+12214; [7C DD B1, 05, 05]
-1224A; [7C DC 2F, 05, 05]
+12215; [7C DD B8, 05, 05]
-1224B; [7C DC 36, 05, 05]
+12216; [7C DD BF, 05, 05]
-1224C; [7C DC 3D, 05, 05]
+12217; [7C DD C6, 05, 05]
-1224D; [7C DC 44, 05, 05]
+12218; [7C DD CD, 05, 05]
-1224E; [7C DC 4B, 05, 05]
+12219; [7C DD D4, 05, 05]
-1224F; [7C DC 52, 05, 05]
+1221A; [7C DD DB, 05, 05]
-12250; [7C DC 59, 05, 05]
+1221B; [7C DD E2, 05, 05]
-12251; [7C DC 60, 05, 05]
+1221C; [7C DD E9, 05, 05]
-12252; [7C DC 67, 05, 05]
+1221D; [7C DD F0, 05, 05]
-12253; [7C DC 6E, 05, 05]
+1221E; [7C DD F7, 05, 05]
-12254; [7C DC 75, 05, 05]
+1221F; [7C DD FE, 05, 05]
-12255; [7C DC 7C, 05, 05]
+12220; [7C DE 07, 05, 05]
-12256; [7C DC 83, 05, 05]
+12221; [7C DE 0E, 05, 05]
-12257; [7C DC 8A, 05, 05]
+12222; [7C DE 15, 05, 05]
-12258; [7C DC 91, 05, 05]
+12223; [7C DE 1C, 05, 05]
-12259; [7C DC 98, 05, 05]
+12224; [7C DE 23, 05, 05]
-1225A; [7C DC 9F, 05, 05]
+12225; [7C DE 2A, 05, 05]
-1225B; [7C DC A6, 05, 05]
+12226; [7C DE 31, 05, 05]
-1225C; [7C DC AD, 05, 05]
+12227; [7C DE 38, 05, 05]
-1225D; [7C DC B4, 05, 05]
+12228; [7C DE 3F, 05, 05]
-1225E; [7C DC BB, 05, 05]
+12229; [7C DE 46, 05, 05]
-1225F; [7C DC C2, 05, 05]
+1222A; [7C DE 4D, 05, 05]
-12260; [7C DC C9, 05, 05]
+1222B; [7C DE 54, 05, 05]
-12261; [7C DC D0, 05, 05]
+1222C; [7C DE 5B, 05, 05]
-12262; [7C DC D7, 05, 05]
+1222D; [7C DE 62, 05, 05]
-122D4; [7C DC DE, 05, 05]
+1222E; [7C DE 69, 05, 05]
-122D5; [7C DC E5, 05, 05]
+1222F; [7C DE 70, 05, 05]
-12263; [7C DC EC, 05, 05]
+12230; [7C DE 77, 05, 05]
-12264; [7C DC F3, 05, 05]
+12231; [7C DE 7E, 05, 05]
-12265; [7C DC FA, 05, 05]
+12232; [7C DE 85, 05, 05]
-12266; [7C DD 03, 05, 05]
+12233; [7C DE 8C, 05, 05]
-12267; [7C DD 0A, 05, 05]
+12234; [7C DE 93, 05, 05]
-12268; [7C DD 11, 05, 05]
+12235; [7C DE 9A, 05, 05]
-12269; [7C DD 18, 05, 05]
+12236; [7C DE A1, 05, 05]
-1226A; [7C DD 1F, 05, 05]
+12237; [7C DE A8, 05, 05]
-1226B; [7C DD 26, 05, 05]
+12238; [7C DE AF, 05, 05]
-1226C; [7C DD 2D, 05, 05]
+12239; [7C DE B6, 05, 05]
-1226D; [7C DD 34, 05, 05]
+1223A; [7C DE BD, 05, 05]
-1226E; [7C DD 3B, 05, 05]
+1223B; [7C DE C4, 05, 05]
-1226F; [7C DD 42, 05, 05]
+1223C; [7C DE CB, 05, 05]
-12270; [7C DD 49, 05, 05]
+1223D; [7C DE D2, 05, 05]
-12271; [7C DD 50, 05, 05]
+1223E; [7C DE D9, 05, 05]
-12272; [7C DD 57, 05, 05]
+1223F; [7C DE E0, 05, 05]
-12273; [7C DD 5E, 05, 05]
+12240; [7C DE E7, 05, 05]
-12274; [7C DD 65, 05, 05]
+12241; [7C DE EE, 05, 05]
-12275; [7C DD 6C, 05, 05]
+12242; [7C DE F5, 05, 05]
-12276; [7C DD 73, 05, 05]
+12243; [7C DE FC, 05, 05]
-12277; [7C DD 7A, 05, 05]
+12244; [7C DF 05, 05, 05]
-12278; [7C DD 81, 05, 05]
+12245; [7C DF 0C, 05, 05]
-12279; [7C DD 88, 05, 05]
+12246; [7C DF 13, 05, 05]
-1227A; [7C DD 8F, 05, 05]
+12247; [7C DF 1A, 05, 05]
-1227B; [7C DD 96, 05, 05]
+12248; [7C DF 21, 05, 05]
-1227C; [7C DD 9D, 05, 05]
+12249; [7C DF 28, 05, 05]
-1227D; [7C DD A4, 05, 05]
+1224A; [7C DF 2F, 05, 05]
-1227E; [7C DD AB, 05, 05]
+1224B; [7C DF 36, 05, 05]
-1227F; [7C DD B2, 05, 05]
+1224C; [7C DF 3D, 05, 05]
-12280; [7C DD B9, 05, 05]
+1224D; [7C DF 44, 05, 05]
-12281; [7C DD C0, 05, 05]
+1224E; [7C DF 4B, 05, 05]
-12282; [7C DD C7, 05, 05]
+1224F; [7C DF 52, 05, 05]
-12283; [7C DD CE, 05, 05]
+12250; [7C DF 59, 05, 05]
-12284; [7C DD D5, 05, 05]
+12251; [7C DF 60, 05, 05]
-12285; [7C DD DC, 05, 05]
+12252; [7C DF 67, 05, 05]
-12286; [7C DD E3, 05, 05]
+12253; [7C DF 6E, 05, 05]
-12287; [7C DD EA, 05, 05]
+12254; [7C DF 75, 05, 05]
-12288; [7C DD F1, 05, 05]
+12255; [7C DF 7C, 05, 05]
-12289; [7C DD F8, 05, 05]
+12256; [7C DF 83, 05, 05]
-1228A; [7C DD FF, 05, 05]
+12257; [7C DF 8A, 05, 05]
-1228B; [7C DE 08, 05, 05]
+12258; [7C DF 91, 05, 05]
-1228C; [7C DE 0F, 05, 05]
+12259; [7C DF 98, 05, 05]
-1228D; [7C DE 16, 05, 05]
+1225A; [7C DF 9F, 05, 05]
-1228E; [7C DE 1D, 05, 05]
+1225B; [7C DF A6, 05, 05]
-1228F; [7C DE 24, 05, 05]
+1225C; [7C DF AD, 05, 05]
-12290; [7C DE 2B, 05, 05]
+1225D; [7C DF B4, 05, 05]
-12291; [7C DE 32, 05, 05]
+1225E; [7C DF BB, 05, 05]
-12292; [7C DE 39, 05, 05]
+1225F; [7C DF C2, 05, 05]
-12293; [7C DE 40, 05, 05]
+12260; [7C DF C9, 05, 05]
-12294; [7C DE 47, 05, 05]
+12261; [7C DF D0, 05, 05]
-12295; [7C DE 4E, 05, 05]
+12262; [7C DF D7, 05, 05]
-12296; [7C DE 55, 05, 05]
+122D4; [7C DF DE, 05, 05]
-12297; [7C DE 5C, 05, 05]
+122D5; [7C DF E5, 05, 05]
-12298; [7C DE 63, 05, 05]
+12263; [7C DF EC, 05, 05]
-12299; [7C DE 6A, 05, 05]
+12264; [7C DF F3, 05, 05]
-1229A; [7C DE 71, 05, 05]
+12265; [7C DF FA, 05, 05]
-1229B; [7C DE 78, 05, 05]
+12266; [7C E0 03, 05, 05]
-1229C; [7C DE 7F, 05, 05]
+12267; [7C E0 0A, 05, 05]
-1229D; [7C DE 86, 05, 05]
+12268; [7C E0 11, 05, 05]
-1229E; [7C DE 8D, 05, 05]
+12269; [7C E0 18, 05, 05]
-1229F; [7C DE 94, 05, 05]
+1226A; [7C E0 1F, 05, 05]
-122A0; [7C DE 9B, 05, 05]
+1226B; [7C E0 26, 05, 05]
-122A1; [7C DE A2, 05, 05]
+1226C; [7C E0 2D, 05, 05]
-122A2; [7C DE A9, 05, 05]
+1226D; [7C E0 34, 05, 05]
-122A3; [7C DE B0, 05, 05]
+1226E; [7C E0 3B, 05, 05]
-122A4; [7C DE B7, 05, 05]
+1226F; [7C E0 42, 05, 05]
-122A5; [7C DE BE, 05, 05]
+12270; [7C E0 49, 05, 05]
-122A6; [7C DE C5, 05, 05]
+12271; [7C E0 50, 05, 05]
-122A7; [7C DE CC, 05, 05]
+12272; [7C E0 57, 05, 05]
-122A8; [7C DE D3, 05, 05]
+12273; [7C E0 5E, 05, 05]
-122A9; [7C DE DA, 05, 05]
+12274; [7C E0 65, 05, 05]
-122AA; [7C DE E1, 05, 05]
+12275; [7C E0 6C, 05, 05]
-122AB; [7C DE E8, 05, 05]
+12276; [7C E0 73, 05, 05]
-122AC; [7C DE EF, 05, 05]
+12277; [7C E0 7A, 05, 05]
-122AD; [7C DE F6, 05, 05]
+12278; [7C E0 81, 05, 05]
-122AE; [7C DE FD, 05, 05]
+12279; [7C E0 88, 05, 05]
-122AF; [7C DF 06, 05, 05]
+1227A; [7C E0 8F, 05, 05]
-122B0; [7C DF 0D, 05, 05]
+1227B; [7C E0 96, 05, 05]
-122B1; [7C DF 14, 05, 05]
+1227C; [7C E0 9D, 05, 05]
-122B2; [7C DF 1B, 05, 05]
+1227D; [7C E0 A4, 05, 05]
-122B3; [7C DF 22, 05, 05]
+1227E; [7C E0 AB, 05, 05]
-122B4; [7C DF 29, 05, 05]
+1227F; [7C E0 B2, 05, 05]
-122B5; [7C DF 30, 05, 05]
+12280; [7C E0 B9, 05, 05]
-122B6; [7C DF 37, 05, 05]
+12281; [7C E0 C0, 05, 05]
-122B7; [7C DF 3E, 05, 05]
+12282; [7C E0 C7, 05, 05]
-122B8; [7C DF 45, 05, 05]
+12283; [7C E0 CE, 05, 05]
-122B9; [7C DF 4C, 05, 05]
+12284; [7C E0 D5, 05, 05]
-122BA; [7C DF 53, 05, 05]
+12285; [7C E0 DC, 05, 05]
-122BB; [7C DF 5A, 05, 05]
+12286; [7C E0 E3, 05, 05]
-122BC; [7C DF 61, 05, 05]
+12287; [7C E0 EA, 05, 05]
-122BD; [7C DF 68, 05, 05]
+12288; [7C E0 F1, 05, 05]
-122BE; [7C DF 6F, 05, 05]
+12289; [7C E0 F8, 05, 05]
-122BF; [7C DF 76, 05, 05]
+1228A; [7C E0 FF, 05, 05]
-122C0; [7C DF 7D, 05, 05]
+1228B; [7C E1 08, 05, 05]
-122C1; [7C DF 84, 05, 05]
+1228C; [7C E1 0F, 05, 05]
-122C2; [7C DF 8B, 05, 05]
+1228D; [7C E1 16, 05, 05]
-122C3; [7C DF 92, 05, 05]
+1228E; [7C E1 1D, 05, 05]
-122C4; [7C DF 99, 05, 05]
+1228F; [7C E1 24, 05, 05]
-122C5; [7C DF A0, 05, 05]
+12290; [7C E1 2B, 05, 05]
-122C6; [7C DF A7, 05, 05]
+12291; [7C E1 32, 05, 05]
-122C7; [7C DF AE, 05, 05]
+12292; [7C E1 39, 05, 05]
-122C8; [7C DF B5, 05, 05]
+12293; [7C E1 40, 05, 05]
-122C9; [7C DF BC, 05, 05]
+12294; [7C E1 47, 05, 05]
-122CA; [7C DF C3, 05, 05]
+12295; [7C E1 4E, 05, 05]
-122CB; [7C DF CA, 05, 05]
+12296; [7C E1 55, 05, 05]
-122CC; [7C DF D1, 05, 05]
+12297; [7C E1 5C, 05, 05]
-122CD; [7C DF D8, 05, 05]
+12298; [7C E1 63, 05, 05]
-122CE; [7C DF DF, 05, 05]
+12299; [7C E1 6A, 05, 05]
-122CF; [7C DF E6, 05, 05]
+1229A; [7C E1 71, 05, 05]
-122D0; [7C DF ED, 05, 05]
+1229B; [7C E1 78, 05, 05]
-122D1; [7C DF F4, 05, 05]
+1229C; [7C E1 7F, 05, 05]
-122D2; [7C DF FB, 05, 05]
+1229D; [7C E1 86, 05, 05]
-122D3; [7C E0 04, 05, 05]
+1229E; [7C E1 8D, 05, 05]
-122D6; [7C E0 0B, 05, 05]
+1229F; [7C E1 94, 05, 05]
-122D7; [7C E0 12, 05, 05]
+122A0; [7C E1 9B, 05, 05]
-122D8; [7C E0 19, 05, 05]
+122A1; [7C E1 A2, 05, 05]
-122D9; [7C E0 20, 05, 05]
+122A2; [7C E1 A9, 05, 05]
-122DA; [7C E0 27, 05, 05]
+122A3; [7C E1 B0, 05, 05]
-122DB; [7C E0 2E, 05, 05]
+122A4; [7C E1 B7, 05, 05]
-122DC; [7C E0 35, 05, 05]
+122A5; [7C E1 BE, 05, 05]
-122DD; [7C E0 3C, 05, 05]
+122A6; [7C E1 C5, 05, 05]
-122DE; [7C E0 43, 05, 05]
+122A7; [7C E1 CC, 05, 05]
-122DF; [7C E0 4A, 05, 05]
+122A8; [7C E1 D3, 05, 05]
-122E0; [7C E0 51, 05, 05]
+122A9; [7C E1 DA, 05, 05]
-122E1; [7C E0 58, 05, 05]
+122AA; [7C E1 E1, 05, 05]
-122E2; [7C E0 5F, 05, 05]
+122AB; [7C E1 E8, 05, 05]
-122E3; [7C E0 66, 05, 05]
+122AC; [7C E1 EF, 05, 05]
-122E4; [7C E0 6D, 05, 05]
+122AD; [7C E1 F6, 05, 05]
-122E5; [7C E0 74, 05, 05]
+122AE; [7C E1 FD, 05, 05]
-122E6; [7C E0 7B, 05, 05]
+122AF; [7C E2 06, 05, 05]
-122E7; [7C E0 82, 05, 05]
+122B0; [7C E2 0D, 05, 05]
-122E8; [7C E0 89, 05, 05]
+122B1; [7C E2 14, 05, 05]
-122E9; [7C E0 90, 05, 05]
+122B2; [7C E2 1B, 05, 05]
-122EA; [7C E0 97, 05, 05]
+122B3; [7C E2 22, 05, 05]
-122EB; [7C E0 9E, 05, 05]
+122B4; [7C E2 29, 05, 05]
-122EC; [7C E0 A5, 05, 05]
+122B5; [7C E2 30, 05, 05]
-122ED; [7C E0 AC, 05, 05]
+122B6; [7C E2 37, 05, 05]
-122EE; [7C E0 B3, 05, 05]
+122B7; [7C E2 3E, 05, 05]
-122EF; [7C E0 BA, 05, 05]
+122B8; [7C E2 45, 05, 05]
-122F0; [7C E0 C1, 05, 05]
+122B9; [7C E2 4C, 05, 05]
-122F1; [7C E0 C8, 05, 05]
+122BA; [7C E2 53, 05, 05]
-122F2; [7C E0 CF, 05, 05]
+122BB; [7C E2 5A, 05, 05]
-122F3; [7C E0 D6, 05, 05]
+122BC; [7C E2 61, 05, 05]
-122F4; [7C E0 DD, 05, 05]
+122BD; [7C E2 68, 05, 05]
-122F5; [7C E0 E4, 05, 05]
+122BE; [7C E2 6F, 05, 05]
-122F6; [7C E0 EB, 05, 05]
+122BF; [7C E2 76, 05, 05]
-122F7; [7C E0 F2, 05, 05]
+122C0; [7C E2 7D, 05, 05]
-122F8; [7C E0 F9, 05, 05]
+122C1; [7C E2 84, 05, 05]
-122F9; [7C E1 02, 05, 05]
+122C2; [7C E2 8B, 05, 05]
-122FA; [7C E1 09, 05, 05]
+122C3; [7C E2 92, 05, 05]
-122FB; [7C E1 10, 05, 05]
+122C4; [7C E2 99, 05, 05]
-122FC; [7C E1 17, 05, 05]
+122C5; [7C E2 A0, 05, 05]
-122FD; [7C E1 1E, 05, 05]
+122C6; [7C E2 A7, 05, 05]
-122FE; [7C E1 25, 05, 05]
+122C7; [7C E2 AE, 05, 05]
-122FF; [7C E1 2C, 05, 05]
+122C8; [7C E2 B5, 05, 05]
-12300; [7C E1 33, 05, 05]
+122C9; [7C E2 BC, 05, 05]
-12301; [7C E1 3A, 05, 05]
+122CA; [7C E2 C3, 05, 05]
-12302; [7C E1 41, 05, 05]
+122CB; [7C E2 CA, 05, 05]
-12303; [7C E1 48, 05, 05]
+122CC; [7C E2 D1, 05, 05]
-12304; [7C E1 4F, 05, 05]
+122CD; [7C E2 D8, 05, 05]
-12305; [7C E1 56, 05, 05]
+122CE; [7C E2 DF, 05, 05]
-12306; [7C E1 5D, 05, 05]
+122CF; [7C E2 E6, 05, 05]
-12307; [7C E1 64, 05, 05]
+122D0; [7C E2 ED, 05, 05]
-12308; [7C E1 6B, 05, 05]
+122D1; [7C E2 F4, 05, 05]
-12309; [7C E1 72, 05, 05]
+122D2; [7C E2 FB, 05, 05]
-1230A; [7C E1 79, 05, 05]
+122D3; [7C E3 04, 05, 05]
-1230B; [7C E1 80, 05, 05]
+122D6; [7C E3 0B, 05, 05]
-1230C; [7C E1 87, 05, 05]
+122D7; [7C E3 12, 05, 05]
-1230D; [7C E1 8E, 05, 05]
+122D8; [7C E3 19, 05, 05]
-1230E; [7C E1 95, 05, 05]
+122D9; [7C E3 20, 05, 05]
-1230F; [7C E1 9C, 05, 05]
+122DA; [7C E3 27, 05, 05]
-12310; [7C E1 A3, 05, 05]
+122DB; [7C E3 2E, 05, 05]
-12311; [7C E1 AA, 05, 05]
+122DC; [7C E3 35, 05, 05]
-12312; [7C E1 B1, 05, 05]
+122DD; [7C E3 3C, 05, 05]
-12313; [7C E1 B8, 05, 05]
+122DE; [7C E3 43, 05, 05]
-12314; [7C E1 BF, 05, 05]
+122DF; [7C E3 4A, 05, 05]
-12315; [7C E1 C6, 05, 05]
+122E0; [7C E3 51, 05, 05]
-12316; [7C E1 CD, 05, 05]
+122E1; [7C E3 58, 05, 05]
-12317; [7C E1 D4, 05, 05]
+122E2; [7C E3 5F, 05, 05]
-12318; [7C E1 DB, 05, 05]
+122E3; [7C E3 66, 05, 05]
-12319; [7C E1 E2, 05, 05]
+122E4; [7C E3 6D, 05, 05]
-1231A; [7C E1 E9, 05, 05]
+122E5; [7C E3 74, 05, 05]
-1231B; [7C E1 F0, 05, 05]
+122E6; [7C E3 7B, 05, 05]
-1231C; [7C E1 F7, 05, 05]
+122E7; [7C E3 82, 05, 05]
-1231D; [7C E1 FE, 05, 05]
+122E8; [7C E3 89, 05, 05]
-1231E; [7C E2 07, 05, 05]
+122E9; [7C E3 90, 05, 05]
-1231F; [7C E2 0E, 05, 05]
+122EA; [7C E3 97, 05, 05]
-12320; [7C E2 15, 05, 05]
+122EB; [7C E3 9E, 05, 05]
-12321; [7C E2 1C, 05, 05]
+122EC; [7C E3 A5, 05, 05]
-12322; [7C E2 23, 05, 05]
+122ED; [7C E3 AC, 05, 05]
-12323; [7C E2 2A, 05, 05]
+122EE; [7C E3 B3, 05, 05]
-12324; [7C E2 31, 05, 05]
+122EF; [7C E3 BA, 05, 05]
-12325; [7C E2 38, 05, 05]
+122F0; [7C E3 C1, 05, 05]
-12326; [7C E2 3F, 05, 05]
+122F1; [7C E3 C8, 05, 05]
-12327; [7C E2 46, 05, 05]
+122F2; [7C E3 CF, 05, 05]
-12328; [7C E2 4D, 05, 05]
+122F3; [7C E3 D6, 05, 05]
-12329; [7C E2 54, 05, 05]
+122F4; [7C E3 DD, 05, 05]
-1232A; [7C E2 5B, 05, 05]
+122F5; [7C E3 E4, 05, 05]
-1232B; [7C E2 62, 05, 05]
+122F6; [7C E3 EB, 05, 05]
-1232C; [7C E2 69, 05, 05]
+122F7; [7C E3 F2, 05, 05]
-1232D; [7C E2 70, 05, 05]
+122F8; [7C E3 F9, 05, 05]
-1232E; [7C E2 77, 05, 05]
+122F9; [7C E4 02, 05, 05]
-1232F; [7C E2 7E, 05, 05]
+122FA; [7C E4 09, 05, 05]
-12330; [7C E2 85, 05, 05]
+122FB; [7C E4 10, 05, 05]
-12331; [7C E2 8C, 05, 05]
+122FC; [7C E4 17, 05, 05]
-12332; [7C E2 93, 05, 05]
+122FD; [7C E4 1E, 05, 05]
-12333; [7C E2 9A, 05, 05]
+122FE; [7C E4 25, 05, 05]
-12334; [7C E2 A1, 05, 05]
+122FF; [7C E4 2C, 05, 05]
-12335; [7C E2 A8, 05, 05]
+12300; [7C E4 33, 05, 05]
-12336; [7C E2 AF, 05, 05]
+12301; [7C E4 3A, 05, 05]
-12337; [7C E2 B6, 05, 05]
+12302; [7C E4 41, 05, 05]
-12338; [7C E2 BD, 05, 05]
+12303; [7C E4 48, 05, 05]
-12339; [7C E2 C4, 05, 05]
+12304; [7C E4 4F, 05, 05]
-1233A; [7C E2 CB, 05, 05]
+12305; [7C E4 56, 05, 05]
-1233B; [7C E2 D2, 05, 05]
+12306; [7C E4 5D, 05, 05]
-1233C; [7C E2 D9, 05, 05]
+12307; [7C E4 64, 05, 05]
-1233D; [7C E2 E0, 05, 05]
+12308; [7C E4 6B, 05, 05]
-1233E; [7C E2 E7, 05, 05]
+12309; [7C E4 72, 05, 05]
-1233F; [7C E2 EE, 05, 05]
+1230A; [7C E4 79, 05, 05]
-12340; [7C E2 F5, 05, 05]
+1230B; [7C E4 80, 05, 05]
-12341; [7C E2 FC, 05, 05]
+1230C; [7C E4 87, 05, 05]
-12342; [7C E3 05, 05, 05]
+1230D; [7C E4 8E, 05, 05]
-12343; [7C E3 0C, 05, 05]
+1230E; [7C E4 95, 05, 05]
-12344; [7C E3 13, 05, 05]
+1230F; [7C E4 9C, 05, 05]
-12345; [7C E3 1A, 05, 05]
+12310; [7C E4 A3, 05, 05]
-12346; [7C E3 21, 05, 05]
+12311; [7C E4 AA, 05, 05]
-12347; [7C E3 28, 05, 05]
+12312; [7C E4 B1, 05, 05]
-12348; [7C E3 2F, 05, 05]
+12313; [7C E4 B8, 05, 05]
-12349; [7C E3 36, 05, 05]
+12314; [7C E4 BF, 05, 05]
-1234A; [7C E3 3D, 05, 05]
+12315; [7C E4 C6, 05, 05]
-1234B; [7C E3 44, 05, 05]
+12316; [7C E4 CD, 05, 05]
-1234C; [7C E3 4B, 05, 05]
+12317; [7C E4 D4, 05, 05]
-1234D; [7C E3 52, 05, 05]
+12318; [7C E4 DB, 05, 05]
-1234E; [7C E3 59, 05, 05]
+12319; [7C E4 E2, 05, 05]
-1234F; [7C E3 60, 05, 05]
+1231A; [7C E4 E9, 05, 05]
-12350; [7C E3 67, 05, 05]
+1231B; [7C E4 F0, 05, 05]
-12351; [7C E3 6E, 05, 05]
+1231C; [7C E4 F7, 05, 05]
-12352; [7C E3 75, 05, 05]
+1231D; [7C E4 FE, 05, 05]
-12353; [7C E3 7C, 05, 05]
+1231E; [7C E5 07, 05, 05]
-12354; [7C E3 83, 05, 05]
+1231F; [7C E5 0E, 05, 05]
-12355; [7C E3 8A, 05, 05]
+12320; [7C E5 15, 05, 05]
-12356; [7C E3 91, 05, 05]
+12321; [7C E5 1C, 05, 05]
-12357; [7C E3 98, 05, 05]
+12322; [7C E5 23, 05, 05]
-12358; [7C E3 9F, 05, 05]
+12323; [7C E5 2A, 05, 05]
-12359; [7C E3 A6, 05, 05]
+12324; [7C E5 31, 05, 05]
-1235A; [7C E3 AD, 05, 05]
+12325; [7C E5 38, 05, 05]
-1235B; [7C E3 B4, 05, 05]
+12326; [7C E5 3F, 05, 05]
-1235C; [7C E3 BB, 05, 05]
+12327; [7C E5 46, 05, 05]
-1235D; [7C E3 C2, 05, 05]
+12328; [7C E5 4D, 05, 05]
-1235E; [7C E3 C9, 05, 05]
+12329; [7C E5 54, 05, 05]
-1235F; [7C E3 D0, 05, 05]
+1232A; [7C E5 5B, 05, 05]
-12360; [7C E3 D7, 05, 05]
+1232B; [7C E5 62, 05, 05]
-12361; [7C E3 DE, 05, 05]
+1232C; [7C E5 69, 05, 05]
-12362; [7C E3 E5, 05, 05]
+1232D; [7C E5 70, 05, 05]
-12363; [7C E3 EC, 05, 05]
+1232E; [7C E5 77, 05, 05]
-12364; [7C E3 F3, 05, 05]
+1232F; [7C E5 7E, 05, 05]
-12365; [7C E3 FA, 05, 05]
+12330; [7C E5 85, 05, 05]
-12366; [7C E4 03, 05, 05]
+12331; [7C E5 8C, 05, 05]
-12367; [7C E4 0A, 05, 05]
+12332; [7C E5 93, 05, 05]
-12368; [7C E4 11, 05, 05]
+12333; [7C E5 9A, 05, 05]
-12369; [7C E4 18, 05, 05]
+12334; [7C E5 A1, 05, 05]
-1236A; [7C E4 1F, 05, 05]
+12335; [7C E5 A8, 05, 05]
-1236B; [7C E4 26, 05, 05]
+12336; [7C E5 AF, 05, 05]
-1236C; [7C E4 2D, 05, 05]
+12337; [7C E5 B6, 05, 05]
-1236D; [7C E4 34, 05, 05]
+12338; [7C E5 BD, 05, 05]
-1236E; [7C E4 3B, 05, 05]
+12339; [7C E5 C4, 05, 05]
-1236F; [7C E4 42, 05, 05]
+1233A; [7C E5 CB, 05, 05]
-12370; [7C E4 49, 05, 05]
+1233B; [7C E5 D2, 05, 05]
-12371; [7C E4 50, 05, 05]
+1233C; [7C E5 D9, 05, 05]
-12372; [7C E4 57, 05, 05]
+1233D; [7C E5 E0, 05, 05]
-12373; [7C E4 5E, 05, 05]
+1233E; [7C E5 E7, 05, 05]
-12374; [7C E4 65, 05, 05]
+1233F; [7C E5 EE, 05, 05]
-12375; [7C E4 6C, 05, 05]
+12340; [7C E5 F5, 05, 05]
-12376; [7C E4 73, 05, 05]
+12341; [7C E5 FC, 05, 05]
-12377; [7C E4 7A, 05, 05]
+12342; [7C E6 05, 05, 05]
-12378; [7C E4 81, 05, 05]
+12343; [7C E6 0C, 05, 05]
-12379; [7C E4 88, 05, 05]
+12344; [7C E6 13, 05, 05]
-1237A; [7C E4 8F, 05, 05]
+12345; [7C E6 1A, 05, 05]
-1237B; [7C E4 96, 05, 05]
+12346; [7C E6 21, 05, 05]
-1237C; [7C E4 9D, 05, 05]
+12347; [7C E6 28, 05, 05]
-1237D; [7C E4 A4, 05, 05]
+12348; [7C E6 2F, 05, 05]
-1237E; [7C E4 AB, 05, 05]
+12349; [7C E6 36, 05, 05]
-1237F; [7C E4 B2, 05, 05]
+1234A; [7C E6 3D, 05, 05]
-12380; [7C E4 B9, 05, 05]
+1234B; [7C E6 44, 05, 05]
-12381; [7C E4 C0, 05, 05]
+1234C; [7C E6 4B, 05, 05]
-12382; [7C E4 C7, 05, 05]
+1234D; [7C E6 52, 05, 05]
-12383; [7C E4 CE, 05, 05]
+1234E; [7C E6 59, 05, 05]
-12384; [7C E4 D5, 05, 05]
+1234F; [7C E6 60, 05, 05]
-12385; [7C E4 DC, 05, 05]
+12350; [7C E6 67, 05, 05]
-12386; [7C E4 E3, 05, 05]
+12351; [7C E6 6E, 05, 05]
-12387; [7C E4 EA, 05, 05]
+12352; [7C E6 75, 05, 05]
-12388; [7C E4 F1, 05, 05]
+12353; [7C E6 7C, 05, 05]
-12389; [7C E4 F8, 05, 05]
+12354; [7C E6 83, 05, 05]
-1238A; [7C E4 FF, 05, 05]
+12355; [7C E6 8A, 05, 05]
-1238B; [7C E5 08, 05, 05]
+12356; [7C E6 91, 05, 05]
-1238C; [7C E5 0F, 05, 05]
+12357; [7C E6 98, 05, 05]
-1238D; [7C E5 16, 05, 05]
+12358; [7C E6 9F, 05, 05]
-1238E; [7C E5 1D, 05, 05]
+12359; [7C E6 A6, 05, 05]
-1238F; [7C E5 24, 05, 05]
+1235A; [7C E6 AD, 05, 05]
-12390; [7C E5 2B, 05, 05]
+1235B; [7C E6 B4, 05, 05]
-12391; [7C E5 32, 05, 05]
+1235C; [7C E6 BB, 05, 05]
-12392; [7C E5 39, 05, 05]
+1235D; [7C E6 C2, 05, 05]
-12393; [7C E5 40, 05, 05]
+1235E; [7C E6 C9, 05, 05]
-12394; [7C E5 47, 05, 05]
+1235F; [7C E6 D0, 05, 05]
-12395; [7C E5 4E, 05, 05]
+12360; [7C E6 D7, 05, 05]
-12396; [7C E5 55, 05, 05]
+12361; [7C E6 DE, 05, 05]
-12397; [7C E5 5C, 05, 05]
+12362; [7C E6 E5, 05, 05]
-12398; [7C E5 63, 05, 05]
+12363; [7C E6 EC, 05, 05]
-12399; [7C E5 6A, 05, 05]
+12364; [7C E6 F3, 05, 05]
-12480; [7C E5 71, 05, 05]
+12365; [7C E6 FA, 05, 05]
-12481; [7C E5 78, 05, 05]
+12366; [7C E7 03, 05, 05]
-12482; [7C E5 7F, 05, 05]
+12367; [7C E7 0A, 05, 05]
-12483; [7C E5 86, 05, 05]
+12368; [7C E7 11, 05, 05]
-12484; [7C E5 8D, 05, 05]
+12369; [7C E7 18, 05, 05]
-12485; [7C E5 94, 05, 05]
+1236A; [7C E7 1F, 05, 05]
-12486; [7C E5 9B, 05, 05]
+1236B; [7C E7 26, 05, 05]
-12487; [7C E5 A2, 05, 05]
+1236C; [7C E7 2D, 05, 05]
-12488; [7C E5 A9, 05, 05]
+1236D; [7C E7 34, 05, 05]
-12489; [7C E5 B0, 05, 05]
+1236E; [7C E7 3B, 05, 05]
-1248A; [7C E5 B7, 05, 05]
+1236F; [7C E7 42, 05, 05]
-1248B; [7C E5 BE, 05, 05]
+12370; [7C E7 49, 05, 05]
-1248C; [7C E5 C5, 05, 05]
+12371; [7C E7 50, 05, 05]
-1248D; [7C E5 CC, 05, 05]
+12372; [7C E7 57, 05, 05]
-1248E; [7C E5 D3, 05, 05]
+12373; [7C E7 5E, 05, 05]
-1248F; [7C E5 DA, 05, 05]
+12374; [7C E7 65, 05, 05]
-12490; [7C E5 E1, 05, 05]
+12375; [7C E7 6C, 05, 05]
-12491; [7C E5 E8, 05, 05]
+12376; [7C E7 73, 05, 05]
-12492; [7C E5 EF, 05, 05]
+12377; [7C E7 7A, 05, 05]
-12493; [7C E5 F6, 05, 05]
+12378; [7C E7 81, 05, 05]
-12494; [7C E5 FD, 05, 05]
+12379; [7C E7 88, 05, 05]
-12495; [7C E6 06, 05, 05]
+1237A; [7C E7 8F, 05, 05]
-12496; [7C E6 0D, 05, 05]
+1237B; [7C E7 96, 05, 05]
-12497; [7C E6 14, 05, 05]
+1237C; [7C E7 9D, 05, 05]
-12498; [7C E6 1B, 05, 05]
+1237D; [7C E7 A4, 05, 05]
-12499; [7C E6 22, 05, 05]
+1237E; [7C E7 AB, 05, 05]
-1249A; [7C E6 29, 05, 05]
+1237F; [7C E7 B2, 05, 05]
-1249B; [7C E6 30, 05, 05]
+12380; [7C E7 B9, 05, 05]
-1249C; [7C E6 37, 05, 05]
+12381; [7C E7 C0, 05, 05]
-1249D; [7C E6 3E, 05, 05]
+12382; [7C E7 C7, 05, 05]
-1249E; [7C E6 45, 05, 05]
+12383; [7C E7 CE, 05, 05]
-1249F; [7C E6 4C, 05, 05]
+12384; [7C E7 D5, 05, 05]
-124A0; [7C E6 53, 05, 05]
+12385; [7C E7 DC, 05, 05]
-124A1; [7C E6 5A, 05, 05]
+12386; [7C E7 E3, 05, 05]
-124A2; [7C E6 61, 05, 05]
+12387; [7C E7 EA, 05, 05]
-124A3; [7C E6 68, 05, 05]
+12388; [7C E7 F1, 05, 05]
-124A4; [7C E6 6F, 05, 05]
+12389; [7C E7 F8, 05, 05]
-124A5; [7C E6 76, 05, 05]
+1238A; [7C E7 FF, 05, 05]
-124A6; [7C E6 7D, 05, 05]
+1238B; [7C E8 08, 05, 05]
-124A7; [7C E6 84, 05, 05]
+1238C; [7C E8 0F, 05, 05]
-124A8; [7C E6 8B, 05, 05]
+1238D; [7C E8 16, 05, 05]
-124A9; [7C E6 92, 05, 05]
+1238E; [7C E8 1D, 05, 05]
-124AA; [7C E6 99, 05, 05]
+1238F; [7C E8 24, 05, 05]
-124AB; [7C E6 A0, 05, 05]
+12390; [7C E8 2B, 05, 05]
-124AC; [7C E6 A7, 05, 05]
+12391; [7C E8 32, 05, 05]
-124AD; [7C E6 AE, 05, 05]
+12392; [7C E8 39, 05, 05]
-124AE; [7C E6 B5, 05, 05]
+12393; [7C E8 40, 05, 05]
-124AF; [7C E6 BC, 05, 05]
+12394; [7C E8 47, 05, 05]
-124B0; [7C E6 C3, 05, 05]
+12395; [7C E8 4E, 05, 05]
-124B1; [7C E6 CA, 05, 05]
+12396; [7C E8 55, 05, 05]
-124B2; [7C E6 D1, 05, 05]
+12397; [7C E8 5C, 05, 05]
-124B3; [7C E6 D8, 05, 05]
+12398; [7C E8 63, 05, 05]
-124B4; [7C E6 DF, 05, 05]
+12399; [7C E8 6A, 05, 05]
-124B5; [7C E6 E6, 05, 05]
+12480; [7C E8 71, 05, 05]
-124B6; [7C E6 ED, 05, 05]
+12481; [7C E8 78, 05, 05]
-124B7; [7C E6 F4, 05, 05]
+12482; [7C E8 7F, 05, 05]
-124B8; [7C E6 FB, 05, 05]
+12483; [7C E8 86, 05, 05]
-124B9; [7C E7 04, 05, 05]
+12484; [7C E8 8D, 05, 05]
-124BA; [7C E7 0B, 05, 05]
+12485; [7C E8 94, 05, 05]
-124BB; [7C E7 12, 05, 05]
+12486; [7C E8 9B, 05, 05]
-124BC; [7C E7 19, 05, 05]
+12487; [7C E8 A2, 05, 05]
-124BD; [7C E7 20, 05, 05]
+12488; [7C E8 A9, 05, 05]
-124BE; [7C E7 27, 05, 05]
+12489; [7C E8 B0, 05, 05]
-124BF; [7C E7 2E, 05, 05]
+1248A; [7C E8 B7, 05, 05]
-124C0; [7C E7 35, 05, 05]
+1248B; [7C E8 BE, 05, 05]
-124C1; [7C E7 3C, 05, 05]
+1248C; [7C E8 C5, 05, 05]
-124C2; [7C E7 43, 05, 05]
+1248D; [7C E8 CC, 05, 05]
-124C3; [7C E7 4A, 05, 05]
+1248E; [7C E8 D3, 05, 05]
-124C4; [7C E7 51, 05, 05]
+1248F; [7C E8 DA, 05, 05]
-124C5; [7C E7 58, 05, 05]
+12490; [7C E8 E1, 05, 05]
-124C6; [7C E7 5F, 05, 05]
+12491; [7C E8 E8, 05, 05]
-124C7; [7C E7 66, 05, 05]
+12492; [7C E8 EF, 05, 05]
-124C8; [7C E7 6D, 05, 05]
+12493; [7C E8 F6, 05, 05]
-124C9; [7C E7 74, 05, 05]
+12494; [7C E8 FD, 05, 05]
-124CA; [7C E7 7B, 05, 05]
+12495; [7C E9 06, 05, 05]
-124CB; [7C E7 82, 05, 05]
+12496; [7C E9 0D, 05, 05]
-124CC; [7C E7 89, 05, 05]
+12497; [7C E9 14, 05, 05]
-124CD; [7C E7 90, 05, 05]
+12498; [7C E9 1B, 05, 05]
-124CE; [7C E7 97, 05, 05]
+12499; [7C E9 22, 05, 05]
-124CF; [7C E7 9E, 05, 05]
+1249A; [7C E9 29, 05, 05]
-124D0; [7C E7 A5, 05, 05]
+1249B; [7C E9 30, 05, 05]
-124D1; [7C E7 AC, 05, 05]
+1249C; [7C E9 37, 05, 05]
-124D2; [7C E7 B3, 05, 05]
+1249D; [7C E9 3E, 05, 05]
-124D3; [7C E7 BA, 05, 05]
+1249E; [7C E9 45, 05, 05]
-124D4; [7C E7 C1, 05, 05]
+1249F; [7C E9 4C, 05, 05]
-124D5; [7C E7 C8, 05, 05]
+124A0; [7C E9 53, 05, 05]
-124D6; [7C E7 CF, 05, 05]
+124A1; [7C E9 5A, 05, 05]
-124D7; [7C E7 D6, 05, 05]
+124A2; [7C E9 61, 05, 05]
-124D8; [7C E7 DD, 05, 05]
+124A3; [7C E9 68, 05, 05]
-124D9; [7C E7 E4, 05, 05]
+124A4; [7C E9 6F, 05, 05]
-124DA; [7C E7 EB, 05, 05]
+124A5; [7C E9 76, 05, 05]
-124DB; [7C E7 F2, 05, 05]
+124A6; [7C E9 7D, 05, 05]
-124DC; [7C E7 F9, 05, 05]
+124A7; [7C E9 84, 05, 05]
-124DD; [7C E8 02, 05, 05]
+124A8; [7C E9 8B, 05, 05]
-124DE; [7C E8 09, 05, 05]
+124A9; [7C E9 92, 05, 05]
-124DF; [7C E8 10, 05, 05]
+124AA; [7C E9 99, 05, 05]
-124E0; [7C E8 17, 05, 05]
+124AB; [7C E9 A0, 05, 05]
-124E1; [7C E8 1E, 05, 05]
+124AC; [7C E9 A7, 05, 05]
-124E2; [7C E8 25, 05, 05]
+124AD; [7C E9 AE, 05, 05]
-124E3; [7C E8 2C, 05, 05]
+124AE; [7C E9 B5, 05, 05]
-124E4; [7C E8 33, 05, 05]
+124AF; [7C E9 BC, 05, 05]
-124E5; [7C E8 3A, 05, 05]
+124B0; [7C E9 C3, 05, 05]
-124E6; [7C E8 41, 05, 05]
+124B1; [7C E9 CA, 05, 05]
-124E7; [7C E8 48, 05, 05]
+124B2; [7C E9 D1, 05, 05]
-124E8; [7C E8 4F, 05, 05]
+124B3; [7C E9 D8, 05, 05]
-124E9; [7C E8 56, 05, 05]
+124B4; [7C E9 DF, 05, 05]
-124EA; [7C E8 5D, 05, 05]
+124B5; [7C E9 E6, 05, 05]
-124EB; [7C E8 64, 05, 05]
+124B6; [7C E9 ED, 05, 05]
-124EC; [7C E8 6B, 05, 05]
+124B7; [7C E9 F4, 05, 05]
-124ED; [7C E8 72, 05, 05]
+124B8; [7C E9 FB, 05, 05]
-124EE; [7C E8 79, 05, 05]
+124B9; [7C EA 04, 05, 05]
-124EF; [7C E8 80, 05, 05]
+124BA; [7C EA 0B, 05, 05]
-124F0; [7C E8 87, 05, 05]
+124BB; [7C EA 12, 05, 05]
-124F1; [7C E8 8E, 05, 05]
+124BC; [7C EA 19, 05, 05]
-124F2; [7C E8 95, 05, 05]
+124BD; [7C EA 20, 05, 05]
-124F3; [7C E8 9C, 05, 05]
+124BE; [7C EA 27, 05, 05]
-124F4; [7C E8 A3, 05, 05]
+124BF; [7C EA 2E, 05, 05]
-124F5; [7C E8 AA, 05, 05]
+124C0; [7C EA 35, 05, 05]
-124F6; [7C E8 B1, 05, 05]
+124C1; [7C EA 3C, 05, 05]
-124F7; [7C E8 B8, 05, 05]
+124C2; [7C EA 43, 05, 05]
-124F8; [7C E8 BF, 05, 05]
+124C3; [7C EA 4A, 05, 05]
-124F9; [7C E8 C6, 05, 05]
+124C4; [7C EA 51, 05, 05]
-124FA; [7C E8 CD, 05, 05]
+124C5; [7C EA 58, 05, 05]
-124FB; [7C E8 D4, 05, 05]
+124C6; [7C EA 5F, 05, 05]
-124FC; [7C E8 DB, 05, 05]
+124C7; [7C EA 66, 05, 05]
-124FD; [7C E8 E2, 05, 05]
+124C8; [7C EA 6D, 05, 05]
-124FE; [7C E8 E9, 05, 05]
+124C9; [7C EA 74, 05, 05]
-124FF; [7C E8 F0, 05, 05]
+124CA; [7C EA 7B, 05, 05]
-12500; [7C E8 F7, 05, 05]
+124CB; [7C EA 82, 05, 05]
-12501; [7C E8 FE, 05, 05]
+124CC; [7C EA 89, 05, 05]
-12502; [7C E9 07, 05, 05]
+124CD; [7C EA 90, 05, 05]
-12503; [7C E9 0E, 05, 05]
+124CE; [7C EA 97, 05, 05]
-12504; [7C E9 15, 05, 05]
+124CF; [7C EA 9E, 05, 05]
-12505; [7C E9 1C, 05, 05]
+124D0; [7C EA A5, 05, 05]
-12506; [7C E9 23, 05, 05]
+124D1; [7C EA AC, 05, 05]
-12507; [7C E9 2A, 05, 05]
+124D2; [7C EA B3, 05, 05]
-12508; [7C E9 31, 05, 05]
+124D3; [7C EA BA, 05, 05]
-12509; [7C E9 38, 05, 05]
+124D4; [7C EA C1, 05, 05]
-1250A; [7C E9 3F, 05, 05]
+124D5; [7C EA C8, 05, 05]
-1250B; [7C E9 46, 05, 05]
+124D6; [7C EA CF, 05, 05]
-1250C; [7C E9 4D, 05, 05]
+124D7; [7C EA D6, 05, 05]
-1250D; [7C E9 54, 05, 05]
+124D8; [7C EA DD, 05, 05]
-1250E; [7C E9 5B, 05, 05]
+124D9; [7C EA E4, 05, 05]
-1250F; [7C E9 62, 05, 05]
+124DA; [7C EA EB, 05, 05]
-12510; [7C E9 69, 05, 05]
+124DB; [7C EA F2, 05, 05]
-12511; [7C E9 70, 05, 05]
+124DC; [7C EA F9, 05, 05]
-12512; [7C E9 77, 05, 05]
+124DD; [7C EB 02, 05, 05]
-12513; [7C E9 7E, 05, 05]
+124DE; [7C EB 09, 05, 05]
-12514; [7C E9 85, 05, 05]
+124DF; [7C EB 10, 05, 05]
-12515; [7C E9 8C, 05, 05]
+124E0; [7C EB 17, 05, 05]
-12516; [7C E9 93, 05, 05]
+124E1; [7C EB 1E, 05, 05]
-12517; [7C E9 9A, 05, 05]
+124E2; [7C EB 25, 05, 05]
-12518; [7C E9 A1, 05, 05]
+124E3; [7C EB 2C, 05, 05]
-12519; [7C E9 A8, 05, 05]
+124E4; [7C EB 33, 05, 05]
-1251A; [7C E9 AF, 05, 05]
+124E5; [7C EB 3A, 05, 05]
-1251B; [7C E9 B6, 05, 05]
+124E6; [7C EB 41, 05, 05]
-1251C; [7C E9 BD, 05, 05]
+124E7; [7C EB 48, 05, 05]
-1251D; [7C E9 C4, 05, 05]
+124E8; [7C EB 4F, 05, 05]
-1251E; [7C E9 CB, 05, 05]
+124E9; [7C EB 56, 05, 05]
-1251F; [7C E9 D2, 05, 05]
+124EA; [7C EB 5D, 05, 05]
-12520; [7C E9 D9, 05, 05]
+124EB; [7C EB 64, 05, 05]
-12521; [7C E9 E0, 05, 05]
+124EC; [7C EB 6B, 05, 05]
-12522; [7C E9 E7, 05, 05]
+124ED; [7C EB 72, 05, 05]
-12523; [7C E9 EE, 05, 05]
+124EE; [7C EB 79, 05, 05]
-12524; [7C E9 F5, 05, 05]
+124EF; [7C EB 80, 05, 05]
-12525; [7C E9 FC, 05, 05]
+124F0; [7C EB 87, 05, 05]
-12526; [7C EA 05, 05, 05]
+124F1; [7C EB 8E, 05, 05]
-12527; [7C EA 0C, 05, 05]
+124F2; [7C EB 95, 05, 05]
-12528; [7C EA 13, 05, 05]
+124F3; [7C EB 9C, 05, 05]
-12529; [7C EA 1A, 05, 05]
+124F4; [7C EB A3, 05, 05]
-1252A; [7C EA 21, 05, 05]
+124F5; [7C EB AA, 05, 05]
-1252B; [7C EA 28, 05, 05]
+124F6; [7C EB B1, 05, 05]
-1252C; [7C EA 2F, 05, 05]
+124F7; [7C EB B8, 05, 05]
-1252D; [7C EA 36, 05, 05]
+124F8; [7C EB BF, 05, 05]
-1252E; [7C EA 3D, 05, 05]
+124F9; [7C EB C6, 05, 05]
-1252F; [7C EA 44, 05, 05]
+124FA; [7C EB CD, 05, 05]
-12530; [7C EA 4B, 05, 05]
+124FB; [7C EB D4, 05, 05]
-12531; [7C EA 52, 05, 05]
+124FC; [7C EB DB, 05, 05]
-12532; [7C EA 59, 05, 05]
+124FD; [7C EB E2, 05, 05]
-12533; [7C EA 60, 05, 05]
+124FE; [7C EB E9, 05, 05]
-12534; [7C EA 67, 05, 05]
+124FF; [7C EB F0, 05, 05]
-12535; [7C EA 6E, 05, 05]
+12500; [7C EB F7, 05, 05]
-12536; [7C EA 75, 05, 05]
+12501; [7C EB FE, 05, 05]
-12537; [7C EA 7C, 05, 05]
+12502; [7C EC 07, 05, 05]
-12538; [7C EA 83, 05, 05]
+12503; [7C EC 0E, 05, 05]
-12539; [7C EA 8A, 05, 05]
+12504; [7C EC 15, 05, 05]
-1253A; [7C EA 91, 05, 05]
+12505; [7C EC 1C, 05, 05]
-1253B; [7C EA 98, 05, 05]
+12506; [7C EC 23, 05, 05]
-1253C; [7C EA 9F, 05, 05]
+12507; [7C EC 2A, 05, 05]
-1253D; [7C EA A6, 05, 05]
+12508; [7C EC 31, 05, 05]
-1253E; [7C EA AD, 05, 05]
+12509; [7C EC 38, 05, 05]
-1253F; [7C EA B4, 05, 05]
+1250A; [7C EC 3F, 05, 05]
-12540; [7C EA BB, 05, 05]
+1250B; [7C EC 46, 05, 05]
-12541; [7C EA C2, 05, 05]
+1250C; [7C EC 4D, 05, 05]
-12542; [7C EA C9, 05, 05]
+1250D; [7C EC 54, 05, 05]
-12543; [7C EA D0, 05, 05]
+1250E; [7C EC 5B, 05, 05]
+
+1250F; [7C EC 62, 05, 05]
+
+12510; [7C EC 69, 05, 05]
+
+12511; [7C EC 70, 05, 05]
+
+12512; [7C EC 77, 05, 05]
+
+12513; [7C EC 7E, 05, 05]
+
+12514; [7C EC 85, 05, 05]
+
+12515; [7C EC 8C, 05, 05]
+
+12516; [7C EC 93, 05, 05]
+
+12517; [7C EC 9A, 05, 05]
+
+12518; [7C EC A1, 05, 05]
+
+12519; [7C EC A8, 05, 05]
+
+1251A; [7C EC AF, 05, 05]
+
+1251B; [7C EC B6, 05, 05]
+
+1251C; [7C EC BD, 05, 05]
+
+1251D; [7C EC C4, 05, 05]
+
+1251E; [7C EC CB, 05, 05]
+
+1251F; [7C EC D2, 05, 05]
+
+12520; [7C EC D9, 05, 05]
+
+12521; [7C EC E0, 05, 05]
+
+12522; [7C EC E7, 05, 05]
+
+12523; [7C EC EE, 05, 05]
+
+12524; [7C EC F5, 05, 05]
+
+12525; [7C EC FC, 05, 05]
+
+12526; [7C ED 05, 05, 05]
+
+12527; [7C ED 0C, 05, 05]
+
+12528; [7C ED 13, 05, 05]
+
+12529; [7C ED 1A, 05, 05]
+
+1252A; [7C ED 21, 05, 05]
+
+1252B; [7C ED 28, 05, 05]
+
+1252C; [7C ED 2F, 05, 05]
+
+1252D; [7C ED 36, 05, 05]
+
+1252E; [7C ED 3D, 05, 05]
+
+1252F; [7C ED 44, 05, 05]
+
+12530; [7C ED 4B, 05, 05]
+
+12531; [7C ED 52, 05, 05]
+
+12532; [7C ED 59, 05, 05]
+
+12533; [7C ED 60, 05, 05]
+
+12534; [7C ED 67, 05, 05]
+
+12535; [7C ED 6E, 05, 05]
+
+12536; [7C ED 75, 05, 05]
+
+12537; [7C ED 7C, 05, 05]
+
+12538; [7C ED 83, 05, 05]
+
+12539; [7C ED 8A, 05, 05]
+
+1253A; [7C ED 91, 05, 05]
+
+1253B; [7C ED 98, 05, 05]
+
+1253C; [7C ED 9F, 05, 05]
+
+1253D; [7C ED A6, 05, 05]
+
+1253E; [7C ED AD, 05, 05]
+
+1253F; [7C ED B4, 05, 05]
+
+12540; [7C ED BB, 05, 05]
+
+12541; [7C ED C2, 05, 05]
+
+12542; [7C ED C9, 05, 05]
+
+12543; [7C ED D0, 05, 05]
FDD1 13153; [7D 04 02, 05, 05] # Egyptian Hieroglyphs first primary starts new lead byte (compressible)
@@ -60733,6 +61635,28 @@ FDD1 18229; [7D 64 02, 05, 05] # Tangut first primary (compressible)
18AF0; [7D 9A 40, 05, 05]
18AF1; [7D 9A 42, 05, 05]
18AF2; [7D 9A 44, 05, 05]
+18AF3; [7D 9A 46, 05, 05]
+18AF4; [7D 9A 48, 05, 05]
+18AF5; [7D 9A 4A, 05, 05]
+18AF6; [7D 9A 4C, 05, 05]
+18AF7; [7D 9A 4E, 05, 05]
+18AF8; [7D 9A 50, 05, 05]
+18AF9; [7D 9A 52, 05, 05]
+18AFA; [7D 9A 54, 05, 05]
+18AFB; [7D 9A 56, 05, 05]
+18AFC; [7D 9A 58, 05, 05]
+18AFD; [7D 9A 5A, 05, 05]
+18AFE; [7D 9A 5C, 05, 05]
+18AFF; [7D 9A 5E, 05, 05]
+18D00; [7D 9A 60, 05, 05]
+18D01; [7D 9A 62, 05, 05]
+18D02; [7D 9A 64, 05, 05]
+18D03; [7D 9A 66, 05, 05]
+18D04; [7D 9A 68, 05, 05]
+18D05; [7D 9A 6A, 05, 05]
+18D06; [7D 9A 6C, 05, 05]
+18D07; [7D 9A 6E, 05, 05]
+18D08; [7D 9A 70, 05, 05]
FDD1 1B1C4; [7D 9B 02, 05, 05] # Nushu first primary (compressible)
@@ -61133,6 +62057,479 @@ FDD1 1B1C4; [7D 9B 02, 05, 05] # Nushu first primary (compressible)
1B2FA; [7D A5 E3, 05, 05]
1B2FB; [7D A5 EA, 05, 05]
+FDD1 18C65; [7D A6 02, 05, 05] # Khitan_Small_Script first primary (compressible)
+
+18B00; [7D A6 09, 05, 05]
+18B01; [7D A6 10, 05, 05]
+18B02; [7D A6 17, 05, 05]
+18B03; [7D A6 1E, 05, 05]
+18B04; [7D A6 25, 05, 05]
+18B05; [7D A6 2C, 05, 05]
+18B06; [7D A6 33, 05, 05]
+18B07; [7D A6 3A, 05, 05]
+18B08; [7D A6 41, 05, 05]
+18B09; [7D A6 48, 05, 05]
+18B0A; [7D A6 4F, 05, 05]
+18B0B; [7D A6 56, 05, 05]
+18B0C; [7D A6 5D, 05, 05]
+18B0D; [7D A6 64, 05, 05]
+18B0E; [7D A6 6B, 05, 05]
+18B0F; [7D A6 72, 05, 05]
+18B10; [7D A6 79, 05, 05]
+18B11; [7D A6 80, 05, 05]
+18B12; [7D A6 87, 05, 05]
+18B13; [7D A6 8E, 05, 05]
+18B14; [7D A6 95, 05, 05]
+18B15; [7D A6 9C, 05, 05]
+18B16; [7D A6 A3, 05, 05]
+18B17; [7D A6 AA, 05, 05]
+18B18; [7D A6 B1, 05, 05]
+18B19; [7D A6 B8, 05, 05]
+18B1A; [7D A6 BF, 05, 05]
+18B1B; [7D A6 C6, 05, 05]
+18B1C; [7D A6 CD, 05, 05]
+18B1D; [7D A6 D4, 05, 05]
+18B1E; [7D A6 DB, 05, 05]
+18B1F; [7D A6 E2, 05, 05]
+18B20; [7D A6 E9, 05, 05]
+18B21; [7D A6 F0, 05, 05]
+18B22; [7D A6 F7, 05, 05]
+18B23; [7D A6 FE, 05, 05]
+18B24; [7D A7 07, 05, 05]
+18B25; [7D A7 0E, 05, 05]
+18B26; [7D A7 15, 05, 05]
+18B27; [7D A7 1C, 05, 05]
+18B28; [7D A7 23, 05, 05]
+18B29; [7D A7 2A, 05, 05]
+18B2A; [7D A7 31, 05, 05]
+18B2B; [7D A7 38, 05, 05]
+18B2C; [7D A7 3F, 05, 05]
+18B2D; [7D A7 46, 05, 05]
+18B2E; [7D A7 4D, 05, 05]
+18B2F; [7D A7 54, 05, 05]
+18B30; [7D A7 5B, 05, 05]
+18B31; [7D A7 62, 05, 05]
+18B32; [7D A7 69, 05, 05]
+18B33; [7D A7 70, 05, 05]
+18B34; [7D A7 77, 05, 05]
+18B35; [7D A7 7E, 05, 05]
+18B36; [7D A7 85, 05, 05]
+18B37; [7D A7 8C, 05, 05]
+18B38; [7D A7 93, 05, 05]
+18B39; [7D A7 9A, 05, 05]
+18B3A; [7D A7 A1, 05, 05]
+18B3B; [7D A7 A8, 05, 05]
+18B3C; [7D A7 AF, 05, 05]
+18B3D; [7D A7 B6, 05, 05]
+18B3E; [7D A7 BD, 05, 05]
+18B3F; [7D A7 C4, 05, 05]
+18B40; [7D A7 CB, 05, 05]
+18B41; [7D A7 D2, 05, 05]
+18B42; [7D A7 D9, 05, 05]
+18B43; [7D A7 E0, 05, 05]
+18B44; [7D A7 E7, 05, 05]
+18B45; [7D A7 EE, 05, 05]
+18B46; [7D A7 F5, 05, 05]
+18B47; [7D A7 FC, 05, 05]
+18B48; [7D A8 05, 05, 05]
+18B49; [7D A8 0C, 05, 05]
+18B4A; [7D A8 13, 05, 05]
+18B4B; [7D A8 1A, 05, 05]
+18B4C; [7D A8 21, 05, 05]
+18B4D; [7D A8 28, 05, 05]
+18B4E; [7D A8 2F, 05, 05]
+18B4F; [7D A8 36, 05, 05]
+18B50; [7D A8 3D, 05, 05]
+18B51; [7D A8 44, 05, 05]
+18B52; [7D A8 4B, 05, 05]
+18B53; [7D A8 52, 05, 05]
+18B54; [7D A8 59, 05, 05]
+18B55; [7D A8 60, 05, 05]
+18B56; [7D A8 67, 05, 05]
+18B57; [7D A8 6E, 05, 05]
+18B58; [7D A8 75, 05, 05]
+18B59; [7D A8 7C, 05, 05]
+18B5A; [7D A8 83, 05, 05]
+18B5B; [7D A8 8A, 05, 05]
+18B5C; [7D A8 91, 05, 05]
+18B5D; [7D A8 98, 05, 05]
+18B5E; [7D A8 9F, 05, 05]
+18B5F; [7D A8 A6, 05, 05]
+18B60; [7D A8 AD, 05, 05]
+18B61; [7D A8 B4, 05, 05]
+18B62; [7D A8 BB, 05, 05]
+18B63; [7D A8 C2, 05, 05]
+18B64; [7D A8 C9, 05, 05]
+18B65; [7D A8 D0, 05, 05]
+18B66; [7D A8 D7, 05, 05]
+18B67; [7D A8 DE, 05, 05]
+18B68; [7D A8 E5, 05, 05]
+18B69; [7D A8 EC, 05, 05]
+18B6A; [7D A8 F3, 05, 05]
+18B6B; [7D A8 FA, 05, 05]
+18B6C; [7D A9 03, 05, 05]
+18B6D; [7D A9 0A, 05, 05]
+18B6E; [7D A9 11, 05, 05]
+18B6F; [7D A9 18, 05, 05]
+18B70; [7D A9 1F, 05, 05]
+18B71; [7D A9 26, 05, 05]
+18B72; [7D A9 2D, 05, 05]
+18B73; [7D A9 34, 05, 05]
+18B74; [7D A9 3B, 05, 05]
+18B75; [7D A9 42, 05, 05]
+18B76; [7D A9 49, 05, 05]
+18B77; [7D A9 50, 05, 05]
+18B78; [7D A9 57, 05, 05]
+18B79; [7D A9 5E, 05, 05]
+18B7A; [7D A9 65, 05, 05]
+18B7B; [7D A9 6C, 05, 05]
+18B7C; [7D A9 73, 05, 05]
+18B7D; [7D A9 7A, 05, 05]
+18B7E; [7D A9 81, 05, 05]
+18B7F; [7D A9 88, 05, 05]
+18B80; [7D A9 8F, 05, 05]
+18B81; [7D A9 96, 05, 05]
+18B82; [7D A9 9D, 05, 05]
+18B83; [7D A9 A4, 05, 05]
+18B84; [7D A9 AB, 05, 05]
+18B85; [7D A9 B2, 05, 05]
+18B86; [7D A9 B9, 05, 05]
+18B87; [7D A9 C0, 05, 05]
+18B88; [7D A9 C7, 05, 05]
+18B89; [7D A9 CE, 05, 05]
+18B8A; [7D A9 D5, 05, 05]
+18B8B; [7D A9 DC, 05, 05]
+18B8C; [7D A9 E3, 05, 05]
+18B8D; [7D A9 EA, 05, 05]
+18B8E; [7D A9 F1, 05, 05]
+18B8F; [7D A9 F8, 05, 05]
+18B90; [7D A9 FF, 05, 05]
+18B91; [7D AA 08, 05, 05]
+18B92; [7D AA 0F, 05, 05]
+18B93; [7D AA 16, 05, 05]
+18B94; [7D AA 1D, 05, 05]
+18B95; [7D AA 24, 05, 05]
+18B96; [7D AA 2B, 05, 05]
+18B97; [7D AA 32, 05, 05]
+18B98; [7D AA 39, 05, 05]
+18B99; [7D AA 40, 05, 05]
+18B9A; [7D AA 47, 05, 05]
+18B9B; [7D AA 4E, 05, 05]
+18B9C; [7D AA 55, 05, 05]
+18B9D; [7D AA 5C, 05, 05]
+18B9E; [7D AA 63, 05, 05]
+18B9F; [7D AA 6A, 05, 05]
+18BA0; [7D AA 71, 05, 05]
+18BA1; [7D AA 78, 05, 05]
+18BA2; [7D AA 7F, 05, 05]
+18BA3; [7D AA 86, 05, 05]
+18BA4; [7D AA 8D, 05, 05]
+18BA5; [7D AA 94, 05, 05]
+18BA6; [7D AA 9B, 05, 05]
+18BA7; [7D AA A2, 05, 05]
+18BA8; [7D AA A9, 05, 05]
+18BA9; [7D AA B0, 05, 05]
+18BAA; [7D AA B7, 05, 05]
+18BAB; [7D AA BE, 05, 05]
+18BAC; [7D AA C5, 05, 05]
+18BAD; [7D AA CC, 05, 05]
+18BAE; [7D AA D3, 05, 05]
+18BAF; [7D AA DA, 05, 05]
+18BB0; [7D AA E1, 05, 05]
+18BB1; [7D AA E8, 05, 05]
+18BB2; [7D AA EF, 05, 05]
+18BB3; [7D AA F6, 05, 05]
+18BB4; [7D AA FD, 05, 05]
+18BB5; [7D AB 06, 05, 05]
+18BB6; [7D AB 0D, 05, 05]
+18BB7; [7D AB 14, 05, 05]
+18BB8; [7D AB 1B, 05, 05]
+18BB9; [7D AB 22, 05, 05]
+18BBA; [7D AB 29, 05, 05]
+18BBB; [7D AB 30, 05, 05]
+18BBC; [7D AB 37, 05, 05]
+18BBD; [7D AB 3E, 05, 05]
+18BBE; [7D AB 45, 05, 05]
+18BBF; [7D AB 4C, 05, 05]
+18BC0; [7D AB 53, 05, 05]
+18BC1; [7D AB 5A, 05, 05]
+18BC2; [7D AB 61, 05, 05]
+18BC3; [7D AB 68, 05, 05]
+18BC4; [7D AB 6F, 05, 05]
+18BC5; [7D AB 76, 05, 05]
+18BC6; [7D AB 7D, 05, 05]
+18BC7; [7D AB 84, 05, 05]
+18BC8; [7D AB 8B, 05, 05]
+18BC9; [7D AB 92, 05, 05]
+18BCA; [7D AB 99, 05, 05]
+18BCB; [7D AB A0, 05, 05]
+18BCC; [7D AB A7, 05, 05]
+18BCD; [7D AB AE, 05, 05]
+18BCE; [7D AB B5, 05, 05]
+18BCF; [7D AB BC, 05, 05]
+18BD0; [7D AB C3, 05, 05]
+18BD1; [7D AB CA, 05, 05]
+18BD2; [7D AB D1, 05, 05]
+18BD3; [7D AB D8, 05, 05]
+18BD4; [7D AB DF, 05, 05]
+18BD5; [7D AB E6, 05, 05]
+18BD6; [7D AB ED, 05, 05]
+18BD7; [7D AB F4, 05, 05]
+18BD8; [7D AB FB, 05, 05]
+18BD9; [7D AC 04, 05, 05]
+18BDA; [7D AC 0B, 05, 05]
+18BDB; [7D AC 12, 05, 05]
+18BDC; [7D AC 19, 05, 05]
+18BDD; [7D AC 20, 05, 05]
+18BDE; [7D AC 27, 05, 05]
+18BDF; [7D AC 2E, 05, 05]
+18BE0; [7D AC 35, 05, 05]
+18BE1; [7D AC 3C, 05, 05]
+18BE2; [7D AC 43, 05, 05]
+18BE3; [7D AC 4A, 05, 05]
+18BE4; [7D AC 51, 05, 05]
+18BE5; [7D AC 58, 05, 05]
+18BE6; [7D AC 5F, 05, 05]
+18BE7; [7D AC 66, 05, 05]
+18BE8; [7D AC 6D, 05, 05]
+18BE9; [7D AC 74, 05, 05]
+18BEA; [7D AC 7B, 05, 05]
+18BEB; [7D AC 82, 05, 05]
+18BEC; [7D AC 89, 05, 05]
+18BED; [7D AC 90, 05, 05]
+18BEE; [7D AC 97, 05, 05]
+18BEF; [7D AC 9E, 05, 05]
+18BF0; [7D AC A5, 05, 05]
+18BF1; [7D AC AC, 05, 05]
+18BF2; [7D AC B3, 05, 05]
+18BF3; [7D AC BA, 05, 05]
+18BF4; [7D AC C1, 05, 05]
+18BF5; [7D AC C8, 05, 05]
+18BF6; [7D AC CF, 05, 05]
+18BF7; [7D AC D6, 05, 05]
+18BF8; [7D AC DD, 05, 05]
+18BF9; [7D AC E4, 05, 05]
+18BFA; [7D AC EB, 05, 05]
+18BFB; [7D AC F2, 05, 05]
+18BFC; [7D AC F9, 05, 05]
+18BFD; [7D AD 02, 05, 05]
+18BFE; [7D AD 09, 05, 05]
+18BFF; [7D AD 10, 05, 05]
+18C00; [7D AD 17, 05, 05]
+18C01; [7D AD 1E, 05, 05]
+18C02; [7D AD 25, 05, 05]
+18C03; [7D AD 2C, 05, 05]
+18C04; [7D AD 33, 05, 05]
+18C05; [7D AD 3A, 05, 05]
+18C06; [7D AD 41, 05, 05]
+18C07; [7D AD 48, 05, 05]
+18C08; [7D AD 4F, 05, 05]
+18C09; [7D AD 56, 05, 05]
+18C0A; [7D AD 5D, 05, 05]
+18C0B; [7D AD 64, 05, 05]
+18C0C; [7D AD 6B, 05, 05]
+18C0D; [7D AD 72, 05, 05]
+18C0E; [7D AD 79, 05, 05]
+18C0F; [7D AD 80, 05, 05]
+18C10; [7D AD 87, 05, 05]
+18C11; [7D AD 8E, 05, 05]
+18C12; [7D AD 95, 05, 05]
+18C13; [7D AD 9C, 05, 05]
+18C14; [7D AD A3, 05, 05]
+18C15; [7D AD AA, 05, 05]
+18C16; [7D AD B1, 05, 05]
+18C17; [7D AD B8, 05, 05]
+18C18; [7D AD BF, 05, 05]
+18C19; [7D AD C6, 05, 05]
+18C1A; [7D AD CD, 05, 05]
+18C1B; [7D AD D4, 05, 05]
+18C1C; [7D AD DB, 05, 05]
+18C1D; [7D AD E2, 05, 05]
+18C1E; [7D AD E9, 05, 05]
+18C1F; [7D AD F0, 05, 05]
+18C20; [7D AD F7, 05, 05]
+18C21; [7D AD FE, 05, 05]
+18C22; [7D AE 07, 05, 05]
+18C23; [7D AE 0E, 05, 05]
+18C24; [7D AE 15, 05, 05]
+18C25; [7D AE 1C, 05, 05]
+18C26; [7D AE 23, 05, 05]
+18C27; [7D AE 2A, 05, 05]
+18C28; [7D AE 31, 05, 05]
+18C29; [7D AE 38, 05, 05]
+18C2A; [7D AE 3F, 05, 05]
+18C2B; [7D AE 46, 05, 05]
+18C2C; [7D AE 4D, 05, 05]
+18C2D; [7D AE 54, 05, 05]
+18C2E; [7D AE 5B, 05, 05]
+18C2F; [7D AE 62, 05, 05]
+18C30; [7D AE 69, 05, 05]
+18C31; [7D AE 70, 05, 05]
+18C32; [7D AE 77, 05, 05]
+18C33; [7D AE 7E, 05, 05]
+18C34; [7D AE 85, 05, 05]
+18C35; [7D AE 8C, 05, 05]
+18C36; [7D AE 93, 05, 05]
+18C37; [7D AE 9A, 05, 05]
+18C38; [7D AE A1, 05, 05]
+18C39; [7D AE A8, 05, 05]
+18C3A; [7D AE AF, 05, 05]
+18C3B; [7D AE B6, 05, 05]
+18C3C; [7D AE BD, 05, 05]
+18C3D; [7D AE C4, 05, 05]
+18C3E; [7D AE CB, 05, 05]
+18C3F; [7D AE D2, 05, 05]
+18C40; [7D AE D9, 05, 05]
+18C41; [7D AE E0, 05, 05]
+18C42; [7D AE E7, 05, 05]
+18C43; [7D AE EE, 05, 05]
+18C44; [7D AE F5, 05, 05]
+18C45; [7D AE FC, 05, 05]
+18C46; [7D AF 05, 05, 05]
+18C47; [7D AF 0C, 05, 05]
+18C48; [7D AF 13, 05, 05]
+18C49; [7D AF 1A, 05, 05]
+18C4A; [7D AF 21, 05, 05]
+18C4B; [7D AF 28, 05, 05]
+18C4C; [7D AF 2F, 05, 05]
+18C4D; [7D AF 36, 05, 05]
+18C4E; [7D AF 3D, 05, 05]
+18C4F; [7D AF 44, 05, 05]
+18C50; [7D AF 4B, 05, 05]
+18C51; [7D AF 52, 05, 05]
+18C52; [7D AF 59, 05, 05]
+18C53; [7D AF 60, 05, 05]
+18C54; [7D AF 67, 05, 05]
+18C55; [7D AF 6E, 05, 05]
+18C56; [7D AF 75, 05, 05]
+18C57; [7D AF 7C, 05, 05]
+18C58; [7D AF 83, 05, 05]
+18C59; [7D AF 8A, 05, 05]
+18C5A; [7D AF 91, 05, 05]
+18C5B; [7D AF 98, 05, 05]
+18C5C; [7D AF 9F, 05, 05]
+18C5D; [7D AF A6, 05, 05]
+18C5E; [7D AF AD, 05, 05]
+18C5F; [7D AF B4, 05, 05]
+18C60; [7D AF BB, 05, 05]
+18C61; [7D AF C2, 05, 05]
+18C62; [7D AF C9, 05, 05]
+18C63; [7D AF D0, 05, 05]
+18C64; [7D AF D7, 05, 05]
+18C65; [7D AF DE, 05, 05]
+18C66; [7D AF E5, 05, 05]
+18C67; [7D AF EC, 05, 05]
+18C68; [7D AF F3, 05, 05]
+18C69; [7D AF FA, 05, 05]
+18C6A; [7D B0 03, 05, 05]
+18C6B; [7D B0 0A, 05, 05]
+18C6C; [7D B0 11, 05, 05]
+18C6D; [7D B0 18, 05, 05]
+18C6E; [7D B0 1F, 05, 05]
+18C6F; [7D B0 26, 05, 05]
+18C70; [7D B0 2D, 05, 05]
+18C71; [7D B0 34, 05, 05]
+18C72; [7D B0 3B, 05, 05]
+18C73; [7D B0 42, 05, 05]
+18C74; [7D B0 49, 05, 05]
+18C75; [7D B0 50, 05, 05]
+18C76; [7D B0 57, 05, 05]
+18C77; [7D B0 5E, 05, 05]
+18C78; [7D B0 65, 05, 05]
+18C79; [7D B0 6C, 05, 05]
+18C7A; [7D B0 73, 05, 05]
+18C7B; [7D B0 7A, 05, 05]
+18C7C; [7D B0 81, 05, 05]
+18C7D; [7D B0 88, 05, 05]
+18C7E; [7D B0 8F, 05, 05]
+18C7F; [7D B0 96, 05, 05]
+18C80; [7D B0 9D, 05, 05]
+18C81; [7D B0 A4, 05, 05]
+18C82; [7D B0 AB, 05, 05]
+18C83; [7D B0 B2, 05, 05]
+18C84; [7D B0 B9, 05, 05]
+18C85; [7D B0 C0, 05, 05]
+18C86; [7D B0 C7, 05, 05]
+18C87; [7D B0 CE, 05, 05]
+18C88; [7D B0 D5, 05, 05]
+18C89; [7D B0 DC, 05, 05]
+18C8A; [7D B0 E3, 05, 05]
+18C8B; [7D B0 EA, 05, 05]
+18C8C; [7D B0 F1, 05, 05]
+18C8D; [7D B0 F8, 05, 05]
+18C8E; [7D B0 FF, 05, 05]
+18C8F; [7D B1 08, 05, 05]
+18C90; [7D B1 0F, 05, 05]
+18C91; [7D B1 16, 05, 05]
+18C92; [7D B1 1D, 05, 05]
+18C93; [7D B1 24, 05, 05]
+18C94; [7D B1 2B, 05, 05]
+18C95; [7D B1 32, 05, 05]
+18C96; [7D B1 39, 05, 05]
+18C97; [7D B1 40, 05, 05]
+18C98; [7D B1 47, 05, 05]
+18C99; [7D B1 4E, 05, 05]
+18C9A; [7D B1 55, 05, 05]
+18C9B; [7D B1 5C, 05, 05]
+18C9C; [7D B1 63, 05, 05]
+18C9D; [7D B1 6A, 05, 05]
+18C9E; [7D B1 71, 05, 05]
+18C9F; [7D B1 78, 05, 05]
+18CA0; [7D B1 7F, 05, 05]
+18CA1; [7D B1 86, 05, 05]
+18CA2; [7D B1 8D, 05, 05]
+18CA3; [7D B1 94, 05, 05]
+18CA4; [7D B1 9B, 05, 05]
+18CA5; [7D B1 A2, 05, 05]
+18CA6; [7D B1 A9, 05, 05]
+18CA7; [7D B1 B0, 05, 05]
+18CA8; [7D B1 B7, 05, 05]
+18CA9; [7D B1 BE, 05, 05]
+18CAA; [7D B1 C5, 05, 05]
+18CAB; [7D B1 CC, 05, 05]
+18CAC; [7D B1 D3, 05, 05]
+18CAD; [7D B1 DA, 05, 05]
+18CAE; [7D B1 E1, 05, 05]
+18CAF; [7D B1 E8, 05, 05]
+18CB0; [7D B1 EF, 05, 05]
+18CB1; [7D B1 F6, 05, 05]
+18CB2; [7D B1 FD, 05, 05]
+18CB3; [7D B2 06, 05, 05]
+18CB4; [7D B2 0D, 05, 05]
+18CB5; [7D B2 14, 05, 05]
+18CB6; [7D B2 1B, 05, 05]
+18CB7; [7D B2 22, 05, 05]
+18CB8; [7D B2 29, 05, 05]
+18CB9; [7D B2 30, 05, 05]
+18CBA; [7D B2 37, 05, 05]
+18CBB; [7D B2 3E, 05, 05]
+18CBC; [7D B2 45, 05, 05]
+18CBD; [7D B2 4C, 05, 05]
+18CBE; [7D B2 53, 05, 05]
+18CBF; [7D B2 5A, 05, 05]
+18CC0; [7D B2 61, 05, 05]
+18CC1; [7D B2 68, 05, 05]
+18CC2; [7D B2 6F, 05, 05]
+18CC3; [7D B2 76, 05, 05]
+18CC4; [7D B2 7D, 05, 05]
+18CC5; [7D B2 84, 05, 05]
+18CC6; [7D B2 8B, 05, 05]
+18CC7; [7D B2 92, 05, 05]
+18CC8; [7D B2 99, 05, 05]
+18CC9; [7D B2 A0, 05, 05]
+18CCA; [7D B2 A7, 05, 05]
+18CCB; [7D B2 AE, 05, 05]
+18CCC; [7D B2 B5, 05, 05]
+18CCD; [7D B2 BC, 05, 05]
+18CCE; [7D B2 C3, 05, 05]
+18CCF; [7D B2 CA, 05, 05]
+18CD0; [7D B2 D1, 05, 05]
+18CD1; [7D B2 D8, 05, 05]
+18CD2; [7D B2 DF, 05, 05]
+18CD3; [7D B2 E6, 05, 05]
+18CD4; [7D B2 ED, 05, 05]
+18CD5; [7D B2 F4, 05, 05]
+
FDD1 5B57; [7E 02 02, 05, 05] # HAN first primary starts new lead byte
2F00; [U+4E00, 10]
@@ -62643,12 +64040,12 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[first secondary in primary non-ignorable [X, 05, X]] # U+0009 <CHARACTER TABULATION>
[last secondary in primary non-ignorable [X, 7C, X]] # U+16AE RUNIC LETTER O
[first primary ignorable [, 82, 05]] # U+0332 COMBINING LOW LINE
-[last primary ignorable [, FB 99, 05]] # U+00B7 MIDDLE DOT
+[last primary ignorable [, FB DB, 05]] # U+00B7 MIDDLE DOT
[first variable [03 04, 05, 05]] # U+0009 <CHARACTER TABULATION>
-[last variable [0B 7D 5D, 05, 05]] # U+10A7F OLD SOUTH ARABIAN NUMERIC INDICATOR
+[last variable [0B 80 5D, 05, 05]] # U+10A7F OLD SOUTH ARABIAN NUMERIC INDICATOR
[variable top = 0B FF FF FF]
[first regular [0C 04, 05, 05]] # U+0060 GRAVE ACCENT
-[last regular [7D A5 EA, 05, 05]] # U+1B2FB NUSHU CHARACTER-1B2FB
+[last regular [7D B2 F4, 05, 05]] # U+18CD5 KHITAN SMALL SCRIPT CHARACTER-18CD5
[first implicit [E0, 05, 05]] # CONSTRUCTED
[last implicit [E4, 05, 05]] # CONSTRUCTED
[first trailing [EF FD, 05, 05]] # U+FFFD REPLACEMENT CHARACTER
@@ -62658,7 +64055,7 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Adlm 78=69 ]
[reorderingTokens Aghb 7C=53 ]
[reorderingTokens Ahom 71=28 ]
-[reorderingTokens Arab 66=1081 ]
+[reorderingTokens Arab 66=1091 ]
[reorderingTokens Armi 7C=23 ]
[reorderingTokens Armn 64=85 ]
[reorderingTokens Avst 7C=55 ]
@@ -62668,21 +64065,23 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Batk 75=39 ]
[reorderingTokens Beng 69=56 ]
[reorderingTokens Bhks 71=48 ]
-[reorderingTokens Bopo 7B=71 ]
+[reorderingTokens Bopo 7B=76 ]
[reorderingTokens Brah 71=54 ]
[reorderingTokens Bugi 75=24 ]
[reorderingTokens Buhd 75=19 ]
[reorderingTokens CURRENCY 0D=1 ]
-[reorderingTokens Cakm 75=38 ]
+[reorderingTokens Cakm 75=39 ]
[reorderingTokens Cans 76=708 ]
[reorderingTokens Cari 7B=50 ]
[reorderingTokens Cham 76=53 ]
[reorderingTokens Cher 76=173 ]
+[reorderingTokens Chrs 7C=22 ]
[reorderingTokens Copt 60=122 ]
[reorderingTokens Cprt 7C=56 ]
[reorderingTokens Cyrl 61=387 ]
[reorderingTokens DIGIT 0E=1 0F=1 10=1 11=1 12=1 13=1 14=1 15=1 16=1 17=1 18=1 19=1 1A=1 1B=1 1C=1 1D=1 1E=1 1F=1 20=1 21=1 22=1 23=1 24=1 25=1 26=1 27=1 28=1 ]
[reorderingTokens Deva 68=90 ]
+[reorderingTokens Diak 71=45 ]
[reorderingTokens Dogr 71=45 ]
[reorderingTokens Dsrt 7C=81 ]
[reorderingTokens Dupl 7C=140 ]
@@ -62721,17 +64120,18 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Khar 71=38 ]
[reorderingTokens Khmr 75=54 ]
[reorderingTokens Khoj 71=44 ]
+[reorderingTokens Kits 7D=1 ]
[reorderingTokens Knda 6F=57 ]
[reorderingTokens Kthi 71=46 ]
[reorderingTokens LEVEL-SEPARATOR 01=1 ]
[reorderingTokens Lana 76=54 ]
[reorderingTokens Laoo 73=280 ]
-[reorderingTokens Latn 29=2248 2A=2248 2B=2248 2C=2248 2D=2248 2E=2248 2F=2248 30=2248 31=2248 32=2248 33=2248 34=2248 35=2248 36=2248 37=2248 38=2248 39=2248 3A=2248 3B=2248 3C=2248 3D=2248 3E=2248 3F=2248 40=2248 41=2248 42=2248 43=2248 44=2248 45=2248 46=2248 47=2248 48=2248 49=2248 4A=2248 4B=2248 4C=2248 4D=2248 4E=2248 4F=2248 50=2248 51=2248 52=2248 53=2248 54=2248 55=2248 56=2248 57=2248 58=2248 59=2248 5A=2248 5B=2248 5C=2248 5D=2248 ]
+[reorderingTokens Latn 29=2256 2A=2256 2B=2256 2C=2256 2D=2256 2E=2256 2F=2256 30=2256 31=2256 32=2256 33=2256 34=2256 35=2256 36=2256 37=2256 38=2256 39=2256 3A=2256 3B=2256 3C=2256 3D=2256 3E=2256 3F=2256 40=2256 41=2256 42=2256 43=2256 44=2256 45=2256 46=2256 47=2256 48=2256 49=2256 4A=2256 4B=2256 4C=2256 4D=2256 4E=2256 4F=2256 50=2256 51=2256 52=2256 53=2256 54=2256 55=2256 56=2256 57=2256 58=2256 59=2256 5A=2256 5B=2256 5C=2256 5D=2256 ]
[reorderingTokens Lepc 75=40 ]
[reorderingTokens Limb 75=32 ]
[reorderingTokens Lina 7C=342 ]
[reorderingTokens Linb 7C=212 ]
-[reorderingTokens Lisu 7B=41 ]
+[reorderingTokens Lisu 7B=42 ]
[reorderingTokens Lyci 7B=30 ]
[reorderingTokens Lydi 7B=27 ]
[reorderingTokens Mahj 71=37 ]
@@ -62743,7 +64143,7 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Mend 78=198 ]
[reorderingTokens Merc 7D=27 ]
[reorderingTokens Mero 7D=32 ]
-[reorderingTokens Mlym 70=67 ]
+[reorderingTokens Mlym 70=68 ]
[reorderingTokens Modi 71=50 ]
[reorderingTokens Mong 76=129 ]
[reorderingTokens Mroo 7C=32 ]
@@ -62753,7 +64153,7 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Nand 71=50 ]
[reorderingTokens Narb 7C=30 ]
[reorderingTokens Nbat 7C=32 ]
-[reorderingTokens Newa 71=59 ]
+[reorderingTokens Newa 71=61 ]
[reorderingTokens Nkoo 67=34 ]
[reorderingTokens Nshu 7D=1 ]
[reorderingTokens Ogam 76=27 ]
@@ -62815,6 +64215,7 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Wcho 7B=45 ]
[reorderingTokens Xpeo 7C=45 ]
[reorderingTokens Xsux 7C=1119 ]
+[reorderingTokens Yezi 7C=45 ]
[reorderingTokens Yiii 7B=1165 ]
[reorderingTokens Zanb 74=43 ]
@@ -62823,22 +64224,22 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[categories Cc 03{SPACE}=6 ]
[categories Lm 0C{SYMBOL}=24 0D{CURRENCY}=33 29{Latn}=12 2A{Latn}=12 2B{Latn}=12 2C{Latn}=12 2D{Latn}=12 2E{Latn}=12 2F{Latn}=12 30{Latn}=12 31{Latn}=12 32{Latn}=12 33{Latn}=12 34{Latn}=12 35{Latn}=12 36{Latn}=12 37{Latn}=12 38{Latn}=12 39{Latn}=12 3A{Latn}=12 3B{Latn}=12 3C{Latn}=12 3D{Latn}=12 3E{Latn}=12 3F{Latn}=12 40{Latn}=12 41{Latn}=12 42{Latn}=12 43{Latn}=12 44{Latn}=12 45{Latn}=12 46{Latn}=12 47{Latn}=12 48{Latn}=12 49{Latn}=12 4A{Latn}=12 4B{Latn}=12 4C{Latn}=12 4D{Latn}=12 4E{Latn}=12 4F{Latn}=12 50{Latn}=12 51{Latn}=12 52{Latn}=12 53{Latn}=12 54{Latn}=12 55{Latn}=12 56{Latn}=12 57{Latn}=12 58{Latn}=12 59{Latn}=12 5A{Latn}=12 5B{Latn}=12 5C{Latn}=12 5D{Latn}=12 61{Cyrl}=2 64{Armn}=1 65{Hebr Phnx Samr}=1 66{Arab}=2 67{Syrc Mand Thaa Nkoo Tfng Ethi}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=7 78{Vaii Bamu Bass Mend Medf Adlm}=2 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=27 ]
[categories Lo 68{Deva}=11 7A{Hira Hrkt Kana}=2 ]
-[categories Mc 68{Deva}=10 69{Beng}=10 6A{Guru}=3 6B{Gujr}=6 6C{Orya}=10 6D{Taml}=14 6E{Telu}=4 6F{Knda}=7 70{Mlym}=13 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=139 74{Tibt Zanb Soyo}=2 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=84 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=31 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=55 ]
-[categories Mn 29{Latn}=49 2A{Latn}=49 2B{Latn}=49 2C{Latn}=49 2D{Latn}=49 2E{Latn}=49 2F{Latn}=49 30{Latn}=49 31{Latn}=49 32{Latn}=49 33{Latn}=49 34{Latn}=49 35{Latn}=49 36{Latn}=49 37{Latn}=49 38{Latn}=49 39{Latn}=49 3A{Latn}=49 3B{Latn}=49 3C{Latn}=49 3D{Latn}=49 3E{Latn}=49 3F{Latn}=49 40{Latn}=49 41{Latn}=49 42{Latn}=49 43{Latn}=49 44{Latn}=49 45{Latn}=49 46{Latn}=49 47{Latn}=49 48{Latn}=49 49{Latn}=49 4A{Latn}=49 4B{Latn}=49 4C{Latn}=49 4D{Latn}=49 4E{Latn}=49 4F{Latn}=49 50{Latn}=49 51{Latn}=49 52{Latn}=49 53{Latn}=49 54{Latn}=49 55{Latn}=49 56{Latn}=49 57{Latn}=49 58{Latn}=49 59{Latn}=49 5A{Latn}=49 5B{Latn}=49 5C{Latn}=49 5D{Latn}=49 61{Cyrl}=42 62{Glag Perm}=43 65{Hebr Phnx Samr}=3 67{Syrc Mand Thaa Nkoo Tfng Ethi}=11 68{Deva}=16 69{Beng}=7 6A{Guru}=9 6B{Gujr}=10 6C{Orya}=9 6D{Taml}=2 6E{Telu}=15 6F{Knda}=17 70{Mlym}=9 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=169 72{Thai}=10 73{Laoo Tavt}=19 74{Tibt Zanb Soyo}=120 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=134 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=53 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=5 ]
-[categories Nd 0E{DIGIT}=1 0F{DIGIT}=1 13{DIGIT}=70 15{DIGIT}=124 17{DIGIT}=99 19{DIGIT}=86 1B{DIGIT}=82 1D{DIGIT}=74 1F{DIGIT}=71 21{DIGIT}=72 23{DIGIT}=71 25{DIGIT}=71 ]
+[categories Mc 68{Deva}=10 69{Beng}=10 6A{Guru}=3 6B{Gujr}=6 6C{Orya}=10 6D{Taml}=14 6E{Telu}=4 6F{Knda}=7 70{Mlym}=13 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=152 74{Tibt Zanb Soyo}=2 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=84 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=31 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=55 ]
+[categories Mn 29{Latn}=51 2A{Latn}=51 2B{Latn}=51 2C{Latn}=51 2D{Latn}=51 2E{Latn}=51 2F{Latn}=51 30{Latn}=51 31{Latn}=51 32{Latn}=51 33{Latn}=51 34{Latn}=51 35{Latn}=51 36{Latn}=51 37{Latn}=51 38{Latn}=51 39{Latn}=51 3A{Latn}=51 3B{Latn}=51 3C{Latn}=51 3D{Latn}=51 3E{Latn}=51 3F{Latn}=51 40{Latn}=51 41{Latn}=51 42{Latn}=51 43{Latn}=51 44{Latn}=51 45{Latn}=51 46{Latn}=51 47{Latn}=51 48{Latn}=51 49{Latn}=51 4A{Latn}=51 4B{Latn}=51 4C{Latn}=51 4D{Latn}=51 4E{Latn}=51 4F{Latn}=51 50{Latn}=51 51{Latn}=51 52{Latn}=51 53{Latn}=51 54{Latn}=51 55{Latn}=51 56{Latn}=51 57{Latn}=51 58{Latn}=51 59{Latn}=51 5A{Latn}=51 5B{Latn}=51 5C{Latn}=51 5D{Latn}=51 61{Cyrl}=42 62{Glag Perm}=43 65{Hebr Phnx Samr}=3 67{Syrc Mand Thaa Nkoo Tfng Ethi}=11 68{Deva}=16 69{Beng}=7 6A{Guru}=9 6B{Gujr}=10 6C{Orya}=9 6D{Taml}=2 6E{Telu}=15 6F{Knda}=17 70{Mlym}=9 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=171 72{Thai}=10 73{Laoo Tavt}=19 74{Tibt Zanb Soyo}=120 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=134 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=53 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=5 ]
+[categories Nd 0E{DIGIT}=1 0F{DIGIT}=1 13{DIGIT}=72 15{DIGIT}=126 17{DIGIT}=101 19{DIGIT}=88 1B{DIGIT}=84 1D{DIGIT}=76 1F{DIGIT}=73 21{DIGIT}=74 23{DIGIT}=73 25{DIGIT}=73 ]
[categories Nl 10{DIGIT}=6 11{DIGIT}=43 12{DIGIT}=17 13{DIGIT}=1 15{DIGIT}=12 17{DIGIT}=16 19{DIGIT}=16 1B{DIGIT}=17 1D{DIGIT}=18 1F{DIGIT}=10 21{DIGIT}=10 23{DIGIT}=9 25{DIGIT}=11 77{Runr Hung Orkh}=3 78{Vaii Bamu Bass Mend Medf Adlm}=10 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=2 ]
-[categories No 10{DIGIT}=125 11{DIGIT}=180 12{DIGIT}=121 13{DIGIT}=9 15{DIGIT}=58 17{DIGIT}=38 19{DIGIT}=36 1B{DIGIT}=32 1D{DIGIT}=32 1F{DIGIT}=23 21{DIGIT}=23 23{DIGIT}=23 25{DIGIT}=22 ]
+[categories No 10{DIGIT}=125 11{DIGIT}=182 12{DIGIT}=122 13{DIGIT}=9 15{DIGIT}=59 17{DIGIT}=39 19{DIGIT}=37 1B{DIGIT}=33 1D{DIGIT}=32 1F{DIGIT}=23 21{DIGIT}=23 23{DIGIT}=23 25{DIGIT}=22 ]
[categories Pc 05{PUNCTUATION}=7 0A{PUNCTUATION}=3 ]
-[categories Pd 05{PUNCTUATION}=22 0A{PUNCTUATION}=1 0B{PUNCTUATION}=1 ]
+[categories Pd 05{PUNCTUATION}=23 0A{PUNCTUATION}=1 0B{PUNCTUATION}=1 ]
[categories Pe 09{PUNCTUATION}=42 0A{PUNCTUATION}=31 ]
[categories Pf 09{PUNCTUATION}=4 0A{PUNCTUATION}=6 ]
[categories Pi 05{PUNCTUATION}=1 09{PUNCTUATION}=6 0A{PUNCTUATION}=6 ]
-[categories Po 05{PUNCTUATION}=6 06{PUNCTUATION}=4 07{PUNCTUATION}=111 08{PUNCTUATION}=8 09{PUNCTUATION}=156 0A{PUNCTUATION}=87 0B{PUNCTUATION}=209 ]
+[categories Po 05{PUNCTUATION}=6 06{PUNCTUATION}=4 07{PUNCTUATION}=111 08{PUNCTUATION}=8 09{PUNCTUATION}=158 0A{PUNCTUATION}=87 0B{PUNCTUATION}=212 ]
[categories Ps 09{PUNCTUATION}=183 0A{PUNCTUATION}=41 ]
[categories Sc 0D{CURRENCY}=61 ]
-[categories Sk 0C{SYMBOL}=87 0D{CURRENCY}=5 ]
+[categories Sk 0C{SYMBOL}=89 0D{CURRENCY}=5 ]
[categories Sm 0C{SYMBOL}=947 ]
-[categories So 0C{SYMBOL}=2690 0D{CURRENCY}=2376 15{DIGIT}=1 17{DIGIT}=3 19{DIGIT}=1 1B{DIGIT}=1 1D{DIGIT}=1 1F{DIGIT}=1 21{DIGIT}=1 23{DIGIT}=1 29{Latn}=77 2A{Latn}=77 2B{Latn}=77 2C{Latn}=77 2D{Latn}=77 2E{Latn}=77 2F{Latn}=77 30{Latn}=77 31{Latn}=77 32{Latn}=77 33{Latn}=77 34{Latn}=77 35{Latn}=77 36{Latn}=77 37{Latn}=77 38{Latn}=77 39{Latn}=77 3A{Latn}=77 3B{Latn}=77 3C{Latn}=77 3D{Latn}=77 3E{Latn}=77 3F{Latn}=77 40{Latn}=77 41{Latn}=77 42{Latn}=77 43{Latn}=77 44{Latn}=77 45{Latn}=77 46{Latn}=77 47{Latn}=77 48{Latn}=77 49{Latn}=77 4A{Latn}=77 4B{Latn}=77 4C{Latn}=77 4D{Latn}=77 4E{Latn}=77 4F{Latn}=77 50{Latn}=77 51{Latn}=77 52{Latn}=77 53{Latn}=77 54{Latn}=77 55{Latn}=77 56{Latn}=77 57{Latn}=77 58{Latn}=77 59{Latn}=77 5A{Latn}=77 5B{Latn}=77 5C{Latn}=77 5D{Latn}=77 66{Arab}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=2 7C{Dsrt Shaw Dupl Osma Elba Aghb Sora Mroo Linb Lina Cprt Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Ugar Xpeo Xsux}=1 E5{TRAILING}=1 E6{TRAILING}=1 E7{TRAILING}=1 E8{TRAILING}=1 E9{TRAILING}=1 EA{TRAILING}=1 EB{TRAILING}=1 EC{TRAILING}=1 ED{TRAILING}=1 EE{TRAILING}=1 EF{TRAILING}=1 ]
+[categories So 0C{SYMBOL}=2691 0D{CURRENCY}=2645 15{DIGIT}=1 17{DIGIT}=3 19{DIGIT}=1 1B{DIGIT}=1 1D{DIGIT}=1 1F{DIGIT}=1 21{DIGIT}=1 23{DIGIT}=1 29{Latn}=77 2A{Latn}=77 2B{Latn}=77 2C{Latn}=77 2D{Latn}=77 2E{Latn}=77 2F{Latn}=77 30{Latn}=77 31{Latn}=77 32{Latn}=77 33{Latn}=77 34{Latn}=77 35{Latn}=77 36{Latn}=77 37{Latn}=77 38{Latn}=77 39{Latn}=77 3A{Latn}=77 3B{Latn}=77 3C{Latn}=77 3D{Latn}=77 3E{Latn}=77 3F{Latn}=77 40{Latn}=77 41{Latn}=77 42{Latn}=77 43{Latn}=77 44{Latn}=77 45{Latn}=77 46{Latn}=77 47{Latn}=77 48{Latn}=77 49{Latn}=77 4A{Latn}=77 4B{Latn}=77 4C{Latn}=77 4D{Latn}=77 4E{Latn}=77 4F{Latn}=77 50{Latn}=77 51{Latn}=77 52{Latn}=77 53{Latn}=77 54{Latn}=77 55{Latn}=77 56{Latn}=77 57{Latn}=77 58{Latn}=77 59{Latn}=77 5A{Latn}=77 5B{Latn}=77 5C{Latn}=77 5D{Latn}=77 66{Arab}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=2 7C{Dsrt Shaw Dupl Osma Elba Aghb Sora Mroo Linb Lina Cprt Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Yezi Chrs Ugar Xpeo Xsux}=1 E5{TRAILING}=1 E6{TRAILING}=1 E7{TRAILING}=1 E8{TRAILING}=1 E9{TRAILING}=1 EA{TRAILING}=1 EB{TRAILING}=1 EC{TRAILING}=1 ED{TRAILING}=1 EE{TRAILING}=1 EF{TRAILING}=1 ]
[categories Zl 03{SPACE}=1 ]
[categories Zp 03{SPACE}=1 ]
[categories Zs 03{SPACE}=1 04{SPACE}=17 05{PUNCTUATION}=6 0C{SYMBOL}=29 60{Grek Copt}=1 ]
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
index 360f49cc928..7144fb8935c 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
@@ -1,5 +1,5 @@
-# NormalizationCorrections-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
+# NormalizationCorrections-13.0.0.txt
+# Date: 2019-09-09, 19:50:00 GMT [KW, LI]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
index cf4c3a9bae5..d5f13978ec6 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
@@ -1,5 +1,5 @@
-# NormalizationTest-12.1.0.txt
-# Date: 2019-04-01, 09:10:28 GMT
+# NormalizationTest-13.0.0.txt
+# Date: 2019-09-08, 23:31:12 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -2415,6 +2415,7 @@ AB5C;AB5C;AB5C;A727;A727;
AB5D;AB5D;AB5D;AB37;AB37;
AB5E;AB5E;AB5E;026B;026B;
AB5F;AB5F;AB5F;AB52;AB52;
+AB69;AB69;AB69;028D;028D;
AC00;AC00;1100 1161;AC00;1100 1161;
AC01;AC01;1100 1161 11A8;AC01;1100 1161 11A8;
AC02;AC02;1100 1161 11A9;AC02;1100 1161 11A9;
@@ -15138,6 +15139,7 @@ FFEE;FFEE;FFEE;25CB;25CB;
114BE;114BE;114B9 114BD;114BE;114B9 114BD;
115BA;115BA;115B8 115AF;115BA;115B8 115AF;
115BB;115BB;115B9 115AF;115BB;115B9 115AF;
+11938;11938;11935 11930;11938;11935 11930;
1D15E;1D157 1D165;1D157 1D165;1D157 1D165;1D157 1D165;
1D15F;1D158 1D165;1D158 1D165;1D158 1D165;1D158 1D165;
1D160;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;
@@ -16424,6 +16426,16 @@ FFEE;FFEE;FFEE;25CB;25CB;
1F248;1F248;1F248;3014 6557 3015;3014 6557 3015;
1F250;1F250;1F250;5F97;5F97;
1F251;1F251;1F251;53EF;53EF;
+1FBF0;1FBF0;1FBF0;0030;0030;
+1FBF1;1FBF1;1FBF1;0031;0031;
+1FBF2;1FBF2;1FBF2;0032;0032;
+1FBF3;1FBF3;1FBF3;0033;0033;
+1FBF4;1FBF4;1FBF4;0034;0034;
+1FBF5;1FBF5;1FBF5;0035;0035;
+1FBF6;1FBF6;1FBF6;0036;0036;
+1FBF7;1FBF7;1FBF7;0037;0037;
+1FBF8;1FBF8;1FBF8;0038;0038;
+1FBF9;1FBF9;1FBF9;0039;0039;
2F800;4E3D;4E3D;4E3D;4E3D;
2F801;4E38;4E38;4E38;4E38;
2F802;4E41;4E41;4E41;4E41;
@@ -17073,16 +17085,16 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0332 059A 0316 302A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;
0061 059A 0316 302A 0333 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;
0061 0333 059A 0316 302A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;
-0061 093C 0334 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;
-0061 0334 093C 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;
-0061 093C 0334 0335 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;
-0061 0335 093C 0334 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;
-0061 093C 0334 0336 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;
-0061 0336 093C 0334 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;
-0061 093C 0334 0337 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;
-0061 0337 093C 0334 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;
-0061 093C 0334 0338 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;
-0061 0338 093C 0334 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;
+0061 16FF0 0334 0334 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;
+0061 0334 16FF0 0334 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;
+0061 16FF0 0334 0335 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062;
+0061 0335 16FF0 0334 0062;0061 0335 0334 16FF0 0062;0061 0335 0334 16FF0 0062;0061 0335 0334 16FF0 0062;0061 0335 0334 16FF0 0062;
+0061 16FF0 0334 0336 0062;0061 0334 0336 16FF0 0062;0061 0334 0336 16FF0 0062;0061 0334 0336 16FF0 0062;0061 0334 0336 16FF0 0062;
+0061 0336 16FF0 0334 0062;0061 0336 0334 16FF0 0062;0061 0336 0334 16FF0 0062;0061 0336 0334 16FF0 0062;0061 0336 0334 16FF0 0062;
+0061 16FF0 0334 0337 0062;0061 0334 0337 16FF0 0062;0061 0334 0337 16FF0 0062;0061 0334 0337 16FF0 0062;0061 0334 0337 16FF0 0062;
+0061 0337 16FF0 0334 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062;
+0061 16FF0 0334 0338 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062;
+0061 0338 16FF0 0334 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062;
0061 059A 0316 302A 0339 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;
0061 0339 059A 0316 302A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;
0061 059A 0316 302A 033A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;
@@ -17619,8 +17631,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 08FE 0315 0300 05AE 0062;0061 05AE 08FE 0300 0315 0062;0061 05AE 08FE 0300 0315 0062;0061 05AE 08FE 0300 0315 0062;0061 05AE 08FE 0300 0315 0062;
0061 0315 0300 05AE 08FF 0062;00E0 05AE 08FF 0315 0062;0061 05AE 0300 08FF 0315 0062;00E0 05AE 08FF 0315 0062;0061 05AE 0300 08FF 0315 0062;
0061 08FF 0315 0300 05AE 0062;0061 05AE 08FF 0300 0315 0062;0061 05AE 08FF 0300 0315 0062;0061 05AE 08FF 0300 0315 0062;0061 05AE 08FF 0300 0315 0062;
-0061 3099 093C 0334 093C 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;
-0061 093C 3099 093C 0334 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;
+0061 3099 093C 16FF0 093C 0062;0061 16FF0 093C 093C 3099 0062;0061 16FF0 093C 093C 3099 0062;0061 16FF0 093C 093C 3099 0062;0061 16FF0 093C 093C 3099 0062;
+0061 093C 3099 093C 16FF0 0062;0061 16FF0 093C 093C 3099 0062;0061 16FF0 093C 093C 3099 0062;0061 16FF0 093C 093C 3099 0062;0061 16FF0 093C 093C 3099 0062;
0061 05B0 094D 3099 094D 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;
0061 094D 05B0 094D 3099 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;
0061 0315 0300 05AE 0951 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;
@@ -17631,22 +17643,22 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0953 0315 0300 05AE 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;
0061 0315 0300 05AE 0954 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;
0061 0954 0315 0300 05AE 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;
-0061 3099 093C 0334 09BC 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;
-0061 09BC 3099 093C 0334 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;
+0061 3099 093C 16FF0 09BC 0062;0061 16FF0 093C 09BC 3099 0062;0061 16FF0 093C 09BC 3099 0062;0061 16FF0 093C 09BC 3099 0062;0061 16FF0 093C 09BC 3099 0062;
+0061 09BC 3099 093C 16FF0 0062;0061 16FF0 09BC 093C 3099 0062;0061 16FF0 09BC 093C 3099 0062;0061 16FF0 09BC 093C 3099 0062;0061 16FF0 09BC 093C 3099 0062;
0061 05B0 094D 3099 09CD 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;
0061 09CD 05B0 094D 3099 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;
0061 0315 0300 05AE 09FE 0062;00E0 05AE 09FE 0315 0062;0061 05AE 0300 09FE 0315 0062;00E0 05AE 09FE 0315 0062;0061 05AE 0300 09FE 0315 0062;
0061 09FE 0315 0300 05AE 0062;0061 05AE 09FE 0300 0315 0062;0061 05AE 09FE 0300 0315 0062;0061 05AE 09FE 0300 0315 0062;0061 05AE 09FE 0300 0315 0062;
-0061 3099 093C 0334 0A3C 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;
-0061 0A3C 3099 093C 0334 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;
+0061 3099 093C 16FF0 0A3C 0062;0061 16FF0 093C 0A3C 3099 0062;0061 16FF0 093C 0A3C 3099 0062;0061 16FF0 093C 0A3C 3099 0062;0061 16FF0 093C 0A3C 3099 0062;
+0061 0A3C 3099 093C 16FF0 0062;0061 16FF0 0A3C 093C 3099 0062;0061 16FF0 0A3C 093C 3099 0062;0061 16FF0 0A3C 093C 3099 0062;0061 16FF0 0A3C 093C 3099 0062;
0061 05B0 094D 3099 0A4D 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;
0061 0A4D 05B0 094D 3099 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;
-0061 3099 093C 0334 0ABC 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;
-0061 0ABC 3099 093C 0334 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;
+0061 3099 093C 16FF0 0ABC 0062;0061 16FF0 093C 0ABC 3099 0062;0061 16FF0 093C 0ABC 3099 0062;0061 16FF0 093C 0ABC 3099 0062;0061 16FF0 093C 0ABC 3099 0062;
+0061 0ABC 3099 093C 16FF0 0062;0061 16FF0 0ABC 093C 3099 0062;0061 16FF0 0ABC 093C 3099 0062;0061 16FF0 0ABC 093C 3099 0062;0061 16FF0 0ABC 093C 3099 0062;
0061 05B0 094D 3099 0ACD 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;
0061 0ACD 05B0 094D 3099 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;
-0061 3099 093C 0334 0B3C 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;
-0061 0B3C 3099 093C 0334 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;
+0061 3099 093C 16FF0 0B3C 0062;0061 16FF0 093C 0B3C 3099 0062;0061 16FF0 093C 0B3C 3099 0062;0061 16FF0 093C 0B3C 3099 0062;0061 16FF0 093C 0B3C 3099 0062;
+0061 0B3C 3099 093C 16FF0 0062;0061 16FF0 0B3C 093C 3099 0062;0061 16FF0 0B3C 093C 3099 0062;0061 16FF0 0B3C 093C 3099 0062;0061 16FF0 0B3C 093C 3099 0062;
0061 05B0 094D 3099 0B4D 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;
0061 0B4D 05B0 094D 3099 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;
0061 05B0 094D 3099 0BCD 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;
@@ -17657,8 +17669,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0C55 0C56 0C55 0711 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;
0061 0E38 0C56 0C55 0C56 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;
0061 0C56 0E38 0C56 0C55 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;
-0061 3099 093C 0334 0CBC 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;
-0061 0CBC 3099 093C 0334 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;
+0061 3099 093C 16FF0 0CBC 0062;0061 16FF0 093C 0CBC 3099 0062;0061 16FF0 093C 0CBC 3099 0062;0061 16FF0 093C 0CBC 3099 0062;0061 16FF0 093C 0CBC 3099 0062;
+0061 0CBC 3099 093C 16FF0 0062;0061 16FF0 0CBC 093C 3099 0062;0061 16FF0 0CBC 093C 3099 0062;0061 16FF0 0CBC 093C 3099 0062;0061 16FF0 0CBC 093C 3099 0062;
0061 05B0 094D 3099 0CCD 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;
0061 0CCD 05B0 094D 3099 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;
0061 05B0 094D 3099 0D3B 0062;0061 3099 094D 0D3B 05B0 0062;0061 3099 094D 0D3B 05B0 0062;0061 3099 094D 0D3B 05B0 0062;0061 3099 094D 0D3B 05B0 0062;
@@ -17735,8 +17747,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0F87 0315 0300 05AE 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;
0061 059A 0316 302A 0FC6 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;
0061 0FC6 059A 0316 302A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;
-0061 3099 093C 0334 1037 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;
-0061 1037 3099 093C 0334 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;
+0061 3099 093C 16FF0 1037 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062;
+0061 1037 3099 093C 16FF0 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062;
0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;
0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;
0061 05B0 094D 3099 103A 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;
@@ -17817,8 +17829,12 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1ABC 0315 0300 05AE 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;
0061 059A 0316 302A 1ABD 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;
0061 1ABD 059A 0316 302A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;
-0061 3099 093C 0334 1B34 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;
-0061 1B34 3099 093C 0334 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;
+0061 059A 0316 302A 1ABF 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;
+0061 1ABF 059A 0316 302A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062;
+0061 059A 0316 302A 1AC0 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;
+0061 1AC0 059A 0316 302A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062;
+0061 3099 093C 16FF0 1B34 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;
+0061 1B34 3099 093C 16FF0 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;
0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;
0061 1B44 05B0 094D 3099 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;
0061 0315 0300 05AE 1B6B 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;
@@ -17843,22 +17859,22 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1BAA 05B0 094D 3099 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;
0061 05B0 094D 3099 1BAB 0062;0061 3099 094D 1BAB 05B0 0062;0061 3099 094D 1BAB 05B0 0062;0061 3099 094D 1BAB 05B0 0062;0061 3099 094D 1BAB 05B0 0062;
0061 1BAB 05B0 094D 3099 0062;0061 3099 1BAB 094D 05B0 0062;0061 3099 1BAB 094D 05B0 0062;0061 3099 1BAB 094D 05B0 0062;0061 3099 1BAB 094D 05B0 0062;
-0061 3099 093C 0334 1BE6 0062;0061 0334 093C 1BE6 3099 0062;0061 0334 093C 1BE6 3099 0062;0061 0334 093C 1BE6 3099 0062;0061 0334 093C 1BE6 3099 0062;
-0061 1BE6 3099 093C 0334 0062;0061 0334 1BE6 093C 3099 0062;0061 0334 1BE6 093C 3099 0062;0061 0334 1BE6 093C 3099 0062;0061 0334 1BE6 093C 3099 0062;
+0061 3099 093C 16FF0 1BE6 0062;0061 16FF0 093C 1BE6 3099 0062;0061 16FF0 093C 1BE6 3099 0062;0061 16FF0 093C 1BE6 3099 0062;0061 16FF0 093C 1BE6 3099 0062;
+0061 1BE6 3099 093C 16FF0 0062;0061 16FF0 1BE6 093C 3099 0062;0061 16FF0 1BE6 093C 3099 0062;0061 16FF0 1BE6 093C 3099 0062;0061 16FF0 1BE6 093C 3099 0062;
0061 05B0 094D 3099 1BF2 0062;0061 3099 094D 1BF2 05B0 0062;0061 3099 094D 1BF2 05B0 0062;0061 3099 094D 1BF2 05B0 0062;0061 3099 094D 1BF2 05B0 0062;
0061 1BF2 05B0 094D 3099 0062;0061 3099 1BF2 094D 05B0 0062;0061 3099 1BF2 094D 05B0 0062;0061 3099 1BF2 094D 05B0 0062;0061 3099 1BF2 094D 05B0 0062;
0061 05B0 094D 3099 1BF3 0062;0061 3099 094D 1BF3 05B0 0062;0061 3099 094D 1BF3 05B0 0062;0061 3099 094D 1BF3 05B0 0062;0061 3099 094D 1BF3 05B0 0062;
0061 1BF3 05B0 094D 3099 0062;0061 3099 1BF3 094D 05B0 0062;0061 3099 1BF3 094D 05B0 0062;0061 3099 1BF3 094D 05B0 0062;0061 3099 1BF3 094D 05B0 0062;
-0061 3099 093C 0334 1C37 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;
-0061 1C37 3099 093C 0334 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;
+0061 3099 093C 16FF0 1C37 0062;0061 16FF0 093C 1C37 3099 0062;0061 16FF0 093C 1C37 3099 0062;0061 16FF0 093C 1C37 3099 0062;0061 16FF0 093C 1C37 3099 0062;
+0061 1C37 3099 093C 16FF0 0062;0061 16FF0 1C37 093C 3099 0062;0061 16FF0 1C37 093C 3099 0062;0061 16FF0 1C37 093C 3099 0062;0061 16FF0 1C37 093C 3099 0062;
0061 0315 0300 05AE 1CD0 0062;00E0 05AE 1CD0 0315 0062;0061 05AE 0300 1CD0 0315 0062;00E0 05AE 1CD0 0315 0062;0061 05AE 0300 1CD0 0315 0062;
0061 1CD0 0315 0300 05AE 0062;0061 05AE 1CD0 0300 0315 0062;0061 05AE 1CD0 0300 0315 0062;0061 05AE 1CD0 0300 0315 0062;0061 05AE 1CD0 0300 0315 0062;
0061 0315 0300 05AE 1CD1 0062;00E0 05AE 1CD1 0315 0062;0061 05AE 0300 1CD1 0315 0062;00E0 05AE 1CD1 0315 0062;0061 05AE 0300 1CD1 0315 0062;
0061 1CD1 0315 0300 05AE 0062;0061 05AE 1CD1 0300 0315 0062;0061 05AE 1CD1 0300 0315 0062;0061 05AE 1CD1 0300 0315 0062;0061 05AE 1CD1 0300 0315 0062;
0061 0315 0300 05AE 1CD2 0062;00E0 05AE 1CD2 0315 0062;0061 05AE 0300 1CD2 0315 0062;00E0 05AE 1CD2 0315 0062;0061 05AE 0300 1CD2 0315 0062;
0061 1CD2 0315 0300 05AE 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;
-0061 093C 0334 1CD4 0062;0061 0334 1CD4 093C 0062;0061 0334 1CD4 093C 0062;0061 0334 1CD4 093C 0062;0061 0334 1CD4 093C 0062;
-0061 1CD4 093C 0334 0062;0061 1CD4 0334 093C 0062;0061 1CD4 0334 093C 0062;0061 1CD4 0334 093C 0062;0061 1CD4 0334 093C 0062;
+0061 16FF0 0334 1CD4 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062;
+0061 1CD4 16FF0 0334 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062;
0061 059A 0316 302A 1CD5 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;
0061 1CD5 059A 0316 302A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;
0061 059A 0316 302A 1CD6 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;
@@ -17883,20 +17899,20 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1CDF 059A 0316 302A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;
0061 0315 0300 05AE 1CE0 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062;
0061 1CE0 0315 0300 05AE 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;
-0061 093C 0334 1CE2 0062;0061 0334 1CE2 093C 0062;0061 0334 1CE2 093C 0062;0061 0334 1CE2 093C 0062;0061 0334 1CE2 093C 0062;
-0061 1CE2 093C 0334 0062;0061 1CE2 0334 093C 0062;0061 1CE2 0334 093C 0062;0061 1CE2 0334 093C 0062;0061 1CE2 0334 093C 0062;
-0061 093C 0334 1CE3 0062;0061 0334 1CE3 093C 0062;0061 0334 1CE3 093C 0062;0061 0334 1CE3 093C 0062;0061 0334 1CE3 093C 0062;
-0061 1CE3 093C 0334 0062;0061 1CE3 0334 093C 0062;0061 1CE3 0334 093C 0062;0061 1CE3 0334 093C 0062;0061 1CE3 0334 093C 0062;
-0061 093C 0334 1CE4 0062;0061 0334 1CE4 093C 0062;0061 0334 1CE4 093C 0062;0061 0334 1CE4 093C 0062;0061 0334 1CE4 093C 0062;
-0061 1CE4 093C 0334 0062;0061 1CE4 0334 093C 0062;0061 1CE4 0334 093C 0062;0061 1CE4 0334 093C 0062;0061 1CE4 0334 093C 0062;
-0061 093C 0334 1CE5 0062;0061 0334 1CE5 093C 0062;0061 0334 1CE5 093C 0062;0061 0334 1CE5 093C 0062;0061 0334 1CE5 093C 0062;
-0061 1CE5 093C 0334 0062;0061 1CE5 0334 093C 0062;0061 1CE5 0334 093C 0062;0061 1CE5 0334 093C 0062;0061 1CE5 0334 093C 0062;
-0061 093C 0334 1CE6 0062;0061 0334 1CE6 093C 0062;0061 0334 1CE6 093C 0062;0061 0334 1CE6 093C 0062;0061 0334 1CE6 093C 0062;
-0061 1CE6 093C 0334 0062;0061 1CE6 0334 093C 0062;0061 1CE6 0334 093C 0062;0061 1CE6 0334 093C 0062;0061 1CE6 0334 093C 0062;
-0061 093C 0334 1CE7 0062;0061 0334 1CE7 093C 0062;0061 0334 1CE7 093C 0062;0061 0334 1CE7 093C 0062;0061 0334 1CE7 093C 0062;
-0061 1CE7 093C 0334 0062;0061 1CE7 0334 093C 0062;0061 1CE7 0334 093C 0062;0061 1CE7 0334 093C 0062;0061 1CE7 0334 093C 0062;
-0061 093C 0334 1CE8 0062;0061 0334 1CE8 093C 0062;0061 0334 1CE8 093C 0062;0061 0334 1CE8 093C 0062;0061 0334 1CE8 093C 0062;
-0061 1CE8 093C 0334 0062;0061 1CE8 0334 093C 0062;0061 1CE8 0334 093C 0062;0061 1CE8 0334 093C 0062;0061 1CE8 0334 093C 0062;
+0061 16FF0 0334 1CE2 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062;
+0061 1CE2 16FF0 0334 0062;0061 1CE2 0334 16FF0 0062;0061 1CE2 0334 16FF0 0062;0061 1CE2 0334 16FF0 0062;0061 1CE2 0334 16FF0 0062;
+0061 16FF0 0334 1CE3 0062;0061 0334 1CE3 16FF0 0062;0061 0334 1CE3 16FF0 0062;0061 0334 1CE3 16FF0 0062;0061 0334 1CE3 16FF0 0062;
+0061 1CE3 16FF0 0334 0062;0061 1CE3 0334 16FF0 0062;0061 1CE3 0334 16FF0 0062;0061 1CE3 0334 16FF0 0062;0061 1CE3 0334 16FF0 0062;
+0061 16FF0 0334 1CE4 0062;0061 0334 1CE4 16FF0 0062;0061 0334 1CE4 16FF0 0062;0061 0334 1CE4 16FF0 0062;0061 0334 1CE4 16FF0 0062;
+0061 1CE4 16FF0 0334 0062;0061 1CE4 0334 16FF0 0062;0061 1CE4 0334 16FF0 0062;0061 1CE4 0334 16FF0 0062;0061 1CE4 0334 16FF0 0062;
+0061 16FF0 0334 1CE5 0062;0061 0334 1CE5 16FF0 0062;0061 0334 1CE5 16FF0 0062;0061 0334 1CE5 16FF0 0062;0061 0334 1CE5 16FF0 0062;
+0061 1CE5 16FF0 0334 0062;0061 1CE5 0334 16FF0 0062;0061 1CE5 0334 16FF0 0062;0061 1CE5 0334 16FF0 0062;0061 1CE5 0334 16FF0 0062;
+0061 16FF0 0334 1CE6 0062;0061 0334 1CE6 16FF0 0062;0061 0334 1CE6 16FF0 0062;0061 0334 1CE6 16FF0 0062;0061 0334 1CE6 16FF0 0062;
+0061 1CE6 16FF0 0334 0062;0061 1CE6 0334 16FF0 0062;0061 1CE6 0334 16FF0 0062;0061 1CE6 0334 16FF0 0062;0061 1CE6 0334 16FF0 0062;
+0061 16FF0 0334 1CE7 0062;0061 0334 1CE7 16FF0 0062;0061 0334 1CE7 16FF0 0062;0061 0334 1CE7 16FF0 0062;0061 0334 1CE7 16FF0 0062;
+0061 1CE7 16FF0 0334 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062;
+0061 16FF0 0334 1CE8 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062;
+0061 1CE8 16FF0 0334 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062;
0061 059A 0316 302A 1CED 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;
0061 1CED 059A 0316 302A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;
0061 0315 0300 05AE 1CF4 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062;
@@ -18035,10 +18051,10 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;
0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;
0061 20D1 0315 0300 05AE 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;
-0061 093C 0334 20D2 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;
-0061 20D2 093C 0334 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;
-0061 093C 0334 20D3 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;
-0061 20D3 093C 0334 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;
+0061 16FF0 0334 20D2 0062;0061 0334 20D2 16FF0 0062;0061 0334 20D2 16FF0 0062;0061 0334 20D2 16FF0 0062;0061 0334 20D2 16FF0 0062;
+0061 20D2 16FF0 0334 0062;0061 20D2 0334 16FF0 0062;0061 20D2 0334 16FF0 0062;0061 20D2 0334 16FF0 0062;0061 20D2 0334 16FF0 0062;
+0061 16FF0 0334 20D3 0062;0061 0334 20D3 16FF0 0062;0061 0334 20D3 16FF0 0062;0061 0334 20D3 16FF0 0062;0061 0334 20D3 16FF0 0062;
+0061 20D3 16FF0 0334 0062;0061 20D3 0334 16FF0 0062;0061 20D3 0334 16FF0 0062;0061 20D3 0334 16FF0 0062;0061 20D3 0334 16FF0 0062;
0061 0315 0300 05AE 20D4 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062;
0061 20D4 0315 0300 05AE 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;
0061 0315 0300 05AE 20D5 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062;
@@ -18047,32 +18063,32 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 20D6 0315 0300 05AE 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;
0061 0315 0300 05AE 20D7 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062;
0061 20D7 0315 0300 05AE 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;
-0061 093C 0334 20D8 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;
-0061 20D8 093C 0334 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;
-0061 093C 0334 20D9 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;
-0061 20D9 093C 0334 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;
-0061 093C 0334 20DA 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;
-0061 20DA 093C 0334 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;
+0061 16FF0 0334 20D8 0062;0061 0334 20D8 16FF0 0062;0061 0334 20D8 16FF0 0062;0061 0334 20D8 16FF0 0062;0061 0334 20D8 16FF0 0062;
+0061 20D8 16FF0 0334 0062;0061 20D8 0334 16FF0 0062;0061 20D8 0334 16FF0 0062;0061 20D8 0334 16FF0 0062;0061 20D8 0334 16FF0 0062;
+0061 16FF0 0334 20D9 0062;0061 0334 20D9 16FF0 0062;0061 0334 20D9 16FF0 0062;0061 0334 20D9 16FF0 0062;0061 0334 20D9 16FF0 0062;
+0061 20D9 16FF0 0334 0062;0061 20D9 0334 16FF0 0062;0061 20D9 0334 16FF0 0062;0061 20D9 0334 16FF0 0062;0061 20D9 0334 16FF0 0062;
+0061 16FF0 0334 20DA 0062;0061 0334 20DA 16FF0 0062;0061 0334 20DA 16FF0 0062;0061 0334 20DA 16FF0 0062;0061 0334 20DA 16FF0 0062;
+0061 20DA 16FF0 0334 0062;0061 20DA 0334 16FF0 0062;0061 20DA 0334 16FF0 0062;0061 20DA 0334 16FF0 0062;0061 20DA 0334 16FF0 0062;
0061 0315 0300 05AE 20DB 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062;
0061 20DB 0315 0300 05AE 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;
0061 0315 0300 05AE 20DC 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062;
0061 20DC 0315 0300 05AE 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;
0061 0315 0300 05AE 20E1 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062;
0061 20E1 0315 0300 05AE 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;
-0061 093C 0334 20E5 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;
-0061 20E5 093C 0334 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;
-0061 093C 0334 20E6 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;
-0061 20E6 093C 0334 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;
+0061 16FF0 0334 20E5 0062;0061 0334 20E5 16FF0 0062;0061 0334 20E5 16FF0 0062;0061 0334 20E5 16FF0 0062;0061 0334 20E5 16FF0 0062;
+0061 20E5 16FF0 0334 0062;0061 20E5 0334 16FF0 0062;0061 20E5 0334 16FF0 0062;0061 20E5 0334 16FF0 0062;0061 20E5 0334 16FF0 0062;
+0061 16FF0 0334 20E6 0062;0061 0334 20E6 16FF0 0062;0061 0334 20E6 16FF0 0062;0061 0334 20E6 16FF0 0062;0061 0334 20E6 16FF0 0062;
+0061 20E6 16FF0 0334 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062;
0061 0315 0300 05AE 20E7 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062;
0061 20E7 0315 0300 05AE 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;
0061 059A 0316 302A 20E8 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;
0061 20E8 059A 0316 302A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;
0061 0315 0300 05AE 20E9 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062;
0061 20E9 0315 0300 05AE 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;
-0061 093C 0334 20EA 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;
-0061 20EA 093C 0334 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;
-0061 093C 0334 20EB 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;
-0061 20EB 093C 0334 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;
+0061 16FF0 0334 20EA 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062;
+0061 20EA 16FF0 0334 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062;
+0061 16FF0 0334 20EB 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062;
+0061 20EB 16FF0 0334 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062;
0061 059A 0316 302A 20EC 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;
0061 20EC 059A 0316 302A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;
0061 059A 0316 302A 20ED 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;
@@ -18203,6 +18219,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 A6F1 0315 0300 05AE 0062;0061 05AE A6F1 0300 0315 0062;0061 05AE A6F1 0300 0315 0062;0061 05AE A6F1 0300 0315 0062;0061 05AE A6F1 0300 0315 0062;
0061 05B0 094D 3099 A806 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;
0061 A806 05B0 094D 3099 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;
+0061 05B0 094D 3099 A82C 0062;0061 3099 094D A82C 05B0 0062;0061 3099 094D A82C 05B0 0062;0061 3099 094D A82C 05B0 0062;0061 3099 094D A82C 05B0 0062;
+0061 A82C 05B0 094D 3099 0062;0061 3099 A82C 094D 05B0 0062;0061 3099 A82C 094D 05B0 0062;0061 3099 A82C 094D 05B0 0062;0061 3099 A82C 094D 05B0 0062;
0061 05B0 094D 3099 A8C4 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;
0061 A8C4 05B0 094D 3099 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;
0061 0315 0300 05AE A8E0 0062;00E0 05AE A8E0 0315 0062;0061 05AE 0300 A8E0 0315 0062;00E0 05AE A8E0 0315 0062;0061 05AE 0300 A8E0 0315 0062;
@@ -18249,8 +18267,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 A92D 059A 0316 302A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;
0061 05B0 094D 3099 A953 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;
0061 A953 05B0 094D 3099 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;
-0061 3099 093C 0334 A9B3 0062;0061 0334 093C A9B3 3099 0062;0061 0334 093C A9B3 3099 0062;0061 0334 093C A9B3 3099 0062;0061 0334 093C A9B3 3099 0062;
-0061 A9B3 3099 093C 0334 0062;0061 0334 A9B3 093C 3099 0062;0061 0334 A9B3 093C 3099 0062;0061 0334 A9B3 093C 3099 0062;0061 0334 A9B3 093C 3099 0062;
+0061 3099 093C 16FF0 A9B3 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;
+0061 A9B3 3099 093C 16FF0 0062;0061 16FF0 A9B3 093C 3099 0062;0061 16FF0 A9B3 093C 3099 0062;0061 16FF0 A9B3 093C 3099 0062;0061 16FF0 A9B3 093C 3099 0062;
0061 05B0 094D 3099 A9C0 0062;0061 3099 094D A9C0 05B0 0062;0061 3099 094D A9C0 05B0 0062;0061 3099 094D A9C0 05B0 0062;0061 3099 094D A9C0 05B0 0062;
0061 A9C0 05B0 094D 3099 0062;0061 3099 A9C0 094D 05B0 0062;0061 3099 A9C0 094D 05B0 0062;0061 3099 A9C0 094D 05B0 0062;0061 3099 A9C0 094D 05B0 0062;
0061 0315 0300 05AE AAB0 0062;00E0 05AE AAB0 0315 0062;0061 05AE 0300 AAB0 0315 0062;00E0 05AE AAB0 0315 0062;0061 05AE 0300 AAB0 0315 0062;
@@ -18329,8 +18347,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 10A0F 0315 0300 05AE 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;
0061 0315 0300 05AE 10A38 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;
0061 10A38 0315 0300 05AE 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;
-0061 093C 0334 10A39 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;
-0061 10A39 093C 0334 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;
+0061 16FF0 0334 10A39 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062;
+0061 10A39 16FF0 0334 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062;
0061 059A 0316 302A 10A3A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;
0061 10A3A 059A 0316 302A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;
0061 05B0 094D 3099 10A3F 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;
@@ -18347,6 +18365,10 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 10D26 0315 0300 05AE 0062;0061 05AE 10D26 0300 0315 0062;0061 05AE 10D26 0300 0315 0062;0061 05AE 10D26 0300 0315 0062;0061 05AE 10D26 0300 0315 0062;
0061 0315 0300 05AE 10D27 0062;00E0 05AE 10D27 0315 0062;0061 05AE 0300 10D27 0315 0062;00E0 05AE 10D27 0315 0062;0061 05AE 0300 10D27 0315 0062;
0061 10D27 0315 0300 05AE 0062;0061 05AE 10D27 0300 0315 0062;0061 05AE 10D27 0300 0315 0062;0061 05AE 10D27 0300 0315 0062;0061 05AE 10D27 0300 0315 0062;
+0061 0315 0300 05AE 10EAB 0062;00E0 05AE 10EAB 0315 0062;0061 05AE 0300 10EAB 0315 0062;00E0 05AE 10EAB 0315 0062;0061 05AE 0300 10EAB 0315 0062;
+0061 10EAB 0315 0300 05AE 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;
+0061 0315 0300 05AE 10EAC 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062;
+0061 10EAC 0315 0300 05AE 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;
0061 059A 0316 302A 10F46 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062;
0061 10F46 059A 0316 302A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062;
0061 059A 0316 302A 10F47 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062;
@@ -18375,8 +18397,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1107F 05B0 094D 3099 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;
0061 05B0 094D 3099 110B9 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;
0061 110B9 05B0 094D 3099 0062;0061 3099 110B9 094D 05B0 0062;0061 3099 110B9 094D 05B0 0062;0061 3099 110B9 094D 05B0 0062;0061 3099 110B9 094D 05B0 0062;
-0061 3099 093C 0334 110BA 0062;0061 0334 093C 110BA 3099 0062;0061 0334 093C 110BA 3099 0062;0061 0334 093C 110BA 3099 0062;0061 0334 093C 110BA 3099 0062;
-0061 110BA 3099 093C 0334 0062;0061 0334 110BA 093C 3099 0062;0061 0334 110BA 093C 3099 0062;0061 0334 110BA 093C 3099 0062;0061 0334 110BA 093C 3099 0062;
+0061 3099 093C 16FF0 110BA 0062;0061 16FF0 093C 110BA 3099 0062;0061 16FF0 093C 110BA 3099 0062;0061 16FF0 093C 110BA 3099 0062;0061 16FF0 093C 110BA 3099 0062;
+0061 110BA 3099 093C 16FF0 0062;0061 16FF0 110BA 093C 3099 0062;0061 16FF0 110BA 093C 3099 0062;0061 16FF0 110BA 093C 3099 0062;0061 16FF0 110BA 093C 3099 0062;
0061 0315 0300 05AE 11100 0062;00E0 05AE 11100 0315 0062;0061 05AE 0300 11100 0315 0062;00E0 05AE 11100 0315 0062;0061 05AE 0300 11100 0315 0062;
0061 11100 0315 0300 05AE 0062;0061 05AE 11100 0300 0315 0062;0061 05AE 11100 0300 0315 0062;0061 05AE 11100 0300 0315 0062;0061 05AE 11100 0300 0315 0062;
0061 0315 0300 05AE 11101 0062;00E0 05AE 11101 0315 0062;0061 05AE 0300 11101 0315 0062;00E0 05AE 11101 0315 0062;0061 05AE 0300 11101 0315 0062;
@@ -18387,24 +18409,24 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 11133 05B0 094D 3099 0062;0061 3099 11133 094D 05B0 0062;0061 3099 11133 094D 05B0 0062;0061 3099 11133 094D 05B0 0062;0061 3099 11133 094D 05B0 0062;
0061 05B0 094D 3099 11134 0062;0061 3099 094D 11134 05B0 0062;0061 3099 094D 11134 05B0 0062;0061 3099 094D 11134 05B0 0062;0061 3099 094D 11134 05B0 0062;
0061 11134 05B0 094D 3099 0062;0061 3099 11134 094D 05B0 0062;0061 3099 11134 094D 05B0 0062;0061 3099 11134 094D 05B0 0062;0061 3099 11134 094D 05B0 0062;
-0061 3099 093C 0334 11173 0062;0061 0334 093C 11173 3099 0062;0061 0334 093C 11173 3099 0062;0061 0334 093C 11173 3099 0062;0061 0334 093C 11173 3099 0062;
-0061 11173 3099 093C 0334 0062;0061 0334 11173 093C 3099 0062;0061 0334 11173 093C 3099 0062;0061 0334 11173 093C 3099 0062;0061 0334 11173 093C 3099 0062;
+0061 3099 093C 16FF0 11173 0062;0061 16FF0 093C 11173 3099 0062;0061 16FF0 093C 11173 3099 0062;0061 16FF0 093C 11173 3099 0062;0061 16FF0 093C 11173 3099 0062;
+0061 11173 3099 093C 16FF0 0062;0061 16FF0 11173 093C 3099 0062;0061 16FF0 11173 093C 3099 0062;0061 16FF0 11173 093C 3099 0062;0061 16FF0 11173 093C 3099 0062;
0061 05B0 094D 3099 111C0 0062;0061 3099 094D 111C0 05B0 0062;0061 3099 094D 111C0 05B0 0062;0061 3099 094D 111C0 05B0 0062;0061 3099 094D 111C0 05B0 0062;
0061 111C0 05B0 094D 3099 0062;0061 3099 111C0 094D 05B0 0062;0061 3099 111C0 094D 05B0 0062;0061 3099 111C0 094D 05B0 0062;0061 3099 111C0 094D 05B0 0062;
-0061 3099 093C 0334 111CA 0062;0061 0334 093C 111CA 3099 0062;0061 0334 093C 111CA 3099 0062;0061 0334 093C 111CA 3099 0062;0061 0334 093C 111CA 3099 0062;
-0061 111CA 3099 093C 0334 0062;0061 0334 111CA 093C 3099 0062;0061 0334 111CA 093C 3099 0062;0061 0334 111CA 093C 3099 0062;0061 0334 111CA 093C 3099 0062;
+0061 3099 093C 16FF0 111CA 0062;0061 16FF0 093C 111CA 3099 0062;0061 16FF0 093C 111CA 3099 0062;0061 16FF0 093C 111CA 3099 0062;0061 16FF0 093C 111CA 3099 0062;
+0061 111CA 3099 093C 16FF0 0062;0061 16FF0 111CA 093C 3099 0062;0061 16FF0 111CA 093C 3099 0062;0061 16FF0 111CA 093C 3099 0062;0061 16FF0 111CA 093C 3099 0062;
0061 05B0 094D 3099 11235 0062;0061 3099 094D 11235 05B0 0062;0061 3099 094D 11235 05B0 0062;0061 3099 094D 11235 05B0 0062;0061 3099 094D 11235 05B0 0062;
0061 11235 05B0 094D 3099 0062;0061 3099 11235 094D 05B0 0062;0061 3099 11235 094D 05B0 0062;0061 3099 11235 094D 05B0 0062;0061 3099 11235 094D 05B0 0062;
-0061 3099 093C 0334 11236 0062;0061 0334 093C 11236 3099 0062;0061 0334 093C 11236 3099 0062;0061 0334 093C 11236 3099 0062;0061 0334 093C 11236 3099 0062;
-0061 11236 3099 093C 0334 0062;0061 0334 11236 093C 3099 0062;0061 0334 11236 093C 3099 0062;0061 0334 11236 093C 3099 0062;0061 0334 11236 093C 3099 0062;
-0061 3099 093C 0334 112E9 0062;0061 0334 093C 112E9 3099 0062;0061 0334 093C 112E9 3099 0062;0061 0334 093C 112E9 3099 0062;0061 0334 093C 112E9 3099 0062;
-0061 112E9 3099 093C 0334 0062;0061 0334 112E9 093C 3099 0062;0061 0334 112E9 093C 3099 0062;0061 0334 112E9 093C 3099 0062;0061 0334 112E9 093C 3099 0062;
+0061 3099 093C 16FF0 11236 0062;0061 16FF0 093C 11236 3099 0062;0061 16FF0 093C 11236 3099 0062;0061 16FF0 093C 11236 3099 0062;0061 16FF0 093C 11236 3099 0062;
+0061 11236 3099 093C 16FF0 0062;0061 16FF0 11236 093C 3099 0062;0061 16FF0 11236 093C 3099 0062;0061 16FF0 11236 093C 3099 0062;0061 16FF0 11236 093C 3099 0062;
+0061 3099 093C 16FF0 112E9 0062;0061 16FF0 093C 112E9 3099 0062;0061 16FF0 093C 112E9 3099 0062;0061 16FF0 093C 112E9 3099 0062;0061 16FF0 093C 112E9 3099 0062;
+0061 112E9 3099 093C 16FF0 0062;0061 16FF0 112E9 093C 3099 0062;0061 16FF0 112E9 093C 3099 0062;0061 16FF0 112E9 093C 3099 0062;0061 16FF0 112E9 093C 3099 0062;
0061 05B0 094D 3099 112EA 0062;0061 3099 094D 112EA 05B0 0062;0061 3099 094D 112EA 05B0 0062;0061 3099 094D 112EA 05B0 0062;0061 3099 094D 112EA 05B0 0062;
0061 112EA 05B0 094D 3099 0062;0061 3099 112EA 094D 05B0 0062;0061 3099 112EA 094D 05B0 0062;0061 3099 112EA 094D 05B0 0062;0061 3099 112EA 094D 05B0 0062;
-0061 3099 093C 0334 1133B 0062;0061 0334 093C 1133B 3099 0062;0061 0334 093C 1133B 3099 0062;0061 0334 093C 1133B 3099 0062;0061 0334 093C 1133B 3099 0062;
-0061 1133B 3099 093C 0334 0062;0061 0334 1133B 093C 3099 0062;0061 0334 1133B 093C 3099 0062;0061 0334 1133B 093C 3099 0062;0061 0334 1133B 093C 3099 0062;
-0061 3099 093C 0334 1133C 0062;0061 0334 093C 1133C 3099 0062;0061 0334 093C 1133C 3099 0062;0061 0334 093C 1133C 3099 0062;0061 0334 093C 1133C 3099 0062;
-0061 1133C 3099 093C 0334 0062;0061 0334 1133C 093C 3099 0062;0061 0334 1133C 093C 3099 0062;0061 0334 1133C 093C 3099 0062;0061 0334 1133C 093C 3099 0062;
+0061 3099 093C 16FF0 1133B 0062;0061 16FF0 093C 1133B 3099 0062;0061 16FF0 093C 1133B 3099 0062;0061 16FF0 093C 1133B 3099 0062;0061 16FF0 093C 1133B 3099 0062;
+0061 1133B 3099 093C 16FF0 0062;0061 16FF0 1133B 093C 3099 0062;0061 16FF0 1133B 093C 3099 0062;0061 16FF0 1133B 093C 3099 0062;0061 16FF0 1133B 093C 3099 0062;
+0061 3099 093C 16FF0 1133C 0062;0061 16FF0 093C 1133C 3099 0062;0061 16FF0 093C 1133C 3099 0062;0061 16FF0 093C 1133C 3099 0062;0061 16FF0 093C 1133C 3099 0062;
+0061 1133C 3099 093C 16FF0 0062;0061 16FF0 1133C 093C 3099 0062;0061 16FF0 1133C 093C 3099 0062;0061 16FF0 1133C 093C 3099 0062;0061 16FF0 1133C 093C 3099 0062;
0061 05B0 094D 3099 1134D 0062;0061 3099 094D 1134D 05B0 0062;0061 3099 094D 1134D 05B0 0062;0061 3099 094D 1134D 05B0 0062;0061 3099 094D 1134D 05B0 0062;
0061 1134D 05B0 094D 3099 0062;0061 3099 1134D 094D 05B0 0062;0061 3099 1134D 094D 05B0 0062;0061 3099 1134D 094D 05B0 0062;0061 3099 1134D 094D 05B0 0062;
0061 0315 0300 05AE 11366 0062;00E0 05AE 11366 0315 0062;0061 05AE 0300 11366 0315 0062;00E0 05AE 11366 0315 0062;0061 05AE 0300 11366 0315 0062;
@@ -18433,30 +18455,36 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 11374 0315 0300 05AE 0062;0061 05AE 11374 0300 0315 0062;0061 05AE 11374 0300 0315 0062;0061 05AE 11374 0300 0315 0062;0061 05AE 11374 0300 0315 0062;
0061 05B0 094D 3099 11442 0062;0061 3099 094D 11442 05B0 0062;0061 3099 094D 11442 05B0 0062;0061 3099 094D 11442 05B0 0062;0061 3099 094D 11442 05B0 0062;
0061 11442 05B0 094D 3099 0062;0061 3099 11442 094D 05B0 0062;0061 3099 11442 094D 05B0 0062;0061 3099 11442 094D 05B0 0062;0061 3099 11442 094D 05B0 0062;
-0061 3099 093C 0334 11446 0062;0061 0334 093C 11446 3099 0062;0061 0334 093C 11446 3099 0062;0061 0334 093C 11446 3099 0062;0061 0334 093C 11446 3099 0062;
-0061 11446 3099 093C 0334 0062;0061 0334 11446 093C 3099 0062;0061 0334 11446 093C 3099 0062;0061 0334 11446 093C 3099 0062;0061 0334 11446 093C 3099 0062;
+0061 3099 093C 16FF0 11446 0062;0061 16FF0 093C 11446 3099 0062;0061 16FF0 093C 11446 3099 0062;0061 16FF0 093C 11446 3099 0062;0061 16FF0 093C 11446 3099 0062;
+0061 11446 3099 093C 16FF0 0062;0061 16FF0 11446 093C 3099 0062;0061 16FF0 11446 093C 3099 0062;0061 16FF0 11446 093C 3099 0062;0061 16FF0 11446 093C 3099 0062;
0061 0315 0300 05AE 1145E 0062;00E0 05AE 1145E 0315 0062;0061 05AE 0300 1145E 0315 0062;00E0 05AE 1145E 0315 0062;0061 05AE 0300 1145E 0315 0062;
0061 1145E 0315 0300 05AE 0062;0061 05AE 1145E 0300 0315 0062;0061 05AE 1145E 0300 0315 0062;0061 05AE 1145E 0300 0315 0062;0061 05AE 1145E 0300 0315 0062;
0061 05B0 094D 3099 114C2 0062;0061 3099 094D 114C2 05B0 0062;0061 3099 094D 114C2 05B0 0062;0061 3099 094D 114C2 05B0 0062;0061 3099 094D 114C2 05B0 0062;
0061 114C2 05B0 094D 3099 0062;0061 3099 114C2 094D 05B0 0062;0061 3099 114C2 094D 05B0 0062;0061 3099 114C2 094D 05B0 0062;0061 3099 114C2 094D 05B0 0062;
-0061 3099 093C 0334 114C3 0062;0061 0334 093C 114C3 3099 0062;0061 0334 093C 114C3 3099 0062;0061 0334 093C 114C3 3099 0062;0061 0334 093C 114C3 3099 0062;
-0061 114C3 3099 093C 0334 0062;0061 0334 114C3 093C 3099 0062;0061 0334 114C3 093C 3099 0062;0061 0334 114C3 093C 3099 0062;0061 0334 114C3 093C 3099 0062;
+0061 3099 093C 16FF0 114C3 0062;0061 16FF0 093C 114C3 3099 0062;0061 16FF0 093C 114C3 3099 0062;0061 16FF0 093C 114C3 3099 0062;0061 16FF0 093C 114C3 3099 0062;
+0061 114C3 3099 093C 16FF0 0062;0061 16FF0 114C3 093C 3099 0062;0061 16FF0 114C3 093C 3099 0062;0061 16FF0 114C3 093C 3099 0062;0061 16FF0 114C3 093C 3099 0062;
0061 05B0 094D 3099 115BF 0062;0061 3099 094D 115BF 05B0 0062;0061 3099 094D 115BF 05B0 0062;0061 3099 094D 115BF 05B0 0062;0061 3099 094D 115BF 05B0 0062;
0061 115BF 05B0 094D 3099 0062;0061 3099 115BF 094D 05B0 0062;0061 3099 115BF 094D 05B0 0062;0061 3099 115BF 094D 05B0 0062;0061 3099 115BF 094D 05B0 0062;
-0061 3099 093C 0334 115C0 0062;0061 0334 093C 115C0 3099 0062;0061 0334 093C 115C0 3099 0062;0061 0334 093C 115C0 3099 0062;0061 0334 093C 115C0 3099 0062;
-0061 115C0 3099 093C 0334 0062;0061 0334 115C0 093C 3099 0062;0061 0334 115C0 093C 3099 0062;0061 0334 115C0 093C 3099 0062;0061 0334 115C0 093C 3099 0062;
+0061 3099 093C 16FF0 115C0 0062;0061 16FF0 093C 115C0 3099 0062;0061 16FF0 093C 115C0 3099 0062;0061 16FF0 093C 115C0 3099 0062;0061 16FF0 093C 115C0 3099 0062;
+0061 115C0 3099 093C 16FF0 0062;0061 16FF0 115C0 093C 3099 0062;0061 16FF0 115C0 093C 3099 0062;0061 16FF0 115C0 093C 3099 0062;0061 16FF0 115C0 093C 3099 0062;
0061 05B0 094D 3099 1163F 0062;0061 3099 094D 1163F 05B0 0062;0061 3099 094D 1163F 05B0 0062;0061 3099 094D 1163F 05B0 0062;0061 3099 094D 1163F 05B0 0062;
0061 1163F 05B0 094D 3099 0062;0061 3099 1163F 094D 05B0 0062;0061 3099 1163F 094D 05B0 0062;0061 3099 1163F 094D 05B0 0062;0061 3099 1163F 094D 05B0 0062;
0061 05B0 094D 3099 116B6 0062;0061 3099 094D 116B6 05B0 0062;0061 3099 094D 116B6 05B0 0062;0061 3099 094D 116B6 05B0 0062;0061 3099 094D 116B6 05B0 0062;
0061 116B6 05B0 094D 3099 0062;0061 3099 116B6 094D 05B0 0062;0061 3099 116B6 094D 05B0 0062;0061 3099 116B6 094D 05B0 0062;0061 3099 116B6 094D 05B0 0062;
-0061 3099 093C 0334 116B7 0062;0061 0334 093C 116B7 3099 0062;0061 0334 093C 116B7 3099 0062;0061 0334 093C 116B7 3099 0062;0061 0334 093C 116B7 3099 0062;
-0061 116B7 3099 093C 0334 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;0061 0334 116B7 093C 3099 0062;
+0061 3099 093C 16FF0 116B7 0062;0061 16FF0 093C 116B7 3099 0062;0061 16FF0 093C 116B7 3099 0062;0061 16FF0 093C 116B7 3099 0062;0061 16FF0 093C 116B7 3099 0062;
+0061 116B7 3099 093C 16FF0 0062;0061 16FF0 116B7 093C 3099 0062;0061 16FF0 116B7 093C 3099 0062;0061 16FF0 116B7 093C 3099 0062;0061 16FF0 116B7 093C 3099 0062;
0061 05B0 094D 3099 1172B 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;0061 3099 094D 1172B 05B0 0062;
0061 1172B 05B0 094D 3099 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;0061 3099 1172B 094D 05B0 0062;
0061 05B0 094D 3099 11839 0062;0061 3099 094D 11839 05B0 0062;0061 3099 094D 11839 05B0 0062;0061 3099 094D 11839 05B0 0062;0061 3099 094D 11839 05B0 0062;
0061 11839 05B0 094D 3099 0062;0061 3099 11839 094D 05B0 0062;0061 3099 11839 094D 05B0 0062;0061 3099 11839 094D 05B0 0062;0061 3099 11839 094D 05B0 0062;
-0061 3099 093C 0334 1183A 0062;0061 0334 093C 1183A 3099 0062;0061 0334 093C 1183A 3099 0062;0061 0334 093C 1183A 3099 0062;0061 0334 093C 1183A 3099 0062;
-0061 1183A 3099 093C 0334 0062;0061 0334 1183A 093C 3099 0062;0061 0334 1183A 093C 3099 0062;0061 0334 1183A 093C 3099 0062;0061 0334 1183A 093C 3099 0062;
+0061 3099 093C 16FF0 1183A 0062;0061 16FF0 093C 1183A 3099 0062;0061 16FF0 093C 1183A 3099 0062;0061 16FF0 093C 1183A 3099 0062;0061 16FF0 093C 1183A 3099 0062;
+0061 1183A 3099 093C 16FF0 0062;0061 16FF0 1183A 093C 3099 0062;0061 16FF0 1183A 093C 3099 0062;0061 16FF0 1183A 093C 3099 0062;0061 16FF0 1183A 093C 3099 0062;
+0061 05B0 094D 3099 1193D 0062;0061 3099 094D 1193D 05B0 0062;0061 3099 094D 1193D 05B0 0062;0061 3099 094D 1193D 05B0 0062;0061 3099 094D 1193D 05B0 0062;
+0061 1193D 05B0 094D 3099 0062;0061 3099 1193D 094D 05B0 0062;0061 3099 1193D 094D 05B0 0062;0061 3099 1193D 094D 05B0 0062;0061 3099 1193D 094D 05B0 0062;
+0061 05B0 094D 3099 1193E 0062;0061 3099 094D 1193E 05B0 0062;0061 3099 094D 1193E 05B0 0062;0061 3099 094D 1193E 05B0 0062;0061 3099 094D 1193E 05B0 0062;
+0061 1193E 05B0 094D 3099 0062;0061 3099 1193E 094D 05B0 0062;0061 3099 1193E 094D 05B0 0062;0061 3099 1193E 094D 05B0 0062;0061 3099 1193E 094D 05B0 0062;
+0061 3099 093C 16FF0 11943 0062;0061 16FF0 093C 11943 3099 0062;0061 16FF0 093C 11943 3099 0062;0061 16FF0 093C 11943 3099 0062;0061 16FF0 093C 11943 3099 0062;
+0061 11943 3099 093C 16FF0 0062;0061 16FF0 11943 093C 3099 0062;0061 16FF0 11943 093C 3099 0062;0061 16FF0 11943 093C 3099 0062;0061 16FF0 11943 093C 3099 0062;
0061 05B0 094D 3099 119E0 0062;0061 3099 094D 119E0 05B0 0062;0061 3099 094D 119E0 05B0 0062;0061 3099 094D 119E0 05B0 0062;0061 3099 094D 119E0 05B0 0062;
0061 119E0 05B0 094D 3099 0062;0061 3099 119E0 094D 05B0 0062;0061 3099 119E0 094D 05B0 0062;0061 3099 119E0 094D 05B0 0062;0061 3099 119E0 094D 05B0 0062;
0061 05B0 094D 3099 11A34 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;0061 3099 094D 11A34 05B0 0062;
@@ -18467,24 +18495,24 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 11A99 05B0 094D 3099 0062;0061 3099 11A99 094D 05B0 0062;0061 3099 11A99 094D 05B0 0062;0061 3099 11A99 094D 05B0 0062;0061 3099 11A99 094D 05B0 0062;
0061 05B0 094D 3099 11C3F 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;0061 3099 094D 11C3F 05B0 0062;
0061 11C3F 05B0 094D 3099 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;0061 3099 11C3F 094D 05B0 0062;
-0061 3099 093C 0334 11D42 0062;0061 0334 093C 11D42 3099 0062;0061 0334 093C 11D42 3099 0062;0061 0334 093C 11D42 3099 0062;0061 0334 093C 11D42 3099 0062;
-0061 11D42 3099 093C 0334 0062;0061 0334 11D42 093C 3099 0062;0061 0334 11D42 093C 3099 0062;0061 0334 11D42 093C 3099 0062;0061 0334 11D42 093C 3099 0062;
+0061 3099 093C 16FF0 11D42 0062;0061 16FF0 093C 11D42 3099 0062;0061 16FF0 093C 11D42 3099 0062;0061 16FF0 093C 11D42 3099 0062;0061 16FF0 093C 11D42 3099 0062;
+0061 11D42 3099 093C 16FF0 0062;0061 16FF0 11D42 093C 3099 0062;0061 16FF0 11D42 093C 3099 0062;0061 16FF0 11D42 093C 3099 0062;0061 16FF0 11D42 093C 3099 0062;
0061 05B0 094D 3099 11D44 0062;0061 3099 094D 11D44 05B0 0062;0061 3099 094D 11D44 05B0 0062;0061 3099 094D 11D44 05B0 0062;0061 3099 094D 11D44 05B0 0062;
0061 11D44 05B0 094D 3099 0062;0061 3099 11D44 094D 05B0 0062;0061 3099 11D44 094D 05B0 0062;0061 3099 11D44 094D 05B0 0062;0061 3099 11D44 094D 05B0 0062;
0061 05B0 094D 3099 11D45 0062;0061 3099 094D 11D45 05B0 0062;0061 3099 094D 11D45 05B0 0062;0061 3099 094D 11D45 05B0 0062;0061 3099 094D 11D45 05B0 0062;
0061 11D45 05B0 094D 3099 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;0061 3099 11D45 094D 05B0 0062;
0061 05B0 094D 3099 11D97 0062;0061 3099 094D 11D97 05B0 0062;0061 3099 094D 11D97 05B0 0062;0061 3099 094D 11D97 05B0 0062;0061 3099 094D 11D97 05B0 0062;
0061 11D97 05B0 094D 3099 0062;0061 3099 11D97 094D 05B0 0062;0061 3099 11D97 094D 05B0 0062;0061 3099 11D97 094D 05B0 0062;0061 3099 11D97 094D 05B0 0062;
-0061 093C 0334 16AF0 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;0061 0334 16AF0 093C 0062;
-0061 16AF0 093C 0334 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;0061 16AF0 0334 093C 0062;
-0061 093C 0334 16AF1 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;0061 0334 16AF1 093C 0062;
-0061 16AF1 093C 0334 0062;0061 16AF1 0334 093C 0062;0061 16AF1 0334 093C 0062;0061 16AF1 0334 093C 0062;0061 16AF1 0334 093C 0062;
-0061 093C 0334 16AF2 0062;0061 0334 16AF2 093C 0062;0061 0334 16AF2 093C 0062;0061 0334 16AF2 093C 0062;0061 0334 16AF2 093C 0062;
-0061 16AF2 093C 0334 0062;0061 16AF2 0334 093C 0062;0061 16AF2 0334 093C 0062;0061 16AF2 0334 093C 0062;0061 16AF2 0334 093C 0062;
-0061 093C 0334 16AF3 0062;0061 0334 16AF3 093C 0062;0061 0334 16AF3 093C 0062;0061 0334 16AF3 093C 0062;0061 0334 16AF3 093C 0062;
-0061 16AF3 093C 0334 0062;0061 16AF3 0334 093C 0062;0061 16AF3 0334 093C 0062;0061 16AF3 0334 093C 0062;0061 16AF3 0334 093C 0062;
-0061 093C 0334 16AF4 0062;0061 0334 16AF4 093C 0062;0061 0334 16AF4 093C 0062;0061 0334 16AF4 093C 0062;0061 0334 16AF4 093C 0062;
-0061 16AF4 093C 0334 0062;0061 16AF4 0334 093C 0062;0061 16AF4 0334 093C 0062;0061 16AF4 0334 093C 0062;0061 16AF4 0334 093C 0062;
+0061 16FF0 0334 16AF0 0062;0061 0334 16AF0 16FF0 0062;0061 0334 16AF0 16FF0 0062;0061 0334 16AF0 16FF0 0062;0061 0334 16AF0 16FF0 0062;
+0061 16AF0 16FF0 0334 0062;0061 16AF0 0334 16FF0 0062;0061 16AF0 0334 16FF0 0062;0061 16AF0 0334 16FF0 0062;0061 16AF0 0334 16FF0 0062;
+0061 16FF0 0334 16AF1 0062;0061 0334 16AF1 16FF0 0062;0061 0334 16AF1 16FF0 0062;0061 0334 16AF1 16FF0 0062;0061 0334 16AF1 16FF0 0062;
+0061 16AF1 16FF0 0334 0062;0061 16AF1 0334 16FF0 0062;0061 16AF1 0334 16FF0 0062;0061 16AF1 0334 16FF0 0062;0061 16AF1 0334 16FF0 0062;
+0061 16FF0 0334 16AF2 0062;0061 0334 16AF2 16FF0 0062;0061 0334 16AF2 16FF0 0062;0061 0334 16AF2 16FF0 0062;0061 0334 16AF2 16FF0 0062;
+0061 16AF2 16FF0 0334 0062;0061 16AF2 0334 16FF0 0062;0061 16AF2 0334 16FF0 0062;0061 16AF2 0334 16FF0 0062;0061 16AF2 0334 16FF0 0062;
+0061 16FF0 0334 16AF3 0062;0061 0334 16AF3 16FF0 0062;0061 0334 16AF3 16FF0 0062;0061 0334 16AF3 16FF0 0062;0061 0334 16AF3 16FF0 0062;
+0061 16AF3 16FF0 0334 0062;0061 16AF3 0334 16FF0 0062;0061 16AF3 0334 16FF0 0062;0061 16AF3 0334 16FF0 0062;0061 16AF3 0334 16FF0 0062;
+0061 16FF0 0334 16AF4 0062;0061 0334 16AF4 16FF0 0062;0061 0334 16AF4 16FF0 0062;0061 0334 16AF4 16FF0 0062;0061 0334 16AF4 16FF0 0062;
+0061 16AF4 16FF0 0334 0062;0061 16AF4 0334 16FF0 0062;0061 16AF4 0334 16FF0 0062;0061 16AF4 0334 16FF0 0062;0061 16AF4 0334 16FF0 0062;
0061 0315 0300 05AE 16B30 0062;00E0 05AE 16B30 0315 0062;0061 05AE 0300 16B30 0315 0062;00E0 05AE 16B30 0315 0062;0061 05AE 0300 16B30 0315 0062;
0061 16B30 0315 0300 05AE 0062;0061 05AE 16B30 0300 0315 0062;0061 05AE 16B30 0300 0315 0062;0061 05AE 16B30 0300 0315 0062;0061 05AE 16B30 0300 0315 0062;
0061 0315 0300 05AE 16B31 0062;00E0 05AE 16B31 0315 0062;0061 05AE 0300 16B31 0315 0062;00E0 05AE 16B31 0315 0062;0061 05AE 0300 16B31 0315 0062;
@@ -18499,18 +18527,22 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 16B35 0315 0300 05AE 0062;0061 05AE 16B35 0300 0315 0062;0061 05AE 16B35 0300 0315 0062;0061 05AE 16B35 0300 0315 0062;0061 05AE 16B35 0300 0315 0062;
0061 0315 0300 05AE 16B36 0062;00E0 05AE 16B36 0315 0062;0061 05AE 0300 16B36 0315 0062;00E0 05AE 16B36 0315 0062;0061 05AE 0300 16B36 0315 0062;
0061 16B36 0315 0300 05AE 0062;0061 05AE 16B36 0300 0315 0062;0061 05AE 16B36 0300 0315 0062;0061 05AE 16B36 0300 0315 0062;0061 05AE 16B36 0300 0315 0062;
-0061 093C 0334 1BC9E 0062;0061 0334 1BC9E 093C 0062;0061 0334 1BC9E 093C 0062;0061 0334 1BC9E 093C 0062;0061 0334 1BC9E 093C 0062;
-0061 1BC9E 093C 0334 0062;0061 1BC9E 0334 093C 0062;0061 1BC9E 0334 093C 0062;0061 1BC9E 0334 093C 0062;0061 1BC9E 0334 093C 0062;
+0061 093C 16FF0 0334 16FF0 0062;0061 0334 16FF0 16FF0 093C 0062;0061 0334 16FF0 16FF0 093C 0062;0061 0334 16FF0 16FF0 093C 0062;0061 0334 16FF0 16FF0 093C 0062;
+0061 16FF0 093C 16FF0 0334 0062;0061 0334 16FF0 16FF0 093C 0062;0061 0334 16FF0 16FF0 093C 0062;0061 0334 16FF0 16FF0 093C 0062;0061 0334 16FF0 16FF0 093C 0062;
+0061 093C 16FF0 0334 16FF1 0062;0061 0334 16FF0 16FF1 093C 0062;0061 0334 16FF0 16FF1 093C 0062;0061 0334 16FF0 16FF1 093C 0062;0061 0334 16FF0 16FF1 093C 0062;
+0061 16FF1 093C 16FF0 0334 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;
+0061 16FF0 0334 1BC9E 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062;
+0061 1BC9E 16FF0 0334 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062;
0061 302A 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;
0061 1D165 302A 031B 1DCE 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;
0061 302A 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;
0061 1D166 302A 031B 1DCE 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;
-0061 093C 0334 1D167 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;
-0061 1D167 093C 0334 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;
-0061 093C 0334 1D168 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;
-0061 1D168 093C 0334 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;
-0061 093C 0334 1D169 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;
-0061 1D169 093C 0334 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;
+0061 16FF0 0334 1D167 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062;
+0061 1D167 16FF0 0334 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062;
+0061 16FF0 0334 1D168 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062;
+0061 1D168 16FF0 0334 0062;0061 1D168 0334 16FF0 0062;0061 1D168 0334 16FF0 0062;0061 1D168 0334 16FF0 0062;0061 1D168 0334 16FF0 0062;
+0061 16FF0 0334 1D169 0062;0061 0334 1D169 16FF0 0062;0061 0334 1D169 16FF0 0062;0061 0334 1D169 16FF0 0062;0061 0334 1D169 16FF0 0062;
+0061 1D169 16FF0 0334 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062;
0061 05AE 1D16D 302E 1D16D 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;
0061 1D16D 05AE 1D16D 302E 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;
0061 302A 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;
@@ -18691,8 +18723,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1E948 0315 0300 05AE 0062;0061 05AE 1E948 0300 0315 0062;0061 05AE 1E948 0300 0315 0062;0061 05AE 1E948 0300 0315 0062;0061 05AE 1E948 0300 0315 0062;
0061 0315 0300 05AE 1E949 0062;00E0 05AE 1E949 0315 0062;0061 05AE 0300 1E949 0315 0062;00E0 05AE 1E949 0315 0062;0061 05AE 0300 1E949 0315 0062;
0061 1E949 0315 0300 05AE 0062;0061 05AE 1E949 0300 0315 0062;0061 05AE 1E949 0300 0315 0062;0061 05AE 1E949 0300 0315 0062;0061 05AE 1E949 0300 0315 0062;
-0061 3099 093C 0334 1E94A 0062;0061 0334 093C 1E94A 3099 0062;0061 0334 093C 1E94A 3099 0062;0061 0334 093C 1E94A 3099 0062;0061 0334 093C 1E94A 3099 0062;
-0061 1E94A 3099 093C 0334 0062;0061 0334 1E94A 093C 3099 0062;0061 0334 1E94A 093C 3099 0062;0061 0334 1E94A 093C 3099 0062;0061 0334 1E94A 093C 3099 0062;
+0061 3099 093C 16FF0 1E94A 0062;0061 16FF0 093C 1E94A 3099 0062;0061 16FF0 093C 1E94A 3099 0062;0061 16FF0 093C 1E94A 3099 0062;0061 16FF0 093C 1E94A 3099 0062;
+0061 1E94A 3099 093C 16FF0 0062;0061 16FF0 1E94A 093C 3099 0062;0061 16FF0 1E94A 093C 3099 0062;0061 16FF0 1E94A 093C 3099 0062;0061 16FF0 1E94A 093C 3099 0062;
#
@Part3 # PRI #29 Test
#
@@ -18871,5 +18903,6 @@ D750 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5;D750 0334 11B5;1112 1173 0334
114B9 0334 114BD;114B9 0334 114BD;114B9 0334 114BD;114B9 0334 114BD;114B9 0334 114BD;
115B8 0334 115AF;115B8 0334 115AF;115B8 0334 115AF;115B8 0334 115AF;115B8 0334 115AF;
115B9 0334 115AF;115B9 0334 115AF;115B9 0334 115AF;115B9 0334 115AF;115B9 0334 115AF;
+11935 0334 11930;11935 0334 11930;11935 0334 11930;11935 0334 11930;11935 0334 11930;
#
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt b/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
index 1c04aacf975..2a1a5a1d6b1 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
@@ -1,5 +1,5 @@
-# SpecialCasing-12.1.0.txt
-# Date: 2019-03-10, 10:53:28 GMT
+# SpecialCasing-13.0.0.txt
+# Date: 2019-09-08, 23:31:24 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt b/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
index 264fa88732f..9438712772c 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
@@ -1,10 +1,10 @@
# UCA_Rules_SHORT.txt
-# Date: 2019-04-01, 20:17:28 GMT
-# © 2019 Unicode®, Inc.
+# Date: 2020-02-12, 17:50:33 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
-# UCA Version: 12.1.0
-# UCD Version: 12.1.0
+# UCA Version: 13.0.0
+# UCD Version: 13.0.0
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Data_Files
@@ -340,6 +340,7 @@
= '\U00013436'
= '\U00013437'
= '\U00013438'
+ = 𖿤
= '\U0001BCA0'
= '\U0001BCA1'
= '\U0001BCA2'
@@ -904,6 +905,7 @@
= Ò‡
= Ý
= Ý…
+ = à­•
= ់
= ៌
= áŸ
@@ -1157,7 +1159,9 @@
<<< ‎ﹾ‎
<< Ù“
= ૼ
+ = ðº¬
<< Ù”
+ = ðº«
<< Ù•
<< ÙŸ
<< Ù–
@@ -1247,6 +1251,7 @@
= ð‘—€
= ð‘š·
= ð‘ º
+ = 𑥃
= 𑨳
= 𑵂
<< ऀ
@@ -1259,6 +1264,7 @@
= à°
= à²
= à´
+ = à¶
= ᬀ
= á¬
= ꣅ
@@ -1267,11 +1273,13 @@
= ð‘‚€
= ð‘„€
= 𑆀
+ = ð‘‡
= ð‘Œ
= 𑑃
= ð‘’¿
= ð‘–¼
= 𑙀
+ = 𑤼
= 𑨵
= 𑨶
= 𑨷
@@ -1315,6 +1323,7 @@
= 𑘽
= ð‘š«
= ð‘ ·
+ = 𑤻
= 𑧞
= 𑨸
= 𑪖
@@ -1432,6 +1441,8 @@
<< 〭
<< 〮
<< 〯
+ << ð–¿°
+ << ð–¿±
<< âƒ
<< ⃑
<< ⃒
@@ -1448,7 +1459,8 @@
<< ⃨
<< ⃩
<< ð‡½
-# TODO: There are several problems with this file. See http://unicode.org/cldr/trac/ticket/6745
+# TODO: There are several problems with this file.
+# See https://unicode-org.atlassian.net/browse/CLDR-6745
&'\u202F' # TODO: reset to the last space, not [last regular]
# TODO: do not tailor this: < '\uFFFE'
< '\u0009'
@@ -1516,6 +1528,7 @@
< ã‚ 
< ・
<<< ï½¥
+ < ‎ðº­â€Ž
< ','
<<< ,
<<< ï¹
@@ -1711,6 +1724,7 @@
< ð‘™‚
< 𑜼
< 𑜽
+ < 𑥄
< ð‘±
< 𑱂
< ð–©®
@@ -1758,6 +1772,7 @@
< 𑇟
< ð‘Š©
< 𑜾
+ < 𑥆
< ð‘»·
< 𑻸
< â•
@@ -2138,6 +2153,7 @@
<<< &
<<< ï¹ 
< âŠ
+ < â¹’
< '#'
<<< #
<<< ﹟
@@ -2367,6 +2383,7 @@
< 𑈼
< 𑈽
< ð‘‘
+ < ð‘‘š
< ð‘‘Ž
< ð‘‘
< ð‘‘›
@@ -2395,6 +2412,7 @@
< ð‘——
< 𑙃
< ð‘ »
+ < ð‘¥…
< 𑧢
< ð‘¿¿
< ð–¬·
@@ -2456,6 +2474,8 @@
< Ë“
< Ë”
< Ë•
+ < ê­ª
+ < ê­«
< Ë–
< Ë—
< Ëž
@@ -2707,6 +2727,7 @@
< ©
< 🄯
< ®
+ < 🆭
< â„„
< ℈
< â„”
@@ -3666,6 +3687,208 @@
< â—½
< â—¾
< â—¿
+ < 🬀
+ < ðŸ¬
+ < 🬂
+ < 🬃
+ < 🬄
+ < 🬅
+ < 🬆
+ < 🬇
+ < 🬈
+ < 🬉
+ < 🬊
+ < 🬋
+ < 🬌
+ < ðŸ¬
+ < 🬎
+ < ðŸ¬
+ < ðŸ¬
+ < 🬑
+ < 🬒
+ < 🬓
+ < 🬔
+ < 🬕
+ < 🬖
+ < 🬗
+ < 🬘
+ < 🬙
+ < 🬚
+ < 🬛
+ < 🬜
+ < ðŸ¬
+ < 🬞
+ < 🬟
+ < 🬠
+ < 🬡
+ < 🬢
+ < 🬣
+ < 🬤
+ < 🬥
+ < 🬦
+ < 🬧
+ < 🬨
+ < 🬩
+ < 🬪
+ < 🬫
+ < 🬬
+ < 🬭
+ < 🬮
+ < 🬯
+ < 🬰
+ < 🬱
+ < 🬲
+ < 🬳
+ < 🬴
+ < 🬵
+ < 🬶
+ < 🬷
+ < 🬸
+ < 🬹
+ < 🬺
+ < 🬻
+ < 🬼
+ < 🬽
+ < 🬾
+ < 🬿
+ < 🭀
+ < ðŸ­
+ < 🭂
+ < 🭃
+ < 🭄
+ < 🭅
+ < 🭆
+ < 🭇
+ < 🭈
+ < 🭉
+ < 🭊
+ < 🭋
+ < 🭌
+ < ðŸ­
+ < 🭎
+ < ðŸ­
+ < ðŸ­
+ < 🭑
+ < 🭒
+ < 🭓
+ < 🭔
+ < 🭕
+ < 🭖
+ < 🭗
+ < 🭘
+ < 🭙
+ < 🭚
+ < 🭛
+ < 🭜
+ < ðŸ­
+ < 🭞
+ < 🭟
+ < 🭠
+ < 🭡
+ < 🭢
+ < 🭣
+ < 🭤
+ < 🭥
+ < 🭦
+ < 🭧
+ < 🭨
+ < 🭩
+ < 🭪
+ < 🭫
+ < 🭬
+ < 🭭
+ < 🭮
+ < 🭯
+ < 🭰
+ < 🭱
+ < 🭲
+ < 🭳
+ < 🭴
+ < 🭵
+ < 🭶
+ < 🭷
+ < 🭸
+ < 🭹
+ < 🭺
+ < 🭻
+ < 🭼
+ < 🭽
+ < 🭾
+ < 🭿
+ < 🮀
+ < ðŸ®
+ < 🮂
+ < 🮃
+ < 🮄
+ < 🮅
+ < 🮆
+ < 🮇
+ < 🮈
+ < 🮉
+ < 🮊
+ < 🮋
+ < 🮌
+ < ðŸ®
+ < 🮎
+ < ðŸ®
+ < ðŸ®
+ < 🮑
+ < 🮒
+ < 🮔
+ < 🮕
+ < 🮖
+ < 🮗
+ < 🮘
+ < 🮙
+ < 🮚
+ < 🮛
+ < 🮜
+ < ðŸ®
+ < 🮞
+ < 🮟
+ < 🮠
+ < 🮡
+ < 🮢
+ < 🮣
+ < 🮤
+ < 🮥
+ < 🮦
+ < 🮧
+ < 🮨
+ < 🮩
+ < 🮪
+ < 🮫
+ < 🮬
+ < 🮭
+ < 🮮
+ < 🮯
+ < 🮰
+ < 🮱
+ < 🮲
+ < 🮳
+ < 🮴
+ < 🮵
+ < 🮶
+ < 🮷
+ < 🮸
+ < 🮹
+ < 🮺
+ < 🮻
+ < 🮼
+ < 🮽
+ < 🮾
+ < 🮿
+ < 🯀
+ < ðŸ¯
+ < 🯂
+ < 🯃
+ < 🯄
+ < 🯅
+ < 🯆
+ < 🯇
+ < 🯈
+ < 🯉
+ < 🯊
< ☀
< â˜
< ☂
@@ -3964,6 +4187,8 @@
< ✞
< ✟
< ✠
+ < â¹
+ < ⹑
< ✡
< ✢
< ✣
@@ -4758,6 +4983,7 @@
< ⮓
< â®”
< ⮕
+ < â®—
< ⮘
< â®™
< ⮚
@@ -5385,6 +5611,7 @@
< ð†™
< ð†š
< ð†›
+ < ð†œ
< ð† 
< ð‡
< ð‡‘
@@ -6262,6 +6489,12 @@
< 🩫
< 🩬
< 🩭
+ < ðŸ„
+ < 🄎
+ < ðŸ„
+ < 🅭
+ < 🅮
+ < 🅯
< 🉠
< 🉡
< 🉢
@@ -7048,6 +7281,7 @@
< 🤉
< 🤊
< 🤋
+ < 🤌
< ðŸ¤
< 🤎
< ðŸ¤
@@ -7149,10 +7383,13 @@
< 🥯
< 🥰
< 🥱
+ < 🥲
< 🥳
< 🥴
< 🥵
< 🥶
+ < 🥷
+ < 🥸
< 🥺
< 🥻
< 🥼
@@ -7194,12 +7431,17 @@
< 🦠
< 🦡
< 🦢
+ < 🦣
+ < 🦤
< 🦥
< 🦦
< 🦧
< 🦨
< 🦩
< 🦪
+ < 🦫
+ < 🦬
+ < 🦭
< 🦮
< 🦯
< 🦰
@@ -7229,6 +7471,7 @@
< 🧈
< 🧉
< 🧊
+ < 🧋
< ðŸ§
< 🧎
< ðŸ§
@@ -7284,18 +7527,59 @@
< 🩱
< 🩲
< 🩳
+ < 🩴
< 🩸
< 🩹
< 🩺
< 🪀
< ðŸª
< 🪂
+ < 🪃
+ < 🪄
+ < 🪅
+ < 🪆
< ðŸª
< 🪑
< 🪒
< 🪓
< 🪔
< 🪕
+ < 🪖
+ < 🪗
+ < 🪘
+ < 🪙
+ < 🪚
+ < 🪛
+ < 🪜
+ < ðŸª
+ < 🪞
+ < 🪟
+ < 🪠
+ < 🪡
+ < 🪢
+ < 🪣
+ < 🪤
+ < 🪥
+ < 🪦
+ < 🪧
+ < 🪨
+ < 🪰
+ < 🪱
+ < 🪲
+ < 🪳
+ < 🪴
+ < 🪵
+ < 🪶
+ < 🫀
+ < ðŸ«
+ < 🫂
+ < ðŸ«
+ < 🫑
+ < 🫒
+ < 🫓
+ < 🫔
+ < 🫕
+ < 🫖
< 😀
< ðŸ˜
< 😂
@@ -7510,6 +7794,8 @@
< 🛓
< 🛔
< 🛕
+ < 🛖
+ < 🛗
< 🛠
< 🛡
< 🛢
@@ -7534,6 +7820,8 @@
< 🛸
< 🛹
< 🛺
+ < 🛻
+ < 🛼
< 🜀
< ðŸœ
< 🜂
@@ -7899,6 +8187,8 @@
< 🢫
< 🢬
< 🢭
+ < 🢰
+ < 🢱
< ð €
< ð 
< ð ‚
@@ -8841,6 +9131,9 @@
< ‎ð½’‎
< ‎ð½“‎
< ‎ð½”‎
+ < ‎ð¿‰â€Ž
+ < ‎ð¿Šâ€Ž
+ < ‎ð¿‹â€Ž
< 𑜺
< 𑜻
< ð‘›
@@ -9139,6 +9432,7 @@
= 𑛀
= 𑜰
= ð‘£ 
+ = ð‘¥
= ð‘±
= ð‘µ
= 𑶠
@@ -9159,6 +9453,7 @@
= ðŸ¢
= ðŸ¬
= ðŸ¶
+ = 🯰
<<< ⓪
= â“¿
= 🄋
@@ -9235,6 +9530,7 @@
= ð¹ 
= ‎ð¼â€Ž
= ‎ð½‘‎
+ = ‎ð¿…‎
= ð‘’
= ð‘§
= 𑃱
@@ -9248,6 +9544,7 @@
= ð‘›
= 𑜱
= 𑣡
+ = 𑥑
= 𑱑
= 𑱚
= 𑵑
@@ -9317,6 +9614,7 @@
= ðŸ£
= ðŸ­
= ðŸ·
+ = 🯱
<<< â‘ 
= ⓵
= â¶
@@ -9422,6 +9720,7 @@
= ð´²
= ð¹¡
= ‎ð¼žâ€Ž
+ = ‎ð¿†â€Ž
= ð‘“
= ð‘¨
= 𑃲
@@ -9435,6 +9734,7 @@
= ð‘›‚
= 𑜲
= ð‘£¢
+ = ð‘¥’
= 𑱒
= 𑱛
= 𑵒
@@ -9490,6 +9790,7 @@
= ðŸ¤
= ðŸ®
= ðŸ¸
+ = 🯲
<<< â‘¡
= ⓶
= â·
@@ -9573,6 +9874,7 @@
= ð´³
= ð¹¢
= ‎ð¼Ÿâ€Ž
+ = ‎ð¿‡â€Ž
= ð‘”
= ð‘©
= 𑃳
@@ -9586,6 +9888,7 @@
= 𑛃
= 𑜳
= ð‘££
+ = 𑥓
= 𑱓
= 𑱜
= 𑵓
@@ -9632,6 +9935,7 @@
= ðŸ¥
= ðŸ¯
= ðŸ¹
+ = 🯳
<<< â‘¢
= â“·
= â¸
@@ -9709,6 +10013,7 @@
= ð´´
= ð¹£
= ‎ð¼ â€Ž
+ = ‎ð¿ˆâ€Ž
= ð‘•
= ð‘ª
= 𑃴
@@ -9722,6 +10027,7 @@
= ð‘›„
= 𑜴
= 𑣤
+ = ð‘¥”
= 𑱔
= ð‘±
= 𑵔
@@ -9767,6 +10073,7 @@
= ðŸ¦
= ðŸ°
= ðŸº
+ = 🯴
<<< â‘£
= ⓸
= â¹
@@ -9858,6 +10165,7 @@
= ð‘›…
= 𑜵
= ð‘£¥
+ = 𑥕
= 𑱕
= 𑱞
= 𑵕
@@ -9900,6 +10208,7 @@
= ðŸ§
= ðŸ±
= ðŸ»
+ = 🯵
<<< ⑤
= ⓹
= âº
@@ -9972,6 +10281,7 @@
= 𑛆
= 𑜶
= 𑣦
+ = ð‘¥–
= 𑱖
= 𑱟
= 𑵖
@@ -10008,6 +10318,7 @@
= ðŸ¨
= ðŸ²
= ðŸ¼
+ = 🯶
<<< â‘¥
= ⓺
= â»
@@ -10076,6 +10387,7 @@
= 𑛇
= 𑜷
= 𑣧
+ = ð‘¥—
= 𑱗
= 𑱠
= 𑵗
@@ -10113,6 +10425,7 @@
= ðŸ©
= ðŸ³
= ðŸ½
+ = 🯷
<<< ⑦
= â“»
= â¼
@@ -10182,6 +10495,7 @@
= 𑛈
= 𑜸
= 𑣨
+ = 𑥘
= 𑱘
= 𑱡
= 𑵘
@@ -10218,6 +10532,7 @@
= ðŸª
= ðŸ´
= ðŸ¾
+ = 🯸
<<< ⑧
= ⓼
= â½
@@ -10286,6 +10601,7 @@
= 𑛉
= 𑜹
= 𑣩
+ = ð‘¥™
= 𑱙
= 𑱢
= 𑵙
@@ -10324,6 +10640,7 @@
= ðŸ«
= ðŸµ
= ðŸ¿
+ = 🯹
<<< ⑨
= ⓽
= â¾
@@ -10622,6 +10939,8 @@
<<< ê¹
< á´…
< á´†
+ < ꟈ
+ <<< Ꟈ
< áµ­
< á¶
< É–
@@ -10900,6 +11219,8 @@
<<< Ⱨ
< ⱶ
<<< â±µ
+ < ꟶ
+ <<< Ꟶ
< ꜧ
<<< Ꜧ
<<< ꭜ
@@ -11646,6 +11967,7 @@
< ꭌ
< Ê
<<< ʶ
+ < ê­¨
< êµ
< ê¶
< ê
@@ -11707,6 +12029,8 @@
<<< ſt / t
<<< êž„
< ꜱ
+ < ꟊ
+ <<< Ꟊ
< áµ´
< ᶊ
< Ê‚
@@ -11944,7 +12268,8 @@
<<< ᶺ
< w
<<< ï½—
- <<< á·±
+ <<< ᪿ
+ = á·±
<<< ð°
= ð‘¤
= ð’˜
@@ -11990,6 +12315,8 @@
< â±³
<<< â±²
< Ê
+ <<< á«€
+ <<< ê­©
< x
<<< x
<<< ͯ
@@ -13786,6 +14113,7 @@
< ‎ݕ‎
< ‎ࢠ‎
< ‎ݖ‎
+ < ‎ࢾ‎
< ‎ࢡ‎
< ‎ࢶ‎
< ‎ࢷ‎
@@ -13876,6 +14204,8 @@
<<< ‎ﭣ‎
<<< ‎ﭢ‎
< ‎ࢸ‎
+ < ‎ࢿ‎
+ < ‎ࣀ‎
< ‎ج‎
<<< ‎𞸂‎
= ‎𞸢‎
@@ -13924,6 +14254,9 @@
<<< ‎ﭿ‎
<<< ‎ﭾ‎
< ‎ࢢ‎
+ < ‎à£â€Ž
+ < ‎ࣅ‎
+ < ‎ࣆ‎
< ‎ح‎
<<< ‎𞸇‎
= ‎𞸧‎
@@ -14286,6 +14619,7 @@
<<< ‎ﳹ‎ / ‎ى‎
<<< ‎ﳺ‎ / ‎ي‎
< ‎ڠ‎
+ < ‎ࣃ‎
< ‎ۼ‎
< ‎Ý‎
< ‎ݞ‎
@@ -14366,6 +14700,7 @@
< ‎ڧ‎
< ‎ࢼ‎
< ‎ڨ‎
+ < ‎ࣄ‎
< ‎ࢥ‎
< ‎ك‎
<<< ‎𞸊‎
@@ -14438,6 +14773,7 @@
< ‎ؼ‎
< ‎ݣ‎
< ‎ݤ‎
+ < ‎ࣂ‎
< ‎ل‎
<<< ‎𞸋‎
= ‎𞸫‎
@@ -14491,6 +14827,7 @@
< ‎ڸ‎
< ‎ݪ‎
< ‎ࢦ‎
+ < ‎ࣇ‎
< ‎م‎
<<< ‎𞸌‎
= ‎𞸬‎
@@ -14617,8 +14954,8 @@
< ‎ۃ‎
< ‎ۿ‎
< ‎ە‎
- <<< ‎ﮥ‎ / ٔ
- <<< ‎ﮤ‎ / ٔ
+ <<< ‎ﮥ‎ / ðº«
+ <<< ‎ﮤ‎ / ðº«
< ‎و‎
<<< ‎ۥ‎
<<< ‎ٶ‎ / ‎ء‎
@@ -14722,9 +15059,9 @@
< ‎ࢺ‎
< ‎ے‎
<<< ‎ﮯ‎
- <<< ‎ﮱ‎ / ٔ
+ <<< ‎ﮱ‎ / ðº«
<<< ‎ﮮ‎
- <<< ‎ﮰ‎ / ٔ
+ <<< ‎ﮰ‎ / ðº«
< ‎ݺ‎
< ‎ݻ‎
< ‎Ü‎
@@ -16032,6 +16369,7 @@
< à´±
< à´º
< à´½
+ < à´„
< à´¾
< à´¿
< ീ
@@ -16199,6 +16537,7 @@
< ê „
< ê …
< ê †
+ < ê ¬
< ê ‡
< ê ˆ
< ê ‰
@@ -16450,6 +16789,7 @@
< 𑆺
< 𑆻
< 𑆼
+ < 𑇎
< 𑆽
< 𑆾
< 𑆿
@@ -16724,6 +17064,8 @@
< ð‘³
< ð‘´
< 𑑇
+ < ð‘‘ 
+ < ð‘‘¡
< 𑑈
< ð‘‘Ÿ
< ð‘µ
@@ -16989,6 +17331,62 @@
< ð‘š´
< ð‘šµ
< 𑚶
+ < 𑤀
+ < ð‘¤
+ < 𑤂
+ < 𑤃
+ < 𑤄
+ < 𑤅
+ < 𑤆
+ < 𑤉
+ < 𑤌
+ < ð‘¤
+ < 𑤎
+ < ð‘¤
+ < ð‘¤
+ < 𑤿
+ < 𑤑
+ < 𑤒
+ < 𑤓
+ < 𑤕
+ < 𑤖
+ < 𑤘
+ < 𑤙
+ < 𑤚
+ < 𑤛
+ < 𑤜
+ < ð‘¤
+ < 𑤞
+ < 𑤟
+ < 𑤠
+ < 𑤡
+ < 𑤢
+ < 𑤣
+ < 𑤤
+ < 𑤥
+ < ð‘¥€
+ < 𑤦
+ < ð‘¥
+ < 𑤧
+ < 𑥂
+ < 𑤨
+ < 𑤩
+ < 𑤪
+ < 𑤫
+ < 𑤬
+ < 𑤭
+ < 𑤮
+ < 𑤯
+ < 𑤰
+ < 𑤱
+ < 𑤲
+ < 𑤳
+ < 𑤴
+ < 𑤵
+ < 𑤷
+ < 𑤸
+ < 𑤽
+ < 𑤾
< 𑦠
< 𑦡
< 𑦢
@@ -18650,6 +19048,7 @@
< ð‘„¡
< ð‘„¢
< ð‘„£
+ < ð‘…‡
< 𑄤
< ð‘„¥
< 𑄦
@@ -19119,6 +19518,7 @@
< ꦱ
< ꦲ
< ꦴ
+ <<< ꦵ
< ꦼ
< ꦶ
< ꦷ
@@ -19127,7 +19527,6 @@
< ꦽ
< ꦺ
< ꦻ
- < ꦵ
< ꧀
< ᢀ
< á¢
@@ -23008,6 +23407,7 @@
< ㄯ
< ㄌ
< ã„
+ <<< ㆻ
<< ㆣ
< ã„Ž
<<< ㆶ
@@ -23020,6 +23420,8 @@
< ã„‘
< ã„’
< ㄬ
+ < ㆼ
+ < ㆽ
< ã„“
< ã„”
< ã„•
@@ -23063,6 +23465,8 @@
<< ㆨ
< ã„©
< ã„­
+ < ㆾ
+ < ㆿ
< ꀀ
< ê€
< ꀂ
@@ -24264,6 +24668,7 @@
< ê“­
< ꓪ
< ꓬ
+ < 𑾰
< ê“®
< ꓯ
< ê“°
@@ -26328,6 +26733,71 @@
< ‎ð½‚‎
< ‎ð½ƒâ€Ž
< ‎ð½„‎
+ < ‎ðº€â€Ž
+ < ‎ðºâ€Ž
+ < ‎ðº‚‎
+ < ‎ðºƒâ€Ž
+ < ‎ðº„‎
+ < ‎ðº…‎
+ < ‎ðº†â€Ž
+ < ‎ðº‡â€Ž
+ < ‎ðºˆâ€Ž
+ < ‎ðº‰â€Ž
+ < ‎ðºŠâ€Ž
+ < ‎ðº‹â€Ž
+ < ‎ðºŒâ€Ž
+ < ‎ðºâ€Ž
+ < ‎ðºŽâ€Ž
+ < ‎ðºâ€Ž
+ < ‎ðºâ€Ž
+ < ‎ðº‘‎
+ < ‎ðº’‎
+ < ‎ðº“‎
+ < ‎ðº”‎
+ < ‎ðº•â€Ž
+ < ‎ðº–‎
+ < ‎ðº—‎
+ < ‎ðº˜â€Ž
+ < ‎ðº™â€Ž
+ < ‎ðºšâ€Ž
+ < ‎ðº›â€Ž
+ < ‎ðºœâ€Ž
+ < ‎ðºâ€Ž
+ < ‎ðºžâ€Ž
+ < ‎ðºŸâ€Ž
+ < ‎ðº â€Ž
+ < ‎ðº°â€Ž
+ < ‎ðº¡â€Ž
+ < ‎ðº¢â€Ž
+ < ‎ðº£â€Ž
+ < ‎ðº¤â€Ž
+ < ‎ðº¥â€Ž
+ < ‎ðº¦â€Ž
+ < ‎ðº§â€Ž
+ < ‎ðº¨â€Ž
+ < ‎ðº±â€Ž
+ < ‎ðº©â€Ž
+ < ‎ð¾°â€Ž
+ < ‎ð¾±â€Ž
+ < ‎ð¾²â€Ž
+ < ‎ð¾³â€Ž
+ < ‎ð¾´â€Ž
+ < ‎ð¾µâ€Ž
+ < ‎ð¾¶â€Ž
+ < ‎ð¾·â€Ž
+ < ‎ð¾¸â€Ž
+ < ‎ð¾¹â€Ž
+ < ‎ð¾ºâ€Ž
+ < ‎ð¾»â€Ž
+ < ‎ð¾¼â€Ž
+ < ‎ð¾½â€Ž
+ < ‎ð¾¾â€Ž
+ < ‎ð¾¿â€Ž
+ < ‎ð¿€â€Ž
+ < ‎ð¿â€Ž
+ < ‎ð¿‚‎
+ < ‎ð¿ƒâ€Ž
+ < ‎ð¿„‎
< ðŽ€
< ðŽ
< ðŽ‚
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt b/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
index e65aec52f71..e22f967bbab 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
@@ -2118,6 +2118,16 @@
08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;
08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;
08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;
+08BE;ARABIC LETTER PEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08BF;ARABIC LETTER TEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C0;ARABIC LETTER TTEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C1;ARABIC LETTER TCHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C2;ARABIC LETTER KEHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C3;ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08C4;ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
@@ -2621,6 +2631,7 @@
0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B55;ORIYA SIGN OVERLINE;Mn;0;NSM;;;;;N;;;;;
0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
@@ -2911,6 +2922,7 @@
0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D04;MALAYALAM LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
@@ -3024,6 +3036,7 @@
0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
+0D81;SINHALA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
@@ -6044,6 +6057,8 @@
1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;;
1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;;
1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
+1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;;
+1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;;
1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
@@ -10133,6 +10148,7 @@
2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;;
2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;;
2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;;
2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -10776,6 +10792,9 @@
2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;;
2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;;
2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;
+2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;
+2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -11550,6 +11569,11 @@
31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;;
31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;;
31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;;
+31BB;BOPOMOFO FINAL LETTER G;Lo;0;L;;;;;N;;;;;
+31BC;BOPOMOFO LETTER GW;Lo;0;L;;;;;N;;;;;
+31BD;BOPOMOFO LETTER KW;Lo;0;L;;;;;N;;;;;
+31BE;BOPOMOFO LETTER OE;Lo;0;L;;;;;N;;;;;
+31BF;BOPOMOFO LETTER AH;Lo;0;L;;;;;N;;;;;
31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
@@ -12114,7 +12138,7 @@
33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
-4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DBF;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
@@ -12180,7 +12204,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FFC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -14130,6 +14154,12 @@ A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2
A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;
A7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282;
A7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E;
+A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8;
+A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7
+A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA;
+A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9
+A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6;
+A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
@@ -14183,6 +14213,7 @@ A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+A82C;SYLOTI NAGRI SIGN ALTERNATE HASANTA;Mn;9;NSM;;;;;N;;;;;
A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
@@ -14897,6 +14928,10 @@ AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;;
AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;;
AB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
AB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+AB68;LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+AB69;MODIFIER LETTER SMALL TURNED W;Lm;0;L;<super> 028D;;;;N;;;;;
+AB6A;MODIFIER LETTER LEFT TACK;Sk;0;ON;;;;;N;;;;;
+AB6B;MODIFIER LETTER RIGHT TACK;Sk;0;ON;;;;;N;;;;;
AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0
AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1
AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2
@@ -17086,6 +17121,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
+1019C;ASCIA SYMBOL;So;0;ON;;;;;N;;;;;
101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;;
101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
@@ -19057,6 +19093,53 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;
10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;
10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;
+10E80;YEZIDI LETTER ELIF;Lo;0;R;;;;;N;;;;;
+10E81;YEZIDI LETTER BE;Lo;0;R;;;;;N;;;;;
+10E82;YEZIDI LETTER PE;Lo;0;R;;;;;N;;;;;
+10E83;YEZIDI LETTER PHE;Lo;0;R;;;;;N;;;;;
+10E84;YEZIDI LETTER THE;Lo;0;R;;;;;N;;;;;
+10E85;YEZIDI LETTER SE;Lo;0;R;;;;;N;;;;;
+10E86;YEZIDI LETTER CIM;Lo;0;R;;;;;N;;;;;
+10E87;YEZIDI LETTER CHIM;Lo;0;R;;;;;N;;;;;
+10E88;YEZIDI LETTER CHHIM;Lo;0;R;;;;;N;;;;;
+10E89;YEZIDI LETTER HHA;Lo;0;R;;;;;N;;;;;
+10E8A;YEZIDI LETTER XA;Lo;0;R;;;;;N;;;;;
+10E8B;YEZIDI LETTER DAL;Lo;0;R;;;;;N;;;;;
+10E8C;YEZIDI LETTER ZAL;Lo;0;R;;;;;N;;;;;
+10E8D;YEZIDI LETTER RA;Lo;0;R;;;;;N;;;;;
+10E8E;YEZIDI LETTER RHA;Lo;0;R;;;;;N;;;;;
+10E8F;YEZIDI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10E90;YEZIDI LETTER JA;Lo;0;R;;;;;N;;;;;
+10E91;YEZIDI LETTER SIN;Lo;0;R;;;;;N;;;;;
+10E92;YEZIDI LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10E93;YEZIDI LETTER SAD;Lo;0;R;;;;;N;;;;;
+10E94;YEZIDI LETTER DAD;Lo;0;R;;;;;N;;;;;
+10E95;YEZIDI LETTER TA;Lo;0;R;;;;;N;;;;;
+10E96;YEZIDI LETTER ZE;Lo;0;R;;;;;N;;;;;
+10E97;YEZIDI LETTER EYN;Lo;0;R;;;;;N;;;;;
+10E98;YEZIDI LETTER XHEYN;Lo;0;R;;;;;N;;;;;
+10E99;YEZIDI LETTER FA;Lo;0;R;;;;;N;;;;;
+10E9A;YEZIDI LETTER VA;Lo;0;R;;;;;N;;;;;
+10E9B;YEZIDI LETTER VA ALTERNATE FORM;Lo;0;R;;;;;N;;;;;
+10E9C;YEZIDI LETTER QAF;Lo;0;R;;;;;N;;;;;
+10E9D;YEZIDI LETTER KAF;Lo;0;R;;;;;N;;;;;
+10E9E;YEZIDI LETTER KHAF;Lo;0;R;;;;;N;;;;;
+10E9F;YEZIDI LETTER GAF;Lo;0;R;;;;;N;;;;;
+10EA0;YEZIDI LETTER LAM;Lo;0;R;;;;;N;;;;;
+10EA1;YEZIDI LETTER MIM;Lo;0;R;;;;;N;;;;;
+10EA2;YEZIDI LETTER NUN;Lo;0;R;;;;;N;;;;;
+10EA3;YEZIDI LETTER UM;Lo;0;R;;;;;N;;;;;
+10EA4;YEZIDI LETTER WAW;Lo;0;R;;;;;N;;;;;
+10EA5;YEZIDI LETTER OW;Lo;0;R;;;;;N;;;;;
+10EA6;YEZIDI LETTER EW;Lo;0;R;;;;;N;;;;;
+10EA7;YEZIDI LETTER HAY;Lo;0;R;;;;;N;;;;;
+10EA8;YEZIDI LETTER YOT;Lo;0;R;;;;;N;;;;;
+10EA9;YEZIDI LETTER ET;Lo;0;R;;;;;N;;;;;
+10EAB;YEZIDI COMBINING HAMZA MARK;Mn;230;NSM;;;;;N;;;;;
+10EAC;YEZIDI COMBINING MADDA MARK;Mn;230;NSM;;;;;N;;;;;
+10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;;
+10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;;
10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
@@ -19139,6 +19222,34 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;;
+10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10FB3;CHORASMIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10FB4;CHORASMIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10FB5;CHORASMIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10FB6;CHORASMIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10FB7;CHORASMIAN LETTER CURLED WAW;Lo;0;R;;;;;N;;;;;
+10FB8;CHORASMIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10FB9;CHORASMIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10FBA;CHORASMIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10FBB;CHORASMIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10FBC;CHORASMIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10FBD;CHORASMIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10FBE;CHORASMIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10FBF;CHORASMIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10FC0;CHORASMIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10FC1;CHORASMIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10FC2;CHORASMIAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10FC3;CHORASMIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10FC4;CHORASMIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10FC5;CHORASMIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10FC6;CHORASMIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10FC7;CHORASMIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10FC8;CHORASMIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10FC9;CHORASMIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10FCA;CHORASMIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10FCB;CHORASMIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;
10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;
@@ -19443,6 +19554,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;;
11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
+11147;CHAKMA LETTER VAA;Lo;0;L;;;;;N;;;;;
11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;;
11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;;
11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;;
@@ -19560,6 +19672,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;
111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;
111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;;
+111CE;SHARADA VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
+111CF;SHARADA SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -19941,10 +20055,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1145A;NEWA DOUBLE COMMA;Po;0;L;;;;;N;;;;;
1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;
1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;
1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
+11460;NEWA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+11461;NEWA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;
11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;
11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;
@@ -20480,6 +20597,78 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;;
118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;;
+11900;DIVES AKURU LETTER A;Lo;0;L;;;;;N;;;;;
+11901;DIVES AKURU LETTER AA;Lo;0;L;;;;;N;;;;;
+11902;DIVES AKURU LETTER I;Lo;0;L;;;;;N;;;;;
+11903;DIVES AKURU LETTER II;Lo;0;L;;;;;N;;;;;
+11904;DIVES AKURU LETTER U;Lo;0;L;;;;;N;;;;;
+11905;DIVES AKURU LETTER UU;Lo;0;L;;;;;N;;;;;
+11906;DIVES AKURU LETTER E;Lo;0;L;;;;;N;;;;;
+11909;DIVES AKURU LETTER O;Lo;0;L;;;;;N;;;;;
+1190C;DIVES AKURU LETTER KA;Lo;0;L;;;;;N;;;;;
+1190D;DIVES AKURU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1190E;DIVES AKURU LETTER GA;Lo;0;L;;;;;N;;;;;
+1190F;DIVES AKURU LETTER GHA;Lo;0;L;;;;;N;;;;;
+11910;DIVES AKURU LETTER NGA;Lo;0;L;;;;;N;;;;;
+11911;DIVES AKURU LETTER CA;Lo;0;L;;;;;N;;;;;
+11912;DIVES AKURU LETTER CHA;Lo;0;L;;;;;N;;;;;
+11913;DIVES AKURU LETTER JA;Lo;0;L;;;;;N;;;;;
+11915;DIVES AKURU LETTER NYA;Lo;0;L;;;;;N;;;;;
+11916;DIVES AKURU LETTER TTA;Lo;0;L;;;;;N;;;;;
+11918;DIVES AKURU LETTER DDA;Lo;0;L;;;;;N;;;;;
+11919;DIVES AKURU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1191A;DIVES AKURU LETTER NNA;Lo;0;L;;;;;N;;;;;
+1191B;DIVES AKURU LETTER TA;Lo;0;L;;;;;N;;;;;
+1191C;DIVES AKURU LETTER THA;Lo;0;L;;;;;N;;;;;
+1191D;DIVES AKURU LETTER DA;Lo;0;L;;;;;N;;;;;
+1191E;DIVES AKURU LETTER DHA;Lo;0;L;;;;;N;;;;;
+1191F;DIVES AKURU LETTER NA;Lo;0;L;;;;;N;;;;;
+11920;DIVES AKURU LETTER PA;Lo;0;L;;;;;N;;;;;
+11921;DIVES AKURU LETTER PHA;Lo;0;L;;;;;N;;;;;
+11922;DIVES AKURU LETTER BA;Lo;0;L;;;;;N;;;;;
+11923;DIVES AKURU LETTER BHA;Lo;0;L;;;;;N;;;;;
+11924;DIVES AKURU LETTER MA;Lo;0;L;;;;;N;;;;;
+11925;DIVES AKURU LETTER YA;Lo;0;L;;;;;N;;;;;
+11926;DIVES AKURU LETTER YYA;Lo;0;L;;;;;N;;;;;
+11927;DIVES AKURU LETTER RA;Lo;0;L;;;;;N;;;;;
+11928;DIVES AKURU LETTER LA;Lo;0;L;;;;;N;;;;;
+11929;DIVES AKURU LETTER VA;Lo;0;L;;;;;N;;;;;
+1192A;DIVES AKURU LETTER SHA;Lo;0;L;;;;;N;;;;;
+1192B;DIVES AKURU LETTER SSA;Lo;0;L;;;;;N;;;;;
+1192C;DIVES AKURU LETTER SA;Lo;0;L;;;;;N;;;;;
+1192D;DIVES AKURU LETTER HA;Lo;0;L;;;;;N;;;;;
+1192E;DIVES AKURU LETTER LLA;Lo;0;L;;;;;N;;;;;
+1192F;DIVES AKURU LETTER ZA;Lo;0;L;;;;;N;;;;;
+11930;DIVES AKURU VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11931;DIVES AKURU VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11932;DIVES AKURU VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11933;DIVES AKURU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+11934;DIVES AKURU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+11935;DIVES AKURU VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11937;DIVES AKURU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+11938;DIVES AKURU VOWEL SIGN O;Mc;0;L;11935 11930;;;;N;;;;;
+1193B;DIVES AKURU SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1193C;DIVES AKURU SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+1193D;DIVES AKURU SIGN HALANTA;Mc;9;L;;;;;N;;;;;
+1193E;DIVES AKURU VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1193F;DIVES AKURU PREFIXED NASAL SIGN;Lo;0;L;;;;;N;;;;;
+11940;DIVES AKURU MEDIAL YA;Mc;0;L;;;;;N;;;;;
+11941;DIVES AKURU INITIAL RA;Lo;0;L;;;;;N;;;;;
+11942;DIVES AKURU MEDIAL RA;Mc;0;L;;;;;N;;;;;
+11943;DIVES AKURU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11944;DIVES AKURU DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11945;DIVES AKURU GAP FILLER;Po;0;L;;;;;N;;;;;
+11946;DIVES AKURU END OF TEXT MARK;Po;0;L;;;;;N;;;;;
+11950;DIVES AKURU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11951;DIVES AKURU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11952;DIVES AKURU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11953;DIVES AKURU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11954;DIVES AKURU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11955;DIVES AKURU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11956;DIVES AKURU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11957;DIVES AKURU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11958;DIVES AKURU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11959;DIVES AKURU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;;
119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;;
@@ -21085,6 +21274,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;
11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;
+11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;;
11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;;
11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;
11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;;
@@ -25052,6 +25242,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;
16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;;
16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;;
+16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;;
+16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;;
+16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;;
17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;
187F7;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;
@@ -25809,6 +26002,491 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;;
18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;;
18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;;
+18AF3;TANGUT COMPONENT-756;Lo;0;L;;;;;N;;;;;
+18AF4;TANGUT COMPONENT-757;Lo;0;L;;;;;N;;;;;
+18AF5;TANGUT COMPONENT-758;Lo;0;L;;;;;N;;;;;
+18AF6;TANGUT COMPONENT-759;Lo;0;L;;;;;N;;;;;
+18AF7;TANGUT COMPONENT-760;Lo;0;L;;;;;N;;;;;
+18AF8;TANGUT COMPONENT-761;Lo;0;L;;;;;N;;;;;
+18AF9;TANGUT COMPONENT-762;Lo;0;L;;;;;N;;;;;
+18AFA;TANGUT COMPONENT-763;Lo;0;L;;;;;N;;;;;
+18AFB;TANGUT COMPONENT-764;Lo;0;L;;;;;N;;;;;
+18AFC;TANGUT COMPONENT-765;Lo;0;L;;;;;N;;;;;
+18AFD;TANGUT COMPONENT-766;Lo;0;L;;;;;N;;;;;
+18AFE;TANGUT COMPONENT-767;Lo;0;L;;;;;N;;;;;
+18AFF;TANGUT COMPONENT-768;Lo;0;L;;;;;N;;;;;
+18B00;KHITAN SMALL SCRIPT CHARACTER-18B00;Lo;0;L;;;;;N;;;;;
+18B01;KHITAN SMALL SCRIPT CHARACTER-18B01;Lo;0;L;;;;;N;;;;;
+18B02;KHITAN SMALL SCRIPT CHARACTER-18B02;Lo;0;L;;;;;N;;;;;
+18B03;KHITAN SMALL SCRIPT CHARACTER-18B03;Lo;0;L;;;;;N;;;;;
+18B04;KHITAN SMALL SCRIPT CHARACTER-18B04;Lo;0;L;;;;;N;;;;;
+18B05;KHITAN SMALL SCRIPT CHARACTER-18B05;Lo;0;L;;;;;N;;;;;
+18B06;KHITAN SMALL SCRIPT CHARACTER-18B06;Lo;0;L;;;;;N;;;;;
+18B07;KHITAN SMALL SCRIPT CHARACTER-18B07;Lo;0;L;;;;;N;;;;;
+18B08;KHITAN SMALL SCRIPT CHARACTER-18B08;Lo;0;L;;;;;N;;;;;
+18B09;KHITAN SMALL SCRIPT CHARACTER-18B09;Lo;0;L;;;;;N;;;;;
+18B0A;KHITAN SMALL SCRIPT CHARACTER-18B0A;Lo;0;L;;;;;N;;;;;
+18B0B;KHITAN SMALL SCRIPT CHARACTER-18B0B;Lo;0;L;;;;;N;;;;;
+18B0C;KHITAN SMALL SCRIPT CHARACTER-18B0C;Lo;0;L;;;;;N;;;;;
+18B0D;KHITAN SMALL SCRIPT CHARACTER-18B0D;Lo;0;L;;;;;N;;;;;
+18B0E;KHITAN SMALL SCRIPT CHARACTER-18B0E;Lo;0;L;;;;;N;;;;;
+18B0F;KHITAN SMALL SCRIPT CHARACTER-18B0F;Lo;0;L;;;;;N;;;;;
+18B10;KHITAN SMALL SCRIPT CHARACTER-18B10;Lo;0;L;;;;;N;;;;;
+18B11;KHITAN SMALL SCRIPT CHARACTER-18B11;Lo;0;L;;;;;N;;;;;
+18B12;KHITAN SMALL SCRIPT CHARACTER-18B12;Lo;0;L;;;;;N;;;;;
+18B13;KHITAN SMALL SCRIPT CHARACTER-18B13;Lo;0;L;;;;;N;;;;;
+18B14;KHITAN SMALL SCRIPT CHARACTER-18B14;Lo;0;L;;;;;N;;;;;
+18B15;KHITAN SMALL SCRIPT CHARACTER-18B15;Lo;0;L;;;;;N;;;;;
+18B16;KHITAN SMALL SCRIPT CHARACTER-18B16;Lo;0;L;;;;;N;;;;;
+18B17;KHITAN SMALL SCRIPT CHARACTER-18B17;Lo;0;L;;;;;N;;;;;
+18B18;KHITAN SMALL SCRIPT CHARACTER-18B18;Lo;0;L;;;;;N;;;;;
+18B19;KHITAN SMALL SCRIPT CHARACTER-18B19;Lo;0;L;;;;;N;;;;;
+18B1A;KHITAN SMALL SCRIPT CHARACTER-18B1A;Lo;0;L;;;;;N;;;;;
+18B1B;KHITAN SMALL SCRIPT CHARACTER-18B1B;Lo;0;L;;;;;N;;;;;
+18B1C;KHITAN SMALL SCRIPT CHARACTER-18B1C;Lo;0;L;;;;;N;;;;;
+18B1D;KHITAN SMALL SCRIPT CHARACTER-18B1D;Lo;0;L;;;;;N;;;;;
+18B1E;KHITAN SMALL SCRIPT CHARACTER-18B1E;Lo;0;L;;;;;N;;;;;
+18B1F;KHITAN SMALL SCRIPT CHARACTER-18B1F;Lo;0;L;;;;;N;;;;;
+18B20;KHITAN SMALL SCRIPT CHARACTER-18B20;Lo;0;L;;;;;N;;;;;
+18B21;KHITAN SMALL SCRIPT CHARACTER-18B21;Lo;0;L;;;;;N;;;;;
+18B22;KHITAN SMALL SCRIPT CHARACTER-18B22;Lo;0;L;;;;;N;;;;;
+18B23;KHITAN SMALL SCRIPT CHARACTER-18B23;Lo;0;L;;;;;N;;;;;
+18B24;KHITAN SMALL SCRIPT CHARACTER-18B24;Lo;0;L;;;;;N;;;;;
+18B25;KHITAN SMALL SCRIPT CHARACTER-18B25;Lo;0;L;;;;;N;;;;;
+18B26;KHITAN SMALL SCRIPT CHARACTER-18B26;Lo;0;L;;;;;N;;;;;
+18B27;KHITAN SMALL SCRIPT CHARACTER-18B27;Lo;0;L;;;;;N;;;;;
+18B28;KHITAN SMALL SCRIPT CHARACTER-18B28;Lo;0;L;;;;;N;;;;;
+18B29;KHITAN SMALL SCRIPT CHARACTER-18B29;Lo;0;L;;;;;N;;;;;
+18B2A;KHITAN SMALL SCRIPT CHARACTER-18B2A;Lo;0;L;;;;;N;;;;;
+18B2B;KHITAN SMALL SCRIPT CHARACTER-18B2B;Lo;0;L;;;;;N;;;;;
+18B2C;KHITAN SMALL SCRIPT CHARACTER-18B2C;Lo;0;L;;;;;N;;;;;
+18B2D;KHITAN SMALL SCRIPT CHARACTER-18B2D;Lo;0;L;;;;;N;;;;;
+18B2E;KHITAN SMALL SCRIPT CHARACTER-18B2E;Lo;0;L;;;;;N;;;;;
+18B2F;KHITAN SMALL SCRIPT CHARACTER-18B2F;Lo;0;L;;;;;N;;;;;
+18B30;KHITAN SMALL SCRIPT CHARACTER-18B30;Lo;0;L;;;;;N;;;;;
+18B31;KHITAN SMALL SCRIPT CHARACTER-18B31;Lo;0;L;;;;;N;;;;;
+18B32;KHITAN SMALL SCRIPT CHARACTER-18B32;Lo;0;L;;;;;N;;;;;
+18B33;KHITAN SMALL SCRIPT CHARACTER-18B33;Lo;0;L;;;;;N;;;;;
+18B34;KHITAN SMALL SCRIPT CHARACTER-18B34;Lo;0;L;;;;;N;;;;;
+18B35;KHITAN SMALL SCRIPT CHARACTER-18B35;Lo;0;L;;;;;N;;;;;
+18B36;KHITAN SMALL SCRIPT CHARACTER-18B36;Lo;0;L;;;;;N;;;;;
+18B37;KHITAN SMALL SCRIPT CHARACTER-18B37;Lo;0;L;;;;;N;;;;;
+18B38;KHITAN SMALL SCRIPT CHARACTER-18B38;Lo;0;L;;;;;N;;;;;
+18B39;KHITAN SMALL SCRIPT CHARACTER-18B39;Lo;0;L;;;;;N;;;;;
+18B3A;KHITAN SMALL SCRIPT CHARACTER-18B3A;Lo;0;L;;;;;N;;;;;
+18B3B;KHITAN SMALL SCRIPT CHARACTER-18B3B;Lo;0;L;;;;;N;;;;;
+18B3C;KHITAN SMALL SCRIPT CHARACTER-18B3C;Lo;0;L;;;;;N;;;;;
+18B3D;KHITAN SMALL SCRIPT CHARACTER-18B3D;Lo;0;L;;;;;N;;;;;
+18B3E;KHITAN SMALL SCRIPT CHARACTER-18B3E;Lo;0;L;;;;;N;;;;;
+18B3F;KHITAN SMALL SCRIPT CHARACTER-18B3F;Lo;0;L;;;;;N;;;;;
+18B40;KHITAN SMALL SCRIPT CHARACTER-18B40;Lo;0;L;;;;;N;;;;;
+18B41;KHITAN SMALL SCRIPT CHARACTER-18B41;Lo;0;L;;;;;N;;;;;
+18B42;KHITAN SMALL SCRIPT CHARACTER-18B42;Lo;0;L;;;;;N;;;;;
+18B43;KHITAN SMALL SCRIPT CHARACTER-18B43;Lo;0;L;;;;;N;;;;;
+18B44;KHITAN SMALL SCRIPT CHARACTER-18B44;Lo;0;L;;;;;N;;;;;
+18B45;KHITAN SMALL SCRIPT CHARACTER-18B45;Lo;0;L;;;;;N;;;;;
+18B46;KHITAN SMALL SCRIPT CHARACTER-18B46;Lo;0;L;;;;;N;;;;;
+18B47;KHITAN SMALL SCRIPT CHARACTER-18B47;Lo;0;L;;;;;N;;;;;
+18B48;KHITAN SMALL SCRIPT CHARACTER-18B48;Lo;0;L;;;;;N;;;;;
+18B49;KHITAN SMALL SCRIPT CHARACTER-18B49;Lo;0;L;;;;;N;;;;;
+18B4A;KHITAN SMALL SCRIPT CHARACTER-18B4A;Lo;0;L;;;;;N;;;;;
+18B4B;KHITAN SMALL SCRIPT CHARACTER-18B4B;Lo;0;L;;;;;N;;;;;
+18B4C;KHITAN SMALL SCRIPT CHARACTER-18B4C;Lo;0;L;;;;;N;;;;;
+18B4D;KHITAN SMALL SCRIPT CHARACTER-18B4D;Lo;0;L;;;;;N;;;;;
+18B4E;KHITAN SMALL SCRIPT CHARACTER-18B4E;Lo;0;L;;;;;N;;;;;
+18B4F;KHITAN SMALL SCRIPT CHARACTER-18B4F;Lo;0;L;;;;;N;;;;;
+18B50;KHITAN SMALL SCRIPT CHARACTER-18B50;Lo;0;L;;;;;N;;;;;
+18B51;KHITAN SMALL SCRIPT CHARACTER-18B51;Lo;0;L;;;;;N;;;;;
+18B52;KHITAN SMALL SCRIPT CHARACTER-18B52;Lo;0;L;;;;;N;;;;;
+18B53;KHITAN SMALL SCRIPT CHARACTER-18B53;Lo;0;L;;;;;N;;;;;
+18B54;KHITAN SMALL SCRIPT CHARACTER-18B54;Lo;0;L;;;;;N;;;;;
+18B55;KHITAN SMALL SCRIPT CHARACTER-18B55;Lo;0;L;;;;;N;;;;;
+18B56;KHITAN SMALL SCRIPT CHARACTER-18B56;Lo;0;L;;;;;N;;;;;
+18B57;KHITAN SMALL SCRIPT CHARACTER-18B57;Lo;0;L;;;;;N;;;;;
+18B58;KHITAN SMALL SCRIPT CHARACTER-18B58;Lo;0;L;;;;;N;;;;;
+18B59;KHITAN SMALL SCRIPT CHARACTER-18B59;Lo;0;L;;;;;N;;;;;
+18B5A;KHITAN SMALL SCRIPT CHARACTER-18B5A;Lo;0;L;;;;;N;;;;;
+18B5B;KHITAN SMALL SCRIPT CHARACTER-18B5B;Lo;0;L;;;;;N;;;;;
+18B5C;KHITAN SMALL SCRIPT CHARACTER-18B5C;Lo;0;L;;;;;N;;;;;
+18B5D;KHITAN SMALL SCRIPT CHARACTER-18B5D;Lo;0;L;;;;;N;;;;;
+18B5E;KHITAN SMALL SCRIPT CHARACTER-18B5E;Lo;0;L;;;;;N;;;;;
+18B5F;KHITAN SMALL SCRIPT CHARACTER-18B5F;Lo;0;L;;;;;N;;;;;
+18B60;KHITAN SMALL SCRIPT CHARACTER-18B60;Lo;0;L;;;;;N;;;;;
+18B61;KHITAN SMALL SCRIPT CHARACTER-18B61;Lo;0;L;;;;;N;;;;;
+18B62;KHITAN SMALL SCRIPT CHARACTER-18B62;Lo;0;L;;;;;N;;;;;
+18B63;KHITAN SMALL SCRIPT CHARACTER-18B63;Lo;0;L;;;;;N;;;;;
+18B64;KHITAN SMALL SCRIPT CHARACTER-18B64;Lo;0;L;;;;;N;;;;;
+18B65;KHITAN SMALL SCRIPT CHARACTER-18B65;Lo;0;L;;;;;N;;;;;
+18B66;KHITAN SMALL SCRIPT CHARACTER-18B66;Lo;0;L;;;;;N;;;;;
+18B67;KHITAN SMALL SCRIPT CHARACTER-18B67;Lo;0;L;;;;;N;;;;;
+18B68;KHITAN SMALL SCRIPT CHARACTER-18B68;Lo;0;L;;;;;N;;;;;
+18B69;KHITAN SMALL SCRIPT CHARACTER-18B69;Lo;0;L;;;;;N;;;;;
+18B6A;KHITAN SMALL SCRIPT CHARACTER-18B6A;Lo;0;L;;;;;N;;;;;
+18B6B;KHITAN SMALL SCRIPT CHARACTER-18B6B;Lo;0;L;;;;;N;;;;;
+18B6C;KHITAN SMALL SCRIPT CHARACTER-18B6C;Lo;0;L;;;;;N;;;;;
+18B6D;KHITAN SMALL SCRIPT CHARACTER-18B6D;Lo;0;L;;;;;N;;;;;
+18B6E;KHITAN SMALL SCRIPT CHARACTER-18B6E;Lo;0;L;;;;;N;;;;;
+18B6F;KHITAN SMALL SCRIPT CHARACTER-18B6F;Lo;0;L;;;;;N;;;;;
+18B70;KHITAN SMALL SCRIPT CHARACTER-18B70;Lo;0;L;;;;;N;;;;;
+18B71;KHITAN SMALL SCRIPT CHARACTER-18B71;Lo;0;L;;;;;N;;;;;
+18B72;KHITAN SMALL SCRIPT CHARACTER-18B72;Lo;0;L;;;;;N;;;;;
+18B73;KHITAN SMALL SCRIPT CHARACTER-18B73;Lo;0;L;;;;;N;;;;;
+18B74;KHITAN SMALL SCRIPT CHARACTER-18B74;Lo;0;L;;;;;N;;;;;
+18B75;KHITAN SMALL SCRIPT CHARACTER-18B75;Lo;0;L;;;;;N;;;;;
+18B76;KHITAN SMALL SCRIPT CHARACTER-18B76;Lo;0;L;;;;;N;;;;;
+18B77;KHITAN SMALL SCRIPT CHARACTER-18B77;Lo;0;L;;;;;N;;;;;
+18B78;KHITAN SMALL SCRIPT CHARACTER-18B78;Lo;0;L;;;;;N;;;;;
+18B79;KHITAN SMALL SCRIPT CHARACTER-18B79;Lo;0;L;;;;;N;;;;;
+18B7A;KHITAN SMALL SCRIPT CHARACTER-18B7A;Lo;0;L;;;;;N;;;;;
+18B7B;KHITAN SMALL SCRIPT CHARACTER-18B7B;Lo;0;L;;;;;N;;;;;
+18B7C;KHITAN SMALL SCRIPT CHARACTER-18B7C;Lo;0;L;;;;;N;;;;;
+18B7D;KHITAN SMALL SCRIPT CHARACTER-18B7D;Lo;0;L;;;;;N;;;;;
+18B7E;KHITAN SMALL SCRIPT CHARACTER-18B7E;Lo;0;L;;;;;N;;;;;
+18B7F;KHITAN SMALL SCRIPT CHARACTER-18B7F;Lo;0;L;;;;;N;;;;;
+18B80;KHITAN SMALL SCRIPT CHARACTER-18B80;Lo;0;L;;;;;N;;;;;
+18B81;KHITAN SMALL SCRIPT CHARACTER-18B81;Lo;0;L;;;;;N;;;;;
+18B82;KHITAN SMALL SCRIPT CHARACTER-18B82;Lo;0;L;;;;;N;;;;;
+18B83;KHITAN SMALL SCRIPT CHARACTER-18B83;Lo;0;L;;;;;N;;;;;
+18B84;KHITAN SMALL SCRIPT CHARACTER-18B84;Lo;0;L;;;;;N;;;;;
+18B85;KHITAN SMALL SCRIPT CHARACTER-18B85;Lo;0;L;;;;;N;;;;;
+18B86;KHITAN SMALL SCRIPT CHARACTER-18B86;Lo;0;L;;;;;N;;;;;
+18B87;KHITAN SMALL SCRIPT CHARACTER-18B87;Lo;0;L;;;;;N;;;;;
+18B88;KHITAN SMALL SCRIPT CHARACTER-18B88;Lo;0;L;;;;;N;;;;;
+18B89;KHITAN SMALL SCRIPT CHARACTER-18B89;Lo;0;L;;;;;N;;;;;
+18B8A;KHITAN SMALL SCRIPT CHARACTER-18B8A;Lo;0;L;;;;;N;;;;;
+18B8B;KHITAN SMALL SCRIPT CHARACTER-18B8B;Lo;0;L;;;;;N;;;;;
+18B8C;KHITAN SMALL SCRIPT CHARACTER-18B8C;Lo;0;L;;;;;N;;;;;
+18B8D;KHITAN SMALL SCRIPT CHARACTER-18B8D;Lo;0;L;;;;;N;;;;;
+18B8E;KHITAN SMALL SCRIPT CHARACTER-18B8E;Lo;0;L;;;;;N;;;;;
+18B8F;KHITAN SMALL SCRIPT CHARACTER-18B8F;Lo;0;L;;;;;N;;;;;
+18B90;KHITAN SMALL SCRIPT CHARACTER-18B90;Lo;0;L;;;;;N;;;;;
+18B91;KHITAN SMALL SCRIPT CHARACTER-18B91;Lo;0;L;;;;;N;;;;;
+18B92;KHITAN SMALL SCRIPT CHARACTER-18B92;Lo;0;L;;;;;N;;;;;
+18B93;KHITAN SMALL SCRIPT CHARACTER-18B93;Lo;0;L;;;;;N;;;;;
+18B94;KHITAN SMALL SCRIPT CHARACTER-18B94;Lo;0;L;;;;;N;;;;;
+18B95;KHITAN SMALL SCRIPT CHARACTER-18B95;Lo;0;L;;;;;N;;;;;
+18B96;KHITAN SMALL SCRIPT CHARACTER-18B96;Lo;0;L;;;;;N;;;;;
+18B97;KHITAN SMALL SCRIPT CHARACTER-18B97;Lo;0;L;;;;;N;;;;;
+18B98;KHITAN SMALL SCRIPT CHARACTER-18B98;Lo;0;L;;;;;N;;;;;
+18B99;KHITAN SMALL SCRIPT CHARACTER-18B99;Lo;0;L;;;;;N;;;;;
+18B9A;KHITAN SMALL SCRIPT CHARACTER-18B9A;Lo;0;L;;;;;N;;;;;
+18B9B;KHITAN SMALL SCRIPT CHARACTER-18B9B;Lo;0;L;;;;;N;;;;;
+18B9C;KHITAN SMALL SCRIPT CHARACTER-18B9C;Lo;0;L;;;;;N;;;;;
+18B9D;KHITAN SMALL SCRIPT CHARACTER-18B9D;Lo;0;L;;;;;N;;;;;
+18B9E;KHITAN SMALL SCRIPT CHARACTER-18B9E;Lo;0;L;;;;;N;;;;;
+18B9F;KHITAN SMALL SCRIPT CHARACTER-18B9F;Lo;0;L;;;;;N;;;;;
+18BA0;KHITAN SMALL SCRIPT CHARACTER-18BA0;Lo;0;L;;;;;N;;;;;
+18BA1;KHITAN SMALL SCRIPT CHARACTER-18BA1;Lo;0;L;;;;;N;;;;;
+18BA2;KHITAN SMALL SCRIPT CHARACTER-18BA2;Lo;0;L;;;;;N;;;;;
+18BA3;KHITAN SMALL SCRIPT CHARACTER-18BA3;Lo;0;L;;;;;N;;;;;
+18BA4;KHITAN SMALL SCRIPT CHARACTER-18BA4;Lo;0;L;;;;;N;;;;;
+18BA5;KHITAN SMALL SCRIPT CHARACTER-18BA5;Lo;0;L;;;;;N;;;;;
+18BA6;KHITAN SMALL SCRIPT CHARACTER-18BA6;Lo;0;L;;;;;N;;;;;
+18BA7;KHITAN SMALL SCRIPT CHARACTER-18BA7;Lo;0;L;;;;;N;;;;;
+18BA8;KHITAN SMALL SCRIPT CHARACTER-18BA8;Lo;0;L;;;;;N;;;;;
+18BA9;KHITAN SMALL SCRIPT CHARACTER-18BA9;Lo;0;L;;;;;N;;;;;
+18BAA;KHITAN SMALL SCRIPT CHARACTER-18BAA;Lo;0;L;;;;;N;;;;;
+18BAB;KHITAN SMALL SCRIPT CHARACTER-18BAB;Lo;0;L;;;;;N;;;;;
+18BAC;KHITAN SMALL SCRIPT CHARACTER-18BAC;Lo;0;L;;;;;N;;;;;
+18BAD;KHITAN SMALL SCRIPT CHARACTER-18BAD;Lo;0;L;;;;;N;;;;;
+18BAE;KHITAN SMALL SCRIPT CHARACTER-18BAE;Lo;0;L;;;;;N;;;;;
+18BAF;KHITAN SMALL SCRIPT CHARACTER-18BAF;Lo;0;L;;;;;N;;;;;
+18BB0;KHITAN SMALL SCRIPT CHARACTER-18BB0;Lo;0;L;;;;;N;;;;;
+18BB1;KHITAN SMALL SCRIPT CHARACTER-18BB1;Lo;0;L;;;;;N;;;;;
+18BB2;KHITAN SMALL SCRIPT CHARACTER-18BB2;Lo;0;L;;;;;N;;;;;
+18BB3;KHITAN SMALL SCRIPT CHARACTER-18BB3;Lo;0;L;;;;;N;;;;;
+18BB4;KHITAN SMALL SCRIPT CHARACTER-18BB4;Lo;0;L;;;;;N;;;;;
+18BB5;KHITAN SMALL SCRIPT CHARACTER-18BB5;Lo;0;L;;;;;N;;;;;
+18BB6;KHITAN SMALL SCRIPT CHARACTER-18BB6;Lo;0;L;;;;;N;;;;;
+18BB7;KHITAN SMALL SCRIPT CHARACTER-18BB7;Lo;0;L;;;;;N;;;;;
+18BB8;KHITAN SMALL SCRIPT CHARACTER-18BB8;Lo;0;L;;;;;N;;;;;
+18BB9;KHITAN SMALL SCRIPT CHARACTER-18BB9;Lo;0;L;;;;;N;;;;;
+18BBA;KHITAN SMALL SCRIPT CHARACTER-18BBA;Lo;0;L;;;;;N;;;;;
+18BBB;KHITAN SMALL SCRIPT CHARACTER-18BBB;Lo;0;L;;;;;N;;;;;
+18BBC;KHITAN SMALL SCRIPT CHARACTER-18BBC;Lo;0;L;;;;;N;;;;;
+18BBD;KHITAN SMALL SCRIPT CHARACTER-18BBD;Lo;0;L;;;;;N;;;;;
+18BBE;KHITAN SMALL SCRIPT CHARACTER-18BBE;Lo;0;L;;;;;N;;;;;
+18BBF;KHITAN SMALL SCRIPT CHARACTER-18BBF;Lo;0;L;;;;;N;;;;;
+18BC0;KHITAN SMALL SCRIPT CHARACTER-18BC0;Lo;0;L;;;;;N;;;;;
+18BC1;KHITAN SMALL SCRIPT CHARACTER-18BC1;Lo;0;L;;;;;N;;;;;
+18BC2;KHITAN SMALL SCRIPT CHARACTER-18BC2;Lo;0;L;;;;;N;;;;;
+18BC3;KHITAN SMALL SCRIPT CHARACTER-18BC3;Lo;0;L;;;;;N;;;;;
+18BC4;KHITAN SMALL SCRIPT CHARACTER-18BC4;Lo;0;L;;;;;N;;;;;
+18BC5;KHITAN SMALL SCRIPT CHARACTER-18BC5;Lo;0;L;;;;;N;;;;;
+18BC6;KHITAN SMALL SCRIPT CHARACTER-18BC6;Lo;0;L;;;;;N;;;;;
+18BC7;KHITAN SMALL SCRIPT CHARACTER-18BC7;Lo;0;L;;;;;N;;;;;
+18BC8;KHITAN SMALL SCRIPT CHARACTER-18BC8;Lo;0;L;;;;;N;;;;;
+18BC9;KHITAN SMALL SCRIPT CHARACTER-18BC9;Lo;0;L;;;;;N;;;;;
+18BCA;KHITAN SMALL SCRIPT CHARACTER-18BCA;Lo;0;L;;;;;N;;;;;
+18BCB;KHITAN SMALL SCRIPT CHARACTER-18BCB;Lo;0;L;;;;;N;;;;;
+18BCC;KHITAN SMALL SCRIPT CHARACTER-18BCC;Lo;0;L;;;;;N;;;;;
+18BCD;KHITAN SMALL SCRIPT CHARACTER-18BCD;Lo;0;L;;;;;N;;;;;
+18BCE;KHITAN SMALL SCRIPT CHARACTER-18BCE;Lo;0;L;;;;;N;;;;;
+18BCF;KHITAN SMALL SCRIPT CHARACTER-18BCF;Lo;0;L;;;;;N;;;;;
+18BD0;KHITAN SMALL SCRIPT CHARACTER-18BD0;Lo;0;L;;;;;N;;;;;
+18BD1;KHITAN SMALL SCRIPT CHARACTER-18BD1;Lo;0;L;;;;;N;;;;;
+18BD2;KHITAN SMALL SCRIPT CHARACTER-18BD2;Lo;0;L;;;;;N;;;;;
+18BD3;KHITAN SMALL SCRIPT CHARACTER-18BD3;Lo;0;L;;;;;N;;;;;
+18BD4;KHITAN SMALL SCRIPT CHARACTER-18BD4;Lo;0;L;;;;;N;;;;;
+18BD5;KHITAN SMALL SCRIPT CHARACTER-18BD5;Lo;0;L;;;;;N;;;;;
+18BD6;KHITAN SMALL SCRIPT CHARACTER-18BD6;Lo;0;L;;;;;N;;;;;
+18BD7;KHITAN SMALL SCRIPT CHARACTER-18BD7;Lo;0;L;;;;;N;;;;;
+18BD8;KHITAN SMALL SCRIPT CHARACTER-18BD8;Lo;0;L;;;;;N;;;;;
+18BD9;KHITAN SMALL SCRIPT CHARACTER-18BD9;Lo;0;L;;;;;N;;;;;
+18BDA;KHITAN SMALL SCRIPT CHARACTER-18BDA;Lo;0;L;;;;;N;;;;;
+18BDB;KHITAN SMALL SCRIPT CHARACTER-18BDB;Lo;0;L;;;;;N;;;;;
+18BDC;KHITAN SMALL SCRIPT CHARACTER-18BDC;Lo;0;L;;;;;N;;;;;
+18BDD;KHITAN SMALL SCRIPT CHARACTER-18BDD;Lo;0;L;;;;;N;;;;;
+18BDE;KHITAN SMALL SCRIPT CHARACTER-18BDE;Lo;0;L;;;;;N;;;;;
+18BDF;KHITAN SMALL SCRIPT CHARACTER-18BDF;Lo;0;L;;;;;N;;;;;
+18BE0;KHITAN SMALL SCRIPT CHARACTER-18BE0;Lo;0;L;;;;;N;;;;;
+18BE1;KHITAN SMALL SCRIPT CHARACTER-18BE1;Lo;0;L;;;;;N;;;;;
+18BE2;KHITAN SMALL SCRIPT CHARACTER-18BE2;Lo;0;L;;;;;N;;;;;
+18BE3;KHITAN SMALL SCRIPT CHARACTER-18BE3;Lo;0;L;;;;;N;;;;;
+18BE4;KHITAN SMALL SCRIPT CHARACTER-18BE4;Lo;0;L;;;;;N;;;;;
+18BE5;KHITAN SMALL SCRIPT CHARACTER-18BE5;Lo;0;L;;;;;N;;;;;
+18BE6;KHITAN SMALL SCRIPT CHARACTER-18BE6;Lo;0;L;;;;;N;;;;;
+18BE7;KHITAN SMALL SCRIPT CHARACTER-18BE7;Lo;0;L;;;;;N;;;;;
+18BE8;KHITAN SMALL SCRIPT CHARACTER-18BE8;Lo;0;L;;;;;N;;;;;
+18BE9;KHITAN SMALL SCRIPT CHARACTER-18BE9;Lo;0;L;;;;;N;;;;;
+18BEA;KHITAN SMALL SCRIPT CHARACTER-18BEA;Lo;0;L;;;;;N;;;;;
+18BEB;KHITAN SMALL SCRIPT CHARACTER-18BEB;Lo;0;L;;;;;N;;;;;
+18BEC;KHITAN SMALL SCRIPT CHARACTER-18BEC;Lo;0;L;;;;;N;;;;;
+18BED;KHITAN SMALL SCRIPT CHARACTER-18BED;Lo;0;L;;;;;N;;;;;
+18BEE;KHITAN SMALL SCRIPT CHARACTER-18BEE;Lo;0;L;;;;;N;;;;;
+18BEF;KHITAN SMALL SCRIPT CHARACTER-18BEF;Lo;0;L;;;;;N;;;;;
+18BF0;KHITAN SMALL SCRIPT CHARACTER-18BF0;Lo;0;L;;;;;N;;;;;
+18BF1;KHITAN SMALL SCRIPT CHARACTER-18BF1;Lo;0;L;;;;;N;;;;;
+18BF2;KHITAN SMALL SCRIPT CHARACTER-18BF2;Lo;0;L;;;;;N;;;;;
+18BF3;KHITAN SMALL SCRIPT CHARACTER-18BF3;Lo;0;L;;;;;N;;;;;
+18BF4;KHITAN SMALL SCRIPT CHARACTER-18BF4;Lo;0;L;;;;;N;;;;;
+18BF5;KHITAN SMALL SCRIPT CHARACTER-18BF5;Lo;0;L;;;;;N;;;;;
+18BF6;KHITAN SMALL SCRIPT CHARACTER-18BF6;Lo;0;L;;;;;N;;;;;
+18BF7;KHITAN SMALL SCRIPT CHARACTER-18BF7;Lo;0;L;;;;;N;;;;;
+18BF8;KHITAN SMALL SCRIPT CHARACTER-18BF8;Lo;0;L;;;;;N;;;;;
+18BF9;KHITAN SMALL SCRIPT CHARACTER-18BF9;Lo;0;L;;;;;N;;;;;
+18BFA;KHITAN SMALL SCRIPT CHARACTER-18BFA;Lo;0;L;;;;;N;;;;;
+18BFB;KHITAN SMALL SCRIPT CHARACTER-18BFB;Lo;0;L;;;;;N;;;;;
+18BFC;KHITAN SMALL SCRIPT CHARACTER-18BFC;Lo;0;L;;;;;N;;;;;
+18BFD;KHITAN SMALL SCRIPT CHARACTER-18BFD;Lo;0;L;;;;;N;;;;;
+18BFE;KHITAN SMALL SCRIPT CHARACTER-18BFE;Lo;0;L;;;;;N;;;;;
+18BFF;KHITAN SMALL SCRIPT CHARACTER-18BFF;Lo;0;L;;;;;N;;;;;
+18C00;KHITAN SMALL SCRIPT CHARACTER-18C00;Lo;0;L;;;;;N;;;;;
+18C01;KHITAN SMALL SCRIPT CHARACTER-18C01;Lo;0;L;;;;;N;;;;;
+18C02;KHITAN SMALL SCRIPT CHARACTER-18C02;Lo;0;L;;;;;N;;;;;
+18C03;KHITAN SMALL SCRIPT CHARACTER-18C03;Lo;0;L;;;;;N;;;;;
+18C04;KHITAN SMALL SCRIPT CHARACTER-18C04;Lo;0;L;;;;;N;;;;;
+18C05;KHITAN SMALL SCRIPT CHARACTER-18C05;Lo;0;L;;;;;N;;;;;
+18C06;KHITAN SMALL SCRIPT CHARACTER-18C06;Lo;0;L;;;;;N;;;;;
+18C07;KHITAN SMALL SCRIPT CHARACTER-18C07;Lo;0;L;;;;;N;;;;;
+18C08;KHITAN SMALL SCRIPT CHARACTER-18C08;Lo;0;L;;;;;N;;;;;
+18C09;KHITAN SMALL SCRIPT CHARACTER-18C09;Lo;0;L;;;;;N;;;;;
+18C0A;KHITAN SMALL SCRIPT CHARACTER-18C0A;Lo;0;L;;;;;N;;;;;
+18C0B;KHITAN SMALL SCRIPT CHARACTER-18C0B;Lo;0;L;;;;;N;;;;;
+18C0C;KHITAN SMALL SCRIPT CHARACTER-18C0C;Lo;0;L;;;;;N;;;;;
+18C0D;KHITAN SMALL SCRIPT CHARACTER-18C0D;Lo;0;L;;;;;N;;;;;
+18C0E;KHITAN SMALL SCRIPT CHARACTER-18C0E;Lo;0;L;;;;;N;;;;;
+18C0F;KHITAN SMALL SCRIPT CHARACTER-18C0F;Lo;0;L;;;;;N;;;;;
+18C10;KHITAN SMALL SCRIPT CHARACTER-18C10;Lo;0;L;;;;;N;;;;;
+18C11;KHITAN SMALL SCRIPT CHARACTER-18C11;Lo;0;L;;;;;N;;;;;
+18C12;KHITAN SMALL SCRIPT CHARACTER-18C12;Lo;0;L;;;;;N;;;;;
+18C13;KHITAN SMALL SCRIPT CHARACTER-18C13;Lo;0;L;;;;;N;;;;;
+18C14;KHITAN SMALL SCRIPT CHARACTER-18C14;Lo;0;L;;;;;N;;;;;
+18C15;KHITAN SMALL SCRIPT CHARACTER-18C15;Lo;0;L;;;;;N;;;;;
+18C16;KHITAN SMALL SCRIPT CHARACTER-18C16;Lo;0;L;;;;;N;;;;;
+18C17;KHITAN SMALL SCRIPT CHARACTER-18C17;Lo;0;L;;;;;N;;;;;
+18C18;KHITAN SMALL SCRIPT CHARACTER-18C18;Lo;0;L;;;;;N;;;;;
+18C19;KHITAN SMALL SCRIPT CHARACTER-18C19;Lo;0;L;;;;;N;;;;;
+18C1A;KHITAN SMALL SCRIPT CHARACTER-18C1A;Lo;0;L;;;;;N;;;;;
+18C1B;KHITAN SMALL SCRIPT CHARACTER-18C1B;Lo;0;L;;;;;N;;;;;
+18C1C;KHITAN SMALL SCRIPT CHARACTER-18C1C;Lo;0;L;;;;;N;;;;;
+18C1D;KHITAN SMALL SCRIPT CHARACTER-18C1D;Lo;0;L;;;;;N;;;;;
+18C1E;KHITAN SMALL SCRIPT CHARACTER-18C1E;Lo;0;L;;;;;N;;;;;
+18C1F;KHITAN SMALL SCRIPT CHARACTER-18C1F;Lo;0;L;;;;;N;;;;;
+18C20;KHITAN SMALL SCRIPT CHARACTER-18C20;Lo;0;L;;;;;N;;;;;
+18C21;KHITAN SMALL SCRIPT CHARACTER-18C21;Lo;0;L;;;;;N;;;;;
+18C22;KHITAN SMALL SCRIPT CHARACTER-18C22;Lo;0;L;;;;;N;;;;;
+18C23;KHITAN SMALL SCRIPT CHARACTER-18C23;Lo;0;L;;;;;N;;;;;
+18C24;KHITAN SMALL SCRIPT CHARACTER-18C24;Lo;0;L;;;;;N;;;;;
+18C25;KHITAN SMALL SCRIPT CHARACTER-18C25;Lo;0;L;;;;;N;;;;;
+18C26;KHITAN SMALL SCRIPT CHARACTER-18C26;Lo;0;L;;;;;N;;;;;
+18C27;KHITAN SMALL SCRIPT CHARACTER-18C27;Lo;0;L;;;;;N;;;;;
+18C28;KHITAN SMALL SCRIPT CHARACTER-18C28;Lo;0;L;;;;;N;;;;;
+18C29;KHITAN SMALL SCRIPT CHARACTER-18C29;Lo;0;L;;;;;N;;;;;
+18C2A;KHITAN SMALL SCRIPT CHARACTER-18C2A;Lo;0;L;;;;;N;;;;;
+18C2B;KHITAN SMALL SCRIPT CHARACTER-18C2B;Lo;0;L;;;;;N;;;;;
+18C2C;KHITAN SMALL SCRIPT CHARACTER-18C2C;Lo;0;L;;;;;N;;;;;
+18C2D;KHITAN SMALL SCRIPT CHARACTER-18C2D;Lo;0;L;;;;;N;;;;;
+18C2E;KHITAN SMALL SCRIPT CHARACTER-18C2E;Lo;0;L;;;;;N;;;;;
+18C2F;KHITAN SMALL SCRIPT CHARACTER-18C2F;Lo;0;L;;;;;N;;;;;
+18C30;KHITAN SMALL SCRIPT CHARACTER-18C30;Lo;0;L;;;;;N;;;;;
+18C31;KHITAN SMALL SCRIPT CHARACTER-18C31;Lo;0;L;;;;;N;;;;;
+18C32;KHITAN SMALL SCRIPT CHARACTER-18C32;Lo;0;L;;;;;N;;;;;
+18C33;KHITAN SMALL SCRIPT CHARACTER-18C33;Lo;0;L;;;;;N;;;;;
+18C34;KHITAN SMALL SCRIPT CHARACTER-18C34;Lo;0;L;;;;;N;;;;;
+18C35;KHITAN SMALL SCRIPT CHARACTER-18C35;Lo;0;L;;;;;N;;;;;
+18C36;KHITAN SMALL SCRIPT CHARACTER-18C36;Lo;0;L;;;;;N;;;;;
+18C37;KHITAN SMALL SCRIPT CHARACTER-18C37;Lo;0;L;;;;;N;;;;;
+18C38;KHITAN SMALL SCRIPT CHARACTER-18C38;Lo;0;L;;;;;N;;;;;
+18C39;KHITAN SMALL SCRIPT CHARACTER-18C39;Lo;0;L;;;;;N;;;;;
+18C3A;KHITAN SMALL SCRIPT CHARACTER-18C3A;Lo;0;L;;;;;N;;;;;
+18C3B;KHITAN SMALL SCRIPT CHARACTER-18C3B;Lo;0;L;;;;;N;;;;;
+18C3C;KHITAN SMALL SCRIPT CHARACTER-18C3C;Lo;0;L;;;;;N;;;;;
+18C3D;KHITAN SMALL SCRIPT CHARACTER-18C3D;Lo;0;L;;;;;N;;;;;
+18C3E;KHITAN SMALL SCRIPT CHARACTER-18C3E;Lo;0;L;;;;;N;;;;;
+18C3F;KHITAN SMALL SCRIPT CHARACTER-18C3F;Lo;0;L;;;;;N;;;;;
+18C40;KHITAN SMALL SCRIPT CHARACTER-18C40;Lo;0;L;;;;;N;;;;;
+18C41;KHITAN SMALL SCRIPT CHARACTER-18C41;Lo;0;L;;;;;N;;;;;
+18C42;KHITAN SMALL SCRIPT CHARACTER-18C42;Lo;0;L;;;;;N;;;;;
+18C43;KHITAN SMALL SCRIPT CHARACTER-18C43;Lo;0;L;;;;;N;;;;;
+18C44;KHITAN SMALL SCRIPT CHARACTER-18C44;Lo;0;L;;;;;N;;;;;
+18C45;KHITAN SMALL SCRIPT CHARACTER-18C45;Lo;0;L;;;;;N;;;;;
+18C46;KHITAN SMALL SCRIPT CHARACTER-18C46;Lo;0;L;;;;;N;;;;;
+18C47;KHITAN SMALL SCRIPT CHARACTER-18C47;Lo;0;L;;;;;N;;;;;
+18C48;KHITAN SMALL SCRIPT CHARACTER-18C48;Lo;0;L;;;;;N;;;;;
+18C49;KHITAN SMALL SCRIPT CHARACTER-18C49;Lo;0;L;;;;;N;;;;;
+18C4A;KHITAN SMALL SCRIPT CHARACTER-18C4A;Lo;0;L;;;;;N;;;;;
+18C4B;KHITAN SMALL SCRIPT CHARACTER-18C4B;Lo;0;L;;;;;N;;;;;
+18C4C;KHITAN SMALL SCRIPT CHARACTER-18C4C;Lo;0;L;;;;;N;;;;;
+18C4D;KHITAN SMALL SCRIPT CHARACTER-18C4D;Lo;0;L;;;;;N;;;;;
+18C4E;KHITAN SMALL SCRIPT CHARACTER-18C4E;Lo;0;L;;;;;N;;;;;
+18C4F;KHITAN SMALL SCRIPT CHARACTER-18C4F;Lo;0;L;;;;;N;;;;;
+18C50;KHITAN SMALL SCRIPT CHARACTER-18C50;Lo;0;L;;;;;N;;;;;
+18C51;KHITAN SMALL SCRIPT CHARACTER-18C51;Lo;0;L;;;;;N;;;;;
+18C52;KHITAN SMALL SCRIPT CHARACTER-18C52;Lo;0;L;;;;;N;;;;;
+18C53;KHITAN SMALL SCRIPT CHARACTER-18C53;Lo;0;L;;;;;N;;;;;
+18C54;KHITAN SMALL SCRIPT CHARACTER-18C54;Lo;0;L;;;;;N;;;;;
+18C55;KHITAN SMALL SCRIPT CHARACTER-18C55;Lo;0;L;;;;;N;;;;;
+18C56;KHITAN SMALL SCRIPT CHARACTER-18C56;Lo;0;L;;;;;N;;;;;
+18C57;KHITAN SMALL SCRIPT CHARACTER-18C57;Lo;0;L;;;;;N;;;;;
+18C58;KHITAN SMALL SCRIPT CHARACTER-18C58;Lo;0;L;;;;;N;;;;;
+18C59;KHITAN SMALL SCRIPT CHARACTER-18C59;Lo;0;L;;;;;N;;;;;
+18C5A;KHITAN SMALL SCRIPT CHARACTER-18C5A;Lo;0;L;;;;;N;;;;;
+18C5B;KHITAN SMALL SCRIPT CHARACTER-18C5B;Lo;0;L;;;;;N;;;;;
+18C5C;KHITAN SMALL SCRIPT CHARACTER-18C5C;Lo;0;L;;;;;N;;;;;
+18C5D;KHITAN SMALL SCRIPT CHARACTER-18C5D;Lo;0;L;;;;;N;;;;;
+18C5E;KHITAN SMALL SCRIPT CHARACTER-18C5E;Lo;0;L;;;;;N;;;;;
+18C5F;KHITAN SMALL SCRIPT CHARACTER-18C5F;Lo;0;L;;;;;N;;;;;
+18C60;KHITAN SMALL SCRIPT CHARACTER-18C60;Lo;0;L;;;;;N;;;;;
+18C61;KHITAN SMALL SCRIPT CHARACTER-18C61;Lo;0;L;;;;;N;;;;;
+18C62;KHITAN SMALL SCRIPT CHARACTER-18C62;Lo;0;L;;;;;N;;;;;
+18C63;KHITAN SMALL SCRIPT CHARACTER-18C63;Lo;0;L;;;;;N;;;;;
+18C64;KHITAN SMALL SCRIPT CHARACTER-18C64;Lo;0;L;;;;;N;;;;;
+18C65;KHITAN SMALL SCRIPT CHARACTER-18C65;Lo;0;L;;;;;N;;;;;
+18C66;KHITAN SMALL SCRIPT CHARACTER-18C66;Lo;0;L;;;;;N;;;;;
+18C67;KHITAN SMALL SCRIPT CHARACTER-18C67;Lo;0;L;;;;;N;;;;;
+18C68;KHITAN SMALL SCRIPT CHARACTER-18C68;Lo;0;L;;;;;N;;;;;
+18C69;KHITAN SMALL SCRIPT CHARACTER-18C69;Lo;0;L;;;;;N;;;;;
+18C6A;KHITAN SMALL SCRIPT CHARACTER-18C6A;Lo;0;L;;;;;N;;;;;
+18C6B;KHITAN SMALL SCRIPT CHARACTER-18C6B;Lo;0;L;;;;;N;;;;;
+18C6C;KHITAN SMALL SCRIPT CHARACTER-18C6C;Lo;0;L;;;;;N;;;;;
+18C6D;KHITAN SMALL SCRIPT CHARACTER-18C6D;Lo;0;L;;;;;N;;;;;
+18C6E;KHITAN SMALL SCRIPT CHARACTER-18C6E;Lo;0;L;;;;;N;;;;;
+18C6F;KHITAN SMALL SCRIPT CHARACTER-18C6F;Lo;0;L;;;;;N;;;;;
+18C70;KHITAN SMALL SCRIPT CHARACTER-18C70;Lo;0;L;;;;;N;;;;;
+18C71;KHITAN SMALL SCRIPT CHARACTER-18C71;Lo;0;L;;;;;N;;;;;
+18C72;KHITAN SMALL SCRIPT CHARACTER-18C72;Lo;0;L;;;;;N;;;;;
+18C73;KHITAN SMALL SCRIPT CHARACTER-18C73;Lo;0;L;;;;;N;;;;;
+18C74;KHITAN SMALL SCRIPT CHARACTER-18C74;Lo;0;L;;;;;N;;;;;
+18C75;KHITAN SMALL SCRIPT CHARACTER-18C75;Lo;0;L;;;;;N;;;;;
+18C76;KHITAN SMALL SCRIPT CHARACTER-18C76;Lo;0;L;;;;;N;;;;;
+18C77;KHITAN SMALL SCRIPT CHARACTER-18C77;Lo;0;L;;;;;N;;;;;
+18C78;KHITAN SMALL SCRIPT CHARACTER-18C78;Lo;0;L;;;;;N;;;;;
+18C79;KHITAN SMALL SCRIPT CHARACTER-18C79;Lo;0;L;;;;;N;;;;;
+18C7A;KHITAN SMALL SCRIPT CHARACTER-18C7A;Lo;0;L;;;;;N;;;;;
+18C7B;KHITAN SMALL SCRIPT CHARACTER-18C7B;Lo;0;L;;;;;N;;;;;
+18C7C;KHITAN SMALL SCRIPT CHARACTER-18C7C;Lo;0;L;;;;;N;;;;;
+18C7D;KHITAN SMALL SCRIPT CHARACTER-18C7D;Lo;0;L;;;;;N;;;;;
+18C7E;KHITAN SMALL SCRIPT CHARACTER-18C7E;Lo;0;L;;;;;N;;;;;
+18C7F;KHITAN SMALL SCRIPT CHARACTER-18C7F;Lo;0;L;;;;;N;;;;;
+18C80;KHITAN SMALL SCRIPT CHARACTER-18C80;Lo;0;L;;;;;N;;;;;
+18C81;KHITAN SMALL SCRIPT CHARACTER-18C81;Lo;0;L;;;;;N;;;;;
+18C82;KHITAN SMALL SCRIPT CHARACTER-18C82;Lo;0;L;;;;;N;;;;;
+18C83;KHITAN SMALL SCRIPT CHARACTER-18C83;Lo;0;L;;;;;N;;;;;
+18C84;KHITAN SMALL SCRIPT CHARACTER-18C84;Lo;0;L;;;;;N;;;;;
+18C85;KHITAN SMALL SCRIPT CHARACTER-18C85;Lo;0;L;;;;;N;;;;;
+18C86;KHITAN SMALL SCRIPT CHARACTER-18C86;Lo;0;L;;;;;N;;;;;
+18C87;KHITAN SMALL SCRIPT CHARACTER-18C87;Lo;0;L;;;;;N;;;;;
+18C88;KHITAN SMALL SCRIPT CHARACTER-18C88;Lo;0;L;;;;;N;;;;;
+18C89;KHITAN SMALL SCRIPT CHARACTER-18C89;Lo;0;L;;;;;N;;;;;
+18C8A;KHITAN SMALL SCRIPT CHARACTER-18C8A;Lo;0;L;;;;;N;;;;;
+18C8B;KHITAN SMALL SCRIPT CHARACTER-18C8B;Lo;0;L;;;;;N;;;;;
+18C8C;KHITAN SMALL SCRIPT CHARACTER-18C8C;Lo;0;L;;;;;N;;;;;
+18C8D;KHITAN SMALL SCRIPT CHARACTER-18C8D;Lo;0;L;;;;;N;;;;;
+18C8E;KHITAN SMALL SCRIPT CHARACTER-18C8E;Lo;0;L;;;;;N;;;;;
+18C8F;KHITAN SMALL SCRIPT CHARACTER-18C8F;Lo;0;L;;;;;N;;;;;
+18C90;KHITAN SMALL SCRIPT CHARACTER-18C90;Lo;0;L;;;;;N;;;;;
+18C91;KHITAN SMALL SCRIPT CHARACTER-18C91;Lo;0;L;;;;;N;;;;;
+18C92;KHITAN SMALL SCRIPT CHARACTER-18C92;Lo;0;L;;;;;N;;;;;
+18C93;KHITAN SMALL SCRIPT CHARACTER-18C93;Lo;0;L;;;;;N;;;;;
+18C94;KHITAN SMALL SCRIPT CHARACTER-18C94;Lo;0;L;;;;;N;;;;;
+18C95;KHITAN SMALL SCRIPT CHARACTER-18C95;Lo;0;L;;;;;N;;;;;
+18C96;KHITAN SMALL SCRIPT CHARACTER-18C96;Lo;0;L;;;;;N;;;;;
+18C97;KHITAN SMALL SCRIPT CHARACTER-18C97;Lo;0;L;;;;;N;;;;;
+18C98;KHITAN SMALL SCRIPT CHARACTER-18C98;Lo;0;L;;;;;N;;;;;
+18C99;KHITAN SMALL SCRIPT CHARACTER-18C99;Lo;0;L;;;;;N;;;;;
+18C9A;KHITAN SMALL SCRIPT CHARACTER-18C9A;Lo;0;L;;;;;N;;;;;
+18C9B;KHITAN SMALL SCRIPT CHARACTER-18C9B;Lo;0;L;;;;;N;;;;;
+18C9C;KHITAN SMALL SCRIPT CHARACTER-18C9C;Lo;0;L;;;;;N;;;;;
+18C9D;KHITAN SMALL SCRIPT CHARACTER-18C9D;Lo;0;L;;;;;N;;;;;
+18C9E;KHITAN SMALL SCRIPT CHARACTER-18C9E;Lo;0;L;;;;;N;;;;;
+18C9F;KHITAN SMALL SCRIPT CHARACTER-18C9F;Lo;0;L;;;;;N;;;;;
+18CA0;KHITAN SMALL SCRIPT CHARACTER-18CA0;Lo;0;L;;;;;N;;;;;
+18CA1;KHITAN SMALL SCRIPT CHARACTER-18CA1;Lo;0;L;;;;;N;;;;;
+18CA2;KHITAN SMALL SCRIPT CHARACTER-18CA2;Lo;0;L;;;;;N;;;;;
+18CA3;KHITAN SMALL SCRIPT CHARACTER-18CA3;Lo;0;L;;;;;N;;;;;
+18CA4;KHITAN SMALL SCRIPT CHARACTER-18CA4;Lo;0;L;;;;;N;;;;;
+18CA5;KHITAN SMALL SCRIPT CHARACTER-18CA5;Lo;0;L;;;;;N;;;;;
+18CA6;KHITAN SMALL SCRIPT CHARACTER-18CA6;Lo;0;L;;;;;N;;;;;
+18CA7;KHITAN SMALL SCRIPT CHARACTER-18CA7;Lo;0;L;;;;;N;;;;;
+18CA8;KHITAN SMALL SCRIPT CHARACTER-18CA8;Lo;0;L;;;;;N;;;;;
+18CA9;KHITAN SMALL SCRIPT CHARACTER-18CA9;Lo;0;L;;;;;N;;;;;
+18CAA;KHITAN SMALL SCRIPT CHARACTER-18CAA;Lo;0;L;;;;;N;;;;;
+18CAB;KHITAN SMALL SCRIPT CHARACTER-18CAB;Lo;0;L;;;;;N;;;;;
+18CAC;KHITAN SMALL SCRIPT CHARACTER-18CAC;Lo;0;L;;;;;N;;;;;
+18CAD;KHITAN SMALL SCRIPT CHARACTER-18CAD;Lo;0;L;;;;;N;;;;;
+18CAE;KHITAN SMALL SCRIPT CHARACTER-18CAE;Lo;0;L;;;;;N;;;;;
+18CAF;KHITAN SMALL SCRIPT CHARACTER-18CAF;Lo;0;L;;;;;N;;;;;
+18CB0;KHITAN SMALL SCRIPT CHARACTER-18CB0;Lo;0;L;;;;;N;;;;;
+18CB1;KHITAN SMALL SCRIPT CHARACTER-18CB1;Lo;0;L;;;;;N;;;;;
+18CB2;KHITAN SMALL SCRIPT CHARACTER-18CB2;Lo;0;L;;;;;N;;;;;
+18CB3;KHITAN SMALL SCRIPT CHARACTER-18CB3;Lo;0;L;;;;;N;;;;;
+18CB4;KHITAN SMALL SCRIPT CHARACTER-18CB4;Lo;0;L;;;;;N;;;;;
+18CB5;KHITAN SMALL SCRIPT CHARACTER-18CB5;Lo;0;L;;;;;N;;;;;
+18CB6;KHITAN SMALL SCRIPT CHARACTER-18CB6;Lo;0;L;;;;;N;;;;;
+18CB7;KHITAN SMALL SCRIPT CHARACTER-18CB7;Lo;0;L;;;;;N;;;;;
+18CB8;KHITAN SMALL SCRIPT CHARACTER-18CB8;Lo;0;L;;;;;N;;;;;
+18CB9;KHITAN SMALL SCRIPT CHARACTER-18CB9;Lo;0;L;;;;;N;;;;;
+18CBA;KHITAN SMALL SCRIPT CHARACTER-18CBA;Lo;0;L;;;;;N;;;;;
+18CBB;KHITAN SMALL SCRIPT CHARACTER-18CBB;Lo;0;L;;;;;N;;;;;
+18CBC;KHITAN SMALL SCRIPT CHARACTER-18CBC;Lo;0;L;;;;;N;;;;;
+18CBD;KHITAN SMALL SCRIPT CHARACTER-18CBD;Lo;0;L;;;;;N;;;;;
+18CBE;KHITAN SMALL SCRIPT CHARACTER-18CBE;Lo;0;L;;;;;N;;;;;
+18CBF;KHITAN SMALL SCRIPT CHARACTER-18CBF;Lo;0;L;;;;;N;;;;;
+18CC0;KHITAN SMALL SCRIPT CHARACTER-18CC0;Lo;0;L;;;;;N;;;;;
+18CC1;KHITAN SMALL SCRIPT CHARACTER-18CC1;Lo;0;L;;;;;N;;;;;
+18CC2;KHITAN SMALL SCRIPT CHARACTER-18CC2;Lo;0;L;;;;;N;;;;;
+18CC3;KHITAN SMALL SCRIPT CHARACTER-18CC3;Lo;0;L;;;;;N;;;;;
+18CC4;KHITAN SMALL SCRIPT CHARACTER-18CC4;Lo;0;L;;;;;N;;;;;
+18CC5;KHITAN SMALL SCRIPT CHARACTER-18CC5;Lo;0;L;;;;;N;;;;;
+18CC6;KHITAN SMALL SCRIPT CHARACTER-18CC6;Lo;0;L;;;;;N;;;;;
+18CC7;KHITAN SMALL SCRIPT CHARACTER-18CC7;Lo;0;L;;;;;N;;;;;
+18CC8;KHITAN SMALL SCRIPT CHARACTER-18CC8;Lo;0;L;;;;;N;;;;;
+18CC9;KHITAN SMALL SCRIPT CHARACTER-18CC9;Lo;0;L;;;;;N;;;;;
+18CCA;KHITAN SMALL SCRIPT CHARACTER-18CCA;Lo;0;L;;;;;N;;;;;
+18CCB;KHITAN SMALL SCRIPT CHARACTER-18CCB;Lo;0;L;;;;;N;;;;;
+18CCC;KHITAN SMALL SCRIPT CHARACTER-18CCC;Lo;0;L;;;;;N;;;;;
+18CCD;KHITAN SMALL SCRIPT CHARACTER-18CCD;Lo;0;L;;;;;N;;;;;
+18CCE;KHITAN SMALL SCRIPT CHARACTER-18CCE;Lo;0;L;;;;;N;;;;;
+18CCF;KHITAN SMALL SCRIPT CHARACTER-18CCF;Lo;0;L;;;;;N;;;;;
+18CD0;KHITAN SMALL SCRIPT CHARACTER-18CD0;Lo;0;L;;;;;N;;;;;
+18CD1;KHITAN SMALL SCRIPT CHARACTER-18CD1;Lo;0;L;;;;;N;;;;;
+18CD2;KHITAN SMALL SCRIPT CHARACTER-18CD2;Lo;0;L;;;;;N;;;;;
+18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;;
+18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;;
+18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;;
+18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;;
+18D08;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;;
1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
@@ -29973,6 +30651,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F10A;DIGIT NINE COMMA;No;0;EN;<compat> 0039 002C;;9;9;N;;;;;
1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;
1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;
+1F10D;CIRCLED ZERO WITH SLASH;So;0;ON;;;;;N;;;;;
+1F10E;CIRCLED ANTICLOCKWISE ARROW;So;0;ON;;;;;N;;;;;
+1F10F;CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;;
1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L;<compat> 0028 0041 0029;;;;N;;;;;
1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L;<compat> 0028 0042 0029;;;;N;;;;;
1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L;<compat> 0028 0043 0029;;;;N;;;;;
@@ -30066,6 +30747,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F16A;RAISED MC SIGN;So;0;ON;<super> 004D 0043;;;;N;;;;;
1F16B;RAISED MD SIGN;So;0;ON;<super> 004D 0044;;;;N;;;;;
1F16C;RAISED MR SIGN;So;0;ON;<super> 004D 0052;;;;N;;;;;
+1F16D;CIRCLED CC;So;0;ON;;;;;N;;;;;
+1F16E;CIRCLED C WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;;
+1F16F;CIRCLED HUMAN FIGURE;So;0;ON;;;;;N;;;;;
1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
@@ -30127,6 +30811,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;;
1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;;
1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;;
+1F1AD;MASK WORK SYMBOL;So;0;ON;;;;;N;;;;;
1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;;
1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;;
1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;;
@@ -31199,6 +31884,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6D3;STUPA;So;0;ON;;;;;N;;;;;
1F6D4;PAGODA;So;0;ON;;;;;N;;;;;
1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
+1F6D6;HUT;So;0;ON;;;;;N;;;;;
+1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -31223,6 +31910,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;
1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;;
+1F6FB;PICKUP TRUCK;So;0;ON;;;;;N;;;;;
+1F6FC;ROLLER SKATE;So;0;ON;;;;;N;;;;;
1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
@@ -31588,6 +32277,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;
1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;
+1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;;
+1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;;
1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;
1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;;
@@ -31600,6 +32291,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;;
1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;;
1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;;
+1F90C;PINCHED FINGERS;So;0;ON;;;;;N;;;;;
1F90D;WHITE HEART;So;0;ON;;;;;N;;;;;
1F90E;BROWN HEART;So;0;ON;;;;;N;;;;;
1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;;
@@ -31701,10 +32393,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F96F;BAGEL;So;0;ON;;;;;N;;;;;
1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;;
1F971;YAWNING FACE;So;0;ON;;;;;N;;;;;
+1F972;SMILING FACE WITH TEAR;So;0;ON;;;;;N;;;;;
1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;
1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;
1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;;
1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
+1F977;NINJA;So;0;ON;;;;;N;;;;;
+1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;
1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
1F97B;SARI;So;0;ON;;;;;N;;;;;
1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
@@ -31746,12 +32441,17 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F9A0;MICROBE;So;0;ON;;;;;N;;;;;
1F9A1;BADGER;So;0;ON;;;;;N;;;;;
1F9A2;SWAN;So;0;ON;;;;;N;;;;;
+1F9A3;MAMMOTH;So;0;ON;;;;;N;;;;;
+1F9A4;DODO;So;0;ON;;;;;N;;;;;
1F9A5;SLOTH;So;0;ON;;;;;N;;;;;
1F9A6;OTTER;So;0;ON;;;;;N;;;;;
1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;;
1F9A8;SKUNK;So;0;ON;;;;;N;;;;;
1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;;
1F9AA;OYSTER;So;0;ON;;;;;N;;;;;
+1F9AB;BEAVER;So;0;ON;;;;;N;;;;;
+1F9AC;BISON;So;0;ON;;;;;N;;;;;
+1F9AD;SEAL;So;0;ON;;;;;N;;;;;
1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;;
1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;;
1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;;
@@ -31781,6 +32481,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F9C8;BUTTER;So;0;ON;;;;;N;;;;;
1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;
1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
+1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;
1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
@@ -31934,20 +32635,273 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;;
1FA72;BRIEFS;So;0;ON;;;;;N;;;;;
1FA73;SHORTS;So;0;ON;;;;;N;;;;;
+1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;;
1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
1FA80;YO-YO;So;0;ON;;;;;N;;;;;
1FA81;KITE;So;0;ON;;;;;N;;;;;
1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
+1FA83;BOOMERANG;So;0;ON;;;;;N;;;;;
+1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;;
+1FA85;PINATA;So;0;ON;;;;;N;;;;;
+1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;;
1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;;
1FA91;CHAIR;So;0;ON;;;;;N;;;;;
1FA92;RAZOR;So;0;ON;;;;;N;;;;;
1FA93;AXE;So;0;ON;;;;;N;;;;;
1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;;
1FA95;BANJO;So;0;ON;;;;;N;;;;;
+1FA96;MILITARY HELMET;So;0;ON;;;;;N;;;;;
+1FA97;ACCORDION;So;0;ON;;;;;N;;;;;
+1FA98;LONG DRUM;So;0;ON;;;;;N;;;;;
+1FA99;COIN;So;0;ON;;;;;N;;;;;
+1FA9A;CARPENTRY SAW;So;0;ON;;;;;N;;;;;
+1FA9B;SCREWDRIVER;So;0;ON;;;;;N;;;;;
+1FA9C;LADDER;So;0;ON;;;;;N;;;;;
+1FA9D;HOOK;So;0;ON;;;;;N;;;;;
+1FA9E;MIRROR;So;0;ON;;;;;N;;;;;
+1FA9F;WINDOW;So;0;ON;;;;;N;;;;;
+1FAA0;PLUNGER;So;0;ON;;;;;N;;;;;
+1FAA1;SEWING NEEDLE;So;0;ON;;;;;N;;;;;
+1FAA2;KNOT;So;0;ON;;;;;N;;;;;
+1FAA3;BUCKET;So;0;ON;;;;;N;;;;;
+1FAA4;MOUSE TRAP;So;0;ON;;;;;N;;;;;
+1FAA5;TOOTHBRUSH;So;0;ON;;;;;N;;;;;
+1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;
+1FAA7;PLACARD;So;0;ON;;;;;N;;;;;
+1FAA8;ROCK;So;0;ON;;;;;N;;;;;
+1FAB0;FLY;So;0;ON;;;;;N;;;;;
+1FAB1;WORM;So;0;ON;;;;;N;;;;;
+1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
+1FAB3;COCKROACH;So;0;ON;;;;;N;;;;;
+1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;
+1FAB5;WOOD;So;0;ON;;;;;N;;;;;
+1FAB6;FEATHER;So;0;ON;;;;;N;;;;;
+1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
+1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
+1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
+1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
+1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
+1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
+1FAD3;FLATBREAD;So;0;ON;;;;;N;;;;;
+1FAD4;TAMALE;So;0;ON;;;;;N;;;;;
+1FAD5;FONDUE;So;0;ON;;;;;N;;;;;
+1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;
+1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;
+1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;
+1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;
+1FB03;BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;;
+1FB04;BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;;
+1FB05;BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;;
+1FB06;BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;;
+1FB07;BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;;
+1FB08;BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;;
+1FB09;BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;;
+1FB0A;BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;;
+1FB0B;BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;;
+1FB0C;BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;;
+1FB0D;BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;;
+1FB0E;BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;;
+1FB0F;BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;;
+1FB10;BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;;
+1FB11;BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;;
+1FB12;BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;;
+1FB13;BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;;
+1FB14;BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;;
+1FB15;BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;;
+1FB16;BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;;
+1FB17;BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;;
+1FB18;BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;;
+1FB19;BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;;
+1FB1A;BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;;
+1FB1B;BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;;
+1FB1C;BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;;
+1FB1D;BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;;
+1FB1E;BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;;
+1FB1F;BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;;
+1FB20;BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;;
+1FB21;BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;;
+1FB22;BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;;
+1FB23;BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;;
+1FB24;BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;;
+1FB25;BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;;
+1FB26;BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;;
+1FB27;BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;;
+1FB28;BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;;
+1FB29;BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;;
+1FB2A;BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;;
+1FB2B;BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;;
+1FB2C;BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;;
+1FB2D;BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;;
+1FB2E;BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;;
+1FB2F;BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;;
+1FB30;BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;;
+1FB31;BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;;
+1FB32;BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;;
+1FB33;BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;;
+1FB34;BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;;
+1FB35;BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;;
+1FB36;BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;;
+1FB37;BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;;
+1FB38;BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;;
+1FB39;BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;;
+1FB3A;BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;;
+1FB3B;BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;;
+1FB3C;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB3D;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB3E;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB3F;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB40;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB41;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB42;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB43;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB44;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB45;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB46;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB47;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB48;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB49;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4A;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4B;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB4C;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4D;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4E;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4F;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB50;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB51;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB52;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB53;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB54;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB55;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB56;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB57;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB58;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB59;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB5A;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB5B;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB5C;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB5D;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB5E;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB5F;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB60;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB61;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB62;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB63;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB64;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB65;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB66;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB67;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB68;UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB69;LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB6A;UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB6B;LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB6C;LEFT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB6D;UPPER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB6E;RIGHT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB6F;LOWER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB70;VERTICAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;;
+1FB71;VERTICAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;;
+1FB72;VERTICAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;;
+1FB73;VERTICAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;;
+1FB74;VERTICAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;;
+1FB75;VERTICAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;;
+1FB76;HORIZONTAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;;
+1FB77;HORIZONTAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;;
+1FB78;HORIZONTAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;;
+1FB79;HORIZONTAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;;
+1FB7A;HORIZONTAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;;
+1FB7B;HORIZONTAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;;
+1FB7C;LEFT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB7D;LEFT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB7E;RIGHT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB7F;RIGHT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB80;UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB81;HORIZONTAL ONE EIGHTH BLOCK-1358;So;0;ON;;;;;N;;;;;
+1FB82;UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB83;UPPER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB84;UPPER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB85;UPPER THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB86;UPPER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB87;RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB88;RIGHT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB89;RIGHT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB8A;RIGHT THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB8B;RIGHT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB8C;LEFT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB8D;RIGHT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB8E;UPPER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB8F;LOWER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB90;INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB91;UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB92;UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB94;LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB95;CHECKER BOARD FILL;So;0;ON;;;;;N;;;;;
+1FB96;INVERSE CHECKER BOARD FILL;So;0;ON;;;;;N;;;;;
+1FB97;HEAVY HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+1FB98;UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+1FB99;UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+1FB9A;UPPER AND LOWER TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB9B;LEFT AND RIGHT TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB9C;UPPER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB9D;UPPER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB9E;LOWER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB9F;LOWER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FBA0;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;
+1FBA1;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBA2;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA4;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA6;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBA7;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBA8;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA9;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBAA;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;
+1FBAB;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBAC;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBAD;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBAE;BOX DRAWINGS LIGHT DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;;
+1FBAF;BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE;So;0;ON;;;;;N;;;;;
+1FBB0;ARROWHEAD-SHAPED POINTER;So;0;ON;;;;;N;;;;;
+1FBB1;INVERSE CHECK MARK;So;0;ON;;;;;N;;;;;
+1FBB2;LEFT HALF RUNNING MAN;So;0;ON;;;;;N;;;;;
+1FBB3;RIGHT HALF RUNNING MAN;So;0;ON;;;;;N;;;;;
+1FBB4;INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;;;;;
+1FBB5;LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB6;RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB7;DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB8;UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB9;LEFT HALF FOLDER;So;0;ON;;;;;N;;;;;
+1FBBA;RIGHT HALF FOLDER;So;0;ON;;;;;N;;;;;
+1FBBB;VOIDED GREEK CROSS;So;0;ON;;;;;N;;;;;
+1FBBC;RIGHT OPEN SQUARED DOT;So;0;ON;;;;;N;;;;;
+1FBBD;NEGATIVE DIAGONAL CROSS;So;0;ON;;;;;N;;;;;
+1FBBE;NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBBF;NEGATIVE DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;;
+1FBC0;WHITE HEAVY SALTIRE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+1FBC1;LEFT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1FBC2;MIDDLE THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1FBC3;RIGHT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1FBC4;NEGATIVE SQUARED QUESTION MARK;So;0;ON;;;;;N;;;;;
+1FBC5;STICK FIGURE;So;0;ON;;;;;N;;;;;
+1FBC6;STICK FIGURE WITH ARMS RAISED;So;0;ON;;;;;N;;;;;
+1FBC7;STICK FIGURE LEANING LEFT;So;0;ON;;;;;N;;;;;
+1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;;
+1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;;
+1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;;
+1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1FBF3;SEGMENTED DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1FBF4;SEGMENTED DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1FBF5;SEGMENTED DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1FBF6;SEGMENTED DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
-2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A6DD;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
@@ -32498,6 +33452,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+30000;<CJK Ideograph Extension G, First>;Lo;0;L;;;;;N;;;;;
+3134A;<CJK Ideograph Extension G, Last>;Lo;0;L;;;;;N;;;;;
E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt b/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
index 833868fb96d..9e7bd1ebc1b 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
@@ -49,6 +49,327 @@ For new script codes see http://www.unicode.org/iso15924/codechanges.html
---------------------------------------------------------------------------- ***
+Unicode 13.0 update for ICU 66
+
+https://www.unicode.org/versions/Unicode13.0.0/
+https://www.unicode.org/versions/beta-13.0.0.html
+https://www.unicode.org/Public/13.0.0/ucd/
+https://www.unicode.org/reports/uax-proposed-updates.html
+https://www.unicode.org/reports/tr44/tr44-25.html
+
+https://unicode-org.atlassian.net/browse/CLDR-13387
+https://unicode-org.atlassian.net/browse/ICU-20893
+
+* Command-line environment setup
+
+UNICODE_DATA=~/unidata/uni13/20200212
+CLDR_SRC=~/cldr/uni/src
+ICU_ROOT=~/icu/uni
+ICU_SRC=$ICU_ROOT/src
+ICUDT=icudt66b
+ICU4C_DATA_IN=$ICU_SRC/icu4c/source/data/in
+ICU4C_UNIDATA=$ICU_SRC/icu4c/source/data/unidata
+export LD_LIBRARY_PATH=$ICU_ROOT/dbg/icu4c/lib
+
+*** Unicode version numbers
+- makedata.mak
+- uchar.h
+- com.ibm.icu.util.VersionInfo
+- com.ibm.icu.dev.test.lang.UCharacterTest.VERSION_
+
+- Run ICU4C "configure" _after_ updating the Unicode version number in uchar.h
+ so that the makefiles see the new version number.
+ cd $ICU_ROOT/dbg/icu4c
+ ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ../../../doconfig-clang-dbg.sh
+
+*** data files & enums & parser code
+
+* download files
+- mkdir -p $UNICODE_DATA
+- download Unicode files into $UNICODE_DATA
+ + subfolders: emoji, idna, security, ucd, uca
+ + inside ucd: extract Unihan.zip to "here" (.../ucd/Unihan/*.txt), delete Unihan.zip
+ + split Unihan into single-property files
+ ~/unitools/trunk/src$ py/splitunihan.py $UNICODE_DATA/ucd/Unihan
+ + get GraphemeBreakTest-cldr.txt from $CLDR_SRC/common/properties/segments/GraphemeBreakTest.txt
+ or from the ucd/cldr/ output folder of the Unicode Tools:
+ Since Unicode 12/CLDR 35/ICU 64 CLDR uses modified break rules.
+ cp $CLDR_SRC/common/properties/segments/GraphemeBreakTest.txt icu4c/source/test/testdata
+
+* for manual diffs and for Unicode Tools input data updates:
+ remove version suffixes from the file names
+ ~$ unidata/desuffixucd.py $UNICODE_DATA
+ (see https://sites.google.com/site/unicodetools/inputdata)
+
+* process and/or copy files
+- $ICU_SRC/tools/unicode$ py/preparseucd.py $UNICODE_DATA $ICU_SRC
+ + This writes files (especially ppucd.txt) to the ICU4C unidata and testdata subfolders.
+ + For debugging, and tweaking how ppucd.txt is written,
+ the tool has an --only_ppucd option:
+ py/preparseucd.py $UNICODE_DATA --only_ppucd path/to/ppucd/outputfile
+
+- cp -v $UNICODE_DATA/security/confusables.txt $ICU4C_UNIDATA
+
+* new constants for new property values
+- preparseucd.py error:
+ ValueError: missing uchar.h enum constants for some property values:
+ [(u'blk', set([u'Symbols_For_Legacy_Computing', u'Dives_Akuru', u'Yezidi',
+ u'Tangut_Sup', u'CJK_Ext_G', u'Khitan_Small_Script', u'Chorasmian', u'Lisu_Sup'])),
+ (u'sc', set([u'Chrs', u'Diak', u'Kits', u'Yezi'])),
+ (u'InPC', set([u'Top_And_Bottom_And_Left']))]
+ = PropertyValueAliases.txt new property values (diff old & new .txt files)
+ blk; Chorasmian ; Chorasmian
+ blk; CJK_Ext_G ; CJK_Unified_Ideographs_Extension_G
+ blk; Dives_Akuru ; Dives_Akuru
+ blk; Khitan_Small_Script ; Khitan_Small_Script
+ blk; Lisu_Sup ; Lisu_Supplement
+ blk; Symbols_For_Legacy_Computing ; Symbols_For_Legacy_Computing
+ blk; Tangut_Sup ; Tangut_Supplement
+ blk; Yezidi ; Yezidi
+ -> add to uchar.h before UBLOCK_COUNT
+ use long property names for enum constants,
+ for the trailing comment get the block start code point: diff old & new Blocks.txt
+ -> add to UCharacter.UnicodeBlock IDs
+ Eclipse find UBLOCK_([^ ]+) = ([0-9]+), (/.+)
+ replace public static final int \1_ID = \2; \3
+ -> add to UCharacter.UnicodeBlock objects
+ Eclipse find UBLOCK_([^ ]+) = [0-9]+, (/.+)
+ replace public static final UnicodeBlock \1 = new UnicodeBlock("\1", \1_ID); \2
+
+ sc ; Chrs ; Chorasmian
+ sc ; Diak ; Dives_Akuru
+ sc ; Kits ; Khitan_Small_Script
+ sc ; Yezi ; Yezidi
+ -> uscript.h & com.ibm.icu.lang.UScript
+ -> fix expectedLong names in cucdapi.c/TestUScriptCodeAPI()
+ and in com.ibm.icu.dev.test.lang.TestUScript.java
+
+ InPC; Top_And_Bottom_And_Left ; Top_And_Bottom_And_Left
+ -> uchar.h enum UIndicPositionalCategory & UCharacter.java IndicPositionalCategory
+
+* update Script metadata: SCRIPT_PROPS[] in uscript_props.cpp & UScript.ScriptMetadata
+ (not strictly necessary for NOT_ENCODED scripts)
+ $ICU_SRC/tools/unicode$ py/parsescriptmetadata.py $ICU_SRC/icu4c/source/common/unicode/uscript.h $CLDR_SRC/common/properties/scriptMetadata.txt
+
+* build ICU (make install)
+ to make sure that there are no syntax errors, and
+ so that the tools build can pick up the new definitions from the installed header files.
+
+ $ICU_ROOT/dbg/icu4c$ echo;echo; date; make -j7 install &> out.txt ; tail -n 30 out.txt ; date
+
+* update spoof checker UnicodeSet initializers:
+ inclusionPat & recommendedPat in i18n/uspoof.cpp
+ INCLUSION & RECOMMENDED in SpoofChecker.java
+- make sure that the Unicode Tools tree contains the latest security data files
+- go to Unicode Tools org.unicode.text.tools.RecommendedSetGenerator
+- update the hardcoded version number there in the DIRECTORY path
+- run the tool (no special environment variables needed)
+- copy & paste from the Console output into the .cpp & .java files
+
+* generate normalization data files
+ cd $ICU_ROOT/dbg/icu4c
+ bin/gennorm2 -o $ICU_SRC/icu4c/source/common/norm2_nfc_data.h -s $ICU4C_UNIDATA/norm2 nfc.txt --csource
+ bin/gennorm2 -o $ICU4C_DATA_IN/nfc.nrm -s $ICU4C_UNIDATA/norm2 nfc.txt
+ bin/gennorm2 -o $ICU4C_DATA_IN/nfkc.nrm -s $ICU4C_UNIDATA/norm2 nfc.txt nfkc.txt
+ bin/gennorm2 -o $ICU4C_DATA_IN/nfkc_cf.nrm -s $ICU4C_UNIDATA/norm2 nfc.txt nfkc.txt nfkc_cf.txt
+ bin/gennorm2 -o $ICU4C_DATA_IN/uts46.nrm -s $ICU4C_UNIDATA/norm2 nfc.txt uts46.txt
+
+* build ICU (make install)
+ so that the tools build can pick up the new definitions from the installed header files.
+
+ $ICU_ROOT/dbg/icu4c$ echo;echo; make -j7 install &> out.txt ; tail -n 30 out.txt ; date
+
+* build Unicode tools using CMake+make
+
+$ICU_SRC/tools/unicode/c/icudefs.txt:
+
+# Location (--prefix) of where ICU was installed.
+set(ICU_INST_DIR /usr/local/google/home/mscherer/icu/mine/inst/icu4c)
+# Location of the ICU4C source tree.
+set(ICU4C_SRC_DIR /usr/local/google/home/mscherer/icu/uni/src/icu4c)
+
+ $ICU_ROOT/dbg$
+ mkdir -p tools/unicode/c
+ cd tools/unicode/c
+
+ $ICU_ROOT/dbg/tools/unicode/c$
+ cmake ../../../../src/tools/unicode/c
+ make
+
+* generate core properties data files
+ $ICU_ROOT/dbg/tools/unicode/c$
+ genprops/genprops $ICU_SRC/icu4c
+- tool failure:
+ genprops: Script_Extensions indexes overflow bit field
+ genprops: error parsing or setting values from ppucd.txt line 32696 - U_BUFFER_OVERFLOW_ERROR
+ -> uprops.icu data file format :
+ add two more bits to store a script code or Script_Extensions index
+ -> generator code, C++ & Java runtime, uprops.icu format version 7.7
+- rebuild ICU (make install) & tools
+
+* update uts46test.cpp and UTS46Test.java if there are new characters that are equivalent to
+ sequences with non-LDH ASCII (that is, their decompositions contain '=' or similar)
+- grep IdnaMappingTable.txt or uts46.txt for "disallowed_STD3_valid" on non-ASCII characters
+- Unicode 6.0..13.0: U+2260, U+226E, U+226F
+- nothing new in this Unicode version, no test file to update
+
+* run & fix ICU4C tests
+- fix Unicode Tools class Segmenter to generate correct *BreakTest.txt files
+- Andy helps with RBBI & spoof check test failures
+
+* collation: CLDR collation root, UCA DUCET
+
+- UCA DUCET goes into Mark's Unicode tools, see
+ https://sites.google.com/site/unicodetools/home#TOC-UCA
+ diff the main mapping file, look for bad changes
+ (for example, more bytes per weight for common characters)
+ ~/svn.unitools/trunk$ sed -r -f ~/cldr/uni/src/tools/scripts/uca/blankweights.sed ../Generated/UCA/13.0.0/CollationAuxiliary/FractionalUCA.txt > ../frac-13.0.txt
+ ~/svn.unitools/trunk$ meld ../frac-12.1.txt ../frac-13.0.txt
+
+- CLDR root data files are checked into $CLDR_SRC/common/uca/
+ cp (Unicode Tools UCA generated)/CollationAuxiliary/* $CLDR_SRC/common/uca/
+
+- update source/data/unidata/FractionalUCA.txt with FractionalUCA_SHORT.txt
+ cp -v $CLDR_SRC/common/uca/FractionalUCA_SHORT.txt $ICU4C_UNIDATA/FractionalUCA.txt
+- update source/data/unidata/UCARules.txt with UCA_Rules_SHORT.txt
+ cp -v $ICU4C_UNIDATA/UCARules.txt /tmp/UCARules-old.txt
+ (note removing the underscore before "Rules")
+ cp -v $CLDR_SRC/common/uca/UCA_Rules_SHORT.txt $ICU4C_UNIDATA/UCARules.txt
+- restore TODO diffs in UCARules.txt
+ meld /tmp/UCARules-old.txt $ICU4C_UNIDATA/UCARules.txt
+- update (ICU4C)/source/test/testdata/CollationTest_*.txt
+ and (ICU4J)/main/tests/collate/src/com/ibm/icu/dev/data/CollationTest_*.txt
+ from the CLDR root files (..._CLDR_..._SHORT.txt)
+ cp -v $CLDR_SRC/common/uca/CollationTest_CLDR_NON_IGNORABLE_SHORT.txt $ICU_SRC/icu4c/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
+ cp -v $CLDR_SRC/common/uca/CollationTest_CLDR_SHIFTED_SHORT.txt $ICU_SRC/icu4c/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
+ cp -v $ICU_SRC/icu4c/source/test/testdata/CollationTest_*.txt $ICU_SRC/icu4j/main/tests/collate/src/com/ibm/icu/dev/data
+- if CLDR common/uca/unihan-index.txt changes, then update
+ CLDR common/collation/root.xml <collation type="private-unihan">
+ and regenerate (or update in parallel) $ICU_SRC/icu4c/source/data/coll/root.txt
+
+- run genuca
+ $ICU_ROOT/dbg/tools/unicode/c$
+ genuca/genuca --hanOrder implicit $ICU_SRC/icu4c && \
+ genuca/genuca --hanOrder radical-stroke $ICU_SRC/icu4c
+- rebuild ICU4C
+
+* Unihan collators
+ https://sites.google.com/site/unicodetools/unihan
+- run Unicode Tools
+ org.unicode.draft.GenerateUnihanCollators
+ with VM arguments
+ -ea
+ -DSVN_WORKSPACE=/usr/local/google/home/mscherer/svn.unitools/trunk
+ -DOTHER_WORKSPACE=/usr/local/google/home/mscherer/svn.unitools
+ -DUCD_DIR=/usr/local/google/home/mscherer/svn.unitools/trunk/data
+ -DCLDR_DIR=/usr/local/google/home/mscherer/cldr/uni/src
+ -DUVERSION=13.0.0
+- run Unicode Tools
+ org.unicode.draft.GenerateUnihanCollatorFiles
+ with the same arguments
+- check CLDR diffs
+ cd $CLDR_SRC
+ meld common/collation/zh.xml ../Generated/cldr/han/replace/zh.xml
+ meld common/transforms/Han-Latin.xml ../Generated/cldr/han/replace/Han-Latin.xml
+- copy to CLDR
+ cd $CLDR_SRC
+ cp ../Generated/cldr/han/replace/zh.xml common/collation/zh.xml
+ cp ../Generated/cldr/han/replace/Han-Latin.xml common/transforms/Han-Latin.xml
+- run CLDR unit tests, commit to CLDR
+- generate ICU zh collation data: run CLDR
+ org.unicode.cldr.icu.NewLdml2IcuConverter
+ with program arguments
+ -t collation
+ -s /usr/local/google/home/mscherer/cldr/uni/src/common/collation
+ -m /usr/local/google/home/mscherer/cldr/uni/src/common/supplemental
+ -d /usr/local/google/home/mscherer/icu/uni/src/icu4c/source/data/coll
+ -p /usr/local/google/home/mscherer/icu/uni/src/icu4c/source/data/xml/collation
+ zh
+ and VM arguments
+ -ea
+ -DCLDR_DIR=/usr/local/google/home/mscherer/cldr/uni/src
+- rebuild ICU4C
+
+* run & fix ICU4C tests, now with new CLDR collation root data
+- run all tests with the collation test data *_SHORT.txt or the full files
+ (the full ones have comments, useful for debugging)
+- note on intltest: if collate/UCAConformanceTest fails, then
+ utility/MultithreadTest/TestCollators will fail as well;
+ fix the conformance test before looking into the multi-thread test
+
+* update Java data files
+- refresh just the UCD/UCA-related/derived files, just to be safe
+- see (ICU4C)/source/data/icu4j-readme.txt
+- mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
+ output:
+ ...
+ make[1]: Entering directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data'
+ mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt66b
+ mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt66b
+ LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt66l.dat ./out/icu4j/icudt66b.dat -s ./out/build/icudt66l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt66b
+ mv ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt66b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt66b"
+ jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt66b/
+ mkdir -p /tmp/icu4j/main/shared/data
+ cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data
+ jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt66b/
+ mkdir -p /tmp/icu4j/main/shared/data
+ cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data
+ make[1]: Leaving directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data'
+- copy the big-endian Unicode data files to another location,
+ separate from the other data files,
+ and then refresh ICU4J
+ cd $ICU_ROOT/dbg/icu4c/data/out/icu4j
+ mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/coll
+ mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/brkitr
+ cp -v com/ibm/icu/impl/data/$ICUDT/confusables.cfu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+ cp -v com/ibm/icu/impl/data/$ICUDT/*.icu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+ rm /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/cnvalias.icu
+ cp -v com/ibm/icu/impl/data/$ICUDT/*.nrm /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+ cp -v com/ibm/icu/impl/data/$ICUDT/coll/* /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/coll
+ cp -v com/ibm/icu/impl/data/$ICUDT/brkitr/* /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/brkitr
+ jar uvf $ICU_SRC/icu4j/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/$ICUDT
+
+* When refreshing all of ICU4J data from ICU4C
+- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
+- cp /tmp/icu4j/main/shared/data/icudata.jar $ICU_SRC/icu4j/main/shared/data
+or
+- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=$ICU_SRC/icu4j icu4j-data-install
+
+* update CollationFCD.java
+ + copy & paste the initializers of lcccIndex[] etc. from
+ ICU4C/source/i18n/collationfcd.cpp to
+ ICU4J/main/classes/collate/src/com/ibm/icu/impl/coll/CollationFCD.java
+
+* refresh Java test .txt files
+- copy new .txt files into ICU4J's main/tests/core/src/com/ibm/icu/dev/data/unicode
+ cd $ICU_SRC/icu4c/source/data/unidata
+ cp -v confusables.txt confusablesWholeScript.txt NormalizationCorrections.txt NormalizationTest.txt SpecialCasing.txt UnicodeData.txt $ICU_SRC/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode
+ cd ../../test/testdata
+ cp -v BidiCharacterTest.txt BidiTest.txt IdnaTestV2.txt $ICU_SRC/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode
+ cp -v $UNICODE_DATA/ucd/CompositionExclusions.txt $ICU_SRC/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode
+
+* run & fix ICU4J tests
+
+*** API additions
+- send notice to icu-design about new born-@stable API (enum constants etc.)
+
+*** CLDR numbering systems
+- look for new sets of decimal digits (gc=ND & nv=4) and add to CLDR
+ for example, look for
+ ~/icu/uni/src$ egrep ';gc=Nd.+;nv=4' icu4c/source/data/unidata/ppucd.txt
+ in new blocks (Blocks.txt)
+ Unicode 13:
+ diak 11950..11959 Dives_Akuru
+
+*** merge the Unicode update branches back onto the trunk
+- do not merge the icudata.jar and testdata.jar,
+ instead rebuild them from merged & tested ICU4C
+- make sure that changes to Unicode tools are checked in:
+ http://www.unicode.org/utility/trac/log/trunk/unicodetools
+
+---------------------------------------------------------------------------- ***
+
Unicode 12.1 update for ICU 64.2
** This is an abbreviated update with one new character for the new
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt b/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
index ee85eeeef20..3fdc45e7ff1 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
@@ -1,11 +1,11 @@
# confusables.txt
-# Date: 2019-04-01, 21:59:19 GMT
-# © 2019 Unicode®, Inc.
+# Date: 2020-02-13, 01:38:49 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Security Mechanisms for UTS #39
-# Version: 12.1.0
+# Version: 13.0.0
#
# For documentation and usage, see http://www.unicode.org/reports/tr39
#
@@ -1358,6 +1358,10 @@ FFED ; 25AA ; MA #* ( ■ → ▪ ) HALFWIDTH BLACK SQUARE → BLACK SMALL SQUAR
266A ; 1D158 1D165 1D16E ; MA #* ( ♪ → ð…˜ð…¥ð…® ) EIGHTH NOTE → MUSICAL SYMBOL NOTEHEAD BLACK, MUSICAL SYMBOL COMBINING STEM, MUSICAL SYMBOL COMBINING FLAG-1 #
+24EA ; 1F10D ; MA #* ( ⓪ → 🄠) CIRCLED DIGIT ZERO → CIRCLED ZERO WITH SLASH #
+
+21BA ; 1F10E ; MA #* ( ↺ → 🄎 ) ANTICLOCKWISE OPEN CIRCLE ARROW → CIRCLED ANTICLOCKWISE ARROW #
+
02D9 ; 0971 ; MA #* ( ˙ → ॱ ) DOT ABOVE → DEVANAGARI SIGN HIGH SPACING DOT #
0D4E ; 0971 ; MA # ( ൎ → ॱ ) MALAYALAM LETTER DOT REPH → DEVANAGARI SIGN HIGH SPACING DOT # →˙→
@@ -1390,6 +1394,8 @@ D7BC ; 30FC 1169 ; MA # ( ힼ → ーᅩ ) HANGUL JUNGSEONG EU-O → KATAKANA-HI
1197 ; 30FC 4E28 116E ; MA # ( ᆗ → ー丨ᅮ ) HANGUL JUNGSEONG YI-U → KATAKANA-HIRAGANA PROLONGED SOUND MARK, CJK UNIFIED IDEOGRAPH-4E28, HANGUL JUNGSEONG U # →ᅳᅵᅮ→
+1F10F ; 0024 20E0 ; MA #* ( 🄠→ $⃠ ) CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH → DOLLAR SIGN, COMBINING ENCLOSING CIRCLE BACKSLASH #
+
20A4 ; 00A3 ; MA #* ( ₤ → £ ) LIRA SIGN → POUND SIGN #
3012 ; 20B8 ; MA #* ( 〒 → ₸ ) POSTAL MARK → TENGE SIGN #
@@ -1416,6 +1422,7 @@ A9C6 ; A9D0 ; MA #* ( ꧆ → ê§ ) JAVANESE PADA WINDU → JAVANESE DIGIT ZERO
1D7E4 ; 0032 ; MA # ( 🤠→ 2 ) MATHEMATICAL SANS-SERIF DIGIT TWO → DIGIT TWO #
1D7EE ; 0032 ; MA # ( 🮠→ 2 ) MATHEMATICAL SANS-SERIF BOLD DIGIT TWO → DIGIT TWO #
1D7F8 ; 0032 ; MA # ( 🸠→ 2 ) MATHEMATICAL MONOSPACE DIGIT TWO → DIGIT TWO #
+1FBF2 ; 0032 ; MA # ( 🯲 → 2 ) SEGMENTED DIGIT TWO → DIGIT TWO #
A75A ; 0032 ; MA # ( êš â†’ 2 ) LATIN CAPITAL LETTER R ROTUNDA → DIGIT TWO #
01A7 ; 0032 ; MA # ( Ƨ → 2 ) LATIN CAPITAL LETTER TONE TWO → DIGIT TWO #
03E8 ; 0032 ; MA # ( Ϩ → 2 ) COPTIC CAPITAL LETTER HORI → DIGIT TWO # →Ƨ→
@@ -1488,6 +1495,7 @@ A9CF ; 0662 ; MA # ( ê§ â†’ ‎٢‎ ) JAVANESE PANGRANGKEP → ARABIC-INDIC DI
1D7E5 ; 0033 ; MA # ( 🥠→ 3 ) MATHEMATICAL SANS-SERIF DIGIT THREE → DIGIT THREE #
1D7EF ; 0033 ; MA # ( 🯠→ 3 ) MATHEMATICAL SANS-SERIF BOLD DIGIT THREE → DIGIT THREE #
1D7F9 ; 0033 ; MA # ( 🹠→ 3 ) MATHEMATICAL MONOSPACE DIGIT THREE → DIGIT THREE #
+1FBF3 ; 0033 ; MA # ( 🯳 → 3 ) SEGMENTED DIGIT THREE → DIGIT THREE #
A7AB ; 0033 ; MA # ( Ɜ → 3 ) LATIN CAPITAL LETTER REVERSED OPEN E → DIGIT THREE #
021C ; 0033 ; MA # ( Ȝ → 3 ) LATIN CAPITAL LETTER YOGH → DIGIT THREE # →Ʒ→
01B7 ; 0033 ; MA # ( Ʒ → 3 ) LATIN CAPITAL LETTER EZH → DIGIT THREE #
@@ -1526,6 +1534,7 @@ A76A ; 0033 ; MA # ( êª â†’ 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE #
1D7E6 ; 0034 ; MA # ( 🦠→ 4 ) MATHEMATICAL SANS-SERIF DIGIT FOUR → DIGIT FOUR #
1D7F0 ; 0034 ; MA # ( 🰠→ 4 ) MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR → DIGIT FOUR #
1D7FA ; 0034 ; MA # ( 🺠→ 4 ) MATHEMATICAL MONOSPACE DIGIT FOUR → DIGIT FOUR #
+1FBF4 ; 0034 ; MA # ( 🯴 → 4 ) SEGMENTED DIGIT FOUR → DIGIT FOUR #
13CE ; 0034 ; MA # ( Ꭰ→ 4 ) CHEROKEE LETTER SE → DIGIT FOUR #
118AF ; 0034 ; MA # ( 𑢯 → 4 ) WARANG CITI CAPITAL LETTER UC → DIGIT FOUR #
@@ -1552,6 +1561,7 @@ A76A ; 0033 ; MA # ( êª â†’ 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE #
1D7E7 ; 0035 ; MA # ( 🧠→ 5 ) MATHEMATICAL SANS-SERIF DIGIT FIVE → DIGIT FIVE #
1D7F1 ; 0035 ; MA # ( 🱠→ 5 ) MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE → DIGIT FIVE #
1D7FB ; 0035 ; MA # ( 🻠→ 5 ) MATHEMATICAL MONOSPACE DIGIT FIVE → DIGIT FIVE #
+1FBF5 ; 0035 ; MA # ( 🯵 → 5 ) SEGMENTED DIGIT FIVE → DIGIT FIVE #
01BC ; 0035 ; MA # ( Ƽ → 5 ) LATIN CAPITAL LETTER TONE FIVE → DIGIT FIVE #
118BB ; 0035 ; MA # ( 𑢻 → 5 ) WARANG CITI CAPITAL LETTER HORR → DIGIT FIVE #
@@ -1572,6 +1582,7 @@ A76A ; 0033 ; MA # ( êª â†’ 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE #
1D7E8 ; 0036 ; MA # ( 🨠→ 6 ) MATHEMATICAL SANS-SERIF DIGIT SIX → DIGIT SIX #
1D7F2 ; 0036 ; MA # ( 🲠→ 6 ) MATHEMATICAL SANS-SERIF BOLD DIGIT SIX → DIGIT SIX #
1D7FC ; 0036 ; MA # ( 🼠→ 6 ) MATHEMATICAL MONOSPACE DIGIT SIX → DIGIT SIX #
+1FBF6 ; 0036 ; MA # ( 🯶 → 6 ) SEGMENTED DIGIT SIX → DIGIT SIX #
2CD2 ; 0036 ; MA # ( Ⳓ → 6 ) COPTIC CAPITAL LETTER OLD COPTIC HEI → DIGIT SIX #
0431 ; 0036 ; MA # ( б → 6 ) CYRILLIC SMALL LETTER BE → DIGIT SIX #
13EE ; 0036 ; MA # ( ᮠ→ 6 ) CHEROKEE LETTER WV → DIGIT SIX #
@@ -1599,6 +1610,7 @@ A76A ; 0033 ; MA # ( êª â†’ 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE #
1D7E9 ; 0037 ; MA # ( 🩠→ 7 ) MATHEMATICAL SANS-SERIF DIGIT SEVEN → DIGIT SEVEN #
1D7F3 ; 0037 ; MA # ( 🳠→ 7 ) MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN → DIGIT SEVEN #
1D7FD ; 0037 ; MA # ( 🽠→ 7 ) MATHEMATICAL MONOSPACE DIGIT SEVEN → DIGIT SEVEN #
+1FBF7 ; 0037 ; MA # ( 🯷 → 7 ) SEGMENTED DIGIT SEVEN → DIGIT SEVEN #
104D2 ; 0037 ; MA # ( 𓒠→ 7 ) OSAGE CAPITAL LETTER ZA → DIGIT SEVEN #
118C6 ; 0037 ; MA # ( 𑣆 → 7 ) WARANG CITI SMALL LETTER II → DIGIT SEVEN #
@@ -1623,6 +1635,7 @@ A76A ; 0033 ; MA # ( êª â†’ 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE #
1D7EA ; 0038 ; MA # ( 🪠→ 8 ) MATHEMATICAL SANS-SERIF DIGIT EIGHT → DIGIT EIGHT #
1D7F4 ; 0038 ; MA # ( 🴠→ 8 ) MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT → DIGIT EIGHT #
1D7FE ; 0038 ; MA # ( 🾠→ 8 ) MATHEMATICAL MONOSPACE DIGIT EIGHT → DIGIT EIGHT #
+1FBF8 ; 0038 ; MA # ( 🯸 → 8 ) SEGMENTED DIGIT EIGHT → DIGIT EIGHT #
0223 ; 0038 ; MA # ( ȣ → 8 ) LATIN SMALL LETTER OU → DIGIT EIGHT #
0222 ; 0038 ; MA # ( Ȣ → 8 ) LATIN CAPITAL LETTER OU → DIGIT EIGHT #
1031A ; 0038 ; MA # ( ðŒš â†’ 8 ) OLD ITALIC LETTER EF → DIGIT EIGHT #
@@ -1650,6 +1663,7 @@ A76A ; 0033 ; MA # ( êª â†’ 3 ) LATIN CAPITAL LETTER ET → DIGIT THREE #
1D7EB ; 0039 ; MA # ( 🫠→ 9 ) MATHEMATICAL SANS-SERIF DIGIT NINE → DIGIT NINE #
1D7F5 ; 0039 ; MA # ( 🵠→ 9 ) MATHEMATICAL SANS-SERIF BOLD DIGIT NINE → DIGIT NINE #
1D7FF ; 0039 ; MA # ( 🿠→ 9 ) MATHEMATICAL MONOSPACE DIGIT NINE → DIGIT NINE #
+1FBF9 ; 0039 ; MA # ( 🯹 → 9 ) SEGMENTED DIGIT NINE → DIGIT NINE #
A76E ; 0039 ; MA # ( ê® â†’ 9 ) LATIN CAPITAL LETTER CON → DIGIT NINE #
2CCA ; 0039 ; MA # ( Ⳋ → 9 ) COPTIC CAPITAL LETTER DIALECT-P HORI → DIGIT NINE #
118CC ; 0039 ; MA # ( 𑣌 → 9 ) WARANG CITI SMALL LETTER KO → DIGIT NINE #
@@ -1912,6 +1926,8 @@ A4DA ; 0043 ; MA # ( ꓚ → C ) LISU LETTER CA → LATIN CAPITAL LETTER C #
20A1 ; 0043 20EB ; MA #* ( ₡ → C⃫ ) COLON SIGN → LATIN CAPITAL LETTER C, COMBINING LONG DOUBLE SOLIDUS OVERLAY #
+1F16E ; 0043 20E0 ; MA #* ( 🅮 → C⃠ ) CIRCLED C WITH OVERLAID BACKSLASH → LATIN CAPITAL LETTER C, COMBINING ENCLOSING CIRCLE BACKSLASH #
+
00E7 ; 0063 0326 ; MA # ( ç → c̦ ) LATIN SMALL LETTER C WITH CEDILLA → LATIN SMALL LETTER C, COMBINING COMMA BELOW # →ҫ→→Ñ̡→
04AB ; 0063 0326 ; MA # ( Ò« → c̦ ) CYRILLIC SMALL LETTER ES WITH DESCENDER → LATIN SMALL LETTER C, COMBINING COMMA BELOW # →Ñ̡→
@@ -1924,6 +1940,8 @@ A4DA ; 0043 ; MA # ( ꓚ → C ) LISU LETTER CA → LATIN CAPITAL LETTER C #
2106 ; 0063 002F 0075 ; MA #* ( ℆ → c/u ) CADA UNA → LATIN SMALL LETTER C, SOLIDUS, LATIN SMALL LETTER U #
+1F16D ; 33C4 0009 20DD ; MA #* ( 🅭 → ) CIRCLED CC → SQUARE CC, <CHARACTER TABULATION>, COMBINING ENCLOSING CIRCLE #
+
22F4 ; A793 ; MA #* ( ⋴ → ꞓ ) SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE → LATIN SMALL LETTER C WITH BAR # →ɛ→→є→
025B ; A793 ; MA # ( ɛ → ꞓ ) LATIN SMALL LETTER OPEN E → LATIN SMALL LETTER C WITH BAR # →є→
03B5 ; A793 ; MA # ( ε → ꞓ ) GREEK SMALL LETTER EPSILON → LATIN SMALL LETTER C WITH BAR # →є→
@@ -2353,7 +2371,7 @@ A6B1 ; 2C75 ; MA # ( ꚱ → Ⱶ ) BAMUM LETTER NDAA → LATIN CAPITAL LETTER HA
A795 ; A727 ; MA # ( ꞕ → ꜧ ) LATIN SMALL LETTER H WITH PALATAL HOOK → LATIN SMALL LETTER HENG #
02DB ; 0069 ; MA #* ( ˛ → i ) OGONEK → LATIN SMALL LETTER I # →ͺ→→ι→→ι→
-2373 ; 0069 ; MA #* ( Ⳡ→ i ) APL FUNCTIONAL SYMBOL IOTA → LATIN SMALL LETTER I # →ι→
+2373 ; 0069 ; MA #* ( Ⳡ→ i ) APL FUNCTIONAL SYMBOL IOTA → LATIN SMALL LETTER I # →ɩ→
FF49 ; 0069 ; MA # ( i → i ) FULLWIDTH LATIN SMALL LETTER I → LATIN SMALL LETTER I # →і→
2170 ; 0069 ; MA # ( ⅰ → i ) SMALL ROMAN NUMERAL ONE → LATIN SMALL LETTER I #
2139 ; 0069 ; MA # ( ℹ → i ) INFORMATION SOURCE → LATIN SMALL LETTER I #
@@ -2530,6 +2548,7 @@ FFE8 ; 006C ; MA #* ( │ → l ) HALFWIDTH FORMS LIGHT VERTICAL → LATIN SMALL
1D7E3 ; 006C ; MA # ( 🣠→ l ) MATHEMATICAL SANS-SERIF DIGIT ONE → LATIN SMALL LETTER L # →1→
1D7ED ; 006C ; MA # ( 🭠→ l ) MATHEMATICAL SANS-SERIF BOLD DIGIT ONE → LATIN SMALL LETTER L # →1→
1D7F7 ; 006C ; MA # ( 🷠→ l ) MATHEMATICAL MONOSPACE DIGIT ONE → LATIN SMALL LETTER L # →1→
+1FBF1 ; 006C ; MA # ( 🯱 → l ) SEGMENTED DIGIT ONE → LATIN SMALL LETTER L # →1→
0049 ; 006C ; MA # ( I → l ) LATIN CAPITAL LETTER I → LATIN SMALL LETTER L #
FF29 ; 006C ; MA # ( I → l ) FULLWIDTH LATIN CAPITAL LETTER I → LATIN SMALL LETTER L # →Ӏ→
2160 ; 006C ; MA # ( Ⅰ → l ) ROMAN NUMERAL ONE → LATIN SMALL LETTER L # →Ӏ→
@@ -2957,6 +2976,7 @@ FBA6 ; 006F ; MA # ( ‎ﮦ‎ → o ) ARABIC LETTER HEH GOAL ISOLATED FORM →
1D7E2 ; 004F ; MA # ( 🢠→ O ) MATHEMATICAL SANS-SERIF DIGIT ZERO → LATIN CAPITAL LETTER O # →0→
1D7EC ; 004F ; MA # ( 🬠→ O ) MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO → LATIN CAPITAL LETTER O # →0→
1D7F6 ; 004F ; MA # ( 🶠→ O ) MATHEMATICAL MONOSPACE DIGIT ZERO → LATIN CAPITAL LETTER O # →0→
+1FBF0 ; 004F ; MA # ( 🯰 → O ) SEGMENTED DIGIT ZERO → LATIN CAPITAL LETTER O # →0→
FF2F ; 004F ; MA # ( O → O ) FULLWIDTH LATIN CAPITAL LETTER O → LATIN CAPITAL LETTER O # →О→
1D40E ; 004F ; MA # ( ðŽ → O ) MATHEMATICAL BOLD CAPITAL O → LATIN CAPITAL LETTER O #
1D442 ; 004F ; MA # ( 𑂠→ O ) MATHEMATICAL ITALIC CAPITAL O → LATIN CAPITAL LETTER O #
@@ -8008,8 +8028,6 @@ FA92 ; 6717 ; MA # ( 朗 → 朗 ) CJK COMPATIBILITY IDEOGRAPH-FA92 → CJK UNIF
FA93 ; 671B ; MA # ( 望 → 望 ) CJK COMPATIBILITY IDEOGRAPH-FA93 → CJK UNIFIED IDEOGRAPH-671B #
2F8D9 ; 671B ; MA # ( 望 → 望 ) CJK COMPATIBILITY IDEOGRAPH-2F8D9 → CJK UNIFIED IDEOGRAPH-671B #
-2F8DA ; 6721 ; MA # ( 朡 → 朡 ) CJK COMPATIBILITY IDEOGRAPH-2F8DA → CJK UNIFIED IDEOGRAPH-6721 #
-
5E50 ; 3B3A ; MA # ( å¹ â†’ 㬺 ) CJK UNIFIED IDEOGRAPH-5E50 → CJK UNIFIED IDEOGRAPH-3B3A #
4420 ; 3B3B ; MA # ( ä  â†’ 㬻 ) CJK UNIFIED IDEOGRAPH-4420 → CJK UNIFIED IDEOGRAPH-3B3B #
@@ -8815,6 +8833,8 @@ F953 ; 808B ; MA # ( 肋 → 肋 ) CJK COMPATIBILITY IDEOGRAPH-F953 → CJK UNIF
2F984 ; 440B ; MA # ( 䐋 → ä‹ ) CJK COMPATIBILITY IDEOGRAPH-2F984 → CJK UNIFIED IDEOGRAPH-440B #
+2F8DA ; 6721 ; MA # ( 朡 → 朡 ) CJK COMPATIBILITY IDEOGRAPH-2F8DA → CJK UNIFIED IDEOGRAPH-6721 #
+
2F987 ; 267A7 ; MA # ( 𦞧 → 𦞧 ) CJK COMPATIBILITY IDEOGRAPH-2F987 → CJK UNIFIED IDEOGRAPH-267A7 #
2F988 ; 267B5 ; MA # ( 𦞵 → 𦞵 ) CJK COMPATIBILITY IDEOGRAPH-2F988 → CJK UNIFIED IDEOGRAPH-267B5 #
@@ -9614,5 +9634,5 @@ FACE ; 9F9C ; MA # ( 龜 → 龜 ) CJK COMPATIBILITY IDEOGRAPH-FACE → CJK UNIF
2FD5 ; 9FA0 ; MA #* ( ⿕ → 龠 ) KANGXI RADICAL FLUTE → CJK UNIFIED IDEOGRAPH-9FA0 #
-# total: 6296
+# total: 6311
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
index 31dc256d102..638b5feffcd 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
@@ -9,7 +9,7 @@
#
# Complete data for Unicode NFC normalization.
-* Unicode 12.1.0
+* Unicode 13.0.0
# Canonical_Combining_Class (ccc) values
0300..0314:230
@@ -212,6 +212,7 @@
1AB5..1ABA:220
1ABB..1ABC:230
1ABD:220
+1ABF..1AC0:220
1B34:7
1B44:9
1B6B:230
@@ -276,6 +277,7 @@ A674..A67D:230
A69E..A69F:230
A6F0..A6F1:230
A806:9
+A82C:9
A8C4:9
A8E0..A8F1:230
A92B..A92D:220
@@ -306,6 +308,7 @@ FE2E..FE2F:230
10AE5:230
10AE6:220
10D24..10D27:230
+10EAB..10EAC:230
10F46..10F47:220
10F48..10F4A:230
10F4B:220
@@ -341,6 +344,8 @@ FE2E..FE2F:230
1172B:9
11839:9
1183A:7
+1193D..1193E:9
+11943:7
119E0:9
11A34:9
11A47:9
@@ -351,6 +356,7 @@ FE2E..FE2F:230
11D97:9
16AF0..16AF4:1
16B30..16B36:230
+16FF0..16FF1:6
1BC9E:1
1D165..1D166:216
1D167..1D169:1
@@ -1878,6 +1884,7 @@ FB4E>05E4 05BF
114BE=114B9 114BD
115BA=115B8 115AF
115BB=115B9 115AF
+11938=11935 11930
1D15E>1D157 1D165
1D15F>1D158 1D165
1D160>1D15F 1D16E
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
index a1e363faecb..675cd107aaa 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
@@ -13,7 +13,7 @@
# to NFKC one-way mappings.
# Use this file as the second gennorm2 input file after nfc.txt.
-* Unicode 12.1.0
+* Unicode 13.0.0
00A0>0020
00A8>0020 0308
@@ -1373,6 +1373,7 @@ AB5C>A727
AB5D>AB37
AB5E>026B
AB5F>AB52
+AB69>028D
FB00>0066 0066
FB01>0066 0069
FB02>0066 006C
@@ -3691,3 +3692,13 @@ FFEE>25CB
1F248>3014 6557 3015
1F250>5F97
1F251>53EF
+1FBF0>0030
+1FBF1>0031
+1FBF2>0032
+1FBF3>0033
+1FBF4>0034
+1FBF5>0035
+1FBF6>0036
+1FBF7>0037
+1FBF8>0038
+1FBF9>0039
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
index 3248c3ac03d..21c441f945b 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
@@ -12,7 +12,7 @@
# and reformatted into syntax for the gennorm2 Normalizer2 data generator tool.
# Use this file as the third gennorm2 input file after nfc.txt and nfkc.txt.
-* Unicode 12.1.0
+* Unicode 13.0.0
0041>0061
0042>0062
@@ -2458,12 +2458,16 @@ A7C2>A7C3
A7C4>A794
A7C5>0282
A7C6>1D8E
+A7C7>A7C8
+A7C9>A7CA
+A7F5>A7F6
A7F8>0127
A7F9>0153
AB5C>A727
AB5D>AB37
AB5E>026B
AB5F>AB52
+AB69>028D
AB70>13A0
AB71>13A1
AB72>13A2
@@ -5387,6 +5391,16 @@ FFF0..FFF8>
1F248>3014 6557 3015
1F250>5F97
1F251>53EF
+1FBF0>0030
+1FBF1>0031
+1FBF2>0032
+1FBF3>0033
+1FBF4>0034
+1FBF5>0035
+1FBF6>0036
+1FBF7>0037
+1FBF8>0038
+1FBF9>0039
2F800>4E3D
2F801>4E38
2F802>4E41
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
index 15427fc4daf..06f7beab684 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
@@ -1,12 +1,12 @@
# Original file:
# IdnaMappingTable.txt
-# Date: 2019-04-01, 09:17:25 GMT
+# Date: 2019-11-07, 13:44:35 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode IDNA Compatible Preprocessing for UTS #46
-# Version: 12.1.0
+# Version: 13.0.0
#
# For documentation and usage, see http://www.unicode.org/reports/tr46
@@ -996,7 +996,8 @@
# 08B3..08B4 valid # 8.0 ARABIC LETTER AIN WITH THREE DOTS BELOW..ARABIC LETTER KAF WITH DOT BELOW
08B5 >FFFD # NA <reserved-08B5>
# 08B6..08BD valid # 9.0 ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
-08BE..08D2 >FFFD # NA <reserved-08BE>..<reserved-08D2>
+# 08BE..08C7 valid # 13.0 ARABIC LETTER PEH WITH SMALL V..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+08C8..08D2 >FFFD # NA <reserved-08C8>..<reserved-08D2>
# 08D3 valid # 11.0 ARABIC SMALL LOW WAW
# 08D4..08E1 valid # 9.0 ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
08E2 >FFFD # 9.0 ARABIC DISPUTED END OF AYAH
@@ -1168,7 +1169,8 @@
# 0B47..0B48 valid # 1.1 ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B49..0B4A >FFFD # NA <reserved-0B49>..<reserved-0B4A>
# 0B4B..0B4D valid # 1.1 ORIYA VOWEL SIGN O..ORIYA SIGN VIRAMA
-0B4E..0B55 >FFFD # NA <reserved-0B4E>..<reserved-0B55>
+0B4E..0B54 >FFFD # NA <reserved-0B4E>..<reserved-0B54>
+# 0B55 valid # 13.0 ORIYA SIGN OVERLINE
# 0B56..0B57 valid # 1.1 ORIYA AI LENGTH MARK..ORIYA AU LENGTH MARK
0B58..0B5B >FFFD # NA <reserved-0B58>..<reserved-0B5B>
0B5C >0B21 0B3C # 1.1 ORIYA LETTER RRA
@@ -1286,7 +1288,7 @@
# 0D00 valid # 10.0 MALAYALAM SIGN COMBINING ANUSVARA ABOVE
# 0D01 valid # 7.0 MALAYALAM SIGN CANDRABINDU
# 0D02..0D03 valid # 1.1 MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D04 >FFFD # NA <reserved-0D04>
+# 0D04 valid # 13.0 MALAYALAM LETTER VEDIC ANUSVARA
# 0D05..0D0C valid # 1.1 MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
0D0D >FFFD # NA <reserved-0D0D>
# 0D0E..0D10 valid # 1.1 MALAYALAM LETTER E..MALAYALAM LETTER AI
@@ -1318,7 +1320,8 @@
# 0D76..0D78 valid # 9.0 MALAYALAM FRACTION ONE SIXTEENTH..MALAYALAM FRACTION THREE SIXTEENTHS
# 0D79 valid # 5.1 MALAYALAM DATE MARK
# 0D7A..0D7F valid # 5.1 MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-0D80..0D81 >FFFD # NA <reserved-0D80>..<reserved-0D81>
+0D80 >FFFD # NA <reserved-0D80>
+# 0D81 valid # 13.0 SINHALA SIGN CANDRABINDU
# 0D82..0D83 valid # 3.0 SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D84 >FFFD # NA <reserved-0D84>
# 0D85..0D96 valid # 3.0 SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
@@ -1675,7 +1678,8 @@
1AAE..1AAF >FFFD # NA <reserved-1AAE>..<reserved-1AAF>
# 1AB0..1ABD valid # 7.0 COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
# 1ABE valid # 7.0 COMBINING PARENTHESES OVERLAY
-1ABF..1AFF >FFFD # NA <reserved-1ABF>..<reserved-1AFF>
+# 1ABF..1AC0 valid # 13.0 COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+1AC1..1AFF >FFFD # NA <reserved-1AC1>..<reserved-1AFF>
# 1B00..1B4B valid # 5.0 BALINESE SIGN ULU RICEM..BALINESE LETTER ASYURA SASAK
1B4C..1B4F >FFFD # NA <reserved-1B4C>..<reserved-1B4F>
# 1B50..1B59 valid # 5.0 BALINESE DIGIT ZERO..BALINESE DIGIT NINE
@@ -2798,7 +2802,8 @@
# 2B5A..2B73 valid # 7.0 SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B74..2B75 >FFFD # NA <reserved-2B74>..<reserved-2B75>
# 2B76..2B95 valid # 7.0 NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B96..2B97 >FFFD # NA <reserved-2B96>..<reserved-2B97>
+2B96 >FFFD # NA <reserved-2B96>
+# 2B97 valid # 13.0 SYMBOL FOR TYPE A ELECTRONICS
# 2B98..2BB9 valid # 7.0 THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
# 2BBA..2BBC valid # 11.0 OVERLAPPING WHITE SQUARES..OVERLAPPING BLACK SQUARES
# 2BBD..2BC8 valid # 7.0 BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
@@ -3040,7 +3045,8 @@
# 2E45..2E49 valid # 10.0 INVERTED LOW KAVYKA..DOUBLE STACKED COMMA
# 2E4A..2E4E valid # 11.0 DOTTED SOLIDUS..PUNCTUS ELEVATUS MARK
# 2E4F valid # 12.0 CORNISH VERSE DIVIDER
-2E50..2E7F >FFFD # NA <reserved-2E50>..<reserved-2E7F>
+# 2E50..2E52 valid # 13.0 CROSS PATTY WITH RIGHT CROSSBAR..TIRONIAN SIGN CAPITAL ET
+2E53..2E7F >FFFD # NA <reserved-2E53>..<reserved-2E7F>
# 2E80..2E99 valid # 3.0 CJK RADICAL REPEAT..CJK RADICAL RAP
2E9A >FFFD # NA <reserved-2E9A>
# 2E9B..2E9E valid # 3.0 CJK RADICAL CHOKE..CJK RADICAL DEATH
@@ -3413,7 +3419,7 @@
319F >4EBA # 1.1 IDEOGRAPHIC ANNOTATION MAN MARK
# 31A0..31B7 valid # 3.0 BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
# 31B8..31BA valid # 6.0 BOPOMOFO LETTER GH..BOPOMOFO LETTER ZY
-31BB..31BF >FFFD # NA <reserved-31BB>..<reserved-31BF>
+# 31BB..31BF valid # 13.0 BOPOMOFO FINAL LETTER G..BOPOMOFO LETTER AH
# 31C0..31CF valid # 4.1 CJK STROKE T..CJK STROKE N
# 31D0..31E3 valid # 5.1 CJK STROKE H..CJK STROKE Q
31E4..31EF >FFFD # NA <reserved-31E4>..<reserved-31EF>
@@ -3924,7 +3930,7 @@
33FE >0033 0031 65E5 #1.1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
33FF >0067 0061 006C #4.0 SQUARE GAL
# 3400..4DB5 valid # 3.0 CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4DB6..4DBF >FFFD # NA <reserved-4DB6>..<reserved-4DBF>
+# 4DB6..4DBF valid # 13.0 CJK UNIFIED IDEOGRAPH-4DB6..CJK UNIFIED IDEOGRAPH-4DBF
# 4DC0..4DFF valid # 4.0 HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
# 4E00..9FA5 valid # 1.1 CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
# 9FA6..9FBB valid # 4.1 CJK UNIFIED IDEOGRAPH-9FA6..CJK UNIFIED IDEOGRAPH-9FBB
@@ -3934,7 +3940,8 @@
# 9FCD..9FD5 valid # 8.0 CJK UNIFIED IDEOGRAPH-9FCD..CJK UNIFIED IDEOGRAPH-9FD5
# 9FD6..9FEA valid # 10.0 CJK UNIFIED IDEOGRAPH-9FD6..CJK UNIFIED IDEOGRAPH-9FEA
# 9FEB..9FEF valid # 11.0 CJK UNIFIED IDEOGRAPH-9FEB..CJK UNIFIED IDEOGRAPH-9FEF
-9FF0..9FFF >FFFD # NA <reserved-9FF0>..<reserved-9FFF>
+# 9FF0..9FFC valid # 13.0 CJK UNIFIED IDEOGRAPH-9FF0..CJK UNIFIED IDEOGRAPH-9FFC
+9FFD..9FFF >FFFD # NA <reserved-9FFD>..<reserved-9FFF>
# A000..A48C valid # 3.0 YI SYLLABLE IT..YI SYLLABLE YYR
A48D..A48F >FFFD # NA <reserved-A48D>..<reserved-A48F>
# A490..A4A1 valid # 3.0 YI RADICAL QOT..YI RADICAL GA
@@ -4197,7 +4204,13 @@ A7C2 >A7C3 # 12.0 LATIN CAPITAL LETTER ANGLICANA W
A7C4 >A794 # 12.0 LATIN CAPITAL LETTER C WITH PALATAL HOOK
A7C5 >0282 # 12.0 LATIN CAPITAL LETTER S WITH HOOK
A7C6 >1D8E # 12.0 LATIN CAPITAL LETTER Z WITH PALATAL HOOK
-A7C7..A7F6 >FFFD # NA <reserved-A7C7>..<reserved-A7F6>
+A7C7 >A7C8 # 13.0 LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+# A7C8 valid # 13.0 LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 >A7CA # 13.0 LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+# A7CA valid # 13.0 LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7CB..A7F4 >FFFD # NA <reserved-A7CB>..<reserved-A7F4>
+A7F5 >A7F6 # 13.0 LATIN CAPITAL LETTER REVERSED HALF H
+# A7F6 valid # 13.0 LATIN SMALL LETTER REVERSED HALF H
# A7F7 valid # 7.0 LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8 >0127 # 6.1 MODIFIER LETTER CAPITAL H WITH STROKE
A7F9 >0153 # 6.1 MODIFIER LETTER SMALL LIGATURE OE
@@ -4205,7 +4218,8 @@ A7F9 >0153 # 6.1 MODIFIER LETTER SMALL LIGATURE OE
# A7FB..A7FF valid # 5.1 LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
# A800..A827 valid # 4.1 SYLOTI NAGRI LETTER A..SYLOTI NAGRI VOWEL SIGN OO
# A828..A82B valid # 4.1 SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
-A82C..A82F >FFFD # NA <reserved-A82C>..<reserved-A82F>
+# A82C valid # 13.0 SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A82D..A82F >FFFD # NA <reserved-A82D>..<reserved-A82F>
# A830..A839 valid # 5.2 NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC QUANTITY MARK
A83A..A83F >FFFD # NA <reserved-A83A>..<reserved-A83F>
# A840..A873 valid # 5.0 PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
@@ -4276,7 +4290,10 @@ AB5F >AB52 # 7.0 MODIFIER LETTER SMALL U WITH LEFT
# AB60..AB63 valid # 8.0 LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER UO
# AB64..AB65 valid # 7.0 LATIN SMALL LETTER INVERTED ALPHA..GREEK LETTER SMALL CAPITAL OMEGA
# AB66..AB67 valid # 12.0 LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
-AB68..AB6F >FFFD # NA <reserved-AB68>..<reserved-AB6F>
+# AB68 valid # 13.0 LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 >028D # 13.0 MODIFIER LETTER SMALL TURNED W
+# AB6A..AB6B valid # 13.0 MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
+AB6C..AB6F >FFFD # NA <reserved-AB6C>..<reserved-AB6F>
AB70 >13A0 # 8.0 CHEROKEE SMALL LETTER A
AB71 >13A1 # 8.0 CHEROKEE SMALL LETTER E
AB72 >13A2 # 8.0 CHEROKEE SMALL LETTER I
@@ -5780,7 +5797,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1018D..1018Evalid # 9.0 GREEK INDICTION SIGN..NOMISMA SIGN
1018F >FFFD # NA <reserved-1018F>
# 10190..1019Bvalid # 5.1 ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
-1019C..1019F >FFFD # NA <reserved-1019C>..<reserved-1019F>
+# 1019C valid # 13.0 ASCIA SYMBOL
+1019D..1019F >FFFD # NA <reserved-1019D>..<reserved-1019F>
# 101A0 valid # 7.0 GREEK SYMBOL TAU RHO
101A1..101CF >FFFD # NA <reserved-101A1>..<reserved-101CF>
# 101D0..101FCvalid # 5.1 PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
@@ -6057,14 +6075,24 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 10D30..10D39valid # 11.0 HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
10D3A..10E5F >FFFD # NA <reserved-10D3A>..<reserved-10E5F>
# 10E60..10E7Evalid # 5.2 RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
-10E7F..10EFF >FFFD # NA <reserved-10E7F>..<reserved-10EFF>
+10E7F >FFFD # NA <reserved-10E7F>
+# 10E80..10EA9valid # 13.0 YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAA >FFFD # NA <reserved-10EAA>
+# 10EAB..10EACvalid # 13.0 YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+# 10EAD valid # 13.0 YEZIDI HYPHENATION MARK
+10EAE..10EAF >FFFD # NA <reserved-10EAE>..<reserved-10EAF>
+# 10EB0..10EB1valid # 13.0 YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10EB2..10EFF >FFFD # NA <reserved-10EB2>..<reserved-10EFF>
# 10F00..10F1Cvalid # 11.0 OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
# 10F1D..10F26valid # 11.0 OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
# 10F27 valid # 11.0 OLD SOGDIAN LIGATURE AYIN-DALETH
10F28..10F2F >FFFD # NA <reserved-10F28>..<reserved-10F2F>
# 10F30..10F50valid # 11.0 SOGDIAN LETTER ALEPH..SOGDIAN COMBINING STROKE BELOW
# 10F51..10F59valid # 11.0 SOGDIAN NUMBER ONE..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
-10F5A..10FDF >FFFD # NA <reserved-10F5A>..<reserved-10FDF>
+10F5A..10FAF >FFFD # NA <reserved-10F5A>..<reserved-10FAF>
+# 10FB0..10FC4valid # 13.0 CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+# 10FC5..10FCBvalid # 13.0 CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+10FCC..10FDF >FFFD # NA <reserved-10FCC>..<reserved-10FDF>
# 10FE0..10FF6valid # 12.0 ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
10FF7..10FFF >FFFD # NA <reserved-10FF7>..<reserved-10FFF>
# 11000..11046valid # 6.0 BRAHMI SIGN CANDRABINDU..BRAHMI VIRAMA
@@ -6090,7 +6118,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 11136..1113Fvalid # 6.1 CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
# 11140..11143valid # 6.1 CHAKMA SECTION MARK..CHAKMA QUESTION MARK
# 11144..11146valid # 11.0 CHAKMA LETTER LHAA..CHAKMA VOWEL SIGN EI
-11147..1114F >FFFD # NA <reserved-11147>..<reserved-1114F>
+# 11147 valid # 13.0 CHAKMA LETTER VAA
+11148..1114F >FFFD # NA <reserved-11148>..<reserved-1114F>
# 11150..11173valid # 7.0 MAHAJANI LETTER A..MAHAJANI SIGN NUKTA
# 11174..11175valid # 7.0 MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
# 11176 valid # 7.0 MAHAJANI LIGATURE SHRI
@@ -6099,7 +6128,7 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 111C5..111C8valid # 6.1 SHARADA DANDA..SHARADA SEPARATOR
# 111C9..111CCvalid # 8.0 SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
# 111CD valid # 7.0 SHARADA SUTRA MARK
-111CE..111CF >FFFD # NA <reserved-111CE>..<reserved-111CF>
+# 111CE..111CFvalid # 13.0 SHARADA VOWEL SIGN PRISHTHAMATRA E..SHARADA SIGN INVERTED CANDRABINDU
# 111D0..111D9valid # 6.1 SHARADA DIGIT ZERO..SHARADA DIGIT NINE
# 111DA valid # 7.0 SHARADA EKAM
# 111DB valid # 8.0 SHARADA SIGN SIDDHAM
@@ -6164,13 +6193,14 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 11400..1144Avalid # 9.0 NEWA LETTER A..NEWA SIDDHI
# 1144B..1144Fvalid # 9.0 NEWA DANDA..NEWA ABBREVIATION SIGN
# 11450..11459valid # 9.0 NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145A >FFFD # NA <reserved-1145A>
+# 1145A valid # 13.0 NEWA DOUBLE COMMA
# 1145B valid # 9.0 NEWA PLACEHOLDER MARK
1145C >FFFD # NA <reserved-1145C>
# 1145D valid # 9.0 NEWA INSERTION SIGN
# 1145E valid # 11.0 NEWA SANDHI MARK
# 1145F valid # 12.0 NEWA LETTER VEDIC ANUSVARA
-11460..1147F >FFFD # NA <reserved-11460>..<reserved-1147F>
+# 11460..11461valid # 13.0 NEWA SIGN JIHVAMULIYA..NEWA SIGN UPADHMANIYA
+11462..1147F >FFFD # NA <reserved-11462>..<reserved-1147F>
# 11480..114C5valid # 7.0 TIRHUTA ANJI..TIRHUTA GVANG
# 114C6 valid # 7.0 TIRHUTA ABBREVIATION SIGN
# 114C7 valid # 7.0 TIRHUTA OM
@@ -6244,7 +6274,23 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 118EA..118F2valid # 7.0 WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
118F3..118FE >FFFD # NA <reserved-118F3>..<reserved-118FE>
# 118FF valid # 7.0 WARANG CITI OM
-11900..1199F >FFFD # NA <reserved-11900>..<reserved-1199F>
+# 11900..11906valid # 13.0 DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11907..11908 >FFFD # NA <reserved-11907>..<reserved-11908>
+# 11909 valid # 13.0 DIVES AKURU LETTER O
+1190A..1190B >FFFD # NA <reserved-1190A>..<reserved-1190B>
+# 1190C..11913valid # 13.0 DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11914 >FFFD # NA <reserved-11914>
+# 11915..11916valid # 13.0 DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11917 >FFFD # NA <reserved-11917>
+# 11918..11935valid # 13.0 DIVES AKURU LETTER DDA..DIVES AKURU VOWEL SIGN E
+11936 >FFFD # NA <reserved-11936>
+# 11937..11938valid # 13.0 DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+11939..1193A >FFFD # NA <reserved-11939>..<reserved-1193A>
+# 1193B..11943valid # 13.0 DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN NUKTA
+# 11944..11946valid # 13.0 DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11947..1194F >FFFD # NA <reserved-11947>..<reserved-1194F>
+# 11950..11959valid # 13.0 DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+1195A..1199F >FFFD # NA <reserved-1195A>..<reserved-1199F>
# 119A0..119A7valid # 12.0 NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119A8..119A9 >FFFD # NA <reserved-119A8>..<reserved-119A9>
# 119AA..119D7valid # 12.0 NANDINAGARI LETTER E..NANDINAGARI VOWEL SIGN VOCALIC RR
@@ -6311,7 +6357,9 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
11DAA..11EDF >FFFD # NA <reserved-11DAA>..<reserved-11EDF>
# 11EE0..11EF6valid # 11.0 MAKASAR LETTER KA..MAKASAR VOWEL SIGN O
# 11EF7..11EF8valid # 11.0 MAKASAR PASSIMBANG..MAKASAR END OF SECTION
-11EF9..11FBF >FFFD # NA <reserved-11EF9>..<reserved-11FBF>
+11EF9..11FAF >FFFD # NA <reserved-11EF9>..<reserved-11FAF>
+# 11FB0 valid # 13.0 LISU LETTER YHA
+11FB1..11FBF >FFFD # NA <reserved-11FB1>..<reserved-11FBF>
# 11FC0..11FF1valid # 12.0 TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL SIGN VAKAIYARAA
11FF2..11FFE >FFFD # NA <reserved-11FF2>..<reserved-11FFE>
# 11FFF valid # 12.0 TAMIL PUNCTUATION END OF TEXT
@@ -6407,13 +6455,19 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 16FE1 valid # 10.0 NUSHU ITERATION MARK
# 16FE2 valid # 12.0 OLD CHINESE HOOK MARK
# 16FE3 valid # 12.0 OLD CHINESE ITERATION MARK
-16FE4..16FFF >FFFD # NA <reserved-16FE4>..<reserved-16FFF>
+# 16FE4 valid # 13.0 KHITAN SMALL SCRIPT FILLER
+16FE5..16FEF >FFFD # NA <reserved-16FE5>..<reserved-16FEF>
+# 16FF0..16FF1valid # 13.0 VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+16FF2..16FFF >FFFD # NA <reserved-16FF2>..<reserved-16FFF>
# 17000..187ECvalid # 9.0 TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
# 187ED..187F1valid # 11.0 TANGUT IDEOGRAPH-187ED..TANGUT IDEOGRAPH-187F1
# 187F2..187F7valid # 12.0 TANGUT IDEOGRAPH-187F2..TANGUT IDEOGRAPH-187F7
187F8..187FF >FFFD # NA <reserved-187F8>..<reserved-187FF>
# 18800..18AF2valid # 9.0 TANGUT COMPONENT-001..TANGUT COMPONENT-755
-18AF3..1AFFF >FFFD # NA <reserved-18AF3>..<reserved-1AFFF>
+# 18AF3..18CD5valid # 13.0 TANGUT COMPONENT-756..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18CD6..18CFF >FFFD # NA <reserved-18CD6>..<reserved-18CFF>
+# 18D00..18D08valid # 13.0 TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+18D09..1AFFF >FFFD # NA <reserved-18D09>..<reserved-1AFFF>
# 1B000..1B001valid # 6.0 KATAKANA LETTER ARCHAIC E..HIRAGANA LETTER ARCHAIC YE
# 1B002..1B11Evalid # 10.0 HENTAIGANA LETTER A-1..HENTAIGANA LETTER N-MU-MO-2
1B11F..1B14F >FFFD # NA <reserved-1B11F>..<reserved-1B14F>
@@ -7769,7 +7823,7 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1F109 >0038 002C # 5.2 DIGIT EIGHT COMMA
1F10A >0039 002C # 5.2 DIGIT NINE COMMA
# 1F10B..1F10Cvalid # 7.0 DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F10D..1F10F >FFFD # NA <reserved-1F10D>..<reserved-1F10F>
+# 1F10D..1F10Fvalid # 13.0 CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
1F110 >0028 0061 0029 #5.2 PARENTHESIZED LATIN CAPITAL LETTER A
1F111 >0028 0062 0029 #5.2 PARENTHESIZED LATIN CAPITAL LETTER B
1F112 >0028 0063 0029 #5.2 PARENTHESIZED LATIN CAPITAL LETTER C
@@ -7842,7 +7896,7 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1F16A >006D 0063 # 6.1 RAISED MC SIGN
1F16B >006D 0064 # 6.1 RAISED MD SIGN
1F16C >006D 0072 # 12.0 RAISED MR SIGN
-1F16D..1F16F >FFFD # NA <reserved-1F16D>..<reserved-1F16F>
+# 1F16D..1F16Fvalid # 13.0 CIRCLED CC..CIRCLED HUMAN FIGURE
# 1F170..1F178valid # 6.0 NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER I
# 1F179 valid # 5.2 NEGATIVE SQUARED LATIN CAPITAL LETTER J
# 1F17A valid # 6.0 NEGATIVE SQUARED LATIN CAPITAL LETTER K
@@ -7855,7 +7909,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1F190 >0064 006A # 5.2 SQUARE DJ
# 1F191..1F19Avalid # 6.0 SQUARED CL..SQUARED VS
# 1F19B..1F1ACvalid # 9.0 SQUARED THREE D..SQUARED VOD
-1F1AD..1F1E5 >FFFD # NA <reserved-1F1AD>..<reserved-1F1E5>
+# 1F1AD valid # 13.0 MASK WORK SYMBOL
+1F1AE..1F1E5 >FFFD # NA <reserved-1F1AE>..<reserved-1F1E5>
# 1F1E6..1F1FFvalid # 6.0 REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F200 >307B 304B # 5.2 SQUARE HIRAGANA HOKA
1F201 >30B3 30B3 # 6.0 SQUARED KATAKANA KOKO
@@ -7993,7 +8048,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F6D1..1F6D2valid # 9.0 OCTAGONAL SIGN..SHOPPING TROLLEY
# 1F6D3..1F6D4valid # 10.0 STUPA..PAGODA
# 1F6D5 valid # 12.0 HINDU TEMPLE
-1F6D6..1F6DF >FFFD # NA <reserved-1F6D6>..<reserved-1F6DF>
+# 1F6D6..1F6D7valid # 13.0 HUT..ELEVATOR
+1F6D8..1F6DF >FFFD # NA <reserved-1F6D8>..<reserved-1F6DF>
# 1F6E0..1F6ECvalid # 7.0 HAMMER AND WRENCH..AIRPLANE ARRIVING
1F6ED..1F6EF >FFFD # NA <reserved-1F6ED>..<reserved-1F6EF>
# 1F6F0..1F6F3valid # 7.0 SATELLITE..PASSENGER SHIP
@@ -8001,7 +8057,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F6F7..1F6F8valid # 10.0 SLED..FLYING SAUCER
# 1F6F9 valid # 11.0 SKATEBOARD
# 1F6FA valid # 12.0 AUTO RICKSHAW
-1F6FB..1F6FF >FFFD # NA <reserved-1F6FB>..<reserved-1F6FF>
+# 1F6FB..1F6FCvalid # 13.0 PICKUP TRUCK..ROLLER SKATE
+1F6FD..1F6FF >FFFD # NA <reserved-1F6FD>..<reserved-1F6FF>
# 1F700..1F773valid # 6.0 ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F774..1F77F >FFFD # NA <reserved-1F774>..<reserved-1F77F>
# 1F780..1F7D4valid # 7.0 BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
@@ -8018,9 +8075,11 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F860..1F887valid # 7.0 WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F888..1F88F >FFFD # NA <reserved-1F888>..<reserved-1F88F>
# 1F890..1F8ADvalid # 7.0 LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F8AE..1F8FF >FFFD # NA <reserved-1F8AE>..<reserved-1F8FF>
+1F8AE..1F8AF >FFFD # NA <reserved-1F8AE>..<reserved-1F8AF>
+# 1F8B0..1F8B1valid # 13.0 ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F8B2..1F8FF >FFFD # NA <reserved-1F8B2>..<reserved-1F8FF>
# 1F900..1F90Bvalid # 10.0 CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90C >FFFD # NA <reserved-1F90C>
+# 1F90C valid # 13.0 PINCHED FINGERS
# 1F90D..1F90Fvalid # 12.0 WHITE HEART..PINCHING HAND
# 1F910..1F918valid # 8.0 ZIPPER-MOUTH FACE..SIGN OF THE HORNS
# 1F919..1F91Evalid # 9.0 CALL ME HAND..HAND WITH INDEX AND MIDDLE FINGERS CROSSED
@@ -8038,9 +8097,10 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F95F..1F96Bvalid # 10.0 DUMPLING..CANNED FOOD
# 1F96C..1F970valid # 11.0 LEAFY GREEN..SMILING FACE WITH SMILING EYES AND THREE HEARTS
# 1F971 valid # 12.0 YAWNING FACE
-1F972 >FFFD # NA <reserved-1F972>
+# 1F972 valid # 13.0 SMILING FACE WITH TEAR
# 1F973..1F976valid # 11.0 FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F977..1F979 >FFFD # NA <reserved-1F977>..<reserved-1F979>
+# 1F977..1F978valid # 13.0 NINJA..DISGUISED FACE
+1F979 >FFFD # NA <reserved-1F979>
# 1F97A valid # 11.0 FACE WITH PLEADING EYES
# 1F97B valid # 12.0 SARI
# 1F97C..1F97Fvalid # 11.0 LAB COAT..FLAT SHOE
@@ -8048,16 +8108,17 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F985..1F991valid # 9.0 EAGLE..SQUID
# 1F992..1F997valid # 10.0 GIRAFFE FACE..CRICKET
# 1F998..1F9A2valid # 11.0 KANGAROO..SWAN
-1F9A3..1F9A4 >FFFD # NA <reserved-1F9A3>..<reserved-1F9A4>
+# 1F9A3..1F9A4valid # 13.0 MAMMOTH..DODO
# 1F9A5..1F9AAvalid # 12.0 SLOTH..OYSTER
-1F9AB..1F9AD >FFFD # NA <reserved-1F9AB>..<reserved-1F9AD>
+# 1F9AB..1F9ADvalid # 13.0 BEAVER..SEAL
# 1F9AE..1F9AFvalid # 12.0 GUIDE DOG..PROBING CANE
# 1F9B0..1F9B9valid # 11.0 EMOJI COMPONENT RED HAIR..SUPERVILLAIN
# 1F9BA..1F9BFvalid # 12.0 SAFETY VEST..MECHANICAL LEG
# 1F9C0 valid # 8.0 CHEESE WEDGE
# 1F9C1..1F9C2valid # 11.0 CUPCAKE..SALT SHAKER
# 1F9C3..1F9CAvalid # 12.0 BEVERAGE BOX..ICE CUBE
-1F9CB..1F9CC >FFFD # NA <reserved-1F9CB>..<reserved-1F9CC>
+# 1F9CB valid # 13.0 BUBBLE TEA
+1F9CC >FFFD # NA <reserved-1F9CC>
# 1F9CD..1F9CFvalid # 12.0 STANDING PERSON..DEAF PERSON
# 1F9D0..1F9E6valid # 10.0 FACE WITH MONOCLE..SOCKS
# 1F9E7..1F9FFvalid # 11.0 RED GIFT ENVELOPE..NAZAR AMULET
@@ -8066,16 +8127,41 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1FA60..1FA6Dvalid # 11.0 XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
1FA6E..1FA6F >FFFD # NA <reserved-1FA6E>..<reserved-1FA6F>
# 1FA70..1FA73valid # 12.0 BALLET SHOES..SHORTS
-1FA74..1FA77 >FFFD # NA <reserved-1FA74>..<reserved-1FA77>
+# 1FA74 valid # 13.0 THONG SANDAL
+1FA75..1FA77 >FFFD # NA <reserved-1FA75>..<reserved-1FA77>
# 1FA78..1FA7Avalid # 12.0 DROP OF BLOOD..STETHOSCOPE
1FA7B..1FA7F >FFFD # NA <reserved-1FA7B>..<reserved-1FA7F>
# 1FA80..1FA82valid # 12.0 YO-YO..PARACHUTE
-1FA83..1FA8F >FFFD # NA <reserved-1FA83>..<reserved-1FA8F>
+# 1FA83..1FA86valid # 13.0 BOOMERANG..NESTING DOLLS
+1FA87..1FA8F >FFFD # NA <reserved-1FA87>..<reserved-1FA8F>
# 1FA90..1FA95valid # 12.0 RINGED PLANET..BANJO
-1FA96..1FFFD >FFFD # NA <reserved-1FA96>..<reserved-1FFFD>
+# 1FA96..1FAA8valid # 13.0 MILITARY HELMET..ROCK
+1FAA9..1FAAF >FFFD # NA <reserved-1FAA9>..<reserved-1FAAF>
+# 1FAB0..1FAB6valid # 13.0 FLY..FEATHER
+1FAB7..1FABF >FFFD # NA <reserved-1FAB7>..<reserved-1FABF>
+# 1FAC0..1FAC2valid # 13.0 ANATOMICAL HEART..PEOPLE HUGGING
+1FAC3..1FACF >FFFD # NA <reserved-1FAC3>..<reserved-1FACF>
+# 1FAD0..1FAD6valid # 13.0 BLUEBERRIES..TEAPOT
+1FAD7..1FAFF >FFFD # NA <reserved-1FAD7>..<reserved-1FAFF>
+# 1FB00..1FB92valid # 13.0 BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB93 >FFFD # NA <reserved-1FB93>
+# 1FB94..1FBCAvalid # 13.0 LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBCB..1FBEF >FFFD # NA <reserved-1FBCB>..<reserved-1FBEF>
+1FBF0 >0030 # 13.0 SEGMENTED DIGIT ZERO
+1FBF1 >0031 # 13.0 SEGMENTED DIGIT ONE
+1FBF2 >0032 # 13.0 SEGMENTED DIGIT TWO
+1FBF3 >0033 # 13.0 SEGMENTED DIGIT THREE
+1FBF4 >0034 # 13.0 SEGMENTED DIGIT FOUR
+1FBF5 >0035 # 13.0 SEGMENTED DIGIT FIVE
+1FBF6 >0036 # 13.0 SEGMENTED DIGIT SIX
+1FBF7 >0037 # 13.0 SEGMENTED DIGIT SEVEN
+1FBF8 >0038 # 13.0 SEGMENTED DIGIT EIGHT
+1FBF9 >0039 # 13.0 SEGMENTED DIGIT NINE
+1FBFA..1FFFD >FFFD # NA <reserved-1FBFA>..<reserved-1FFFD>
1FFFE..1FFFF >FFFD # 2.0 <noncharacter-1FFFE>..<noncharacter-1FFFF>
# 20000..2A6D6valid # 3.1 CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2A6D7..2A6FF >FFFD # NA <reserved-2A6D7>..<reserved-2A6FF>
+# 2A6D7..2A6DDvalid # 13.0 CJK UNIFIED IDEOGRAPH-2A6D7..CJK UNIFIED IDEOGRAPH-2A6DD
+2A6DE..2A6FF >FFFD # NA <reserved-2A6DE>..<reserved-2A6FF>
# 2A700..2B734valid # 5.2 CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B735..2B73F >FFFD # NA <reserved-2B735>..<reserved-2B73F>
# 2B740..2B81Dvalid # 6.0 CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
@@ -8618,7 +8704,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
2FA1D >2A600 # 3.1 CJK COMPATIBILITY IDEOGRAPH-2FA1D
2FA1E..2FFFD >FFFD # NA <reserved-2FA1E>..<reserved-2FFFD>
2FFFE..2FFFF >FFFD # 2.0 <noncharacter-2FFFE>..<noncharacter-2FFFF>
-30000..3FFFD >FFFD # NA <reserved-30000>..<reserved-3FFFD>
+# 30000..3134Avalid # 13.0 CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+3134B..3FFFD >FFFD # NA <reserved-3134B>..<reserved-3FFFD>
3FFFE..3FFFF >FFFD # 2.0 <noncharacter-3FFFE>..<noncharacter-3FFFF>
40000..4FFFD >FFFD # NA <reserved-40000>..<reserved-4FFFD>
4FFFE..4FFFF >FFFD # 2.0 <noncharacter-4FFFE>..<noncharacter-4FFFF>
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt b/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
index 83a8e59245e..3e2d55cb212 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
@@ -1,7 +1,7 @@
# Preparsed UCD generated by ICU preparseucd.py
# Copyright (C) 1991 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
-ucd;12.1.0
+ucd;13.0.0
property;Catalog;age;Age
property;Binary;AHex;ASCII_Hex_Digit
@@ -125,6 +125,7 @@ value;age;10.0;V10_0
value;age;11.0;V11_0
value;age;12.0;V12_0
value;age;12.1;V12_1
+value;age;13.0;V13_0
value;age;2.0;V2_0
value;age;2.1;V2_1
value;age;3.0;V3_0
@@ -212,6 +213,7 @@ value;blk;CJK_Ext_C;CJK_Unified_Ideographs_Extension_C
value;blk;CJK_Ext_D;CJK_Unified_Ideographs_Extension_D
value;blk;CJK_Ext_E;CJK_Unified_Ideographs_Extension_E
value;blk;CJK_Ext_F;CJK_Unified_Ideographs_Extension_F
+value;blk;CJK_Ext_G;CJK_Unified_Ideographs_Extension_G
value;blk;CJK_Radicals_Sup;CJK_Radicals_Supplement
value;blk;CJK_Strokes;CJK_Strokes
value;blk;CJK_Symbols;CJK_Symbols_And_Punctuation
@@ -222,6 +224,7 @@ value;blk;Cham;Cham
value;blk;Cherokee;Cherokee
value;blk;Cherokee_Sup;Cherokee_Supplement
value;blk;Chess_Symbols;Chess_Symbols
+value;blk;Chorasmian;Chorasmian
value;blk;Compat_Jamo;Hangul_Compatibility_Jamo
value;blk;Control_Pictures;Control_Pictures
value;blk;Coptic;Coptic
@@ -244,6 +247,7 @@ value;blk;Diacriticals_Ext;Combining_Diacritical_Marks_Extended
value;blk;Diacriticals_For_Symbols;Combining_Diacritical_Marks_For_Symbols;Combining_Marks_For_Symbols
value;blk;Diacriticals_Sup;Combining_Diacritical_Marks_Supplement
value;blk;Dingbats;Dingbats
+value;blk;Dives_Akuru;Dives_Akuru
value;blk;Dogra;Dogra
value;blk;Domino;Domino_Tiles
value;blk;Duployan;Duployan
@@ -307,6 +311,7 @@ value;blk;Katakana;Katakana
value;blk;Katakana_Ext;Katakana_Phonetic_Extensions
value;blk;Kayah_Li;Kayah_Li
value;blk;Kharoshthi;Kharoshthi
+value;blk;Khitan_Small_Script;Khitan_Small_Script
value;blk;Khmer;Khmer
value;blk;Khmer_Symbols;Khmer_Symbols
value;blk;Khojki;Khojki
@@ -326,6 +331,7 @@ value;blk;Linear_A;Linear_A
value;blk;Linear_B_Ideograms;Linear_B_Ideograms
value;blk;Linear_B_Syllabary;Linear_B_Syllabary
value;blk;Lisu;Lisu
+value;blk;Lisu_Sup;Lisu_Supplement
value;blk;Low_Surrogates;Low_Surrogates
value;blk;Lycian;Lycian
value;blk;Lydian;Lydian
@@ -432,6 +438,7 @@ value;blk;Super_And_Sub;Superscripts_And_Subscripts
value;blk;Sutton_SignWriting;Sutton_SignWriting
value;blk;Syloti_Nagri;Syloti_Nagri
value;blk;Symbols_And_Pictographs_Ext_A;Symbols_And_Pictographs_Extended_A
+value;blk;Symbols_For_Legacy_Computing;Symbols_For_Legacy_Computing
value;blk;Syriac;Syriac
value;blk;Syriac_Sup;Syriac_Supplement
value;blk;Tagalog;Tagalog
@@ -446,6 +453,7 @@ value;blk;Tamil;Tamil
value;blk;Tamil_Sup;Tamil_Supplement
value;blk;Tangut;Tangut
value;blk;Tangut_Components;Tangut_Components
+value;blk;Tangut_Sup;Tangut_Supplement
value;blk;Telugu;Telugu
value;blk;Thaana;Thaana
value;blk;Thai;Thai
@@ -463,6 +471,7 @@ value;blk;Vedic_Ext;Vedic_Extensions
value;blk;Vertical_Forms;Vertical_Forms
value;blk;Wancho;Wancho
value;blk;Warang_Citi;Warang_Citi
+value;blk;Yezidi;Yezidi
value;blk;Yi_Radicals;Yi_Radicals
value;blk;Yi_Syllables;Yi_Syllables
value;blk;Yijing;Yijing_Hexagram_Symbols
@@ -522,6 +531,7 @@ value;ccc;33;CCC33;CCC33
value;ccc;34;CCC34;CCC34
value;ccc;35;CCC35;CCC35
value;ccc;36;CCC36;CCC36
+value;ccc;6;HANR;Han_Reading
value;ccc;7;NK;Nukta
value;ccc;8;KV;Kana_Voicing
value;ccc;84;CCC84;CCC84
@@ -661,6 +671,7 @@ value;InPC;Overstruck;Overstruck
value;InPC;Right;Right
value;InPC;Top;Top
value;InPC;Top_And_Bottom;Top_And_Bottom
+value;InPC;Top_And_Bottom_And_Left;Top_And_Bottom_And_Left
value;InPC;Top_And_Bottom_And_Right;Top_And_Bottom_And_Right
value;InPC;Top_And_Left;Top_And_Left
value;InPC;Top_And_Left_And_Right;Top_And_Left_And_Right
@@ -905,6 +916,7 @@ value;lccc;33;CCC33;CCC33
value;lccc;34;CCC34;CCC34
value;lccc;35;CCC35;CCC35
value;lccc;36;CCC36;CCC36
+value;lccc;6;HANR;Han_Reading
value;lccc;7;NK;Nukta
value;lccc;8;KV;Kana_Voicing
value;lccc;84;CCC84;CCC84
@@ -964,12 +976,14 @@ value;sc;Cans;Canadian_Aboriginal
value;sc;Cari;Carian
value;sc;Cham;Cham
value;sc;Cher;Cherokee
+value;sc;Chrs;Chorasmian
value;sc;Cirt;Cirt
value;sc;Copt;Coptic;Qaac
value;sc;Cprt;Cypriot
value;sc;Cyrl;Cyrillic
value;sc;Cyrs;Cyrs
value;sc;Deva;Devanagari
+value;sc;Diak;Dives_Akuru
value;sc;Dogr;Dogra
value;sc;Dsrt;Deseret
value;sc;Dupl;Duployan
@@ -1014,6 +1028,7 @@ value;sc;Kana;Katakana
value;sc;Khar;Kharoshthi
value;sc;Khmr;Khmer
value;sc;Khoj;Khojki
+value;sc;Kits;Khitan_Small_Script
value;sc;Knda;Kannada
value;sc;Kore;Kore
value;sc;Kpel;Kpel
@@ -1119,6 +1134,7 @@ value;sc;Wcho;Wancho
value;sc;Wole;Wole
value;sc;Xpeo;Old_Persian
value;sc;Xsux;Cuneiform
+value;sc;Yezi;Yezidi
value;sc;Yiii;Yi
value;sc;Zanb;Zanabazar_Square
value;sc;Zinh;Inherited;Qaai
@@ -1180,6 +1196,7 @@ value;tccc;33;CCC33;CCC33
value;tccc;34;CCC34;CCC34
value;tccc;35;CCC35;CCC35
value;tccc;36;CCC36;CCC36
+value;tccc;6;HANR;Han_Reading
value;tccc;7;NK;Nukta
value;tccc;8;KV;Kana_Voicing
value;tccc;84;CCC84;CCC84
@@ -1701,7 +1718,7 @@ cp;01C0;-Cased;-CWCM;gc=Lo;na=LATIN LETTER DENTAL CLICK;SB=LE
cp;01C1;-Cased;-CWCM;gc=Lo;na=LATIN LETTER LATERAL CLICK;SB=LE
cp;01C2;-Cased;-CWCM;gc=Lo;na=LATIN LETTER ALVEOLAR CLICK;SB=LE
cp;01C3;-Cased;-CWCM;gc=Lo;na=LATIN LETTER RETROFLEX CLICK;SB=LE
-# Croatian digraphs matching Serbian Cyrillic letters
+# Latin digraphs matching Serbian Cyrillic letters
cp;01C4;cf=01C6;CWCF;CWKCF;CWL;CWT;dm=0044 017D;dt=Com;na=LATIN CAPITAL LETTER DZ WITH CARON;NFKC_CF=0064 017E;NFKC_QC=N;NFKD_QC=N;scf=01C6;slc=01C6;stc=01C5;Upper
cp;01C5;cf=01C6;CWCF;CWKCF;CWL;CWU;dm=0044 017E;dt=Com;gc=Lt;na=LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;NFKC_CF=0064 017E;NFKC_QC=N;NFKD_QC=N;scf=01C6;slc=01C6;stc=01C5;suc=01C4
cp;01C6;CWKCF;CWT;CWU;dm=0064 017E;dt=Com;gc=Ll;Lower;na=LATIN SMALL LETTER DZ WITH CARON;NFKC_CF=0064 017E;NFKC_QC=N;NFKD_QC=N;SB=LO;stc=01C5;suc=01C4
@@ -2017,14 +2034,14 @@ cp;02E2;Alpha;bc=L;Cased;CWKCF;dm=0073;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LE
cp;02E3;Alpha;bc=L;Cased;CWKCF;dm=0078;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL X;NFKC_CF=0078;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS
cp;02E4;Alpha;bc=L;Cased;CWKCF;dm=0295;dt=Sup;gc=Lm;IDC;IDS;Lower;na=MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;NFKC_CF=0295;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;XIDC;XIDS
# Tone letters
-cp;02E5;na=MODIFIER LETTER EXTRA-HIGH TONE BAR;WB=XX
-cp;02E6;na=MODIFIER LETTER HIGH TONE BAR;WB=XX
-cp;02E7;na=MODIFIER LETTER MID TONE BAR;WB=XX
-cp;02E8;na=MODIFIER LETTER LOW TONE BAR;WB=XX
-cp;02E9;na=MODIFIER LETTER EXTRA-LOW TONE BAR;WB=XX
+cp;02E5;na=MODIFIER LETTER EXTRA-HIGH TONE BAR
+cp;02E6;na=MODIFIER LETTER HIGH TONE BAR
+cp;02E7;na=MODIFIER LETTER MID TONE BAR
+cp;02E8;na=MODIFIER LETTER LOW TONE BAR
+cp;02E9;na=MODIFIER LETTER EXTRA-LOW TONE BAR
# Extended Bopomofo tone marks
-cp;02EA;age=3.0;na=MODIFIER LETTER YIN DEPARTING TONE MARK;sc=Bopo;vo=U;WB=XX
-cp;02EB;age=3.0;na=MODIFIER LETTER YANG DEPARTING TONE MARK;sc=Bopo;vo=U;WB=XX
+cp;02EA;age=3.0;na=MODIFIER LETTER YIN DEPARTING TONE MARK;sc=Bopo;vo=U
+cp;02EB;age=3.0;na=MODIFIER LETTER YANG DEPARTING TONE MARK;sc=Bopo;vo=U
# IPA modifiers
cp;02EC;age=3.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER VOICING;SB=LE;XIDC;XIDS
cp;02ED;age=3.0;na=MODIFIER LETTER UNASPIRATED
@@ -2717,12 +2734,12 @@ cp;0556;cf=0586;CWCF;CWKCF;CWL;gc=Lu;na=ARMENIAN CAPITAL LETTER FEH;NFKC_CF=0586
unassigned;0557..0558
# Modifier letters
cp;0559;-Cased;CI;-CWCM;Dia;gc=Lm;na=ARMENIAN MODIFIER LETTER LEFT HALF RING;SB=LE
-cp;055A;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN APOSTROPHE;SB=XX;WB=XX;-XIDC;-XIDS
+cp;055A;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN APOSTROPHE;SB=XX;-XIDC;-XIDS
cp;055B;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN EMPHASIS MARK;SB=XX;-XIDC;-XIDS
cp;055C;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN EXCLAMATION MARK;SB=XX;-XIDC;-XIDS
cp;055D;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN COMMA;SB=SC;WB=XX;-XIDC;-XIDS
cp;055E;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN QUESTION MARK;SB=XX;-XIDC;-XIDS
-cp;055F;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN ABBREVIATION MARK;SB=XX;WB=XX;-XIDC;-XIDS
+cp;055F;-Alpha;-Cased;CI;-CWCM;gc=Po;-IDC;-IDS;na=ARMENIAN ABBREVIATION MARK;SB=XX;WB=ML;-XIDC;-XIDS
# Lowercase letters
cp;0560;age=11.0;-CWCM;Lower;na=ARMENIAN SMALL LETTER TURNED AYB
cp;0561;CWT;CWU;Lower;na=ARMENIAN SMALL LETTER AYB;stc=0531;suc=0531
@@ -2766,8 +2783,8 @@ cp;0586;CWT;CWU;Lower;na=ARMENIAN SMALL LETTER FEH;stc=0556;suc=0556
cp;0587;cf=0565 0582;CWCF;CWKCF;CWT;CWU;dm=0565 0582;dt=Com;lc=0587;Lower;na=ARMENIAN SMALL LIGATURE ECH YIWN;NFKC_CF=0565 0582;NFKC_QC=N;NFKD_QC=N;tc=0535 0582;uc=0535 0552
cp;0588;age=11.0;-CWCM;Lower;na=ARMENIAN SMALL LETTER YI WITH STROKE
# Punctuation
-cp;0589;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;lb=IS;na=ARMENIAN FULL STOP;SB=ST;sc=Zyyy;scx=Armn Geor;STerm;Term;WB=MN;-XIDC;-XIDS
-cp;058A;age=3.0;-Alpha;bc=ON;-Cased;-CWCM;Dash;gc=Pd;Hyphen;-IDC;-IDS;lb=BA;na=ARMENIAN HYPHEN;SB=XX;WB=XX;-XIDC;-XIDS
+cp;0589;-Alpha;-Cased;-CWCM;gc=Po;-IDC;-IDS;lb=IS;na=ARMENIAN FULL STOP;SB=ST;STerm;Term;WB=MN;-XIDC;-XIDS
+cp;058A;age=3.0;-Alpha;bc=ON;-Cased;-CWCM;Dash;gc=Pd;Hyphen;-IDC;-IDS;lb=BA;na=ARMENIAN HYPHEN;SB=XX;-XIDC;-XIDS
unassigned;058B..058C
# Religious symbols
cp;058D;age=7.0;-Alpha;bc=ON;-Cased;-CWCM;gc=So;-IDC;-IDS;na=RIGHT-FACING ARMENIAN ETERNITY SIGN;SB=XX;WB=XX;-XIDC;-XIDS
@@ -2899,7 +2916,7 @@ cp;060A;age=5.1;-Alpha;bc=ET;gc=Po;-IDC;-IDS;jt=U;lb=PO;na=ARABIC-INDIC PER TEN
# Currency symbol
cp;060B;age=4.1;-Alpha;gc=Sc;-IDC;-IDS;jt=U;lb=PO;na=AFGHANI SIGN;SB=XX;WB=XX;-XIDC;-XIDS
# Punctuation
-cp;060C;-Alpha;bc=CS;gc=Po;-IDC;-IDS;jt=U;lb=IS;na=ARABIC COMMA;SB=SC;sc=Zyyy;scx=Arab Rohg Syrc Thaa;Term;WB=MN;-XIDC;-XIDS
+cp;060C;-Alpha;bc=CS;gc=Po;-IDC;-IDS;jt=U;lb=IS;na=ARABIC COMMA;SB=SC;sc=Zyyy;scx=Arab Rohg Syrc Thaa Yezi;Term;WB=MN;-XIDC;-XIDS
cp;060D;age=4.0;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=IS;na=ARABIC DATE SEPARATOR;SB=SC;WB=MN;-XIDC;-XIDS
# Poetic marks
cp;060E;age=4.0;-Alpha;bc=ON;gc=So;-IDC;-IDS;jt=U;na=ARABIC POETIC VERSE SIGN;SB=XX;WB=XX;-XIDC;-XIDS
@@ -2920,13 +2937,13 @@ cp;0618;age=5.1;bc=NSM;ccc=30;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na
cp;0619;age=5.1;bc=NSM;ccc=31;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL DAMMA;SB=EX;WB=Extend;-XIDS
cp;061A;age=5.1;bc=NSM;ccc=32;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL KASRA;SB=EX;WB=Extend;-XIDS
# Punctuation
-cp;061B;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC SEMICOLON;SB=XX;sc=Zyyy;scx=Arab Rohg Syrc Thaa;Term;WB=XX;-XIDC;-XIDS
+cp;061B;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC SEMICOLON;SB=XX;sc=Zyyy;scx=Arab Rohg Syrc Thaa Yezi;Term;WB=XX;-XIDC;-XIDS
# Format character
cp;061C;age=6.3;-Alpha;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;-IDC;-IDS;jt=T;lb=CM;na=ARABIC LETTER MARK;Name_Alias=abbreviation=ALM;NFKC_CF=;SB=FO;scx=Arab Syrc Thaa;WB=FO;-XIDC;-XIDS
unassigned;061D;bc=AL
# Punctuation
cp;061E;age=4.1;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC TRIPLE DOT PUNCTUATION MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
-cp;061F;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC QUESTION MARK;SB=ST;sc=Zyyy;scx=Arab Rohg Syrc Thaa;STerm;Term;WB=XX;-XIDC;-XIDS
+cp;061F;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC QUESTION MARK;SB=ST;sc=Zyyy;scx=Arab Rohg Syrc Thaa Yezi;STerm;Term;WB=XX;-XIDC;-XIDS
# Addition for Kashmiri
cp;0620;age=6.0;jg=Yeh;na=ARABIC LETTER KASHMIRI YEH
# Based on ISO 8859-6
@@ -2999,16 +3016,16 @@ cp;065D;age=4.1;bc=NSM;ccc=230;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;n
cp;065E;age=4.1;bc=NSM;ccc=230;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC FATHA WITH TWO DOTS;SB=EX;WB=Extend;-XIDS
cp;065F;age=6.0;bc=NSM;ccc=220;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC WAVY HAMZA BELOW;SB=EX;WB=Extend;-XIDS
# Arabic-Indic digits
-cp;0660;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT ZERO;nt=De;nv=0;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0661;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT ONE;nt=De;nv=1;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0662;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT TWO;nt=De;nv=2;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0663;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT THREE;nt=De;nv=3;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0664;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT FOUR;nt=De;nv=4;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0665;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT FIVE;nt=De;nv=5;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0666;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT SIX;nt=De;nv=6;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0667;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT SEVEN;nt=De;nv=7;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0668;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT EIGHT;nt=De;nv=8;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
-cp;0669;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT NINE;nt=De;nv=9;SB=NU;scx=Arab Thaa;WB=NU;-XIDS
+cp;0660;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT ZERO;nt=De;nv=0;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0661;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT ONE;nt=De;nv=1;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0662;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT TWO;nt=De;nv=2;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0663;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT THREE;nt=De;nv=3;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0664;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT FOUR;nt=De;nv=4;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0665;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT FIVE;nt=De;nv=5;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0666;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT SIX;nt=De;nv=6;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0667;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT SEVEN;nt=De;nv=7;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0668;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT EIGHT;nt=De;nv=8;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
+cp;0669;-Alpha;bc=AN;gc=Nd;-IDS;jt=U;lb=NU;na=ARABIC-INDIC DIGIT NINE;nt=De;nv=9;SB=NU;scx=Arab Thaa Yezi;WB=NU;-XIDS
# Punctuation
cp;066A;-Alpha;bc=ET;gc=Po;-IDC;-IDS;jt=U;lb=PO;na=ARABIC PERCENT SIGN;SB=XX;WB=XX;-XIDC;-XIDS
cp;066B;-Alpha;bc=AN;gc=Po;-IDC;-IDS;jt=U;lb=NU;na=ARABIC DECIMAL SEPARATOR;SB=NU;WB=NU;-XIDC;-XIDS
@@ -3550,9 +3567,9 @@ cp;0852;na=MANDAIC LETTER AQ
cp;0853;na=MANDAIC LETTER AR
cp;0854;jt=R;na=MANDAIC LETTER ASH
cp;0855;na=MANDAIC LETTER AT
-cp;0856;jt=U;na=MANDAIC LETTER DUSHENNA
-cp;0857;jt=U;na=MANDAIC LETTER KAD
-cp;0858;jt=U;na=MANDAIC LETTER AIN
+cp;0856;jt=R;na=MANDAIC LETTER DUSHENNA
+cp;0857;jt=R;na=MANDAIC LETTER KAD
+cp;0858;jt=R;na=MANDAIC LETTER AIN
# Diacritics
cp;0859;-Alpha;bc=NSM;ccc=220;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=MANDAIC AFFRICATION MARK;SB=EX;WB=Extend;-XIDS
cp;085A;-Alpha;bc=NSM;ccc=220;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=MANDAIC VOCALIZATION MARK;SB=EX;WB=Extend;-XIDS
@@ -3581,98 +3598,111 @@ unassigned;086B..086F;bc=AL
# No block
unassigned;0870..089F;bc=R
-block;08A0..08FF;age=6.1;Alpha;bc=NSM;blk=Arabic_Ext_A;ccc=230;CI;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;SB=EX;sc=Arab;WB=Extend;XIDC
+block;08A0..08FF;age=6.1;Alpha;bc=NSM;blk=Arabic_Ext_A;gc=Mn;GCB=EX;IDC;jt=T;lb=CM;SB=EX;sc=Arab;WB=Extend;XIDC
# 08A0..08FF Arabic Extended-A
# Arabic letters for African languages
-cp;08A0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL V BELOW;SB=LE;WB=LE;XIDS
-cp;08A1;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH HAMZA ABOVE;SB=LE;WB=LE;XIDS
-cp;08A2;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A3;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Tah;jt=D;lb=AL;na=ARABIC LETTER TAH WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A4;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Feh;jt=D;lb=AL;na=ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A5;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Qaf;jt=D;lb=AL;na=ARABIC LETTER QAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
-cp;08A6;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH DOUBLE BAR;SB=LE;WB=LE;XIDS
-cp;08A7;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Meem;jt=D;lb=AL;na=ARABIC LETTER MEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A8;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;SB=LE;WB=LE;XIDS
-cp;08A9;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;SB=LE;WB=LE;XIDS
+cp;08A0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL V BELOW;SB=LE;WB=LE;XIDS
+cp;08A1;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH HAMZA ABOVE;SB=LE;WB=LE;XIDS
+cp;08A2;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A3;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Tah;jt=D;lb=AL;na=ARABIC LETTER TAH WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A4;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Feh;jt=D;lb=AL;na=ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A5;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Qaf;jt=D;lb=AL;na=ARABIC LETTER QAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
+cp;08A6;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH DOUBLE BAR;SB=LE;WB=LE;XIDS
+cp;08A7;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Meem;jt=D;lb=AL;na=ARABIC LETTER MEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A8;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;SB=LE;WB=LE;XIDS
+cp;08A9;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;SB=LE;WB=LE;XIDS
# Dependent consonants for Rohingya
-cp;08AA;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH LOOP;SB=LE;WB=LE;XIDS
-cp;08AB;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Waw;jt=R;lb=AL;na=ARABIC LETTER WAW WITH DOT WITHIN;SB=LE;WB=LE;XIDS
-cp;08AC;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Rohingya_Yeh;jt=R;lb=AL;na=ARABIC LETTER ROHINGYA YEH;SB=LE;WB=LE;XIDS
+cp;08AA;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH LOOP;SB=LE;WB=LE;XIDS
+cp;08AB;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Waw;jt=R;lb=AL;na=ARABIC LETTER WAW WITH DOT WITHIN;SB=LE;WB=LE;XIDS
+cp;08AC;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Rohingya_Yeh;jt=R;lb=AL;na=ARABIC LETTER ROHINGYA YEH;SB=LE;WB=LE;XIDS
# Arabic letters for European and Central Asian languages
-cp;08AD;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jt=U;lb=AL;na=ARABIC LETTER LOW ALEF;SB=LE;WB=LE;XIDS
-cp;08AE;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Dal;jt=R;lb=AL;na=ARABIC LETTER DAL WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
-cp;08AF;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Sad;jt=D;lb=AL;na=ARABIC LETTER SAD WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
-cp;08B0;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER GAF WITH INVERTED STROKE;SB=LE;WB=LE;XIDS
-cp;08B1;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Straight_Waw;jt=R;lb=AL;na=ARABIC LETTER STRAIGHT WAW;SB=LE;WB=LE;XIDS
+cp;08AD;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jt=U;lb=AL;na=ARABIC LETTER LOW ALEF;SB=LE;WB=LE;XIDS
+cp;08AE;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Dal;jt=R;lb=AL;na=ARABIC LETTER DAL WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08AF;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Sad;jt=D;lb=AL;na=ARABIC LETTER SAD WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08B0;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER GAF WITH INVERTED STROKE;SB=LE;WB=LE;XIDS
+cp;08B1;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Straight_Waw;jt=R;lb=AL;na=ARABIC LETTER STRAIGHT WAW;SB=LE;WB=LE;XIDS
# Arabic letter for Berber
-cp;08B2;age=7.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER ZAIN WITH INVERTED V ABOVE;SB=LE;WB=LE;XIDS
+cp;08B2;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER ZAIN WITH INVERTED V ABOVE;SB=LE;WB=LE;XIDS
# Arabic letters for Arwi
-cp;08B3;age=8.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER AIN WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
-cp;08B4;age=8.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Kaf;jt=D;lb=AL;na=ARABIC LETTER KAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
+cp;08B3;age=8.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER AIN WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08B4;age=8.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Kaf;jt=D;lb=AL;na=ARABIC LETTER KAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
unassigned;08B5;bc=AL
# Arabic letters for Bravanese
-cp;08B6;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
-cp;08B7;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
-cp;08B8;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL TEH ABOVE;SB=LE;WB=LE;XIDS
-cp;08B9;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
-cp;08BA;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
+cp;08B6;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
+cp;08B7;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
+cp;08B8;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL TEH ABOVE;SB=LE;WB=LE;XIDS
+cp;08B9;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
+cp;08BA;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
# Arabic letters for Warsh orthography
-cp;08BB;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Feh;jt=D;lb=AL;na=ARABIC LETTER AFRICAN FEH;SB=LE;WB=LE;XIDS
-cp;08BC;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF;SB=LE;WB=LE;XIDS
-cp;08BD;age=9.0;bc=AL;ccc=0;-CI;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Noon;jt=D;lb=AL;na=ARABIC LETTER AFRICAN NOON;SB=LE;WB=LE;XIDS
-unassigned;08BE..08D2;bc=AL
+cp;08BB;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Feh;jt=D;lb=AL;na=ARABIC LETTER AFRICAN FEH;SB=LE;WB=LE;XIDS
+cp;08BC;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF;SB=LE;WB=LE;XIDS
+cp;08BD;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Noon;jt=D;lb=AL;na=ARABIC LETTER AFRICAN NOON;SB=LE;WB=LE;XIDS
+# Arabic letters for Hindko
+cp;08BE;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08BF;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08C0;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TTEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08C1;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER TCHEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08C2;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER KEHEH WITH SMALL V;SB=LE;WB=LE;XIDS
+# Arabic letters for Hausa, Wolof and other African orthographies
+cp;08C3;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08C4;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08C5;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08C6;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+# Arabic letter for Punjabi
+cp;08C7;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;SB=LE;WB=LE;XIDS
+unassigned;08C8..08D2;bc=AL
# Quranic annotation signs
-cp;08D3;age=11.0;-Alpha;ccc=220;na=ARABIC SMALL LOW WAW
-cp;08D4;age=9.0;na=ARABIC SMALL HIGH WORD AR-RUB
-cp;08D5;age=9.0;na=ARABIC SMALL HIGH SAD
-cp;08D6;age=9.0;na=ARABIC SMALL HIGH AIN
-cp;08D7;age=9.0;na=ARABIC SMALL HIGH QAF
-cp;08D8;age=9.0;na=ARABIC SMALL HIGH NOON WITH KASRA
-cp;08D9;age=9.0;na=ARABIC SMALL LOW NOON WITH KASRA
-cp;08DA;age=9.0;na=ARABIC SMALL HIGH WORD ATH-THALATHA
-cp;08DB;age=9.0;na=ARABIC SMALL HIGH WORD AS-SAJDA
-cp;08DC;age=9.0;na=ARABIC SMALL HIGH WORD AN-NISF
-cp;08DD;age=9.0;na=ARABIC SMALL HIGH WORD SAKTA
-cp;08DE;age=9.0;na=ARABIC SMALL HIGH WORD QIF
-cp;08DF;age=9.0;na=ARABIC SMALL HIGH WORD WAQFA
-cp;08E0;age=9.0;-Alpha;na=ARABIC SMALL HIGH FOOTNOTE MARKER
-cp;08E1;age=9.0;-Alpha;na=ARABIC SMALL HIGH SIGN SAFHA
-cp;08E2;age=9.0;-Alpha;bc=AN;ccc=0;gc=Cf;GCB=PP;-Gr_Ext;-IDC;jt=U;lb=AL;na=ARABIC DISPUTED END OF AYAH;PCM;SB=FO;sc=Zyyy;WB=FO;-XIDC
+cp;08D3;age=11.0;-Alpha;ccc=220;CI;Gr_Ext;na=ARABIC SMALL LOW WAW
+cp;08D4;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD AR-RUB
+cp;08D5;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH SAD
+cp;08D6;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH AIN
+cp;08D7;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH QAF
+cp;08D8;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH NOON WITH KASRA
+cp;08D9;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL LOW NOON WITH KASRA
+cp;08DA;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD ATH-THALATHA
+cp;08DB;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD AS-SAJDA
+cp;08DC;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD AN-NISF
+cp;08DD;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD SAKTA
+cp;08DE;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD QIF
+cp;08DF;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD WAQFA
+cp;08E0;age=9.0;-Alpha;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH FOOTNOTE MARKER
+cp;08E1;age=9.0;-Alpha;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH SIGN SAFHA
+cp;08E2;age=9.0;-Alpha;bc=AN;CI;gc=Cf;GCB=PP;-IDC;jt=U;lb=AL;na=ARABIC DISPUTED END OF AYAH;PCM;SB=FO;sc=Zyyy;WB=FO;-XIDC
# Extended vowel sign for Arwi
-cp;08E3;age=8.0;ccc=220;Dia;na=ARABIC TURNED DAMMA BELOW
+cp;08E3;age=8.0;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TURNED DAMMA BELOW
# Extended vowel signs for Rohingya
-cp;08E4;Dia;na=ARABIC CURLY FATHA
-cp;08E5;Dia;na=ARABIC CURLY DAMMA
-cp;08E6;ccc=220;Dia;na=ARABIC CURLY KASRA
-cp;08E7;Dia;na=ARABIC CURLY FATHATAN
-cp;08E8;Dia;na=ARABIC CURLY DAMMATAN
-cp;08E9;ccc=220;Dia;na=ARABIC CURLY KASRATAN
+cp;08E4;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY FATHA
+cp;08E5;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY DAMMA
+cp;08E6;ccc=220;CI;Dia;Gr_Ext;na=ARABIC CURLY KASRA
+cp;08E7;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY FATHATAN
+cp;08E8;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY DAMMATAN
+cp;08E9;ccc=220;CI;Dia;Gr_Ext;na=ARABIC CURLY KASRATAN
# Tone marks for Rohingya
-cp;08EA;-Alpha;Dia;na=ARABIC TONE ONE DOT ABOVE
-cp;08EB;-Alpha;Dia;na=ARABIC TONE TWO DOTS ABOVE
-cp;08EC;-Alpha;Dia;na=ARABIC TONE LOOP ABOVE
-cp;08ED;-Alpha;ccc=220;Dia;na=ARABIC TONE ONE DOT BELOW
-cp;08EE;-Alpha;ccc=220;Dia;na=ARABIC TONE TWO DOTS BELOW
-cp;08EF;-Alpha;ccc=220;Dia;na=ARABIC TONE LOOP BELOW
+cp;08EA;-Alpha;ccc=230;CI;Dia;Gr_Ext;na=ARABIC TONE ONE DOT ABOVE
+cp;08EB;-Alpha;ccc=230;CI;Dia;Gr_Ext;na=ARABIC TONE TWO DOTS ABOVE
+cp;08EC;-Alpha;ccc=230;CI;Dia;Gr_Ext;na=ARABIC TONE LOOP ABOVE
+cp;08ED;-Alpha;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TONE ONE DOT BELOW
+cp;08EE;-Alpha;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TONE TWO DOTS BELOW
+cp;08EF;-Alpha;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TONE LOOP BELOW
# Quranic annotation signs
-cp;08F0;ccc=27;Dia;na=ARABIC OPEN FATHATAN
-cp;08F1;ccc=28;Dia;na=ARABIC OPEN DAMMATAN
-cp;08F2;ccc=29;Dia;na=ARABIC OPEN KASRATAN
-cp;08F3;Dia;na=ARABIC SMALL HIGH WAW
+cp;08F0;ccc=27;CI;Dia;Gr_Ext;na=ARABIC OPEN FATHATAN
+cp;08F1;ccc=28;CI;Dia;Gr_Ext;na=ARABIC OPEN DAMMATAN
+cp;08F2;ccc=29;CI;Dia;Gr_Ext;na=ARABIC OPEN KASRATAN
+cp;08F3;ccc=230;CI;Dia;Gr_Ext;na=ARABIC SMALL HIGH WAW
# Extended vowel signs for African languages
-cp;08F4;Dia;na=ARABIC FATHA WITH RING
-cp;08F5;Dia;na=ARABIC FATHA WITH DOT ABOVE
-cp;08F6;ccc=220;Dia;na=ARABIC KASRA WITH DOT BELOW
-cp;08F7;Dia;na=ARABIC LEFT ARROWHEAD ABOVE
-cp;08F8;Dia;na=ARABIC RIGHT ARROWHEAD ABOVE
-cp;08F9;ccc=220;Dia;na=ARABIC LEFT ARROWHEAD BELOW
-cp;08FA;ccc=220;Dia;na=ARABIC RIGHT ARROWHEAD BELOW
-cp;08FB;Dia;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
-cp;08FC;Dia;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
-cp;08FD;Dia;na=ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
+cp;08F4;ccc=230;CI;Dia;Gr_Ext;na=ARABIC FATHA WITH RING
+cp;08F5;ccc=230;CI;Dia;Gr_Ext;na=ARABIC FATHA WITH DOT ABOVE
+cp;08F6;ccc=220;CI;Dia;Gr_Ext;na=ARABIC KASRA WITH DOT BELOW
+cp;08F7;ccc=230;CI;Dia;Gr_Ext;na=ARABIC LEFT ARROWHEAD ABOVE
+cp;08F8;ccc=230;CI;Dia;Gr_Ext;na=ARABIC RIGHT ARROWHEAD ABOVE
+cp;08F9;ccc=220;CI;Dia;Gr_Ext;na=ARABIC LEFT ARROWHEAD BELOW
+cp;08FA;ccc=220;CI;Dia;Gr_Ext;na=ARABIC RIGHT ARROWHEAD BELOW
+cp;08FB;ccc=230;CI;Dia;Gr_Ext;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
+cp;08FC;ccc=230;CI;Dia;Gr_Ext;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
+cp;08FD;ccc=230;CI;Dia;Gr_Ext;na=ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
# Extended vowel signs
-cp;08FE;Dia;na=ARABIC DAMMA WITH DOT
-cp;08FF;age=7.0;na=ARABIC MARK SIDEWAYS NOON GHUNNA
+cp;08FE;ccc=230;CI;Dia;Gr_Ext;na=ARABIC DAMMA WITH DOT
+cp;08FF;age=7.0;ccc=230;CI;Gr_Ext;na=ARABIC MARK SIDEWAYS NOON GHUNNA
block;0900..097F;age=1.1;Alpha;blk=Devanagari;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Deva;WB=LE;XIDC;XIDS
# 0900..097F Devanagari
@@ -4280,8 +4310,9 @@ cp;0B4B;dm=0B47 0B3E;dt=Can;gc=Mc;GCB=SM;-IDS;InPC=Left_And_Right;InSC=Vowel_Dep
cp;0B4C;dm=0B47 0B57;dt=Can;gc=Mc;GCB=SM;-IDS;InPC=Top_And_Left_And_Right;InSC=Vowel_Dependent;lb=CM;na=ORIYA VOWEL SIGN AU;NFD_QC=N;NFKD_QC=N;SB=EX;WB=Extend;-XIDS
# Virama
cp;0B4D;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Bottom;InSC=Virama;jt=T;lb=CM;na=ORIYA SIGN VIRAMA;SB=EX;WB=Extend;-XIDS
-unassigned;0B4E..0B55
+unassigned;0B4E..0B54
# Various signs
+cp;0B55;age=13.0;-Alpha;bc=NSM;CI;Dia;Ext;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=ORIYA SIGN OVERLINE;SB=EX;WB=Extend;-XIDS
cp;0B56;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=ORIYA AI LENGTH MARK;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS
cp;0B57;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top_And_Right;InSC=Vowel_Dependent;lb=CM;na=ORIYA AU LENGTH MARK;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS
unassigned;0B58..0B5B
@@ -4680,7 +4711,7 @@ cp;0D00;age=10.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu
cp;0D01;age=7.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=MALAYALAM SIGN CANDRABINDU;SB=EX;WB=Extend;-XIDS
cp;0D02;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Bindu;lb=CM;na=MALAYALAM SIGN ANUSVARA;SB=EX;WB=Extend;-XIDS
cp;0D03;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Visarga;lb=CM;na=MALAYALAM SIGN VISARGA;SB=EX;WB=Extend;-XIDS
-unassigned;0D04
+cp;0D04;age=13.0;InSC=Bindu;na=MALAYALAM LETTER VEDIC ANUSVARA
# Independent vowels
cp;0D05;InSC=Vowel_Independent;na=MALAYALAM LETTER A
cp;0D06;InSC=Vowel_Independent;na=MALAYALAM LETTER AA
@@ -4762,11 +4793,11 @@ cp;0D4C;dm=0D46 0D57;dt=Can;gc=Mc;GCB=SM;-IDS;InPC=Left_And_Right;InSC=Vowel_Dep
# Virama
cp;0D4D;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Top;InSC=Virama;jt=T;lb=CM;na=MALAYALAM SIGN VIRAMA;SB=EX;WB=Extend;-XIDS
# Dot reph
-cp;0D4E;age=6.0;GCB=PP;InSC=Consonant_Preceding_Repha;na=MALAYALAM LETTER DOT REPH
+cp;0D4E;age=6.0;GCB=PP;InPC=Top;InSC=Consonant_Preceding_Repha;na=MALAYALAM LETTER DOT REPH
# Measurement symbol
cp;0D4F;age=9.0;-Alpha;gc=So;-IDC;-IDS;InSC=Other;na=MALAYALAM SIGN PARA;SB=XX;WB=XX;-XIDC;-XIDS
unassigned;0D50..0D53
-# Chillu letters
+# Additional historic chillu letters
cp;0D54;age=9.0;InSC=Consonant_Dead;na=MALAYALAM LETTER CHILLU M
cp;0D55;age=9.0;InSC=Consonant_Dead;na=MALAYALAM LETTER CHILLU Y
cp;0D56;age=9.0;InSC=Consonant_Dead;na=MALAYALAM LETTER CHILLU LLL
@@ -4824,8 +4855,9 @@ cp;0D7F;age=5.1;InSC=Consonant_Dead;na=MALAYALAM LETTER CHILLU K
block;0D80..0DFF;age=3.0;Alpha;blk=Sinhala;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Sinh;WB=LE;XIDC;XIDS
# 0D80..0DFF Sinhala
-unassigned;0D80..0D81
+unassigned;0D80
# Various signs
+cp;0D81;age=13.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=SINHALA SIGN CANDRABINDU;SB=EX;WB=Extend;-XIDS
cp;0D82;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Bindu;lb=CM;na=SINHALA SIGN ANUSVARAYA;SB=EX;WB=Extend;-XIDS
cp;0D83;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Visarga;lb=CM;na=SINHALA SIGN VISARGAYA;SB=EX;WB=Extend;-XIDS
unassigned;0D84
@@ -5468,7 +5500,7 @@ cp;1039;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InSC=Inv
cp;103A;age=5.1;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InPC=Top;InSC=Pure_Killer;jt=T;na=MYANMAR SIGN ASAT;SB=EX
# Dependent consonant signs
cp;103B;age=5.1;gc=Mc;GCB=SM;InPC=Right;InSC=Consonant_Medial;na=MYANMAR CONSONANT SIGN MEDIAL YA;SB=EX
-cp;103C;age=5.1;gc=Mc;GCB=SM;InSC=Consonant_Medial;na=MYANMAR CONSONANT SIGN MEDIAL RA;SB=EX
+cp;103C;age=5.1;gc=Mc;GCB=SM;InPC=Top_And_Bottom_And_Left;InSC=Consonant_Medial;na=MYANMAR CONSONANT SIGN MEDIAL RA;SB=EX
cp;103D;age=5.1;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Consonant_Medial;jt=T;na=MYANMAR CONSONANT SIGN MEDIAL WA;SB=EX
cp;103E;age=5.1;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Consonant_Medial;jt=T;na=MYANMAR CONSONANT SIGN MEDIAL HA;SB=EX
# Consonant
@@ -8218,7 +8250,10 @@ cp;1ABB;ccc=230;na=COMBINING PARENTHESES ABOVE
cp;1ABC;ccc=230;na=COMBINING DOUBLE PARENTHESES ABOVE
cp;1ABD;na=COMBINING PARENTHESES BELOW
cp;1ABE;ccc=0;-Dia;gc=Me;-IDC;na=COMBINING PARENTHESES OVERLAY;-XIDC
-unassigned;1ABF..1AFF
+# Used for Scots dialectology
+cp;1ABF;age=13.0;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER W BELOW
+cp;1AC0;age=13.0;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER TURNED W BELOW
+unassigned;1AC1..1AFF
block;1B00..1B7F;age=5.0;Alpha;blk=Balinese;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=AL;SB=LE;sc=Bali;WB=LE;XIDC
# 1B00..1B7F Balinese
@@ -9067,10 +9102,10 @@ cp;1DF5;age=7.0;Dia;na=COMBINING UP TACK ABOVE
# Typicon marks
cp;1DF6;age=10.0;ccc=232;Dia;na=COMBINING KAVYKA ABOVE RIGHT
cp;1DF7;age=10.0;ccc=228;Dia;na=COMBINING KAVYKA ABOVE LEFT
-cp;1DF8;age=10.0;ccc=228;Dia;na=COMBINING DOT ABOVE LEFT
+# Miscellaneous marks
+cp;1DF8;age=10.0;ccc=228;Dia;na=COMBINING DOT ABOVE LEFT;scx=Cyrl Syrc
cp;1DF9;age=10.0;ccc=220;Dia;na=COMBINING WIDE INVERTED BRIDGE BELOW
unassigned;1DFA
-# Miscellaneous mark
cp;1DFB;age=9.0;InPC=Top;InSC=Syllable_Modifier;na=COMBINING DELETION MARK
# Double diacritic mark for UPA
cp;1DFC;age=6.0;ccc=233;na=COMBINING DOUBLE INVERTED BREVE BELOW
@@ -9647,14 +9682,16 @@ cp;2024;CI;CWKCF;dm=002E;dt=Com;ea=A;lb=IN;na=ONE DOT LEADER;NFKC_CF=002E;NFKC_Q
cp;2025;CWKCF;dm=002E 002E;dt=Com;ea=A;lb=IN;na=TWO DOT LEADER;NFKC_CF=002E 002E;NFKC_QC=N;NFKD_QC=N
cp;2026;CWKCF;dm=002E 002E 002E;dt=Com;ea=A;lb=IN;na=HORIZONTAL ELLIPSIS;NFKC_CF=002E 002E 002E;NFKC_QC=N;NFKD_QC=N
cp;2027;CI;ea=A;lb=BA;na=HYPHENATION POINT;WB=ML
-# Format characters
+# Separators
cp;2028;bc=WS;gc=Zl;GCB=CN;-Gr_Base;lb=BK;na=LINE SEPARATOR;-Pat_Syn;Pat_WS;SB=SE;WB=NL;WSpace
cp;2029;bc=B;gc=Zp;GCB=CN;-Gr_Base;lb=BK;na=PARAGRAPH SEPARATOR;-Pat_Syn;Pat_WS;SB=SE;WB=NL;WSpace
+# Format characters
cp;202A;bc=LRE;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;jt=T;lb=CM;na=LEFT-TO-RIGHT EMBEDDING;Name_Alias=abbreviation=LRE;NFKC_CF=;-Pat_Syn;SB=FO;WB=FO
cp;202B;bc=RLE;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;jt=T;lb=CM;na=RIGHT-TO-LEFT EMBEDDING;Name_Alias=abbreviation=RLE;NFKC_CF=;-Pat_Syn;SB=FO;WB=FO
cp;202C;bc=PDF;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;jt=T;lb=CM;na=POP DIRECTIONAL FORMATTING;Name_Alias=abbreviation=PDF;NFKC_CF=;-Pat_Syn;SB=FO;WB=FO
cp;202D;bc=LRO;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;jt=T;lb=CM;na=LEFT-TO-RIGHT OVERRIDE;Name_Alias=abbreviation=LRO;NFKC_CF=;-Pat_Syn;SB=FO;WB=FO
cp;202E;bc=RLO;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;jt=T;lb=CM;na=RIGHT-TO-LEFT OVERRIDE;Name_Alias=abbreviation=RLO;NFKC_CF=;-Pat_Syn;SB=FO;WB=FO
+# Space
cp;202F;age=3.0;bc=CS;CWKCF;dm=0020;dt=Nb;gc=Zs;lb=GL;na=NARROW NO-BREAK SPACE;Name_Alias=abbreviation=NNBSP;NFKC_CF=0020;NFKC_QC=N;NFKD_QC=N;-Pat_Syn;SB=SP;scx=Latn Mong;WB=EX;WSpace
# General punctuation
cp;2030;bc=ET;ea=A;lb=PO;na=PER MILLE SIGN;vo=U
@@ -11472,7 +11509,7 @@ cp;26A3;age=4.1;na=DOUBLED MALE SIGN
cp;26A4;age=4.1;na=INTERLOCKED FEMALE AND MALE SIGN
cp;26A5;age=4.1;na=MALE AND FEMALE SIGN
cp;26A6;age=4.1;na=MALE WITH STROKE SIGN
-cp;26A7;age=4.1;na=MALE WITH STROKE AND MALE AND FEMALE SIGN
+cp;26A7;age=4.1;Emoji;na=MALE WITH STROKE AND MALE AND FEMALE SIGN
cp;26A8;age=4.1;na=VERTICAL MALE WITH STROKE SIGN
cp;26A9;age=4.1;na=HORIZONTAL MALE WITH STROKE SIGN
# Circles
@@ -11801,8 +11838,9 @@ cp;27C4;age=4.1;bmg=27C3;na=OPEN SUPERSET
# Paired punctuation
cp;27C5;age=4.1;bmg=27C6;bpb=27C6;bpt=o;gc=Ps;lb=OP;na=LEFT S-SHAPED BAG DELIMITER;SB=CL
cp;27C6;age=4.1;bmg=27C5;bpb=27C5;bpt=c;gc=Pe;lb=CL;na=RIGHT S-SHAPED BAG DELIMITER;SB=CL
-# Miscellaneous symbols
+# Operator
cp;27C7;age=5.0;-Bidi_M;na=OR WITH DOT INSIDE
+# Miscellaneous symbols
cp;27C8;age=5.0;bmg=27C9;na=REVERSE SOLIDUS PRECEDING SUBSET
cp;27C9;age=5.0;bmg=27C8;na=SUPERSET PRECEDING SOLIDUS
# Vertical line operator
@@ -12884,7 +12922,9 @@ cp;2B93;na=NEWLINE RIGHT
cp;2B94;na=FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE
# Black arrow
cp;2B95;na=RIGHTWARDS BLACK ARROW
-unassigned;2B96..2B97;Pat_Syn
+unassigned;2B96;Pat_Syn
+# Miscellaneous symbol
+cp;2B97;age=13.0;na=SYMBOL FOR TYPE A ELECTRONICS;vo=U
# Arrowheads
cp;2B98;na=THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD
cp;2B99;na=THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD
@@ -13642,7 +13682,10 @@ cp;2E4C;age=11.0;na=MEDIEVAL COMMA;Term
cp;2E4D;age=11.0;lb=AL;na=PARAGRAPHUS MARK
cp;2E4E;age=11.0;na=PUNCTUS ELEVATUS MARK;Term
cp;2E4F;age=12.0;na=CORNISH VERSE DIVIDER;Term
-unassigned;2E50..2E7F;Pat_Syn
+cp;2E50;age=13.0;gc=So;lb=AL;na=CROSS PATTY WITH RIGHT CROSSBAR;vo=U
+cp;2E51;age=13.0;gc=So;lb=AL;na=CROSS PATTY WITH LEFT CROSSBAR;vo=U
+cp;2E52;age=13.0;lb=AL;na=TIRONIAN SIGN CAPITAL ET
+unassigned;2E53..2E7F;Pat_Syn
block;2E80..2EFF;age=3.0;bc=ON;blk=CJK_Radicals_Sup;ea=W;gc=So;Gr_Base;lb=ID;Radical;sc=Hani;vo=U
# 2E80..2EFF CJK Radicals Supplement
@@ -14500,7 +14543,13 @@ cp;31B7;na=BOPOMOFO FINAL LETTER H
cp;31B8;age=6.0;na=BOPOMOFO LETTER GH
cp;31B9;age=6.0;na=BOPOMOFO LETTER LH
cp;31BA;age=6.0;na=BOPOMOFO LETTER ZY
-unassigned;31BB..31BF;vo=U
+# Extended Bopomofo for Minnan and Hakka
+cp;31BB;age=13.0;na=BOPOMOFO FINAL LETTER G
+# Extended Bopomofo for Cantonese
+cp;31BC;age=13.0;na=BOPOMOFO LETTER GW
+cp;31BD;age=13.0;na=BOPOMOFO LETTER KW
+cp;31BE;age=13.0;na=BOPOMOFO LETTER OE
+cp;31BF;age=13.0;na=BOPOMOFO LETTER AH
block;31C0..31EF;age=5.1;bc=ON;blk=CJK_Strokes;ea=W;gc=So;Gr_Base;lb=ID;sc=Zyyy;scx=Hani;vo=U
# 31C0..31EF CJK Strokes
@@ -15111,13 +15160,13 @@ cp;33FE;dm=0033 0031 65E5;dt=Com;na=IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-
cp;33FF;age=4.0;bc=ON;dm=0067 0061 006C;na=SQUARE GAL;NFKC_CF=0067 0061 006C
block;3400..4DBF;age=3.0;Alpha;blk=CJK_Ext_A;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
-# 3400..4DB5 CJK Unified Ideographs Extension A
-algnamesrange;3400..4DB5;han;CJK UNIFIED IDEOGRAPH-
+# 3400..4DBF CJK Unified Ideographs Extension A
+algnamesrange;3400..4DBF;han;CJK UNIFIED IDEOGRAPH-
cp;3405;nt=Nu;nv=5
cp;3483;nt=Nu;nv=2
cp;382A;nt=Nu;nv=5
cp;3B4D;nt=Nu;nv=7
-unassigned;4DB6..4DBF;ea=W;lb=ID;vo=U
+cp;4DB6..4DBF;age=13.0
block;4DC0..4DFF;age=4.0;bc=ON;blk=Yijing;gc=So;Gr_Base;lb=AL;sc=Zyyy;vo=U
# 4DC0..4DFF Yijing Hexagram Symbols
@@ -15188,8 +15237,8 @@ cp;4DFE;na=HEXAGRAM FOR AFTER COMPLETION
cp;4DFF;na=HEXAGRAM FOR BEFORE COMPLETION
block;4E00..9FFF;age=1.1;Alpha;blk=CJK;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
-# 4E00..9FEF CJK Unified Ideographs
-algnamesrange;4E00..9FEF;han;CJK UNIFIED IDEOGRAPH-
+# 4E00..9FFC CJK Unified Ideographs
+algnamesrange;4E00..9FFC;han;CJK UNIFIED IDEOGRAPH-
cp;4E00;nt=Nu;nv=1
cp;4E03;nt=Nu;nv=7
cp;4E07;nt=Nu;nv=10000
@@ -15248,7 +15297,8 @@ cp;9FCC;age=6.1
cp;9FCD..9FD5;age=8.0
cp;9FD6..9FEA;age=10.0
cp;9FEB..9FEF;age=11.0
-unassigned;9FF0..9FFF;ea=W;lb=ID;vo=U
+cp;9FF0..9FFC;age=13.0
+unassigned;9FFD..9FFF;ea=W;lb=ID;vo=U
block;A000..A48F;age=3.0;Alpha;blk=Yi_Syllables;ea=W;gc=Lo;Gr_Base;IDC;IDS;lb=ID;SB=LE;sc=Yiii;vo=U;WB=LE;XIDC;XIDS
# A000..A48F Yi Syllables
@@ -17059,17 +17109,17 @@ cp;A6F6;-Alpha;gc=Po;-IDC;-IDS;lb=BA;na=BAMUM SEMICOLON;SB=XX;Term;WB=XX;-XIDC;-
cp;A6F7;-Alpha;gc=Po;-IDC;-IDS;lb=BA;na=BAMUM QUESTION MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
unassigned;A6F8..A6FF
-block;A700..A71F;age=4.1;bc=ON;blk=Modifier_Tone_Letters;CI;Dia;gc=Sk;Gr_Base;lb=AL;sc=Zyyy
+block;A700..A71F;age=4.1;bc=ON;blk=Modifier_Tone_Letters;CI;Dia;gc=Sk;Gr_Base;lb=AL;sc=Zyyy;WB=LE
# A700..A71F Modifier Tone Letters
# Corner tone marks for Chinese
-cp;A700;na=MODIFIER LETTER CHINESE TONE YIN PING
-cp;A701;na=MODIFIER LETTER CHINESE TONE YANG PING
-cp;A702;na=MODIFIER LETTER CHINESE TONE YIN SHANG
-cp;A703;na=MODIFIER LETTER CHINESE TONE YANG SHANG
-cp;A704;na=MODIFIER LETTER CHINESE TONE YIN QU
-cp;A705;na=MODIFIER LETTER CHINESE TONE YANG QU
-cp;A706;na=MODIFIER LETTER CHINESE TONE YIN RU
-cp;A707;na=MODIFIER LETTER CHINESE TONE YANG RU
+cp;A700;na=MODIFIER LETTER CHINESE TONE YIN PING;scx=Hani Latn;WB=XX
+cp;A701;na=MODIFIER LETTER CHINESE TONE YANG PING;scx=Hani Latn;WB=XX
+cp;A702;na=MODIFIER LETTER CHINESE TONE YIN SHANG;scx=Hani Latn;WB=XX
+cp;A703;na=MODIFIER LETTER CHINESE TONE YANG SHANG;scx=Hani Latn;WB=XX
+cp;A704;na=MODIFIER LETTER CHINESE TONE YIN QU;scx=Hani Latn;WB=XX
+cp;A705;na=MODIFIER LETTER CHINESE TONE YANG QU;scx=Hani Latn;WB=XX
+cp;A706;na=MODIFIER LETTER CHINESE TONE YIN RU;scx=Hani Latn;WB=XX
+cp;A707;na=MODIFIER LETTER CHINESE TONE YANG RU;scx=Hani Latn;WB=XX
# Dotted tone letters
cp;A708;na=MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
cp;A709;na=MODIFIER LETTER HIGH DOTTED TONE BAR
@@ -17088,16 +17138,16 @@ cp;A714;na=MODIFIER LETTER MID LEFT-STEM TONE BAR
cp;A715;na=MODIFIER LETTER LOW LEFT-STEM TONE BAR
cp;A716;na=MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
# Chinantec tone marks
-cp;A717;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOT VERTICAL BAR;SB=LE;WB=LE;XIDC;XIDS
-cp;A718;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOT SLASH;SB=LE;WB=LE;XIDC;XIDS
-cp;A719;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOT HORIZONTAL BAR;SB=LE;WB=LE;XIDC;XIDS
-cp;A71A;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOWER RIGHT CORNER ANGLE;SB=LE;WB=LE;XIDC;XIDS
+cp;A717;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOT VERTICAL BAR;SB=LE;XIDC;XIDS
+cp;A718;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOT SLASH;SB=LE;XIDC;XIDS
+cp;A719;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER DOT HORIZONTAL BAR;SB=LE;XIDC;XIDS
+cp;A71A;age=5.0;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOWER RIGHT CORNER ANGLE;SB=LE;XIDC;XIDS
# Africanist tone letters
-cp;A71B;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED UP ARROW;SB=LE;WB=LE;XIDC;XIDS
-cp;A71C;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED DOWN ARROW;SB=LE;WB=LE;XIDC;XIDS
-cp;A71D;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED EXCLAMATION MARK;SB=LE;WB=LE;XIDC;XIDS
-cp;A71E;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;SB=LE;WB=LE;XIDC;XIDS
-cp;A71F;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;SB=LE;WB=LE;XIDC;XIDS
+cp;A71B;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED UP ARROW;SB=LE;XIDC;XIDS
+cp;A71C;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED DOWN ARROW;SB=LE;XIDC;XIDS
+cp;A71D;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED EXCLAMATION MARK;SB=LE;XIDC;XIDS
+cp;A71E;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;SB=LE;XIDC;XIDS
+cp;A71F;age=5.1;Alpha;gc=Lm;IDC;IDS;na=MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;SB=LE;XIDC;XIDS
block;A720..A7FF;age=5.1;Alpha;blk=Latin_Ext_D;Cased;CWCM;gc=Ll;Gr_Base;IDC;IDS;lb=AL;SB=LO;sc=Latn;WB=LE;XIDC;XIDS
# A720..A7FF Latin Extended-D
@@ -17294,8 +17344,15 @@ cp;A7C3;age=12.0;CWT;CWU;Lower;na=LATIN SMALL LETTER ANGLICANA W;stc=A7C2;suc=A7
cp;A7C4;age=12.0;cf=A794;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER C WITH PALATAL HOOK;NFKC_CF=A794;SB=UP;scf=A794;slc=A794;Upper
cp;A7C5;age=12.0;cf=0282;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER S WITH HOOK;NFKC_CF=0282;SB=UP;scf=0282;slc=0282;Upper
cp;A7C6;age=12.0;cf=1D8E;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER Z WITH PALATAL HOOK;NFKC_CF=1D8E;SB=UP;scf=1D8E;slc=1D8E;Upper
-unassigned;A7C7..A7F6
-# Additional letter
+# Additional letters for Gaulish
+cp;A7C7;age=13.0;cf=A7C8;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;NFKC_CF=A7C8;SB=UP;scf=A7C8;slc=A7C8;Upper
+cp;A7C8;age=13.0;CWT;CWU;Lower;na=LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;stc=A7C7;suc=A7C7
+cp;A7C9;age=13.0;cf=A7CA;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;NFKC_CF=A7CA;SB=UP;scf=A7CA;slc=A7CA;Upper
+cp;A7CA;age=13.0;CWT;CWU;Lower;na=LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;stc=A7C9;suc=A7C9
+unassigned;A7CB..A7F4
+# Ancient Gaulish and Celtic epigraphic letters
+cp;A7F5;age=13.0;cf=A7F6;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER REVERSED HALF H;NFKC_CF=A7F6;SB=UP;scf=A7F6;slc=A7F6;Upper
+cp;A7F6;age=13.0;CWT;CWU;Lower;na=LATIN SMALL LETTER REVERSED HALF H;stc=A7F5;suc=A7F5
cp;A7F7;age=7.0;-Cased;-CWCM;gc=Lo;na=LATIN EPIGRAPHIC LETTER SIDEWAYS I;SB=LE
# Additions for Extended IPA
cp;A7F8;age=6.1;CI;-CWCM;CWKCF;Dia;dm=0126;dt=Sup;FC_NFKC=0127;gc=Lm;Lower;na=MODIFIER LETTER CAPITAL H WITH STROKE;NFKC_CF=0127;NFKC_QC=N;NFKD_QC=N
@@ -17360,7 +17417,9 @@ cp;A828;-Alpha;bc=ON;gc=So;-IDC;-IDS;InSC=Other;na=SYLOTI NAGRI POETRY MARK-1;SB
cp;A829;-Alpha;bc=ON;gc=So;-IDC;-IDS;InSC=Other;na=SYLOTI NAGRI POETRY MARK-2;SB=XX;WB=XX;-XIDC;-XIDS
cp;A82A;-Alpha;bc=ON;gc=So;-IDC;-IDS;InSC=Other;na=SYLOTI NAGRI POETRY MARK-3;SB=XX;WB=XX;-XIDC;-XIDS
cp;A82B;-Alpha;bc=ON;gc=So;-IDC;-IDS;InSC=Other;na=SYLOTI NAGRI POETRY MARK-4;SB=XX;WB=XX;-XIDC;-XIDS
-unassigned;A82C..A82F
+# Sign
+cp;A82C;age=13.0;-Alpha;bc=NSM;ccc=9;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Bottom;InSC=Pure_Killer;jt=T;lb=CM;na=SYLOTI NAGRI SIGN ALTERNATE HASANTA;SB=EX;WB=Extend;-XIDS
+unassigned;A82D..A82F
block;A830..A83F;age=5.2;blk=Indic_Number_Forms;gc=No;Gr_Base;lb=AL;sc=Zyyy;scx=Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh
# A830..A83F Common Indic Number Forms
@@ -17793,7 +17852,7 @@ cp;A9BB;gc=Mc;GCB=SM;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=JAVANESE VOWEL SIGN
cp;A9BC;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=JAVANESE VOWEL SIGN PEPET;SB=EX;WB=Extend
# Dependent consonant signs
cp;A9BD;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Consonant_Medial;jt=T;lb=CM;na=JAVANESE CONSONANT SIGN KERET;SB=EX;WB=Extend
-cp;A9BE;gc=Mc;GCB=SM;InPC=Right;InSC=Consonant_Medial;lb=CM;na=JAVANESE CONSONANT SIGN PENGKAL;SB=EX;WB=Extend
+cp;A9BE;gc=Mc;GCB=SM;InPC=Bottom_And_Right;InSC=Consonant_Medial;lb=CM;na=JAVANESE CONSONANT SIGN PENGKAL;SB=EX;WB=Extend
cp;A9BF;gc=Mc;GCB=SM;InPC=Bottom_And_Left;InSC=Consonant_Medial;lb=CM;na=JAVANESE CONSONANT SIGN CAKRA;SB=EX;WB=Extend
# Sign
cp;A9C0;-Alpha;ccc=9;Dia;gc=Mc;GCB=SM;Gr_Link;InPC=Bottom_And_Right;InSC=Virama;lb=CM;na=JAVANESE PANGKON;SB=EX;WB=Extend
@@ -18231,7 +18290,12 @@ cp;AB65;na=GREEK LETTER SMALL CAPITAL OMEGA;sc=Grek
# Letters for Sinological transcription
cp;AB66;age=12.0;na=LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK
cp;AB67;age=12.0;na=LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
-unassigned;AB68..AB6F
+# Letters for Scots dialectology
+cp;AB68;age=13.0;na=LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+cp;AB69;age=13.0;-Cased;CI;CWKCF;Dia;dm=028D;dt=Sup;gc=Lm;-Lower;na=MODIFIER LETTER SMALL TURNED W;NFKC_CF=028D;NFKC_QC=N;NFKD_QC=N;SB=LE
+cp;AB6A;age=13.0;-Alpha;bc=ON;-Cased;CI;Dia;gc=Sk;-IDC;-IDS;-Lower;na=MODIFIER LETTER LEFT TACK;SB=XX;sc=Zyyy;WB=XX;-XIDC;-XIDS
+cp;AB6B;age=13.0;-Alpha;bc=ON;-Cased;CI;Dia;gc=Sk;-IDC;-IDS;-Lower;na=MODIFIER LETTER RIGHT TACK;SB=XX;sc=Zyyy;WB=XX;-XIDC;-XIDS
+unassigned;AB6C..AB6F
block;AB70..ABBF;age=8.0;Alpha;blk=Cherokee_Sup;Cased;CWCF;CWCM;CWKCF;CWT;CWU;gc=Ll;Gr_Base;IDC;IDS;lb=AL;Lower;SB=LO;sc=Cher;WB=LE;XIDC;XIDS
# AB70..ABBF Cherokee Supplement
@@ -21399,9 +21463,10 @@ cp;10197;na=ROMAN QUINARIUS SIGN
cp;10198;na=ROMAN SESTERTIUS SIGN
cp;10199;na=ROMAN DUPONDIUS SIGN
cp;1019A;na=ROMAN AS SIGN
-# Roman military symbol
+# Other Roman epigraphic symbols
cp;1019B;na=ROMAN CENTURIAL SIGN
-unassigned;1019C..1019F
+cp;1019C;age=13.0;na=ASCIA SYMBOL
+unassigned;1019D..1019F
# Greek symbol
cp;101A0;age=7.0;na=GREEK SYMBOL TAU RHO;sc=Grek
unassigned;101A1..101CF
@@ -23674,8 +23739,65 @@ cp;10E7D;na=RUMI FRACTION ONE THIRD;nv=1/3
cp;10E7E;na=RUMI FRACTION TWO THIRDS;nv=2/3
unassigned;10E7F;bc=R
+block;10E80..10EBF;age=13.0;Alpha;bc=R;blk=Yezidi;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Yezi;WB=LE;XIDC;XIDS
+# 10E80..10EBF Yezidi
+# Letters
+cp;10E80;na=YEZIDI LETTER ELIF
+cp;10E81;na=YEZIDI LETTER BE
+cp;10E82;na=YEZIDI LETTER PE
+cp;10E83;na=YEZIDI LETTER PHE
+cp;10E84;na=YEZIDI LETTER THE
+cp;10E85;na=YEZIDI LETTER SE
+cp;10E86;na=YEZIDI LETTER CIM
+cp;10E87;na=YEZIDI LETTER CHIM
+cp;10E88;na=YEZIDI LETTER CHHIM
+cp;10E89;na=YEZIDI LETTER HHA
+cp;10E8A;na=YEZIDI LETTER XA
+cp;10E8B;na=YEZIDI LETTER DAL
+cp;10E8C;na=YEZIDI LETTER ZAL
+cp;10E8D;na=YEZIDI LETTER RA
+cp;10E8E;na=YEZIDI LETTER RHA
+cp;10E8F;na=YEZIDI LETTER ZA
+cp;10E90;na=YEZIDI LETTER JA
+cp;10E91;na=YEZIDI LETTER SIN
+cp;10E92;na=YEZIDI LETTER SHIN
+cp;10E93;na=YEZIDI LETTER SAD
+cp;10E94;na=YEZIDI LETTER DAD
+cp;10E95;na=YEZIDI LETTER TA
+cp;10E96;na=YEZIDI LETTER ZE
+cp;10E97;na=YEZIDI LETTER EYN
+cp;10E98;na=YEZIDI LETTER XHEYN
+cp;10E99;na=YEZIDI LETTER FA
+cp;10E9A;na=YEZIDI LETTER VA
+cp;10E9B;na=YEZIDI LETTER VA ALTERNATE FORM
+cp;10E9C;na=YEZIDI LETTER QAF
+cp;10E9D;na=YEZIDI LETTER KAF
+cp;10E9E;na=YEZIDI LETTER KHAF
+cp;10E9F;na=YEZIDI LETTER GAF
+cp;10EA0;na=YEZIDI LETTER LAM
+cp;10EA1;na=YEZIDI LETTER MIM
+cp;10EA2;na=YEZIDI LETTER NUN
+cp;10EA3;na=YEZIDI LETTER UM
+cp;10EA4;na=YEZIDI LETTER WAW
+cp;10EA5;na=YEZIDI LETTER OW
+cp;10EA6;na=YEZIDI LETTER EW
+cp;10EA7;na=YEZIDI LETTER HAY
+cp;10EA8;na=YEZIDI LETTER YOT
+cp;10EA9;na=YEZIDI LETTER ET
+unassigned;10EAA;bc=R
+# Combining marks
+cp;10EAB;bc=NSM;ccc=230;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=YEZIDI COMBINING HAMZA MARK;SB=EX;WB=Extend;-XIDS
+cp;10EAC;bc=NSM;ccc=230;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=YEZIDI COMBINING MADDA MARK;SB=EX;WB=Extend;-XIDS
+# Punctuation
+cp;10EAD;-Alpha;Dash;gc=Pd;-IDC;-IDS;lb=BA;na=YEZIDI HYPHENATION MARK;SB=XX;WB=XX;-XIDC;-XIDS
+unassigned;10EAE..10EAF;bc=R
+# Historical letters with diacritics
+cp;10EB0;na=YEZIDI LETTER LAM WITH DOT ABOVE
+cp;10EB1;na=YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+unassigned;10EB2..10EBF;bc=R
+
# No block
-unassigned;10E80..10EFF;bc=R
+unassigned;10EC0..10EFF;bc=R
block;10F00..10F2F;age=11.0;Alpha;bc=R;blk=Old_Sogdian;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Sogo;WB=LE;XIDC;XIDS
# 10F00..10F2F Old Sogdian
@@ -23776,7 +23898,41 @@ cp;10F59;gc=Po;-IDC;jt=U;na=SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;SB=ST;STerm
unassigned;10F5A..10F6F;bc=AL
# No block
-unassigned;10F70..10FDF;bc=R
+unassigned;10F70..10FAF;bc=R
+
+block;10FB0..10FDF;age=13.0;Alpha;bc=R;blk=Chorasmian;gc=Lo;Gr_Base;IDC;IDS;jt=D;lb=AL;SB=LE;sc=Chrs;WB=LE;XIDC;XIDS
+# 10FB0..10FDF Chorasmian
+# Letters
+cp;10FB0;na=CHORASMIAN LETTER ALEPH
+cp;10FB1;jt=U;na=CHORASMIAN LETTER SMALL ALEPH
+cp;10FB2;na=CHORASMIAN LETTER BETH
+cp;10FB3;na=CHORASMIAN LETTER GIMEL
+cp;10FB4;jt=R;na=CHORASMIAN LETTER DALETH
+cp;10FB5;jt=R;na=CHORASMIAN LETTER HE
+cp;10FB6;jt=R;na=CHORASMIAN LETTER WAW
+cp;10FB7;jt=U;na=CHORASMIAN LETTER CURLED WAW
+cp;10FB8;na=CHORASMIAN LETTER ZAYIN
+cp;10FB9;jt=R;na=CHORASMIAN LETTER HETH
+cp;10FBA;jt=R;na=CHORASMIAN LETTER YODH
+cp;10FBB;na=CHORASMIAN LETTER KAPH
+cp;10FBC;na=CHORASMIAN LETTER LAMEDH
+cp;10FBD;jt=R;na=CHORASMIAN LETTER MEM
+cp;10FBE;na=CHORASMIAN LETTER NUN
+cp;10FBF;na=CHORASMIAN LETTER SAMEKH
+cp;10FC0;jt=U;na=CHORASMIAN LETTER AYIN
+cp;10FC1;na=CHORASMIAN LETTER PE
+cp;10FC2;jt=R;na=CHORASMIAN LETTER RESH
+cp;10FC3;jt=R;na=CHORASMIAN LETTER SHIN
+cp;10FC4;na=CHORASMIAN LETTER TAW
+# Numbers
+cp;10FC5;-Alpha;gc=No;-IDC;-IDS;jt=U;na=CHORASMIAN NUMBER ONE;nt=Nu;nv=1;SB=XX;WB=XX;-XIDC;-XIDS
+cp;10FC6;-Alpha;gc=No;-IDC;-IDS;jt=U;na=CHORASMIAN NUMBER TWO;nt=Nu;nv=2;SB=XX;WB=XX;-XIDC;-XIDS
+cp;10FC7;-Alpha;gc=No;-IDC;-IDS;jt=U;na=CHORASMIAN NUMBER THREE;nt=Nu;nv=3;SB=XX;WB=XX;-XIDC;-XIDS
+cp;10FC8;-Alpha;gc=No;-IDC;-IDS;jt=U;na=CHORASMIAN NUMBER FOUR;nt=Nu;nv=4;SB=XX;WB=XX;-XIDC;-XIDS
+cp;10FC9;-Alpha;gc=No;-IDC;-IDS;jt=R;na=CHORASMIAN NUMBER TEN;nt=Nu;nv=10;SB=XX;WB=XX;-XIDC;-XIDS
+cp;10FCA;-Alpha;gc=No;-IDC;-IDS;na=CHORASMIAN NUMBER TWENTY;nt=Nu;nv=20;SB=XX;WB=XX;-XIDC;-XIDS
+cp;10FCB;-Alpha;gc=No;-IDC;-IDS;jt=L;na=CHORASMIAN NUMBER ONE HUNDRED;nt=Nu;nv=100;SB=XX;WB=XX;-XIDC;-XIDS
+unassigned;10FCC..10FDF;bc=R
block;10FE0..10FFF;age=12.0;Alpha;bc=R;blk=Elymaic;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Elym;WB=LE;XIDC;XIDS
# 10FE0..10FFF Elymaic
@@ -24136,7 +24292,9 @@ cp;11144;age=11.0;IDS;na=CHAKMA LETTER LHAA;XIDS
# Dependent vowel signs
cp;11145;age=11.0;gc=Mc;GCB=SM;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=CHAKMA VOWEL SIGN AA;SB=EX;WB=Extend
cp;11146;age=11.0;gc=Mc;GCB=SM;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=CHAKMA VOWEL SIGN EI;SB=EX;WB=Extend
-unassigned;11147..1114F
+# Consonant
+cp;11147;age=13.0;IDS;na=CHAKMA LETTER VAA;XIDS
+unassigned;11148..1114F
block;11150..1117F;age=7.0;Alpha;blk=Mahajani;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Mahj;WB=LE;XIDC;XIDS
# 11150..1117F Mahajani
@@ -24260,8 +24418,8 @@ cp;111BF;gc=Mc;GCB=SM;-IDS;InPC=Top_And_Right;InSC=Vowel_Dependent;lb=CM;na=SHAR
cp;111C0;-Alpha;ccc=9;Dia;gc=Mc;GCB=SM;Gr_Link;-IDS;InPC=Right;InSC=Virama;lb=CM;na=SHARADA SIGN VIRAMA;SB=EX;WB=Extend;-XIDS
# Various signs
cp;111C1;InSC=Avagraha;na=SHARADA SIGN AVAGRAHA
-cp;111C2;GCB=PP;InSC=Consonant_Prefixed;na=SHARADA SIGN JIHVAMULIYA
-cp;111C3;GCB=PP;InSC=Consonant_Prefixed;na=SHARADA SIGN UPADHMANIYA
+cp;111C2;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SHARADA SIGN JIHVAMULIYA
+cp;111C3;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SHARADA SIGN UPADHMANIYA
cp;111C4;InSC=Other;na=SHARADA OM
# Punctuation
cp;111C5;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=SHARADA DANDA;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
@@ -24276,7 +24434,10 @@ cp;111CB;age=8.0;-Alpha;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top
cp;111CC;age=8.0;-Alpha;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=SHARADA EXTRA SHORT VOWEL MARK;SB=EX;WB=Extend;-XIDS
# Punctuation
cp;111CD;age=7.0;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;na=SHARADA SUTRA MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
-unassigned;111CE..111CF
+# Historic vowel sign
+cp;111CE;age=13.0;gc=Mc;GCB=SM;-IDS;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=SHARADA VOWEL SIGN PRISHTHAMATRA E;SB=EX;WB=Extend;-XIDS
+# Sign
+cp;111CF;age=13.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=SHARADA SIGN INVERTED CANDRABINDU;SB=EX;WB=Extend;-XIDS
# Digits
cp;111D0;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=SHARADA DIGIT ZERO;nt=De;nv=0;SB=NU;WB=NU;-XIDS
cp;111D1;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=SHARADA DIGIT ONE;nt=De;nv=1;SB=NU;WB=NU;-XIDS
@@ -24743,14 +24904,17 @@ cp;11456;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=NEWA DIGIT SIX;nt=De;nv=6;SB=NU;
cp;11457;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=NEWA DIGIT SEVEN;nt=De;nv=7;SB=NU;WB=NU;-XIDS
cp;11458;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=NEWA DIGIT EIGHT;nt=De;nv=8;SB=NU;WB=NU;-XIDS
cp;11459;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=NEWA DIGIT NINE;nt=De;nv=9;SB=NU;WB=NU;-XIDS
-unassigned;1145A
+# Punctuation
+cp;1145A;age=13.0;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=NEWA DOUBLE COMMA;SB=XX;Term;WB=XX;-XIDC;-XIDS
# Various signs
cp;1145B;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=NEWA PLACEHOLDER MARK;SB=XX;Term;WB=XX;-XIDC;-XIDS
unassigned;1145C
cp;1145D;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;na=NEWA INSERTION SIGN;SB=XX;WB=XX;-XIDC;-XIDS
cp;1145E;age=11.0;-Alpha;bc=NSM;ccc=230;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Syllable_Modifier;jt=T;lb=CM;na=NEWA SANDHI MARK;SB=EX;WB=Extend;-XIDS
cp;1145F;age=12.0;InSC=Bindu;na=NEWA LETTER VEDIC ANUSVARA
-unassigned;11460..1147F
+cp;11460;age=13.0;InSC=Consonant_With_Stacker;na=NEWA SIGN JIHVAMULIYA
+cp;11461;age=13.0;InSC=Consonant_With_Stacker;na=NEWA SIGN UPADHMANIYA
+unassigned;11462..1147F
block;11480..114DF;age=7.0;Alpha;blk=Tirhuta;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Tirh;WB=LE;XIDC;XIDS
# 11480..114DF Tirhuta
@@ -25175,7 +25339,7 @@ cp;1171A;age=11.0;IDS;na=AHOM LETTER ALTERNATE BA;XIDS
unassigned;1171B..1171C
# Medials
cp;1171D;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Consonant_Medial;jt=T;na=AHOM CONSONANT SIGN MEDIAL LA;SB=EX;WB=Extend
-cp;1171E;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InSC=Consonant_Medial;jt=T;na=AHOM CONSONANT SIGN MEDIAL RA;SB=EX;WB=Extend
+cp;1171E;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top_And_Bottom_And_Left;InSC=Consonant_Medial;jt=T;na=AHOM CONSONANT SIGN MEDIAL RA;SB=EX;WB=Extend
cp;1171F;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Consonant_Medial;jt=T;na=AHOM CONSONANT SIGN MEDIAL LIGATING RA;SB=EX;WB=Extend
# Vowel signs
cp;11720;gc=Mc;GCB=SM;InPC=Right;InSC=Vowel_Dependent;na=AHOM VOWEL SIGN A;SB=EX;WB=Extend
@@ -25375,6 +25539,98 @@ unassigned;118F3..118FE
# Sign
cp;118FF;-Cased;-CWCM;gc=Lo;na=WARANG CITI OM;SB=LE
+block;11900..1195F;age=13.0;Alpha;blk=Dives_Akuru;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Diak;WB=LE;XIDC;XIDS
+# 11900..1195F Dives Akuru
+# Independent vowels
+cp;11900;InSC=Vowel_Independent;na=DIVES AKURU LETTER A
+cp;11901;InSC=Vowel_Independent;na=DIVES AKURU LETTER AA
+cp;11902;InSC=Vowel_Independent;na=DIVES AKURU LETTER I
+cp;11903;InSC=Vowel_Independent;na=DIVES AKURU LETTER II
+cp;11904;InSC=Vowel_Independent;na=DIVES AKURU LETTER U
+cp;11905;InSC=Vowel_Independent;na=DIVES AKURU LETTER UU
+cp;11906;InSC=Vowel_Independent;na=DIVES AKURU LETTER E
+unassigned;11907..11908
+cp;11909;InSC=Vowel_Independent;na=DIVES AKURU LETTER O
+unassigned;1190A..1190B
+# Consonants
+cp;1190C;na=DIVES AKURU LETTER KA
+cp;1190D;na=DIVES AKURU LETTER KHA
+cp;1190E;na=DIVES AKURU LETTER GA
+cp;1190F;na=DIVES AKURU LETTER GHA
+cp;11910;na=DIVES AKURU LETTER NGA
+cp;11911;na=DIVES AKURU LETTER CA
+cp;11912;na=DIVES AKURU LETTER CHA
+cp;11913;na=DIVES AKURU LETTER JA
+unassigned;11914
+cp;11915;na=DIVES AKURU LETTER NYA
+cp;11916;na=DIVES AKURU LETTER TTA
+unassigned;11917
+cp;11918;na=DIVES AKURU LETTER DDA
+cp;11919;na=DIVES AKURU LETTER DDHA
+cp;1191A;na=DIVES AKURU LETTER NNA
+cp;1191B;na=DIVES AKURU LETTER TA
+cp;1191C;na=DIVES AKURU LETTER THA
+cp;1191D;na=DIVES AKURU LETTER DA
+cp;1191E;na=DIVES AKURU LETTER DHA
+cp;1191F;na=DIVES AKURU LETTER NA
+cp;11920;na=DIVES AKURU LETTER PA
+cp;11921;na=DIVES AKURU LETTER PHA
+cp;11922;na=DIVES AKURU LETTER BA
+cp;11923;na=DIVES AKURU LETTER BHA
+cp;11924;na=DIVES AKURU LETTER MA
+cp;11925;na=DIVES AKURU LETTER YA
+cp;11926;na=DIVES AKURU LETTER YYA
+cp;11927;na=DIVES AKURU LETTER RA
+cp;11928;na=DIVES AKURU LETTER LA
+cp;11929;na=DIVES AKURU LETTER VA
+cp;1192A;na=DIVES AKURU LETTER SHA
+cp;1192B;na=DIVES AKURU LETTER SSA
+cp;1192C;na=DIVES AKURU LETTER SA
+cp;1192D;na=DIVES AKURU LETTER HA
+cp;1192E;na=DIVES AKURU LETTER LLA
+cp;1192F;na=DIVES AKURU LETTER ZA
+# Dependent vowel signs
+cp;11930;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN AA;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS
+cp;11931;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN I;SB=EX;WB=Extend;-XIDS
+cp;11932;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN II;SB=EX;WB=Extend;-XIDS
+cp;11933;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN U;SB=EX;WB=Extend;-XIDS
+cp;11934;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN UU;SB=EX;WB=Extend;-XIDS
+cp;11935;gc=Mc;GCB=SM;-IDS;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN E;SB=EX;WB=Extend;-XIDS
+unassigned;11936
+cp;11937;gc=Mc;GCB=SM;-IDS;InPC=Left;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN AI;SB=EX;WB=Extend;-XIDS
+cp;11938;dm=11935 11930;dt=Can;gc=Mc;GCB=SM;-IDS;InPC=Left_And_Right;InSC=Vowel_Dependent;lb=CM;na=DIVES AKURU VOWEL SIGN O;NFD_QC=N;NFKD_QC=N;SB=EX;WB=Extend;-XIDS
+unassigned;11939..1193A
+# Nasalization signs
+cp;1193B;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=DIVES AKURU SIGN ANUSVARA;SB=EX;WB=Extend;-XIDS
+cp;1193C;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=DIVES AKURU SIGN CANDRABINDU;SB=EX;WB=Extend;-XIDS
+# Signs
+cp;1193D;-Alpha;ccc=9;Dia;gc=Mc;GCB=SM;Gr_Link;-IDS;InPC=Right;InSC=Pure_Killer;lb=CM;na=DIVES AKURU SIGN HALANTA;SB=EX;WB=Extend;-XIDS
+cp;1193E;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InSC=Invisible_Stacker;jt=T;lb=CM;na=DIVES AKURU VIRAMA;SB=EX;WB=Extend;-XIDS
+cp;1193F;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=DIVES AKURU PREFIXED NASAL SIGN
+# Conjunct-specific letters
+cp;11940;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Consonant_Medial;lb=CM;na=DIVES AKURU MEDIAL YA;SB=EX;WB=Extend;-XIDS
+cp;11941;GCB=PP;InPC=Top;InSC=Consonant_Preceding_Repha;na=DIVES AKURU INITIAL RA
+cp;11942;gc=Mc;GCB=SM;-IDS;InPC=Bottom_And_Right;InSC=Consonant_Medial;lb=CM;na=DIVES AKURU MEDIAL RA;SB=EX;WB=Extend;-XIDS
+# Nukta
+cp;11943;-Alpha;bc=NSM;ccc=7;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Nukta;jt=T;lb=CM;na=DIVES AKURU SIGN NUKTA;SB=EX;WB=Extend;-XIDS
+# Punctuation
+cp;11944;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=DIVES AKURU DOUBLE DANDA;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+cp;11945;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=DIVES AKURU GAP FILLER;SB=XX;WB=XX;-XIDC;-XIDS
+cp;11946;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=DIVES AKURU END OF TEXT MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+unassigned;11947..1194F
+# Digits
+cp;11950;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT ZERO;nt=De;nv=0;SB=NU;WB=NU;-XIDS
+cp;11951;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT ONE;nt=De;nv=1;SB=NU;WB=NU;-XIDS
+cp;11952;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT TWO;nt=De;nv=2;SB=NU;WB=NU;-XIDS
+cp;11953;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT THREE;nt=De;nv=3;SB=NU;WB=NU;-XIDS
+cp;11954;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT FOUR;nt=De;nv=4;SB=NU;WB=NU;-XIDS
+cp;11955;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT FIVE;nt=De;nv=5;SB=NU;WB=NU;-XIDS
+cp;11956;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT SIX;nt=De;nv=6;SB=NU;WB=NU;-XIDS
+cp;11957;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT SEVEN;nt=De;nv=7;SB=NU;WB=NU;-XIDS
+cp;11958;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT EIGHT;nt=De;nv=8;SB=NU;WB=NU;-XIDS
+cp;11959;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=DIVES AKURU DIGIT NINE;nt=De;nv=9;SB=NU;WB=NU;-XIDS
+unassigned;1195A..1195F
+
block;119A0..119FF;age=12.0;Alpha;blk=Nandinagari;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Nand;WB=LE;XIDC;XIDS
# 119A0..119FF Nandinagari
# Independent vowels
@@ -25521,7 +25777,7 @@ cp;11A37;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb
cp;11A38;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=ZANABAZAR SQUARE SIGN ANUSVARA;SB=EX;WB=Extend;-XIDS
cp;11A39;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Visarga;lb=CM;na=ZANABAZAR SQUARE SIGN VISARGA;SB=EX;WB=Extend;-XIDS
# Cluster-initial consonant
-cp;11A3A;GCB=PP;InSC=Consonant_Prefixed;na=ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+cp;11A3A;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
# Cluster-final consonants
cp;11A3B;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Consonant_Medial;jt=T;lb=CM;na=ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA;SB=EX;WB=Extend;-XIDS
cp;11A3C;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Consonant_Medial;jt=T;lb=CM;na=ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA;SB=EX;WB=Extend;-XIDS
@@ -25601,13 +25857,13 @@ cp;11A81;na=SOYOMBO LETTER SA
cp;11A82;na=SOYOMBO LETTER HA
cp;11A83;na=SOYOMBO LETTER KSSA
# Alternate visarga signs
-cp;11A84;age=12.0;GCB=PP;InSC=Consonant_Prefixed;na=SOYOMBO SIGN JIHVAMULIYA
-cp;11A85;age=12.0;GCB=PP;InSC=Consonant_Prefixed;na=SOYOMBO SIGN UPADHMANIYA
+cp;11A84;age=12.0;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SOYOMBO SIGN JIHVAMULIYA
+cp;11A85;age=12.0;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SOYOMBO SIGN UPADHMANIYA
# Cluster-initial letters
-cp;11A86;GCB=PP;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER RA
-cp;11A87;GCB=PP;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER LA
-cp;11A88;GCB=PP;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER SHA
-cp;11A89;GCB=PP;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER SA
+cp;11A86;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER RA
+cp;11A87;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER LA
+cp;11A88;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER SHA
+cp;11A89;GCB=PP;InPC=Top;InSC=Consonant_Prefixed;na=SOYOMBO CLUSTER-INITIAL LETTER SA
# Final consonant signs
cp;11A8A;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Consonant_Final;jt=T;lb=CM;na=SOYOMBO FINAL CONSONANT SIGN G;SB=EX;WB=Extend;-XIDS
cp;11A8B;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Consonant_Final;jt=T;lb=CM;na=SOYOMBO FINAL CONSONANT SIGN K;SB=EX;WB=Extend;-XIDS
@@ -25976,7 +26232,7 @@ cp;11D44;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;In
# Virama
cp;11D45;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InSC=Invisible_Stacker;jt=T;lb=CM;na=MASARAM GONDI VIRAMA;SB=EX;WB=Extend;-XIDS
# Cluster-specific consonant forms
-cp;11D46;GCB=PP;InSC=Consonant_Preceding_Repha;na=MASARAM GONDI REPHA
+cp;11D46;GCB=PP;InPC=Right;InSC=Consonant_Preceding_Repha;na=MASARAM GONDI REPHA
cp;11D47;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Consonant_Medial;jt=T;lb=CM;na=MASARAM GONDI RA-KARA;SB=EX;WB=Extend;-XIDS
unassigned;11D48..11D4F
# Digits
@@ -26104,6 +26360,11 @@ cp;11EF7;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;na=MAKASAR PASSIMBANG;SB=ST;STerm;Ter
cp;11EF8;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;na=MAKASAR END OF SECTION;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
unassigned;11EF9..11EFF
+block;11FB0..11FBF;age=13.0;Alpha;blk=Lisu_Sup;gc=Lo;Gr_Base;IDC;IDS;lb=AL;na=LISU LETTER YHA;SB=LE;sc=Lisu;WB=LE;XIDC;XIDS
+# 11FB0..11FBF Lisu Supplement
+# Letter
+unassigned;11FB1..11FBF
+
block;11FC0..11FFF;age=12.0;bc=ON;blk=Tamil_Sup;gc=So;Gr_Base;lb=AL;sc=Taml
# 11FC0..11FFF Tamil Supplement
# Fractions
@@ -30224,16 +30485,22 @@ cp;16F9D;CI;Dia;gc=Lm;na=MIAO LETTER REFORMED TONE-5;WB=LE
cp;16F9E;CI;Dia;gc=Lm;na=MIAO LETTER REFORMED TONE-6;WB=LE
cp;16F9F;CI;Dia;gc=Lm;na=MIAO LETTER REFORMED TONE-8;WB=LE
-block;16FE0..16FFF;age=12.0;Alpha;blk=Ideographic_Symbols;CI;ea=W;Ext;gc=Lm;Gr_Base;IDC;IDS;lb=NS;SB=LE;sc=Zyyy;vo=U;WB=LE;XIDC;XIDS
+block;16FE0..16FFF;age=13.0;Alpha;blk=Ideographic_Symbols;ea=W;gc=Lm;Gr_Base;IDC;lb=NS;SB=LE;sc=Hani;vo=U;WB=Extend;XIDC
# 16FE0..16FFF Ideographic Symbols and Punctuation
# Tangut mark
-cp;16FE0;age=9.0;na=TANGUT ITERATION MARK;sc=Tang
+cp;16FE0;age=9.0;CI;Ext;IDS;na=TANGUT ITERATION MARK;sc=Tang;WB=LE;XIDS
# Nushu mark
-cp;16FE1;age=10.0;na=NUSHU ITERATION MARK;sc=Nshu
+cp;16FE1;age=10.0;CI;Ext;IDS;na=NUSHU ITERATION MARK;sc=Nshu;WB=LE;XIDS
# Marks used in ancient Chinese texts
-cp;16FE2;-Alpha;bc=ON;-CI;-Ext;gc=Po;-IDC;-IDS;na=OLD CHINESE HOOK MARK;SB=XX;WB=XX;-XIDC;-XIDS
-cp;16FE3;na=OLD CHINESE ITERATION MARK
-unassigned;16FE4..16FFF;vo=U
+cp;16FE2;age=12.0;-Alpha;bc=ON;gc=Po;-IDC;na=OLD CHINESE HOOK MARK;SB=XX;sc=Zyyy;WB=XX;-XIDC
+cp;16FE3;age=12.0;CI;Ext;IDS;na=OLD CHINESE ITERATION MARK;sc=Zyyy;WB=LE;XIDS
+# Small Khitan format character
+cp;16FE4;-Alpha;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Ideo;jt=T;lb=GL;na=KHITAN SMALL SCRIPT FILLER;SB=EX;sc=Kits
+unassigned;16FE5..16FEF;vo=U
+# Combining diacritics for CJK ideographs
+cp;16FF0;ccc=6;Dia;gc=Mc;GCB=SM;lb=CM;na=VIETNAMESE ALTERNATE READING MARK CA;SB=EX
+cp;16FF1;ccc=6;Dia;gc=Mc;GCB=SM;lb=CM;na=VIETNAMESE ALTERNATE READING MARK NHAY;SB=EX
+unassigned;16FF2..16FFF;vo=U
block;17000..187FF;Alpha;blk=Tangut;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Tang;vo=U;XIDC;XIDS
# 17000..187F7 Tangut
@@ -31014,7 +31281,520 @@ cp;18AF0;na=TANGUT COMPONENT-753
cp;18AF1;na=TANGUT COMPONENT-754
# Sixteen-stroke component
cp;18AF2;na=TANGUT COMPONENT-755
-unassigned;18AF3..18AFF;vo=U
+# Additional components
+cp;18AF3;age=13.0;na=TANGUT COMPONENT-756
+cp;18AF4;age=13.0;na=TANGUT COMPONENT-757
+cp;18AF5;age=13.0;na=TANGUT COMPONENT-758
+cp;18AF6;age=13.0;na=TANGUT COMPONENT-759
+cp;18AF7;age=13.0;na=TANGUT COMPONENT-760
+cp;18AF8;age=13.0;na=TANGUT COMPONENT-761
+cp;18AF9;age=13.0;na=TANGUT COMPONENT-762
+cp;18AFA;age=13.0;na=TANGUT COMPONENT-763
+cp;18AFB;age=13.0;na=TANGUT COMPONENT-764
+cp;18AFC;age=13.0;na=TANGUT COMPONENT-765
+cp;18AFD;age=13.0;na=TANGUT COMPONENT-766
+cp;18AFE;age=13.0;na=TANGUT COMPONENT-767
+cp;18AFF;age=13.0;na=TANGUT COMPONENT-768
+
+block;18B00..18CFF;age=13.0;Alpha;blk=Khitan_Small_Script;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=AL;SB=LE;sc=Kits;vo=U;XIDC;XIDS
+# 18B00..18CFF Khitan Small Script
+# Iteration mark
+cp;18B00;na=KHITAN SMALL SCRIPT CHARACTER-18B00
+# Radical-01
+cp;18B01;na=KHITAN SMALL SCRIPT CHARACTER-18B01
+cp;18B02;na=KHITAN SMALL SCRIPT CHARACTER-18B02
+cp;18B03;na=KHITAN SMALL SCRIPT CHARACTER-18B03
+cp;18B04;na=KHITAN SMALL SCRIPT CHARACTER-18B04
+cp;18B05;na=KHITAN SMALL SCRIPT CHARACTER-18B05
+cp;18B06;na=KHITAN SMALL SCRIPT CHARACTER-18B06
+cp;18B07;na=KHITAN SMALL SCRIPT CHARACTER-18B07
+cp;18B08;na=KHITAN SMALL SCRIPT CHARACTER-18B08
+cp;18B09;na=KHITAN SMALL SCRIPT CHARACTER-18B09
+cp;18B0A;na=KHITAN SMALL SCRIPT CHARACTER-18B0A
+cp;18B0B;na=KHITAN SMALL SCRIPT CHARACTER-18B0B
+cp;18B0C;na=KHITAN SMALL SCRIPT CHARACTER-18B0C
+cp;18B0D;na=KHITAN SMALL SCRIPT CHARACTER-18B0D
+cp;18B0E;na=KHITAN SMALL SCRIPT CHARACTER-18B0E
+cp;18B0F;na=KHITAN SMALL SCRIPT CHARACTER-18B0F
+cp;18B10;na=KHITAN SMALL SCRIPT CHARACTER-18B10
+cp;18B11;na=KHITAN SMALL SCRIPT CHARACTER-18B11
+cp;18B12;na=KHITAN SMALL SCRIPT CHARACTER-18B12
+cp;18B13;na=KHITAN SMALL SCRIPT CHARACTER-18B13
+cp;18B14;na=KHITAN SMALL SCRIPT CHARACTER-18B14
+cp;18B15;na=KHITAN SMALL SCRIPT CHARACTER-18B15
+cp;18B16;na=KHITAN SMALL SCRIPT CHARACTER-18B16
+cp;18B17;na=KHITAN SMALL SCRIPT CHARACTER-18B17
+cp;18B18;na=KHITAN SMALL SCRIPT CHARACTER-18B18
+cp;18B19;na=KHITAN SMALL SCRIPT CHARACTER-18B19
+cp;18B1A;na=KHITAN SMALL SCRIPT CHARACTER-18B1A
+cp;18B1B;na=KHITAN SMALL SCRIPT CHARACTER-18B1B
+cp;18B1C;na=KHITAN SMALL SCRIPT CHARACTER-18B1C
+cp;18B1D;na=KHITAN SMALL SCRIPT CHARACTER-18B1D
+cp;18B1E;na=KHITAN SMALL SCRIPT CHARACTER-18B1E
+cp;18B1F;na=KHITAN SMALL SCRIPT CHARACTER-18B1F
+cp;18B20;na=KHITAN SMALL SCRIPT CHARACTER-18B20
+cp;18B21;na=KHITAN SMALL SCRIPT CHARACTER-18B21
+cp;18B22;na=KHITAN SMALL SCRIPT CHARACTER-18B22
+cp;18B23;na=KHITAN SMALL SCRIPT CHARACTER-18B23
+cp;18B24;na=KHITAN SMALL SCRIPT CHARACTER-18B24
+cp;18B25;na=KHITAN SMALL SCRIPT CHARACTER-18B25
+cp;18B26;na=KHITAN SMALL SCRIPT CHARACTER-18B26
+cp;18B27;na=KHITAN SMALL SCRIPT CHARACTER-18B27
+cp;18B28;na=KHITAN SMALL SCRIPT CHARACTER-18B28
+cp;18B29;na=KHITAN SMALL SCRIPT CHARACTER-18B29
+cp;18B2A;na=KHITAN SMALL SCRIPT CHARACTER-18B2A
+cp;18B2B;na=KHITAN SMALL SCRIPT CHARACTER-18B2B
+cp;18B2C;na=KHITAN SMALL SCRIPT CHARACTER-18B2C
+cp;18B2D;na=KHITAN SMALL SCRIPT CHARACTER-18B2D
+cp;18B2E;na=KHITAN SMALL SCRIPT CHARACTER-18B2E
+cp;18B2F;na=KHITAN SMALL SCRIPT CHARACTER-18B2F
+cp;18B30;na=KHITAN SMALL SCRIPT CHARACTER-18B30
+cp;18B31;na=KHITAN SMALL SCRIPT CHARACTER-18B31
+cp;18B32;na=KHITAN SMALL SCRIPT CHARACTER-18B32
+cp;18B33;na=KHITAN SMALL SCRIPT CHARACTER-18B33
+cp;18B34;na=KHITAN SMALL SCRIPT CHARACTER-18B34
+cp;18B35;na=KHITAN SMALL SCRIPT CHARACTER-18B35
+# Radical-02
+cp;18B36;na=KHITAN SMALL SCRIPT CHARACTER-18B36
+cp;18B37;na=KHITAN SMALL SCRIPT CHARACTER-18B37
+cp;18B38;na=KHITAN SMALL SCRIPT CHARACTER-18B38
+cp;18B39;na=KHITAN SMALL SCRIPT CHARACTER-18B39
+cp;18B3A;na=KHITAN SMALL SCRIPT CHARACTER-18B3A
+cp;18B3B;na=KHITAN SMALL SCRIPT CHARACTER-18B3B
+cp;18B3C;na=KHITAN SMALL SCRIPT CHARACTER-18B3C
+cp;18B3D;na=KHITAN SMALL SCRIPT CHARACTER-18B3D
+cp;18B3E;na=KHITAN SMALL SCRIPT CHARACTER-18B3E
+cp;18B3F;na=KHITAN SMALL SCRIPT CHARACTER-18B3F
+cp;18B40;na=KHITAN SMALL SCRIPT CHARACTER-18B40
+cp;18B41;na=KHITAN SMALL SCRIPT CHARACTER-18B41
+cp;18B42;na=KHITAN SMALL SCRIPT CHARACTER-18B42
+cp;18B43;na=KHITAN SMALL SCRIPT CHARACTER-18B43
+cp;18B44;na=KHITAN SMALL SCRIPT CHARACTER-18B44
+cp;18B45;na=KHITAN SMALL SCRIPT CHARACTER-18B45
+cp;18B46;na=KHITAN SMALL SCRIPT CHARACTER-18B46
+cp;18B47;na=KHITAN SMALL SCRIPT CHARACTER-18B47
+cp;18B48;na=KHITAN SMALL SCRIPT CHARACTER-18B48
+cp;18B49;na=KHITAN SMALL SCRIPT CHARACTER-18B49
+cp;18B4A;na=KHITAN SMALL SCRIPT CHARACTER-18B4A
+cp;18B4B;na=KHITAN SMALL SCRIPT CHARACTER-18B4B
+cp;18B4C;na=KHITAN SMALL SCRIPT CHARACTER-18B4C
+cp;18B4D;na=KHITAN SMALL SCRIPT CHARACTER-18B4D
+cp;18B4E;na=KHITAN SMALL SCRIPT CHARACTER-18B4E
+cp;18B4F;na=KHITAN SMALL SCRIPT CHARACTER-18B4F
+cp;18B50;na=KHITAN SMALL SCRIPT CHARACTER-18B50
+cp;18B51;na=KHITAN SMALL SCRIPT CHARACTER-18B51
+cp;18B52;na=KHITAN SMALL SCRIPT CHARACTER-18B52
+cp;18B53;na=KHITAN SMALL SCRIPT CHARACTER-18B53
+cp;18B54;na=KHITAN SMALL SCRIPT CHARACTER-18B54
+cp;18B55;na=KHITAN SMALL SCRIPT CHARACTER-18B55
+cp;18B56;na=KHITAN SMALL SCRIPT CHARACTER-18B56
+cp;18B57;na=KHITAN SMALL SCRIPT CHARACTER-18B57
+cp;18B58;na=KHITAN SMALL SCRIPT CHARACTER-18B58
+cp;18B59;na=KHITAN SMALL SCRIPT CHARACTER-18B59
+cp;18B5A;na=KHITAN SMALL SCRIPT CHARACTER-18B5A
+cp;18B5B;na=KHITAN SMALL SCRIPT CHARACTER-18B5B
+cp;18B5C;na=KHITAN SMALL SCRIPT CHARACTER-18B5C
+cp;18B5D;na=KHITAN SMALL SCRIPT CHARACTER-18B5D
+cp;18B5E;na=KHITAN SMALL SCRIPT CHARACTER-18B5E
+cp;18B5F;na=KHITAN SMALL SCRIPT CHARACTER-18B5F
+cp;18B60;na=KHITAN SMALL SCRIPT CHARACTER-18B60
+cp;18B61;na=KHITAN SMALL SCRIPT CHARACTER-18B61
+cp;18B62;na=KHITAN SMALL SCRIPT CHARACTER-18B62
+cp;18B63;na=KHITAN SMALL SCRIPT CHARACTER-18B63
+cp;18B64;na=KHITAN SMALL SCRIPT CHARACTER-18B64
+cp;18B65;na=KHITAN SMALL SCRIPT CHARACTER-18B65
+cp;18B66;na=KHITAN SMALL SCRIPT CHARACTER-18B66
+cp;18B67;na=KHITAN SMALL SCRIPT CHARACTER-18B67
+cp;18B68;na=KHITAN SMALL SCRIPT CHARACTER-18B68
+cp;18B69;na=KHITAN SMALL SCRIPT CHARACTER-18B69
+# Radical-03
+cp;18B6A;na=KHITAN SMALL SCRIPT CHARACTER-18B6A
+cp;18B6B;na=KHITAN SMALL SCRIPT CHARACTER-18B6B
+cp;18B6C;na=KHITAN SMALL SCRIPT CHARACTER-18B6C
+cp;18B6D;na=KHITAN SMALL SCRIPT CHARACTER-18B6D
+cp;18B6E;na=KHITAN SMALL SCRIPT CHARACTER-18B6E
+cp;18B6F;na=KHITAN SMALL SCRIPT CHARACTER-18B6F
+cp;18B70;na=KHITAN SMALL SCRIPT CHARACTER-18B70
+cp;18B71;na=KHITAN SMALL SCRIPT CHARACTER-18B71
+cp;18B72;na=KHITAN SMALL SCRIPT CHARACTER-18B72
+cp;18B73;na=KHITAN SMALL SCRIPT CHARACTER-18B73
+cp;18B74;na=KHITAN SMALL SCRIPT CHARACTER-18B74
+cp;18B75;na=KHITAN SMALL SCRIPT CHARACTER-18B75
+cp;18B76;na=KHITAN SMALL SCRIPT CHARACTER-18B76
+cp;18B77;na=KHITAN SMALL SCRIPT CHARACTER-18B77
+cp;18B78;na=KHITAN SMALL SCRIPT CHARACTER-18B78
+cp;18B79;na=KHITAN SMALL SCRIPT CHARACTER-18B79
+cp;18B7A;na=KHITAN SMALL SCRIPT CHARACTER-18B7A
+cp;18B7B;na=KHITAN SMALL SCRIPT CHARACTER-18B7B
+cp;18B7C;na=KHITAN SMALL SCRIPT CHARACTER-18B7C
+cp;18B7D;na=KHITAN SMALL SCRIPT CHARACTER-18B7D
+cp;18B7E;na=KHITAN SMALL SCRIPT CHARACTER-18B7E
+cp;18B7F;na=KHITAN SMALL SCRIPT CHARACTER-18B7F
+cp;18B80;na=KHITAN SMALL SCRIPT CHARACTER-18B80
+cp;18B81;na=KHITAN SMALL SCRIPT CHARACTER-18B81
+cp;18B82;na=KHITAN SMALL SCRIPT CHARACTER-18B82
+cp;18B83;na=KHITAN SMALL SCRIPT CHARACTER-18B83
+cp;18B84;na=KHITAN SMALL SCRIPT CHARACTER-18B84
+cp;18B85;na=KHITAN SMALL SCRIPT CHARACTER-18B85
+cp;18B86;na=KHITAN SMALL SCRIPT CHARACTER-18B86
+cp;18B87;na=KHITAN SMALL SCRIPT CHARACTER-18B87
+cp;18B88;na=KHITAN SMALL SCRIPT CHARACTER-18B88
+cp;18B89;na=KHITAN SMALL SCRIPT CHARACTER-18B89
+cp;18B8A;na=KHITAN SMALL SCRIPT CHARACTER-18B8A
+cp;18B8B;na=KHITAN SMALL SCRIPT CHARACTER-18B8B
+cp;18B8C;na=KHITAN SMALL SCRIPT CHARACTER-18B8C
+cp;18B8D;na=KHITAN SMALL SCRIPT CHARACTER-18B8D
+cp;18B8E;na=KHITAN SMALL SCRIPT CHARACTER-18B8E
+cp;18B8F;na=KHITAN SMALL SCRIPT CHARACTER-18B8F
+cp;18B90;na=KHITAN SMALL SCRIPT CHARACTER-18B90
+cp;18B91;na=KHITAN SMALL SCRIPT CHARACTER-18B91
+cp;18B92;na=KHITAN SMALL SCRIPT CHARACTER-18B92
+cp;18B93;na=KHITAN SMALL SCRIPT CHARACTER-18B93
+# Radical-04
+cp;18B94;na=KHITAN SMALL SCRIPT CHARACTER-18B94
+cp;18B95;na=KHITAN SMALL SCRIPT CHARACTER-18B95
+cp;18B96;na=KHITAN SMALL SCRIPT CHARACTER-18B96
+cp;18B97;na=KHITAN SMALL SCRIPT CHARACTER-18B97
+cp;18B98;na=KHITAN SMALL SCRIPT CHARACTER-18B98
+cp;18B99;na=KHITAN SMALL SCRIPT CHARACTER-18B99
+cp;18B9A;na=KHITAN SMALL SCRIPT CHARACTER-18B9A
+cp;18B9B;na=KHITAN SMALL SCRIPT CHARACTER-18B9B
+cp;18B9C;na=KHITAN SMALL SCRIPT CHARACTER-18B9C
+cp;18B9D;na=KHITAN SMALL SCRIPT CHARACTER-18B9D
+cp;18B9E;na=KHITAN SMALL SCRIPT CHARACTER-18B9E
+cp;18B9F;na=KHITAN SMALL SCRIPT CHARACTER-18B9F
+cp;18BA0;na=KHITAN SMALL SCRIPT CHARACTER-18BA0
+cp;18BA1;na=KHITAN SMALL SCRIPT CHARACTER-18BA1
+cp;18BA2;na=KHITAN SMALL SCRIPT CHARACTER-18BA2
+cp;18BA3;na=KHITAN SMALL SCRIPT CHARACTER-18BA3
+cp;18BA4;na=KHITAN SMALL SCRIPT CHARACTER-18BA4
+cp;18BA5;na=KHITAN SMALL SCRIPT CHARACTER-18BA5
+cp;18BA6;na=KHITAN SMALL SCRIPT CHARACTER-18BA6
+cp;18BA7;na=KHITAN SMALL SCRIPT CHARACTER-18BA7
+cp;18BA8;na=KHITAN SMALL SCRIPT CHARACTER-18BA8
+cp;18BA9;na=KHITAN SMALL SCRIPT CHARACTER-18BA9
+cp;18BAA;na=KHITAN SMALL SCRIPT CHARACTER-18BAA
+cp;18BAB;na=KHITAN SMALL SCRIPT CHARACTER-18BAB
+cp;18BAC;na=KHITAN SMALL SCRIPT CHARACTER-18BAC
+# Radical-05
+cp;18BAD;na=KHITAN SMALL SCRIPT CHARACTER-18BAD
+cp;18BAE;na=KHITAN SMALL SCRIPT CHARACTER-18BAE
+cp;18BAF;na=KHITAN SMALL SCRIPT CHARACTER-18BAF
+cp;18BB0;na=KHITAN SMALL SCRIPT CHARACTER-18BB0
+cp;18BB1;na=KHITAN SMALL SCRIPT CHARACTER-18BB1
+cp;18BB2;na=KHITAN SMALL SCRIPT CHARACTER-18BB2
+cp;18BB3;na=KHITAN SMALL SCRIPT CHARACTER-18BB3
+cp;18BB4;na=KHITAN SMALL SCRIPT CHARACTER-18BB4
+cp;18BB5;na=KHITAN SMALL SCRIPT CHARACTER-18BB5
+cp;18BB6;na=KHITAN SMALL SCRIPT CHARACTER-18BB6
+cp;18BB7;na=KHITAN SMALL SCRIPT CHARACTER-18BB7
+cp;18BB8;na=KHITAN SMALL SCRIPT CHARACTER-18BB8
+cp;18BB9;na=KHITAN SMALL SCRIPT CHARACTER-18BB9
+cp;18BBA;na=KHITAN SMALL SCRIPT CHARACTER-18BBA
+cp;18BBB;na=KHITAN SMALL SCRIPT CHARACTER-18BBB
+cp;18BBC;na=KHITAN SMALL SCRIPT CHARACTER-18BBC
+cp;18BBD;na=KHITAN SMALL SCRIPT CHARACTER-18BBD
+cp;18BBE;na=KHITAN SMALL SCRIPT CHARACTER-18BBE
+cp;18BBF;na=KHITAN SMALL SCRIPT CHARACTER-18BBF
+cp;18BC0;na=KHITAN SMALL SCRIPT CHARACTER-18BC0
+cp;18BC1;na=KHITAN SMALL SCRIPT CHARACTER-18BC1
+cp;18BC2;na=KHITAN SMALL SCRIPT CHARACTER-18BC2
+cp;18BC3;na=KHITAN SMALL SCRIPT CHARACTER-18BC3
+cp;18BC4;na=KHITAN SMALL SCRIPT CHARACTER-18BC4
+cp;18BC5;na=KHITAN SMALL SCRIPT CHARACTER-18BC5
+cp;18BC6;na=KHITAN SMALL SCRIPT CHARACTER-18BC6
+cp;18BC7;na=KHITAN SMALL SCRIPT CHARACTER-18BC7
+cp;18BC8;na=KHITAN SMALL SCRIPT CHARACTER-18BC8
+cp;18BC9;na=KHITAN SMALL SCRIPT CHARACTER-18BC9
+cp;18BCA;na=KHITAN SMALL SCRIPT CHARACTER-18BCA
+cp;18BCB;na=KHITAN SMALL SCRIPT CHARACTER-18BCB
+cp;18BCC;na=KHITAN SMALL SCRIPT CHARACTER-18BCC
+cp;18BCD;na=KHITAN SMALL SCRIPT CHARACTER-18BCD
+cp;18BCE;na=KHITAN SMALL SCRIPT CHARACTER-18BCE
+cp;18BCF;na=KHITAN SMALL SCRIPT CHARACTER-18BCF
+cp;18BD0;na=KHITAN SMALL SCRIPT CHARACTER-18BD0
+cp;18BD1;na=KHITAN SMALL SCRIPT CHARACTER-18BD1
+# Radical-06
+cp;18BD2;na=KHITAN SMALL SCRIPT CHARACTER-18BD2
+cp;18BD3;na=KHITAN SMALL SCRIPT CHARACTER-18BD3
+cp;18BD4;na=KHITAN SMALL SCRIPT CHARACTER-18BD4
+cp;18BD5;na=KHITAN SMALL SCRIPT CHARACTER-18BD5
+cp;18BD6;na=KHITAN SMALL SCRIPT CHARACTER-18BD6
+cp;18BD7;na=KHITAN SMALL SCRIPT CHARACTER-18BD7
+cp;18BD8;na=KHITAN SMALL SCRIPT CHARACTER-18BD8
+cp;18BD9;na=KHITAN SMALL SCRIPT CHARACTER-18BD9
+cp;18BDA;na=KHITAN SMALL SCRIPT CHARACTER-18BDA
+cp;18BDB;na=KHITAN SMALL SCRIPT CHARACTER-18BDB
+cp;18BDC;na=KHITAN SMALL SCRIPT CHARACTER-18BDC
+cp;18BDD;na=KHITAN SMALL SCRIPT CHARACTER-18BDD
+cp;18BDE;na=KHITAN SMALL SCRIPT CHARACTER-18BDE
+cp;18BDF;na=KHITAN SMALL SCRIPT CHARACTER-18BDF
+cp;18BE0;na=KHITAN SMALL SCRIPT CHARACTER-18BE0
+cp;18BE1;na=KHITAN SMALL SCRIPT CHARACTER-18BE1
+cp;18BE2;na=KHITAN SMALL SCRIPT CHARACTER-18BE2
+cp;18BE3;na=KHITAN SMALL SCRIPT CHARACTER-18BE3
+cp;18BE4;na=KHITAN SMALL SCRIPT CHARACTER-18BE4
+cp;18BE5;na=KHITAN SMALL SCRIPT CHARACTER-18BE5
+cp;18BE6;na=KHITAN SMALL SCRIPT CHARACTER-18BE6
+cp;18BE7;na=KHITAN SMALL SCRIPT CHARACTER-18BE7
+cp;18BE8;na=KHITAN SMALL SCRIPT CHARACTER-18BE8
+cp;18BE9;na=KHITAN SMALL SCRIPT CHARACTER-18BE9
+cp;18BEA;na=KHITAN SMALL SCRIPT CHARACTER-18BEA
+cp;18BEB;na=KHITAN SMALL SCRIPT CHARACTER-18BEB
+cp;18BEC;na=KHITAN SMALL SCRIPT CHARACTER-18BEC
+cp;18BED;na=KHITAN SMALL SCRIPT CHARACTER-18BED
+cp;18BEE;na=KHITAN SMALL SCRIPT CHARACTER-18BEE
+cp;18BEF;na=KHITAN SMALL SCRIPT CHARACTER-18BEF
+cp;18BF0;na=KHITAN SMALL SCRIPT CHARACTER-18BF0
+cp;18BF1;na=KHITAN SMALL SCRIPT CHARACTER-18BF1
+cp;18BF2;na=KHITAN SMALL SCRIPT CHARACTER-18BF2
+cp;18BF3;na=KHITAN SMALL SCRIPT CHARACTER-18BF3
+cp;18BF4;na=KHITAN SMALL SCRIPT CHARACTER-18BF4
+cp;18BF5;na=KHITAN SMALL SCRIPT CHARACTER-18BF5
+cp;18BF6;na=KHITAN SMALL SCRIPT CHARACTER-18BF6
+cp;18BF7;na=KHITAN SMALL SCRIPT CHARACTER-18BF7
+cp;18BF8;na=KHITAN SMALL SCRIPT CHARACTER-18BF8
+cp;18BF9;na=KHITAN SMALL SCRIPT CHARACTER-18BF9
+cp;18BFA;na=KHITAN SMALL SCRIPT CHARACTER-18BFA
+cp;18BFB;na=KHITAN SMALL SCRIPT CHARACTER-18BFB
+cp;18BFC;na=KHITAN SMALL SCRIPT CHARACTER-18BFC
+cp;18BFD;na=KHITAN SMALL SCRIPT CHARACTER-18BFD
+cp;18BFE;na=KHITAN SMALL SCRIPT CHARACTER-18BFE
+cp;18BFF;na=KHITAN SMALL SCRIPT CHARACTER-18BFF
+cp;18C00;na=KHITAN SMALL SCRIPT CHARACTER-18C00
+# Radical-07
+cp;18C01;na=KHITAN SMALL SCRIPT CHARACTER-18C01
+cp;18C02;na=KHITAN SMALL SCRIPT CHARACTER-18C02
+cp;18C03;na=KHITAN SMALL SCRIPT CHARACTER-18C03
+cp;18C04;na=KHITAN SMALL SCRIPT CHARACTER-18C04
+cp;18C05;na=KHITAN SMALL SCRIPT CHARACTER-18C05
+cp;18C06;na=KHITAN SMALL SCRIPT CHARACTER-18C06
+cp;18C07;na=KHITAN SMALL SCRIPT CHARACTER-18C07
+cp;18C08;na=KHITAN SMALL SCRIPT CHARACTER-18C08
+cp;18C09;na=KHITAN SMALL SCRIPT CHARACTER-18C09
+cp;18C0A;na=KHITAN SMALL SCRIPT CHARACTER-18C0A
+cp;18C0B;na=KHITAN SMALL SCRIPT CHARACTER-18C0B
+cp;18C0C;na=KHITAN SMALL SCRIPT CHARACTER-18C0C
+cp;18C0D;na=KHITAN SMALL SCRIPT CHARACTER-18C0D
+cp;18C0E;na=KHITAN SMALL SCRIPT CHARACTER-18C0E
+cp;18C0F;na=KHITAN SMALL SCRIPT CHARACTER-18C0F
+cp;18C10;na=KHITAN SMALL SCRIPT CHARACTER-18C10
+cp;18C11;na=KHITAN SMALL SCRIPT CHARACTER-18C11
+cp;18C12;na=KHITAN SMALL SCRIPT CHARACTER-18C12
+# Radical-08
+cp;18C13;na=KHITAN SMALL SCRIPT CHARACTER-18C13
+cp;18C14;na=KHITAN SMALL SCRIPT CHARACTER-18C14
+cp;18C15;na=KHITAN SMALL SCRIPT CHARACTER-18C15
+cp;18C16;na=KHITAN SMALL SCRIPT CHARACTER-18C16
+cp;18C17;na=KHITAN SMALL SCRIPT CHARACTER-18C17
+cp;18C18;na=KHITAN SMALL SCRIPT CHARACTER-18C18
+cp;18C19;na=KHITAN SMALL SCRIPT CHARACTER-18C19
+cp;18C1A;na=KHITAN SMALL SCRIPT CHARACTER-18C1A
+cp;18C1B;na=KHITAN SMALL SCRIPT CHARACTER-18C1B
+cp;18C1C;na=KHITAN SMALL SCRIPT CHARACTER-18C1C
+cp;18C1D;na=KHITAN SMALL SCRIPT CHARACTER-18C1D
+cp;18C1E;na=KHITAN SMALL SCRIPT CHARACTER-18C1E
+cp;18C1F;na=KHITAN SMALL SCRIPT CHARACTER-18C1F
+cp;18C20;na=KHITAN SMALL SCRIPT CHARACTER-18C20
+cp;18C21;na=KHITAN SMALL SCRIPT CHARACTER-18C21
+cp;18C22;na=KHITAN SMALL SCRIPT CHARACTER-18C22
+cp;18C23;na=KHITAN SMALL SCRIPT CHARACTER-18C23
+cp;18C24;na=KHITAN SMALL SCRIPT CHARACTER-18C24
+cp;18C25;na=KHITAN SMALL SCRIPT CHARACTER-18C25
+cp;18C26;na=KHITAN SMALL SCRIPT CHARACTER-18C26
+cp;18C27;na=KHITAN SMALL SCRIPT CHARACTER-18C27
+# Radical-09
+cp;18C28;na=KHITAN SMALL SCRIPT CHARACTER-18C28
+cp;18C29;na=KHITAN SMALL SCRIPT CHARACTER-18C29
+cp;18C2A;na=KHITAN SMALL SCRIPT CHARACTER-18C2A
+cp;18C2B;na=KHITAN SMALL SCRIPT CHARACTER-18C2B
+cp;18C2C;na=KHITAN SMALL SCRIPT CHARACTER-18C2C
+cp;18C2D;na=KHITAN SMALL SCRIPT CHARACTER-18C2D
+cp;18C2E;na=KHITAN SMALL SCRIPT CHARACTER-18C2E
+# Radical-10
+cp;18C2F;na=KHITAN SMALL SCRIPT CHARACTER-18C2F
+cp;18C30;na=KHITAN SMALL SCRIPT CHARACTER-18C30
+cp;18C31;na=KHITAN SMALL SCRIPT CHARACTER-18C31
+cp;18C32;na=KHITAN SMALL SCRIPT CHARACTER-18C32
+cp;18C33;na=KHITAN SMALL SCRIPT CHARACTER-18C33
+cp;18C34;na=KHITAN SMALL SCRIPT CHARACTER-18C34
+cp;18C35;na=KHITAN SMALL SCRIPT CHARACTER-18C35
+cp;18C36;na=KHITAN SMALL SCRIPT CHARACTER-18C36
+# Radical-11
+cp;18C37;na=KHITAN SMALL SCRIPT CHARACTER-18C37
+cp;18C38;na=KHITAN SMALL SCRIPT CHARACTER-18C38
+cp;18C39;na=KHITAN SMALL SCRIPT CHARACTER-18C39
+cp;18C3A;na=KHITAN SMALL SCRIPT CHARACTER-18C3A
+cp;18C3B;na=KHITAN SMALL SCRIPT CHARACTER-18C3B
+cp;18C3C;na=KHITAN SMALL SCRIPT CHARACTER-18C3C
+cp;18C3D;na=KHITAN SMALL SCRIPT CHARACTER-18C3D
+cp;18C3E;na=KHITAN SMALL SCRIPT CHARACTER-18C3E
+cp;18C3F;na=KHITAN SMALL SCRIPT CHARACTER-18C3F
+cp;18C40;na=KHITAN SMALL SCRIPT CHARACTER-18C40
+cp;18C41;na=KHITAN SMALL SCRIPT CHARACTER-18C41
+cp;18C42;na=KHITAN SMALL SCRIPT CHARACTER-18C42
+cp;18C43;na=KHITAN SMALL SCRIPT CHARACTER-18C43
+cp;18C44;na=KHITAN SMALL SCRIPT CHARACTER-18C44
+cp;18C45;na=KHITAN SMALL SCRIPT CHARACTER-18C45
+cp;18C46;na=KHITAN SMALL SCRIPT CHARACTER-18C46
+cp;18C47;na=KHITAN SMALL SCRIPT CHARACTER-18C47
+cp;18C48;na=KHITAN SMALL SCRIPT CHARACTER-18C48
+cp;18C49;na=KHITAN SMALL SCRIPT CHARACTER-18C49
+cp;18C4A;na=KHITAN SMALL SCRIPT CHARACTER-18C4A
+cp;18C4B;na=KHITAN SMALL SCRIPT CHARACTER-18C4B
+# Radical-12
+cp;18C4C;na=KHITAN SMALL SCRIPT CHARACTER-18C4C
+cp;18C4D;na=KHITAN SMALL SCRIPT CHARACTER-18C4D
+cp;18C4E;na=KHITAN SMALL SCRIPT CHARACTER-18C4E
+cp;18C4F;na=KHITAN SMALL SCRIPT CHARACTER-18C4F
+cp;18C50;na=KHITAN SMALL SCRIPT CHARACTER-18C50
+cp;18C51;na=KHITAN SMALL SCRIPT CHARACTER-18C51
+# Radical-13
+cp;18C52;na=KHITAN SMALL SCRIPT CHARACTER-18C52
+cp;18C53;na=KHITAN SMALL SCRIPT CHARACTER-18C53
+cp;18C54;na=KHITAN SMALL SCRIPT CHARACTER-18C54
+cp;18C55;na=KHITAN SMALL SCRIPT CHARACTER-18C55
+cp;18C56;na=KHITAN SMALL SCRIPT CHARACTER-18C56
+cp;18C57;na=KHITAN SMALL SCRIPT CHARACTER-18C57
+cp;18C58;na=KHITAN SMALL SCRIPT CHARACTER-18C58
+cp;18C59;na=KHITAN SMALL SCRIPT CHARACTER-18C59
+cp;18C5A;na=KHITAN SMALL SCRIPT CHARACTER-18C5A
+cp;18C5B;na=KHITAN SMALL SCRIPT CHARACTER-18C5B
+cp;18C5C;na=KHITAN SMALL SCRIPT CHARACTER-18C5C
+cp;18C5D;na=KHITAN SMALL SCRIPT CHARACTER-18C5D
+cp;18C5E;na=KHITAN SMALL SCRIPT CHARACTER-18C5E
+cp;18C5F;na=KHITAN SMALL SCRIPT CHARACTER-18C5F
+cp;18C60;na=KHITAN SMALL SCRIPT CHARACTER-18C60
+cp;18C61;na=KHITAN SMALL SCRIPT CHARACTER-18C61
+cp;18C62;na=KHITAN SMALL SCRIPT CHARACTER-18C62
+cp;18C63;na=KHITAN SMALL SCRIPT CHARACTER-18C63
+# Radical-14
+cp;18C64;na=KHITAN SMALL SCRIPT CHARACTER-18C64
+cp;18C65;na=KHITAN SMALL SCRIPT CHARACTER-18C65
+cp;18C66;na=KHITAN SMALL SCRIPT CHARACTER-18C66
+cp;18C67;na=KHITAN SMALL SCRIPT CHARACTER-18C67
+cp;18C68;na=KHITAN SMALL SCRIPT CHARACTER-18C68
+cp;18C69;na=KHITAN SMALL SCRIPT CHARACTER-18C69
+cp;18C6A;na=KHITAN SMALL SCRIPT CHARACTER-18C6A
+cp;18C6B;na=KHITAN SMALL SCRIPT CHARACTER-18C6B
+cp;18C6C;na=KHITAN SMALL SCRIPT CHARACTER-18C6C
+cp;18C6D;na=KHITAN SMALL SCRIPT CHARACTER-18C6D
+cp;18C6E;na=KHITAN SMALL SCRIPT CHARACTER-18C6E
+cp;18C6F;na=KHITAN SMALL SCRIPT CHARACTER-18C6F
+cp;18C70;na=KHITAN SMALL SCRIPT CHARACTER-18C70
+cp;18C71;na=KHITAN SMALL SCRIPT CHARACTER-18C71
+cp;18C72;na=KHITAN SMALL SCRIPT CHARACTER-18C72
+cp;18C73;na=KHITAN SMALL SCRIPT CHARACTER-18C73
+cp;18C74;na=KHITAN SMALL SCRIPT CHARACTER-18C74
+cp;18C75;na=KHITAN SMALL SCRIPT CHARACTER-18C75
+cp;18C76;na=KHITAN SMALL SCRIPT CHARACTER-18C76
+cp;18C77;na=KHITAN SMALL SCRIPT CHARACTER-18C77
+cp;18C78;na=KHITAN SMALL SCRIPT CHARACTER-18C78
+cp;18C79;na=KHITAN SMALL SCRIPT CHARACTER-18C79
+cp;18C7A;na=KHITAN SMALL SCRIPT CHARACTER-18C7A
+cp;18C7B;na=KHITAN SMALL SCRIPT CHARACTER-18C7B
+cp;18C7C;na=KHITAN SMALL SCRIPT CHARACTER-18C7C
+cp;18C7D;na=KHITAN SMALL SCRIPT CHARACTER-18C7D
+cp;18C7E;na=KHITAN SMALL SCRIPT CHARACTER-18C7E
+# Radical-15
+cp;18C7F;na=KHITAN SMALL SCRIPT CHARACTER-18C7F
+cp;18C80;na=KHITAN SMALL SCRIPT CHARACTER-18C80
+cp;18C81;na=KHITAN SMALL SCRIPT CHARACTER-18C81
+cp;18C82;na=KHITAN SMALL SCRIPT CHARACTER-18C82
+cp;18C83;na=KHITAN SMALL SCRIPT CHARACTER-18C83
+cp;18C84;na=KHITAN SMALL SCRIPT CHARACTER-18C84
+cp;18C85;na=KHITAN SMALL SCRIPT CHARACTER-18C85
+cp;18C86;na=KHITAN SMALL SCRIPT CHARACTER-18C86
+cp;18C87;na=KHITAN SMALL SCRIPT CHARACTER-18C87
+cp;18C88;na=KHITAN SMALL SCRIPT CHARACTER-18C88
+cp;18C89;na=KHITAN SMALL SCRIPT CHARACTER-18C89
+cp;18C8A;na=KHITAN SMALL SCRIPT CHARACTER-18C8A
+cp;18C8B;na=KHITAN SMALL SCRIPT CHARACTER-18C8B
+# Radical-16
+cp;18C8C;na=KHITAN SMALL SCRIPT CHARACTER-18C8C
+cp;18C8D;na=KHITAN SMALL SCRIPT CHARACTER-18C8D
+cp;18C8E;na=KHITAN SMALL SCRIPT CHARACTER-18C8E
+cp;18C8F;na=KHITAN SMALL SCRIPT CHARACTER-18C8F
+cp;18C90;na=KHITAN SMALL SCRIPT CHARACTER-18C90
+cp;18C91;na=KHITAN SMALL SCRIPT CHARACTER-18C91
+cp;18C92;na=KHITAN SMALL SCRIPT CHARACTER-18C92
+cp;18C93;na=KHITAN SMALL SCRIPT CHARACTER-18C93
+cp;18C94;na=KHITAN SMALL SCRIPT CHARACTER-18C94
+# Radical-17
+cp;18C95;na=KHITAN SMALL SCRIPT CHARACTER-18C95
+cp;18C96;na=KHITAN SMALL SCRIPT CHARACTER-18C96
+cp;18C97;na=KHITAN SMALL SCRIPT CHARACTER-18C97
+cp;18C98;na=KHITAN SMALL SCRIPT CHARACTER-18C98
+cp;18C99;na=KHITAN SMALL SCRIPT CHARACTER-18C99
+cp;18C9A;na=KHITAN SMALL SCRIPT CHARACTER-18C9A
+cp;18C9B;na=KHITAN SMALL SCRIPT CHARACTER-18C9B
+cp;18C9C;na=KHITAN SMALL SCRIPT CHARACTER-18C9C
+cp;18C9D;na=KHITAN SMALL SCRIPT CHARACTER-18C9D
+cp;18C9E;na=KHITAN SMALL SCRIPT CHARACTER-18C9E
+cp;18C9F;na=KHITAN SMALL SCRIPT CHARACTER-18C9F
+cp;18CA0;na=KHITAN SMALL SCRIPT CHARACTER-18CA0
+cp;18CA1;na=KHITAN SMALL SCRIPT CHARACTER-18CA1
+cp;18CA2;na=KHITAN SMALL SCRIPT CHARACTER-18CA2
+cp;18CA3;na=KHITAN SMALL SCRIPT CHARACTER-18CA3
+cp;18CA4;na=KHITAN SMALL SCRIPT CHARACTER-18CA4
+cp;18CA5;na=KHITAN SMALL SCRIPT CHARACTER-18CA5
+cp;18CA6;na=KHITAN SMALL SCRIPT CHARACTER-18CA6
+cp;18CA7;na=KHITAN SMALL SCRIPT CHARACTER-18CA7
+cp;18CA8;na=KHITAN SMALL SCRIPT CHARACTER-18CA8
+cp;18CA9;na=KHITAN SMALL SCRIPT CHARACTER-18CA9
+cp;18CAA;na=KHITAN SMALL SCRIPT CHARACTER-18CAA
+cp;18CAB;na=KHITAN SMALL SCRIPT CHARACTER-18CAB
+cp;18CAC;na=KHITAN SMALL SCRIPT CHARACTER-18CAC
+cp;18CAD;na=KHITAN SMALL SCRIPT CHARACTER-18CAD
+cp;18CAE;na=KHITAN SMALL SCRIPT CHARACTER-18CAE
+cp;18CAF;na=KHITAN SMALL SCRIPT CHARACTER-18CAF
+cp;18CB0;na=KHITAN SMALL SCRIPT CHARACTER-18CB0
+cp;18CB1;na=KHITAN SMALL SCRIPT CHARACTER-18CB1
+cp;18CB2;na=KHITAN SMALL SCRIPT CHARACTER-18CB2
+cp;18CB3;na=KHITAN SMALL SCRIPT CHARACTER-18CB3
+cp;18CB4;na=KHITAN SMALL SCRIPT CHARACTER-18CB4
+cp;18CB5;na=KHITAN SMALL SCRIPT CHARACTER-18CB5
+cp;18CB6;na=KHITAN SMALL SCRIPT CHARACTER-18CB6
+cp;18CB7;na=KHITAN SMALL SCRIPT CHARACTER-18CB7
+cp;18CB8;na=KHITAN SMALL SCRIPT CHARACTER-18CB8
+cp;18CB9;na=KHITAN SMALL SCRIPT CHARACTER-18CB9
+cp;18CBA;na=KHITAN SMALL SCRIPT CHARACTER-18CBA
+cp;18CBB;na=KHITAN SMALL SCRIPT CHARACTER-18CBB
+cp;18CBC;na=KHITAN SMALL SCRIPT CHARACTER-18CBC
+cp;18CBD;na=KHITAN SMALL SCRIPT CHARACTER-18CBD
+cp;18CBE;na=KHITAN SMALL SCRIPT CHARACTER-18CBE
+cp;18CBF;na=KHITAN SMALL SCRIPT CHARACTER-18CBF
+# Radical-18
+cp;18CC0;na=KHITAN SMALL SCRIPT CHARACTER-18CC0
+cp;18CC1;na=KHITAN SMALL SCRIPT CHARACTER-18CC1
+cp;18CC2;na=KHITAN SMALL SCRIPT CHARACTER-18CC2
+cp;18CC3;na=KHITAN SMALL SCRIPT CHARACTER-18CC3
+cp;18CC4;na=KHITAN SMALL SCRIPT CHARACTER-18CC4
+cp;18CC5;na=KHITAN SMALL SCRIPT CHARACTER-18CC5
+cp;18CC6;na=KHITAN SMALL SCRIPT CHARACTER-18CC6
+cp;18CC7;na=KHITAN SMALL SCRIPT CHARACTER-18CC7
+cp;18CC8;na=KHITAN SMALL SCRIPT CHARACTER-18CC8
+cp;18CC9;na=KHITAN SMALL SCRIPT CHARACTER-18CC9
+cp;18CCA;na=KHITAN SMALL SCRIPT CHARACTER-18CCA
+cp;18CCB;na=KHITAN SMALL SCRIPT CHARACTER-18CCB
+# Radical-19
+cp;18CCC;na=KHITAN SMALL SCRIPT CHARACTER-18CCC
+cp;18CCD;na=KHITAN SMALL SCRIPT CHARACTER-18CCD
+cp;18CCE;na=KHITAN SMALL SCRIPT CHARACTER-18CCE
+cp;18CCF;na=KHITAN SMALL SCRIPT CHARACTER-18CCF
+cp;18CD0;na=KHITAN SMALL SCRIPT CHARACTER-18CD0
+cp;18CD1;na=KHITAN SMALL SCRIPT CHARACTER-18CD1
+cp;18CD2;na=KHITAN SMALL SCRIPT CHARACTER-18CD2
+# Radical-20
+cp;18CD3;na=KHITAN SMALL SCRIPT CHARACTER-18CD3
+cp;18CD4;na=KHITAN SMALL SCRIPT CHARACTER-18CD4
+cp;18CD5;na=KHITAN SMALL SCRIPT CHARACTER-18CD5
+unassigned;18CD6..18CFF;vo=U
+
+block;18D00..18D8F;age=13.0;Alpha;blk=Tangut_Sup;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Tang;vo=U;XIDC;XIDS
+# 18D00..18D08 Tangut Supplement
+algnamesrange;18D00..18D08;han;TANGUT IDEOGRAPH-
+unassigned;18D09..18D8F;vo=U
block;1B000..1B0FF;age=10.0;Alpha;blk=Kana_Sup;ea=W;gc=Lo;Gr_Base;IDC;IDS;lb=ID;SB=LE;sc=Hira;vo=U;XIDC;XIDS
# 1B000..1B0FF Kana Supplement
@@ -35638,7 +36418,10 @@ cp;1F10A;age=5.2;bc=EN;CWKCF;dm=0039 002C;dt=Com;gc=No;na=DIGIT NINE COMMA;NFKC_
# Circled sans-serif digits
cp;1F10B;age=7.0;bc=ON;ea=N;gc=No;na=DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;nt=Nu;nv=0
cp;1F10C;age=7.0;bc=ON;ea=N;gc=No;na=DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;nt=Nu;nv=0
-unassigned;1F10D..1F10F;ExtPict;lb=ID;vo=U
+# Creative Commons symbols
+cp;1F10D;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=CIRCLED ZERO WITH SLASH
+cp;1F10E;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=CIRCLED ANTICLOCKWISE ARROW
+cp;1F10F;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
# Parenthesized Latin letters
cp;1F110;age=5.2;CWKCF;dm=0028 0041 0029;dt=Com;FC_NFKC=0028 0061 0029;na=PARENTHESIZED LATIN CAPITAL LETTER A;NFKC_CF=0028 0061 0029;NFKC_QC=N;NFKD_QC=N
cp;1F111;age=5.2;CWKCF;dm=0028 0042 0029;dt=Com;FC_NFKC=0028 0062 0029;na=PARENTHESIZED LATIN CAPITAL LETTER B;NFKC_CF=0028 0062 0029;NFKC_QC=N;NFKD_QC=N
@@ -35739,7 +36522,10 @@ cp;1F169;Alpha;Cased;na=NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;SB=UP;Upper;WB=L
cp;1F16A;age=6.1;bc=ON;CWKCF;dm=004D 0043;dt=Sup;ea=N;FC_NFKC=006D 0063;lb=AL;na=RAISED MC SIGN;NFKC_CF=006D 0063;NFKC_QC=N;NFKD_QC=N
cp;1F16B;age=6.1;bc=ON;CWKCF;dm=004D 0044;dt=Sup;ea=N;FC_NFKC=006D 0064;lb=AL;na=RAISED MD SIGN;NFKC_CF=006D 0064;NFKC_QC=N;NFKD_QC=N
cp;1F16C;age=12.0;bc=ON;CWKCF;dm=004D 0052;dt=Sup;ea=N;ExtPict;FC_NFKC=006D 0072;lb=AL;na=RAISED MR SIGN;NFKC_CF=006D 0072;NFKC_QC=N;NFKD_QC=N
-unassigned;1F16D..1F16F;ExtPict;lb=ID;vo=U
+# Creative Commons symbols
+cp;1F16D;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=CIRCLED CC
+cp;1F16E;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=CIRCLED C WITH OVERLAID BACKSLASH
+cp;1F16F;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=CIRCLED HUMAN FIGURE
# White on black squared Latin letters
cp;1F170;Alpha;Cased;Emoji;ExtPict;na=NEGATIVE SQUARED LATIN CAPITAL LETTER A;SB=UP;Upper;WB=LE
cp;1F171;Alpha;Cased;Emoji;ExtPict;na=NEGATIVE SQUARED LATIN CAPITAL LETTER B;SB=UP;Upper;WB=LE
@@ -35804,7 +36590,9 @@ cp;1F1A9;age=9.0;na=SQUARED LOSSLESS
cp;1F1AA;age=9.0;na=SQUARED SHV
cp;1F1AB;age=9.0;na=SQUARED UHD
cp;1F1AC;age=9.0;na=SQUARED VOD
-unassigned;1F1AD..1F1E5;ExtPict;lb=ID;vo=U
+# Miscellaneous symbol
+cp;1F1AD;age=13.0;bc=ON;ea=N;ExtPict;lb=ID;na=MASK WORK SYMBOL
+unassigned;1F1AE..1F1E5;ExtPict;lb=ID;vo=U
# Regional indicator symbols
cp;1F1E6;ea=N;EComp;Emoji;EPres;GCB=RI;lb=RI;na=REGIONAL INDICATOR SYMBOL LETTER A;RI;WB=RI
cp;1F1E7;ea=N;EComp;Emoji;EPres;GCB=RI;lb=RI;na=REGIONAL INDICATOR SYMBOL LETTER B;RI;WB=RI
@@ -36995,7 +37783,9 @@ cp;1F6D2;age=9.0;na=SHOPPING TROLLEY
cp;1F6D3;age=10.0;ea=N;-Emoji;-EPres;na=STUPA
cp;1F6D4;age=10.0;ea=N;-Emoji;-EPres;na=PAGODA
cp;1F6D5;age=12.0;na=HINDU TEMPLE
-unassigned;1F6D6..1F6DF;ExtPict;lb=ID;vo=U
+cp;1F6D6;age=13.0;na=HUT
+cp;1F6D7;age=13.0;na=ELEVATOR
+unassigned;1F6D8..1F6DF;ExtPict;lb=ID;vo=U
# Miscellaneous symbols
cp;1F6E0;age=7.0;ea=N;-EPres;na=HAMMER AND WRENCH
cp;1F6E1;age=7.0;ea=N;-EPres;na=SHIELD
@@ -37023,7 +37813,9 @@ cp;1F6F7;age=10.0;na=SLED
cp;1F6F8;age=10.0;na=FLYING SAUCER
cp;1F6F9;age=11.0;na=SKATEBOARD
cp;1F6FA;age=12.0;na=AUTO RICKSHAW
-unassigned;1F6FB..1F6FF;ExtPict;lb=ID;vo=U
+cp;1F6FB;age=13.0;na=PICKUP TRUCK
+cp;1F6FC;age=13.0;na=ROLLER SKATE
+unassigned;1F6FD..1F6FF;ExtPict;lb=ID;vo=U
block;1F700..1F77F;age=6.0;bc=ON;blk=Alchemical;gc=So;Gr_Base;lb=AL;sc=Zyyy;vo=U
# 1F700..1F77F Alchemical Symbols
@@ -37461,7 +38253,11 @@ cp;1F8AB;na=RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW
# White arrow shafts
cp;1F8AC;na=WHITE ARROW SHAFT WIDTH ONE
cp;1F8AD;na=WHITE ARROW SHAFT WIDTH TWO THIRDS
-unassigned;1F8AE..1F8FF;ExtPict;lb=ID
+unassigned;1F8AE..1F8AF;ExtPict;lb=ID
+# Arrows for legacy computing
+cp;1F8B0;age=13.0;ExtPict;lb=ID;na=ARROW POINTING UPWARDS THEN NORTH WEST
+cp;1F8B1;age=13.0;ExtPict;lb=ID;na=ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+unassigned;1F8B2..1F8FF;ExtPict;lb=ID
block;1F900..1F9FF;age=10.0;bc=ON;blk=Sup_Symbols_And_Pictographs;ea=W;Emoji;EPres;ExtPict;gc=So;Gr_Base;lb=ID;sc=Zyyy;vo=U
# 1F900..1F9FF Supplemental Symbols and Pictographs
@@ -37478,7 +38274,8 @@ cp;1F908;ea=N;-Emoji;-EPres;-ExtPict;lb=AL;na=DOWNWARD FACING HOOK
cp;1F909;ea=N;-Emoji;-EPres;-ExtPict;lb=AL;na=DOWNWARD FACING NOTCHED HOOK
cp;1F90A;ea=N;-Emoji;-EPres;-ExtPict;lb=AL;na=DOWNWARD FACING HOOK WITH DOT
cp;1F90B;ea=N;-Emoji;-EPres;-ExtPict;lb=AL;na=DOWNWARD FACING NOTCHED HOOK WITH DOT
-unassigned;1F90C;ExtPict;lb=ID;vo=U
+# Hand symbol
+cp;1F90C;age=13.0;EBase;lb=EB;na=PINCHED FINGERS
# Colored heart symbols
cp;1F90D;age=12.0;na=WHITE HEART
cp;1F90E;age=12.0;na=BROWN HEART
@@ -37532,7 +38329,7 @@ cp;1F937;age=9.0;EBase;lb=EB;na=SHRUG
cp;1F938;age=9.0;EBase;lb=EB;na=PERSON DOING CARTWHEEL
cp;1F939;age=9.0;EBase;lb=EB;na=JUGGLING
cp;1F93A;age=9.0;na=FENCER
-cp;1F93B;age=9.0;-Emoji;-EPres;-ExtPict;na=MODERN PENTATHLON
+cp;1F93B;age=9.0;ea=N;-Emoji;-EPres;-ExtPict;na=MODERN PENTATHLON
cp;1F93C;age=9.0;EBase;lb=EB;na=WRESTLERS
cp;1F93D;age=9.0;EBase;lb=EB;na=WATER POLO
cp;1F93E;age=9.0;EBase;lb=EB;na=HANDBALL
@@ -37544,7 +38341,7 @@ cp;1F942;age=9.0;na=CLINKING GLASSES
cp;1F943;age=9.0;na=TUMBLER GLASS
cp;1F944;age=9.0;na=SPOON
cp;1F945;age=9.0;na=GOAL NET
-cp;1F946;age=9.0;-Emoji;-EPres;-ExtPict;na=RIFLE
+cp;1F946;age=9.0;ea=N;-Emoji;-EPres;-ExtPict;na=RIFLE
cp;1F947;age=9.0;na=FIRST PLACE MEDAL
cp;1F948;age=9.0;na=SECOND PLACE MEDAL
cp;1F949;age=9.0;na=THIRD PLACE MEDAL
@@ -37590,12 +38387,14 @@ cp;1F96F;age=11.0;na=BAGEL
# Faces
cp;1F970;age=11.0;na=SMILING FACE WITH SMILING EYES AND THREE HEARTS
cp;1F971;age=12.0;na=YAWNING FACE
-unassigned;1F972;ExtPict;lb=ID;vo=U
+cp;1F972;age=13.0;na=SMILING FACE WITH TEAR
cp;1F973;age=11.0;na=FACE WITH PARTY HORN AND PARTY HAT
cp;1F974;age=11.0;na=FACE WITH UNEVEN EYES AND WAVY MOUTH
cp;1F975;age=11.0;na=OVERHEATED FACE
cp;1F976;age=11.0;na=FREEZING FACE
-unassigned;1F977..1F979;ExtPict;lb=ID;vo=U
+cp;1F977;age=13.0;EBase;lb=EB;na=NINJA
+cp;1F978;age=13.0;na=DISGUISED FACE
+unassigned;1F979;ExtPict;lb=ID;vo=U
cp;1F97A;age=11.0;na=FACE WITH PLEADING EYES
# Clothing
cp;1F97B;age=12.0;na=SARI
@@ -37639,14 +38438,17 @@ cp;1F99F;age=11.0;na=MOSQUITO
cp;1F9A0;age=11.0;na=MICROBE
cp;1F9A1;age=11.0;na=BADGER
cp;1F9A2;age=11.0;na=SWAN
-unassigned;1F9A3..1F9A4;ExtPict;lb=ID;vo=U
+cp;1F9A3;age=13.0;na=MAMMOTH
+cp;1F9A4;age=13.0;na=DODO
cp;1F9A5;age=12.0;na=SLOTH
cp;1F9A6;age=12.0;na=OTTER
cp;1F9A7;age=12.0;na=ORANGUTAN
cp;1F9A8;age=12.0;na=SKUNK
cp;1F9A9;age=12.0;na=FLAMINGO
cp;1F9AA;age=12.0;na=OYSTER
-unassigned;1F9AB..1F9AD;ExtPict;lb=ID;vo=U
+cp;1F9AB;age=13.0;na=BEAVER
+cp;1F9AC;age=13.0;na=BISON
+cp;1F9AD;age=13.0;na=SEAL
# Accessibility symbols
cp;1F9AE;age=12.0;na=GUIDE DOG
cp;1F9AF;age=12.0;na=PROBING CANE
@@ -37682,7 +38484,8 @@ cp;1F9C7;age=12.0;na=WAFFLE
cp;1F9C8;age=12.0;na=BUTTER
cp;1F9C9;age=12.0;na=MATE DRINK
cp;1F9CA;age=12.0;na=ICE CUBE
-unassigned;1F9CB..1F9CC;ExtPict;lb=ID;vo=U
+cp;1F9CB;age=13.0;na=BUBBLE TEA
+unassigned;1F9CC;ExtPict;lb=ID;vo=U
# Portrait and accessibility symbols
cp;1F9CD;age=12.0;EBase;lb=EB;na=STANDING PERSON
cp;1F9CE;age=12.0;EBase;lb=EB;na=KNEELING PERSON
@@ -37856,44 +38659,324 @@ cp;1FA6C;age=11.0;lb=ID;na=XIANGQI BLACK CANNON
cp;1FA6D;age=11.0;lb=ID;na=XIANGQI BLACK SOLDIER
unassigned;1FA6E..1FA6F;ExtPict;lb=ID;vo=U
-block;1FA70..1FAFF;age=12.0;bc=ON;blk=Symbols_And_Pictographs_Ext_A;ea=W;Emoji;EPres;ExtPict;gc=So;Gr_Base;lb=ID;sc=Zyyy;vo=U
+block;1FA70..1FAFF;age=13.0;bc=ON;blk=Symbols_And_Pictographs_Ext_A;ea=W;Emoji;EPres;ExtPict;gc=So;Gr_Base;lb=ID;sc=Zyyy;vo=U
# 1FA70..1FAFF Symbols and Pictographs Extended-A
# Clothing
-cp;1FA70;na=BALLET SHOES
-cp;1FA71;na=ONE-PIECE SWIMSUIT
-cp;1FA72;na=BRIEFS
-cp;1FA73;na=SHORTS
-unassigned;1FA74..1FA77;ExtPict;lb=ID;vo=U
+cp;1FA70;age=12.0;na=BALLET SHOES
+cp;1FA71;age=12.0;na=ONE-PIECE SWIMSUIT
+cp;1FA72;age=12.0;na=BRIEFS
+cp;1FA73;age=12.0;na=SHORTS
+cp;1FA74;na=THONG SANDAL
+unassigned;1FA75..1FA77;ExtPict;lb=ID;vo=U
# Medical symbols
-cp;1FA78;na=DROP OF BLOOD
-cp;1FA79;na=ADHESIVE BANDAGE
-cp;1FA7A;na=STETHOSCOPE
+cp;1FA78;age=12.0;na=DROP OF BLOOD
+cp;1FA79;age=12.0;na=ADHESIVE BANDAGE
+cp;1FA7A;age=12.0;na=STETHOSCOPE
unassigned;1FA7B..1FA7F;ExtPict;lb=ID;vo=U
# Toys and sport symbols
-cp;1FA80;na=YO-YO
-cp;1FA81;na=KITE
-cp;1FA82;na=PARACHUTE
-unassigned;1FA83..1FA8F;ExtPict;lb=ID;vo=U
+cp;1FA80;age=12.0;na=YO-YO
+cp;1FA81;age=12.0;na=KITE
+cp;1FA82;age=12.0;na=PARACHUTE
+cp;1FA83;na=BOOMERANG
+cp;1FA84;na=MAGIC WAND
+cp;1FA85;na=PINATA
+cp;1FA86;na=NESTING DOLLS
+unassigned;1FA87..1FA8F;ExtPict;lb=ID;vo=U
# Miscellaneous objects
-cp;1FA90;na=RINGED PLANET
-cp;1FA91;na=CHAIR
-cp;1FA92;na=RAZOR
-cp;1FA93;na=AXE
-cp;1FA94;na=DIYA LAMP
-cp;1FA95;na=BANJO
-unassigned;1FA96..1FA9F;ExtPict;lb=ID;vo=U
-unassigned;1FAA0..1FAFF;ExtPict;lb=ID
+cp;1FA90;age=12.0;na=RINGED PLANET
+cp;1FA91;age=12.0;na=CHAIR
+cp;1FA92;age=12.0;na=RAZOR
+cp;1FA93;age=12.0;na=AXE
+cp;1FA94;age=12.0;na=DIYA LAMP
+cp;1FA95;age=12.0;na=BANJO
+cp;1FA96;na=MILITARY HELMET
+cp;1FA97;na=ACCORDION
+cp;1FA98;na=LONG DRUM
+cp;1FA99;na=COIN
+cp;1FA9A;na=CARPENTRY SAW
+cp;1FA9B;na=SCREWDRIVER
+cp;1FA9C;na=LADDER
+cp;1FA9D;na=HOOK
+cp;1FA9E;na=MIRROR
+cp;1FA9F;na=WINDOW
+cp;1FAA0;na=PLUNGER
+cp;1FAA1;na=SEWING NEEDLE
+cp;1FAA2;na=KNOT
+cp;1FAA3;na=BUCKET
+cp;1FAA4;na=MOUSE TRAP
+cp;1FAA5;na=TOOTHBRUSH
+cp;1FAA6;na=HEADSTONE
+cp;1FAA7;na=PLACARD
+cp;1FAA8;na=ROCK
+unassigned;1FAA9..1FAAF;ExtPict;lb=ID;vo=U
+# Animals and nature
+cp;1FAB0;na=FLY
+cp;1FAB1;na=WORM
+cp;1FAB2;na=BEETLE
+cp;1FAB3;na=COCKROACH
+cp;1FAB4;na=POTTED PLANT
+cp;1FAB5;na=WOOD
+cp;1FAB6;na=FEATHER
+unassigned;1FAB7..1FABF;ExtPict;lb=ID;vo=U
+# Body parts
+cp;1FAC0;na=ANATOMICAL HEART
+cp;1FAC1;na=LUNGS
+# People
+cp;1FAC2;na=PEOPLE HUGGING
+unassigned;1FAC3..1FACF;ExtPict;lb=ID;vo=U
+# Food and drink
+cp;1FAD0;na=BLUEBERRIES
+cp;1FAD1;na=BELL PEPPER
+cp;1FAD2;na=OLIVE
+cp;1FAD3;na=FLATBREAD
+cp;1FAD4;na=TAMALE
+cp;1FAD5;na=FONDUE
+cp;1FAD6;na=TEAPOT
+unassigned;1FAD7..1FAFF;ExtPict;lb=ID;vo=U
+
+block;1FB00..1FBFF;age=13.0;bc=ON;blk=Symbols_For_Legacy_Computing;gc=So;Gr_Base;lb=AL;sc=Zyyy
+# 1FB00..1FBFF Symbols for Legacy Computing
+# Block mosaic terminal graphic characters
+cp;1FB00;na=BLOCK SEXTANT-1
+cp;1FB01;na=BLOCK SEXTANT-2
+cp;1FB02;na=BLOCK SEXTANT-12
+cp;1FB03;na=BLOCK SEXTANT-3
+cp;1FB04;na=BLOCK SEXTANT-13
+cp;1FB05;na=BLOCK SEXTANT-23
+cp;1FB06;na=BLOCK SEXTANT-123
+cp;1FB07;na=BLOCK SEXTANT-4
+cp;1FB08;na=BLOCK SEXTANT-14
+cp;1FB09;na=BLOCK SEXTANT-24
+cp;1FB0A;na=BLOCK SEXTANT-124
+cp;1FB0B;na=BLOCK SEXTANT-34
+cp;1FB0C;na=BLOCK SEXTANT-134
+cp;1FB0D;na=BLOCK SEXTANT-234
+cp;1FB0E;na=BLOCK SEXTANT-1234
+cp;1FB0F;na=BLOCK SEXTANT-5
+cp;1FB10;na=BLOCK SEXTANT-15
+cp;1FB11;na=BLOCK SEXTANT-25
+cp;1FB12;na=BLOCK SEXTANT-125
+cp;1FB13;na=BLOCK SEXTANT-35
+cp;1FB14;na=BLOCK SEXTANT-235
+cp;1FB15;na=BLOCK SEXTANT-1235
+cp;1FB16;na=BLOCK SEXTANT-45
+cp;1FB17;na=BLOCK SEXTANT-145
+cp;1FB18;na=BLOCK SEXTANT-245
+cp;1FB19;na=BLOCK SEXTANT-1245
+cp;1FB1A;na=BLOCK SEXTANT-345
+cp;1FB1B;na=BLOCK SEXTANT-1345
+cp;1FB1C;na=BLOCK SEXTANT-2345
+cp;1FB1D;na=BLOCK SEXTANT-12345
+cp;1FB1E;na=BLOCK SEXTANT-6
+cp;1FB1F;na=BLOCK SEXTANT-16
+cp;1FB20;na=BLOCK SEXTANT-26
+cp;1FB21;na=BLOCK SEXTANT-126
+cp;1FB22;na=BLOCK SEXTANT-36
+cp;1FB23;na=BLOCK SEXTANT-136
+cp;1FB24;na=BLOCK SEXTANT-236
+cp;1FB25;na=BLOCK SEXTANT-1236
+cp;1FB26;na=BLOCK SEXTANT-46
+cp;1FB27;na=BLOCK SEXTANT-146
+cp;1FB28;na=BLOCK SEXTANT-1246
+cp;1FB29;na=BLOCK SEXTANT-346
+cp;1FB2A;na=BLOCK SEXTANT-1346
+cp;1FB2B;na=BLOCK SEXTANT-2346
+cp;1FB2C;na=BLOCK SEXTANT-12346
+cp;1FB2D;na=BLOCK SEXTANT-56
+cp;1FB2E;na=BLOCK SEXTANT-156
+cp;1FB2F;na=BLOCK SEXTANT-256
+cp;1FB30;na=BLOCK SEXTANT-1256
+cp;1FB31;na=BLOCK SEXTANT-356
+cp;1FB32;na=BLOCK SEXTANT-1356
+cp;1FB33;na=BLOCK SEXTANT-2356
+cp;1FB34;na=BLOCK SEXTANT-12356
+cp;1FB35;na=BLOCK SEXTANT-456
+cp;1FB36;na=BLOCK SEXTANT-1456
+cp;1FB37;na=BLOCK SEXTANT-2456
+cp;1FB38;na=BLOCK SEXTANT-12456
+cp;1FB39;na=BLOCK SEXTANT-3456
+cp;1FB3A;na=BLOCK SEXTANT-13456
+cp;1FB3B;na=BLOCK SEXTANT-23456
+# Smooth mosaic terminal graphic characters
+cp;1FB3C;na=LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE
+cp;1FB3D;na=LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT
+cp;1FB3E;na=LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE
+cp;1FB3F;na=LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT
+cp;1FB40;na=LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE
+cp;1FB41;na=LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE
+cp;1FB42;na=LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT
+cp;1FB43;na=LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE
+cp;1FB44;na=LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT
+cp;1FB45;na=LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE
+cp;1FB46;na=LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT
+cp;1FB47;na=LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT
+cp;1FB48;na=LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT
+cp;1FB49;na=LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT
+cp;1FB4A;na=LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT
+cp;1FB4B;na=LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT
+cp;1FB4C;na=LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT
+cp;1FB4D;na=LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT
+cp;1FB4E;na=LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT
+cp;1FB4F;na=LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT
+cp;1FB50;na=LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT
+cp;1FB51;na=LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT
+cp;1FB52;na=UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE
+cp;1FB53;na=UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT
+cp;1FB54;na=UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE
+cp;1FB55;na=UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT
+cp;1FB56;na=UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE
+cp;1FB57;na=UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE
+cp;1FB58;na=UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT
+cp;1FB59;na=UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE
+cp;1FB5A;na=UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT
+cp;1FB5B;na=UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE
+cp;1FB5C;na=UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT
+cp;1FB5D;na=UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT
+cp;1FB5E;na=UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT
+cp;1FB5F;na=UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT
+cp;1FB60;na=UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT
+cp;1FB61;na=UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT
+cp;1FB62;na=UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT
+cp;1FB63;na=UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT
+cp;1FB64;na=UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT
+cp;1FB65;na=UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT
+cp;1FB66;na=UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT
+cp;1FB67;na=UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT
+cp;1FB68;na=UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK
+cp;1FB69;na=LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK
+cp;1FB6A;na=UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK
+cp;1FB6B;na=LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK
+cp;1FB6C;na=LEFT TRIANGULAR ONE QUARTER BLOCK
+cp;1FB6D;na=UPPER TRIANGULAR ONE QUARTER BLOCK
+cp;1FB6E;na=RIGHT TRIANGULAR ONE QUARTER BLOCK
+cp;1FB6F;na=LOWER TRIANGULAR ONE QUARTER BLOCK
+# Block elements
+cp;1FB70;na=VERTICAL ONE EIGHTH BLOCK-2
+cp;1FB71;na=VERTICAL ONE EIGHTH BLOCK-3
+cp;1FB72;na=VERTICAL ONE EIGHTH BLOCK-4
+cp;1FB73;na=VERTICAL ONE EIGHTH BLOCK-5
+cp;1FB74;na=VERTICAL ONE EIGHTH BLOCK-6
+cp;1FB75;na=VERTICAL ONE EIGHTH BLOCK-7
+cp;1FB76;na=HORIZONTAL ONE EIGHTH BLOCK-2
+cp;1FB77;na=HORIZONTAL ONE EIGHTH BLOCK-3
+cp;1FB78;na=HORIZONTAL ONE EIGHTH BLOCK-4
+cp;1FB79;na=HORIZONTAL ONE EIGHTH BLOCK-5
+cp;1FB7A;na=HORIZONTAL ONE EIGHTH BLOCK-6
+cp;1FB7B;na=HORIZONTAL ONE EIGHTH BLOCK-7
+cp;1FB7C;na=LEFT AND LOWER ONE EIGHTH BLOCK
+cp;1FB7D;na=LEFT AND UPPER ONE EIGHTH BLOCK
+cp;1FB7E;na=RIGHT AND UPPER ONE EIGHTH BLOCK
+cp;1FB7F;na=RIGHT AND LOWER ONE EIGHTH BLOCK
+cp;1FB80;na=UPPER AND LOWER ONE EIGHTH BLOCK
+cp;1FB81;na=HORIZONTAL ONE EIGHTH BLOCK-1358
+cp;1FB82;na=UPPER ONE QUARTER BLOCK
+cp;1FB83;na=UPPER THREE EIGHTHS BLOCK
+cp;1FB84;na=UPPER FIVE EIGHTHS BLOCK
+cp;1FB85;na=UPPER THREE QUARTERS BLOCK
+cp;1FB86;na=UPPER SEVEN EIGHTHS BLOCK
+cp;1FB87;na=RIGHT ONE QUARTER BLOCK
+cp;1FB88;na=RIGHT THREE EIGHTHS BLOCK
+cp;1FB89;na=RIGHT FIVE EIGHTHS BLOCK
+cp;1FB8A;na=RIGHT THREE QUARTERS BLOCK
+cp;1FB8B;na=RIGHT SEVEN EIGHTHS BLOCK
+# Rectangular shade characters
+cp;1FB8C;na=LEFT HALF MEDIUM SHADE
+cp;1FB8D;na=RIGHT HALF MEDIUM SHADE
+cp;1FB8E;na=UPPER HALF MEDIUM SHADE
+cp;1FB8F;na=LOWER HALF MEDIUM SHADE
+cp;1FB90;na=INVERSE MEDIUM SHADE
+cp;1FB91;na=UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE
+cp;1FB92;na=UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+unassigned;1FB93
+cp;1FB94;na=LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK
+# Fill characters
+cp;1FB95;na=CHECKER BOARD FILL
+cp;1FB96;na=INVERSE CHECKER BOARD FILL
+cp;1FB97;na=HEAVY HORIZONTAL FILL
+cp;1FB98;na=UPPER LEFT TO LOWER RIGHT FILL
+cp;1FB99;na=UPPER RIGHT TO LOWER LEFT FILL
+# Smooth mosaic terminal graphic characters
+cp;1FB9A;na=UPPER AND LOWER TRIANGULAR HALF BLOCK
+cp;1FB9B;na=LEFT AND RIGHT TRIANGULAR HALF BLOCK
+# Triangular shade characters
+cp;1FB9C;na=UPPER LEFT TRIANGULAR MEDIUM SHADE
+cp;1FB9D;na=UPPER RIGHT TRIANGULAR MEDIUM SHADE
+cp;1FB9E;na=LOWER RIGHT TRIANGULAR MEDIUM SHADE
+cp;1FB9F;na=LOWER LEFT TRIANGULAR MEDIUM SHADE
+# Character cell diagonals
+cp;1FBA0;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT
+cp;1FBA1;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT
+cp;1FBA2;na=BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE
+cp;1FBA3;na=BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE
+cp;1FBA4;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE
+cp;1FBA5;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE
+cp;1FBA6;na=BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT
+cp;1FBA7;na=BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT
+cp;1FBA8;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE
+cp;1FBA9;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE
+cp;1FBAA;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT
+cp;1FBAB;na=BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT
+cp;1FBAC;na=BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE
+cp;1FBAD;na=BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE
+cp;1FBAE;na=BOX DRAWINGS LIGHT DIAGONAL DIAMOND
+# Light solid line with stroke
+cp;1FBAF;na=BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE
+# Terminal graphic characters
+cp;1FBB0;na=ARROWHEAD-SHAPED POINTER
+cp;1FBB1;na=INVERSE CHECK MARK
+cp;1FBB2;na=LEFT HALF RUNNING MAN
+cp;1FBB3;na=RIGHT HALF RUNNING MAN
+# Arrows
+cp;1FBB4;na=INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS
+cp;1FBB5;na=LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK
+cp;1FBB6;na=RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK
+cp;1FBB7;na=DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK
+cp;1FBB8;na=UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK
+# Terminal graphic characters
+cp;1FBB9;na=LEFT HALF FOLDER
+cp;1FBBA;na=RIGHT HALF FOLDER
+cp;1FBBB;na=VOIDED GREEK CROSS
+cp;1FBBC;na=RIGHT OPEN SQUARED DOT
+# Negative terminal graphic characters
+cp;1FBBD;na=NEGATIVE DIAGONAL CROSS
+cp;1FBBE;na=NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE
+cp;1FBBF;na=NEGATIVE DIAGONAL DIAMOND
+# Terminal graphic characters
+cp;1FBC0;na=WHITE HEAVY SALTIRE WITH ROUNDED CORNERS
+cp;1FBC1;na=LEFT THIRD WHITE RIGHT POINTING INDEX
+cp;1FBC2;na=MIDDLE THIRD WHITE RIGHT POINTING INDEX
+cp;1FBC3;na=RIGHT THIRD WHITE RIGHT POINTING INDEX
+cp;1FBC4;na=NEGATIVE SQUARED QUESTION MARK
+cp;1FBC5;na=STICK FIGURE
+cp;1FBC6;na=STICK FIGURE WITH ARMS RAISED
+cp;1FBC7;na=STICK FIGURE LEANING LEFT
+cp;1FBC8;na=STICK FIGURE LEANING RIGHT
+cp;1FBC9;na=STICK FIGURE WITH DRESS
+cp;1FBCA;na=WHITE UP-POINTING CHEVRON
+unassigned;1FBCB..1FBEF
+# Segmented digits
+cp;1FBF0;bc=EN;CWKCF;dm=0030;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT ZERO;NFKC_CF=0030;NFKC_QC=N;NFKD_QC=N;nt=De;nv=0;SB=NU;WB=NU;XIDC
+cp;1FBF1;bc=EN;CWKCF;dm=0031;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT ONE;NFKC_CF=0031;NFKC_QC=N;NFKD_QC=N;nt=De;nv=1;SB=NU;WB=NU;XIDC
+cp;1FBF2;bc=EN;CWKCF;dm=0032;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT TWO;NFKC_CF=0032;NFKC_QC=N;NFKD_QC=N;nt=De;nv=2;SB=NU;WB=NU;XIDC
+cp;1FBF3;bc=EN;CWKCF;dm=0033;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT THREE;NFKC_CF=0033;NFKC_QC=N;NFKD_QC=N;nt=De;nv=3;SB=NU;WB=NU;XIDC
+cp;1FBF4;bc=EN;CWKCF;dm=0034;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT FOUR;NFKC_CF=0034;NFKC_QC=N;NFKD_QC=N;nt=De;nv=4;SB=NU;WB=NU;XIDC
+cp;1FBF5;bc=EN;CWKCF;dm=0035;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT FIVE;NFKC_CF=0035;NFKC_QC=N;NFKD_QC=N;nt=De;nv=5;SB=NU;WB=NU;XIDC
+cp;1FBF6;bc=EN;CWKCF;dm=0036;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT SIX;NFKC_CF=0036;NFKC_QC=N;NFKD_QC=N;nt=De;nv=6;SB=NU;WB=NU;XIDC
+cp;1FBF7;bc=EN;CWKCF;dm=0037;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT SEVEN;NFKC_CF=0037;NFKC_QC=N;NFKD_QC=N;nt=De;nv=7;SB=NU;WB=NU;XIDC
+cp;1FBF8;bc=EN;CWKCF;dm=0038;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT EIGHT;NFKC_CF=0038;NFKC_QC=N;NFKD_QC=N;nt=De;nv=8;SB=NU;WB=NU;XIDC
+cp;1FBF9;bc=EN;CWKCF;dm=0039;dt=Font;gc=Nd;IDC;lb=NU;na=SEGMENTED DIGIT NINE;NFKC_CF=0039;NFKC_QC=N;NFKD_QC=N;nt=De;nv=9;SB=NU;WB=NU;XIDC
+unassigned;1FBFA..1FBFF
# No block
-unassigned;1FB00..1FF7F;ExtPict;lb=ID
+unassigned;1FC00..1FF7F;ExtPict;lb=ID
# 1FF80..1FFFF Unassigned
unassigned;1FF80..1FFFD;ExtPict;lb=ID
# Noncharacters
unassigned;1FFFE..1FFFF;age=2.0;bc=BN;NChar
block;20000..2A6DF;age=3.1;Alpha;blk=CJK_Ext_B;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
-# 20000..2A6D6 CJK Unified Ideographs Extension B
-algnamesrange;20000..2A6D6;han;CJK UNIFIED IDEOGRAPH-
+# 20000..2A6DD CJK Unified Ideographs Extension B
+algnamesrange;20000..2A6DD;han;CJK UNIFIED IDEOGRAPH-
cp;20001;nt=Nu;nv=7
cp;20064;nt=Nu;nv=4
cp;200E2;nt=Nu;nv=4
@@ -37909,7 +38992,8 @@ cp;22390;nt=Nu;nv=2
cp;22998;nt=Nu;nv=3
cp;23B1B;nt=Nu;nv=3
cp;2626D;nt=Nu;nv=4
-unassigned;2A6D7..2A6DF;ea=W;lb=ID;vo=U
+cp;2A6D7..2A6DD;age=13.0
+unassigned;2A6DE..2A6DF;ea=W;lb=ID;vo=U
# No block
unassigned;2A6E0..2A6FF;ea=W;lb=ID;vo=U
@@ -38490,7 +39574,14 @@ unassigned;2FA20..2FF7F;ea=W;lb=ID;vo=U
unassigned;2FF80..2FFFD;ea=W;lb=ID;vo=U
# Noncharacters
unassigned;2FFFE..2FFFF;age=2.0;bc=BN;NChar
-unassigned;30000..3FF7F;ea=W;lb=ID;vo=U
+
+block;30000..3134F;age=13.0;Alpha;blk=CJK_Ext_G;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
+# 30000..3134A CJK Unified Ideographs Extension G
+algnamesrange;30000..3134A;han;CJK UNIFIED IDEOGRAPH-
+unassigned;3134B..3134F;ea=W;lb=ID;vo=U
+
+# No block
+unassigned;31350..3FF7F;ea=W;lb=ID;vo=U
# 3FF80..3FFFF Unassigned
unassigned;3FF80..3FFFD;ea=W;lb=ID;vo=U
# Noncharacters
diff --git a/Build/source/libs/icu/icu-src/source/extra/scrptrun/Makefile.in b/Build/source/libs/icu/icu-src/source/extra/scrptrun/Makefile.in
index 6712c43564b..f3f89431dfd 100644
--- a/Build/source/libs/icu/icu-src/source/extra/scrptrun/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/extra/scrptrun/Makefile.in
@@ -12,9 +12,6 @@ top_builddir = ../..
include $(top_builddir)/icudefs.mk
-## Platform-specific setup
-include @platform_make_fragment@
-
## Build directory information
subdir = extra/scrptrun
@@ -22,7 +19,7 @@ subdir = extra/scrptrun
CLEANFILES = *~ $(DEPS)
## Target information
-TARGET = srtest
+TARGET = srtest$(EXEEXT)
DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/common -I$(top_srcdir)
@@ -33,9 +30,10 @@ ifeq ($(ENABLE_RPATH),YES)
RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir)
endif
LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS)
-LIBS = $(LIBICUUC) @LIBS@ @LIB_M@
+LIBS = $(LIBICUUC) $(LIB_M)
-OBJECTS = scrptrun.o srtest.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
@@ -74,7 +72,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(TARGET) : $(OBJECTS)
- $(LINK.cc) -o $@ $^ $(LIBS)
+ $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS)
$(POST_BUILD_STEP)
invoke:
diff --git a/Build/source/libs/icu/icu-src/source/extra/scrptrun/sources.txt b/Build/source/libs/icu/icu-src/source/extra/scrptrun/sources.txt
new file mode 100644
index 00000000000..a4b20b71302
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/extra/scrptrun/sources.txt
@@ -0,0 +1,2 @@
+scrptrun.cpp
+srtest.cpp
diff --git a/Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in b/Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in
index b6144619d00..30e27fdd564 100644
--- a/Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in
@@ -74,7 +74,8 @@ PKGMODE=dll
INSTALLTO=$(libdir)
endif
-OBJECTS = uconv.o uwmsg.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o, $(SOURCES)))
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/extra/uconv/sources.txt b/Build/source/libs/icu/icu-src/source/extra/uconv/sources.txt
new file mode 100644
index 00000000000..ed227fe3b10
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/extra/uconv/sources.txt
@@ -0,0 +1,2 @@
+uconv.cpp
+uwmsg.c
diff --git a/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp b/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp
index c3dca05ad8b..3be4e8ec575 100644
--- a/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp
+++ b/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp
@@ -323,7 +323,7 @@ static int printConverters(const char *pname, const char *lookfor,
if (U_SUCCESS(err)) {
/* List the standard tags */
const char *standardName;
- UBool isFirst = TRUE;
+ UBool isFirst = true;
UErrorCode enumError = U_ZERO_ERROR;
while ((standardName = uenum_next(nameEnum, NULL, &enumError))) {
/* See if this alias is supported by this standard. */
@@ -335,7 +335,7 @@ static int printConverters(const char *pname, const char *lookfor,
/* Print a * after the default standard name */
printf(" %s%s", stds[s], (isFirst ? "*" : ""));
}
- isFirst = FALSE;
+ isFirst = false;
}
}
}
@@ -518,7 +518,7 @@ cnvSigType(UConverter *cnv) {
ucnv_fromUnicode(cnv,
&out, buffer + sizeof(buffer),
&in, a + 1,
- NULL, TRUE, &err);
+ NULL, true, &err);
ucnv_resetFromUnicode(cnv);
if (NULL != ucnv_detectUnicodeSignature(buffer, (int32_t)(out - buffer), NULL, &err) &&
@@ -589,12 +589,12 @@ ConvertFile::convertFile(const char *pname,
FILE * outfile, int verbose)
{
FILE *infile;
- UBool ret = TRUE;
+ UBool ret = true;
UConverter *convfrom = 0;
UConverter *convto = 0;
UErrorCode err = U_ZERO_ERROR;
UBool flush;
- UBool closeFile = FALSE;
+ UBool closeFile = false;
const char *cbufp, *prevbufp;
char *bufp;
@@ -615,7 +615,7 @@ ConvertFile::convertFile(const char *pname,
// use conversion offsets for error messages
// unless a transliterator is used -
// a text transformation will reorder characters in unpredictable ways
- UBool useOffsets = TRUE;
+ UBool useOffsets = true;
// Open the correct input file or connect to stdin for reading input
@@ -628,9 +628,9 @@ ConvertFile::convertFile(const char *pname,
str2.append((UChar32) 0);
initMsg(pname);
u_wmsg(stderr, "cantOpenInputF", str1.getBuffer(), str2.getBuffer());
- return FALSE;
+ return false;
}
- closeFile = TRUE;
+ closeFile = true;
} else {
infilestr = "-";
infile = stdin;
@@ -638,7 +638,7 @@ ConvertFile::convertFile(const char *pname,
if (setmode(fileno(stdin), O_BINARY) == -1) {
initMsg(pname);
u_wmsg(stderr, "cantSetInBinMode");
- return FALSE;
+ return false;
}
#endif
}
@@ -686,7 +686,7 @@ ConvertFile::convertFile(const char *pname,
goto error_exit;
}
- useOffsets = FALSE;
+ useOffsets = false;
}
#endif
@@ -733,7 +733,7 @@ ConvertFile::convertFile(const char *pname,
rd = 0;
do {
- willexit = FALSE;
+ willexit = false;
// input file offset at the beginning of the next buffer
infoffset += static_cast<uint32_t>(rd);
@@ -823,7 +823,7 @@ ConvertFile::convertFile(const char *pname,
str.getTerminatedBuffer(),
u_wmsg_errorName(err));
- willexit = TRUE;
+ willexit = true;
err = U_ZERO_ERROR; /* reset the error for the rest of the conversion. */
}
@@ -1013,7 +1013,7 @@ ConvertFile::convertFile(const char *pname,
u_wmsg_errorName(err));
u_wmsg(stderr, "errorUnicode", str.getTerminatedBuffer());
- willexit = TRUE;
+ willexit = true;
err = U_ZERO_ERROR; /* reset the error for the rest of the conversion. */
}
@@ -1027,7 +1027,7 @@ ConvertFile::convertFile(const char *pname,
UnicodeString str(strerror(errno));
initMsg(pname);
u_wmsg(stderr, "cantWrite", str.getTerminatedBuffer());
- willexit = TRUE;
+ willexit = true;
}
if (willexit) {
@@ -1042,7 +1042,7 @@ ConvertFile::convertFile(const char *pname,
goto normal_exit;
error_exit:
- ret = FALSE;
+ ret = false;
normal_exit:
// Cleanup.
@@ -1107,7 +1107,7 @@ main(int argc, char **argv)
const char *tocpage = 0;
const char *translit = 0;
const char *outfilestr = 0;
- UBool fallback = FALSE;
+ UBool fallback = false;
UConverterFromUCallback fromucallback = UCNV_FROM_U_CALLBACK_STOP;
const void *fromuctxt = 0;
@@ -1119,10 +1119,10 @@ main(int argc, char **argv)
const char *pname;
- UBool printConvs = FALSE, printCanon = FALSE, printTranslits = FALSE;
+ UBool printConvs = false, printCanon = false, printTranslits = false;
const char *printName = 0;
- UBool verbose = FALSE;
+ UBool verbose = false;
UErrorCode status = U_ZERO_ERROR;
ConvertFile cf;
@@ -1173,9 +1173,9 @@ main(int argc, char **argv)
else
usage(pname, 1);
} else if (!strcmp("--fallback", *iter)) {
- fallback = TRUE;
+ fallback = true;
} else if (!strcmp("--no-fallback", *iter)) {
- fallback = FALSE;
+ fallback = false;
} else if (strcmp("-b", *iter) == 0 || !strcmp("--block-size", *iter)) {
iter++;
if (iter != end) {
@@ -1194,7 +1194,7 @@ main(int argc, char **argv)
if (printTranslits) {
usage(pname, 1);
}
- printConvs = TRUE;
+ printConvs = true;
} else if (strcmp("--default-code", *iter) == 0) {
if (printTranslits) {
usage(pname, 1);
@@ -1218,13 +1218,13 @@ main(int argc, char **argv)
} else
usage(pname, 1);
} else if (strcmp("--canon", *iter) == 0) {
- printCanon = TRUE;
+ printCanon = true;
} else if (strcmp("-L", *iter) == 0
|| !strcmp("--list-transliterators", *iter)) {
if (printConvs) {
usage(pname, 1);
}
- printTranslits = TRUE;
+ printTranslits = true;
} else if (strcmp("-h", *iter) == 0 || !strcmp("-?", *iter)
|| !strcmp("--help", *iter)) {
usage(pname, 0);
@@ -1283,9 +1283,9 @@ main(int argc, char **argv)
usage(pname, 1);
}
} else if (!strcmp("-s", *iter) || !strcmp("--silent", *iter)) {
- verbose = FALSE;
+ verbose = false;
} else if (!strcmp("-v", *iter) || !strcmp("--verbose", *iter)) {
- verbose = TRUE;
+ verbose = true;
} else if (!strcmp("-V", *iter) || !strcmp("--version", *iter)) {
printf("%s v2.1 ICU " U_ICU_VERSION "\n", pname);
return 0;
diff --git a/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj b/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj
index 1929ac470f9..e00a288f4d3 100644
--- a/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c b/Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c
index fdfb1c863f9..2f611e94eb7 100644
--- a/Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c
+++ b/Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c
@@ -24,6 +24,7 @@
#include "cmemory.h"
#include "cstring.h"
+#include <stdbool.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
@@ -68,7 +69,7 @@ uprint(const UChar *s,
/* perform the conversion */
ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize,
&mySource, mySourceEnd, NULL,
- TRUE, status);
+ true, status);
/* Write the converted data to the FILE* */
fwrite(buf, sizeof(char), myTarget - buf, f);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/Makefile.in b/Build/source/libs/icu/icu-src/source/i18n/Makefile.in
index f22c20eabca..ce7fe006e6c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/i18n/Makefile.in
@@ -64,57 +64,8 @@ DEFS += -DU_I18N_IMPLEMENTATION
LDFLAGS += $(LDFLAGSICUI18N)
LIBS = $(LIBICUUC) $(DEFAULT_LIBS)
-OBJECTS = ucln_in.o \
-fmtable.o format.o msgfmt.o umsg.o numfmt.o unum.o decimfmt.o dcfmtsym.o \
-fmtable_cnv.o \
-choicfmt.o datefmt.o smpdtfmt.o reldtfmt.o dtfmtsym.o udat.o dtptngen.o udatpg.o \
-nfrs.o nfrule.o nfsubs.o rbnf.o numsys.o unumsys.o ucsdet.o \
-ucal.o calendar.o gregocal.o timezone.o simpletz.o olsontz.o \
-astro.o taiwncal.o buddhcal.o persncal.o islamcal.o japancal.o gregoimp.o hebrwcal.o \
-indiancal.o chnsecal.o cecal.o coptccal.o dangical.o ethpccal.o \
-coleitr.o coll.o sortkey.o bocsu.o ucoleitr.o \
-ucol.o ucol_res.o ucol_sit.o \
-collation.o collationsettings.o collationdata.o collationtailoring.o \
-collationdatareader.o collationdatawriter.o collationfcd.o \
-collationiterator.o utf16collationiterator.o utf8collationiterator.o uitercollationiterator.o \
-collationsets.o \
-collationcompare.o collationfastlatin.o collationkeys.o rulebasedcollator.o collationroot.o \
-collationrootelements.o collationdatabuilder.o \
-collationweights.o collationruleparser.o collationbuilder.o collationfastlatinbuilder.o \
-listformatter.o ulistformatter.o \
-strmatch.o usearch.o search.o stsearch.o \
-translit.o utrans.o esctrn.o unesctrn.o funcrepl.o strrepl.o tridpars.o \
-cpdtrans.o rbt.o rbt_data.o rbt_pars.o rbt_rule.o rbt_set.o \
-nultrans.o remtrans.o casetrn.o titletrn.o tolowtrn.o toupptrn.o anytrans.o \
-name2uni.o uni2name.o nortrans.o quant.o transreg.o brktrans.o \
-regexcmp.o rematch.o repattrn.o regexst.o regextxt.o regeximp.o uregex.o uregexc.o \
-ulocdata.o measfmt.o currfmt.o curramt.o currunit.o measure.o utmscale.o \
-csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o \
-wintzimpl.o windtfmt.o winnmfmt.o basictz.o dtrule.o rbtz.o tzrule.o tztrans.o vtzone.o zonemeta.o \
-standardplural.o upluralrules.o plurrule.o plurfmt.o selfmt.o dtitvfmt.o dtitvinf.o udateintervalformat.o \
-tmunit.o tmutamt.o tmutfmt.o currpinf.o \
-uspoof.o uspoof_impl.o uspoof_build.o uspoof_conf.o smpdtfst.o \
-ztrans.o zrule.o vzone.o fphdlimp.o fpositer.o ufieldpositer.o \
-decNumber.o decContext.o alphaindex.o tznames.o tznames_impl.o tzgnames.o \
-tzfmt.o compactdecimalformat.o gender.o region.o scriptset.o \
-uregion.o reldatefmt.o quantityformatter.o measunit.o \
-sharedbreakiterator.o scientificnumberformatter.o dayperiodrules.o nounit.o \
-number_affixutils.o number_compact.o number_decimalquantity.o \
-number_decimfmtprops.o number_fluent.o number_formatimpl.o number_grouping.o \
-number_integerwidth.o number_longnames.o number_modifiers.o number_notation.o number_output.o \
-number_padding.o number_patternmodifier.o number_patternstring.o \
-number_rounding.o number_scientific.o number_utils.o number_asformat.o \
-number_mapper.o number_multiplier.o number_currencysymbols.o number_skeletons.o number_capi.o \
-double-conversion-string-to-double.o double-conversion-double-to-string.o \
-double-conversion-bignum-dtoa.o double-conversion-bignum.o \
-double-conversion-cached-powers.o \
-double-conversion-fast-dtoa.o double-conversion-strtod.o \
-string_segment.o numparse_parsednumber.o numparse_impl.o \
-numparse_symbols.o numparse_decimal.o numparse_scientific.o numparse_currency.o \
-numparse_affixes.o numparse_compositions.o numparse_validators.o \
-numrange_fluent.o numrange_impl.o \
-erarules.o \
-formattedvalue.o formattedval_iterimpl.o formattedval_sbimpl.o formatted_string_builder.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
## Header files to install
HEADERS = $(srcdir)/unicode/*.h
@@ -153,6 +104,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -160,6 +116,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h b/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
index 0ad0886df12..7fc686dcde2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
@@ -174,7 +174,7 @@ private:
UBool useMonth) const;
/**
- * Returns TRUE because the Buddhist Calendar does have a default century
+ * Returns true because the Buddhist Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp b/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
index c043bb31861..c3e5e8c4f66 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
@@ -266,7 +266,7 @@ static ECalType getCalendarTypeForLocale(const char *locid) {
//TODO: ULOC_FULL_NAME is out of date and too small..
char canonicalName[256];
- // canonicalize, so grandfathered variant will be transformed to keywords
+ // Canonicalize, so that an old-style variant will be transformed to keywords.
// e.g ja_JP_TRADITIONAL -> ja_JP@calendar=japanese
// NOTE: Since ICU-20187, ja_JP_TRADITIONAL no longer canonicalizes, and
// the Gregorian calendar is returned instead.
@@ -870,7 +870,7 @@ Calendar::createInstance(const TimeZone& zone, UErrorCode& success)
Calendar* U_EXPORT2
Calendar::createInstance(const Locale& aLocale, UErrorCode& success)
{
- return createInstance(TimeZone::createDefault(), aLocale, success);
+ return createInstance(TimeZone::forLocaleOrDefault(aLocale), aLocale, success);
}
// ------------------------------------- Adopting
@@ -958,7 +958,7 @@ Calendar::makeInstance(const Locale& aLocale, UErrorCode& success) {
#endif
c->setWeekData(aLocale, c->getType(), success); // set the correct locale (this was an indirected calendar)
- char keyword[ULOC_FULLNAME_CAPACITY];
+ char keyword[ULOC_FULLNAME_CAPACITY] = "";
UErrorCode tmpStatus = U_ZERO_ERROR;
l.getKeywordValue("calendar", keyword, ULOC_FULLNAME_CAPACITY, tmpStatus);
if (U_SUCCESS(tmpStatus) && uprv_strcmp(keyword, "iso8601") == 0) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp b/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp
index 00faa8ac07a..cb97c40a3c7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp
@@ -49,7 +49,7 @@ static const int32_t LIMITS[UCAL_FIELD_COUNT][4] = {
//-------------------------------------------------------------------------
CECalendar::CECalendar(const Locale& aLocale, UErrorCode& success)
-: Calendar(TimeZone::createDefault(), aLocale, success)
+: Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
{
setTimeInMillis(getNow(), success);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/cecal.h b/Build/source/libs/icu/icu-src/source/i18n/cecal.h
index c380f0bea30..80dab70f6ff 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/cecal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/cecal.h
@@ -88,7 +88,7 @@ protected:
virtual UBool inDaylightTime(UErrorCode&) const;
/**
- * Returns TRUE because Coptic/Ethiopic Calendar does have a default century
+ * Returns true because Coptic/Ethiopic Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp b/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp
index 4c038127159..f8fb4a40f14 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp
@@ -123,7 +123,7 @@ ChineseCalendar* ChineseCalendar::clone() const {
}
ChineseCalendar::ChineseCalendar(const Locale& aLocale, UErrorCode& success)
-: Calendar(TimeZone::createDefault(), aLocale, success),
+: Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success),
isLeapYear(FALSE),
fEpochYear(CHINESE_EPOCH_YEAR),
fZoneAstroCalc(getChineseCalZoneAstroCalc())
@@ -133,7 +133,7 @@ ChineseCalendar::ChineseCalendar(const Locale& aLocale, UErrorCode& success)
ChineseCalendar::ChineseCalendar(const Locale& aLocale, int32_t epochYear,
const TimeZone* zoneAstroCalc, UErrorCode &success)
-: Calendar(TimeZone::createDefault(), aLocale, success),
+: Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success),
isLeapYear(FALSE),
fEpochYear(epochYear),
fZoneAstroCalc(zoneAstroCalc)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h b/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
index a0c21b6b5c2..910afd2f599 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
@@ -242,7 +242,7 @@ class U_I18N_API ChineseCalendar : public Calendar {
/**
- * Returns TRUE because the Islamic Calendar does have a default century
+ * Returns true because the Islamic Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collation.h b/Build/source/libs/icu/icu-src/source/i18n/collation.h
index e9256c9c12c..ecbba29057f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collation.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collation.h
@@ -356,7 +356,7 @@ public:
}
/**
- * @return TRUE if the ce32 yields one or more CEs without further data lookups
+ * @return true if the ce32 yields one or more CEs without further data lookups
*/
static UBool isSelfContainedCE32(uint32_t ce32) {
return !isSpecialCE32(ce32) ||
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h b/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
index 2f20050f93b..82f0459748f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
@@ -42,7 +42,7 @@ public:
CollationBuilder(const CollationTailoring *base, UErrorCode &errorCode);
virtual ~CollationBuilder();
- void disableFastLatin() { fastLatinEnabled = FALSE; }
+ void disableFastLatin() { fastLatinEnabled = false; }
CollationTailoring *parseAndBuild(const UnicodeString &ruleString,
const UVersionInfo rulesVersion,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h b/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h
index fee444deee7..6ae77772fd5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h
@@ -73,12 +73,12 @@ public:
}
/**
- * @return TRUE if this builder has mappings (e.g., add() has been called)
+ * @return true if this builder has mappings (e.g., add() has been called)
*/
UBool hasMappings() const { return modified; }
/**
- * @return TRUE if c has CEs in this builder
+ * @return true if c has CEs in this builder
*/
UBool isAssigned(UChar32 c) const;
@@ -118,7 +118,7 @@ public:
* @param primary primary weight for 'start'
* @param step per-code point primary-weight increment
* @param errorCode ICU in/out error code
- * @return TRUE if an OFFSET_TAG range was used for start..end
+ * @return true if an OFFSET_TAG range was used for start..end
*/
UBool maybeSetPrimaryRange(UChar32 start, UChar32 end,
uint32_t primary, int32_t step,
@@ -150,7 +150,7 @@ public:
void optimize(const UnicodeSet &set, UErrorCode &errorCode);
void suppressContractions(const UnicodeSet &set, UErrorCode &errorCode);
- void enableFastLatin() { fastLatinEnabled = TRUE; }
+ void enableFastLatin() { fastLatinEnabled = true; }
virtual void build(CollationData &data, UErrorCode &errorCode);
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp b/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
index 2527f2f055a..9f73ff38981 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
@@ -31,18 +31,18 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x26,0x26,0,0,0,0,0x27,0,
0,0,0,0,0,0x28,0,0,0,0x13,0,0,0,0,0,0,
-0x29,0,0,0x2a,0,0x2b,0,0,0,0x26,0x2c,0x2d,0,0x2e,0,0x2f,
-0,0x30,0,0,0,0,0x31,0x32,0,0,0,0,0,0,1,0x33,
+0x29,0,0,0x2a,0,0x2b,0x2c,0,0,0x26,0x2d,0x2e,0,0x2f,0,0x30,
+0,0x31,0,0,0,0,0x32,0x33,0,0,0,0,0,0,1,0x34,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x34,0x35,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x35,0x36,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x36,0,0,0,0x37,0,0,0,1,
+0,0,0,0,0,0,0,0x37,0,0,0,0x38,0,0,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x38,0,0,0x39,0,0,0,0,0,0,0,0,0,0,0,
+0,0x39,0,0,0x3a,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -101,9 +101,9 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x3a,0x3b,0,0,0x3c,0,0,0,0,0,0,0,0,
-0x23,0,0,0,0,0,0x2c,0x3d,0,0x3e,0x3f,0,0,0x3f,0x40,0,
-0,0,0,0,0,0x41,0x42,0x43,0,0,0,0,0,0,0,0x18,
+0,0,0,0x3b,0x3c,0,0,0x3d,0,0,0,0,0,0,0,0,
+0x23,0x3e,0,0,0,0,0x2d,0x3f,0,0x40,0x41,0,0,0x41,0x2c,0,
+0,0,0,0,0,0x42,0x43,0x44,0,0,0,0,0,0,0,0x18,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -126,7 +126,7 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x45,0x46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -148,12 +148,12 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-const uint32_t CollationFCD::lcccBits[70]={
+const uint32_t CollationFCD::lcccBits[71]={
0,0xffffffff,0xffff7fff,0xffff,0xf8,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0xfffff800,0x10000,0x9fc00000,0x3d9f,0x20000,0xffff0000,0x7ff,
0x200ff800,0xfbc00000,0x3eef,0xe000000,0xfff80000,0xfffffffb,0x10000000,0x1e2000,0x2000,0x40000000,0x602000,0x18000000,0x400,0x7000000,0xf00,0x3000000,
-0x2a00000,0x3c3e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xff800,0xc00,0xc0040,
-0x800000,0xfff70000,0x31021fd,0xfbffffff,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,
-1,0xc19d0000,2,0x400000,0x40000fd,0x5108000
+0x2a00000,0x3c3e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0xbfff0000,1,0x10,0xff800,0xc00,
+0xc0040,0x800000,0xfff70000,0x31021fd,0xfbffffff,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x1000,0x3ffff,
+0x3800,0x80000,0xc19d0000,2,0x400000,0xc0000fd,0x5108000
};
const uint8_t CollationFCD::tcccIndex[2048]={
@@ -170,18 +170,18 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0x40,0x40,0,0,0,0,0x41,0,
0,0,0,0,0,0x42,0,0,0,0x28,0,0,0,0,0,0,
-0x43,0,0,0x44,0,0x45,0,0,0,0x40,0x46,0x47,0,0x48,0,0x49,
-0,0x4a,0,0,0,0,0x4b,0x4c,0,0,0,0,0,0,1,0x4d,
-1,1,1,1,0x4e,1,1,0x4f,0x50,1,0x51,0x52,1,0x53,0x54,0x55,
-0,0,0,0,0,0,0x56,0x57,0,0x58,0,0,0x59,0x5a,0x5b,0,
-0x5c,0x5d,0x5e,0x5f,0x60,0x61,0,0x62,0,0,0,0,0,0,0,0,
+0x43,0,0,0x44,0,0x45,0x46,0,0,0x40,0x47,0x48,0,0x49,0,0x4a,
+0,0x4b,0,0,0,0,0x4c,0x4d,0,0,0,0,0,0,1,0x4e,
+1,1,1,1,0x4f,1,1,0x50,0x51,1,0x52,0x53,1,0x54,0x55,0x56,
+0,0,0,0,0,0,0x57,0x58,0,0x59,0,0,0x5a,0x5b,0x5c,0,
+0x5d,0x5e,0x5f,0x60,0x61,0x62,0,0x63,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0x2d,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x63,0,0,0,0x64,0,0,0,1,
+0,0,0,0,0,0,0,0x64,0,0,0,0x65,0,0,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x65,0x66,0x67,0x68,0x66,0x67,0x69,0,0,0,0,0,0,0,0,
+0,0x66,0x67,0x68,0x69,0x67,0x68,0x6a,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -240,9 +240,9 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x6a,0x6b,0,0,0x6c,0,0,0,0,0,0,0,0,
-0x3d,0,0,0,0,0,0x46,0x6d,0,0x6e,0x6f,0,0,0x6f,0x70,0,
-0,0,0,0,0,0x71,0x72,0x73,0,0,0,0,0,0,0,0x32,
+0,0,0,0x6b,0x6c,0,0,0x6d,0,0,0,0,0,0,0,0,
+0x3d,0x6e,0,0,0,0,0x47,0x6f,0,0x70,0x71,0,0,0x71,0x46,0,
+0,0,0,0,0,0x72,0x73,0x74,0,0,0,0,0,0,0,0x32,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -265,7 +265,7 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x74,0x75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x75,0x76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -282,20 +282,20 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x3f,0x76,0x77,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x3f,0x77,0x78,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0xe,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-const uint32_t CollationFCD::tcccBits[120]={
+const uint32_t CollationFCD::tcccBits[121]={
0,0xffffffff,0x3e7effbf,0xbe7effbf,0xfffcffff,0x7ef1ff3f,0xfff3f1f8,0x7fffff3f,0x18003,0xdfffe000,0xff31ffcf,0xcfffffff,0xfffc0,0xffff7fff,0xffff,0x1d760,
0x1fc00,0x187c00,0x200708b,0x2000000,0x708b0000,0xc00000,0xf8,0xfccf0006,0x33ffcfc,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0x7c,0xfffff800,0x10000,
0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0x200ff800,0xfbc00000,0x3eef,0xe000000,0xfff80000,0xfffffffb,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x40000000,
0x10480000,0x4e002000,0x2000,0x30002000,0x602100,0x18000000,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,
-0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xff800,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xfbffffff,0xbffffff,0x3ffffff,
-0x3f3fffff,0xaaff3f3f,0x3fffffff,0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,0x333e005,
-0x333,0xf000,0x3c0f,0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,
-1,0xc19d0000,2,0x400000,0x40000fd,0x5108000,0x5f7ffc00,0x7fdb
+0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0xbfff0000,1,0x10,0xff800,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xfbffffff,0xbffffff,
+0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff,0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,
+0x333e005,0x333,0xf000,0x3c0f,0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x1000,0x3ffff,
+0x3800,0x80000,0xc19d0000,2,0x400000,0xc0000fd,0x5108000,0x5f7ffc00,0x7fdb
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationfcd.h b/Build/source/libs/icu/icu-src/source/i18n/collationfcd.h
index ec7167d76ba..3a5738efb24 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationfcd.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationfcd.h
@@ -84,7 +84,7 @@ public:
// Handles all of Unicode 0..10FFFF.
// c can be negative, e.g., U_SENTINEL.
// U+0300 is the first character with lccc!=0.
- if(c < 0x300) { return FALSE; }
+ if(c < 0x300) { return false; }
if(c > 0xffff) { c = U16_LEAD(c); }
int32_t i;
return
@@ -101,7 +101,7 @@ public:
* This is a fast and imprecise test.
*
* @param c a code point
- * @return TRUE if c is U+0F73, U+0F75 or U+0F81 or one of several other Tibetan characters
+ * @return true if c is U+0F73, U+0F75 or U+0F81 or one of several other Tibetan characters
*/
static inline UBool maybeTibetanCompositeVowel(UChar32 c) {
return (c & 0x1fff01) == 0xf01;
@@ -116,7 +116,7 @@ public:
* They have distinct lccc/tccc combinations: 129/130 or 129/132.
*
* @param fcd16 the FCD value (lccc/tccc combination) of a code point
- * @return TRUE if fcd16 is from U+0F73, U+0F75 or U+0F81
+ * @return true if fcd16 is from U+0F73, U+0F75 or U+0F81
*/
static inline UBool isFCD16OfTibetanCompositeVowel(uint16_t fcd16) {
return fcd16 == 0x8182 || fcd16 == 0x8184;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
index 12e05b4482f..869f0956c34 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
@@ -76,9 +76,9 @@ private:
// (Rather than buffer.getCapacity().)
if(length < INITIAL_CAPACITY || ensureAppendCapacity(1, errorCode)) {
++length;
- return TRUE;
+ return true;
} else {
- return FALSE;
+ return false;
}
}
@@ -251,9 +251,9 @@ protected:
virtual UBool foundNULTerminator();
/**
- * @return FALSE if surrogate code points U+D800..U+DFFF
+ * @return false if surrogate code points U+D800..U+DFFF
* map to their own implicit primary weights (for UTF-16),
- * or TRUE if they map to CE(U+FFFD) (for UTF-8)
+ * or true if they map to CE(U+FFFD) (for UTF-8)
*/
virtual UBool forbidSurrogateCodePoints() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h b/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
index 60d9e50c0d9..c526a4f14f2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
@@ -65,7 +65,7 @@ public:
}
UBool Overflowed() const { return appended_ > capacity_; }
- /** @return FALSE if memory allocation failed */
+ /** @return false if memory allocation failed */
UBool IsOk() const { return buffer_ != NULL; }
protected:
@@ -94,8 +94,8 @@ public:
virtual ~LevelCallback();
/**
* @param level The next level about to be written to the ByteSink.
- * @return TRUE if the level is to be written
- * (the base class implementation always returns TRUE)
+ * @return true if the level is to be written
+ * (the base class implementation always returns true)
*/
virtual UBool needToWrite(Collation::Level level);
};
@@ -103,7 +103,7 @@ public:
/**
* Writes the sort key bytes for minLevel up to the iterator data's strength.
* Optionally writes the case level.
- * Stops writing levels when callback.needToWrite(level) returns FALSE.
+ * Stops writing levels when callback.needToWrite(level) returns false.
* Separates levels with the LEVEL_SEPARATOR_BYTE
* but does not write a TERMINATOR_BYTE.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h b/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h
index 9a636cf1eb9..5fc2bac2d30 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h
@@ -50,7 +50,7 @@ struct U_I18N_API CollationTailoring : public SharedObject {
virtual ~CollationTailoring();
/**
- * Returns TRUE if the constructor could not initialize properly.
+ * Returns true if the constructor could not initialize properly.
*/
UBool isBogus() { return settings == NULL; }
@@ -92,7 +92,7 @@ private:
CollationTailoring(const CollationTailoring &other);
};
-struct CollationCacheEntry : public SharedObject {
+struct U_I18N_API CollationCacheEntry : public SharedObject {
CollationCacheEntry(const Locale &loc, const CollationTailoring *t)
: validLocale(loc), tailoring(t) {
if(t != NULL) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationweights.h b/Build/source/libs/icu/icu-src/source/i18n/collationweights.h
index b4158821844..0d20b927b26 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationweights.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationweights.h
@@ -62,7 +62,7 @@ public:
* weights less than this one.
* @param n The number of collation element weights w necessary such that
* lowerLimit<w<upperLimit in lexical order.
- * @return TRUE if it is possible to fit n elements between the limits
+ * @return true if it is possible to fit n elements between the limits
*/
UBool allocWeights(uint32_t lowerLimit, uint32_t upperLimit, int32_t n);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h b/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
index a2c7abbd691..5ed74fcdd12 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
@@ -131,7 +131,7 @@ public:
* to recreate this transliterator.
* @param result the string to receive the rules. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \uxxxx or
* \Uxxxxxxxx. Unprintable characters are those other than
* U+000A, U+0020..U+007E.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrecog.h b/Build/source/libs/icu/icu-src/source/i18n/csrecog.h
index 713fd4e86b8..944a5007fe5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrecog.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrecog.h
@@ -43,8 +43,8 @@ class CharsetRecognizer : public UMemory
* Try the given input text against this Charset, and fill in the results object
* with the quality of the match plus other information related to the match.
*
- * Return TRUE if the the input bytes are a potential match, and
- * FALSE if the input data is not compatible with, or illegal in this charset.
+ * Return true if the the input bytes are a potential match, and
+ * false if the input data is not compatible with, or illegal in this charset.
*/
virtual UBool match(InputText *textIn, CharsetMatch *results) const = 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp b/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp
index dab6dda5368..92bcf1268ac 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp
@@ -16,12 +16,12 @@
#include "unicode/currunit.h"
#include "unicode/ustring.h"
+#include "unicode/uchar.h"
#include "cstring.h"
#include "uinvchar.h"
#include "charstr.h"
-
-static constexpr char16_t kDefaultCurrency[] = u"XXX";
-static constexpr char kDefaultCurrency8[] = "XXX";
+#include "ustr_imp.h"
+#include "measunit_impl.h"
U_NAMESPACE_BEGIN
@@ -31,22 +31,25 @@ CurrencyUnit::CurrencyUnit(ConstChar16Ptr _isoCode, UErrorCode& ec) {
// non-NUL-terminated string to be passed as an argument, so it is not possible to check length.
// However, we allow a NUL-terminated empty string, which should have the same behavior as nullptr.
// Consider NUL-terminated strings of length 1 or 2 as invalid.
- const char16_t* isoCodeToUse;
+ bool useDefault = false;
if (U_FAILURE(ec) || _isoCode == nullptr || _isoCode[0] == 0) {
- isoCodeToUse = kDefaultCurrency;
+ useDefault = true;
} else if (_isoCode[1] == 0 || _isoCode[2] == 0) {
- isoCodeToUse = kDefaultCurrency;
+ useDefault = true;
ec = U_ILLEGAL_ARGUMENT_ERROR;
} else if (!uprv_isInvariantUString(_isoCode, 3)) {
// TODO: Perform a more strict ASCII check like in ICU4J isAlpha3Code?
- isoCodeToUse = kDefaultCurrency;
+ useDefault = true;
ec = U_INVARIANT_CONVERSION_ERROR;
} else {
- isoCodeToUse = _isoCode;
+ for (int32_t i=0; i<3; i++) {
+ isoCode[i] = u_asciiToUpper(_isoCode[i]);
+ }
+ isoCode[3] = 0;
+ }
+ if (useDefault) {
+ uprv_memcpy(isoCode, kDefaultCurrency, sizeof(UChar) * 4);
}
- // TODO: Perform uppercasing here like in ICU4J Currency.getInstance()?
- uprv_memcpy(isoCode, isoCodeToUse, sizeof(UChar) * 3);
- isoCode[3] = 0;
char simpleIsoCode[4];
u_UCharsToChars(isoCode, simpleIsoCode, 4);
initCurrency(simpleIsoCode);
@@ -66,13 +69,13 @@ CurrencyUnit::CurrencyUnit(StringPiece _isoCode, UErrorCode& ec) {
ec = U_INVARIANT_CONVERSION_ERROR;
} else {
// Have to use isoCodeBuffer to ensure the string is NUL-terminated
- uprv_strncpy(isoCodeBuffer, _isoCode.data(), 3);
+ for (int32_t i=0; i<3; i++) {
+ isoCodeBuffer[i] = uprv_toupper(_isoCode.data()[i]);
+ }
isoCodeBuffer[3] = 0;
isoCodeToUse = isoCodeBuffer;
}
- // TODO: Perform uppercasing here like in ICU4J Currency.getInstance()?
- u_charsToUChars(isoCodeToUse, isoCode, 3);
- isoCode[3] = 0;
+ u_charsToUChars(isoCodeToUse, isoCode, 4);
initCurrency(isoCodeToUse);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h b/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h
index cb2a1bf89df..730ac256c3c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h
@@ -66,7 +66,7 @@ public:
// Sets period type for all hours in [startHour, limitHour).
void add(int32_t startHour, int32_t limitHour, DayPeriod period);
- // Returns TRUE if for all i, DayPeriodForHour[i] has a type other than UNKNOWN.
+ // Returns true if for all i, DayPeriodForHour[i] has a type other than UNKNOWN.
// Values of HasNoon and HasMidnight do not affect the return value.
UBool allHoursAreSet();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp b/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
index d8b1ecdbea1..15418bfe65f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
@@ -167,6 +167,7 @@ DecimalFormatSymbols::operator=(const DecimalFormatSymbols& rhs)
fIsCustomCurrencySymbol = rhs.fIsCustomCurrencySymbol;
fIsCustomIntlCurrencySymbol = rhs.fIsCustomIntlCurrencySymbol;
fCodePointZero = rhs.fCodePointZero;
+ currPattern = rhs.currPattern;
}
return *this;
}
@@ -453,58 +454,16 @@ DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status,
}
fCodePointZero = tempCodePointZero;
- // Obtain currency data from the currency API. This is strictly
- // for backward compatibility; we don't use DecimalFormatSymbols
- // for currency data anymore.
+ // Get the default currency from the currency API.
UErrorCode internalStatus = U_ZERO_ERROR; // don't propagate failures out
UChar curriso[4];
UnicodeString tempStr;
int32_t currisoLength = ucurr_forLocale(locStr, curriso, UPRV_LENGTHOF(curriso), &internalStatus);
if (U_SUCCESS(internalStatus) && currisoLength == 3) {
- uprv_getStaticCurrencyName(curriso, locStr, tempStr, internalStatus);
- if (U_SUCCESS(internalStatus)) {
- fSymbols[kIntlCurrencySymbol].setTo(curriso, currisoLength);
- fSymbols[kCurrencySymbol] = tempStr;
- }
- }
- /* else use the default values. */
-
- //load the currency data
- UChar ucc[4]={0}; //Currency Codes are always 3 chars long
- int32_t uccLen = 4;
- const char* locName = loc.getName();
- UErrorCode localStatus = U_ZERO_ERROR;
- uccLen = ucurr_forLocale(locName, ucc, uccLen, &localStatus);
-
- // TODO: Currency pattern data loading is duplicated in number_formatimpl.cpp
- if(U_SUCCESS(localStatus) && uccLen > 0) {
- char cc[4]={0};
- u_UCharsToChars(ucc, cc, uccLen);
- /* An explicit currency was requested */
- LocalUResourceBundlePointer currencyResource(ures_open(U_ICUDATA_CURR, locStr, &localStatus));
- LocalUResourceBundlePointer currency(
- ures_getByKeyWithFallback(currencyResource.getAlias(), "Currencies", NULL, &localStatus));
- ures_getByKeyWithFallback(currency.getAlias(), cc, currency.getAlias(), &localStatus);
- if(U_SUCCESS(localStatus) && ures_getSize(currency.getAlias())>2) { // the length is 3 if more data is present
- ures_getByIndex(currency.getAlias(), 2, currency.getAlias(), &localStatus);
- int32_t currPatternLen = 0;
- currPattern =
- ures_getStringByIndex(currency.getAlias(), (int32_t)0, &currPatternLen, &localStatus);
- UnicodeString decimalSep =
- ures_getUnicodeStringByIndex(currency.getAlias(), (int32_t)1, &localStatus);
- UnicodeString groupingSep =
- ures_getUnicodeStringByIndex(currency.getAlias(), (int32_t)2, &localStatus);
- if(U_SUCCESS(localStatus)){
- fSymbols[kMonetaryGroupingSeparatorSymbol] = groupingSep;
- fSymbols[kMonetarySeparatorSymbol] = decimalSep;
- //pattern.setTo(TRUE, currPattern, currPatternLen);
- status = localStatus;
- }
- }
- /* else An explicit currency was requested and is unknown or locale data is malformed. */
- /* ucurr_* API will get the correct value later on. */
+ setCurrency(curriso, status);
+ } else {
+ setCurrency(nullptr, status);
}
- // else ignore the error if no currency
// Currency Spacing.
LocalUResourceBundlePointer currencyResource(ures_open(U_ICUDATA_CURR, locStr, &status));
@@ -553,9 +512,54 @@ DecimalFormatSymbols::initialize() {
fIsCustomIntlCurrencySymbol = FALSE;
fCodePointZero = 0x30;
U_ASSERT(fCodePointZero == fSymbols[kZeroDigitSymbol].char32At(0));
+ currPattern = nullptr;
}
+void DecimalFormatSymbols::setCurrency(const UChar* currency, UErrorCode& status) {
+ // TODO: If this method is made public:
+ // - Adopt ICU4J behavior of not allowing currency to be null.
+ // - Also verify that the length of currency is 3.
+ if (!currency) {
+ return;
+ }
+
+ UnicodeString tempStr;
+ uprv_getStaticCurrencyName(currency, locale.getName(), tempStr, status);
+ if (U_SUCCESS(status)) {
+ fSymbols[kIntlCurrencySymbol].setTo(currency, 3);
+ fSymbols[kCurrencySymbol] = tempStr;
+ }
+
+ char cc[4]={0};
+ u_UCharsToChars(currency, cc, 3);
+
+ /* An explicit currency was requested */
+ // TODO(ICU-13297): Move this data loading logic into a centralized place
+ UErrorCode localStatus = U_ZERO_ERROR;
+ LocalUResourceBundlePointer rbTop(ures_open(U_ICUDATA_CURR, locale.getName(), &localStatus));
+ LocalUResourceBundlePointer rb(
+ ures_getByKeyWithFallback(rbTop.getAlias(), "Currencies", NULL, &localStatus));
+ ures_getByKeyWithFallback(rb.getAlias(), cc, rb.getAlias(), &localStatus);
+ if(U_SUCCESS(localStatus) && ures_getSize(rb.getAlias())>2) { // the length is 3 if more data is present
+ ures_getByIndex(rb.getAlias(), 2, rb.getAlias(), &localStatus);
+ int32_t currPatternLen = 0;
+ currPattern =
+ ures_getStringByIndex(rb.getAlias(), (int32_t)0, &currPatternLen, &localStatus);
+ UnicodeString decimalSep =
+ ures_getUnicodeStringByIndex(rb.getAlias(), (int32_t)1, &localStatus);
+ UnicodeString groupingSep =
+ ures_getUnicodeStringByIndex(rb.getAlias(), (int32_t)2, &localStatus);
+ if(U_SUCCESS(localStatus)){
+ fSymbols[kMonetaryGroupingSeparatorSymbol] = groupingSep;
+ fSymbols[kMonetarySeparatorSymbol] = decimalSep;
+ //pattern.setTo(TRUE, currPattern, currPatternLen);
+ }
+ }
+ /* else An explicit currency was requested and is unknown or locale data is malformed. */
+ /* ucurr_* API will get the correct value later on. */
+}
+
Locale
DecimalFormatSymbols::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
U_LOCALE_BASED(locBased, *this);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decContext.h b/Build/source/libs/icu/icu-src/source/i18n/decContext.h
index e145777d1e7..59ab65e5927 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decContext.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/decContext.h
@@ -250,21 +250,21 @@
#define DEC_INIT_DECQUAD DEC_INIT_DECIMAL128
/* decContext routines */
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextClearStatus(decContext *, uint32_t);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextDefault(decContext *, int32_t);
- U_INTERNAL enum rounding U_EXPORT2 uprv_decContextGetRounding(decContext *);
- U_INTERNAL uint32_t U_EXPORT2 uprv_decContextGetStatus(decContext *);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextRestoreStatus(decContext *, uint32_t, uint32_t);
- U_INTERNAL uint32_t U_EXPORT2 uprv_decContextSaveStatus(decContext *, uint32_t);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextSetRounding(decContext *, enum rounding);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextSetStatus(decContext *, uint32_t);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextSetStatusFromString(decContext *, const char *);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextSetStatusFromStringQuiet(decContext *, const char *);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextSetStatusQuiet(decContext *, uint32_t);
- U_INTERNAL const char * U_EXPORT2 uprv_decContextStatusToString(const decContext *);
- U_INTERNAL int32_t U_EXPORT2 uprv_decContextTestEndian(uint8_t);
- U_INTERNAL uint32_t U_EXPORT2 uprv_decContextTestSavedStatus(uint32_t, uint32_t);
- U_INTERNAL uint32_t U_EXPORT2 uprv_decContextTestStatus(decContext *, uint32_t);
- U_INTERNAL decContext * U_EXPORT2 uprv_decContextZeroStatus(decContext *);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextClearStatus(decContext *, uint32_t);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextDefault(decContext *, int32_t);
+ U_CAPI enum rounding U_EXPORT2 uprv_decContextGetRounding(decContext *);
+ U_CAPI uint32_t U_EXPORT2 uprv_decContextGetStatus(decContext *);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextRestoreStatus(decContext *, uint32_t, uint32_t);
+ U_CAPI uint32_t U_EXPORT2 uprv_decContextSaveStatus(decContext *, uint32_t);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextSetRounding(decContext *, enum rounding);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextSetStatus(decContext *, uint32_t);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextSetStatusFromString(decContext *, const char *);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextSetStatusFromStringQuiet(decContext *, const char *);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextSetStatusQuiet(decContext *, uint32_t);
+ U_CAPI const char * U_EXPORT2 uprv_decContextStatusToString(const decContext *);
+ U_CAPI int32_t U_EXPORT2 uprv_decContextTestEndian(uint8_t);
+ U_CAPI uint32_t U_EXPORT2 uprv_decContextTestSavedStatus(uint32_t, uint32_t);
+ U_CAPI uint32_t U_EXPORT2 uprv_decContextTestStatus(decContext *, uint32_t);
+ U_CAPI decContext * U_EXPORT2 uprv_decContextZeroStatus(decContext *);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decNumber.h b/Build/source/libs/icu/icu-src/source/i18n/decNumber.h
index 7182e789e5a..ddcc50e2efe 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decNumber.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/decNumber.h
@@ -112,74 +112,74 @@
/* decNumber public functions and macros */
/* ---------------------------------------------------------------- */
/* Conversions */
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberFromInt32(decNumber *, int32_t);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberFromUInt32(decNumber *, uint32_t);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberFromString(decNumber *, const char *, decContext *);
- U_INTERNAL char * U_EXPORT2 uprv_decNumberToString(const decNumber *, char *);
- U_INTERNAL char * U_EXPORT2 uprv_decNumberToEngString(const decNumber *, char *);
- U_INTERNAL uint32_t U_EXPORT2 uprv_decNumberToUInt32(const decNumber *, decContext *);
- U_INTERNAL int32_t U_EXPORT2 uprv_decNumberToInt32(const decNumber *, decContext *);
- U_INTERNAL uint8_t * U_EXPORT2 uprv_decNumberGetBCD(const decNumber *, uint8_t *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberSetBCD(decNumber *, const uint8_t *, uint32_t);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberFromInt32(decNumber *, int32_t);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberFromUInt32(decNumber *, uint32_t);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberFromString(decNumber *, const char *, decContext *);
+ U_CAPI char * U_EXPORT2 uprv_decNumberToString(const decNumber *, char *);
+ U_CAPI char * U_EXPORT2 uprv_decNumberToEngString(const decNumber *, char *);
+ U_CAPI uint32_t U_EXPORT2 uprv_decNumberToUInt32(const decNumber *, decContext *);
+ U_CAPI int32_t U_EXPORT2 uprv_decNumberToInt32(const decNumber *, decContext *);
+ U_CAPI uint8_t * U_EXPORT2 uprv_decNumberGetBCD(const decNumber *, uint8_t *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberSetBCD(decNumber *, const uint8_t *, uint32_t);
/* Operators and elementary functions */
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberAbs(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberAdd(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberAnd(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCompare(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCompareSignal(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCompareTotal(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCompareTotalMag(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberDivide(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberDivideInteger(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberExp(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberFMA(decNumber *, const decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberInvert(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberLn(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberLogB(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberLog10(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberMax(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberMaxMag(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberMin(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberMinMag(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberMinus(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberMultiply(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberNormalize(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberOr(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberPlus(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberPower(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberQuantize(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberReduce(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberRemainder(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberRemainderNear(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberRescale(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberRotate(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberSameQuantum(decNumber *, const decNumber *, const decNumber *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberScaleB(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberShift(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberSquareRoot(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberSubtract(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberToIntegralExact(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberToIntegralValue(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberXor(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberAbs(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberAdd(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberAnd(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCompare(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCompareSignal(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCompareTotal(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCompareTotalMag(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberDivide(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberDivideInteger(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberExp(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberFMA(decNumber *, const decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberInvert(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberLn(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberLogB(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberLog10(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberMax(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberMaxMag(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberMin(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberMinMag(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberMinus(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberMultiply(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberNormalize(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberOr(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberPlus(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberPower(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberQuantize(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberReduce(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberRemainder(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberRemainderNear(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberRescale(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberRotate(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberSameQuantum(decNumber *, const decNumber *, const decNumber *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberScaleB(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberShift(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberSquareRoot(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberSubtract(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberToIntegralExact(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberToIntegralValue(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberXor(decNumber *, const decNumber *, const decNumber *, decContext *);
/* Utilities */
enum decClass uprv_decNumberClass(const decNumber *, decContext *);
- U_INTERNAL const char * U_EXPORT2 uprv_decNumberClassToString(enum decClass);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCopy(decNumber *, const decNumber *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCopyAbs(decNumber *, const decNumber *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCopyNegate(decNumber *, const decNumber *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberCopySign(decNumber *, const decNumber *, const decNumber *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberNextMinus(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberNextPlus(decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberNextToward(decNumber *, const decNumber *, const decNumber *, decContext *);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberTrim(decNumber *);
- U_INTERNAL const char * U_EXPORT2 uprv_decNumberVersion(void);
- U_INTERNAL decNumber * U_EXPORT2 uprv_decNumberZero(decNumber *);
+ U_CAPI const char * U_EXPORT2 uprv_decNumberClassToString(enum decClass);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCopy(decNumber *, const decNumber *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCopyAbs(decNumber *, const decNumber *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCopyNegate(decNumber *, const decNumber *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberCopySign(decNumber *, const decNumber *, const decNumber *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberNextMinus(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberNextPlus(decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberNextToward(decNumber *, const decNumber *, const decNumber *, decContext *);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberTrim(decNumber *);
+ U_CAPI const char * U_EXPORT2 uprv_decNumberVersion(void);
+ U_CAPI decNumber * U_EXPORT2 uprv_decNumberZero(decNumber *);
/* Functions for testing decNumbers (normality depends on context) */
- U_INTERNAL int32_t U_EXPORT2 uprv_decNumberIsNormal(const decNumber *, decContext *);
- U_INTERNAL int32_t U_EXPORT2 uprv_decNumberIsSubnormal(const decNumber *, decContext *);
+ U_CAPI int32_t U_EXPORT2 uprv_decNumberIsNormal(const decNumber *, decContext *);
+ U_CAPI int32_t U_EXPORT2 uprv_decNumberIsSubnormal(const decNumber *, decContext *);
/* Macros for testing decNumber *dn */
#define decNumberIsCanonical(dn) (1) /* All decNumbers are saintly */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
index d19f6518880..daa1129a6ab 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
@@ -519,7 +519,9 @@ UnicodeString& DecimalFormat::format(double number, UnicodeString& appendTo, Fie
return appendTo;
}
UErrorCode localStatus = U_ZERO_ERROR;
- FormattedNumber output = fields->formatter.formatDouble(number, localStatus);
+ UFormattedNumberData output;
+ output.quantity.setToDouble(number);
+ fields->formatter.formatImpl(&output, localStatus);
fieldPositionHelper(output, pos, appendTo.length(), localStatus);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, localStatus);
@@ -540,7 +542,9 @@ UnicodeString& DecimalFormat::format(double number, UnicodeString& appendTo, Fie
if (pos.getField() == FieldPosition::DONT_CARE && fastFormatDouble(number, appendTo)) {
return appendTo;
}
- FormattedNumber output = fields->formatter.formatDouble(number, status);
+ UFormattedNumberData output;
+ output.quantity.setToDouble(number);
+ fields->formatter.formatImpl(&output, status);
fieldPositionHelper(output, pos, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -562,7 +566,9 @@ DecimalFormat::format(double number, UnicodeString& appendTo, FieldPositionItera
if (posIter == nullptr && fastFormatDouble(number, appendTo)) {
return appendTo;
}
- FormattedNumber output = fields->formatter.formatDouble(number, status);
+ UFormattedNumberData output;
+ output.quantity.setToDouble(number);
+ fields->formatter.formatImpl(&output, status);
fieldPositionIteratorHelper(output, posIter, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -593,7 +599,9 @@ UnicodeString& DecimalFormat::format(int64_t number, UnicodeString& appendTo, Fi
return appendTo;
}
UErrorCode localStatus = U_ZERO_ERROR;
- FormattedNumber output = fields->formatter.formatInt(number, localStatus);
+ UFormattedNumberData output;
+ output.quantity.setToLong(number);
+ fields->formatter.formatImpl(&output, localStatus);
fieldPositionHelper(output, pos, appendTo.length(), localStatus);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, localStatus);
@@ -614,7 +622,9 @@ UnicodeString& DecimalFormat::format(int64_t number, UnicodeString& appendTo, Fi
if (pos.getField() == FieldPosition::DONT_CARE && fastFormatInt64(number, appendTo)) {
return appendTo;
}
- FormattedNumber output = fields->formatter.formatInt(number, status);
+ UFormattedNumberData output;
+ output.quantity.setToLong(number);
+ fields->formatter.formatImpl(&output, status);
fieldPositionHelper(output, pos, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -636,7 +646,9 @@ DecimalFormat::format(int64_t number, UnicodeString& appendTo, FieldPositionIter
if (posIter == nullptr && fastFormatInt64(number, appendTo)) {
return appendTo;
}
- FormattedNumber output = fields->formatter.formatInt(number, status);
+ UFormattedNumberData output;
+ output.quantity.setToLong(number);
+ fields->formatter.formatImpl(&output, status);
fieldPositionIteratorHelper(output, posIter, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -655,7 +667,9 @@ DecimalFormat::format(StringPiece number, UnicodeString& appendTo, FieldPosition
appendTo.setToBogus();
return appendTo;
}
- FormattedNumber output = fields->formatter.formatDecimal(number, status);
+ UFormattedNumberData output;
+ output.quantity.setToDecNumber(number, status);
+ fields->formatter.formatImpl(&output, status);
fieldPositionIteratorHelper(output, posIter, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -673,7 +687,9 @@ UnicodeString& DecimalFormat::format(const DecimalQuantity& number, UnicodeStrin
appendTo.setToBogus();
return appendTo;
}
- FormattedNumber output = fields->formatter.formatDecimalQuantity(number, status);
+ UFormattedNumberData output;
+ output.quantity = number;
+ fields->formatter.formatImpl(&output, status);
fieldPositionIteratorHelper(output, posIter, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -692,7 +708,9 @@ DecimalFormat::format(const DecimalQuantity& number, UnicodeString& appendTo, Fi
appendTo.setToBogus();
return appendTo;
}
- FormattedNumber output = fields->formatter.formatDecimalQuantity(number, status);
+ UFormattedNumberData output;
+ output.quantity = number;
+ fields->formatter.formatImpl(&output, status);
fieldPositionHelper(output, pos, appendTo.length(), status);
auto appendable = UnicodeStringAppendable(appendTo);
output.appendTo(appendable, status);
@@ -1502,8 +1520,11 @@ void DecimalFormat::setCurrency(const char16_t* theCurrency, UErrorCode& ec) {
}
NumberFormat::setCurrency(theCurrency, ec); // to set field for compatibility
fields->properties.currency = currencyUnit;
- // TODO: Set values in fields->symbols, too?
- touchNoError();
+ // In Java, the DecimalFormatSymbols is mutable. Why not in C++?
+ LocalPointer<DecimalFormatSymbols> newSymbols(new DecimalFormatSymbols(*fields->symbols), ec);
+ newSymbols->setCurrency(currencyUnit.getISOCurrency(), ec);
+ fields->symbols.adoptInsteadAndCheckErrorCode(newSymbols.orphan(), ec);
+ touch(ec);
}
void DecimalFormat::setCurrency(const char16_t* theCurrency) {
@@ -1700,8 +1721,11 @@ const numparse::impl::NumberParserImpl* DecimalFormat::getCurrencyParser(UErrorC
}
void
-DecimalFormat::fieldPositionHelper(const number::FormattedNumber& formatted, FieldPosition& fieldPosition,
- int32_t offset, UErrorCode& status) {
+DecimalFormat::fieldPositionHelper(
+ const UFormattedNumberData& formatted,
+ FieldPosition& fieldPosition,
+ int32_t offset,
+ UErrorCode& status) {
if (U_FAILURE(status)) { return; }
// always return first occurrence:
fieldPosition.setBeginIndex(0);
@@ -1714,12 +1738,15 @@ DecimalFormat::fieldPositionHelper(const number::FormattedNumber& formatted, Fie
}
void
-DecimalFormat::fieldPositionIteratorHelper(const number::FormattedNumber& formatted, FieldPositionIterator* fpi,
- int32_t offset, UErrorCode& status) {
+DecimalFormat::fieldPositionIteratorHelper(
+ const UFormattedNumberData& formatted,
+ FieldPositionIterator* fpi,
+ int32_t offset,
+ UErrorCode& status) {
if (U_SUCCESS(status) && (fpi != nullptr)) {
FieldPositionIteratorHandler fpih(fpi, status);
fpih.setShift(offset);
- formatted.getAllFieldPositionsImpl(fpih, status);
+ formatted.getAllFieldPositions(fpih, status);
}
}
@@ -1801,7 +1828,7 @@ bool DecimalFormat::fastFormatDouble(double input, UnicodeString& output) const
return false;
}
if (std::isnan(input)
- || std::trunc(input) != input
+ || uprv_trunc(input) != input
|| input <= INT32_MIN
|| input > INT32_MAX) {
return false;
@@ -1834,7 +1861,8 @@ void DecimalFormat::doFastFormatInt32(int32_t input, bool isNegative, UnicodeStr
char16_t localBuffer[localCapacity];
char16_t* ptr = localBuffer + localCapacity;
int8_t group = 0;
- for (int8_t i = 0; i < fields->fastData.maxInt && (input != 0 || i < fields->fastData.minInt); i++) {
+ int8_t minInt = (fields->fastData.minInt < 1)? 1: fields->fastData.minInt;
+ for (int8_t i = 0; i < fields->fastData.maxInt && (input != 0 || i < minInt); i++) {
if (group++ == 3 && fields->fastData.cpGroupingSeparator != 0) {
*(--ptr) = fields->fastData.cpGroupingSeparator;
group = 1;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-ieee.h b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-ieee.h
index f4c62a9a9f8..31c35867de5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-ieee.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-ieee.h
@@ -59,6 +59,7 @@ class Double {
static const uint64_t kExponentMask = DOUBLE_CONVERSION_UINT64_2PART_C(0x7FF00000, 00000000);
static const uint64_t kSignificandMask = DOUBLE_CONVERSION_UINT64_2PART_C(0x000FFFFF, FFFFFFFF);
static const uint64_t kHiddenBit = DOUBLE_CONVERSION_UINT64_2PART_C(0x00100000, 00000000);
+ static const uint64_t kQuietNanBit = DOUBLE_CONVERSION_UINT64_2PART_C(0x00080000, 00000000);
static const int kPhysicalSignificandSize = 52; // Excludes the hidden bit.
static const int kSignificandSize = 53;
static const int kExponentBias = 0x3FF + kPhysicalSignificandSize;
@@ -162,6 +163,15 @@ class Double {
((d64 & kSignificandMask) != 0);
}
+ bool IsQuietNan() const {
+ return IsNan() && ((AsUint64() & kQuietNanBit) != 0);
+ }
+
+ bool IsSignalingNan() const {
+ return IsNan() && ((AsUint64() & kQuietNanBit) == 0);
+ }
+
+
bool IsInfinite() const {
uint64_t d64 = AsUint64();
return ((d64 & kExponentMask) == kExponentMask) &&
@@ -280,6 +290,7 @@ class Single {
static const uint32_t kExponentMask = 0x7F800000;
static const uint32_t kSignificandMask = 0x007FFFFF;
static const uint32_t kHiddenBit = 0x00800000;
+ static const uint32_t kQuietNanBit = 0x00400000;
static const int kPhysicalSignificandSize = 23; // Excludes the hidden bit.
static const int kSignificandSize = 24;
@@ -338,6 +349,15 @@ class Single {
((d32 & kSignificandMask) != 0);
}
+ bool IsQuietNan() const {
+ return IsNan() && ((AsUint32() & kQuietNanBit) != 0);
+ }
+
+ bool IsSignalingNan() const {
+ return IsNan() && ((AsUint32() & kQuietNanBit) == 0);
+ }
+
+
bool IsInfinite() const {
uint32_t d32 = AsUint32();
return ((d32 & kExponentMask) == kExponentMask) &&
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp
index 946b2b26e77..548cad1f302 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp
@@ -462,11 +462,6 @@ double StringToDoubleConverter::StringToIeee(
}
}
- // The longest form of simplified number is: "-<significant digits>.1eXXX\0".
- const int kBufferSize = kMaxSignificantDigits + 10;
- char buffer[kBufferSize]; // NOLINT: size is known at compile time.
- int buffer_pos = 0;
-
// Exponent will be adjusted if insignificant digits of the integer part
// or insignificant leading zeros of the fractional part are dropped.
int exponent = 0;
@@ -501,7 +496,6 @@ double StringToDoubleConverter::StringToIeee(
return junk_string_value_;
}
- DOUBLE_CONVERSION_ASSERT(buffer_pos == 0);
*processed_characters_count = static_cast<int>(current - input);
return sign ? -Double::Infinity() : Double::Infinity();
}
@@ -520,7 +514,6 @@ double StringToDoubleConverter::StringToIeee(
return junk_string_value_;
}
- DOUBLE_CONVERSION_ASSERT(buffer_pos == 0);
*processed_characters_count = static_cast<int>(current - input);
return sign ? -Double::NaN() : Double::NaN();
}
@@ -577,6 +570,12 @@ double StringToDoubleConverter::StringToIeee(
bool octal = leading_zero && (flags_ & ALLOW_OCTALS) != 0;
+ // The longest form of simplified number is: "-<significant digits>.1eXXX\0".
+ const int kBufferSize = kMaxSignificantDigits + 10;
+ DOUBLE_CONVERSION_STACK_UNINITIALIZED char
+ buffer[kBufferSize]; // NOLINT: size is known at compile time.
+ int buffer_pos = 0;
+
// Copy significant digits of the integer part (if any) to the buffer.
while (*current >= '0' && *current <= '9') {
if (significant_digits < kMaxSignificantDigits) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp
index 9cf48544267..ee6377782bb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp
@@ -49,10 +49,12 @@ U_NAMESPACE_BEGIN
namespace double_conversion {
+#if defined(DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS)
// 2^53 = 9007199254740992.
// Any integer with at most 15 decimal digits will hence fit into a double
// (which has a 53bit significand) without loss of precision.
static const int kMaxExactDoubleIntegerDecimalDigits = 15;
+#endif // #if defined(DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS)
// 2^64 = 18446744073709551616 > 10^19
static const int kMaxUint64DecimalDigits = 19;
@@ -69,6 +71,7 @@ static const int kMinDecimalPower = -324;
static const uint64_t kMaxUint64 = DOUBLE_CONVERSION_UINT64_2PART_C(0xFFFFFFFF, FFFFFFFF);
+#if defined(DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS)
static const double exact_powers_of_ten[] = {
1.0, // 10^0
10.0,
@@ -96,6 +99,7 @@ static const double exact_powers_of_ten[] = {
10000000000000000000000.0
};
static const int kExactPowersOfTenSize = DOUBLE_CONVERSION_ARRAY_SIZE(exact_powers_of_ten);
+#endif // #if defined(DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS)
// Maximum number of significant digits in the decimal representation.
// In fact the value is 772 (see conversions.cc), but to give us some margin
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h
index 099298460c6..8c6a0e16e00 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h
@@ -66,14 +66,28 @@ inline void abort_noreturn() { abort(); }
#endif
#endif
+// Not all compilers support __has_attribute and combining a check for both
+// ifdef and __has_attribute on the same preprocessor line isn't portable.
+#ifdef __has_attribute
+# define DOUBLE_CONVERSION_HAS_ATTRIBUTE(x) __has_attribute(x)
+#else
+# define DOUBLE_CONVERSION_HAS_ATTRIBUTE(x) 0
+#endif
+
#ifndef DOUBLE_CONVERSION_UNUSED
-#ifdef __GNUC__
+#if DOUBLE_CONVERSION_HAS_ATTRIBUTE(unused)
#define DOUBLE_CONVERSION_UNUSED __attribute__((unused))
#else
#define DOUBLE_CONVERSION_UNUSED
#endif
#endif
+#if DOUBLE_CONVERSION_HAS_ATTRIBUTE(uninitialized)
+#define DOUBLE_CONVERSION_STACK_UNINITIALIZED __attribute__((uninitialized))
+#else
+#define DOUBLE_CONVERSION_STACK_UNINITIALIZED
+#endif
+
// Double operations detection based on target architecture.
// Linux uses a 80bit wide floating point stack on x86. This induces double
// rounding, which in turn leads to wrong results.
@@ -104,6 +118,7 @@ int main(int argc, char** argv) {
defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \
defined(__hppa__) || defined(__ia64__) || \
defined(__mips__) || \
+ defined(__nios2__) || \
defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
defined(_POWER) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \
defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
@@ -112,7 +127,8 @@ int main(int argc, char** argv) {
defined(__AARCH64EL__) || defined(__aarch64__) || defined(__AARCH64EB__) || \
defined(__riscv) || defined(__e2k__) || \
defined(__or1k__) || defined(__arc__) || \
- defined(__EMSCRIPTEN__)
+ defined(__microblaze__) || defined(__XTENSA__) || \
+ defined(__EMSCRIPTEN__) || defined(__wasm32__)
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
#elif defined(__mc68000__) || \
defined(__pnacl__) || defined(__native_client__)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h b/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h
index c7addf37fb6..6fc16bb3e08 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h
@@ -64,11 +64,13 @@
#define LOW_Z ((UChar)0x007A)
#define CAP_A ((UChar)0x0041)
+#define CAP_B ((UChar)0x0042)
#define CAP_C ((UChar)0x0043)
#define CAP_D ((UChar)0x0044)
#define CAP_E ((UChar)0x0045)
#define CAP_F ((UChar)0x0046)
#define CAP_G ((UChar)0x0047)
+#define CAP_J ((UChar)0x004A)
#define CAP_H ((UChar)0x0048)
#define CAP_K ((UChar)0x004B)
#define CAP_L ((UChar)0x004C)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
index f47e7708ccc..7cba167130f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
@@ -23,6 +23,7 @@
#include "unicode/dtptngen.h"
#include "unicode/dtitvinf.h"
#include "unicode/simpleformatter.h"
+#include "unicode/udisplaycontext.h"
#include "cmemory.h"
#include "cstring.h"
#include "dtitv_impl.h"
@@ -108,6 +109,10 @@ DateIntervalFormat::createInstance(const UnicodeString& skeleton,
#endif
DateIntervalInfo* dtitvinf = new DateIntervalInfo(locale, status);
+ if (dtitvinf == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return nullptr;
+ }
return create(locale, dtitvinf, &skeleton, status);
}
@@ -132,27 +137,29 @@ DateIntervalFormat::createInstance(const UnicodeString& skeleton,
DateIntervalFormat::DateIntervalFormat()
-: fInfo(NULL),
- fDateFormat(NULL),
- fFromCalendar(NULL),
- fToCalendar(NULL),
+: fInfo(nullptr),
+ fDateFormat(nullptr),
+ fFromCalendar(nullptr),
+ fToCalendar(nullptr),
fLocale(Locale::getRoot()),
- fDatePattern(NULL),
- fTimePattern(NULL),
- fDateTimeFormat(NULL)
+ fDatePattern(nullptr),
+ fTimePattern(nullptr),
+ fDateTimeFormat(nullptr),
+ fCapitalizationContext(UDISPCTX_CAPITALIZATION_NONE)
{}
DateIntervalFormat::DateIntervalFormat(const DateIntervalFormat& itvfmt)
: Format(itvfmt),
- fInfo(NULL),
- fDateFormat(NULL),
- fFromCalendar(NULL),
- fToCalendar(NULL),
+ fInfo(nullptr),
+ fDateFormat(nullptr),
+ fFromCalendar(nullptr),
+ fToCalendar(nullptr),
fLocale(itvfmt.fLocale),
- fDatePattern(NULL),
- fTimePattern(NULL),
- fDateTimeFormat(NULL) {
+ fDatePattern(nullptr),
+ fTimePattern(nullptr),
+ fDateTimeFormat(nullptr),
+ fCapitalizationContext(UDISPCTX_CAPITALIZATION_NONE) {
*this = itvfmt;
}
@@ -172,23 +179,23 @@ DateIntervalFormat::operator=(const DateIntervalFormat& itvfmt) {
if ( itvfmt.fDateFormat ) {
fDateFormat = itvfmt.fDateFormat->clone();
} else {
- fDateFormat = NULL;
+ fDateFormat = nullptr;
}
if ( itvfmt.fFromCalendar ) {
fFromCalendar = itvfmt.fFromCalendar->clone();
} else {
- fFromCalendar = NULL;
+ fFromCalendar = nullptr;
}
if ( itvfmt.fToCalendar ) {
fToCalendar = itvfmt.fToCalendar->clone();
} else {
- fToCalendar = NULL;
+ fToCalendar = nullptr;
}
}
if ( itvfmt.fInfo ) {
fInfo = itvfmt.fInfo->clone();
} else {
- fInfo = NULL;
+ fInfo = nullptr;
}
fSkeleton = itvfmt.fSkeleton;
int8_t i;
@@ -196,9 +203,10 @@ DateIntervalFormat::operator=(const DateIntervalFormat& itvfmt) {
fIntervalPatterns[i] = itvfmt.fIntervalPatterns[i];
}
fLocale = itvfmt.fLocale;
- fDatePattern = (itvfmt.fDatePattern)? itvfmt.fDatePattern->clone(): NULL;
- fTimePattern = (itvfmt.fTimePattern)? itvfmt.fTimePattern->clone(): NULL;
- fDateTimeFormat = (itvfmt.fDateTimeFormat)? itvfmt.fDateTimeFormat->clone(): NULL;
+ fDatePattern = (itvfmt.fDatePattern)? itvfmt.fDatePattern->clone(): nullptr;
+ fTimePattern = (itvfmt.fTimePattern)? itvfmt.fTimePattern->clone(): nullptr;
+ fDateTimeFormat = (itvfmt.fDateTimeFormat)? itvfmt.fDateTimeFormat->clone(): nullptr;
+ fCapitalizationContext = itvfmt.fCapitalizationContext;
}
return *this;
}
@@ -227,21 +235,21 @@ DateIntervalFormat::operator==(const Format& other) const {
const DateIntervalFormat* fmt = (DateIntervalFormat*)&other;
if (this == fmt) {return TRUE;}
if (!Format::operator==(other)) {return FALSE;}
- if ((fInfo != fmt->fInfo) && (fInfo == NULL || fmt->fInfo == NULL)) {return FALSE;}
+ if ((fInfo != fmt->fInfo) && (fInfo == nullptr || fmt->fInfo == nullptr)) {return FALSE;}
if (fInfo && fmt->fInfo && (*fInfo != *fmt->fInfo )) {return FALSE;}
{
Mutex lock(&gFormatterMutex);
- if (fDateFormat != fmt->fDateFormat && (fDateFormat == NULL || fmt->fDateFormat == NULL)) {return FALSE;}
+ if (fDateFormat != fmt->fDateFormat && (fDateFormat == nullptr || fmt->fDateFormat == nullptr)) {return FALSE;}
if (fDateFormat && fmt->fDateFormat && (*fDateFormat != *fmt->fDateFormat)) {return FALSE;}
}
// note: fFromCalendar and fToCalendar hold no persistent state, and therefore do not participate in operator ==.
- // fDateFormat has the master calendar for the DateIntervalFormat.
+ // fDateFormat has the primary calendar for the DateIntervalFormat.
if (fSkeleton != fmt->fSkeleton) {return FALSE;}
- if (fDatePattern != fmt->fDatePattern && (fDatePattern == NULL || fmt->fDatePattern == NULL)) {return FALSE;}
+ if (fDatePattern != fmt->fDatePattern && (fDatePattern == nullptr || fmt->fDatePattern == nullptr)) {return FALSE;}
if (fDatePattern && fmt->fDatePattern && (*fDatePattern != *fmt->fDatePattern)) {return FALSE;}
- if (fTimePattern != fmt->fTimePattern && (fTimePattern == NULL || fmt->fTimePattern == NULL)) {return FALSE;}
+ if (fTimePattern != fmt->fTimePattern && (fTimePattern == nullptr || fmt->fTimePattern == nullptr)) {return FALSE;}
if (fTimePattern && fmt->fTimePattern && (*fTimePattern != *fmt->fTimePattern)) {return FALSE;}
- if (fDateTimeFormat != fmt->fDateTimeFormat && (fDateTimeFormat == NULL || fmt->fDateTimeFormat == NULL)) {return FALSE;}
+ if (fDateTimeFormat != fmt->fDateTimeFormat && (fDateTimeFormat == nullptr || fmt->fDateTimeFormat == nullptr)) {return FALSE;}
if (fDateTimeFormat && fmt->fDateTimeFormat && (*fDateTimeFormat != *fmt->fDateTimeFormat)) {return FALSE;}
if (fLocale != fmt->fLocale) {return FALSE;}
@@ -250,6 +258,7 @@ DateIntervalFormat::operator==(const Format& other) const {
if (fIntervalPatterns[i].secondPart != fmt->fIntervalPatterns[i].secondPart ) {return FALSE;}
if (fIntervalPatterns[i].laterDateFirst != fmt->fIntervalPatterns[i].laterDateFirst) {return FALSE;}
}
+ if (fCapitalizationContext != fmt->fCapitalizationContext) {return FALSE;}
return TRUE;
}
@@ -266,7 +275,7 @@ DateIntervalFormat::format(const Formattable& obj,
if ( obj.getType() == Formattable::kObject ) {
const UObject* formatObj = obj.getObject();
const DateInterval* interval = dynamic_cast<const DateInterval*>(formatObj);
- if (interval != NULL) {
+ if (interval != nullptr) {
return format(interval, appendTo, fieldPosition, status);
}
}
@@ -283,7 +292,7 @@ DateIntervalFormat::format(const DateInterval* dtInterval,
if ( U_FAILURE(status) ) {
return appendTo;
}
- if (fDateFormat == NULL || fInfo == NULL) {
+ if (fDateFormat == nullptr || fInfo == nullptr) {
status = U_INVALID_STATE_ERROR;
return appendTo;
}
@@ -300,6 +309,10 @@ DateIntervalFormat::format(const DateInterval* dtInterval,
FormattedDateInterval DateIntervalFormat::formatToValue(
const DateInterval& dtInterval,
UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return FormattedDateInterval(status);
+ }
+ // LocalPointer only sets OOM status if U_SUCCESS is true.
LocalPointer<FormattedDateIntervalData> result(new FormattedDateIntervalData(status), status);
if (U_FAILURE(status)) {
return FormattedDateInterval(status);
@@ -350,6 +363,10 @@ FormattedDateInterval DateIntervalFormat::formatToValue(
Calendar& fromCalendar,
Calendar& toCalendar,
UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return FormattedDateInterval(status);
+ }
+ // LocalPointer only sets OOM status if U_SUCCESS is true.
LocalPointer<FormattedDateIntervalData> result(new FormattedDateIntervalData(status), status);
if (U_FAILURE(status)) {
return FormattedDateInterval(status);
@@ -397,6 +414,7 @@ UnicodeString& DateIntervalFormat::formatIntervalImpl(
}
+// The following is only called from within the gFormatterMutex lock
UnicodeString&
DateIntervalFormat::formatImpl(Calendar& fromCalendar,
Calendar& toCalendar,
@@ -444,18 +462,26 @@ DateIntervalFormat::formatImpl(Calendar& fromCalendar,
} else if ( fromCalendar.get(UCAL_SECOND, status) !=
toCalendar.get(UCAL_SECOND, status) ) {
field = UCAL_SECOND;
+ } else if ( fromCalendar.get(UCAL_MILLISECOND, status) !=
+ toCalendar.get(UCAL_MILLISECOND, status) ) {
+ field = UCAL_MILLISECOND;
}
if ( U_FAILURE(status) ) {
return appendTo;
}
+ UErrorCode tempStatus = U_ZERO_ERROR; // for setContext, ignored
+ // Set up fDateFormat to handle the first or only part of the interval
+ // (override later for any second part). Inside lock, OK to modify fDateFormat.
+ fDateFormat->setContext(fCapitalizationContext, tempStatus);
+
if ( field == UCAL_FIELD_COUNT ) {
/* ignore the millisecond etc. small fields' difference.
* use single date when all the above are the same.
*/
return fDateFormat->_format(fromCalendar, appendTo, fphandler, status);
}
- UBool fromToOnSameDay = (field==UCAL_AM_PM || field==UCAL_HOUR || field==UCAL_MINUTE || field==UCAL_SECOND);
+ UBool fromToOnSameDay = (field==UCAL_AM_PM || field==UCAL_HOUR || field==UCAL_MINUTE || field==UCAL_SECOND || field==UCAL_MILLISECOND);
// following call should not set wrong status,
// all the pass-in fields are valid till here
@@ -506,6 +532,9 @@ DateIntervalFormat::formatImpl(Calendar& fromCalendar,
if ( !intervalPattern.secondPart.isEmpty() ) {
fDateFormat->applyPattern(intervalPattern.secondPart);
+ // No capitalization for second part of interval
+ tempStatus = U_ZERO_ERROR;
+ fDateFormat->setContext(UDISPCTX_CAPITALIZATION_NONE, tempStatus);
fDateFormat->_format(*secondCal, appendTo, fphandler, status);
}
fDateFormat->applyPattern(originalPattern);
@@ -537,14 +566,17 @@ DateIntervalFormat::setDateIntervalInfo(const DateIntervalInfo& newItvPattern,
UErrorCode& status) {
delete fInfo;
fInfo = new DateIntervalInfo(newItvPattern);
+ if (fInfo == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
// Delete patterns that get reset by initializePattern
delete fDatePattern;
- fDatePattern = NULL;
+ fDatePattern = nullptr;
delete fTimePattern;
- fTimePattern = NULL;
+ fTimePattern = nullptr;
delete fDateTimeFormat;
- fDateTimeFormat = NULL;
+ fDateTimeFormat = nullptr;
if (fDateFormat) {
initializePattern(status);
@@ -562,10 +594,10 @@ DateIntervalFormat::getDateFormat() const {
void
DateIntervalFormat::adoptTimeZone(TimeZone* zone)
{
- if (fDateFormat != NULL) {
+ if (fDateFormat != nullptr) {
fDateFormat->adoptTimeZone(zone);
}
- // The fDateFormat has the master calendar for the DateIntervalFormat and has
+ // The fDateFormat has the primary calendar for the DateIntervalFormat and has
// ownership of any adopted TimeZone; fFromCalendar and fToCalendar are internal
// work clones of that calendar (and should not also be given ownership of the
// adopted TimeZone).
@@ -580,10 +612,10 @@ DateIntervalFormat::adoptTimeZone(TimeZone* zone)
void
DateIntervalFormat::setTimeZone(const TimeZone& zone)
{
- if (fDateFormat != NULL) {
+ if (fDateFormat != nullptr) {
fDateFormat->setTimeZone(zone);
}
- // The fDateFormat has the master calendar for the DateIntervalFormat;
+ // The fDateFormat has the primary calendar for the DateIntervalFormat;
// fFromCalendar and fToCalendar are internal work clones of that calendar.
if (fFromCalendar) {
fFromCalendar->setTimeZone(zone);
@@ -596,26 +628,51 @@ DateIntervalFormat::setTimeZone(const TimeZone& zone)
const TimeZone&
DateIntervalFormat::getTimeZone() const
{
- if (fDateFormat != NULL) {
+ if (fDateFormat != nullptr) {
Mutex lock(&gFormatterMutex);
return fDateFormat->getTimeZone();
}
- // If fDateFormat is NULL (unexpected), create default timezone.
+ // If fDateFormat is nullptr (unexpected), create default timezone.
return *(TimeZone::createDefault());
}
+void
+DateIntervalFormat::setContext(UDisplayContext value, UErrorCode& status)
+{
+ if (U_FAILURE(status))
+ return;
+ if ( (UDisplayContextType)((uint32_t)value >> 8) == UDISPCTX_TYPE_CAPITALIZATION ) {
+ fCapitalizationContext = value;
+ } else {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+}
+
+UDisplayContext
+DateIntervalFormat::getContext(UDisplayContextType type, UErrorCode& status) const
+{
+ if (U_FAILURE(status))
+ return (UDisplayContext)0;
+ if (type != UDISPCTX_TYPE_CAPITALIZATION) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return (UDisplayContext)0;
+ }
+ return fCapitalizationContext;
+}
+
DateIntervalFormat::DateIntervalFormat(const Locale& locale,
DateIntervalInfo* dtItvInfo,
const UnicodeString* skeleton,
UErrorCode& status)
-: fInfo(NULL),
- fDateFormat(NULL),
- fFromCalendar(NULL),
- fToCalendar(NULL),
+: fInfo(nullptr),
+ fDateFormat(nullptr),
+ fFromCalendar(nullptr),
+ fToCalendar(nullptr),
fLocale(locale),
- fDatePattern(NULL),
- fTimePattern(NULL),
- fDateTimeFormat(NULL)
+ fDatePattern(nullptr),
+ fTimePattern(nullptr),
+ fDateTimeFormat(nullptr),
+ fCapitalizationContext(UDISPCTX_CAPITALIZATION_NONE)
{
LocalPointer<DateIntervalInfo> info(dtItvInfo, status);
LocalPointer<SimpleDateFormat> dtfmt(static_cast<SimpleDateFormat *>(
@@ -643,7 +700,7 @@ DateIntervalFormat::create(const Locale& locale,
UErrorCode& status) {
DateIntervalFormat* f = new DateIntervalFormat(locale, dtitvinf,
skeleton, status);
- if ( f == NULL ) {
+ if ( f == nullptr ) {
status = U_MEMORY_ALLOCATION_ERROR;
delete dtitvinf;
} else if ( U_FAILURE(status) ) {
@@ -733,7 +790,7 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
/* the difference between time skeleton and normalizedTimeSkeleton are:
* 1. (Formerly, normalized time skeleton folded 'H' to 'h'; no longer true)
- * 2. 'a' is omitted in normalized time skeleton.
+ * 2. (Formerly, 'a' was omitted in normalized time skeleton; this is now handled elsewhere)
* 3. there is only one appearance for 'h' or 'H', 'm','v', 'z' in normalized
* time skeleton
*
@@ -742,7 +799,8 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
* 2. 'E' and 'EE' are normalized into 'EEE'
* 3. 'MM' is normalized into 'M'
*/
- getDateTimeSkeleton(fSkeleton, dateSkeleton, normalizedDateSkeleton,
+ UnicodeString convertedSkeleton = normalizeHourMetacharacters(fSkeleton);
+ getDateTimeSkeleton(convertedSkeleton, dateSkeleton, normalizedDateSkeleton,
timeSkeleton, normalizedTimeSkeleton);
#ifdef DTITVFMT_DEBUG
@@ -760,7 +818,7 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
// with the time interval.
// The date/time pattern ( such as {0} {1} ) is saved in
// calendar, that is why need to get the CalendarData here.
- LocalUResourceBundlePointer dateTimePatternsRes(ures_open(NULL, locale.getBaseName(), &status));
+ LocalUResourceBundlePointer dateTimePatternsRes(ures_open(nullptr, locale.getBaseName(), &status));
ures_getByKey(dateTimePatternsRes.getAlias(), gCalendarTag,
dateTimePatternsRes.getAlias(), &status);
ures_getByKeyWithFallback(dateTimePatternsRes.getAlias(), gGregorianTag,
@@ -775,6 +833,10 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
&dateTimeFormatLength, &status);
if ( U_SUCCESS(status) && dateTimeFormatLength >= 3 ) {
fDateTimeFormat = new UnicodeString(dateTimeFormat, dateTimeFormatLength);
+ if (fDateTimeFormat == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
}
}
@@ -798,9 +860,9 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
// the first part of the pattern is empty,
// the second part of the pattern is the full-pattern
// should be used in fall-back.
- setPatternInfo(UCAL_DATE, NULL, &pattern, fInfo->getDefaultOrder());
- setPatternInfo(UCAL_MONTH, NULL, &pattern, fInfo->getDefaultOrder());
- setPatternInfo(UCAL_YEAR, NULL, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(UCAL_DATE, nullptr, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(UCAL_MONTH, nullptr, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(UCAL_YEAR, nullptr, &pattern, fInfo->getDefaultOrder());
} else {
// TODO: fall back
}
@@ -824,9 +886,9 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
// the first part of the pattern is empty,
// the second part of the pattern is the full-pattern
// should be used in fall-back.
- setPatternInfo(UCAL_DATE, NULL, &pattern, fInfo->getDefaultOrder());
- setPatternInfo(UCAL_MONTH, NULL, &pattern, fInfo->getDefaultOrder());
- setPatternInfo(UCAL_YEAR, NULL, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(UCAL_DATE, nullptr, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(UCAL_MONTH, nullptr, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(UCAL_YEAR, nullptr, &pattern, fInfo->getDefaultOrder());
} else {
/* if both present,
* 1) when the year, month, or day differs,
@@ -861,7 +923,7 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
* range expression for the time.
*/
- if ( fDateTimeFormat == NULL ) {
+ if ( fDateTimeFormat == nullptr ) {
// earlier failure getting dateTimeFormat
return;
}
@@ -877,6 +939,91 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
+UnicodeString
+DateIntervalFormat::normalizeHourMetacharacters(const UnicodeString& skeleton) const {
+ UnicodeString result = skeleton;
+
+ UChar hourMetachar = u'\0';
+ int32_t metacharStart = 0;
+ int32_t metacharCount = 0;
+ for (int32_t i = 0; i < result.length(); i++) {
+ UChar c = result[i];
+ if (c == LOW_J || c == CAP_J || c == CAP_C) {
+ if (hourMetachar == u'\0') {
+ hourMetachar = c;
+ metacharStart = i;
+ }
+ ++metacharCount;
+ } else {
+ if (hourMetachar != u'\0') {
+ break;
+ }
+ }
+ }
+
+ if (hourMetachar != u'\0') {
+ UErrorCode err = U_ZERO_ERROR;
+ UChar hourChar = CAP_H;
+ UChar dayPeriodChar = LOW_A;
+ UnicodeString convertedPattern = DateFormat::getBestPattern(fLocale, UnicodeString(hourMetachar), err);
+
+ if (U_SUCCESS(err)) {
+ // strip literal text from the pattern (so literal characters don't get mistaken for pattern
+ // characters-- such as the 'h' in 'Uhr' in Germam)
+ int32_t firstQuotePos;
+ while ((firstQuotePos = convertedPattern.indexOf(u'\'')) != -1) {
+ int32_t secondQuotePos = convertedPattern.indexOf(u'\'', firstQuotePos + 1);
+ if (secondQuotePos == -1) {
+ secondQuotePos = firstQuotePos;
+ }
+ convertedPattern.replace(firstQuotePos, (secondQuotePos - firstQuotePos) + 1, UnicodeString());
+ }
+
+ if (convertedPattern.indexOf(LOW_H) != -1) {
+ hourChar = LOW_H;
+ } else if (convertedPattern.indexOf(CAP_K) != -1) {
+ hourChar = CAP_K;
+ } else if (convertedPattern.indexOf(LOW_K) != -1) {
+ hourChar = LOW_K;
+ }
+
+ if (convertedPattern.indexOf(LOW_B) != -1) {
+ dayPeriodChar = LOW_B;
+ } else if (convertedPattern.indexOf(CAP_B) != -1) {
+ dayPeriodChar = CAP_B;
+ }
+ }
+
+ if (hourChar == CAP_H || hourChar == LOW_K) {
+ result.replace(metacharStart, metacharCount, hourChar);
+ } else {
+ UnicodeString hourAndDayPeriod(hourChar);
+ switch (metacharCount) {
+ case 1:
+ case 2:
+ default:
+ hourAndDayPeriod.append(UnicodeString(dayPeriodChar));
+ break;
+ case 3:
+ case 4:
+ for (int32_t i = 0; i < 4; i++) {
+ hourAndDayPeriod.append(dayPeriodChar);
+ }
+ break;
+ case 5:
+ case 6:
+ for (int32_t i = 0; i < 5; i++) {
+ hourAndDayPeriod.append(dayPeriodChar);
+ }
+ break;
+ }
+ result.replace(metacharStart, metacharCount, hourAndDayPeriod);
+ }
+ }
+ return result;
+}
+
+
void U_EXPORT2
DateIntervalFormat::getDateTimeSkeleton(const UnicodeString& skeleton,
UnicodeString& dateSkeleton,
@@ -889,11 +1036,10 @@ DateIntervalFormat::getDateTimeSkeleton(const UnicodeString& skeleton,
int32_t dCount = 0;
int32_t MCount = 0;
int32_t yCount = 0;
- int32_t hCount = 0;
- int32_t HCount = 0;
int32_t mCount = 0;
int32_t vCount = 0;
int32_t zCount = 0;
+ UChar hourChar = u'\0';
int32_t i;
for (i = 0; i < skeleton.length(); ++i) {
@@ -934,17 +1080,14 @@ DateIntervalFormat::getDateTimeSkeleton(const UnicodeString& skeleton,
normalizedDateSkeleton.append(ch);
dateSkeleton.append(ch);
break;
- case LOW_A:
- // 'a' is implicitly handled
- timeSkeleton.append(ch);
- break;
case LOW_H:
- timeSkeleton.append(ch);
- ++hCount;
- break;
case CAP_H:
+ case LOW_K:
+ case CAP_K:
timeSkeleton.append(ch);
- ++HCount;
+ if (hourChar == u'\0') {
+ hourChar = ch;
+ }
break;
case LOW_M:
timeSkeleton.append(ch);
@@ -958,14 +1101,15 @@ DateIntervalFormat::getDateTimeSkeleton(const UnicodeString& skeleton,
++vCount;
timeSkeleton.append(ch);
break;
+ case LOW_A:
case CAP_V:
case CAP_Z:
- case LOW_K:
- case CAP_K:
case LOW_J:
case LOW_S:
case CAP_S:
case CAP_A:
+ case LOW_B:
+ case CAP_B:
timeSkeleton.append(ch);
normalizedTimeSkeleton.append(ch);
break;
@@ -1001,11 +1145,8 @@ DateIntervalFormat::getDateTimeSkeleton(const UnicodeString& skeleton,
}
/* generate normalized form for time */
- if ( HCount != 0 ) {
- normalizedTimeSkeleton.append(CAP_H);
- }
- else if ( hCount != 0 ) {
- normalizedTimeSkeleton.append(LOW_H);
+ if ( hourChar != u'\0' ) {
+ normalizedTimeSkeleton.append(hourChar);
}
if ( mCount != 0 ) {
normalizedTimeSkeleton.append(LOW_M);
@@ -1071,16 +1212,16 @@ DateIntervalFormat::setSeparateDateTimePtn(
int8_t differenceInfo = 0;
const UnicodeString* bestSkeleton = fInfo->getBestSkeleton(*skeleton,
differenceInfo);
- /* best skeleton could be NULL.
+ /* best skeleton could be nullptr.
For example: in "ca" resource file,
interval format is defined as following
intervalFormats{
fallback{"{0} - {1}"}
}
there is no skeletons/interval patterns defined,
- and the best skeleton match could be NULL
+ and the best skeleton match could be nullptr
*/
- if ( bestSkeleton == NULL ) {
+ if ( bestSkeleton == nullptr ) {
return false;
}
@@ -1091,11 +1232,13 @@ DateIntervalFormat::setSeparateDateTimePtn(
status = U_ZERO_ERROR;
fDatePattern = new UnicodeString(DateFormat::getBestPattern(
fLocale, dateSkeleton, status));
+ // no way to report OOM. :(
}
if ( timeSkeleton.length() != 0) {
status = U_ZERO_ERROR;
fTimePattern = new UnicodeString(DateFormat::getBestPattern(
fLocale, timeSkeleton, status));
+ // no way to report OOM. :(
}
// difference:
@@ -1151,7 +1294,7 @@ DateIntervalFormat::setFallbackPattern(UCalendarDateFields field,
if ( U_FAILURE(status) ) {
return;
}
- setPatternInfo(field, NULL, &pattern, fInfo->getDefaultOrder());
+ setPatternInfo(field, nullptr, &pattern, fInfo->getDefaultOrder());
}
@@ -1279,7 +1422,11 @@ DateIntervalFormat::setIntervalPattern(UCalendarDateFields field,
if ( field == UCAL_AM_PM ) {
fInfo->getIntervalPattern(*bestSkeleton, UCAL_HOUR, pattern,status);
if ( !pattern.isEmpty() ) {
- setIntervalPattern(field, pattern);
+ UBool suppressDayPeriodField = fSkeleton.indexOf(CAP_J) != -1;
+ UnicodeString adjustIntervalPattern;
+ adjustFieldWidth(*skeleton, *bestSkeleton, pattern, differenceInfo,
+ suppressDayPeriodField, adjustIntervalPattern);
+ setIntervalPattern(field, adjustIntervalPattern);
}
return false;
}
@@ -1311,10 +1458,11 @@ DateIntervalFormat::setIntervalPattern(UCalendarDateFields field,
}
}
if ( !pattern.isEmpty() ) {
- if ( differenceInfo != 0 ) {
+ UBool suppressDayPeriodField = fSkeleton.indexOf(CAP_J) != -1;
+ if ( differenceInfo != 0 || suppressDayPeriodField) {
UnicodeString adjustIntervalPattern;
adjustFieldWidth(*skeleton, *bestSkeleton, pattern, differenceInfo,
- adjustIntervalPattern);
+ suppressDayPeriodField, adjustIntervalPattern);
setIntervalPattern(field, adjustIntervalPattern);
} else {
setIntervalPattern(field, pattern);
@@ -1401,6 +1549,7 @@ DateIntervalFormat::splitPatternInto2Part(const UnicodeString& intervalPattern)
return (i - count);
}
+// The following is only called from fallbackFormat, i.e. within the gFormatterMutex lock
void DateIntervalFormat::fallbackFormatRange(
Calendar& fromCalendar,
Calendar& toCalendar,
@@ -1417,12 +1566,15 @@ void DateIntervalFormat::fallbackFormatRange(
int32_t offsets[2];
UnicodeString patternBody = sf.getTextWithNoArguments(offsets, 2);
+ UErrorCode tempStatus = U_ZERO_ERROR; // for setContext, ignored
// TODO(ICU-20406): Use SimpleFormatter Iterator interface when available.
if (offsets[0] < offsets[1]) {
firstIndex = 0;
appendTo.append(patternBody.tempSubStringBetween(0, offsets[0]));
fDateFormat->_format(fromCalendar, appendTo, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[0], offsets[1]));
+ // No capitalization for second part of interval
+ fDateFormat->setContext(UDISPCTX_CAPITALIZATION_NONE, tempStatus);
fDateFormat->_format(toCalendar, appendTo, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[1]));
} else {
@@ -1430,11 +1582,14 @@ void DateIntervalFormat::fallbackFormatRange(
appendTo.append(patternBody.tempSubStringBetween(0, offsets[1]));
fDateFormat->_format(toCalendar, appendTo, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[1], offsets[0]));
+ // No capitalization for second part of interval
+ fDateFormat->setContext(UDISPCTX_CAPITALIZATION_NONE, tempStatus);
fDateFormat->_format(fromCalendar, appendTo, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[0]));
}
}
+// The following is only called from formatImpl, i.e. within the gFormatterMutex lock
UnicodeString&
DateIntervalFormat::fallbackFormat(Calendar& fromCalendar,
Calendar& toCalendar,
@@ -1459,6 +1614,7 @@ DateIntervalFormat::fallbackFormat(Calendar& fromCalendar,
UnicodeString fullPattern; // for saving the pattern in fDateFormat
fDateFormat->toPattern(fullPattern); // save current pattern, restore later
+ UErrorCode tempStatus = U_ZERO_ERROR; // for setContext, ignored
// {0} is time range
// {1} is single date portion
// TODO(ICU-20406): Use SimpleFormatter Iterator interface when available.
@@ -1468,6 +1624,8 @@ DateIntervalFormat::fallbackFormat(Calendar& fromCalendar,
fallbackFormatRange(fromCalendar, toCalendar, appendTo, firstIndex, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[0], offsets[1]));
fDateFormat->applyPattern(*fDatePattern);
+ // No capitalization for second portion
+ fDateFormat->setContext(UDISPCTX_CAPITALIZATION_NONE, tempStatus);
fDateFormat->_format(fromCalendar, appendTo, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[1]));
} else {
@@ -1476,6 +1634,8 @@ DateIntervalFormat::fallbackFormat(Calendar& fromCalendar,
fDateFormat->_format(fromCalendar, appendTo, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[1], offsets[0]));
fDateFormat->applyPattern(*fTimePattern);
+ // No capitalization for second portion
+ fDateFormat->setContext(UDISPCTX_CAPITALIZATION_NONE, tempStatus);
fallbackFormatRange(fromCalendar, toCalendar, appendTo, firstIndex, fphandler, status);
appendTo.append(patternBody.tempSubStringBetween(offsets[0]));
}
@@ -1506,6 +1666,7 @@ DateIntervalFormat::adjustFieldWidth(const UnicodeString& inputSkeleton,
const UnicodeString& bestMatchSkeleton,
const UnicodeString& bestIntervalPattern,
int8_t differenceInfo,
+ UBool suppressDayPeriodField,
UnicodeString& adjustedPtn) {
adjustedPtn = bestIntervalPattern;
int32_t inputSkeletonFieldWidth[] =
@@ -1532,19 +1693,40 @@ DateIntervalFormat::adjustFieldWidth(const UnicodeString& inputSkeleton,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
+ const int8_t PATTERN_CHAR_BASE = 0x41;
+
DateIntervalInfo::parseSkeleton(inputSkeleton, inputSkeletonFieldWidth);
DateIntervalInfo::parseSkeleton(bestMatchSkeleton, bestMatchSkeletonFieldWidth);
- if ( differenceInfo == 2 ) {
- adjustedPtn.findAndReplace(UnicodeString((UChar)0x76 /* v */),
- UnicodeString((UChar)0x7a /* z */));
+ if (suppressDayPeriodField) {
+ findReplaceInPattern(adjustedPtn, UnicodeString(LOW_A), UnicodeString());
+ findReplaceInPattern(adjustedPtn, UnicodeString(" "), UnicodeString(" "));
+ adjustedPtn.trim();
}
+ if ( differenceInfo == 2 ) {
+ if (inputSkeleton.indexOf(LOW_Z) != -1) {
+ findReplaceInPattern(adjustedPtn, UnicodeString(LOW_V), UnicodeString(LOW_Z));
+ }
+ if (inputSkeleton.indexOf(CAP_K) != -1) {
+ findReplaceInPattern(adjustedPtn, UnicodeString(LOW_H), UnicodeString(CAP_K));
+ }
+ if (inputSkeleton.indexOf(LOW_K) != -1) {
+ findReplaceInPattern(adjustedPtn, UnicodeString(CAP_H), UnicodeString(LOW_K));
+ }
+ if (inputSkeleton.indexOf(LOW_B) != -1) {
+ findReplaceInPattern(adjustedPtn, UnicodeString(LOW_A), UnicodeString(LOW_B));
+ }
+ }
+ if (adjustedPtn.indexOf(LOW_A) != -1 && bestMatchSkeletonFieldWidth[LOW_A - PATTERN_CHAR_BASE] == 0) {
+ bestMatchSkeletonFieldWidth[LOW_A - PATTERN_CHAR_BASE] = 1;
+ }
+ if (adjustedPtn.indexOf(LOW_B) != -1 && bestMatchSkeletonFieldWidth[LOW_B - PATTERN_CHAR_BASE] == 0) {
+ bestMatchSkeletonFieldWidth[LOW_B - PATTERN_CHAR_BASE] = 1;
+ }
UBool inQuote = false;
UChar prevCh = 0;
int32_t count = 0;
- const int8_t PATTERN_CHAR_BASE = 0x41;
-
// loop through the pattern string character by character
int32_t adjustedPtnLength = adjustedPtn.length();
int32_t i;
@@ -1610,6 +1792,39 @@ DateIntervalFormat::adjustFieldWidth(const UnicodeString& inputSkeleton,
}
}
+void
+DateIntervalFormat::findReplaceInPattern(UnicodeString& targetString,
+ const UnicodeString& strToReplace,
+ const UnicodeString& strToReplaceWith) {
+ int32_t firstQuoteIndex = targetString.indexOf(u'\'');
+ if (firstQuoteIndex == -1) {
+ targetString.findAndReplace(strToReplace, strToReplaceWith);
+ } else {
+ UnicodeString result;
+ UnicodeString source = targetString;
+
+ while (firstQuoteIndex >= 0) {
+ int32_t secondQuoteIndex = source.indexOf(u'\'', firstQuoteIndex + 1);
+ if (secondQuoteIndex == -1) {
+ secondQuoteIndex = source.length() - 1;
+ }
+
+ UnicodeString unquotedText(source, 0, firstQuoteIndex);
+ UnicodeString quotedText(source, firstQuoteIndex, secondQuoteIndex - firstQuoteIndex + 1);
+
+ unquotedText.findAndReplace(strToReplace, strToReplaceWith);
+ result += unquotedText;
+ result += quotedText;
+
+ source.remove(0, secondQuoteIndex + 1);
+ firstQuoteIndex = source.indexOf(u'\'');
+ }
+ source.findAndReplace(strToReplace, strToReplaceWith);
+ result += source;
+ targetString = result;
+ }
+}
+
void
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
index 35ee8c16261..39fd44a392d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
@@ -50,6 +50,7 @@ U_NAMESPACE_BEGIN
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateIntervalInfo)
static const char gCalendarTag[]="calendar";
+static const char gGenericTag[]="generic";
static const char gGregorianTag[]="gregorian";
static const char gIntervalDateTimePatternTag[]="intervalFormats";
static const char gFallbackPatternTag[]="fallback";
@@ -65,7 +66,7 @@ static const UChar gDefaultFallbackPattern[] = {LEFT_CURLY_BRACKET, DIGIT_ZERO,
DateIntervalInfo::DateIntervalInfo(UErrorCode& status)
: fFallbackIntervalPattern(gDefaultFallbackPattern),
fFirstDateInPtnIsLaterDate(false),
- fIntervalPatterns(NULL)
+ fIntervalPatterns(nullptr)
{
fIntervalPatterns = initHash(status);
}
@@ -75,7 +76,7 @@ DateIntervalInfo::DateIntervalInfo(UErrorCode& status)
DateIntervalInfo::DateIntervalInfo(const Locale& locale, UErrorCode& status)
: fFallbackIntervalPattern(gDefaultFallbackPattern),
fFirstDateInPtnIsLaterDate(false),
- fIntervalPatterns(NULL)
+ fIntervalPatterns(nullptr)
{
initializeData(locale, status);
}
@@ -125,7 +126,7 @@ DateIntervalInfo::setFallbackIntervalPattern(
DateIntervalInfo::DateIntervalInfo(const DateIntervalInfo& dtitvinf)
: UObject(dtitvinf),
- fIntervalPatterns(NULL)
+ fIntervalPatterns(nullptr)
{
*this = dtitvinf;
}
@@ -160,7 +161,7 @@ DateIntervalInfo::clone() const {
DateIntervalInfo::~DateIntervalInfo() {
deleteHash(fIntervalPatterns);
- fIntervalPatterns = NULL;
+ fIntervalPatterns = nullptr;
}
@@ -188,7 +189,7 @@ DateIntervalInfo::getIntervalPattern(const UnicodeString& skeleton,
}
const UnicodeString* patternsOfOneSkeleton = (UnicodeString*) fIntervalPatterns->get(skeleton);
- if ( patternsOfOneSkeleton != NULL ) {
+ if ( patternsOfOneSkeleton != nullptr ) {
IntervalPatternIndex index = calendarFieldToIntervalIndex(field, status);
if ( U_FAILURE(status) ) {
return result;
@@ -338,6 +339,9 @@ struct DateIntervalInfo::DateIntervalSink : public ResourceSink {
return UCAL_DATE;
} else if (c0 == 'a') {
return UCAL_AM_PM;
+ } else if (c0 == 'B') {
+ // TODO: Using AM/PM as a proxy for flexible day period isn't really correct, but it's close
+ return UCAL_AM_PM;
} else if (c0 == 'h' || c0 == 'H') {
return UCAL_HOUR;
} else if (c0 == 'm') {
@@ -362,7 +366,7 @@ struct DateIntervalInfo::DateIntervalSink : public ResourceSink {
UnicodeString* patternsOfOneSkeleton =
(UnicodeString*)(dateIntervalInfo.fIntervalPatterns->get(skeleton));
- if (patternsOfOneSkeleton == NULL || patternsOfOneSkeleton[index].isEmpty()) {
+ if (patternsOfOneSkeleton == nullptr || patternsOfOneSkeleton[index].isEmpty()) {
UnicodeString pattern = value.getUnicodeString(errorCode);
dateIntervalInfo.setIntervalPatternInternally(skeleton, lrgDiffCalUnit,
pattern, errorCode);
@@ -397,8 +401,8 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& status)
char calendarType[ULOC_KEYWORDS_CAPACITY]; // to be filled in with the type to use, if all goes well
char localeWithCalendarKey[ULOC_LOCALE_IDENTIFIER_CAPACITY];
// obtain a locale that always has the calendar key value that should be used
- (void)ures_getFunctionalEquivalent(localeWithCalendarKey, ULOC_LOCALE_IDENTIFIER_CAPACITY, NULL,
- "calendar", "calendar", locName, NULL, FALSE, &status);
+ (void)ures_getFunctionalEquivalent(localeWithCalendarKey, ULOC_LOCALE_IDENTIFIER_CAPACITY, nullptr,
+ "calendar", "calendar", locName, nullptr, FALSE, &status);
localeWithCalendarKey[ULOC_LOCALE_IDENTIFIER_CAPACITY-1] = 0; // ensure null termination
// now get the calendar key value from that locale
int32_t calendarTypeLen = uloc_getKeywordValue(localeWithCalendarKey, "calendar", calendarType,
@@ -410,25 +414,47 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& status)
// Instantiate the resource bundles
UResourceBundle *rb, *calBundle;
- rb = ures_open(NULL, locName, &status);
+ rb = ures_open(nullptr, locName, &status);
if (U_FAILURE(status)) {
return;
}
- calBundle = ures_getByKeyWithFallback(rb, gCalendarTag, NULL, &status);
+ calBundle = ures_getByKeyWithFallback(rb, gCalendarTag, nullptr, &status);
if (U_SUCCESS(status)) {
UResourceBundle *calTypeBundle, *itvDtPtnResource;
// Get the fallback pattern
- const UChar* resStr;
+ const UChar* resStr = nullptr;
int32_t resStrLen = 0;
- calTypeBundle = ures_getByKeyWithFallback(calBundle, calendarTypeToUse, NULL, &status);
+ calTypeBundle = ures_getByKeyWithFallback(calBundle, calendarTypeToUse, nullptr, &status);
itvDtPtnResource = ures_getByKeyWithFallback(calTypeBundle,
- gIntervalDateTimePatternTag, NULL, &status);
- resStr = ures_getStringByKeyWithFallback(itvDtPtnResource, gFallbackPatternTag,
- &resStrLen, &status);
+ gIntervalDateTimePatternTag, nullptr, &status);
+ // TODO(ICU-20400): After the fixing, we should find the "fallback" from
+ // the rb directly by the path "calendar/${calendar}/intervalFormats/fallback".
if ( U_SUCCESS(status) ) {
+ resStr = ures_getStringByKeyWithFallback(itvDtPtnResource, gFallbackPatternTag,
+ &resStrLen, &status);
+ if ( U_FAILURE(status) ) {
+ // Try to find "fallback" from "generic" to work around the bug in
+ // ures_getByKeyWithFallback
+ UErrorCode localStatus = U_ZERO_ERROR;
+ UResourceBundle *genericCalBundle =
+ ures_getByKeyWithFallback(calBundle, gGenericTag, nullptr, &localStatus);
+ UResourceBundle *genericItvDtPtnResource =
+ ures_getByKeyWithFallback(
+ genericCalBundle, gIntervalDateTimePatternTag, nullptr, &localStatus);
+ resStr = ures_getStringByKeyWithFallback(
+ genericItvDtPtnResource, gFallbackPatternTag, &resStrLen, &localStatus);
+ ures_close(genericItvDtPtnResource);
+ ures_close(genericCalBundle);
+ if ( U_SUCCESS(localStatus) ) {
+ status = U_USING_FALLBACK_WARNING;;
+ }
+ }
+ }
+
+ if ( U_SUCCESS(status) && (resStr != nullptr)) {
UnicodeString pattern = UnicodeString(TRUE, resStr, resStrLen);
setFallbackIntervalPattern(pattern, status);
}
@@ -486,8 +512,12 @@ DateIntervalInfo::setIntervalPatternInternally(const UnicodeString& skeleton,
}
UnicodeString* patternsOfOneSkeleton = (UnicodeString*)(fIntervalPatterns->get(skeleton));
UBool emptyHash = false;
- if ( patternsOfOneSkeleton == NULL ) {
+ if ( patternsOfOneSkeleton == nullptr ) {
patternsOfOneSkeleton = new UnicodeString[kIPI_MAX_INDEX];
+ if (patternsOfOneSkeleton == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
emptyHash = true;
}
@@ -567,36 +597,39 @@ DateIntervalInfo::getBestSkeleton(const UnicodeString& skeleton,
const int32_t DIFFERENT_FIELD = 0x1000;
const int32_t STRING_NUMERIC_DIFFERENCE = 0x100;
const int32_t BASE = 0x41;
- const UChar CHAR_V = 0x0076;
- const UChar CHAR_Z = 0x007A;
- // hack for 'v' and 'z'.
- // resource bundle only have time skeletons ending with 'v',
- // but not for time skeletons ending with 'z'.
- UBool replaceZWithV = false;
+ // hack for certain alternate characters
+ // resource bundles only have time skeletons containing 'v', 'h', and 'H'
+ // but not time skeletons containing 'z', 'K', or 'k'
+ // the skeleton may also include 'a' or 'b', which never occur in the resource bundles, so strip them out too
+ UBool replacedAlternateChars = false;
const UnicodeString* inputSkeleton = &skeleton;
UnicodeString copySkeleton;
- if ( skeleton.indexOf(CHAR_Z) != -1 ) {
+ if ( skeleton.indexOf(LOW_Z) != -1 || skeleton.indexOf(LOW_K) != -1 || skeleton.indexOf(CAP_K) != -1 || skeleton.indexOf(LOW_A) != -1 || skeleton.indexOf(LOW_B) != -1 ) {
copySkeleton = skeleton;
- copySkeleton.findAndReplace(UnicodeString(CHAR_Z), UnicodeString(CHAR_V));
+ copySkeleton.findAndReplace(UnicodeString(LOW_Z), UnicodeString(LOW_V));
+ copySkeleton.findAndReplace(UnicodeString(LOW_K), UnicodeString(CAP_H));
+ copySkeleton.findAndReplace(UnicodeString(CAP_K), UnicodeString(LOW_H));
+ copySkeleton.findAndReplace(UnicodeString(LOW_A), UnicodeString());
+ copySkeleton.findAndReplace(UnicodeString(LOW_B), UnicodeString());
inputSkeleton = &copySkeleton;
- replaceZWithV = true;
+ replacedAlternateChars = true;
}
parseSkeleton(*inputSkeleton, inputSkeletonFieldWidth);
int32_t bestDistance = MAX_POSITIVE_INT;
- const UnicodeString* bestSkeleton = NULL;
+ const UnicodeString* bestSkeleton = nullptr;
// 0 means exact the same skeletons;
// 1 means having the same field, but with different length,
- // 2 means only z/v differs
+ // 2 means only z/v, h/K, or H/k differs
// -1 means having different field.
bestMatchDistanceInfo = 0;
int8_t fieldLength = UPRV_LENGTHOF(skeletonFieldWidth);
int32_t pos = UHASH_FIRST;
- const UHashElement* elem = NULL;
- while ( (elem = fIntervalPatterns->nextElement(pos)) != NULL ) {
+ const UHashElement* elem = nullptr;
+ while ( (elem = fIntervalPatterns->nextElement(pos)) != nullptr ) {
const UHashTok keyTok = elem->key;
UnicodeString* newSkeleton = (UnicodeString*)keyTok.pointer;
#ifdef DTITVINF_DEBUG
@@ -645,7 +678,7 @@ DateIntervalInfo::getBestSkeleton(const UnicodeString& skeleton,
break;
}
}
- if ( replaceZWithV && bestMatchDistanceInfo != -1 ) {
+ if ( replacedAlternateChars && bestMatchDistanceInfo != -1 ) {
bestMatchDistanceInfo = 2;
}
return bestSkeleton;
@@ -688,6 +721,9 @@ DateIntervalInfo::calendarFieldToIntervalIndex(UCalendarDateFields field,
case UCAL_SECOND:
index = kIPI_SECOND;
break;
+ case UCAL_MILLISECOND:
+ index = kIPI_MILLISECOND;
+ break;
default:
status = U_ILLEGAL_ARGUMENT_ERROR;
}
@@ -699,12 +735,12 @@ DateIntervalInfo::calendarFieldToIntervalIndex(UCalendarDateFields field,
void
DateIntervalInfo::deleteHash(Hashtable* hTable)
{
- if ( hTable == NULL ) {
+ if ( hTable == nullptr ) {
return;
}
int32_t pos = UHASH_FIRST;
- const UHashElement* element = NULL;
- while ( (element = hTable->nextElement(pos)) != NULL ) {
+ const UHashElement* element = nullptr;
+ while ( (element = hTable->nextElement(pos)) != nullptr ) {
const UHashTok valueTok = element->value;
const UnicodeString* value = (UnicodeString*)valueTok.pointer;
delete[] value;
@@ -742,16 +778,16 @@ U_CDECL_END
Hashtable*
DateIntervalInfo::initHash(UErrorCode& status) {
if ( U_FAILURE(status) ) {
- return NULL;
+ return nullptr;
}
Hashtable* hTable;
- if ( (hTable = new Hashtable(FALSE, status)) == NULL ) {
+ if ( (hTable = new Hashtable(FALSE, status)) == nullptr ) {
status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
+ return nullptr;
}
if ( U_FAILURE(status) ) {
delete hTable;
- return NULL;
+ return nullptr;
}
hTable->setValueComparator(dtitvinfHashTableValueComparator);
return hTable;
@@ -766,14 +802,18 @@ DateIntervalInfo::copyHash(const Hashtable* source,
return;
}
int32_t pos = UHASH_FIRST;
- const UHashElement* element = NULL;
+ const UHashElement* element = nullptr;
if ( source ) {
- while ( (element = source->nextElement(pos)) != NULL ) {
+ while ( (element = source->nextElement(pos)) != nullptr ) {
const UHashTok keyTok = element->key;
const UnicodeString* key = (UnicodeString*)keyTok.pointer;
const UHashTok valueTok = element->value;
const UnicodeString* value = (UnicodeString*)valueTok.pointer;
UnicodeString* copy = new UnicodeString[kIPI_MAX_INDEX];
+ if (copy == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
int8_t i;
for ( i = 0; i < kIPI_MAX_INDEX; ++i ) {
copy[i] = value[i];
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
index c5f8618a6d6..21f2362d171 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
@@ -311,6 +311,16 @@ DateTimePatternGenerator::createInstance(const Locale& locale, UErrorCode& statu
return U_SUCCESS(status) ? result.orphan() : nullptr;
}
+DateTimePatternGenerator* U_EXPORT2
+DateTimePatternGenerator::createInstanceNoStdPat(const Locale& locale, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ LocalPointer<DateTimePatternGenerator> result(
+ new DateTimePatternGenerator(locale, status, true), status);
+ return U_SUCCESS(status) ? result.orphan() : nullptr;
+}
+
DateTimePatternGenerator* U_EXPORT2
DateTimePatternGenerator::createEmptyInstance(UErrorCode& status) {
if (U_FAILURE(status)) {
@@ -324,6 +334,7 @@ DateTimePatternGenerator::createEmptyInstance(UErrorCode& status) {
DateTimePatternGenerator::DateTimePatternGenerator(UErrorCode &status) :
skipMatcher(nullptr),
fAvailableFormatKeyHash(nullptr),
+ fDefaultHourFormatChar(0),
internalErrorCode(U_ZERO_ERROR)
{
fp = new FormatParser();
@@ -335,9 +346,10 @@ DateTimePatternGenerator::DateTimePatternGenerator(UErrorCode &status) :
}
}
-DateTimePatternGenerator::DateTimePatternGenerator(const Locale& locale, UErrorCode &status) :
+DateTimePatternGenerator::DateTimePatternGenerator(const Locale& locale, UErrorCode &status, UBool skipStdPatterns) :
skipMatcher(nullptr),
fAvailableFormatKeyHash(nullptr),
+ fDefaultHourFormatChar(0),
internalErrorCode(U_ZERO_ERROR)
{
fp = new FormatParser();
@@ -348,7 +360,7 @@ DateTimePatternGenerator::DateTimePatternGenerator(const Locale& locale, UErrorC
internalErrorCode = status = U_MEMORY_ALLOCATION_ERROR;
}
else {
- initData(locale, status);
+ initData(locale, status, skipStdPatterns);
}
}
@@ -356,6 +368,7 @@ DateTimePatternGenerator::DateTimePatternGenerator(const DateTimePatternGenerato
UObject(),
skipMatcher(nullptr),
fAvailableFormatKeyHash(nullptr),
+ fDefaultHourFormatChar(0),
internalErrorCode(U_ZERO_ERROR)
{
fp = new FormatParser();
@@ -486,13 +499,15 @@ enum AllowedHourFormat{
} // namespace
void
-DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) {
+DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status, UBool skipStdPatterns) {
//const char *baseLangName = locale.getBaseName(); // unused
skipMatcher = nullptr;
fAvailableFormatKeyHash=nullptr;
addCanonicalItems(status);
- addICUPatterns(locale, status);
+ if (!skipStdPatterns) { // skip to prevent circular dependency when called from SimpleDateFormat::construct
+ addICUPatterns(locale, status);
+ }
addCLDRData(locale, status);
setDateTimeFromCalendar(locale, status);
setDecimalSymbols(locale, status);
@@ -654,6 +669,23 @@ void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErro
int32_t* allowedFormats = getAllowedHourFormatsLangCountry(language, country, status);
+ // We need to check if there is an hour cycle on locale
+ char buffer[8];
+ int32_t count = locale.getKeywordValue("hours", buffer, sizeof(buffer), status);
+
+ fDefaultHourFormatChar = 0;
+ if (U_SUCCESS(status) && count > 0) {
+ if(uprv_strcmp(buffer, "h24") == 0) {
+ fDefaultHourFormatChar = LOW_K;
+ } else if(uprv_strcmp(buffer, "h23") == 0) {
+ fDefaultHourFormatChar = CAP_H;
+ } else if(uprv_strcmp(buffer, "h12") == 0) {
+ fDefaultHourFormatChar = LOW_H;
+ } else if(uprv_strcmp(buffer, "h11") == 0) {
+ fDefaultHourFormatChar = CAP_K;
+ }
+ }
+
// Check if the region has an alias
if (allowedFormats == nullptr) {
UErrorCode localStatus = U_ZERO_ERROR;
@@ -667,13 +699,16 @@ void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErro
if (allowedFormats != nullptr) { // Lookup is successful
// Here allowedFormats points to a list consisting of key for preferredFormat,
// followed by one or more keys for allowedFormats, then followed by ALLOWED_HOUR_FORMAT_UNKNOWN.
- switch (allowedFormats[0]) {
- case ALLOWED_HOUR_FORMAT_h: fDefaultHourFormatChar = LOW_H; break;
- case ALLOWED_HOUR_FORMAT_H: fDefaultHourFormatChar = CAP_H; break;
- case ALLOWED_HOUR_FORMAT_K: fDefaultHourFormatChar = CAP_K; break;
- case ALLOWED_HOUR_FORMAT_k: fDefaultHourFormatChar = LOW_K; break;
- default: fDefaultHourFormatChar = CAP_H; break;
+ if (!fDefaultHourFormatChar) {
+ switch (allowedFormats[0]) {
+ case ALLOWED_HOUR_FORMAT_h: fDefaultHourFormatChar = LOW_H; break;
+ case ALLOWED_HOUR_FORMAT_H: fDefaultHourFormatChar = CAP_H; break;
+ case ALLOWED_HOUR_FORMAT_K: fDefaultHourFormatChar = CAP_K; break;
+ case ALLOWED_HOUR_FORMAT_k: fDefaultHourFormatChar = LOW_K; break;
+ default: fDefaultHourFormatChar = CAP_H; break;
+ }
}
+
for (int32_t i = 0; i < UPRV_LENGTHOF(fAllowedHourFormats); ++i) {
fAllowedHourFormats[i] = allowedFormats[i + 1];
if (fAllowedHourFormats[i] == ALLOWED_HOUR_FORMAT_UNKNOWN) {
@@ -681,12 +716,39 @@ void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErro
}
}
} else { // Lookup failed, twice
- fDefaultHourFormatChar = CAP_H;
+ if (!fDefaultHourFormatChar) {
+ fDefaultHourFormatChar = CAP_H;
+ }
fAllowedHourFormats[0] = ALLOWED_HOUR_FORMAT_H;
fAllowedHourFormats[1] = ALLOWED_HOUR_FORMAT_UNKNOWN;
}
}
+UDateFormatHourCycle
+DateTimePatternGenerator::getDefaultHourCycle(UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return UDAT_HOUR_CYCLE_23;
+ }
+ if (fDefaultHourFormatChar == 0) {
+ // We need to return something, but the caller should ignore it
+ // anyways since the returned status is a failure.
+ status = U_UNSUPPORTED_ERROR;
+ return UDAT_HOUR_CYCLE_23;
+ }
+ switch (fDefaultHourFormatChar) {
+ case CAP_K:
+ return UDAT_HOUR_CYCLE_11;
+ case LOW_H:
+ return UDAT_HOUR_CYCLE_12;
+ case CAP_H:
+ return UDAT_HOUR_CYCLE_23;
+ case LOW_K:
+ return UDAT_HOUR_CYCLE_24;
+ default:
+ UPRV_UNREACHABLE;
+ }
+}
+
UnicodeString
DateTimePatternGenerator::getSkeleton(const UnicodeString& pattern, UErrorCode&
/*status*/) {
@@ -843,7 +905,7 @@ DateTimePatternGenerator::getCalendarTypeToUse(const Locale& locale, CharString&
err = localStatus;
return;
}
- if (calendarTypeLen < ULOC_KEYWORDS_CAPACITY) {
+ if (calendarTypeLen > 0 && calendarTypeLen < ULOC_KEYWORDS_CAPACITY) {
destination.clear().append(calendarType, -1, err);
if (U_FAILURE(err)) { return; }
}
@@ -1479,6 +1541,7 @@ DateTimePatternGenerator::getBestRaw(DateTimeMatcher& source,
UErrorCode &status,
const PtnSkeleton** specifiedSkeletonPtr) {
int32_t bestDistance = 0x7fffffff;
+ int32_t bestMissingFieldMask = -1;
DistanceInfo tempInfo;
const UnicodeString *bestPattern=nullptr;
const PtnSkeleton* specifiedSkeleton=nullptr;
@@ -1492,8 +1555,15 @@ DateTimePatternGenerator::getBestRaw(DateTimeMatcher& source,
continue;
}
int32_t distance=source.getDistance(trial, includeMask, tempInfo);
- if (distance<bestDistance) {
+ // Because we iterate over a map the order is undefined. Can change between implementations,
+ // versions, and will very likely be different between Java and C/C++.
+ // So if we have patterns with the same distance we also look at the missingFieldMask,
+ // and we favour the smallest one. Because the field is a bitmask this technically means we
+ // favour differences in the "least significant fields". For example we prefer the one with differences
+ // in seconds field vs one with difference in the hours field.
+ if (distance<bestDistance || (distance==bestDistance && bestMissingFieldMask<tempInfo.missingFieldMask)) {
bestDistance=distance;
+ bestMissingFieldMask=tempInfo.missingFieldMask;
bestPattern=patternMap->getPatternFromSkeleton(*trial.getSkeletonPtr(), &specifiedSkeleton);
missingFields->setTo(tempInfo);
if (distance==0) {
@@ -1546,14 +1616,16 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern,
dtMatcher->skeleton.original.appendFieldTo(UDATPG_FRACTIONAL_SECOND_FIELD, field);
} else if (dtMatcher->skeleton.type[typeValue]!=0) {
// Here:
- // - "reqField" is the field from the originally requested skeleton, with length
- // "reqFieldLen".
+ // - "reqField" is the field from the originally requested skeleton after replacement
+ // of metacharacters 'j', 'C' and 'J', with length "reqFieldLen".
// - "field" is the field from the found pattern.
//
// The adjusted field should consist of characters from the originally requested
- // skeleton, except in the case of UDATPG_HOUR_FIELD or UDATPG_MONTH_FIELD or
+ // skeleton, except in the case of UDATPG_MONTH_FIELD or
// UDATPG_WEEKDAY_FIELD or UDATPG_YEAR_FIELD, in which case it should consist
- // of characters from the found pattern.
+ // of characters from the found pattern. In some cases of UDATPG_HOUR_FIELD,
+ // there is adjustment following the "defaultHourFormatChar". There is explanation
+ // how it is done below.
//
// The length of the adjusted field (adjFieldLen) should match that in the originally
// requested skeleton, except that in the following cases the length of the adjusted field
@@ -1591,9 +1663,28 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern,
&& (typeValue!= UDATPG_YEAR_FIELD || reqFieldChar==CAP_Y))
? reqFieldChar
: field.charAt(0);
- if (typeValue == UDATPG_HOUR_FIELD && (flags & kDTPGSkeletonUsesCapJ) != 0) {
- c = fDefaultHourFormatChar;
+ if (typeValue == UDATPG_HOUR_FIELD && fDefaultHourFormatChar != 0) {
+ // The adjustment here is required to match spec (https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-hour).
+ // It is necessary to match the hour-cycle preferred by the Locale.
+ // Given that, we need to do the following adjustments:
+ // 1. When hour-cycle is h11 it should replace 'h' by 'K'.
+ // 2. When hour-cycle is h23 it should replace 'H' by 'k'.
+ // 3. When hour-cycle is h24 it should replace 'k' by 'H'.
+ // 4. When hour-cycle is h12 it should replace 'K' by 'h'.
+
+ if ((flags & kDTPGSkeletonUsesCapJ) != 0 || reqFieldChar == fDefaultHourFormatChar) {
+ c = fDefaultHourFormatChar;
+ } else if (reqFieldChar == LOW_H && fDefaultHourFormatChar == CAP_K) {
+ c = CAP_K;
+ } else if (reqFieldChar == CAP_H && fDefaultHourFormatChar == LOW_K) {
+ c = LOW_K;
+ } else if (reqFieldChar == LOW_K && fDefaultHourFormatChar == CAP_H) {
+ c = CAP_H;
+ } else if (reqFieldChar == CAP_K && fDefaultHourFormatChar == LOW_H) {
+ c = LOW_H;
+ }
}
+
field.remove();
for (int32_t j=adjFieldLen; j>0; --j) {
field += c;
@@ -2118,6 +2209,11 @@ DateTimeMatcher::DateTimeMatcher(const DateTimeMatcher& other) {
copyFrom(other.skeleton);
}
+DateTimeMatcher& DateTimeMatcher::operator=(const DateTimeMatcher& other) {
+ copyFrom(other.skeleton);
+ return *this;
+}
+
void
DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp) {
@@ -2162,6 +2258,33 @@ DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton
}
skeletonResult.type[field] = subField;
}
+
+ // #20739, we have a skeleton with minutes and milliseconds, but no seconds
+ //
+ // Theoretically we would need to check and fix all fields with "gaps":
+ // for example year-day (no month), month-hour (no day), and so on, All the possible field combinations.
+ // Plus some smartness: year + hour => should we add month, or add day-of-year?
+ // What about month + day-of-week, or month + am/pm indicator.
+ // I think beyond a certain point we should not try to fix bad developer input and try guessing what they mean.
+ // Garbage in, garbage out.
+ if (!skeletonResult.original.isFieldEmpty(UDATPG_MINUTE_FIELD)
+ && !skeletonResult.original.isFieldEmpty(UDATPG_FRACTIONAL_SECOND_FIELD)
+ && skeletonResult.original.isFieldEmpty(UDATPG_SECOND_FIELD)) {
+ // Force the use of seconds
+ for (i = 0; dtTypes[i].patternChar != 0; i++) {
+ if (dtTypes[i].field == UDATPG_SECOND_FIELD) {
+ // first entry for UDATPG_SECOND_FIELD
+ skeletonResult.original.populate(UDATPG_SECOND_FIELD, dtTypes[i].patternChar, dtTypes[i].minLen);
+ skeletonResult.baseOriginal.populate(UDATPG_SECOND_FIELD, dtTypes[i].patternChar, dtTypes[i].minLen);
+ // We add value.length, same as above, when type is first initialized.
+ // The value we want to "fake" here is "s", and 1 means "s".length()
+ int16_t subField = dtTypes[i].type;
+ skeletonResult.type[UDATPG_SECOND_FIELD] = (subField > 0) ? subField + 1 : subField;
+ break;
+ }
+ }
+ }
+
// #13183, handle special behavior for day period characters (a, b, B)
if (!skeletonResult.original.isFieldEmpty(UDATPG_HOUR_FIELD)) {
if (skeletonResult.original.getFieldChar(UDATPG_HOUR_FIELD)==LOW_H || skeletonResult.original.getFieldChar(UDATPG_HOUR_FIELD)==CAP_K) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h b/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
index 95219f0ba25..9b9442d5787 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
@@ -195,7 +195,7 @@ public:
void getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex);
UBool isPatternSeparator(const UnicodeString& field) const;
static UBool isQuoteLiteral(const UnicodeString& s);
- static int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, TRUE); }
+ static int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, true); }
static int32_t getCanonicalIndex(const UnicodeString& s, UBool strict);
private:
@@ -238,6 +238,7 @@ public:
int32_t getDistance(const DateTimeMatcher& other, int32_t includeMask, DistanceInfo& distanceInfo) const;
DateTimeMatcher();
DateTimeMatcher(const DateTimeMatcher& other);
+ DateTimeMatcher& operator=(const DateTimeMatcher& other);
virtual ~DateTimeMatcher();
int32_t getFieldMask() const;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp b/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
index dbfd3c26bad..ea27246f16e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
@@ -895,7 +895,7 @@ U_NAMESPACE_END
U_NAMESPACE_USE
-U_DRAFT UFormattable* U_EXPORT2
+U_CAPI UFormattable* U_EXPORT2
ufmt_open(UErrorCode *status) {
if( U_FAILURE(*status) ) {
return NULL;
@@ -908,14 +908,14 @@ ufmt_open(UErrorCode *status) {
return fmt;
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ufmt_close(UFormattable *fmt) {
Formattable *obj = Formattable::fromUFormattable(fmt);
delete obj;
}
-U_INTERNAL UFormattableType U_EXPORT2
+U_CAPI UFormattableType U_EXPORT2
ufmt_getType(const UFormattable *fmt, UErrorCode *status) {
if(U_FAILURE(*status)) {
return (UFormattableType)UFMT_COUNT;
@@ -925,27 +925,27 @@ ufmt_getType(const UFormattable *fmt, UErrorCode *status) {
}
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ufmt_isNumeric(const UFormattable *fmt) {
const Formattable *obj = Formattable::fromUFormattable(fmt);
return obj->isNumeric();
}
-U_DRAFT UDate U_EXPORT2
+U_CAPI UDate U_EXPORT2
ufmt_getDate(const UFormattable *fmt, UErrorCode *status) {
const Formattable *obj = Formattable::fromUFormattable(fmt);
return obj->getDate(*status);
}
-U_DRAFT double U_EXPORT2
+U_CAPI double U_EXPORT2
ufmt_getDouble(UFormattable *fmt, UErrorCode *status) {
Formattable *obj = Formattable::fromUFormattable(fmt);
return obj->getDouble(*status);
}
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ufmt_getLong(UFormattable *fmt, UErrorCode *status) {
Formattable *obj = Formattable::fromUFormattable(fmt);
@@ -953,7 +953,7 @@ ufmt_getLong(UFormattable *fmt, UErrorCode *status) {
}
-U_DRAFT const void *U_EXPORT2
+U_CAPI const void *U_EXPORT2
ufmt_getObject(const UFormattable *fmt, UErrorCode *status) {
const Formattable *obj = Formattable::fromUFormattable(fmt);
@@ -966,7 +966,7 @@ ufmt_getObject(const UFormattable *fmt, UErrorCode *status) {
return ret;
}
-U_DRAFT const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ufmt_getUChars(UFormattable *fmt, int32_t *len, UErrorCode *status) {
Formattable *obj = Formattable::fromUFormattable(fmt);
@@ -986,7 +986,7 @@ ufmt_getUChars(UFormattable *fmt, int32_t *len, UErrorCode *status) {
return str.getTerminatedBuffer();
}
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ufmt_getArrayLength(const UFormattable* fmt, UErrorCode *status) {
const Formattable *obj = Formattable::fromUFormattable(fmt);
@@ -995,7 +995,7 @@ ufmt_getArrayLength(const UFormattable* fmt, UErrorCode *status) {
return count;
}
-U_DRAFT UFormattable * U_EXPORT2
+U_CAPI UFormattable * U_EXPORT2
ufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status) {
Formattable *obj = Formattable::fromUFormattable(fmt);
int32_t count;
@@ -1010,7 +1010,7 @@ ufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status) {
}
}
-U_DRAFT const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ufmt_getDecNumChars(UFormattable *fmt, int32_t *len, UErrorCode *status) {
if(U_FAILURE(*status)) {
return "";
@@ -1031,7 +1031,7 @@ ufmt_getDecNumChars(UFormattable *fmt, int32_t *len, UErrorCode *status) {
}
}
-U_DRAFT int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
ufmt_getInt64(UFormattable *fmt, UErrorCode *status) {
Formattable *obj = Formattable::fromUFormattable(fmt);
return obj->getInt64(*status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp b/Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp
index 9a647927797..bc3847b6963 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp
@@ -30,8 +30,6 @@ U_NAMESPACE_BEGIN
// -------------------------------------
// Creates a formattable object with a char* string.
// This API is useless. The API that takes a UnicodeString is actually just as good.
-// This is just a grandfathered API.
-
Formattable::Formattable(const char* stringToCopy)
{
init();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/format.cpp b/Build/source/libs/icu/icu-src/source/i18n/format.cpp
index e5abbe9eb0f..a010defff93 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/format.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/format.cpp
@@ -26,7 +26,7 @@
#include "unicode/utypes.h"
#ifndef U_I18N_IMPLEMENTATION
-#error U_I18N_IMPLEMENTATION not set - must be set for all ICU source files in i18n/ - see http://userguide.icu-project.org/howtouseicu
+#error U_I18N_IMPLEMENTATION not set - must be set for all ICU source files in i18n/ - see https://unicode-org.github.io/icu/userguide/howtouseicu
#endif
/*
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp b/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp
index 3024bff6add..b370f14f2ac 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp
@@ -8,6 +8,7 @@
#include "formatted_string_builder.h"
#include "unicode/ustring.h"
#include "unicode/utf16.h"
+#include "unicode/unum.h" // for UNumberFormatFields literals
namespace {
@@ -246,7 +247,7 @@ void FormattedStringBuilder::writeTerminator(UErrorCode& status) {
return;
}
getCharPtr()[position] = 0;
- getFieldPtr()[position] = UNUM_FIELD_COUNT;
+ getFieldPtr()[position] = kUndefinedField;
fLength--;
}
@@ -275,6 +276,11 @@ int32_t FormattedStringBuilder::prepareForInsertHelper(int32_t index, int32_t co
char16_t *oldChars = getCharPtr();
Field *oldFields = getFieldPtr();
if (fLength + count > oldCapacity) {
+ if ((fLength + count) > INT32_MAX / 2) {
+ // If we continue, then newCapacity will overlow int32_t in the next line.
+ status = U_INPUT_TOO_LONG_ERROR;
+ return -1;
+ }
int32_t newCapacity = (fLength + count) * 2;
int32_t newZero = newCapacity / 2 - (fLength + count) / 2;
@@ -329,12 +335,14 @@ int32_t FormattedStringBuilder::prepareForInsertHelper(int32_t index, int32_t co
fZero = newZero;
fLength += count;
}
+ U_ASSERT((fZero + index) >= 0);
return fZero + index;
}
int32_t FormattedStringBuilder::remove(int32_t index, int32_t count) {
// TODO: Reset the heap here? (If the string after removal can fit on stack?)
int32_t position = index + fZero;
+ U_ASSERT(position >= 0);
uprv_memmove2(getCharPtr() + position,
getCharPtr() + position + count,
sizeof(char16_t) * (fLength - index - count));
@@ -360,11 +368,11 @@ UnicodeString FormattedStringBuilder::toDebugString() const {
sb.append(toUnicodeString());
sb.append(u"] [", -1);
for (int i = 0; i < fLength; i++) {
- if (fieldAt(i) == UNUM_FIELD_COUNT) {
+ if (fieldAt(i) == kUndefinedField) {
sb.append(u'n');
- } else {
+ } else if (fieldAt(i).getCategory() == UFIELD_CATEGORY_NUMBER) {
char16_t c;
- switch (fieldAt(i)) {
+ switch (fieldAt(i).getField()) {
case UNUM_SIGN_FIELD:
c = u'-';
break;
@@ -399,10 +407,12 @@ UnicodeString FormattedStringBuilder::toDebugString() const {
c = u'$';
break;
default:
- c = u'?';
+ c = u'0' + fieldAt(i).getField();
break;
}
sb.append(c);
+ } else {
+ sb.append(u'0' + fieldAt(i).getCategory());
}
}
sb.append(u"]>", -1);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.h b/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.h
index 2949ae73e0f..92bcf07d782 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.h
@@ -9,7 +9,8 @@
#include <cstdint>
-#include "unicode/unum.h" // for UNUM_FIELD_COUNT
+#include <type_traits>
+
#include "cstring.h"
#include "uassert.h"
#include "fphdlimp.h"
@@ -24,7 +25,7 @@ class FormattedValueStringBuilderImpl;
*
* <ol>
* <li>Efficient prepend as well as append.
- * <li>Keeps tracks of Fields in an efficient manner.
+ * <li>Keeps track of Fields in an efficient manner.
* </ol>
*
* See also FormattedValueStringBuilderImpl.
@@ -54,8 +55,20 @@ class U_I18N_API FormattedStringBuilder : public UMemory {
// Convention: bottom 4 bits for field, top 4 bits for field category.
// Field category 0 implies the number category so that the number field
// literals can be directly passed as a Field type.
- // See the helper functions in "StringBuilderFieldUtils" below.
- typedef uint8_t Field;
+ // Exported as U_I18N_API so it can be used by other exports on Windows.
+ struct U_I18N_API Field {
+ uint8_t bits;
+
+ Field() = default;
+ constexpr Field(uint8_t category, uint8_t field);
+
+ inline UFieldCategory getCategory() const;
+ inline int32_t getField() const;
+ inline bool isNumeric() const;
+ inline bool isUndefined() const;
+ inline bool operator==(const Field& other) const;
+ inline bool operator!=(const Field& other) const;
+ };
FormattedStringBuilder &operator=(const FormattedStringBuilder &other);
@@ -204,46 +217,50 @@ class U_I18N_API FormattedStringBuilder : public UMemory {
friend class FormattedValueStringBuilderImpl;
};
+static_assert(
+ std::is_pod<FormattedStringBuilder::Field>::value,
+ "Field should be a POD type for efficient initialization");
+
+constexpr FormattedStringBuilder::Field::Field(uint8_t category, uint8_t field)
+ : bits((
+ U_ASSERT(category <= 0xf),
+ U_ASSERT(field <= 0xf),
+ static_cast<uint8_t>((category << 4) | field)
+ )) {}
+
/**
- * Helper functions for dealing with the Field typedef, which stores fields
- * in a compressed format.
+ * Internal constant for the undefined field for use in FormattedStringBuilder.
*/
-class StringBuilderFieldUtils {
-public:
- struct CategoryFieldPair {
- int32_t category;
- int32_t field;
- };
+constexpr FormattedStringBuilder::Field kUndefinedField = {UFIELD_CATEGORY_UNDEFINED, 0};
- /** Compile-time function to construct a Field from a category and a field */
- template <int32_t category, int32_t field>
- static constexpr FormattedStringBuilder::Field compress() {
- static_assert(category != 0, "cannot use Undefined category in FieldUtils");
- static_assert(category <= 0xf, "only 4 bits for category");
- static_assert(field <= 0xf, "only 4 bits for field");
- return static_cast<int8_t>((category << 4) | field);
- }
+/**
+ * Internal field to signal "numeric" when fields are not supported in NumberFormat.
+ */
+constexpr FormattedStringBuilder::Field kGeneralNumericField = {UFIELD_CATEGORY_UNDEFINED, 1};
- /** Runtime inline function to unpack the category and field from the Field */
- static inline CategoryFieldPair expand(FormattedStringBuilder::Field field) {
- if (field == UNUM_FIELD_COUNT) {
- return {UFIELD_CATEGORY_UNDEFINED, 0};
- }
- CategoryFieldPair ret = {
- (field >> 4),
- (field & 0xf)
- };
- if (ret.category == 0) {
- ret.category = UFIELD_CATEGORY_NUMBER;
- }
- return ret;
- }
+inline UFieldCategory FormattedStringBuilder::Field::getCategory() const {
+ return static_cast<UFieldCategory>(bits >> 4);
+}
- static inline bool isNumericField(FormattedStringBuilder::Field field) {
- int8_t category = field >> 4;
- return category == 0 || category == UFIELD_CATEGORY_NUMBER;
- }
-};
+inline int32_t FormattedStringBuilder::Field::getField() const {
+ return bits & 0xf;
+}
+
+inline bool FormattedStringBuilder::Field::isNumeric() const {
+ return getCategory() == UFIELD_CATEGORY_NUMBER || *this == kGeneralNumericField;
+}
+
+inline bool FormattedStringBuilder::Field::isUndefined() const {
+ return getCategory() == UFIELD_CATEGORY_UNDEFINED;
+}
+
+inline bool FormattedStringBuilder::Field::operator==(const Field& other) const {
+ return bits == other.bits;
+}
+
+inline bool FormattedStringBuilder::Field::operator!=(const Field& other) const {
+ return bits != other.bits;
+}
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h b/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
index 9aab36a52fe..c0dec83ba1e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
@@ -69,6 +69,9 @@ U_NAMESPACE_BEGIN
/**
* Implementation of FormattedValue using FieldPositionHandler to accept fields.
+ *
+ * TODO(ICU-20897): This class is unused. If it is not needed when fixing ICU-20897,
+ * it should be deleted.
*/
class FormattedValueFieldPositionIteratorImpl : public UMemory, public FormattedValue {
public:
@@ -114,6 +117,24 @@ private:
};
+// Internal struct that must be exported for MSVC
+struct U_I18N_API SpanInfo {
+ int32_t spanValue;
+ int32_t length;
+};
+
+// Export an explicit template instantiation of the MaybeStackArray that
+// is used as a data member of CEBuffer.
+//
+// When building DLLs for Windows this is required even though
+// no direct access to the MaybeStackArray leaks out of the i18n library.
+//
+// See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.
+//
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<SpanInfo, 8>;
+#endif
+
/**
* Implementation of FormattedValue based on FormattedStringBuilder.
*
@@ -147,13 +168,23 @@ public:
return fString;
}
+ /**
+ * Adds additional metadata used for span fields.
+ *
+ * spanValue: the index of the list item, for example.
+ * length: the length of the span, used to split adjacent fields.
+ */
+ void appendSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status);
+ void prependSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status);
+
private:
FormattedStringBuilder fString;
FormattedStringBuilder::Field fNumericField;
+ MaybeStackArray<SpanInfo, 8> spanIndices;
bool nextPositionImpl(ConstrainedFieldPosition& cfpos, FormattedStringBuilder::Field numericField, UErrorCode& status) const;
static bool isIntOrGroup(FormattedStringBuilder::Field field);
- static bool isNumericField(FormattedStringBuilder::Field field);
+ static bool isTrimmable(FormattedStringBuilder::Field field);
int32_t trimBack(int32_t limit) const;
int32_t trimFront(int32_t start) const;
};
@@ -212,7 +243,7 @@ struct UFormattedValueImpl : public UMemory, public UFormattedValueApiHelper {
return fData->appendTo(appendable, status); \
} \
UBool Name::nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const { \
- UPRV_FORMATTED_VALUE_METHOD_GUARD(FALSE) \
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(false) \
return fData->nextPosition(cfpos, status); \
}
@@ -231,7 +262,7 @@ struct UFormattedValueImpl : public UMemory, public UFormattedValueApiHelper {
} \
return static_cast<HelperType*>(impl)->exportForC(); \
} \
- U_DRAFT const UFormattedValue* U_EXPORT2 \
+ U_CAPI const UFormattedValue* U_EXPORT2 \
Prefix ## _resultAsValue (const CType* uresult, UErrorCode* ec) { \
const ImplType* result = HelperType::validate(uresult, *ec); \
if (U_FAILURE(*ec)) { return nullptr; } \
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp b/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp
index ca28f222813..84c2d00666c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp
@@ -15,6 +15,7 @@
#include "formatted_string_builder.h"
#include "number_utils.h"
#include "static_unicode_sets.h"
+#include "unicode/listformatter.h"
U_NAMESPACE_BEGIN
@@ -45,28 +46,28 @@ Appendable& FormattedValueStringBuilderImpl::appendTo(Appendable& appendable, UE
UBool FormattedValueStringBuilderImpl::nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const {
// NOTE: MSVC sometimes complains when implicitly converting between bool and UBool
- return nextPositionImpl(cfpos, fNumericField, status) ? TRUE : FALSE;
+ return nextPositionImpl(cfpos, fNumericField, status) ? true : false;
}
UBool FormattedValueStringBuilderImpl::nextFieldPosition(FieldPosition& fp, UErrorCode& status) const {
int32_t rawField = fp.getField();
if (rawField == FieldPosition::DONT_CARE) {
- return FALSE;
+ return false;
}
if (rawField < 0 || rawField >= UNUM_FIELD_COUNT) {
status = U_ILLEGAL_ARGUMENT_ERROR;
- return FALSE;
+ return false;
}
ConstrainedFieldPosition cfpos;
cfpos.constrainField(UFIELD_CATEGORY_NUMBER, rawField);
cfpos.setState(UFIELD_CATEGORY_NUMBER, rawField, fp.getBeginIndex(), fp.getEndIndex());
- if (nextPositionImpl(cfpos, 0, status)) {
+ if (nextPositionImpl(cfpos, kUndefinedField, status)) {
fp.setBeginIndex(cfpos.getStart());
fp.setEndIndex(cfpos.getLimit());
- return TRUE;
+ return true;
}
// Special case: fraction should start after integer if fraction is not present
@@ -74,7 +75,7 @@ UBool FormattedValueStringBuilderImpl::nextFieldPosition(FieldPosition& fp, UErr
bool inside = false;
int32_t i = fString.fZero;
for (; i < fString.fZero + fString.fLength; i++) {
- if (isIntOrGroup(fString.getFieldPtr()[i]) || fString.getFieldPtr()[i] == UNUM_DECIMAL_SEPARATOR_FIELD) {
+ if (isIntOrGroup(fString.getFieldPtr()[i]) || fString.getFieldPtr()[i] == Field(UFIELD_CATEGORY_NUMBER, UNUM_DECIMAL_SEPARATOR_FIELD)) {
inside = true;
} else if (inside) {
break;
@@ -84,48 +85,46 @@ UBool FormattedValueStringBuilderImpl::nextFieldPosition(FieldPosition& fp, UErr
fp.setEndIndex(i - fString.fZero);
}
- return FALSE;
+ return false;
}
void FormattedValueStringBuilderImpl::getAllFieldPositions(FieldPositionIteratorHandler& fpih,
UErrorCode& status) const {
ConstrainedFieldPosition cfpos;
- while (nextPositionImpl(cfpos, 0, status)) {
+ while (nextPositionImpl(cfpos, kUndefinedField, status)) {
fpih.addAttribute(cfpos.getField(), cfpos.getStart(), cfpos.getLimit());
}
}
// Signal the end of the string using a field that doesn't exist and that is
-// different from UNUM_FIELD_COUNT, which is used for "null number field".
-static constexpr Field kEndField = 0xff;
+// different from kUndefinedField, which is used for "null field".
+static constexpr Field kEndField = Field(0xf, 0xf);
bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition& cfpos, Field numericField, UErrorCode& /*status*/) const {
- auto numericCAF = StringBuilderFieldUtils::expand(numericField);
int32_t fieldStart = -1;
- Field currField = UNUM_FIELD_COUNT;
+ Field currField = kUndefinedField;
for (int32_t i = fString.fZero + cfpos.getLimit(); i <= fString.fZero + fString.fLength; i++) {
Field _field = (i < fString.fZero + fString.fLength) ? fString.getFieldPtr()[i] : kEndField;
// Case 1: currently scanning a field.
- if (currField != UNUM_FIELD_COUNT) {
+ if (currField != kUndefinedField) {
if (currField != _field) {
int32_t end = i - fString.fZero;
// Grouping separators can be whitespace; don't throw them out!
- if (currField != UNUM_GROUPING_SEPARATOR_FIELD) {
+ if (isTrimmable(currField)) {
end = trimBack(i - fString.fZero);
}
if (end <= fieldStart) {
// Entire field position is ignorable; skip.
fieldStart = -1;
- currField = UNUM_FIELD_COUNT;
+ currField = kUndefinedField;
i--; // look at this index again
continue;
}
int32_t start = fieldStart;
- if (currField != UNUM_GROUPING_SEPARATOR_FIELD) {
+ if (isTrimmable(currField)) {
start = trimFront(start);
}
- auto caf = StringBuilderFieldUtils::expand(currField);
- cfpos.setState(caf.category, caf.field, start, end);
+ cfpos.setState(currField.getCategory(), currField.getField(), start, end);
return true;
}
continue;
@@ -147,51 +146,123 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition&
return true;
}
// Special case: coalesce NUMERIC if we are pointing at the end of the NUMERIC.
- if (numericField != 0
- && cfpos.matchesField(numericCAF.category, numericCAF.field)
+ if (numericField != kUndefinedField
+ && cfpos.matchesField(numericField.getCategory(), numericField.getField())
&& i > fString.fZero
// don't return the same field twice in a row:
&& (i - fString.fZero > cfpos.getLimit()
- || cfpos.getCategory() != numericCAF.category
- || cfpos.getField() != numericCAF.field)
- && isNumericField(fString.getFieldPtr()[i - 1])
- && !isNumericField(_field)) {
- int j = i - 1;
- for (; j >= fString.fZero && isNumericField(fString.getFieldPtr()[j]); j--) {}
+ || cfpos.getCategory() != numericField.getCategory()
+ || cfpos.getField() != numericField.getField())
+ && fString.getFieldPtr()[i - 1].isNumeric()
+ && !_field.isNumeric()) {
+ // Re-wind to the beginning of the field and then emit it
+ int32_t j = i - 1;
+ for (; j >= fString.fZero && fString.getFieldPtr()[j].isNumeric(); j--) {}
cfpos.setState(
- numericCAF.category,
- numericCAF.field,
+ numericField.getCategory(),
+ numericField.getField(),
j - fString.fZero + 1,
i - fString.fZero);
return true;
}
+ // Special case: emit normalField if we are pointing at the end of spanField.
+ if (i > fString.fZero) {
+ auto elementField = fString.getFieldPtr()[i-1];
+ if (elementField == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)
+ && cfpos.matchesField(elementField.getCategory(), elementField.getField())
+ && (cfpos.getLimit() < i - fString.fZero || cfpos.getCategory() != elementField.getCategory())) {
+ int64_t si = cfpos.getInt64IterationContext() - 1;
+ cfpos.setState(
+ elementField.getCategory(),
+ elementField.getField(),
+ i - fString.fZero - spanIndices[si].length,
+ i - fString.fZero);
+ return true;
+ }
+ }
// Special case: skip over INTEGER; will be coalesced later.
- if (_field == UNUM_INTEGER_FIELD) {
- _field = UNUM_FIELD_COUNT;
+ if (_field == Field(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD)) {
+ _field = kUndefinedField;
}
// Case 2: no field starting at this position.
- if (_field == UNUM_FIELD_COUNT || _field == kEndField) {
+ if (_field.isUndefined() || _field == kEndField) {
continue;
}
// Case 3: check for field starting at this position
- auto caf = StringBuilderFieldUtils::expand(_field);
- if (cfpos.matchesField(caf.category, caf.field)) {
+ // Case 3a: Need to add a SpanField
+ if (_field == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)) {
+ int64_t si = cfpos.getInt64IterationContext();
+ int32_t spanValue = spanIndices[si].spanValue;
+ int32_t length = spanIndices[si].length;
+ cfpos.setInt64IterationContext(si + 1);
+ if (cfpos.matchesField(UFIELD_CATEGORY_LIST_SPAN, spanValue)) {
+ UFieldCategory spanCategory = UFIELD_CATEGORY_LIST_SPAN;
+ fieldStart = i - fString.fZero;
+ int32_t end = fieldStart + length;
+ cfpos.setState(
+ spanCategory,
+ spanValue,
+ fieldStart,
+ end);
+ return true;
+ } else {
+ // Failed to match; jump ahead
+ i += length - 1;
+ continue;
+ }
+ }
+ // Case 3b: No SpanField
+ if (cfpos.matchesField(_field.getCategory(), _field.getField())) {
fieldStart = i - fString.fZero;
currField = _field;
}
}
- U_ASSERT(currField == UNUM_FIELD_COUNT);
+ U_ASSERT(currField == kUndefinedField);
+ // Always set the position to the end so that we don't revisit previous sections
+ cfpos.setState(
+ cfpos.getCategory(),
+ cfpos.getField(),
+ fString.fLength,
+ fString.fLength);
return false;
}
+void FormattedValueStringBuilderImpl::appendSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status) {
+ if (U_FAILURE(status)) { return; }
+ U_ASSERT(spanIndices.getCapacity() >= spanValue);
+ if (spanIndices.getCapacity() == spanValue) {
+ if (!spanIndices.resize(spanValue * 2, spanValue)) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+ spanIndices[spanValue] = {spanValue, length};
+}
+
+void FormattedValueStringBuilderImpl::prependSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status) {
+ if (U_FAILURE(status)) { return; }
+ U_ASSERT(spanIndices.getCapacity() >= spanValue);
+ if (spanIndices.getCapacity() == spanValue) {
+ if (!spanIndices.resize(spanValue * 2, spanValue)) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+ for (int32_t i = spanValue - 1; i >= 0; i--) {
+ spanIndices[i+1] = spanIndices[i];
+ }
+ spanIndices[0] = {spanValue, length};
+}
+
bool FormattedValueStringBuilderImpl::isIntOrGroup(Field field) {
- return field == UNUM_INTEGER_FIELD
- || field == UNUM_GROUPING_SEPARATOR_FIELD;
+ return field == Field(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD)
+ || field == Field(UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD);
}
-bool FormattedValueStringBuilderImpl::isNumericField(Field field) {
- return StringBuilderFieldUtils::isNumericField(field);
+bool FormattedValueStringBuilderImpl::isTrimmable(Field field) {
+ return field != Field(UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD)
+ && field.getCategory() != UFIELD_CATEGORY_LIST;
}
int32_t FormattedValueStringBuilderImpl::trimBack(int32_t limit) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp b/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
index e2c9c42fc88..79ecf0a841c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
@@ -193,7 +193,7 @@ ucfpos_close(UConstrainedFieldPosition* ptr) {
}
-U_DRAFT const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ufmtval_getString(
const UFormattedValue* ufmtval,
int32_t* pLength,
@@ -213,7 +213,7 @@ ufmtval_getString(
}
-U_DRAFT UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ufmtval_nextPosition(
const UFormattedValue* ufmtval,
UConstrainedFieldPosition* ucfpos,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h b/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h
index 00937830fe7..4fb0c7b6fe6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h
@@ -41,8 +41,8 @@ class U_I18N_API FieldPositionHandler: public UMemory {
class FieldPositionOnlyHandler : public FieldPositionHandler {
FieldPosition& pos;
- UBool acceptFirstOnly = FALSE;
- UBool seenFirst = FALSE;
+ UBool acceptFirstOnly = false;
+ UBool seenFirst = false;
public:
FieldPositionOnlyHandler(FieldPosition& pos);
@@ -62,8 +62,9 @@ class FieldPositionOnlyHandler : public FieldPositionHandler {
// utility subclass FieldPositionIteratorHandler
+// exported as U_I18N_API for tests
-class FieldPositionIteratorHandler : public FieldPositionHandler {
+class U_I18N_API FieldPositionIteratorHandler : public FieldPositionHandler {
FieldPositionIterator* iter; // can be NULL
UVector32* vec;
UErrorCode status;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/gender.cpp b/Build/source/libs/icu/icu-src/source/i18n/gender.cpp
index 32ddbf9a667..dc5def6ad35 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/gender.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/gender.cpp
@@ -160,7 +160,7 @@ const GenderInfo* GenderInfo::loadInstance(const Locale& locale, UErrorCode& sta
if (s == NULL) {
return &gObjs[NEUTRAL];
}
- char type_str[256];
+ char type_str[256] = "";
u_UCharsToChars(s, type_str, resLen + 1);
if (uprv_strcmp(type_str, gNeutralStr) == 0) {
return &gObjs[NEUTRAL];
diff --git a/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp b/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
index 6b15171c12b..7ca58268456 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
@@ -185,7 +185,7 @@ fIsGregorian(TRUE), fInvertGregorian(FALSE)
// -------------------------------------
GregorianCalendar::GregorianCalendar(const Locale& aLocale, UErrorCode& status)
-: Calendar(TimeZone::createDefault(), aLocale, status),
+: Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, status),
fGregorianCutover(kPapalCutover),
fCutoverJulianDay(kCutoverJulianDay), fNormalizedGregorianCutover(fGregorianCutover), fGregorianCutoverYear(1582),
fIsGregorian(TRUE), fInvertGregorian(FALSE)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h b/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
index 06eb3238451..aec33c48c80 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
@@ -148,9 +148,9 @@ class ClockMath {
class Grego {
public:
/**
- * Return TRUE if the given year is a leap year.
+ * Return true if the given year is a leap year.
* @param year Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc.
- * @return TRUE if the year is a leap year
+ * @return true if the year is a leap year
*/
static inline UBool isLeapYear(int32_t year);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp b/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp
index c8fb8a16795..4d8e59cef95 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp
@@ -155,7 +155,7 @@ U_NAMESPACE_BEGIN
* @internal
*/
HebrewCalendar::HebrewCalendar(const Locale& aLocale, UErrorCode& success)
-: Calendar(TimeZone::createDefault(), aLocale, success)
+: Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
{
setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly.
@@ -393,7 +393,8 @@ int32_t HebrewCalendar::startOfYear(int32_t year, UErrorCode &status)
int32_t day = CalendarCache::get(&gCache, year, status);
if (day == 0) {
- int32_t months = (235 * year - 234) / 19; // # of months before year
+ // # of months before year
+ int32_t months = (int32_t)ClockMath::floorDivide((235 * (int64_t)year - 234), (int64_t)19);
int64_t frac = (int64_t)months * MONTH_FRACT + BAHARAD; // Fractional part of day #
day = months * 29 + (int32_t)(frac / DAY_PARTS); // Whole # part of calculation
@@ -566,8 +567,8 @@ void HebrewCalendar::validateField(UCalendarDateFields field, UErrorCode &status
*/
void HebrewCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status) {
int32_t d = julianDay - 347997;
- double m = ((d * (double)DAY_PARTS)/ (double) MONTH_PARTS); // Months (approx)
- int32_t year = (int32_t)( ((19. * m + 234.) / 235.) + 1.); // Years (approx)
+ double m = ClockMath::floorDivide((d * (double)DAY_PARTS), (double) MONTH_PARTS); // Months (approx)
+ int32_t year = (int32_t)(ClockMath::floorDivide((19. * m + 234.), 235.) + 1.); // Years (approx)
int32_t ys = startOfYear(year, status); // 1st day of year
int32_t dayOfYear = (d - ys);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h b/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
index 08136de32a9..d27e6b879d6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
@@ -386,7 +386,7 @@ public:
virtual UBool inDaylightTime(UErrorCode& status) const;
/**
- * Returns TRUE because the Hebrew Calendar does have a default century
+ * Returns true because the Hebrew Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj b/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
index e939eb555ad..218772f9974 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
@@ -16,22 +16,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -76,7 +60,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuin65d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuin68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuind.lib</ImportLibrary>
</Link>
@@ -89,7 +73,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuin65.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuin68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuin.lib</ImportLibrary>
</Link>
@@ -187,12 +171,12 @@
<ClCompile Include="ulistformatter.cpp" />
<ClCompile Include="measfmt.cpp" />
<ClCompile Include="measunit.cpp" />
+ <ClCompile Include="measunit_extra.cpp" />
<ClCompile Include="measure.cpp" />
<ClCompile Include="msgfmt.cpp" />
<ClCompile Include="nfrs.cpp" />
<ClCompile Include="nfrule.cpp" />
<ClCompile Include="nfsubs.cpp" />
- <ClCompile Include="nounit.cpp" />
<ClCompile Include="number_affixutils.cpp" />
<ClCompile Include="number_asformat.cpp" />
<ClCompile Include="number_compact.cpp" />
@@ -212,11 +196,13 @@
<ClCompile Include="number_rounding.cpp" />
<ClCompile Include="number_scientific.cpp" />
<ClCompile Include="formatted_string_builder.cpp" />
+ <ClCompile Include="number_usageprefs.cpp" />
<ClCompile Include="number_utils.cpp" />
<ClCompile Include="number_mapper.cpp" />
<ClCompile Include="number_multiplier.cpp" />
<ClCompile Include="number_currencysymbols.cpp" />
<ClCompile Include="number_skeletons.cpp" />
+ <ClCompile Include="number_symbolswrapper.cpp" />
<ClCompile Include="number_capi.cpp" />
<ClCompile Include="string_segment.cpp" />
<ClCompile Include="numparse_parsednumber.cpp" />
@@ -228,12 +214,14 @@
<ClCompile Include="numparse_affixes.cpp" />
<ClCompile Include="numparse_compositions.cpp" />
<ClCompile Include="numparse_validators.cpp" />
+ <ClCompile Include="numrange_capi.cpp" />
<ClCompile Include="numrange_fluent.cpp" />
<ClCompile Include="numrange_impl.cpp" />
<ClCompile Include="numfmt.cpp" />
<ClCompile Include="numsys.cpp" />
<ClCompile Include="olsontz.cpp" />
<ClCompile Include="persncal.cpp" />
+ <ClCompile Include="pluralranges.cpp" />
<ClCompile Include="plurfmt.cpp" />
<ClCompile Include="plurrule.cpp" />
<ClCompile Include="quantityformatter.cpp" />
@@ -265,6 +253,10 @@
<ClCompile Include="ufieldpositer.cpp" />
<ClCompile Include="ulocdata.cpp" />
<ClCompile Include="umsg.cpp" />
+ <ClCompile Include="units_complexconverter.cpp" />
+ <ClCompile Include="units_converter.cpp" />
+ <ClCompile Include="units_data.cpp" />
+ <ClCompile Include="units_router.cpp" />
<ClCompile Include="unum.cpp" />
<ClCompile Include="unumsys.cpp" />
<ClCompile Include="upluralrules.cpp" />
@@ -392,6 +384,7 @@
<ClInclude Include="indiancal.h" />
<ClInclude Include="islamcal.h" />
<ClInclude Include="japancal.h" />
+ <ClInclude Include="measunit_impl.h" />
<ClInclude Include="msgfmt_impl.h" />
<ClInclude Include="nfrlist.h" />
<ClInclude Include="nfrs.h" />
@@ -399,6 +392,7 @@
<ClInclude Include="nfsubs.h" />
<ClInclude Include="olsontz.h" />
<ClInclude Include="persncal.h" />
+ <ClInclude Include="pluralranges.h" />
<ClInclude Include="plurrule_impl.h" />
<ClInclude Include="quantityformatter.h" />
<ClInclude Include="sharedbreakiterator.h" />
@@ -479,12 +473,14 @@
<ClInclude Include="number_scientific.h" />
<ClInclude Include="formatted_string_builder.h" />
<ClInclude Include="number_types.h" />
+ <ClInclude Include="number_usageprefs.h" />
<ClInclude Include="number_utypes.h" />
<ClInclude Include="number_utils.h" />
<ClInclude Include="number_mapper.h" />
<ClInclude Include="number_multiplier.h" />
<ClInclude Include="number_currencysymbols.h" />
<ClInclude Include="number_skeletons.h" />
+ <ClInclude Include="number_symbolswrapper.h" />
<ClInclude Include="string_segment.h" />
<ClInclude Include="numparse_impl.h" />
<ClInclude Include="numparse_symbols.h" />
@@ -498,6 +494,10 @@
<ClInclude Include="numparse_utils.h" />
<ClInclude Include="numrange_impl.h" />
<ClInclude Include="formattedval_impl.h" />
+ <ClInclude Include="units_complexconverter.h" />
+ <ClInclude Include="units_converter.h" />
+ <ClInclude Include="units_data.h" />
+ <ClInclude Include="units_router.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="i18n.rc" />
diff --git a/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters b/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters
index a1813fc0696..2fc88e06061 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters
+++ b/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters
@@ -204,6 +204,9 @@
<ClCompile Include="measunit.cpp">
<Filter>formatting</Filter>
</ClCompile>
+ <ClCompile Include="measunit_extra.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
<ClCompile Include="measure.cpp">
<Filter>formatting</Filter>
</ClCompile>
@@ -231,6 +234,9 @@
<ClCompile Include="persncal.cpp">
<Filter>formatting</Filter>
</ClCompile>
+ <ClCompile Include="pluralranges.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
<ClCompile Include="plurfmt.cpp">
<Filter>formatting</Filter>
</ClCompile>
@@ -528,9 +534,6 @@
<ClCompile Include="uregion.cpp">
<Filter>formatting</Filter>
</ClCompile>
- <ClCompile Include="nounit.cpp">
- <Filter>misc</Filter>
- </ClCompile>
<ClCompile Include="number_affixutils.cpp">
<Filter>formatting</Filter>
</ClCompile>
@@ -588,6 +591,9 @@
<ClCompile Include="formatted_string_builder.cpp">
<Filter>formatting</Filter>
</ClCompile>
+ <ClCompile Include="number_usageprefs.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
<ClCompile Include="number_utils.cpp">
<Filter>formatting</Filter>
</ClCompile>
@@ -603,6 +609,9 @@
<ClCompile Include="number_skeletons.cpp">
<Filter>formatting</Filter>
</ClCompile>
+ <ClCompile Include="number_symbolswrapper.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
<ClCompile Include="number_capi.cpp">
<Filter>formatting</Filter>
</ClCompile>
@@ -636,6 +645,9 @@
<ClCompile Include="numparse_validators.cpp">
<Filter>formatting</Filter>
</ClCompile>
+ <ClCompile Include="numrange_capi.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
<ClCompile Include="numrange_fluent.cpp">
<Filter>formatting</Filter>
</ClCompile>
@@ -648,6 +660,18 @@
<ClCompile Include="erarules.cpp">
<Filter>formatting</Filter>
</ClCompile>
+ <ClCompile Include="units_complexconverter.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
+ <ClCompile Include="units_converter.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
+ <ClCompile Include="units_data.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
+ <ClCompile Include="units_router.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClCompile Include="bocsu.cpp">
@@ -830,6 +854,9 @@
<ClInclude Include="japancal.h">
<Filter>formatting</Filter>
</ClInclude>
+ <ClInclude Include="measunit_impl.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
<ClInclude Include="msgfmt_impl.h">
<Filter>formatting</Filter>
</ClInclude>
@@ -896,6 +923,9 @@
<ClInclude Include="number_utypes.h">
<Filter>formatting</Filter>
</ClInclude>
+ <ClInclude Include="number_usageprefs.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
<ClInclude Include="number_utils.h">
<Filter>formatting</Filter>
</ClInclude>
@@ -911,6 +941,9 @@
<ClInclude Include="number_skeletons.h">
<Filter>formatting</Filter>
</ClInclude>
+ <ClInclude Include="number_symbolswrapper.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
<ClInclude Include="string_segment.h">
<Filter>formatting</Filter>
</ClInclude>
@@ -953,6 +986,9 @@
<ClInclude Include="persncal.h">
<Filter>formatting</Filter>
</ClInclude>
+ <ClInclude Include="pluralranges.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
<ClInclude Include="plurrule_impl.h">
<Filter>formatting</Filter>
</ClInclude>
@@ -989,6 +1025,18 @@
<ClInclude Include="umsg_imp.h">
<Filter>formatting</Filter>
</ClInclude>
+ <ClInclude Include="units_complexconverter.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
+ <ClInclude Include="units_converter.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
+ <ClInclude Include="units_data.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
+ <ClInclude Include="units_router.h">
+ <Filter>formatting</Filter>
+ </ClInclude>
<ClInclude Include="vzone.h">
<Filter>formatting</Filter>
</ClInclude>
@@ -1229,4 +1277,4 @@
<Filter>misc</Filter>
</ResourceCompile>
</ItemGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj b/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
index 24ac8f30123..f836aeb0726 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
@@ -52,10 +52,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -190,7 +186,7 @@
<ProgramDataBaseFileName>.\x86\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin32uwp\icuin65.dll</OutputFile>
+ <OutputFile>..\..\bin32uwp\icuin68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib32uwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib32uwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib32uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -207,7 +203,7 @@
<ProgramDataBaseFileName>.\x86\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin32uwp\icuin65d.dll</OutputFile>
+ <OutputFile>..\..\bin32uwp\icuin68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib32uwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib32uwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib32uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -224,7 +220,7 @@
<ProgramDataBaseFileName>.\x64\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64uwp\icuin65.dll</OutputFile>
+ <OutputFile>..\..\bin64uwp\icuin68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib64uwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib64uwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib64uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -241,7 +237,7 @@
<ProgramDataBaseFileName>.\x64\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64uwp\icuin65d.dll</OutputFile>
+ <OutputFile>..\..\bin64uwp\icuin68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib64uwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib64uwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib64uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -258,7 +254,7 @@
<ProgramDataBaseFileName>.\ARM\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARMuwp\icuin65.dll</OutputFile>
+ <OutputFile>..\..\binARMuwp\icuin68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARMuwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARMuwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARMuwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -275,7 +271,7 @@
<ProgramDataBaseFileName>.\ARM\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARMuwp\icuin65d.dll</OutputFile>
+ <OutputFile>..\..\binARMuwp\icuin68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARMuwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARMuwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARMuwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -292,7 +288,7 @@
<ProgramDataBaseFileName>.\ARM64\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARM64uwp\icuin65.dll</OutputFile>
+ <OutputFile>..\..\binARM64uwp\icuin68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARM64uwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARM64uwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARM64uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -309,7 +305,7 @@
<ProgramDataBaseFileName>.\ARM64\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARM64uwp\icuin65d.dll</OutputFile>
+ <OutputFile>..\..\binARM64uwp\icuin68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARM64uwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARM64uwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARM64uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -408,12 +404,12 @@
<ClCompile Include="ulistformatter.cpp" />
<ClCompile Include="measfmt.cpp" />
<ClCompile Include="measunit.cpp" />
+ <ClCompile Include="measunit_extra.cpp" />
<ClCompile Include="measure.cpp" />
<ClCompile Include="msgfmt.cpp" />
<ClCompile Include="nfrs.cpp" />
<ClCompile Include="nfrule.cpp" />
<ClCompile Include="nfsubs.cpp" />
- <ClCompile Include="nounit.cpp" />
<ClCompile Include="number_affixutils.cpp" />
<ClCompile Include="number_asformat.cpp" />
<ClCompile Include="number_compact.cpp" />
@@ -433,11 +429,13 @@
<ClCompile Include="number_rounding.cpp" />
<ClCompile Include="number_scientific.cpp" />
<ClCompile Include="formatted_string_builder.cpp" />
+ <ClCompile Include="number_usageprefs.cpp" />
<ClCompile Include="number_utils.cpp" />
<ClCompile Include="number_mapper.cpp" />
<ClCompile Include="number_multiplier.cpp" />
<ClCompile Include="number_currencysymbols.cpp" />
<ClCompile Include="number_skeletons.cpp" />
+ <ClCompile Include="number_symbolswrapper.cpp" />
<ClCompile Include="number_capi.cpp" />
<ClCompile Include="string_segment.cpp" />
<ClCompile Include="numparse_parsednumber.cpp" />
@@ -449,12 +447,14 @@
<ClCompile Include="numparse_affixes.cpp" />
<ClCompile Include="numparse_compositions.cpp" />
<ClCompile Include="numparse_validators.cpp" />
+ <ClCompile Include="numrange_capi.cpp" />
<ClCompile Include="numrange_fluent.cpp" />
<ClCompile Include="numrange_impl.cpp" />
<ClCompile Include="numfmt.cpp" />
<ClCompile Include="numsys.cpp" />
<ClCompile Include="olsontz.cpp" />
<ClCompile Include="persncal.cpp" />
+ <ClCompile Include="pluralranges.cpp" />
<ClCompile Include="plurfmt.cpp" />
<ClCompile Include="plurrule.cpp" />
<ClCompile Include="quantityformatter.cpp" />
@@ -484,6 +484,10 @@
<ClCompile Include="ufieldpositer.cpp" />
<ClCompile Include="ulocdata.cpp" />
<ClCompile Include="umsg.cpp" />
+ <ClCompile Include="units_complexconverter.cpp" />
+ <ClCompile Include="units_converter.cpp" />
+ <ClCompile Include="units_data.cpp" />
+ <ClCompile Include="units_router.cpp" />
<ClCompile Include="unum.cpp" />
<ClCompile Include="unumsys.cpp" />
<ClCompile Include="upluralrules.cpp" />
@@ -611,6 +615,7 @@
<ClInclude Include="indiancal.h" />
<ClInclude Include="islamcal.h" />
<ClInclude Include="japancal.h" />
+ <ClInclude Include="measunit_impl.h" />
<ClInclude Include="msgfmt_impl.h" />
<ClInclude Include="nfrlist.h" />
<ClInclude Include="nfrs.h" />
@@ -618,6 +623,7 @@
<ClInclude Include="nfsubs.h" />
<ClInclude Include="olsontz.h" />
<ClInclude Include="persncal.h" />
+ <ClInclude Include="pluralranges.h" />
<ClInclude Include="plurrule_impl.h" />
<ClInclude Include="quantityformatter.h" />
<ClInclude Include="sharedbreakiterator.h" />
@@ -698,12 +704,14 @@
<ClInclude Include="number_scientific.h" />
<ClInclude Include="formatted_string_builder.h" />
<ClInclude Include="number_types.h" />
+ <ClInclude Include="number_usageprefs.h" />
<ClInclude Include="number_utypes.h" />
<ClInclude Include="number_utils.h" />
<ClInclude Include="number_mapper.h" />
<ClInclude Include="number_multiplier.h" />
<ClInclude Include="number_currencysymbols.h" />
<ClInclude Include="number_skeletons.h" />
+ <ClInclude Include="number_symbolswrapper.h" />
<ClInclude Include="string_segment.h" />
<ClInclude Include="numparse_impl.h" />
<ClInclude Include="numparse_symbols.h" />
@@ -717,6 +725,10 @@
<ClInclude Include="numparse_utils.h" />
<ClInclude Include="numrange_impl.h" />
<ClInclude Include="formattedval_impl.h" />
+ <ClInclude Include="units_complexconverter.h" />
+ <ClInclude Include="units_converter.h" />
+ <ClInclude Include="units_data.h" />
+ <ClInclude Include="units_router.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="i18n.rc" />
@@ -727,4 +739,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" Condition="'$(SkipUWP)'!='true'" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp b/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
index f1ab853b948..9d9df58f13d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
@@ -40,7 +40,7 @@ IndianCalendar* IndianCalendar::clone() const {
}
IndianCalendar::IndianCalendar(const Locale& aLocale, UErrorCode& success)
- : Calendar(TimeZone::createDefault(), aLocale, success)
+ : Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
{
setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly.
}
@@ -83,7 +83,6 @@ static const int32_t LIMITS[UCAL_FIELD_COUNT][4] = {
{/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // IS_LEAP_MONTH
};
-static const double JULIAN_EPOCH = 1721425.5;
static const int32_t INDIAN_ERA_START = 78;
static const int32_t INDIAN_YEAR_START = 80;
@@ -96,7 +95,7 @@ int32_t IndianCalendar::handleGetLimit(UCalendarDateFields field, ELimitType lim
*/
static UBool isGregorianLeap(int32_t year)
{
- return ((year % 4) == 0) && (!(((year % 100) == 0) && ((year % 400) != 0)));
+ return Grego::isLeapYear(year);
}
//----------------------------------------------------------------------
@@ -137,56 +136,22 @@ int32_t IndianCalendar::handleGetYearLength(int32_t eyear) const {
* Returns the Julian Day corresponding to gregorian date
*
* @param year The Gregorian year
- * @param month The month in Gregorian Year
+ * @param month The month in Gregorian Year, 0 based.
* @param date The date in Gregorian day in month
*/
static double gregorianToJD(int32_t year, int32_t month, int32_t date) {
- double julianDay = (JULIAN_EPOCH - 1) +
- (365 * (year - 1)) +
- uprv_floor((year - 1) / 4) +
- (-uprv_floor((year - 1) / 100)) +
- uprv_floor((year - 1) / 400) +
- uprv_floor((((367 * month) - 362) / 12) +
- ((month <= 2) ? 0 :
- (isGregorianLeap(year) ? -1 : -2)
- ) +
- date);
-
- return julianDay;
+ return Grego::fieldsToDay(year, month, date) + kEpochStartAsJulianDay - 0.5;
}
/*
* Returns the Gregorian Date corresponding to a given Julian Day
+ * Month is 0 based.
* @param jd The Julian Day
*/
static int32_t* jdToGregorian(double jd, int32_t gregorianDate[3]) {
- double wjd, depoch, quadricent, dqc, cent, dcent, quad, dquad, yindex, yearday, leapadj;
- int32_t year, month, day;
- wjd = uprv_floor(jd - 0.5) + 0.5;
- depoch = wjd - JULIAN_EPOCH;
- quadricent = uprv_floor(depoch / 146097);
- dqc = (int32_t)uprv_floor(depoch) % 146097;
- cent = uprv_floor(dqc / 36524);
- dcent = (int32_t)uprv_floor(dqc) % 36524;
- quad = uprv_floor(dcent / 1461);
- dquad = (int32_t)uprv_floor(dcent) % 1461;
- yindex = uprv_floor(dquad / 365);
- year = (int32_t)((quadricent * 400) + (cent * 100) + (quad * 4) + yindex);
- if (!((cent == 4) || (yindex == 4))) {
- year++;
- }
- yearday = wjd - gregorianToJD(year, 1, 1);
- leapadj = ((wjd < gregorianToJD(year, 3, 1)) ? 0
- :
- (isGregorianLeap(year) ? 1 : 2)
- );
- month = (int32_t)uprv_floor((((yearday + leapadj) * 12) + 373) / 367);
- day = (int32_t)(wjd - gregorianToJD(year, month, 1)) + 1;
-
- gregorianDate[0] = year;
- gregorianDate[1] = month;
- gregorianDate[2] = day;
-
+ int32_t gdow;
+ Grego::dayToFields(jd - kEpochStartAsJulianDay,
+ gregorianDate[0], gregorianDate[1], gregorianDate[2], gdow);
return gregorianDate;
}
@@ -203,11 +168,11 @@ static double IndianToJD(int32_t year, int32_t month, int32_t date) {
if(isGregorianLeap(gyear)) {
leapMonth = 31;
- start = gregorianToJD(gyear, 3, 21);
+ start = gregorianToJD(gyear, 2 /* The third month in 0 based month */, 21);
}
else {
leapMonth = 30;
- start = gregorianToJD(gyear, 3, 22);
+ start = gregorianToJD(gyear, 2 /* The third month in 0 based month */, 22);
}
if (month == 1) {
@@ -297,7 +262,7 @@ void IndianCalendar::handleComputeFields(int32_t julianDay, UErrorCode& /* stat
gregorianYear = jdToGregorian(julianDay, gd)[0]; // Gregorian date for Julian day
IndianYear = gregorianYear - INDIAN_ERA_START; // Year in Saka era
- jdAtStartOfGregYear = gregorianToJD(gregorianYear, 1, 1); // JD at start of Gregorian year
+ jdAtStartOfGregYear = gregorianToJD(gregorianYear, 0, 1); // JD at start of Gregorian year
yday = (int32_t)(julianDay - jdAtStartOfGregYear); // Day number in Gregorian year (starting from 0)
if (yday < INDIAN_YEAR_START) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/indiancal.h b/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
index e259d9bc174..3981ea58512 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
@@ -147,7 +147,7 @@ public:
* @param aLocale The given locale.
* @param success Indicates the status of IndianCalendar object construction.
* Returns U_ZERO_ERROR if constructed successfully.
- * @param beCivil Whether the calendar should be civil (default-TRUE) or religious (FALSE)
+ * @param beCivil Whether the calendar should be civil (default-true) or religious (false)
* @internal
*/
IndianCalendar(const Locale& aLocale, UErrorCode &success);
@@ -303,7 +303,7 @@ protected:
/**
- * Returns TRUE because the Indian Calendar does have a default century
+ * Returns true because the Indian Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp b/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
index 582b3365a64..982b3ad2d1c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
@@ -232,7 +232,7 @@ IslamicCalendar* IslamicCalendar::clone() const {
}
IslamicCalendar::IslamicCalendar(const Locale& aLocale, UErrorCode& success, ECalculationType type)
-: Calendar(TimeZone::createDefault(), aLocale, success),
+: Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success),
cType(type)
{
setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly.
@@ -368,7 +368,7 @@ int32_t IslamicCalendar::yearStart(int32_t year) const{
if (cType == CIVIL || cType == TBLA ||
(cType == UMALQURA && (year < UMALQURA_YEAR_START || year > UMALQURA_YEAR_END)))
{
- return (year-1)*354 + ClockMath::floorDivide((3+11*year),30);
+ return (year-1)*354 + ClockMath::floorDivide((3+11*(int64_t)year),(int64_t)30);
} else if(cType==ASTRONOMICAL){
return trueMonthStart(12*(year-1));
} else {
@@ -391,7 +391,7 @@ int32_t IslamicCalendar::monthStart(int32_t year, int32_t month) const {
if (cType == CIVIL || cType == TBLA) {
// This does not handle months out of the range 0..11
return (int32_t)uprv_ceil(29.5*month)
- + (year-1)*354 + (int32_t)ClockMath::floorDivide((3+11*year),30);
+ + (year-1)*354 + (int32_t)ClockMath::floorDivide((3+11*(int64_t)year),(int64_t)30);
} else if(cType==ASTRONOMICAL){
return trueMonthStart(12*(year-1) + month);
} else {
@@ -447,7 +447,8 @@ int32_t IslamicCalendar::trueMonthStart(int32_t month) const
}
} while (age < 0);
}
- start = (int32_t)ClockMath::floorDivide((origin - HIJRA_MILLIS), (double)kOneDay) + 1;
+ start = (int32_t)(ClockMath::floorDivide(
+ (int64_t)((int64_t)origin - HIJRA_MILLIS), (int64_t)kOneDay) + 1);
CalendarCache::put(&gMonthCache, month, start, status);
}
trueMonthStartEnd :
@@ -639,13 +640,14 @@ void IslamicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status)
months--;
}
- year = months / 12 + 1;
- month = months % 12;
+ year = months >= 0 ? ((months / 12) + 1) : ((months + 1 ) / 12);
+ month = ((months % 12) + 12 ) % 12;
} else if(cType == UMALQURA) {
int32_t umalquraStartdays = yearStart(UMALQURA_YEAR_START) ;
if( days < umalquraStartdays){
//Use Civil calculation
- year = (int)ClockMath::floorDivide( (double)(30 * days + 10646) , 10631.0 );
+ year = (int32_t)ClockMath::floorDivide(
+ (30 * (int64_t)days + 10646) , (int64_t)10631.0 );
month = (int32_t)uprv_ceil((days - 29 - yearStart(year)) / 29.5 );
month = month<11?month:11;
startDate = monthStart(year, month);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/islamcal.h b/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
index fde58478c0a..d324c6e409b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
@@ -395,7 +395,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
/**
- * Returns TRUE because the Islamic Calendar does have a default century
+ * Returns true because the Islamic Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/japancal.h b/Build/source/libs/icu/icu-src/source/i18n/japancal.h
index 03e6361c9f9..e5b95d732c0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/japancal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/japancal.h
@@ -167,7 +167,7 @@ public:
virtual const char * getType() const;
/**
- * @return FALSE - no default century in Japanese
+ * @return false - no default century in Japanese
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp b/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
index 2ee5e123749..be0d16bc7f5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
@@ -16,11 +16,16 @@
* created by: Umesh P. Nair
*/
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
#include "cmemory.h"
#include "unicode/fpositer.h" // FieldPositionIterator
#include "unicode/listformatter.h"
#include "unicode/simpleformatter.h"
#include "unicode/ulistformatter.h"
+#include "unicode/uscript.h"
#include "fphdlimp.h"
#include "mutex.h"
#include "hash.h"
@@ -35,58 +40,226 @@
U_NAMESPACE_BEGIN
-struct ListFormatInternal : public UMemory {
+namespace {
+
+class PatternHandler : public UObject {
+public:
+ PatternHandler(const UnicodeString& two, const UnicodeString& end, UErrorCode& errorCode) :
+ twoPattern(two, 2, 2, errorCode),
+ endPattern(end, 2, 2, errorCode) { }
+
+ PatternHandler(const SimpleFormatter& two, const SimpleFormatter& end) :
+ twoPattern(two),
+ endPattern(end) { }
+
+ virtual ~PatternHandler();
+
+ virtual PatternHandler* clone() const { return new PatternHandler(twoPattern, endPattern); }
+
+ /** Argument: final string in the list. */
+ virtual const SimpleFormatter& getTwoPattern(const UnicodeString&) const {
+ return twoPattern;
+ }
+
+ /** Argument: final string in the list. */
+ virtual const SimpleFormatter& getEndPattern(const UnicodeString&) const {
+ return endPattern;
+ }
+
+protected:
SimpleFormatter twoPattern;
+ SimpleFormatter endPattern;
+};
+
+PatternHandler::~PatternHandler() {
+}
+
+class ContextualHandler : public PatternHandler {
+public:
+ ContextualHandler(bool (*testFunc)(const UnicodeString& text),
+ const UnicodeString& thenTwo,
+ const UnicodeString& elseTwo,
+ const UnicodeString& thenEnd,
+ const UnicodeString& elseEnd,
+ UErrorCode& errorCode) :
+ PatternHandler(elseTwo, elseEnd, errorCode),
+ test(testFunc),
+ thenTwoPattern(thenTwo, 2, 2, errorCode),
+ thenEndPattern(thenEnd, 2, 2, errorCode) { }
+
+ ContextualHandler(bool (*testFunc)(const UnicodeString& text),
+ const SimpleFormatter& thenTwo, SimpleFormatter elseTwo,
+ const SimpleFormatter& thenEnd, SimpleFormatter elseEnd) :
+ PatternHandler(elseTwo, elseEnd),
+ test(testFunc),
+ thenTwoPattern(thenTwo),
+ thenEndPattern(thenEnd) { }
+
+ ~ContextualHandler() override;
+
+ PatternHandler* clone() const override {
+ return new ContextualHandler(
+ test, thenTwoPattern, twoPattern, thenEndPattern, endPattern);
+ }
+
+ const SimpleFormatter& getTwoPattern(
+ const UnicodeString& text) const override {
+ return (test)(text) ? thenTwoPattern : twoPattern;
+ }
+
+ const SimpleFormatter& getEndPattern(
+ const UnicodeString& text) const override {
+ return (test)(text) ? thenEndPattern : endPattern;
+ }
+
+private:
+ bool (*test)(const UnicodeString&);
+ SimpleFormatter thenTwoPattern;
+ SimpleFormatter thenEndPattern;
+};
+
+ContextualHandler::~ContextualHandler() {
+}
+
+static const char16_t *spanishY = u"{0} y {1}";
+static const char16_t *spanishE = u"{0} e {1}";
+static const char16_t *spanishO = u"{0} o {1}";
+static const char16_t *spanishU = u"{0} u {1}";
+static const char16_t *hebrewVav = u"{0} \u05D5{1}";
+static const char16_t *hebrewVavDash = u"{0} \u05D5-{1}";
+
+// Condiction to change to e.
+// Starts with "hi" or "i" but not with "hie" nor "hia"
+static bool shouldChangeToE(const UnicodeString& text) {
+ int32_t len = text.length();
+ if (len == 0) { return false; }
+ // Case insensitive match hi but not hie nor hia.
+ if ((text[0] == u'h' || text[0] == u'H') &&
+ ((len > 1) && (text[1] == u'i' || text[1] == u'I')) &&
+ ((len == 2) || !(text[2] == u'a' || text[2] == u'A' || text[2] == u'e' || text[2] == u'E'))) {
+ return true;
+ }
+ // Case insensitive for "start with i"
+ if (text[0] == u'i' || text[0] == u'I') { return true; }
+ return false;
+}
+
+// Condiction to change to u.
+// Starts with "o", "ho", and "8". Also "11" by itself.
+// re: ^((o|ho|8).*|11)$
+static bool shouldChangeToU(const UnicodeString& text) {
+ int32_t len = text.length();
+ if (len == 0) { return false; }
+ // Case insensitive match o.* and 8.*
+ if (text[0] == u'o' || text[0] == u'O' || text[0] == u'8') { return true; }
+ // Case insensitive match ho.*
+ if ((text[0] == u'h' || text[0] == u'H') &&
+ ((len > 1) && (text[1] == 'o' || text[1] == u'O'))) {
+ return true;
+ }
+ // match "^11$" and "^11 .*"
+ if ((len >= 2) && text[0] == u'1' && text[1] == u'1' && (len == 2 || text[2] == u' ')) { return true; }
+ return false;
+}
+
+// Condiction to change to VAV follow by a dash.
+// Starts with non Hebrew letter.
+static bool shouldChangeToVavDash(const UnicodeString& text) {
+ if (text.isEmpty()) { return false; }
+ UErrorCode status = U_ZERO_ERROR;
+ return uscript_getScript(text.char32At(0), &status) != USCRIPT_HEBREW;
+}
+
+PatternHandler* createPatternHandler(
+ const char* lang, const UnicodeString& two, const UnicodeString& end,
+ UErrorCode& status) {
+ if (uprv_strcmp(lang, "es") == 0) {
+ // Spanish
+ UnicodeString spanishYStr(true, spanishY, -1);
+ bool twoIsY = two == spanishYStr;
+ bool endIsY = end == spanishYStr;
+ if (twoIsY || endIsY) {
+ UnicodeString replacement(true, spanishE, -1);
+ return new ContextualHandler(
+ shouldChangeToE,
+ twoIsY ? replacement : two, two,
+ endIsY ? replacement : end, end, status);
+ }
+ UnicodeString spanishOStr(true, spanishO, -1);
+ bool twoIsO = two == spanishOStr;
+ bool endIsO = end == spanishOStr;
+ if (twoIsO || endIsO) {
+ UnicodeString replacement(true, spanishU, -1);
+ return new ContextualHandler(
+ shouldChangeToU,
+ twoIsO ? replacement : two, two,
+ endIsO ? replacement : end, end, status);
+ }
+ } else if (uprv_strcmp(lang, "he") == 0 || uprv_strcmp(lang, "iw") == 0) {
+ // Hebrew
+ UnicodeString hebrewVavStr(true, hebrewVav, -1);
+ bool twoIsVav = two == hebrewVavStr;
+ bool endIsVav = end == hebrewVavStr;
+ if (twoIsVav || endIsVav) {
+ UnicodeString replacement(true, hebrewVavDash, -1);
+ return new ContextualHandler(
+ shouldChangeToVavDash,
+ twoIsVav ? replacement : two, two,
+ endIsVav ? replacement : end, end, status);
+ }
+ }
+ return new PatternHandler(two, end, status);
+}
+
+} // namespace
+
+struct ListFormatInternal : public UMemory {
SimpleFormatter startPattern;
SimpleFormatter middlePattern;
- SimpleFormatter endPattern;
+ LocalPointer<PatternHandler> patternHandler;
ListFormatInternal(
const UnicodeString& two,
const UnicodeString& start,
const UnicodeString& middle,
const UnicodeString& end,
+ const Locale& locale,
UErrorCode &errorCode) :
- twoPattern(two, 2, 2, errorCode),
startPattern(start, 2, 2, errorCode),
middlePattern(middle, 2, 2, errorCode),
- endPattern(end, 2, 2, errorCode) {}
+ patternHandler(createPatternHandler(locale.getLanguage(), two, end, errorCode), errorCode) { }
ListFormatInternal(const ListFormatData &data, UErrorCode &errorCode) :
- twoPattern(data.twoPattern, errorCode),
startPattern(data.startPattern, errorCode),
middlePattern(data.middlePattern, errorCode),
- endPattern(data.endPattern, errorCode) { }
+ patternHandler(createPatternHandler(
+ data.locale.getLanguage(), data.twoPattern, data.endPattern, errorCode), errorCode) { }
ListFormatInternal(const ListFormatInternal &other) :
- twoPattern(other.twoPattern),
startPattern(other.startPattern),
middlePattern(other.middlePattern),
- endPattern(other.endPattern) { }
+ patternHandler(other.patternHandler->clone()) { }
};
-#if !UCONFIG_NO_FORMATTING
-class FormattedListData : public FormattedValueFieldPositionIteratorImpl {
+class FormattedListData : public FormattedValueStringBuilderImpl {
public:
- FormattedListData(UErrorCode& status) : FormattedValueFieldPositionIteratorImpl(5, status) {}
+ FormattedListData(UErrorCode&) : FormattedValueStringBuilderImpl(kUndefinedField) {}
virtual ~FormattedListData();
};
FormattedListData::~FormattedListData() = default;
UPRV_FORMATTED_VALUE_SUBCLASS_AUTO_IMPL(FormattedList)
-#endif
static Hashtable* listPatternHash = nullptr;
-static const char STANDARD_STYLE[] = "standard";
U_CDECL_BEGIN
static UBool U_CALLCONV uprv_listformatter_cleanup() {
delete listPatternHash;
listPatternHash = nullptr;
- return TRUE;
+ return true;
}
static void U_CALLCONV
@@ -179,6 +352,50 @@ const ListFormatInternal* ListFormatter::getListFormatInternal(
return result;
}
+static const char* typeWidthToStyleString(UListFormatterType type, UListFormatterWidth width) {
+ switch (type) {
+ case ULISTFMT_TYPE_AND:
+ switch (width) {
+ case ULISTFMT_WIDTH_WIDE:
+ return "standard";
+ case ULISTFMT_WIDTH_SHORT:
+ return "standard-short";
+ case ULISTFMT_WIDTH_NARROW:
+ return "standard-narrow";
+ default:
+ return nullptr;
+ }
+ break;
+
+ case ULISTFMT_TYPE_OR:
+ switch (width) {
+ case ULISTFMT_WIDTH_WIDE:
+ return "or";
+ case ULISTFMT_WIDTH_SHORT:
+ return "or-short";
+ case ULISTFMT_WIDTH_NARROW:
+ return "or-narrow";
+ default:
+ return nullptr;
+ }
+ break;
+
+ case ULISTFMT_TYPE_UNITS:
+ switch (width) {
+ case ULISTFMT_WIDTH_WIDE:
+ return "unit";
+ case ULISTFMT_WIDTH_SHORT:
+ return "unit-short";
+ case ULISTFMT_WIDTH_NARROW:
+ return "unit-narrow";
+ default:
+ return nullptr;
+ }
+ }
+
+ return nullptr;
+}
+
static const UChar solidus = 0x2F;
static const UChar aliasPrefix[] = { 0x6C,0x69,0x73,0x74,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x2F }; // "listPattern/"
enum {
@@ -279,7 +496,8 @@ ListFormatInternal* ListFormatter::loadListFormatInternal(
errorCode = U_MISSING_RESOURCE_ERROR;
return nullptr;
}
- ListFormatInternal* result = new ListFormatInternal(sink.two, sink.start, sink.middle, sink.end, errorCode);
+
+ ListFormatInternal* result = new ListFormatInternal(sink.two, sink.start, sink.middle, sink.end, locale, errorCode);
if (result == nullptr) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
@@ -297,7 +515,17 @@ ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) {
}
ListFormatter* ListFormatter::createInstance(const Locale& locale, UErrorCode& errorCode) {
- return createInstance(locale, STANDARD_STYLE, errorCode);
+ return createInstance(locale, ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_WIDE, errorCode);
+}
+
+ListFormatter* ListFormatter::createInstance(
+ const Locale& locale, UListFormatterType type, UListFormatterWidth width, UErrorCode& errorCode) {
+ const char* style = typeWidthToStyleString(type, width);
+ if (style == nullptr) {
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+ return nullptr;
+ }
+ return createInstance(locale, style, errorCode);
}
ListFormatter* ListFormatter::createInstance(const Locale& locale, const char *style, UErrorCode& errorCode) {
@@ -325,50 +553,89 @@ ListFormatter::~ListFormatter() {
delete owned;
}
-/**
- * Joins first and second using the pattern pat.
- * On entry offset is an offset into first or -1 if offset unspecified.
- * On exit offset is offset of second in result if recordOffset was set
- * Otherwise if it was >=0 it is set to point into result where it used
- * to point into first. On exit, result is the join of first and second
- * according to pat. Any previous value of result gets replaced.
- */
-static void joinStringsAndReplace(
- const SimpleFormatter& pat,
- const UnicodeString& first,
- const UnicodeString& second,
- UnicodeString &result,
- UBool recordOffset,
- int32_t &offset,
- int32_t *offsetFirst,
- int32_t *offsetSecond,
- UErrorCode& errorCode) {
- if (U_FAILURE(errorCode)) {
- return;
- }
- const UnicodeString *params[2] = {&first, &second};
- int32_t offsets[2];
- pat.formatAndReplace(
- params,
- UPRV_LENGTHOF(params),
- result,
- offsets,
- UPRV_LENGTHOF(offsets),
- errorCode);
- if (U_FAILURE(errorCode)) {
- return;
+namespace {
+
+class FormattedListBuilder {
+public:
+ LocalPointer<FormattedListData> data;
+
+ /** For lists of length 1+ */
+ FormattedListBuilder(const UnicodeString& start, UErrorCode& status)
+ : data(new FormattedListData(status), status) {
+ if (U_SUCCESS(status)) {
+ data->getStringRef().append(
+ start,
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD},
+ status);
+ data->appendSpanInfo(0, start.length(), status);
+ }
}
- if (offsets[0] == -1 || offsets[1] == -1) {
- errorCode = U_INVALID_FORMAT_ERROR;
- return;
+
+ /** For lists of length 0 */
+ FormattedListBuilder(UErrorCode& status)
+ : data(new FormattedListData(status), status) {
}
- if (recordOffset) {
- offset = offsets[1];
- } else if (offset >= 0) {
- offset += offsets[0];
+
+ void append(const SimpleFormatter& pattern, const UnicodeString& next, int32_t position, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (pattern.getArgumentLimit() != 2) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
+ // In the pattern, {0} are the pre-existing elements and {1} is the new element.
+ int32_t offsets[] = {0, 0};
+ UnicodeString temp = pattern.getTextWithNoArguments(offsets, 2);
+ if (offsets[0] <= offsets[1]) {
+ // prefix{0}infix{1}suffix
+ // Prepend prefix, then append infix, element, and suffix
+ data->getStringRef().insert(
+ 0,
+ temp.tempSubStringBetween(0, offsets[0]),
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
+ status);
+ data->getStringRef().append(
+ temp.tempSubStringBetween(offsets[0], offsets[1]),
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
+ status);
+ data->getStringRef().append(
+ next,
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD},
+ status);
+ data->appendSpanInfo(position, next.length(), status);
+ data->getStringRef().append(
+ temp.tempSubString(offsets[1]),
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
+ status);
+ } else {
+ // prefix{1}infix{0}suffix
+ // Prepend infix, element, and prefix, then append suffix.
+ // (We prepend in reverse order because prepending at index 0 is fast.)
+ data->getStringRef().insert(
+ 0,
+ temp.tempSubStringBetween(offsets[1], offsets[0]),
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
+ status);
+ data->getStringRef().insert(
+ 0,
+ next,
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD},
+ status);
+ data->prependSpanInfo(position, next.length(), status);
+ data->getStringRef().insert(
+ 0,
+ temp.tempSubStringBetween(0, offsets[1]),
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
+ status);
+ data->getStringRef().append(
+ temp.tempSubString(offsets[0]),
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
+ status);
+ }
}
- if (offsetFirst != nullptr) *offsetFirst = offsets[0];
- if (offsetSecond != nullptr) *offsetSecond = offsets[1];
+};
+
}
UnicodeString& ListFormatter::format(
@@ -380,19 +647,6 @@ UnicodeString& ListFormatter::format(
return format(items, nItems, appendTo, -1, offset, errorCode);
}
-#if !UCONFIG_NO_FORMATTING
-UnicodeString& ListFormatter::format(
- const UnicodeString items[],
- int32_t nItems,
- UnicodeString & appendTo,
- FieldPositionIterator* posIter,
- UErrorCode& errorCode) const {
- int32_t offset;
- FieldPositionIteratorHandler handler(posIter, errorCode);
- return format_(items, nItems, appendTo, -1, offset, &handler, errorCode);
-}
-#endif
-
UnicodeString& ListFormatter::format(
const UnicodeString items[],
int32_t nItems,
@@ -400,177 +654,86 @@ UnicodeString& ListFormatter::format(
int32_t index,
int32_t &offset,
UErrorCode& errorCode) const {
- return format_(items, nItems, appendTo, index, offset, nullptr, errorCode);
+ int32_t initialOffset = appendTo.length();
+ auto result = formatStringsToValue(items, nItems, errorCode);
+ UnicodeStringAppendable appendable(appendTo);
+ result.appendTo(appendable, errorCode);
+ if (index >= 0) {
+ ConstrainedFieldPosition cfpos;
+ cfpos.constrainField(UFIELD_CATEGORY_LIST_SPAN, index);
+ result.nextPosition(cfpos, errorCode);
+ offset = initialOffset + cfpos.getStart();
+ }
+ return appendTo;
}
-#if !UCONFIG_NO_FORMATTING
FormattedList ListFormatter::formatStringsToValue(
const UnicodeString items[],
int32_t nItems,
UErrorCode& errorCode) const {
- LocalPointer<FormattedListData> result(new FormattedListData(errorCode), errorCode);
- if (U_FAILURE(errorCode)) {
- return FormattedList(errorCode);
+ if (nItems == 0) {
+ FormattedListBuilder result(errorCode);
+ if (U_FAILURE(errorCode)) {
+ return FormattedList(errorCode);
+ } else {
+ return FormattedList(result.data.orphan());
+ }
+ } else if (nItems == 1) {
+ FormattedListBuilder result(items[0], errorCode);
+ result.data->getStringRef().writeTerminator(errorCode);
+ if (U_FAILURE(errorCode)) {
+ return FormattedList(errorCode);
+ } else {
+ return FormattedList(result.data.orphan());
+ }
+ } else if (nItems == 2) {
+ FormattedListBuilder result(items[0], errorCode);
+ if (U_FAILURE(errorCode)) {
+ return FormattedList(errorCode);
+ }
+ result.append(
+ data->patternHandler->getTwoPattern(items[1]),
+ items[1],
+ 1,
+ errorCode);
+ result.data->getStringRef().writeTerminator(errorCode);
+ if (U_FAILURE(errorCode)) {
+ return FormattedList(errorCode);
+ } else {
+ return FormattedList(result.data.orphan());
+ }
}
- UnicodeString string;
- int32_t offset;
- auto handler = result->getHandler(errorCode);
- handler.setCategory(UFIELD_CATEGORY_LIST);
- format_(items, nItems, string, -1, offset, &handler, errorCode);
- handler.getError(errorCode);
- result->appendString(string, errorCode);
+
+ FormattedListBuilder result(items[0], errorCode);
if (U_FAILURE(errorCode)) {
return FormattedList(errorCode);
}
-
- // Add span fields and sort
- ConstrainedFieldPosition cfpos;
- cfpos.constrainField(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD);
- int32_t i = 0;
- handler.setCategory(UFIELD_CATEGORY_LIST_SPAN);
- while (result->nextPosition(cfpos, errorCode)) {
- handler.addAttribute(i++, cfpos.getStart(), cfpos.getLimit());
+ result.append(
+ data->startPattern,
+ items[1],
+ 1,
+ errorCode);
+ for (int32_t i = 2; i < nItems - 1; i++) {
+ result.append(
+ data->middlePattern,
+ items[i],
+ i,
+ errorCode);
}
- handler.getError(errorCode);
+ result.append(
+ data->patternHandler->getEndPattern(items[nItems-1]),
+ items[nItems-1],
+ nItems-1,
+ errorCode);
+ result.data->getStringRef().writeTerminator(errorCode);
if (U_FAILURE(errorCode)) {
return FormattedList(errorCode);
+ } else {
+ return FormattedList(result.data.orphan());
}
- result->sort();
-
- return FormattedList(result.orphan());
}
-#endif
-
-UnicodeString& ListFormatter::format_(
- const UnicodeString items[],
- int32_t nItems,
- UnicodeString& appendTo,
- int32_t index,
- int32_t &offset,
- FieldPositionHandler* handler,
- UErrorCode& errorCode) const {
-#if !UCONFIG_NO_FORMATTING
- offset = -1;
- if (U_FAILURE(errorCode)) {
- return appendTo;
- }
- if (data == nullptr) {
- errorCode = U_INVALID_STATE_ERROR;
- return appendTo;
- }
- if (nItems <= 0) {
- return appendTo;
- }
- if (nItems == 1) {
- if (index == 0) {
- offset = appendTo.length();
- }
- if (handler != nullptr) {
- handler->addAttribute(ULISTFMT_ELEMENT_FIELD,
- appendTo.length(),
- appendTo.length() + items[0].length());
- }
- appendTo.append(items[0]);
- return appendTo;
- }
- UnicodeString result(items[0]);
- if (index == 0) {
- offset = 0;
- }
- int32_t offsetFirst = 0;
- int32_t offsetSecond = 0;
- int32_t prefixLength = 0;
- // for n items, there are 2 * (n + 1) boundary including 0 and the upper
- // edge.
- MaybeStackArray<int32_t, 10> offsets((handler != nullptr) ? 2 * (nItems + 1): 0);
- joinStringsAndReplace(
- nItems == 2 ? data->twoPattern : data->startPattern,
- result,
- items[1],
- result,
- index == 1,
- offset,
- &offsetFirst,
- &offsetSecond,
- errorCode);
- if (handler != nullptr) {
- offsets[0] = 0;
- prefixLength += offsetFirst;
- offsets[1] = offsetSecond - prefixLength;
- }
- if (nItems > 2) {
- for (int32_t i = 2; i < nItems - 1; ++i) {
- joinStringsAndReplace(
- data->middlePattern,
- result,
- items[i],
- result,
- index == i,
- offset,
- &offsetFirst,
- &offsetSecond,
- errorCode);
- if (handler != nullptr) {
- prefixLength += offsetFirst;
- offsets[i] = offsetSecond - prefixLength;
- }
- }
- joinStringsAndReplace(
- data->endPattern,
- result,
- items[nItems - 1],
- result,
- index == nItems - 1,
- offset,
- &offsetFirst,
- &offsetSecond,
- errorCode);
- if (handler != nullptr) {
- prefixLength += offsetFirst;
- offsets[nItems - 1] = offsetSecond - prefixLength;
- }
- }
- if (handler != nullptr) {
- // If there are already some data in appendTo, we need to adjust the index
- // by shifting that lenght while insert into handler.
- int32_t shift = appendTo.length() + prefixLength;
- // Output the ULISTFMT_ELEMENT_FIELD in the order of the input elements
- for (int32_t i = 0; i < nItems; ++i) {
- offsets[i + nItems] = offsets[i] + items[i].length() + shift;
- offsets[i] += shift;
- handler->addAttribute(
- ULISTFMT_ELEMENT_FIELD, // id
- offsets[i], // index
- offsets[i + nItems]); // limit
- }
- // The locale pattern may reorder the items (such as in ur-IN locale),
- // so we cannot assume the array is in accendning order.
- // To handle the edging case, just insert the two ends into the array
- // and sort. Then we output ULISTFMT_LITERAL_FIELD if the indecies
- // between the even and odd position are not the same in the sorted array.
- offsets[2 * nItems] = shift - prefixLength;
- offsets[2 * nItems + 1] = result.length() + shift - prefixLength;
- uprv_sortArray(offsets.getAlias(), 2 * (nItems + 1), sizeof(int32_t),
- uprv_int32Comparator, nullptr,
- false, &errorCode);
- for (int32_t i = 0; i <= nItems; ++i) {
- if (offsets[i * 2] != offsets[i * 2 + 1]) {
- handler->addAttribute(
- ULISTFMT_LITERAL_FIELD, // id
- offsets[i * 2], // index
- offsets[i * 2 + 1]); // limit
- }
- }
- }
- if (U_SUCCESS(errorCode)) {
- if (offset >= 0) {
- offset += appendTo.length();
- }
- appendTo += result;
- }
-#endif
- return appendTo;
-}
U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
index 1949f17b137..08e6f663912 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
@@ -38,6 +38,7 @@
#include "uassert.h"
#include "unicode/numberformatter.h"
#include "number_longnames.h"
+#include "number_utypes.h"
#include "sharednumberformat.h"
#include "sharedpluralrules.h"
@@ -47,6 +48,8 @@
U_NAMESPACE_BEGIN
+using number::impl::UFormattedNumberData;
+
static constexpr int32_t WIDTH_INDEX_COUNT = UMEASFMT_WIDTH_NARROW + 1;
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureFormat)
@@ -504,12 +507,13 @@ UnicodeString &MeasureFormat::formatMeasurePerUnit(
status = U_UNSUPPORTED_ERROR;
return appendTo;
}
- number::FormattedNumber result;
+ UFormattedNumberData result;
if (auto* lnf = df->toNumberFormatter(status)) {
- result = lnf->unit(measure.getUnit())
+ result.quantity.setToDouble(measure.getNumber().getDouble(status));
+ lnf->unit(measure.getUnit())
.perUnit(perUnit)
.unitWidth(getUnitWidth(fWidth))
- .formatDouble(measure.getNumber().getDouble(status), status);
+ .formatImpl(&result, status);
}
DecimalFormat::fieldPositionHelper(result, pos, appendTo.length(), status);
appendTo.append(result.toTempString(status));
@@ -699,11 +703,12 @@ UnicodeString &MeasureFormat::formatMeasure(
SimpleFormatter formatter(pattern, 0, 1, status);
return QuantityFormatter::format(formatter, formattedNumber, appendTo, pos, status);
}
- number::FormattedNumber result;
+ UFormattedNumberData result;
if (auto* lnf = df->toNumberFormatter(status)) {
- result = lnf->unit(amtUnit)
+ result.quantity.setToDouble(amtNumber.getDouble(status));
+ lnf->unit(amtUnit)
.unitWidth(getUnitWidth(fWidth))
- .formatDouble(amtNumber.getDouble(status), status);
+ .formatImpl(&result, status);
}
DecimalFormat::fieldPositionHelper(result, pos, appendTo.length(), status);
appendTo.append(result.toTempString(status));
@@ -774,11 +779,6 @@ UnicodeString &MeasureFormat::formatNumeric(
case u's': value = seconds; break;
}
- // For undefined field we use UNUM_FIELD_COUNT, for historical reasons.
- // See cleanup bug: https://unicode-org.atlassian.net/browse/ICU-20665
- // But we give it a clear name, to keep "the ugly part" in one place.
- constexpr UNumberFormatFields undefinedField = UNUM_FIELD_COUNT;
-
// There is not enough info to add Field(s) for the unit because all we have are plain
// text patterns. For example in "21:51" there is no text for something like "hour",
// while in something like "21h51" there is ("h"). But we can't really tell...
@@ -787,7 +787,7 @@ UnicodeString &MeasureFormat::formatNumeric(
case u'm':
case u's':
if (protect) {
- fsb.appendChar16(c, undefinedField, status);
+ fsb.appendChar16(c, kUndefinedField, status);
} else {
UnicodeString tmp;
if ((i + 1 < patternLength) && pattern[i + 1] == c) { // doubled
@@ -797,20 +797,20 @@ UnicodeString &MeasureFormat::formatNumeric(
numberFormatter->format(value, tmp, status);
}
// TODO: Use proper Field
- fsb.append(tmp, undefinedField, status);
+ fsb.append(tmp, kUndefinedField, status);
}
break;
case u'\'':
// '' is escaped apostrophe
if ((i + 1 < patternLength) && pattern[i + 1] == c) {
- fsb.appendChar16(c, undefinedField, status);
+ fsb.appendChar16(c, kUndefinedField, status);
i++;
} else {
protect = !protect;
}
break;
default:
- fsb.appendChar16(c, undefinedField, status);
+ fsb.appendChar16(c, kUndefinedField, status);
}
}
@@ -861,7 +861,7 @@ UnicodeString &MeasureFormat::formatMeasuresSlowTrack(
return appendTo;
}
// Fix up FieldPosition indexes if our field is found.
- if (offset != -1) {
+ if (fieldPositionFoundIndex != -1 && offset != -1) {
pos.setBeginIndex(fpos.getBeginIndex() + offset);
pos.setEndIndex(fpos.getEndIndex() + offset);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp b/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
index 7a0a6060536..70b7a453adb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
@@ -17,9 +17,11 @@
#if !UCONFIG_NO_FORMATTING
#include "unicode/uenum.h"
+#include "unicode/errorcode.h"
#include "ustrenum.h"
#include "cstring.h"
#include "uassert.h"
+#include "measunit_impl.h"
U_NAMESPACE_BEGIN
@@ -32,8 +34,9 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit)
// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
//
// Start generated code
+// TODO(ICU-21076): improve how this generated code is produced.
-
+// Maps from Type ID to offset in gSubTypes.
static const int32_t gOffsets[] = {
0,
2,
@@ -48,45 +51,49 @@ static const int32_t gOffsets[] = {
368,
370,
374,
- 381,
- 402,
+ 382,
404,
- 418,
- 421,
- 427,
- 437,
- 441,
- 445,
- 447,
- 474
+ 408,
+ 423,
+ 426,
+ 432,
+ 442,
+ 446,
+ 450,
+ 452,
+ 486
};
-static const int32_t gIndexes[] = {
- 0,
- 2,
- 7,
- 17,
- 25,
- 29,
- 29,
- 40,
- 56,
- 60,
- 69,
- 71,
- 75,
- 82,
- 103,
- 105,
- 119,
- 122,
- 128,
- 138,
- 142,
- 146,
- 148,
- 175
-};
+// TODO: FIX CODE GENERATION - leaving this here but commented-out to make it
+// clear that we no longer want this array. We needed it for only one thing: efficient checking of "currency".
+//
+// static const int32_t gIndexes[] = {
+// 0,
+// 2,
+// 7,
+// 17,
+// 25,
+// 29,
+// 29,
+// 40,
+// 56,
+// 60,
+// 69,
+// 71,
+// 75,
+// 83,
+// 105,
+// 109,
+// 124,
+// 127,
+// 133,
+// 143,
+// 147,
+// 151,
+// 153,
+// 187
+// };
+static const int32_t kCurrencyOffset = 5;
// Must be sorted alphabetically.
static const char * const gTypes[] = {
@@ -118,7 +125,7 @@ static const char * const gTypes[] = {
// Must be grouped by type and sorted alphabetically within each type.
static const char * const gSubTypes[] = {
"g-force",
- "meter-per-second-squared",
+ "meter-per-square-second",
"arc-minute",
"arc-second",
"degree",
@@ -138,11 +145,11 @@ static const char * const gSubTypes[] = {
"milligram-per-deciliter",
"millimole-per-liter",
"mole",
- "part-per-million",
"percent",
"permille",
+ "permillion",
"permyriad",
- "liter-per-100kilometers",
+ "liter-per-100-kilometer",
"liter-per-kilometer",
"mile-per-gallon",
"mile-per-gallon-imperial",
@@ -491,6 +498,7 @@ static const char * const gSubTypes[] = {
"hertz",
"kilohertz",
"megahertz",
+ "dot",
"dot-per-centimeter",
"dot-per-inch",
"em",
@@ -501,6 +509,7 @@ static const char * const gSubTypes[] = {
"astronomical-unit",
"centimeter",
"decimeter",
+ "earth-radius",
"fathom",
"foot",
"furlong",
@@ -519,11 +528,14 @@ static const char * const gSubTypes[] = {
"point",
"solar-radius",
"yard",
+ "candela",
+ "lumen",
"lux",
"solar-luminosity",
"carat",
"dalton",
"earth-mass",
+ "grain",
"gram",
"kilogram",
"metric-ton",
@@ -535,9 +547,9 @@ static const char * const gSubTypes[] = {
"solar-mass",
"stone",
"ton",
- "base",
- "percent",
- "permille",
+ "", // TODO(ICU-21076): manual edit of what should have been generated by Java.
+ "percent", // TODO(ICU-21076): regenerate, deal with duplication.
+ "permille", // TODO(ICU-21076): regenerate, deal with duplication.
"gigawatt",
"horsepower",
"kilowatt",
@@ -547,13 +559,13 @@ static const char * const gSubTypes[] = {
"atmosphere",
"bar",
"hectopascal",
- "inch-hg",
+ "inch-ofhg",
"kilopascal",
"megapascal",
"millibar",
- "millimeter-of-mercury",
+ "millimeter-ofhg",
"pascal",
- "pound-per-square-inch",
+ "pound-force-per-square-inch",
"kilometer-per-hour",
"knot",
"meter-per-second",
@@ -563,7 +575,7 @@ static const char * const gSubTypes[] = {
"generic",
"kelvin",
"newton-meter",
- "pound-foot",
+ "pound-force-foot",
"acre-foot",
"barrel",
"bushel",
@@ -578,34 +590,29 @@ static const char * const gSubTypes[] = {
"cup",
"cup-metric",
"deciliter",
+ "dessert-spoon",
+ "dessert-spoon-imperial",
+ "dram",
+ "drop",
"fluid-ounce",
"fluid-ounce-imperial",
"gallon",
"gallon-imperial",
"hectoliter",
+ "jigger",
"liter",
"megaliter",
"milliliter",
+ "pinch",
"pint",
"pint-metric",
"quart",
+ "quart-imperial",
"tablespoon",
"teaspoon"
};
-// Must be sorted by first value and then second value.
-static int32_t unitPerUnitToSingleUnit[][4] = {
- {378, 382, 12, 5},
- {378, 387, 12, 6},
- {388, 343, 19, 0},
- {390, 350, 19, 2},
- {392, 343, 19, 3},
- {392, 463, 4, 2},
- {392, 464, 4, 3},
- {411, 460, 3, 1},
- {414, 12, 18, 9},
- {466, 388, 4, 1}
-};
+// unitPerUnitToSingleUnit no longer in use! TODO: remove from code-generation code.
// Shortcuts to the base unit in order to make the default constructor fast
static const int32_t kBaseTypeIdx = 16;
@@ -779,27 +786,27 @@ MeasureUnit MeasureUnit::getMole() {
return MeasureUnit(3, 3);
}
-MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPercent(UErrorCode &status) {
return MeasureUnit::create(3, 4, status);
}
-MeasureUnit MeasureUnit::getPartPerMillion() {
+MeasureUnit MeasureUnit::getPercent() {
return MeasureUnit(3, 4);
}
-MeasureUnit *MeasureUnit::createPercent(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPermille(UErrorCode &status) {
return MeasureUnit::create(3, 5, status);
}
-MeasureUnit MeasureUnit::getPercent() {
+MeasureUnit MeasureUnit::getPermille() {
return MeasureUnit(3, 5);
}
-MeasureUnit *MeasureUnit::createPermille(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
return MeasureUnit::create(3, 6, status);
}
-MeasureUnit MeasureUnit::getPermille() {
+MeasureUnit MeasureUnit::getPartPerMillion() {
return MeasureUnit(3, 6);
}
@@ -1211,62 +1218,70 @@ MeasureUnit MeasureUnit::getMegahertz() {
return MeasureUnit(11, 3);
}
-MeasureUnit *MeasureUnit::createDotPerCentimeter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDot(UErrorCode &status) {
return MeasureUnit::create(12, 0, status);
}
-MeasureUnit MeasureUnit::getDotPerCentimeter() {
+MeasureUnit MeasureUnit::getDot() {
return MeasureUnit(12, 0);
}
-MeasureUnit *MeasureUnit::createDotPerInch(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDotPerCentimeter(UErrorCode &status) {
return MeasureUnit::create(12, 1, status);
}
-MeasureUnit MeasureUnit::getDotPerInch() {
+MeasureUnit MeasureUnit::getDotPerCentimeter() {
return MeasureUnit(12, 1);
}
-MeasureUnit *MeasureUnit::createEm(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDotPerInch(UErrorCode &status) {
return MeasureUnit::create(12, 2, status);
}
-MeasureUnit MeasureUnit::getEm() {
+MeasureUnit MeasureUnit::getDotPerInch() {
return MeasureUnit(12, 2);
}
-MeasureUnit *MeasureUnit::createMegapixel(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createEm(UErrorCode &status) {
return MeasureUnit::create(12, 3, status);
}
-MeasureUnit MeasureUnit::getMegapixel() {
+MeasureUnit MeasureUnit::getEm() {
return MeasureUnit(12, 3);
}
-MeasureUnit *MeasureUnit::createPixel(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMegapixel(UErrorCode &status) {
return MeasureUnit::create(12, 4, status);
}
-MeasureUnit MeasureUnit::getPixel() {
+MeasureUnit MeasureUnit::getMegapixel() {
return MeasureUnit(12, 4);
}
-MeasureUnit *MeasureUnit::createPixelPerCentimeter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPixel(UErrorCode &status) {
return MeasureUnit::create(12, 5, status);
}
-MeasureUnit MeasureUnit::getPixelPerCentimeter() {
+MeasureUnit MeasureUnit::getPixel() {
return MeasureUnit(12, 5);
}
-MeasureUnit *MeasureUnit::createPixelPerInch(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPixelPerCentimeter(UErrorCode &status) {
return MeasureUnit::create(12, 6, status);
}
-MeasureUnit MeasureUnit::getPixelPerInch() {
+MeasureUnit MeasureUnit::getPixelPerCentimeter() {
return MeasureUnit(12, 6);
}
+MeasureUnit *MeasureUnit::createPixelPerInch(UErrorCode &status) {
+ return MeasureUnit::create(12, 7, status);
+}
+
+MeasureUnit MeasureUnit::getPixelPerInch() {
+ return MeasureUnit(12, 7);
+}
+
MeasureUnit *MeasureUnit::createAstronomicalUnit(UErrorCode &status) {
return MeasureUnit::create(13, 0, status);
}
@@ -1291,166 +1306,190 @@ MeasureUnit MeasureUnit::getDecimeter() {
return MeasureUnit(13, 2);
}
-MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createEarthRadius(UErrorCode &status) {
return MeasureUnit::create(13, 3, status);
}
-MeasureUnit MeasureUnit::getFathom() {
+MeasureUnit MeasureUnit::getEarthRadius() {
return MeasureUnit(13, 3);
}
-MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) {
return MeasureUnit::create(13, 4, status);
}
-MeasureUnit MeasureUnit::getFoot() {
+MeasureUnit MeasureUnit::getFathom() {
return MeasureUnit(13, 4);
}
-MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) {
return MeasureUnit::create(13, 5, status);
}
-MeasureUnit MeasureUnit::getFurlong() {
+MeasureUnit MeasureUnit::getFoot() {
return MeasureUnit(13, 5);
}
-MeasureUnit *MeasureUnit::createInch(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) {
return MeasureUnit::create(13, 6, status);
}
-MeasureUnit MeasureUnit::getInch() {
+MeasureUnit MeasureUnit::getFurlong() {
return MeasureUnit(13, 6);
}
-MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createInch(UErrorCode &status) {
return MeasureUnit::create(13, 7, status);
}
-MeasureUnit MeasureUnit::getKilometer() {
+MeasureUnit MeasureUnit::getInch() {
return MeasureUnit(13, 7);
}
-MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) {
return MeasureUnit::create(13, 8, status);
}
-MeasureUnit MeasureUnit::getLightYear() {
+MeasureUnit MeasureUnit::getKilometer() {
return MeasureUnit(13, 8);
}
-MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) {
return MeasureUnit::create(13, 9, status);
}
-MeasureUnit MeasureUnit::getMeter() {
+MeasureUnit MeasureUnit::getLightYear() {
return MeasureUnit(13, 9);
}
-MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) {
return MeasureUnit::create(13, 10, status);
}
-MeasureUnit MeasureUnit::getMicrometer() {
+MeasureUnit MeasureUnit::getMeter() {
return MeasureUnit(13, 10);
}
-MeasureUnit *MeasureUnit::createMile(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) {
return MeasureUnit::create(13, 11, status);
}
-MeasureUnit MeasureUnit::getMile() {
+MeasureUnit MeasureUnit::getMicrometer() {
return MeasureUnit(13, 11);
}
-MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMile(UErrorCode &status) {
return MeasureUnit::create(13, 12, status);
}
-MeasureUnit MeasureUnit::getMileScandinavian() {
+MeasureUnit MeasureUnit::getMile() {
return MeasureUnit(13, 12);
}
-MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) {
return MeasureUnit::create(13, 13, status);
}
-MeasureUnit MeasureUnit::getMillimeter() {
+MeasureUnit MeasureUnit::getMileScandinavian() {
return MeasureUnit(13, 13);
}
-MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) {
return MeasureUnit::create(13, 14, status);
}
-MeasureUnit MeasureUnit::getNanometer() {
+MeasureUnit MeasureUnit::getMillimeter() {
return MeasureUnit(13, 14);
}
-MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) {
return MeasureUnit::create(13, 15, status);
}
-MeasureUnit MeasureUnit::getNauticalMile() {
+MeasureUnit MeasureUnit::getNanometer() {
return MeasureUnit(13, 15);
}
-MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) {
return MeasureUnit::create(13, 16, status);
}
-MeasureUnit MeasureUnit::getParsec() {
+MeasureUnit MeasureUnit::getNauticalMile() {
return MeasureUnit(13, 16);
}
-MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) {
return MeasureUnit::create(13, 17, status);
}
-MeasureUnit MeasureUnit::getPicometer() {
+MeasureUnit MeasureUnit::getParsec() {
return MeasureUnit(13, 17);
}
-MeasureUnit *MeasureUnit::createPoint(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) {
return MeasureUnit::create(13, 18, status);
}
-MeasureUnit MeasureUnit::getPoint() {
+MeasureUnit MeasureUnit::getPicometer() {
return MeasureUnit(13, 18);
}
-MeasureUnit *MeasureUnit::createSolarRadius(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPoint(UErrorCode &status) {
return MeasureUnit::create(13, 19, status);
}
-MeasureUnit MeasureUnit::getSolarRadius() {
+MeasureUnit MeasureUnit::getPoint() {
return MeasureUnit(13, 19);
}
-MeasureUnit *MeasureUnit::createYard(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createSolarRadius(UErrorCode &status) {
return MeasureUnit::create(13, 20, status);
}
-MeasureUnit MeasureUnit::getYard() {
+MeasureUnit MeasureUnit::getSolarRadius() {
return MeasureUnit(13, 20);
}
-MeasureUnit *MeasureUnit::createLux(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createYard(UErrorCode &status) {
+ return MeasureUnit::create(13, 21, status);
+}
+
+MeasureUnit MeasureUnit::getYard() {
+ return MeasureUnit(13, 21);
+}
+
+MeasureUnit *MeasureUnit::createCandela(UErrorCode &status) {
return MeasureUnit::create(14, 0, status);
}
-MeasureUnit MeasureUnit::getLux() {
+MeasureUnit MeasureUnit::getCandela() {
return MeasureUnit(14, 0);
}
-MeasureUnit *MeasureUnit::createSolarLuminosity(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createLumen(UErrorCode &status) {
return MeasureUnit::create(14, 1, status);
}
-MeasureUnit MeasureUnit::getSolarLuminosity() {
+MeasureUnit MeasureUnit::getLumen() {
return MeasureUnit(14, 1);
}
+MeasureUnit *MeasureUnit::createLux(UErrorCode &status) {
+ return MeasureUnit::create(14, 2, status);
+}
+
+MeasureUnit MeasureUnit::getLux() {
+ return MeasureUnit(14, 2);
+}
+
+MeasureUnit *MeasureUnit::createSolarLuminosity(UErrorCode &status) {
+ return MeasureUnit::create(14, 3, status);
+}
+
+MeasureUnit MeasureUnit::getSolarLuminosity() {
+ return MeasureUnit(14, 3);
+}
+
MeasureUnit *MeasureUnit::createCarat(UErrorCode &status) {
return MeasureUnit::create(15, 0, status);
}
@@ -1475,94 +1514,102 @@ MeasureUnit MeasureUnit::getEarthMass() {
return MeasureUnit(15, 2);
}
-MeasureUnit *MeasureUnit::createGram(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createGrain(UErrorCode &status) {
return MeasureUnit::create(15, 3, status);
}
-MeasureUnit MeasureUnit::getGram() {
+MeasureUnit MeasureUnit::getGrain() {
return MeasureUnit(15, 3);
}
-MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createGram(UErrorCode &status) {
return MeasureUnit::create(15, 4, status);
}
-MeasureUnit MeasureUnit::getKilogram() {
+MeasureUnit MeasureUnit::getGram() {
return MeasureUnit(15, 4);
}
-MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) {
return MeasureUnit::create(15, 5, status);
}
-MeasureUnit MeasureUnit::getMetricTon() {
+MeasureUnit MeasureUnit::getKilogram() {
return MeasureUnit(15, 5);
}
-MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) {
return MeasureUnit::create(15, 6, status);
}
-MeasureUnit MeasureUnit::getMicrogram() {
+MeasureUnit MeasureUnit::getMetricTon() {
return MeasureUnit(15, 6);
}
-MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) {
return MeasureUnit::create(15, 7, status);
}
-MeasureUnit MeasureUnit::getMilligram() {
+MeasureUnit MeasureUnit::getMicrogram() {
return MeasureUnit(15, 7);
}
-MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) {
return MeasureUnit::create(15, 8, status);
}
-MeasureUnit MeasureUnit::getOunce() {
+MeasureUnit MeasureUnit::getMilligram() {
return MeasureUnit(15, 8);
}
-MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) {
return MeasureUnit::create(15, 9, status);
}
-MeasureUnit MeasureUnit::getOunceTroy() {
+MeasureUnit MeasureUnit::getOunce() {
return MeasureUnit(15, 9);
}
-MeasureUnit *MeasureUnit::createPound(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) {
return MeasureUnit::create(15, 10, status);
}
-MeasureUnit MeasureUnit::getPound() {
+MeasureUnit MeasureUnit::getOunceTroy() {
return MeasureUnit(15, 10);
}
-MeasureUnit *MeasureUnit::createSolarMass(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPound(UErrorCode &status) {
return MeasureUnit::create(15, 11, status);
}
-MeasureUnit MeasureUnit::getSolarMass() {
+MeasureUnit MeasureUnit::getPound() {
return MeasureUnit(15, 11);
}
-MeasureUnit *MeasureUnit::createStone(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createSolarMass(UErrorCode &status) {
return MeasureUnit::create(15, 12, status);
}
-MeasureUnit MeasureUnit::getStone() {
+MeasureUnit MeasureUnit::getSolarMass() {
return MeasureUnit(15, 12);
}
-MeasureUnit *MeasureUnit::createTon(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createStone(UErrorCode &status) {
return MeasureUnit::create(15, 13, status);
}
-MeasureUnit MeasureUnit::getTon() {
+MeasureUnit MeasureUnit::getStone() {
return MeasureUnit(15, 13);
}
+MeasureUnit *MeasureUnit::createTon(UErrorCode &status) {
+ return MeasureUnit::create(15, 14, status);
+}
+
+MeasureUnit MeasureUnit::getTon() {
+ return MeasureUnit(15, 14);
+}
+
MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) {
return MeasureUnit::create(17, 0, status);
}
@@ -1883,117 +1930,173 @@ MeasureUnit MeasureUnit::getDeciliter() {
return MeasureUnit(22, 13);
}
-MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDessertSpoon(UErrorCode &status) {
return MeasureUnit::create(22, 14, status);
}
-MeasureUnit MeasureUnit::getFluidOunce() {
+MeasureUnit MeasureUnit::getDessertSpoon() {
return MeasureUnit(22, 14);
}
-MeasureUnit *MeasureUnit::createFluidOunceImperial(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDessertSpoonImperial(UErrorCode &status) {
return MeasureUnit::create(22, 15, status);
}
-MeasureUnit MeasureUnit::getFluidOunceImperial() {
+MeasureUnit MeasureUnit::getDessertSpoonImperial() {
return MeasureUnit(22, 15);
}
-MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDram(UErrorCode &status) {
return MeasureUnit::create(22, 16, status);
}
-MeasureUnit MeasureUnit::getGallon() {
+MeasureUnit MeasureUnit::getDram() {
return MeasureUnit(22, 16);
}
-MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createDrop(UErrorCode &status) {
return MeasureUnit::create(22, 17, status);
}
-MeasureUnit MeasureUnit::getGallonImperial() {
+MeasureUnit MeasureUnit::getDrop() {
return MeasureUnit(22, 17);
}
-MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) {
return MeasureUnit::create(22, 18, status);
}
-MeasureUnit MeasureUnit::getHectoliter() {
+MeasureUnit MeasureUnit::getFluidOunce() {
return MeasureUnit(22, 18);
}
-MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createFluidOunceImperial(UErrorCode &status) {
return MeasureUnit::create(22, 19, status);
}
-MeasureUnit MeasureUnit::getLiter() {
+MeasureUnit MeasureUnit::getFluidOunceImperial() {
return MeasureUnit(22, 19);
}
-MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) {
return MeasureUnit::create(22, 20, status);
}
-MeasureUnit MeasureUnit::getMegaliter() {
+MeasureUnit MeasureUnit::getGallon() {
return MeasureUnit(22, 20);
}
-MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) {
return MeasureUnit::create(22, 21, status);
}
-MeasureUnit MeasureUnit::getMilliliter() {
+MeasureUnit MeasureUnit::getGallonImperial() {
return MeasureUnit(22, 21);
}
-MeasureUnit *MeasureUnit::createPint(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) {
return MeasureUnit::create(22, 22, status);
}
-MeasureUnit MeasureUnit::getPint() {
+MeasureUnit MeasureUnit::getHectoliter() {
return MeasureUnit(22, 22);
}
-MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createJigger(UErrorCode &status) {
return MeasureUnit::create(22, 23, status);
}
-MeasureUnit MeasureUnit::getPintMetric() {
+MeasureUnit MeasureUnit::getJigger() {
return MeasureUnit(22, 23);
}
-MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) {
return MeasureUnit::create(22, 24, status);
}
-MeasureUnit MeasureUnit::getQuart() {
+MeasureUnit MeasureUnit::getLiter() {
return MeasureUnit(22, 24);
}
-MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) {
return MeasureUnit::create(22, 25, status);
}
-MeasureUnit MeasureUnit::getTablespoon() {
+MeasureUnit MeasureUnit::getMegaliter() {
return MeasureUnit(22, 25);
}
-MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) {
return MeasureUnit::create(22, 26, status);
}
-MeasureUnit MeasureUnit::getTeaspoon() {
+MeasureUnit MeasureUnit::getMilliliter() {
return MeasureUnit(22, 26);
}
+MeasureUnit *MeasureUnit::createPinch(UErrorCode &status) {
+ return MeasureUnit::create(22, 27, status);
+}
+
+MeasureUnit MeasureUnit::getPinch() {
+ return MeasureUnit(22, 27);
+}
+
+MeasureUnit *MeasureUnit::createPint(UErrorCode &status) {
+ return MeasureUnit::create(22, 28, status);
+}
+
+MeasureUnit MeasureUnit::getPint() {
+ return MeasureUnit(22, 28);
+}
+
+MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) {
+ return MeasureUnit::create(22, 29, status);
+}
+
+MeasureUnit MeasureUnit::getPintMetric() {
+ return MeasureUnit(22, 29);
+}
+
+MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) {
+ return MeasureUnit::create(22, 30, status);
+}
+
+MeasureUnit MeasureUnit::getQuart() {
+ return MeasureUnit(22, 30);
+}
+
+MeasureUnit *MeasureUnit::createQuartImperial(UErrorCode &status) {
+ return MeasureUnit::create(22, 31, status);
+}
+
+MeasureUnit MeasureUnit::getQuartImperial() {
+ return MeasureUnit(22, 31);
+}
+
+MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) {
+ return MeasureUnit::create(22, 32, status);
+}
+
+MeasureUnit MeasureUnit::getTablespoon() {
+ return MeasureUnit(22, 32);
+}
+
+MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) {
+ return MeasureUnit::create(22, 33, status);
+}
+
+MeasureUnit MeasureUnit::getTeaspoon() {
+ return MeasureUnit(22, 33);
+}
+
// End generated code
static int32_t binarySearch(
- const char * const * array, int32_t start, int32_t end, const char * key) {
+ const char * const * array, int32_t start, int32_t end, StringPiece key) {
while (start < end) {
int32_t mid = (start + end) / 2;
- int32_t cmp = uprv_strcmp(array[mid], key);
+ int32_t cmp = StringPiece(array[mid]).compare(key);
if (cmp < 0) {
start = mid + 1;
continue;
@@ -2006,24 +2109,66 @@ static int32_t binarySearch(
return -1;
}
-MeasureUnit::MeasureUnit() {
- fCurrency[0] = 0;
- fTypeId = kBaseTypeIdx;
- fSubTypeId = kBaseSubTypeIdx;
+MeasureUnit::MeasureUnit() : MeasureUnit(kBaseTypeIdx, kBaseSubTypeIdx) {
+}
+
+MeasureUnit::MeasureUnit(int32_t typeId, int32_t subTypeId)
+ : fImpl(nullptr), fSubTypeId(subTypeId), fTypeId(typeId) {
}
MeasureUnit::MeasureUnit(const MeasureUnit &other)
- : fTypeId(other.fTypeId), fSubTypeId(other.fSubTypeId) {
- uprv_strcpy(fCurrency, other.fCurrency);
+ : fImpl(nullptr) {
+ *this = other;
+}
+
+MeasureUnit::MeasureUnit(MeasureUnit &&other) noexcept
+ : fImpl(other.fImpl),
+ fSubTypeId(other.fSubTypeId),
+ fTypeId(other.fTypeId) {
+ other.fImpl = nullptr;
+}
+
+MeasureUnit::MeasureUnit(MeasureUnitImpl&& impl)
+ : fImpl(nullptr), fSubTypeId(-1), fTypeId(-1) {
+ if (!findBySubType(impl.identifier.toStringPiece(), this)) {
+ fImpl = new MeasureUnitImpl(std::move(impl));
+ }
}
MeasureUnit &MeasureUnit::operator=(const MeasureUnit &other) {
if (this == &other) {
return *this;
}
+ if (fImpl != nullptr) {
+ delete fImpl;
+ }
+ if (other.fImpl) {
+ ErrorCode localStatus;
+ fImpl = new MeasureUnitImpl(other.fImpl->copy(localStatus));
+ if (!fImpl || localStatus.isFailure()) {
+ // Unrecoverable allocation error; set to the default unit
+ *this = MeasureUnit();
+ return *this;
+ }
+ } else {
+ fImpl = nullptr;
+ }
+ fTypeId = other.fTypeId;
+ fSubTypeId = other.fSubTypeId;
+ return *this;
+}
+
+MeasureUnit &MeasureUnit::operator=(MeasureUnit &&other) noexcept {
+ if (this == &other) {
+ return *this;
+ }
+ if (fImpl != nullptr) {
+ delete fImpl;
+ }
+ fImpl = other.fImpl;
+ other.fImpl = nullptr;
fTypeId = other.fTypeId;
fSubTypeId = other.fSubTypeId;
- uprv_strcpy(fCurrency, other.fCurrency);
return *this;
}
@@ -2032,14 +2177,30 @@ MeasureUnit *MeasureUnit::clone() const {
}
MeasureUnit::~MeasureUnit() {
+ if (fImpl != nullptr) {
+ delete fImpl;
+ fImpl = nullptr;
+ }
}
const char *MeasureUnit::getType() const {
+ // We have a type & subtype only if fTypeId is present.
+ if (fTypeId == -1) {
+ return "";
+ }
return gTypes[fTypeId];
}
const char *MeasureUnit::getSubtype() const {
- return fCurrency[0] == 0 ? gSubTypes[getOffset()] : fCurrency;
+ // We have a type & subtype only if fTypeId is present.
+ if (fTypeId == -1) {
+ return "";
+ }
+ return getIdentifier();
+}
+
+const char *MeasureUnit::getIdentifier() const {
+ return fImpl ? fImpl->identifier.data() : gSubTypes[getOffset()];
}
UBool MeasureUnit::operator==(const UObject& other) const {
@@ -2050,14 +2211,7 @@ UBool MeasureUnit::operator==(const UObject& other) const {
return FALSE;
}
const MeasureUnit &rhs = static_cast<const MeasureUnit&>(other);
- return (
- fTypeId == rhs.fTypeId
- && fSubTypeId == rhs.fSubTypeId
- && uprv_strcmp(fCurrency, rhs.fCurrency) == 0);
-}
-
-int32_t MeasureUnit::getIndex() const {
- return gIndexes[fTypeId] + fSubTypeId;
+ return uprv_strcmp(getIdentifier(), rhs.getIdentifier()) == 0;
}
int32_t MeasureUnit::getAvailable(
@@ -2122,51 +2276,21 @@ StringEnumeration* MeasureUnit::getAvailableTypes(UErrorCode &errorCode) {
return result;
}
-int32_t MeasureUnit::getIndexCount() {
- return gIndexes[UPRV_LENGTHOF(gIndexes) - 1];
-}
-
-int32_t MeasureUnit::internalGetIndexForTypeAndSubtype(const char *type, const char *subtype) {
- int32_t t = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
- if (t < 0) {
- return t;
- }
- int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subtype);
- if (st < 0) {
- return st;
- }
- return gIndexes[t] + st - gOffsets[t];
-}
-
-MeasureUnit MeasureUnit::resolveUnitPerUnit(
- const MeasureUnit &unit, const MeasureUnit &perUnit, bool* isResolved) {
- int32_t unitOffset = unit.getOffset();
- int32_t perUnitOffset = perUnit.getOffset();
-
- // binary search for (unitOffset, perUnitOffset)
- int32_t start = 0;
- int32_t end = UPRV_LENGTHOF(unitPerUnitToSingleUnit);
- while (start < end) {
- int32_t mid = (start + end) / 2;
- int32_t *midRow = unitPerUnitToSingleUnit[mid];
- if (unitOffset < midRow[0]) {
- end = mid;
- } else if (unitOffset > midRow[0]) {
- start = mid + 1;
- } else if (perUnitOffset < midRow[1]) {
- end = mid;
- } else if (perUnitOffset > midRow[1]) {
- start = mid + 1;
- } else {
- // We found a resolution for our unit / per-unit combo
- // return it.
- *isResolved = true;
- return MeasureUnit(midRow[2], midRow[3]);
+bool MeasureUnit::findBySubType(StringPiece subType, MeasureUnit* output) {
+ for (int32_t t = 0; t < UPRV_LENGTHOF(gOffsets) - 1; t++) {
+ // Ensure kCurrencyOffset is set correctly
+ U_ASSERT(uprv_strcmp(gTypes[kCurrencyOffset], "currency") == 0);
+ // Skip currency units
+ if (t == kCurrencyOffset) {
+ continue;
+ }
+ int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subType);
+ if (st >= 0) {
+ output->setTo(t, st - gOffsets[t]);
+ return true;
}
}
-
- *isResolved = false;
- return MeasureUnit();
+ return false;
}
MeasureUnit *MeasureUnit::create(int typeId, int subTypeId, UErrorCode &status) {
@@ -2189,39 +2313,56 @@ void MeasureUnit::initTime(const char *timeId) {
fSubTypeId = result - gOffsets[fTypeId];
}
-void MeasureUnit::initCurrency(const char *isoCurrency) {
+void MeasureUnit::initCurrency(StringPiece isoCurrency) {
int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "currency");
U_ASSERT(result != -1);
fTypeId = result;
result = binarySearch(
gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], isoCurrency);
- if (result != -1) {
- fSubTypeId = result - gOffsets[fTypeId];
- } else {
- uprv_strncpy(fCurrency, isoCurrency, UPRV_LENGTHOF(fCurrency));
- fCurrency[3] = 0;
+ if (result == -1) {
+ fImpl = new MeasureUnitImpl(MeasureUnitImpl::forCurrencyCode(isoCurrency));
+ if (fImpl) {
+ fSubTypeId = -1;
+ return;
+ }
+ // malloc error: fall back to the undefined currency
+ result = binarySearch(
+ gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], kDefaultCurrency8);
+ U_ASSERT(result != -1);
}
-}
-
-void MeasureUnit::initNoUnit(const char *subtype) {
- int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "none");
- U_ASSERT(result != -1);
- fTypeId = result;
- result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], subtype);
- U_ASSERT(result != -1);
fSubTypeId = result - gOffsets[fTypeId];
}
void MeasureUnit::setTo(int32_t typeId, int32_t subTypeId) {
fTypeId = typeId;
fSubTypeId = subTypeId;
- fCurrency[0] = 0;
+ if (fImpl != nullptr) {
+ delete fImpl;
+ fImpl = nullptr;
+ }
}
int32_t MeasureUnit::getOffset() const {
+ if (fTypeId < 0 || fSubTypeId < 0) {
+ return -1;
+ }
return gOffsets[fTypeId] + fSubTypeId;
}
+MeasureUnitImpl MeasureUnitImpl::copy(UErrorCode &status) const {
+ MeasureUnitImpl result;
+ result.complexity = complexity;
+ result.identifier.append(identifier, status);
+ for (int32_t i = 0; i < units.length(); i++) {
+ SingleUnitImpl *item = result.units.emplaceBack(*units[i]);
+ if (!item) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return result;
+ }
+ }
+ return result;
+}
+
U_NAMESPACE_END
#endif /* !UNCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp b/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp
new file mode 100644
index 00000000000..2eb3f066142
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp
@@ -0,0 +1,929 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// Extra functions for MeasureUnit not needed for all clients.
+// Separate .o file so that it can be removed for modularity.
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+// Allow implicit conversion from char16_t* to UnicodeString for this file:
+// Helpful in toString methods and elsewhere.
+#define UNISTR_FROM_STRING_EXPLICIT
+
+#include "charstr.h"
+#include "cmemory.h"
+#include "cstring.h"
+#include "measunit_impl.h"
+#include "resource.h"
+#include "uarrsort.h"
+#include "uassert.h"
+#include "ucln_in.h"
+#include "umutex.h"
+#include "unicode/bytestrie.h"
+#include "unicode/bytestriebuilder.h"
+#include "unicode/localpointer.h"
+#include "unicode/measunit.h"
+#include "unicode/stringpiece.h"
+#include "unicode/stringtriebuilder.h"
+#include "unicode/ures.h"
+#include "unicode/ustringtrie.h"
+#include "uresimp.h"
+#include <cstdlib>
+
+U_NAMESPACE_BEGIN
+
+
+namespace {
+
+// TODO: Propose a new error code for this?
+constexpr UErrorCode kUnitIdentifierSyntaxError = U_ILLEGAL_ARGUMENT_ERROR;
+
+// Trie value offset for SI Prefixes. This is big enough to ensure we only
+// insert positive integers into the trie.
+constexpr int32_t kSIPrefixOffset = 64;
+
+// Trie value offset for compound parts, e.g. "-per-", "-", "-and-".
+constexpr int32_t kCompoundPartOffset = 128;
+
+enum CompoundPart {
+ // Represents "-per-"
+ COMPOUND_PART_PER = kCompoundPartOffset,
+ // Represents "-"
+ COMPOUND_PART_TIMES,
+ // Represents "-and-"
+ COMPOUND_PART_AND,
+};
+
+// Trie value offset for "per-".
+constexpr int32_t kInitialCompoundPartOffset = 192;
+
+enum InitialCompoundPart {
+ // Represents "per-", the only compound part that can appear at the start of
+ // an identifier.
+ INITIAL_COMPOUND_PART_PER = kInitialCompoundPartOffset,
+};
+
+// Trie value offset for powers like "square-", "cubic-", "pow2-" etc.
+constexpr int32_t kPowerPartOffset = 256;
+
+enum PowerPart {
+ POWER_PART_P2 = kPowerPartOffset + 2,
+ POWER_PART_P3,
+ POWER_PART_P4,
+ POWER_PART_P5,
+ POWER_PART_P6,
+ POWER_PART_P7,
+ POWER_PART_P8,
+ POWER_PART_P9,
+ POWER_PART_P10,
+ POWER_PART_P11,
+ POWER_PART_P12,
+ POWER_PART_P13,
+ POWER_PART_P14,
+ POWER_PART_P15,
+};
+
+// Trie value offset for simple units, e.g. "gram", "nautical-mile",
+// "fluid-ounce-imperial".
+constexpr int32_t kSimpleUnitOffset = 512;
+
+const struct SIPrefixStrings {
+ const char* const string;
+ UMeasureSIPrefix value;
+} gSIPrefixStrings[] = {
+ { "yotta", UMEASURE_SI_PREFIX_YOTTA },
+ { "zetta", UMEASURE_SI_PREFIX_ZETTA },
+ { "exa", UMEASURE_SI_PREFIX_EXA },
+ { "peta", UMEASURE_SI_PREFIX_PETA },
+ { "tera", UMEASURE_SI_PREFIX_TERA },
+ { "giga", UMEASURE_SI_PREFIX_GIGA },
+ { "mega", UMEASURE_SI_PREFIX_MEGA },
+ { "kilo", UMEASURE_SI_PREFIX_KILO },
+ { "hecto", UMEASURE_SI_PREFIX_HECTO },
+ { "deka", UMEASURE_SI_PREFIX_DEKA },
+ { "deci", UMEASURE_SI_PREFIX_DECI },
+ { "centi", UMEASURE_SI_PREFIX_CENTI },
+ { "milli", UMEASURE_SI_PREFIX_MILLI },
+ { "micro", UMEASURE_SI_PREFIX_MICRO },
+ { "nano", UMEASURE_SI_PREFIX_NANO },
+ { "pico", UMEASURE_SI_PREFIX_PICO },
+ { "femto", UMEASURE_SI_PREFIX_FEMTO },
+ { "atto", UMEASURE_SI_PREFIX_ATTO },
+ { "zepto", UMEASURE_SI_PREFIX_ZEPTO },
+ { "yocto", UMEASURE_SI_PREFIX_YOCTO },
+};
+
+/**
+ * A ResourceSink that collects simple unit identifiers from the keys of the
+ * convertUnits table into an array, and adds these values to a TrieBuilder,
+ * with associated values being their index into this array plus a specified
+ * offset, to a trie.
+ *
+ * Example code:
+ *
+ * UErrorCode status = U_ZERO_ERROR;
+ * BytesTrieBuilder b(status);
+ * const char *unitIdentifiers[200];
+ * SimpleUnitIdentifiersSink identifierSink(unitIdentifiers, 200, b, kTrieValueOffset);
+ * LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
+ * ures_getAllItemsWithFallback(unitsBundle.getAlias(), "convertUnits", identifierSink, status);
+ */
+class SimpleUnitIdentifiersSink : public icu::ResourceSink {
+ public:
+ /**
+ * Constructor.
+ * @param out Array of char* to which the simple unit identifiers will be
+ * saved.
+ * @param outSize The size of `out`.
+ * @param trieBuilder The trie builder to which the simple unit identifier
+ * should be added. The trie builder must outlive this resource sink.
+ * @param trieValueOffset This is added to the index of the identifier in
+ * the `out` array, before adding to `trieBuilder` as the value
+ * associated with the identifier.
+ */
+ explicit SimpleUnitIdentifiersSink(const char **out, int32_t outSize, BytesTrieBuilder &trieBuilder,
+ int32_t trieValueOffset)
+ : outArray(out), outSize(outSize), trieBuilder(trieBuilder), trieValueOffset(trieValueOffset),
+ outIndex(0) {
+ }
+
+ /**
+ * Adds the table keys found in value to the output vector.
+ * @param key The key of the resource passed to `value`: the second
+ * parameter of the ures_getAllItemsWithFallback() call.
+ * @param value Should be a ResourceTable value, if
+ * ures_getAllItemsWithFallback() was called correctly for this sink.
+ * @param noFallback Ignored.
+ * @param status The standard ICU error code output parameter.
+ */
+ void put(const char * /*key*/, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) {
+ ResourceTable table = value.getTable(status);
+ if (U_FAILURE(status)) return;
+
+ if (outIndex + table.getSize() > outSize) {
+ status = U_INDEX_OUTOFBOUNDS_ERROR;
+ return;
+ }
+
+ // Collect keys from the table resource.
+ const char *key;
+ for (int32_t i = 0; table.getKeyAndValue(i, key, value); ++i) {
+ U_ASSERT(i < table.getSize());
+ U_ASSERT(outIndex < outSize);
+ if (uprv_strcmp(key, "kilogram") == 0) {
+ // For parsing, we use "gram", the prefixless metric mass unit. We
+ // thus ignore the SI Base Unit of Mass: it exists due to being the
+ // mass conversion target unit, but not needed for MeasureUnit
+ // parsing.
+ continue;
+ }
+ outArray[outIndex] = key;
+ trieBuilder.add(key, trieValueOffset + outIndex, status);
+ outIndex++;
+ }
+ }
+
+ private:
+ const char **outArray;
+ int32_t outSize;
+ BytesTrieBuilder &trieBuilder;
+ int32_t trieValueOffset;
+
+ int32_t outIndex;
+};
+
+icu::UInitOnce gUnitExtrasInitOnce = U_INITONCE_INITIALIZER;
+
+// Array of simple unit IDs.
+//
+// The array memory itself is owned by this pointer, but the individual char* in
+// that array point at static memory. (Note that these char* are also returned
+// by SingleUnitImpl::getSimpleUnitID().)
+const char **gSimpleUnits = nullptr;
+
+char *gSerializedUnitExtrasStemTrie = nullptr;
+
+UBool U_CALLCONV cleanupUnitExtras() {
+ uprv_free(gSerializedUnitExtrasStemTrie);
+ gSerializedUnitExtrasStemTrie = nullptr;
+ uprv_free(gSimpleUnits);
+ gSimpleUnits = nullptr;
+ gUnitExtrasInitOnce.reset();
+ return TRUE;
+}
+
+void U_CALLCONV initUnitExtras(UErrorCode& status) {
+ ucln_i18n_registerCleanup(UCLN_I18N_UNIT_EXTRAS, cleanupUnitExtras);
+
+ BytesTrieBuilder b(status);
+ if (U_FAILURE(status)) { return; }
+
+ // Add SI prefixes
+ for (const auto& siPrefixInfo : gSIPrefixStrings) {
+ b.add(siPrefixInfo.string, siPrefixInfo.value + kSIPrefixOffset, status);
+ }
+ if (U_FAILURE(status)) { return; }
+
+ // Add syntax parts (compound, power prefixes)
+ b.add("-per-", COMPOUND_PART_PER, status);
+ b.add("-", COMPOUND_PART_TIMES, status);
+ b.add("-and-", COMPOUND_PART_AND, status);
+ b.add("per-", INITIAL_COMPOUND_PART_PER, status);
+ b.add("square-", POWER_PART_P2, status);
+ b.add("cubic-", POWER_PART_P3, status);
+ b.add("pow2-", POWER_PART_P2, status);
+ b.add("pow3-", POWER_PART_P3, status);
+ b.add("pow4-", POWER_PART_P4, status);
+ b.add("pow5-", POWER_PART_P5, status);
+ b.add("pow6-", POWER_PART_P6, status);
+ b.add("pow7-", POWER_PART_P7, status);
+ b.add("pow8-", POWER_PART_P8, status);
+ b.add("pow9-", POWER_PART_P9, status);
+ b.add("pow10-", POWER_PART_P10, status);
+ b.add("pow11-", POWER_PART_P11, status);
+ b.add("pow12-", POWER_PART_P12, status);
+ b.add("pow13-", POWER_PART_P13, status);
+ b.add("pow14-", POWER_PART_P14, status);
+ b.add("pow15-", POWER_PART_P15, status);
+ if (U_FAILURE(status)) { return; }
+
+ // Add sanctioned simple units by offset: simple units all have entries in
+ // units/convertUnits resources.
+ // TODO(ICU-21059): confirm whether this is clean enough, or whether we need to
+ // filter units' validity list instead.
+ LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
+ LocalUResourceBundlePointer convertUnits(
+ ures_getByKey(unitsBundle.getAlias(), "convertUnits", NULL, &status));
+ if (U_FAILURE(status)) { return; }
+
+ // Allocate enough space: with identifierSink below skipping kilogram, we're
+ // probably allocating one more than needed.
+ int32_t simpleUnitsCount = convertUnits.getAlias()->fSize;
+ int32_t arrayMallocSize = sizeof(char *) * simpleUnitsCount;
+ gSimpleUnits = static_cast<const char **>(uprv_malloc(arrayMallocSize));
+ if (gSimpleUnits == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memset(gSimpleUnits, 0, arrayMallocSize);
+
+ // Populate gSimpleUnits and build the associated trie.
+ SimpleUnitIdentifiersSink identifierSink(gSimpleUnits, simpleUnitsCount, b, kSimpleUnitOffset);
+ ures_getAllItemsWithFallback(unitsBundle.getAlias(), "convertUnits", identifierSink, status);
+
+ // Build the CharsTrie
+ // TODO: Use SLOW or FAST here?
+ StringPiece result = b.buildStringPiece(USTRINGTRIE_BUILD_FAST, status);
+ if (U_FAILURE(status)) { return; }
+
+ // Copy the result into the global constant pointer
+ size_t numBytes = result.length();
+ gSerializedUnitExtrasStemTrie = static_cast<char *>(uprv_malloc(numBytes));
+ if (gSerializedUnitExtrasStemTrie == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memcpy(gSerializedUnitExtrasStemTrie, result.data(), numBytes);
+}
+
+class Token {
+public:
+ Token(int32_t match) : fMatch(match) {}
+
+ enum Type {
+ TYPE_UNDEFINED,
+ TYPE_SI_PREFIX,
+ // Token type for "-per-", "-", and "-and-".
+ TYPE_COMPOUND_PART,
+ // Token type for "per-".
+ TYPE_INITIAL_COMPOUND_PART,
+ TYPE_POWER_PART,
+ TYPE_SIMPLE_UNIT,
+ };
+
+ // Calling getType() is invalid, resulting in an assertion failure, if Token
+ // value isn't positive.
+ Type getType() const {
+ U_ASSERT(fMatch > 0);
+ if (fMatch < kCompoundPartOffset) {
+ return TYPE_SI_PREFIX;
+ }
+ if (fMatch < kInitialCompoundPartOffset) {
+ return TYPE_COMPOUND_PART;
+ }
+ if (fMatch < kPowerPartOffset) {
+ return TYPE_INITIAL_COMPOUND_PART;
+ }
+ if (fMatch < kSimpleUnitOffset) {
+ return TYPE_POWER_PART;
+ }
+ return TYPE_SIMPLE_UNIT;
+ }
+
+ UMeasureSIPrefix getSIPrefix() const {
+ U_ASSERT(getType() == TYPE_SI_PREFIX);
+ return static_cast<UMeasureSIPrefix>(fMatch - kSIPrefixOffset);
+ }
+
+ // Valid only for tokens with type TYPE_COMPOUND_PART.
+ int32_t getMatch() const {
+ U_ASSERT(getType() == TYPE_COMPOUND_PART);
+ return fMatch;
+ }
+
+ int32_t getInitialCompoundPart() const {
+ // Even if there is only one InitialCompoundPart value, we have this
+ // function for the simplicity of code consistency.
+ U_ASSERT(getType() == TYPE_INITIAL_COMPOUND_PART);
+ // Defensive: if this assert fails, code using this function also needs
+ // to change.
+ U_ASSERT(fMatch == INITIAL_COMPOUND_PART_PER);
+ return fMatch;
+ }
+
+ int8_t getPower() const {
+ U_ASSERT(getType() == TYPE_POWER_PART);
+ return static_cast<int8_t>(fMatch - kPowerPartOffset);
+ }
+
+ int32_t getSimpleUnitIndex() const {
+ U_ASSERT(getType() == TYPE_SIMPLE_UNIT);
+ return fMatch - kSimpleUnitOffset;
+ }
+
+private:
+ int32_t fMatch;
+};
+
+class Parser {
+public:
+ /**
+ * Factory function for parsing the given identifier.
+ *
+ * @param source The identifier to parse. This function does not make a copy
+ * of source: the underlying string that source points at, must outlive the
+ * parser.
+ * @param status ICU error code.
+ */
+ static Parser from(StringPiece source, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return Parser();
+ }
+ umtx_initOnce(gUnitExtrasInitOnce, &initUnitExtras, status);
+ if (U_FAILURE(status)) {
+ return Parser();
+ }
+ return Parser(source);
+ }
+
+ MeasureUnitImpl parse(UErrorCode& status) {
+ MeasureUnitImpl result;
+ parseImpl(result, status);
+ return result;
+ }
+
+private:
+ // Tracks parser progress: the offset into fSource.
+ int32_t fIndex = 0;
+
+ // Since we're not owning this memory, whatever is passed to the constructor
+ // should live longer than this Parser - and the parser shouldn't return any
+ // references to that string.
+ StringPiece fSource;
+ BytesTrie fTrie;
+
+ // Set to true when we've seen a "-per-" or a "per-", after which all units
+ // are in the denominator. Until we find an "-and-", at which point the
+ // identifier is invalid pending TODO(CLDR-13700).
+ bool fAfterPer = false;
+
+ Parser() : fSource(""), fTrie(u"") {}
+
+ Parser(StringPiece source)
+ : fSource(source), fTrie(gSerializedUnitExtrasStemTrie) {}
+
+ inline bool hasNext() const {
+ return fIndex < fSource.length();
+ }
+
+ // Returns the next Token parsed from fSource, advancing fIndex to the end
+ // of that token in fSource. In case of U_FAILURE(status), the token
+ // returned will cause an abort if getType() is called on it.
+ Token nextToken(UErrorCode& status) {
+ fTrie.reset();
+ int32_t match = -1;
+ // Saves the position in the fSource string for the end of the most
+ // recent matching token.
+ int32_t previ = -1;
+ // Find the longest token that matches a value in the trie:
+ while (fIndex < fSource.length()) {
+ auto result = fTrie.next(fSource.data()[fIndex++]);
+ if (result == USTRINGTRIE_NO_MATCH) {
+ break;
+ } else if (result == USTRINGTRIE_NO_VALUE) {
+ continue;
+ }
+ U_ASSERT(USTRINGTRIE_HAS_VALUE(result));
+ match = fTrie.getValue();
+ previ = fIndex;
+ if (result == USTRINGTRIE_FINAL_VALUE) {
+ break;
+ }
+ U_ASSERT(result == USTRINGTRIE_INTERMEDIATE_VALUE);
+ // continue;
+ }
+
+ if (match < 0) {
+ status = kUnitIdentifierSyntaxError;
+ } else {
+ fIndex = previ;
+ }
+ return Token(match);
+ }
+
+ /**
+ * Returns the next "single unit" via result.
+ *
+ * If a "-per-" was parsed, the result will have appropriate negative
+ * dimensionality.
+ *
+ * Returns an error if we parse both compound units and "-and-", since mixed
+ * compound units are not yet supported - TODO(CLDR-13700).
+ *
+ * @param result Will be overwritten by the result, if status shows success.
+ * @param sawAnd If an "-and-" was parsed prior to finding the "single
+ * unit", sawAnd is set to true. If not, it is left as is.
+ * @param status ICU error code.
+ */
+ void nextSingleUnit(SingleUnitImpl& result, bool& sawAnd, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ // state:
+ // 0 = no tokens seen yet (will accept power, SI prefix, or simple unit)
+ // 1 = power token seen (will not accept another power token)
+ // 2 = SI prefix token seen (will not accept a power or SI prefix token)
+ int32_t state = 0;
+
+ bool atStart = fIndex == 0;
+ Token token = nextToken(status);
+ if (U_FAILURE(status)) { return; }
+
+ if (atStart) {
+ // Identifiers optionally start with "per-".
+ if (token.getType() == Token::TYPE_INITIAL_COMPOUND_PART) {
+ U_ASSERT(token.getInitialCompoundPart() == INITIAL_COMPOUND_PART_PER);
+ fAfterPer = true;
+ result.dimensionality = -1;
+
+ token = nextToken(status);
+ if (U_FAILURE(status)) { return; }
+ }
+ } else {
+ // All other SingleUnit's are separated from previous SingleUnit's
+ // via a compound part:
+ if (token.getType() != Token::TYPE_COMPOUND_PART) {
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+
+ switch (token.getMatch()) {
+ case COMPOUND_PART_PER:
+ if (sawAnd) {
+ // Mixed compound units not yet supported,
+ // TODO(CLDR-13700).
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ fAfterPer = true;
+ result.dimensionality = -1;
+ break;
+
+ case COMPOUND_PART_TIMES:
+ if (fAfterPer) {
+ result.dimensionality = -1;
+ }
+ break;
+
+ case COMPOUND_PART_AND:
+ if (fAfterPer) {
+ // Can't start with "-and-", and mixed compound units
+ // not yet supported, TODO(CLDR-13700).
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ sawAnd = true;
+ break;
+ }
+
+ token = nextToken(status);
+ if (U_FAILURE(status)) { return; }
+ }
+
+ // Read tokens until we have a complete SingleUnit or we reach the end.
+ while (true) {
+ switch (token.getType()) {
+ case Token::TYPE_POWER_PART:
+ if (state > 0) {
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ result.dimensionality *= token.getPower();
+ state = 1;
+ break;
+
+ case Token::TYPE_SI_PREFIX:
+ if (state > 1) {
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ result.siPrefix = token.getSIPrefix();
+ state = 2;
+ break;
+
+ case Token::TYPE_SIMPLE_UNIT:
+ result.index = token.getSimpleUnitIndex();
+ return;
+
+ default:
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+
+ if (!hasNext()) {
+ // We ran out of tokens before finding a complete single unit.
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ token = nextToken(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+ }
+
+ /// @param result is modified, not overridden. Caller must pass in a
+ /// default-constructed (empty) MeasureUnitImpl instance.
+ void parseImpl(MeasureUnitImpl& result, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (fSource.empty()) {
+ // The dimenionless unit: nothing to parse. leave result as is.
+ return;
+ }
+ int32_t unitNum = 0;
+ while (hasNext()) {
+ bool sawAnd = false;
+ SingleUnitImpl singleUnit;
+ nextSingleUnit(singleUnit, sawAnd, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ U_ASSERT(!singleUnit.isDimensionless());
+ bool added = result.append(singleUnit, status);
+ if (sawAnd && !added) {
+ // Two similar units are not allowed in a mixed unit
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ if ((++unitNum) >= 2) {
+ // nextSingleUnit fails appropriately for "per" and "and" in the
+ // same identifier. It doesn't fail for other compound units
+ // (COMPOUND_PART_TIMES). Consequently we take care of that
+ // here.
+ UMeasureUnitComplexity complexity =
+ sawAnd ? UMEASURE_UNIT_MIXED : UMEASURE_UNIT_COMPOUND;
+ if (unitNum == 2) {
+ U_ASSERT(result.complexity == UMEASURE_UNIT_SINGLE);
+ result.complexity = complexity;
+ } else if (result.complexity != complexity) {
+ // Can't have mixed compound units
+ status = kUnitIdentifierSyntaxError;
+ return;
+ }
+ }
+ }
+ }
+};
+
+int32_t U_CALLCONV
+compareSingleUnits(const void* /*context*/, const void* left, const void* right) {
+ auto realLeft = static_cast<const SingleUnitImpl* const*>(left);
+ auto realRight = static_cast<const SingleUnitImpl* const*>(right);
+ return (*realLeft)->compareTo(**realRight);
+}
+
+/**
+ * Generate the identifier string for a single unit in place.
+ *
+ * Does not support the dimensionless SingleUnitImpl: calling serializeSingle
+ * with the dimensionless unit results in an U_INTERNAL_PROGRAM_ERROR.
+ *
+ * @param first If singleUnit is part of a compound unit, and not its first
+ * single unit, set this to false. Otherwise: set to true.
+ */
+void serializeSingle(const SingleUnitImpl& singleUnit, bool first, CharString& output, UErrorCode& status) {
+ if (first && singleUnit.dimensionality < 0) {
+ // Essentially the "unary per". For compound units with a numerator, the
+ // caller takes care of the "binary per".
+ output.append("per-", status);
+ }
+
+ if (singleUnit.isDimensionless()) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
+ int8_t posPower = std::abs(singleUnit.dimensionality);
+ if (posPower == 0) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ } else if (posPower == 1) {
+ // no-op
+ } else if (posPower == 2) {
+ output.append("square-", status);
+ } else if (posPower == 3) {
+ output.append("cubic-", status);
+ } else if (posPower < 10) {
+ output.append("pow", status);
+ output.append(posPower + '0', status);
+ output.append('-', status);
+ } else if (posPower <= 15) {
+ output.append("pow1", status);
+ output.append('0' + (posPower % 10), status);
+ output.append('-', status);
+ } else {
+ status = kUnitIdentifierSyntaxError;
+ }
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ if (singleUnit.siPrefix != UMEASURE_SI_PREFIX_ONE) {
+ for (const auto& siPrefixInfo : gSIPrefixStrings) {
+ if (siPrefixInfo.value == singleUnit.siPrefix) {
+ output.append(siPrefixInfo.string, status);
+ break;
+ }
+ }
+ }
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ output.append(singleUnit.getSimpleUnitID(), status);
+}
+
+/**
+ * Normalize a MeasureUnitImpl and generate the identifier string in place.
+ */
+void serialize(MeasureUnitImpl& impl, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ U_ASSERT(impl.identifier.isEmpty());
+ if (impl.units.length() == 0) {
+ // Dimensionless, constructed by the default constructor: no appending
+ // to impl.identifier, we wish it to contain the zero-length string.
+ return;
+ }
+ if (impl.complexity == UMEASURE_UNIT_COMPOUND) {
+ // Note: don't sort a MIXED unit
+ uprv_sortArray(
+ impl.units.getAlias(),
+ impl.units.length(),
+ sizeof(impl.units[0]),
+ compareSingleUnits,
+ nullptr,
+ false,
+ &status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+ serializeSingle(*impl.units[0], true, impl.identifier, status);
+ if (impl.units.length() == 1) {
+ return;
+ }
+ for (int32_t i = 1; i < impl.units.length(); i++) {
+ const SingleUnitImpl& prev = *impl.units[i-1];
+ const SingleUnitImpl& curr = *impl.units[i];
+ if (impl.complexity == UMEASURE_UNIT_MIXED) {
+ impl.identifier.append("-and-", status);
+ serializeSingle(curr, true, impl.identifier, status);
+ } else {
+ if (prev.dimensionality > 0 && curr.dimensionality < 0) {
+ impl.identifier.append("-per-", status);
+ } else {
+ impl.identifier.append('-', status);
+ }
+ serializeSingle(curr, false, impl.identifier, status);
+ }
+ }
+
+}
+
+/**
+ * Appends a SingleUnitImpl to a MeasureUnitImpl.
+ *
+ * @return true if a new item was added. If unit is the dimensionless unit, it
+ * is never added: the return value will always be false.
+ */
+bool appendImpl(MeasureUnitImpl& impl, const SingleUnitImpl& unit, UErrorCode& status) {
+ if (unit.isDimensionless()) {
+ // We don't append dimensionless units.
+ return false;
+ }
+ // Find a similar unit that already exists, to attempt to coalesce
+ SingleUnitImpl* oldUnit = nullptr;
+ for (int32_t i = 0; i < impl.units.length(); i++) {
+ auto* candidate = impl.units[i];
+ if (candidate->isCompatibleWith(unit)) {
+ oldUnit = candidate;
+ }
+ }
+ if (oldUnit) {
+ // Both dimensionalities will be positive, or both will be negative, by
+ // virtue of isCompatibleWith().
+ oldUnit->dimensionality += unit.dimensionality;
+ } else {
+ SingleUnitImpl* destination = impl.units.emplaceBack();
+ if (!destination) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return false;
+ }
+ *destination = unit;
+ }
+ return (oldUnit == nullptr);
+}
+
+} // namespace
+
+
+SingleUnitImpl SingleUnitImpl::forMeasureUnit(const MeasureUnit& measureUnit, UErrorCode& status) {
+ MeasureUnitImpl temp;
+ const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(measureUnit, temp, status);
+ if (U_FAILURE(status)) {
+ return {};
+ }
+ if (impl.units.length() == 0) {
+ return {};
+ }
+ if (impl.units.length() == 1) {
+ return *impl.units[0];
+ }
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return {};
+}
+
+MeasureUnit SingleUnitImpl::build(UErrorCode& status) const {
+ MeasureUnitImpl temp;
+ temp.append(*this, status);
+ return std::move(temp).build(status);
+}
+
+const char *SingleUnitImpl::getSimpleUnitID() const {
+ return gSimpleUnits[index];
+}
+
+MeasureUnitImpl::MeasureUnitImpl(const MeasureUnitImpl &other, UErrorCode &status) {
+ *this = other.copy(status);
+}
+
+MeasureUnitImpl::MeasureUnitImpl(const SingleUnitImpl &singleUnit, UErrorCode &status) {
+ this->append(singleUnit, status);
+}
+
+MeasureUnitImpl MeasureUnitImpl::forIdentifier(StringPiece identifier, UErrorCode& status) {
+ return Parser::from(identifier, status).parse(status);
+}
+
+const MeasureUnitImpl& MeasureUnitImpl::forMeasureUnit(
+ const MeasureUnit& measureUnit, MeasureUnitImpl& memory, UErrorCode& status) {
+ if (measureUnit.fImpl) {
+ return *measureUnit.fImpl;
+ } else {
+ memory = Parser::from(measureUnit.getIdentifier(), status).parse(status);
+ return memory;
+ }
+}
+
+MeasureUnitImpl MeasureUnitImpl::forMeasureUnitMaybeCopy(
+ const MeasureUnit& measureUnit, UErrorCode& status) {
+ if (measureUnit.fImpl) {
+ return measureUnit.fImpl->copy(status);
+ } else {
+ return Parser::from(measureUnit.getIdentifier(), status).parse(status);
+ }
+}
+
+void MeasureUnitImpl::takeReciprocal(UErrorCode& /*status*/) {
+ identifier.clear();
+ for (int32_t i = 0; i < units.length(); i++) {
+ units[i]->dimensionality *= -1;
+ }
+}
+
+bool MeasureUnitImpl::append(const SingleUnitImpl& singleUnit, UErrorCode& status) {
+ identifier.clear();
+ return appendImpl(*this, singleUnit, status);
+}
+
+MaybeStackVector<MeasureUnitImpl> MeasureUnitImpl::extractIndividualUnits(UErrorCode &status) const {
+ MaybeStackVector<MeasureUnitImpl> result;
+
+ if (this->complexity != UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
+ result.emplaceBackAndCheckErrorCode(status, *this, status);
+ return result;
+ }
+
+ for (int32_t i = 0; i < units.length(); i++) {
+ result.emplaceBackAndCheckErrorCode(status, *units[i], status);
+ }
+
+ return result;
+}
+
+MeasureUnit MeasureUnitImpl::build(UErrorCode& status) && {
+ serialize(*this, status);
+ return MeasureUnit(std::move(*this));
+}
+
+MeasureUnit MeasureUnit::forIdentifier(StringPiece identifier, UErrorCode& status) {
+ return Parser::from(identifier, status).parse(status).build(status);
+}
+
+UMeasureUnitComplexity MeasureUnit::getComplexity(UErrorCode& status) const {
+ MeasureUnitImpl temp;
+ return MeasureUnitImpl::forMeasureUnit(*this, temp, status).complexity;
+}
+
+UMeasureSIPrefix MeasureUnit::getSIPrefix(UErrorCode& status) const {
+ return SingleUnitImpl::forMeasureUnit(*this, status).siPrefix;
+}
+
+MeasureUnit MeasureUnit::withSIPrefix(UMeasureSIPrefix prefix, UErrorCode& status) const {
+ SingleUnitImpl singleUnit = SingleUnitImpl::forMeasureUnit(*this, status);
+ singleUnit.siPrefix = prefix;
+ return singleUnit.build(status);
+}
+
+int32_t MeasureUnit::getDimensionality(UErrorCode& status) const {
+ SingleUnitImpl singleUnit = SingleUnitImpl::forMeasureUnit(*this, status);
+ if (U_FAILURE(status)) { return 0; }
+ if (singleUnit.isDimensionless()) {
+ return 0;
+ }
+ return singleUnit.dimensionality;
+}
+
+MeasureUnit MeasureUnit::withDimensionality(int32_t dimensionality, UErrorCode& status) const {
+ SingleUnitImpl singleUnit = SingleUnitImpl::forMeasureUnit(*this, status);
+ singleUnit.dimensionality = dimensionality;
+ return singleUnit.build(status);
+}
+
+MeasureUnit MeasureUnit::reciprocal(UErrorCode& status) const {
+ MeasureUnitImpl impl = MeasureUnitImpl::forMeasureUnitMaybeCopy(*this, status);
+ impl.takeReciprocal(status);
+ return std::move(impl).build(status);
+}
+
+MeasureUnit MeasureUnit::product(const MeasureUnit& other, UErrorCode& status) const {
+ MeasureUnitImpl impl = MeasureUnitImpl::forMeasureUnitMaybeCopy(*this, status);
+ MeasureUnitImpl temp;
+ const MeasureUnitImpl& otherImpl = MeasureUnitImpl::forMeasureUnit(other, temp, status);
+ if (impl.complexity == UMEASURE_UNIT_MIXED || otherImpl.complexity == UMEASURE_UNIT_MIXED) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return {};
+ }
+ for (int32_t i = 0; i < otherImpl.units.length(); i++) {
+ impl.append(*otherImpl.units[i], status);
+ }
+ if (impl.units.length() > 1) {
+ impl.complexity = UMEASURE_UNIT_COMPOUND;
+ }
+ return std::move(impl).build(status);
+}
+
+LocalArray<MeasureUnit> MeasureUnit::splitToSingleUnitsImpl(int32_t& outCount, UErrorCode& status) const {
+ MeasureUnitImpl temp;
+ const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(*this, temp, status);
+ outCount = impl.units.length();
+ MeasureUnit* arr = new MeasureUnit[outCount];
+ if (arr == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return LocalArray<MeasureUnit>();
+ }
+ for (int32_t i = 0; i < outCount; i++) {
+ arr[i] = impl.units[i]->build(status);
+ }
+ return LocalArray<MeasureUnit>(arr, status);
+}
+
+
+U_NAMESPACE_END
+
+#endif /* !UNCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h b/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h
new file mode 100644
index 00000000000..3cc2cd0476f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h
@@ -0,0 +1,241 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#ifndef __MEASUNIT_IMPL_H__
+#define __MEASUNIT_IMPL_H__
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "unicode/measunit.h"
+#include "cmemory.h"
+#include "charstr.h"
+
+U_NAMESPACE_BEGIN
+
+
+static const char16_t kDefaultCurrency[] = u"XXX";
+static const char kDefaultCurrency8[] = "XXX";
+
+
+/**
+ * A struct representing a single unit (optional SI prefix and dimensionality).
+ */
+struct U_I18N_API SingleUnitImpl : public UMemory {
+ /**
+ * Gets a single unit from the MeasureUnit. If there are multiple single units, sets an error
+ * code and returns the base dimensionless unit. Parses if necessary.
+ */
+ static SingleUnitImpl forMeasureUnit(const MeasureUnit& measureUnit, UErrorCode& status);
+
+ /** Transform this SingleUnitImpl into a MeasureUnit, simplifying if possible. */
+ MeasureUnit build(UErrorCode& status) const;
+
+ /**
+ * Returns the "simple unit ID", without SI or dimensionality prefix: this
+ * instance may represent a square-kilometer, but only "meter" will be
+ * returned.
+ *
+ * The returned pointer points at memory that exists for the duration of the
+ * program's running.
+ */
+ const char *getSimpleUnitID() const;
+
+ /**
+ * Compare this SingleUnitImpl to another SingleUnitImpl for the sake of
+ * sorting and coalescing.
+ *
+ * Takes the sign of dimensionality into account, but not the absolute
+ * value: per-meter is not considered the same as meter, but meter is
+ * considered the same as square-meter.
+ *
+ * The dimensionless unit generally does not get compared, but if it did, it
+ * would sort before other units by virtue of index being < 0 and
+ * dimensionality not being negative.
+ */
+ int32_t compareTo(const SingleUnitImpl& other) const {
+ if (dimensionality < 0 && other.dimensionality > 0) {
+ // Positive dimensions first
+ return 1;
+ }
+ if (dimensionality > 0 && other.dimensionality < 0) {
+ return -1;
+ }
+ if (index < other.index) {
+ return -1;
+ }
+ if (index > other.index) {
+ return 1;
+ }
+ if (siPrefix < other.siPrefix) {
+ return -1;
+ }
+ if (siPrefix > other.siPrefix) {
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * Return whether this SingleUnitImpl is compatible with another for the purpose of coalescing.
+ *
+ * Units with the same base unit and SI prefix should match, except that they must also have
+ * the same dimensionality sign, such that we don't merge numerator and denominator.
+ */
+ bool isCompatibleWith(const SingleUnitImpl& other) const {
+ return (compareTo(other) == 0);
+ }
+
+ /**
+ * Returns true if this unit is the "dimensionless base unit", as produced
+ * by the MeasureUnit() default constructor. (This does not include the
+ * likes of concentrations or angles.)
+ */
+ bool isDimensionless() const {
+ return index == -1;
+ }
+
+ /**
+ * Simple unit index, unique for every simple unit, -1 for the dimensionless
+ * unit. This is an index into a string list in measunit_extra.cpp.
+ *
+ * The default value is -1, meaning the dimensionless unit:
+ * isDimensionless() will return true, until index is changed.
+ */
+ int32_t index = -1;
+
+ /**
+ * SI prefix.
+ *
+ * This is ignored for the dimensionless unit.
+ */
+ UMeasureSIPrefix siPrefix = UMEASURE_SI_PREFIX_ONE;
+
+ /**
+ * Dimensionality.
+ *
+ * This is meaningless for the dimensionless unit.
+ */
+ int32_t dimensionality = 1;
+};
+
+// Export explicit template instantiations of MaybeStackArray, MemoryPool and
+// MaybeStackVector. This is required when building DLLs for Windows. (See
+// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<SingleUnitImpl*, 8>;
+template class U_I18N_API MemoryPool<SingleUnitImpl, 8>;
+template class U_I18N_API MaybeStackVector<SingleUnitImpl, 8>;
+#endif
+
+/**
+ * Internal representation of measurement units. Capable of representing all complexities of units,
+ * including mixed and compound units.
+ */
+struct U_I18N_API MeasureUnitImpl : public UMemory {
+ MeasureUnitImpl() = default;
+ MeasureUnitImpl(MeasureUnitImpl &&other) = default;
+ MeasureUnitImpl(const MeasureUnitImpl &other, UErrorCode &status);
+ MeasureUnitImpl(const SingleUnitImpl &singleUnit, UErrorCode &status);
+
+ MeasureUnitImpl &operator=(MeasureUnitImpl &&other) noexcept = default;
+
+ /** Extract the MeasureUnitImpl from a MeasureUnit. */
+ static inline const MeasureUnitImpl* get(const MeasureUnit& measureUnit) {
+ return measureUnit.fImpl;
+ }
+
+ /**
+ * Parse a unit identifier into a MeasureUnitImpl.
+ *
+ * @param identifier The unit identifier string.
+ * @param status Set if the identifier string is not valid.
+ * @return A newly parsed value object. Behaviour of this unit is
+ * unspecified if an error is returned via status.
+ */
+ static MeasureUnitImpl forIdentifier(StringPiece identifier, UErrorCode& status);
+
+ /**
+ * Extract the MeasureUnitImpl from a MeasureUnit, or parse if it is not present.
+ *
+ * @param measureUnit The source MeasureUnit.
+ * @param memory A place to write the new MeasureUnitImpl if parsing is required.
+ * @param status Set if an error occurs.
+ * @return A reference to either measureUnit.fImpl or memory.
+ */
+ static const MeasureUnitImpl& forMeasureUnit(
+ const MeasureUnit& measureUnit, MeasureUnitImpl& memory, UErrorCode& status);
+
+ /**
+ * Extract the MeasureUnitImpl from a MeasureUnit, or parse if it is not present.
+ *
+ * @param measureUnit The source MeasureUnit.
+ * @param status Set if an error occurs.
+ * @return A value object, either newly parsed or copied from measureUnit.
+ */
+ static MeasureUnitImpl forMeasureUnitMaybeCopy(
+ const MeasureUnit& measureUnit, UErrorCode& status);
+
+ /**
+ * Used for currency units.
+ */
+ static inline MeasureUnitImpl forCurrencyCode(StringPiece currencyCode) {
+ MeasureUnitImpl result;
+ UErrorCode localStatus = U_ZERO_ERROR;
+ result.identifier.append(currencyCode, localStatus);
+ // localStatus is not expected to fail since currencyCode should be 3 chars long
+ return result;
+ }
+
+ /** Transform this MeasureUnitImpl into a MeasureUnit, simplifying if possible. */
+ MeasureUnit build(UErrorCode& status) &&;
+
+ /**
+ * Create a copy of this MeasureUnitImpl. Don't use copy constructor to make this explicit.
+ */
+ MeasureUnitImpl copy(UErrorCode& status) const;
+
+ /**
+ * Extracts the list of all the individual units inside the `MeasureUnitImpl`.
+ * For example:
+ * - if the `MeasureUnitImpl` is `foot-per-hour`
+ * it will return a list of 1 {`foot-per-hour`}
+ * - if the `MeasureUnitImpl` is `foot-and-inch`
+ * it will return a list of 2 { `foot`, `inch`}
+ */
+ MaybeStackVector<MeasureUnitImpl> extractIndividualUnits(UErrorCode &status) const;
+
+ /** Mutates this MeasureUnitImpl to take the reciprocal. */
+ void takeReciprocal(UErrorCode& status);
+
+ /**
+ * Mutates this MeasureUnitImpl to append a single unit.
+ *
+ * @return true if a new item was added. If unit is the dimensionless unit,
+ * it is never added: the return value will always be false.
+ */
+ bool append(const SingleUnitImpl& singleUnit, UErrorCode& status);
+
+ /** The complexity, either SINGLE, COMPOUND, or MIXED. */
+ UMeasureUnitComplexity complexity = UMEASURE_UNIT_SINGLE;
+
+ /**
+ * The list of simple units. These may be summed or multiplied, based on the
+ * value of the complexity field.
+ *
+ * The "dimensionless" unit (SingleUnitImpl default constructor) must not be
+ * added to this list.
+ */
+ MaybeStackVector<SingleUnitImpl> units;
+
+ /**
+ * The full unit identifier. Owned by the MeasureUnitImpl. Empty if not computed.
+ */
+ CharString identifier;
+};
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+#endif //__MEASUNIT_IMPL_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measure.cpp b/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
index bffa44215e3..23adba10070 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
@@ -23,7 +23,7 @@ U_NAMESPACE_BEGIN
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Measure)
-Measure::Measure() {}
+Measure::Measure() : unit(nullptr) {}
Measure::Measure(const Formattable& _number, MeasureUnit* adoptedUnit,
UErrorCode& ec) :
@@ -35,7 +35,7 @@ Measure::Measure(const Formattable& _number, MeasureUnit* adoptedUnit,
}
Measure::Measure(const Measure& other) :
- UObject(other), unit(0) {
+ UObject(other), unit(nullptr) {
*this = other;
}
@@ -43,7 +43,11 @@ Measure& Measure::operator=(const Measure& other) {
if (this != &other) {
delete unit;
number = other.number;
- unit = other.unit->clone();
+ if (other.unit != nullptr) {
+ unit = other.unit->clone();
+ } else {
+ unit = nullptr;
+ }
}
return *this;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp b/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
index 52bab80e3da..dcf8d852e2c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
@@ -190,6 +190,7 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos
}
if (uprv_isInvariantUString(name.getBuffer(), len)) {
+ cbuf[0] = 0;
name.extract(0, len, cbuf, maxLen, US_INV);
UErrorCode status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp b/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
index e7b17b46c3a..1510d885094 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
@@ -37,7 +37,7 @@ enum {
/** 0.x */
PROPER_FRACTION_RULE_INDEX = 2,
/** x.0 */
- MASTER_RULE_INDEX = 3,
+ DEFAULT_RULE_INDEX = 3,
/** Inf */
INFINITY_RULE_INDEX = 4,
/** NaN */
@@ -278,8 +278,8 @@ void NFRuleSet::setNonNumericalRule(NFRule *rule) {
else if (baseValue == NFRule::kProperFractionRule) {
setBestFractionRule(PROPER_FRACTION_RULE_INDEX, rule, TRUE);
}
- else if (baseValue == NFRule::kMasterRule) {
- setBestFractionRule(MASTER_RULE_INDEX, rule, TRUE);
+ else if (baseValue == NFRule::kDefaultRule) {
+ setBestFractionRule(DEFAULT_RULE_INDEX, rule, TRUE);
}
else if (baseValue == NFRule::kInfinityRule) {
delete nonNumericalRules[INFINITY_RULE_INDEX];
@@ -323,7 +323,7 @@ NFRuleSet::~NFRuleSet()
for (int i = 0; i < NON_NUMERICAL_RULE_LENGTH; i++) {
if (i != IMPROPER_FRACTION_RULE_INDEX
&& i != PROPER_FRACTION_RULE_INDEX
- && i != MASTER_RULE_INDEX)
+ && i != DEFAULT_RULE_INDEX)
{
delete nonNumericalRules[i];
}
@@ -375,7 +375,7 @@ NFRuleSet::setDecimalFormatSymbols(const DecimalFormatSymbols &newSymbols, UErro
rules[i]->setDecimalFormatSymbols(newSymbols, status);
}
// Switch the fraction rules to mirror the DecimalFormatSymbols.
- for (int32_t nonNumericalIdx = IMPROPER_FRACTION_RULE_INDEX; nonNumericalIdx <= MASTER_RULE_INDEX; nonNumericalIdx++) {
+ for (int32_t nonNumericalIdx = IMPROPER_FRACTION_RULE_INDEX; nonNumericalIdx <= DEFAULT_RULE_INDEX; nonNumericalIdx++) {
if (nonNumericalRules[nonNumericalIdx]) {
for (uint32_t fIdx = 0; fIdx < fractionRules.size(); fIdx++) {
NFRule *fractionRule = fractionRules[fIdx];
@@ -472,9 +472,9 @@ NFRuleSet::findDoubleRule(double number) const
}
}
- // if there's a master rule, use it to format the number
- if (nonNumericalRules[MASTER_RULE_INDEX]) {
- return nonNumericalRules[MASTER_RULE_INDEX];
+ // if there's a default rule, use it to format the number
+ if (nonNumericalRules[DEFAULT_RULE_INDEX]) {
+ return nonNumericalRules[DEFAULT_RULE_INDEX];
}
// and if we haven't yet returned a rule, use findNormalRule()
@@ -507,13 +507,13 @@ NFRuleSet::findNormalRule(int64_t number) const
// do them in findRule(), because the version of format() that
// takes a long bypasses findRule() and goes straight to this
// function. This function does skip the fraction rules since
- // we know the value is an integer (it also skips the master
+ // we know the value is an integer (it also skips the default
// rule, since it's considered a fraction rule. Skipping the
- // master rule in this function is also how we avoid infinite
+ // default rule in this function is also how we avoid infinite
// recursion)
// {dlf} unfortunately this fails if there are no rules except
- // special rules. If there are no rules, use the master rule.
+ // special rules. If there are no rules, use the default rule.
// binary-search the rule list for the applicable rule
// (a rule is used for all values from its base value to
@@ -553,8 +553,8 @@ NFRuleSet::findNormalRule(int64_t number) const
}
return result;
}
- // else use the master rule
- return nonNumericalRules[MASTER_RULE_INDEX];
+ // else use the default rule
+ return nonNumericalRules[DEFAULT_RULE_INDEX];
}
/**
@@ -792,7 +792,7 @@ NFRuleSet::appendRules(UnicodeString& result) const
if (nonNumericalRules[i]) {
if (rule->getBaseValue() == NFRule::kImproperFractionRule
|| rule->getBaseValue() == NFRule::kProperFractionRule
- || rule->getBaseValue() == NFRule::kMasterRule)
+ || rule->getBaseValue() == NFRule::kDefaultRule)
{
for (uint32_t fIdx = 0; fIdx < fractionRules.size(); fIdx++) {
NFRule *fractionRule = fractionRules[fIdx];
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrs.h b/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
index db03c9039de..3232ab217a9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
@@ -36,7 +36,7 @@ public:
void parseRules(UnicodeString& rules, UErrorCode& status);
void setNonNumericalRule(NFRule *rule);
void setBestFractionRule(int32_t originalIndex, NFRule *newRule, UBool rememberRule);
- void makeIntoFractionRuleSet() { fIsFractionRuleSet = TRUE; }
+ void makeIntoFractionRuleSet() { fIsFractionRuleSet = true; }
~NFRuleSet();
@@ -93,11 +93,11 @@ int64_t util64_fromDouble(double d);
uint64_t util64_pow(uint32_t radix, uint16_t exponent);
// convert n to digit string in buffer, return length of string
-uint32_t util64_tou(int64_t n, UChar* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = FALSE);
+uint32_t util64_tou(int64_t n, UChar* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = false);
#ifdef RBNF_DEBUG
int64_t util64_utoi(const UChar* str, uint32_t radix = 10);
-uint32_t util64_toa(int64_t n, char* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = FALSE);
+uint32_t util64_toa(int64_t n, char* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = false);
int64_t util64_atoi(const char* str, uint32_t radix);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp b/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
index 3ad0291649e..a9b84eda182 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
@@ -153,7 +153,7 @@ NFRule::makeRules(UnicodeString& description,
if ((rule1->baseValue > 0
&& (rule1->baseValue % util64_pow(rule1->radix, rule1->exponent)) == 0)
|| rule1->getType() == kImproperFractionRule
- || rule1->getType() == kMasterRule) {
+ || rule1->getType() == kDefaultRule) {
// if it passes that test, new up the second rule. If the
// rule set both rules will belong to is a fraction rule
@@ -181,9 +181,9 @@ NFRule::makeRules(UnicodeString& description,
}
// if the description began with "x.0" and contains bracketed
- // text, it describes both the master rule and the
+ // text, it describes both the default rule and the
// improper fraction rule
- else if (rule1->getType() == kMasterRule) {
+ else if (rule1->getType() == kDefaultRule) {
rule2->baseValue = rule1->baseValue;
rule1->setType(kImproperFractionRule);
}
@@ -376,7 +376,7 @@ NFRule::parseRuleDescriptor(UnicodeString& description, UErrorCode& status)
decimalPoint = descriptor.charAt(1);
}
else if (firstChar == gX && lastChar == gZero) {
- setBaseValue(kMasterRule, status);
+ setBaseValue(kDefaultRule, status);
decimalPoint = descriptor.charAt(1);
}
else if (descriptor.compare(gNaN, 3) == 0) {
@@ -663,7 +663,7 @@ NFRule::_appendRuleText(UnicodeString& result) const
case kNegativeNumberRule: result.append(gMinusX, 2); break;
case kImproperFractionRule: result.append(gX).append(decimalPoint == 0 ? gDot : decimalPoint).append(gX); break;
case kProperFractionRule: result.append(gZero).append(decimalPoint == 0 ? gDot : decimalPoint).append(gX); break;
- case kMasterRule: result.append(gX).append(decimalPoint == 0 ? gDot : decimalPoint).append(gZero); break;
+ case kDefaultRule: result.append(gX).append(decimalPoint == 0 ? gDot : decimalPoint).append(gZero); break;
case kInfinityRule: result.append(gInf, 3); break;
case kNaNRule: result.append(gNaN, 3); break;
default:
@@ -1297,6 +1297,10 @@ NFRule::prefixLength(const UnicodeString& str, const UnicodeString& prefix, UErr
#if !UCONFIG_NO_COLLATION
// go through all this grief if we're in lenient-parse mode
if (formatter->isLenient()) {
+ // Check if non-lenient rule finds the text before call lenient parsing
+ if (str.startsWith(prefix)) {
+ return prefix.length();
+ }
// get the formatter's collator and use it to create two
// collation element iterators, one over the target string
// and another over the prefix (right now, we'll throw an
@@ -1505,9 +1509,15 @@ NFRule::findText(const UnicodeString& str,
return str.indexOf(key, startingAt);
}
else {
- // but if lenient parsing is turned ON, we've got some work
- // ahead of us
- return findTextLenient(str, key, startingAt, length);
+ // Check if non-lenient rule finds the text before call lenient parsing
+ *length = key.length();
+ int32_t pos = str.indexOf(key, startingAt);
+ if(pos >= 0) {
+ return pos;
+ } else {
+ // but if lenient parsing is turned ON, we've got some work ahead of us
+ return findTextLenient(str, key, startingAt, length);
+ }
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrule.h b/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
index ed33eaa5af7..989fbaa8f9b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
@@ -38,7 +38,7 @@ public:
kNegativeNumberRule = -1,
kImproperFractionRule = -2,
kProperFractionRule = -3,
- kMasterRule = -4,
+ kDefaultRule = -4,
kInfinityRule = -5,
kNaNRule = -6,
kOtherRule = -7
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp b/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
index 208543d1acd..e3d1fc144fa 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
@@ -342,7 +342,7 @@ NFSubstitution::makeSubstitution(int32_t pos,
// IntegralPartSubstitution
else if (rule->getBaseValue() == NFRule::kImproperFractionRule
|| rule->getBaseValue() == NFRule::kProperFractionRule
- || rule->getBaseValue() == NFRule::kMasterRule) {
+ || rule->getBaseValue() == NFRule::kDefaultRule) {
return new IntegralPartSubstitution(pos, ruleSet, description, status);
}
@@ -371,7 +371,7 @@ NFSubstitution::makeSubstitution(int32_t pos,
// FractionalPartSubstitution
else if (rule->getBaseValue() == NFRule::kImproperFractionRule
|| rule->getBaseValue() == NFRule::kProperFractionRule
- || rule->getBaseValue() == NFRule::kMasterRule) {
+ || rule->getBaseValue() == NFRule::kDefaultRule) {
return new FractionalPartSubstitution(pos, ruleSet, description, status);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nounit.cpp b/Build/source/libs/icu/icu-src/source/i18n/nounit.cpp
deleted file mode 100644
index 076f76f199c..00000000000
--- a/Build/source/libs/icu/icu-src/source/i18n/nounit.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// © 2017 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-#include "unicode/nounit.h"
-#include "uassert.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(NoUnit)
-
-NoUnit U_EXPORT2 NoUnit::base() {
- return NoUnit("base");
-}
-
-NoUnit U_EXPORT2 NoUnit::percent() {
- return NoUnit("percent");
-}
-
-NoUnit U_EXPORT2 NoUnit::permille() {
- return NoUnit("permille");
-}
-
-NoUnit::NoUnit(const char* subtype) {
- initNoUnit(subtype);
-}
-
-NoUnit::NoUnit(const NoUnit& other) : MeasureUnit(other) {
-}
-
-NoUnit* NoUnit::clone() const {
- return new NoUnit(*this);
-}
-
-NoUnit::~NoUnit() {
-}
-
-
-U_NAMESPACE_END
-
-#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
index 1039a84c656..a74ec2d6347 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
@@ -131,25 +131,25 @@ UnicodeString AffixUtils::escape(const UnicodeString &input) {
Field AffixUtils::getFieldForType(AffixPatternType type) {
switch (type) {
case TYPE_MINUS_SIGN:
- return UNUM_SIGN_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD};
case TYPE_PLUS_SIGN:
- return UNUM_SIGN_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD};
case TYPE_PERCENT:
- return UNUM_PERCENT_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD};
case TYPE_PERMILLE:
- return UNUM_PERMILL_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_PERMILL_FIELD};
case TYPE_CURRENCY_SINGLE:
- return UNUM_CURRENCY_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
case TYPE_CURRENCY_DOUBLE:
- return UNUM_CURRENCY_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
case TYPE_CURRENCY_TRIPLE:
- return UNUM_CURRENCY_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
case TYPE_CURRENCY_QUAD:
- return UNUM_CURRENCY_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
case TYPE_CURRENCY_QUINT:
- return UNUM_CURRENCY_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
case TYPE_CURRENCY_OVERFLOW:
- return UNUM_CURRENCY_FIELD;
+ return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
default:
UPRV_UNREACHABLE;
}
@@ -165,7 +165,11 @@ AffixUtils::unescape(const UnicodeString &affixPattern, FormattedStringBuilder &
if (U_FAILURE(status)) { return length; }
if (tag.type == TYPE_CURRENCY_OVERFLOW) {
// Don't go to the provider for this special case
- length += output.insertCodePoint(position + length, 0xFFFD, UNUM_CURRENCY_FIELD, status);
+ length += output.insertCodePoint(
+ position + length,
+ 0xFFFD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD},
+ status);
} else if (tag.type < 0) {
length += output.insert(
position + length, provider.getSymbol(tag.type), getFieldForType(tag.type), status);
@@ -218,7 +222,7 @@ bool AffixUtils::hasCurrencySymbols(const UnicodeString &affixPattern, UErrorCod
while (hasNext(tag, affixPattern)) {
tag = nextToken(tag, affixPattern, status);
if (U_FAILURE(status)) { return false; }
- if (tag.type < 0 && getFieldForType(tag.type) == UNUM_CURRENCY_FIELD) {
+ if (tag.type < 0 && getFieldForType(tag.type) == Field(UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD)) {
return true;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp
index e876174fdce..9d10d1f5580 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp
@@ -102,4 +102,16 @@ const LocalizedNumberFormatter& LocalizedNumberFormatterAsFormat::getNumberForma
return fFormatter;
}
+
+// Definitions of public API methods (put here for dependency disentanglement)
+
+Format* LocalizedNumberFormatter::toFormat(UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ LocalPointer<LocalizedNumberFormatterAsFormat> retval(
+ new LocalizedNumberFormatterAsFormat(*this, fMacros.locale), status);
+ return retval.orphan();
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
index 7b0a1dee6f4..3a2fe3185be 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
@@ -25,7 +25,6 @@ namespace impl {
* A wrapper around LocalizedNumberFormatter implementing the Format interface, enabling improved
* compatibility with other APIs.
*
- * @draft ICU 62
* @see NumberFormatter
*/
class U_I18N_API LocalizedNumberFormatterAsFormat : public Format {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
index f802e211049..4cb56253628 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
@@ -13,6 +13,7 @@
#include "number_utypes.h"
#include "numparse_types.h"
#include "formattedval_impl.h"
+#include "number_decnum.h"
#include "unicode/numberformatter.h"
#include "unicode/unumberformatter.h"
@@ -156,7 +157,7 @@ unumf_resultToString(const UFormattedNumber* uresult, UChar* buffer, int32_t buf
return 0;
}
- return result->fImpl.toTempString(*ec).extract(buffer, bufferCapacity, *ec);
+ return result->fData.toTempString(*ec).extract(buffer, bufferCapacity, *ec);
}
U_CAPI UBool U_EXPORT2
@@ -173,7 +174,7 @@ unumf_resultNextFieldPosition(const UFormattedNumber* uresult, UFieldPosition* u
fp.setField(ufpos->field);
fp.setBeginIndex(ufpos->beginIndex);
fp.setEndIndex(ufpos->endIndex);
- bool retval = result->fImpl.nextFieldPosition(fp, *ec);
+ bool retval = result->fData.nextFieldPosition(fp, *ec);
ufpos->beginIndex = fp.getBeginIndex();
ufpos->endIndex = fp.getEndIndex();
// NOTE: MSVC sometimes complains when implicitly converting between bool and UBool
@@ -192,7 +193,25 @@ unumf_resultGetAllFieldPositions(const UFormattedNumber* uresult, UFieldPosition
}
auto* fpi = reinterpret_cast<FieldPositionIterator*>(ufpositer);
- result->fImpl.getAllFieldPositions(*fpi, *ec);
+ FieldPositionIteratorHandler fpih(fpi, *ec);
+ result->fData.getAllFieldPositions(fpih, *ec);
+}
+
+U_CAPI int32_t U_EXPORT2
+unumf_resultToDecimalNumber(
+ const UFormattedNumber* uresult,
+ char* dest,
+ int32_t destCapacity,
+ UErrorCode* ec) {
+ const auto* result = UFormattedNumberApiHelper::validate(uresult, *ec);
+ if (U_FAILURE(*ec)) {
+ return 0;
+ }
+ DecNum decnum;
+ return result->fData.quantity
+ .toDecNum(decnum, *ec)
+ .toCharString(*ec)
+ .extract(dest, destCapacity, *ec);
}
U_CAPI void U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
index 3d259999d6c..d781b6fada2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
@@ -167,6 +167,11 @@ void CompactData::CompactDataSink::put(const char *key, ResourceValue &value, UB
if (U_FAILURE(status)) { return; }
for (int i4 = 0; pluralVariantsTable.getKeyAndValue(i4, key, value); ++i4) {
+ if (uprv_strcmp(key, "0") == 0 || uprv_strcmp(key, "1") == 0) {
+ // TODO(ICU-21258): Handle this case. For now, skip.
+ continue;
+ }
+
// Skip this magnitude/plural if we already have it from a child locale.
// Note: This also skips USE_FALLBACK entries.
StandardPlural::Form plural = StandardPlural::fromString(key, status);
@@ -215,19 +220,25 @@ void CompactData::CompactDataSink::put(const char *key, ResourceValue &value, UB
/// END OF CompactData.java; BEGIN CompactNotation.java ///
///////////////////////////////////////////////////////////
-CompactHandler::CompactHandler(CompactStyle compactStyle, const Locale &locale, const char *nsName,
- CompactType compactType, const PluralRules *rules,
- MutablePatternModifier *buildReference, const MicroPropsGenerator *parent,
- UErrorCode &status)
- : rules(rules), parent(parent) {
+CompactHandler::CompactHandler(
+ CompactStyle compactStyle,
+ const Locale &locale,
+ const char *nsName,
+ CompactType compactType,
+ const PluralRules *rules,
+ MutablePatternModifier *buildReference,
+ bool safe,
+ const MicroPropsGenerator *parent,
+ UErrorCode &status)
+ : rules(rules), parent(parent), safe(safe) {
data.populate(locale, nsName, compactStyle, compactType, status);
- if (buildReference != nullptr) {
+ if (safe) {
// Safe code path
precomputeAllModifiers(*buildReference, status);
- safe = TRUE;
} else {
// Unsafe code path
- safe = FALSE;
+ // Store the MutablePatternModifier reference.
+ unsafePatternModifier = buildReference;
}
}
@@ -260,7 +271,7 @@ void CompactHandler::precomputeAllModifiers(MutablePatternModifier &buildReferen
ParsedPatternInfo patternInfo;
PatternParser::parseToPatternInfo(UnicodeString(patternString), patternInfo, status);
if (U_FAILURE(status)) { return; }
- buildReference.setPatternInfo(&patternInfo, UNUM_COMPACT_FIELD);
+ buildReference.setPatternInfo(&patternInfo, {UFIELD_CATEGORY_NUMBER, UNUM_COMPACT_FIELD});
info.mod = buildReference.createImmutable(status);
if (U_FAILURE(status)) { return; }
info.patternString = patternString;
@@ -274,12 +285,13 @@ void CompactHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micr
// Treat zero, NaN, and infinity as if they had magnitude 0
int32_t magnitude;
+ int32_t multiplier = 0;
if (quantity.isZeroish()) {
magnitude = 0;
micros.rounder.apply(quantity, status);
} else {
// TODO: Revisit chooseMultiplierAndApply
- int32_t multiplier = micros.rounder.chooseMultiplierAndApply(quantity, data, status);
+ multiplier = micros.rounder.chooseMultiplierAndApply(quantity, data, status);
magnitude = quantity.isZeroish() ? 0 : quantity.getMagnitude();
magnitude -= multiplier;
}
@@ -309,10 +321,18 @@ void CompactHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micr
// C++ Note: Use unsafePatternInfo for proper lifecycle.
ParsedPatternInfo &patternInfo = const_cast<CompactHandler *>(this)->unsafePatternInfo;
PatternParser::parseToPatternInfo(UnicodeString(patternString), patternInfo, status);
- static_cast<MutablePatternModifier*>(const_cast<Modifier*>(micros.modMiddle))
- ->setPatternInfo(&patternInfo, UNUM_COMPACT_FIELD);
+ unsafePatternModifier->setPatternInfo(
+ &unsafePatternInfo,
+ {UFIELD_CATEGORY_NUMBER, UNUM_COMPACT_FIELD});
+ unsafePatternModifier->setNumberProperties(quantity.signum(), StandardPlural::Form::COUNT);
+ micros.modMiddle = unsafePatternModifier;
}
+ // Change the exponent only after we select appropriate plural form
+ // for formatting purposes so that we preserve expected formatted
+ // string behavior.
+ quantity.adjustExponent(-1 * multiplier);
+
// We already performed rounding. Do not perform it again.
micros.rounder = RoundingImpl::passThrough();
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_compact.h b/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
index dda5f9f9b2d..199d39f6591 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
@@ -56,10 +56,16 @@ struct CompactModInfo {
class CompactHandler : public MicroPropsGenerator, public UMemory {
public:
- CompactHandler(CompactStyle compactStyle, const Locale &locale, const char *nsName,
- CompactType compactType, const PluralRules *rules,
- MutablePatternModifier *buildReference, const MicroPropsGenerator *parent,
- UErrorCode &status);
+ CompactHandler(
+ CompactStyle compactStyle,
+ const Locale &locale,
+ const char *nsName,
+ CompactType compactType,
+ const PluralRules *rules,
+ MutablePatternModifier *buildReference,
+ bool safe,
+ const MicroPropsGenerator *parent,
+ UErrorCode &status);
~CompactHandler() U_OVERRIDE;
@@ -74,6 +80,7 @@ class CompactHandler : public MicroPropsGenerator, public UMemory {
int32_t precomputedModsLength = 0;
CompactData data;
ParsedPatternInfo unsafePatternInfo;
+ MutablePatternModifier* unsafePatternModifier;
UBool safe;
/** Used by the safe code path */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp
index 4d6fb2cb1d8..9208427904c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp
@@ -44,6 +44,16 @@ UnicodeString CurrencySymbols::getNarrowCurrencySymbol(UErrorCode& status) const
return loadSymbol(UCURR_NARROW_SYMBOL_NAME, status);
}
+UnicodeString CurrencySymbols::getFormalCurrencySymbol(UErrorCode& status) const {
+ // Note: currently no override is available for formal currency symbol
+ return loadSymbol(UCURR_FORMAL_SYMBOL_NAME, status);
+}
+
+UnicodeString CurrencySymbols::getVariantCurrencySymbol(UErrorCode& status) const {
+ // Note: currently no override is available for variant currency symbol
+ return loadSymbol(UCURR_VARIANT_SYMBOL_NAME, status);
+}
+
UnicodeString CurrencySymbols::getCurrencySymbol(UErrorCode& status) const {
if (!fCurrencySymbol.isBogus()) {
return fCurrencySymbol;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.h b/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.h
index 9996bf96ae0..7e38fdf8287 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.h
@@ -31,6 +31,10 @@ class U_I18N_API CurrencySymbols : public UMemory {
UnicodeString getNarrowCurrencySymbol(UErrorCode& status) const;
+ UnicodeString getFormalCurrencySymbol(UErrorCode& status) const;
+
+ UnicodeString getVariantCurrencySymbol(UErrorCode& status) const;
+
UnicodeString getCurrencySymbol(UErrorCode& status) const;
UnicodeString getIntlCurrencySymbol(UErrorCode& status) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
index 2c4c2ce7e99..74547c1842d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
@@ -20,6 +20,7 @@
#include "charstr.h"
#include "number_utils.h"
#include "uassert.h"
+#include "util.h"
using namespace icu;
using namespace icu::number;
@@ -120,6 +121,7 @@ void DecimalQuantity::copyFieldsFrom(const DecimalQuantity& other) {
origDouble = other.origDouble;
origDelta = other.origDelta;
isApproximate = other.isApproximate;
+ exponent = other.exponent;
}
void DecimalQuantity::clear() {
@@ -269,11 +271,21 @@ double DecimalQuantity::getPluralOperand(PluralOperand operand) const {
return fractionCount();
case PLURAL_OPERAND_W:
return fractionCountWithoutTrailingZeros();
+ case PLURAL_OPERAND_E:
+ return static_cast<double>(getExponent());
default:
return std::abs(toDouble());
}
}
+int32_t DecimalQuantity::getExponent() const {
+ return exponent;
+}
+
+void DecimalQuantity::adjustExponent(int delta) {
+ exponent = exponent + delta;
+}
+
bool DecimalQuantity::hasIntegerValue() const {
return scale >= 0;
}
@@ -307,11 +319,13 @@ int8_t DecimalQuantity::getDigit(int32_t magnitude) const {
}
int32_t DecimalQuantity::fractionCount() const {
- return -getLowerDisplayMagnitude();
+ int32_t fractionCountWithExponent = -getLowerDisplayMagnitude() - exponent;
+ return fractionCountWithExponent > 0 ? fractionCountWithExponent : 0;
}
int32_t DecimalQuantity::fractionCountWithoutTrailingZeros() const {
- return -scale > 0 ? -scale : 0; // max(-scale, 0)
+ int32_t fractionCountWithExponent = -scale - exponent;
+ return fractionCountWithExponent > 0 ? fractionCountWithExponent : 0; // max(-fractionCountWithExponent, 0)
}
bool DecimalQuantity::isNegative() const {
@@ -319,10 +333,14 @@ bool DecimalQuantity::isNegative() const {
}
Signum DecimalQuantity::signum() const {
- if (isNegative()) {
+ bool isZero = (isZeroish() && !isInfinite());
+ bool isNeg = isNegative();
+ if (isZero && isNeg) {
+ return SIGNUM_NEG_ZERO;
+ } else if (isZero) {
+ return SIGNUM_POS_ZERO;
+ } else if (isNeg) {
return SIGNUM_NEG;
- } else if (isZeroish() && !isInfinite()) {
- return SIGNUM_ZERO;
} else {
return SIGNUM_POS;
}
@@ -422,9 +440,6 @@ void DecimalQuantity::_setToDoubleFast(double n) {
// TODO: Make a fast path for other types of doubles.
if (!std::numeric_limits<double>::is_iec559) {
convertToAccurateDouble();
- // Turn off the approximate double flag, since the value is now exact.
- isApproximate = false;
- origDouble = 0.0;
return;
}
@@ -439,8 +454,14 @@ void DecimalQuantity::_setToDoubleFast(double n) {
return;
}
+ if (exponent == -1023 || exponent == 1024) {
+ // The extreme values of exponent are special; use slow path.
+ convertToAccurateDouble();
+ return;
+ }
+
// 3.3219... is log2(10)
- auto fracLength = static_cast<int32_t> ((52 - exponent) / 3.32192809489);
+ auto fracLength = static_cast<int32_t> ((52 - exponent) / 3.32192809488736234787031942948939017586);
if (fracLength >= 0) {
int32_t i = fracLength;
// 1e22 is the largest exact double.
@@ -452,7 +473,7 @@ void DecimalQuantity::_setToDoubleFast(double n) {
for (; i <= -22; i += 22) n /= 1e22;
n /= DOUBLE_MULTIPLIERS[-i];
}
- auto result = static_cast<int64_t>(std::round(n));
+ auto result = static_cast<int64_t>(uprv_round(n));
if (result != 0) {
_setToLong(result);
scale -= fracLength;
@@ -521,12 +542,12 @@ int64_t DecimalQuantity::toLong(bool truncateIfOverflow) const {
// if (dq.fitsInLong()) { /* use dq.toLong() */ } else { /* use some fallback */ }
// Fallback behavior upon truncateIfOverflow is to truncate at 17 digits.
uint64_t result = 0L;
- int32_t upperMagnitude = scale + precision - 1;
+ int32_t upperMagnitude = exponent + scale + precision - 1;
if (truncateIfOverflow) {
upperMagnitude = std::min(upperMagnitude, 17);
}
for (int32_t magnitude = upperMagnitude; magnitude >= 0; magnitude--) {
- result = result * 10 + getDigitPos(magnitude - scale);
+ result = result * 10 + getDigitPos(magnitude - scale - exponent);
}
if (isNegative()) {
return static_cast<int64_t>(0LL - result); // i.e., -result
@@ -536,7 +557,7 @@ int64_t DecimalQuantity::toLong(bool truncateIfOverflow) const {
uint64_t DecimalQuantity::toFractionLong(bool includeTrailingZeros) const {
uint64_t result = 0L;
- int32_t magnitude = -1;
+ int32_t magnitude = -1 - exponent;
int32_t lowerMagnitude = scale;
if (includeTrailingZeros) {
lowerMagnitude = std::min(lowerMagnitude, rReqPos);
@@ -560,7 +581,7 @@ bool DecimalQuantity::fitsInLong(bool ignoreFraction) const {
if (isZeroish()) {
return true;
}
- if (scale < 0 && !ignoreFraction) {
+ if (exponent + scale < 0 && !ignoreFraction) {
return false;
}
int magnitude = getMagnitude();
@@ -606,7 +627,7 @@ double DecimalQuantity::toDouble() const {
&count);
}
-void DecimalQuantity::toDecNum(DecNum& output, UErrorCode& status) const {
+DecNum& DecimalQuantity::toDecNum(DecNum& output, UErrorCode& status) const {
// Special handling for zero
if (precision == 0) {
output.setTo("0", status);
@@ -614,11 +635,15 @@ void DecimalQuantity::toDecNum(DecNum& output, UErrorCode& status) const {
// Use the BCD constructor. We need to do a little bit of work to convert, though.
// The decNumber constructor expects most-significant first, but we store least-significant first.
- MaybeStackArray<uint8_t, 20> ubcd(precision);
+ MaybeStackArray<uint8_t, 20> ubcd(precision, status);
+ if (U_FAILURE(status)) {
+ return output;
+ }
for (int32_t m = 0; m < precision; m++) {
ubcd[precision - m - 1] = static_cast<uint8_t>(getDigitPos(m));
}
output.setTo(ubcd.getAlias(), precision, scale, isNegative(), status);
+ return output;
}
void DecimalQuantity::truncate() {
@@ -877,12 +902,30 @@ UnicodeString DecimalQuantity::toPlainString() const {
if (isNegative()) {
sb.append(u'-');
}
- if (precision == 0 || getMagnitude() < 0) {
+ if (precision == 0) {
+ sb.append(u'0');
+ return sb;
+ }
+ int32_t upper = scale + precision + exponent - 1;
+ int32_t lower = scale + exponent;
+ if (upper < lReqPos - 1) {
+ upper = lReqPos - 1;
+ }
+ if (lower > rReqPos) {
+ lower = rReqPos;
+ }
+ int32_t p = upper;
+ if (p < 0) {
sb.append(u'0');
}
- for (int m = getUpperDisplayMagnitude(); m >= getLowerDisplayMagnitude(); m--) {
- if (m == -1) { sb.append(u'.'); }
- sb.append(getDigit(m) + u'0');
+ for (; p >= 0; p--) {
+ sb.append(u'0' + getDigitPos(p - scale - exponent));
+ }
+ if (lower < 0) {
+ sb.append(u'.');
+ }
+ for(; p >= lower; p--) {
+ sb.append(u'0' + getDigitPos(p - scale - exponent));
}
return sb;
}
@@ -908,7 +951,7 @@ UnicodeString DecimalQuantity::toScientificString() const {
}
}
result.append(u'E');
- int32_t _scale = upperPos + scale;
+ int32_t _scale = upperPos + scale + exponent;
if (_scale == INT32_MIN) {
result.append({u"-2147483648", -1});
return result;
@@ -966,13 +1009,8 @@ void DecimalQuantity::shiftLeft(int32_t numDigits) {
}
if (usingBytes) {
ensureCapacity(precision + numDigits);
- int i = precision + numDigits - 1;
- for (; i >= numDigits; i--) {
- fBCD.bcdBytes.ptr[i] = fBCD.bcdBytes.ptr[i - numDigits];
- }
- for (; i >= 0; i--) {
- fBCD.bcdBytes.ptr[i] = 0;
- }
+ uprv_memmove(fBCD.bcdBytes.ptr + numDigits, fBCD.bcdBytes.ptr, precision);
+ uprv_memset(fBCD.bcdBytes.ptr, 0, numDigits);
} else {
fBCD.bcdLong <<= (numDigits * 4);
}
@@ -1021,6 +1059,7 @@ void DecimalQuantity::setBcdToZero() {
isApproximate = false;
origDouble = 0;
origDelta = 0;
+ exponent = 0;
}
void DecimalQuantity::readIntToBcd(int32_t n) {
@@ -1285,7 +1324,11 @@ bool DecimalQuantity::operator==(const DecimalQuantity& other) const {
}
UnicodeString DecimalQuantity::toString() const {
- MaybeStackArray<char, 30> digits(precision + 1);
+ UErrorCode localStatus = U_ZERO_ERROR;
+ MaybeStackArray<char, 30> digits(precision + 1, localStatus);
+ if (U_FAILURE(localStatus)) {
+ return ICU_Utility::makeBogusString();
+ }
for (int32_t i = 0; i < precision; i++) {
digits[i] = getDigitPos(precision - i - 1) + '0';
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
index 4ec6c5a5b2b..5ab680e6d73 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
@@ -20,7 +20,7 @@ namespace impl {
class DecNum;
/**
- * An class for representing a number to be processed by the decimal formatting pipeline. Includes
+ * A class for representing a number to be processed by the decimal formatting pipeline. Includes
* methods for rounding, plural rules, and decimal digit extraction.
*
* <p>By design, this is NOT IMMUTABLE and NOT THREAD SAFE. It is intended to be an intermediate
@@ -147,6 +147,26 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
int32_t getMagnitude() const;
/**
+ * @return The value of the (suppressed) exponent after the number has been
+ * put into a notation with exponents (ex: compact, scientific). Ex: given
+ * the number 1000 as "1K" / "1E3", the return value will be 3 (positive).
+ */
+ int32_t getExponent() const;
+
+ /**
+ * Adjusts the value for the (suppressed) exponent stored when using
+ * notation with exponents (ex: compact, scientific).
+ *
+ * <p>Adjusting the exponent is decoupled from {@link #adjustMagnitude} in
+ * order to allow flexibility for {@link StandardPlural} to be selected in
+ * formatting (ex: for compact notation) either with or without the exponent
+ * applied in the value of the number.
+ * @param delta
+ * The value to adjust the exponent by.
+ */
+ void adjustExponent(int32_t delta);
+
+ /**
* @return Whether the value represented by this {@link DecimalQuantity} is
* zero, infinity, or NaN.
*/
@@ -164,9 +184,19 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
/** @return Whether the value represented by this {@link DecimalQuantity} is not a number. */
bool isNaN() const U_OVERRIDE;
- /** @param truncateIfOverflow if false and the number does NOT fit, fails with an assertion error. */
+ /**
+ * Note: this method incorporates the value of {@code exponent}
+ * (for cases such as compact notation) to return the proper long value
+ * represented by the result.
+ * @param truncateIfOverflow if false and the number does NOT fit, fails with an assertion error.
+ */
int64_t toLong(bool truncateIfOverflow = false) const;
+ /**
+ * Note: this method incorporates the value of {@code exponent}
+ * (for cases such as compact notation) to return the proper long value
+ * represented by the result.
+ */
uint64_t toFractionLong(bool includeTrailingZeros) const;
/**
@@ -179,7 +209,7 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
double toDouble() const;
/** Computes a DecNum representation of this DecimalQuantity, saving it to the output parameter. */
- void toDecNum(DecNum& output, UErrorCode& status) const;
+ DecNum& toDecNum(DecNum& output, UErrorCode& status) const;
DecimalQuantity &setToInt(int32_t n);
@@ -187,7 +217,13 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
DecimalQuantity &setToDouble(double n);
- /** decNumber is similar to BigDecimal in Java. */
+ /**
+ * Produces a DecimalQuantity that was parsed from a string by the decNumber
+ * C Library.
+ *
+ * decNumber is similar to BigDecimal in Java, and supports parsing strings
+ * such as "123.456621E+40".
+ */
DecimalQuantity &setToDecNumber(StringPiece n, UErrorCode& status);
/** Internal method if the caller already has a DecNum. */
@@ -351,6 +387,10 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
int32_t lReqPos = 0;
int32_t rReqPos = 0;
+ // The value of the (suppressed) exponent after the number has been put into
+ // a notation with exponents (ex: compact, scientific).
+ int32_t exponent = 0;
+
/**
* The BCD of the 16 digits of the number represented by this object. Every 4 bits of the long map
* to one digit. For example, the number "12345" in BCD is "0x12345".
@@ -423,7 +463,7 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
/**
* Sets the internal representation to zero. Clears any values stored in scale, precision,
- * hasDouble, origDouble, origDelta, and BCD data.
+ * hasDouble, origDouble, origDelta, exponent, and BCD data.
*/
void setBcdToZero();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h b/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h
index 0c7399dbddd..3bb8d107807 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h
@@ -9,6 +9,7 @@
#include "decNumber.h"
#include "charstr.h"
+#include "bytesinkutil.h"
U_NAMESPACE_BEGIN
@@ -57,6 +58,13 @@ class U_I18N_API DecNum : public UMemory {
void toString(ByteSink& output, UErrorCode& status) const;
+ inline CharString toCharString(UErrorCode& status) const {
+ CharString cstr;
+ CharStringByteSink sink(&cstr);
+ toString(sink, status);
+ return cstr;
+ }
+
inline const decNumber* getRawDecNumber() const {
return fData.getAlias();
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
index 2dbd2fa6cd5..8569a36e5b2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
@@ -11,9 +11,9 @@
#include "number_formatimpl.h"
#include "umutex.h"
#include "number_asformat.h"
-#include "number_skeletons.h"
#include "number_utils.h"
#include "number_utypes.h"
+#include "number_mapper.h"
#include "util.h"
#include "fphdlimp.h"
@@ -21,6 +21,16 @@ using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
+#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
+// Ignore MSVC warning 4661. This is generated for NumberFormatterSettings<>::toSkeleton() as this method
+// is defined elsewhere (in number_skeletons.cpp). The compiler is warning that the explicit template instantiation
+// inside this single translation unit (CPP file) is incomplete, and thus it isn't sure if the template class is
+// fully defined. However, since each translation unit explicitly instantiates all the necessary template classes,
+// they will all be passed to the linker, and the linker will still find and export all the class members.
+#pragma warning(push)
+#pragma warning(disable: 4661)
+#endif
+
template<typename Derived>
Derived NumberFormatterSettings<Derived>::notation(const Notation& notation) const& {
Derived copy(*this);
@@ -265,6 +275,20 @@ Derived NumberFormatterSettings<Derived>::scale(const Scale& scale)&& {
}
template<typename Derived>
+Derived NumberFormatterSettings<Derived>::usage(const StringPiece usage) const& {
+ Derived copy(*this);
+ copy.fMacros.usage.set(usage);
+ return copy;
+}
+
+template<typename Derived>
+Derived NumberFormatterSettings<Derived>::usage(const StringPiece usage)&& {
+ Derived move(std::move(*this));
+ move.fMacros.usage.set(usage);
+ return move;
+}
+
+template<typename Derived>
Derived NumberFormatterSettings<Derived>::padding(const Padder& padder) const& {
Derived copy(*this);
copy.fMacros.padder = padder;
@@ -320,16 +344,7 @@ Derived NumberFormatterSettings<Derived>::macros(impl::MacroProps&& macros)&& {
return move;
}
-template<typename Derived>
-UnicodeString NumberFormatterSettings<Derived>::toSkeleton(UErrorCode& status) const {
- if (U_FAILURE(status)) {
- return ICU_Utility::makeBogusString();
- }
- if (fMacros.copyErrorTo(status)) {
- return ICU_Utility::makeBogusString();
- }
- return skeleton::generate(fMacros, status);
-}
+// Note: toSkeleton defined in number_skeletons.cpp
template<typename Derived>
LocalPointer<Derived> NumberFormatterSettings<Derived>::clone() const & {
@@ -358,15 +373,7 @@ LocalizedNumberFormatter NumberFormatter::withLocale(const Locale& locale) {
return with().locale(locale);
}
-UnlocalizedNumberFormatter
-NumberFormatter::forSkeleton(const UnicodeString& skeleton, UErrorCode& status) {
- return skeleton::create(skeleton, nullptr, status);
-}
-
-UnlocalizedNumberFormatter
-NumberFormatter::forSkeleton(const UnicodeString& skeleton, UParseError& perror, UErrorCode& status) {
- return skeleton::create(skeleton, &perror, status);
-}
+// Note: forSkeleton defined in number_skeletons.cpp
template<typename T> using NFS = NumberFormatterSettings<T>;
@@ -408,7 +415,8 @@ LocalizedNumberFormatter::LocalizedNumberFormatter(const LNF& other)
LocalizedNumberFormatter::LocalizedNumberFormatter(const NFS<LNF>& other)
: NFS<LNF>(other) {
- // No additional fields to assign (let call count and compiled formatter reset to defaults)
+ UErrorCode localStatus = U_ZERO_ERROR; // Can't bubble up the error
+ lnfCopyHelper(static_cast<const LNF&>(other), localStatus);
}
LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&& src) U_NOEXCEPT
@@ -416,38 +424,25 @@ LocalizedNumberFormatter::LocalizedNumberFormatter(LocalizedNumberFormatter&& sr
LocalizedNumberFormatter::LocalizedNumberFormatter(NFS<LNF>&& src) U_NOEXCEPT
: NFS<LNF>(std::move(src)) {
- // For the move operators, copy over the compiled formatter.
- // Note: if the formatter is not compiled, call count information is lost.
- if (static_cast<LNF&&>(src).fCompiled != nullptr) {
- lnfMoveHelper(static_cast<LNF&&>(src));
- }
+ lnfMoveHelper(std::move(static_cast<LNF&&>(src)));
}
LocalizedNumberFormatter& LocalizedNumberFormatter::operator=(const LNF& other) {
NFS<LNF>::operator=(static_cast<const NFS<LNF>&>(other));
- // Reset to default values.
- clear();
+ UErrorCode localStatus = U_ZERO_ERROR; // Can't bubble up the error
+ lnfCopyHelper(other, localStatus);
return *this;
}
LocalizedNumberFormatter& LocalizedNumberFormatter::operator=(LNF&& src) U_NOEXCEPT {
NFS<LNF>::operator=(static_cast<NFS<LNF>&&>(src));
- // For the move operators, copy over the compiled formatter.
- // Note: if the formatter is not compiled, call count information is lost.
- if (static_cast<LNF&&>(src).fCompiled != nullptr) {
- // Formatter is compiled
- lnfMoveHelper(static_cast<LNF&&>(src));
- } else {
- clear();
- }
+ lnfMoveHelper(std::move(src));
return *this;
}
-void LocalizedNumberFormatter::clear() {
- // Reset to default values.
+void LocalizedNumberFormatter::resetCompiled() {
auto* callCount = reinterpret_cast<u_atomic_int32_t*>(fUnsafeCallCount);
umtx_storeRelease(*callCount, 0);
- delete fCompiled;
fCompiled = nullptr;
}
@@ -455,19 +450,56 @@ void LocalizedNumberFormatter::lnfMoveHelper(LNF&& src) {
// Copy over the compiled formatter and set call count to INT32_MIN as in computeCompiled().
// Don't copy the call count directly because doing so requires a loadAcquire/storeRelease.
// The bits themselves appear to be platform-dependent, so copying them might not be safe.
- auto* callCount = reinterpret_cast<u_atomic_int32_t*>(fUnsafeCallCount);
- umtx_storeRelease(*callCount, INT32_MIN);
delete fCompiled;
- fCompiled = src.fCompiled;
- // Reset the source object to leave it in a safe state.
- auto* srcCallCount = reinterpret_cast<u_atomic_int32_t*>(src.fUnsafeCallCount);
- umtx_storeRelease(*srcCallCount, 0);
- src.fCompiled = nullptr;
+ if (src.fCompiled != nullptr) {
+ auto* callCount = reinterpret_cast<u_atomic_int32_t*>(fUnsafeCallCount);
+ umtx_storeRelease(*callCount, INT32_MIN);
+ fCompiled = src.fCompiled;
+ // Reset the source object to leave it in a safe state.
+ src.resetCompiled();
+ } else {
+ resetCompiled();
+ }
+
+ // Unconditionally move the warehouse
+ delete fWarehouse;
+ fWarehouse = src.fWarehouse;
+ src.fWarehouse = nullptr;
+}
+
+void LocalizedNumberFormatter::lnfCopyHelper(const LNF&, UErrorCode& status) {
+ // When copying, always reset the compiled formatter.
+ delete fCompiled;
+ resetCompiled();
+
+ // If MacroProps has a reference to AffixPatternProvider, we need to copy it.
+ // If MacroProps has a reference to PluralRules, copy that one, too.
+ delete fWarehouse;
+ if (fMacros.affixProvider || fMacros.rules) {
+ LocalPointer<DecimalFormatWarehouse> warehouse(new DecimalFormatWarehouse(), status);
+ if (U_FAILURE(status)) {
+ fWarehouse = nullptr;
+ return;
+ }
+ if (fMacros.affixProvider) {
+ warehouse->affixProvider.setTo(fMacros.affixProvider, status);
+ fMacros.affixProvider = &warehouse->affixProvider.get();
+ }
+ if (fMacros.rules) {
+ warehouse->rules.adoptInsteadAndCheckErrorCode(
+ new PluralRules(*fMacros.rules), status);
+ fMacros.rules = warehouse->rules.getAlias();
+ }
+ fWarehouse = warehouse.orphan();
+ } else {
+ fWarehouse = nullptr;
+ }
}
LocalizedNumberFormatter::~LocalizedNumberFormatter() {
delete fCompiled;
+ delete fWarehouse;
}
LocalizedNumberFormatter::LocalizedNumberFormatter(const MacroProps& macros, const Locale& locale) {
@@ -488,123 +520,6 @@ LocalizedNumberFormatter UnlocalizedNumberFormatter::locale(const Locale& locale
return LocalizedNumberFormatter(std::move(fMacros), locale);
}
-SymbolsWrapper::SymbolsWrapper(const SymbolsWrapper& other) {
- doCopyFrom(other);
-}
-
-SymbolsWrapper::SymbolsWrapper(SymbolsWrapper&& src) U_NOEXCEPT {
- doMoveFrom(std::move(src));
-}
-
-SymbolsWrapper& SymbolsWrapper::operator=(const SymbolsWrapper& other) {
- if (this == &other) {
- return *this;
- }
- doCleanup();
- doCopyFrom(other);
- return *this;
-}
-
-SymbolsWrapper& SymbolsWrapper::operator=(SymbolsWrapper&& src) U_NOEXCEPT {
- if (this == &src) {
- return *this;
- }
- doCleanup();
- doMoveFrom(std::move(src));
- return *this;
-}
-
-SymbolsWrapper::~SymbolsWrapper() {
- doCleanup();
-}
-
-void SymbolsWrapper::setTo(const DecimalFormatSymbols& dfs) {
- doCleanup();
- fType = SYMPTR_DFS;
- fPtr.dfs = new DecimalFormatSymbols(dfs);
-}
-
-void SymbolsWrapper::setTo(const NumberingSystem* ns) {
- doCleanup();
- fType = SYMPTR_NS;
- fPtr.ns = ns;
-}
-
-void SymbolsWrapper::doCopyFrom(const SymbolsWrapper& other) {
- fType = other.fType;
- switch (fType) {
- case SYMPTR_NONE:
- // No action necessary
- break;
- case SYMPTR_DFS:
- // Memory allocation failures are exposed in copyErrorTo()
- if (other.fPtr.dfs != nullptr) {
- fPtr.dfs = new DecimalFormatSymbols(*other.fPtr.dfs);
- } else {
- fPtr.dfs = nullptr;
- }
- break;
- case SYMPTR_NS:
- // Memory allocation failures are exposed in copyErrorTo()
- if (other.fPtr.ns != nullptr) {
- fPtr.ns = new NumberingSystem(*other.fPtr.ns);
- } else {
- fPtr.ns = nullptr;
- }
- break;
- }
-}
-
-void SymbolsWrapper::doMoveFrom(SymbolsWrapper&& src) {
- fType = src.fType;
- switch (fType) {
- case SYMPTR_NONE:
- // No action necessary
- break;
- case SYMPTR_DFS:
- fPtr.dfs = src.fPtr.dfs;
- src.fPtr.dfs = nullptr;
- break;
- case SYMPTR_NS:
- fPtr.ns = src.fPtr.ns;
- src.fPtr.ns = nullptr;
- break;
- }
-}
-
-void SymbolsWrapper::doCleanup() {
- switch (fType) {
- case SYMPTR_NONE:
- // No action necessary
- break;
- case SYMPTR_DFS:
- delete fPtr.dfs;
- break;
- case SYMPTR_NS:
- delete fPtr.ns;
- break;
- }
-}
-
-bool SymbolsWrapper::isDecimalFormatSymbols() const {
- return fType == SYMPTR_DFS;
-}
-
-bool SymbolsWrapper::isNumberingSystem() const {
- return fType == SYMPTR_NS;
-}
-
-const DecimalFormatSymbols* SymbolsWrapper::getDecimalFormatSymbols() const {
- U_ASSERT(fType == SYMPTR_DFS);
- return fPtr.dfs;
-}
-
-const NumberingSystem* SymbolsWrapper::getNumberingSystem() const {
- U_ASSERT(fType == SYMPTR_NS);
- return fPtr.ns;
-}
-
-
FormattedNumber LocalizedNumberFormatter::formatInt(int64_t value, UErrorCode& status) const {
if (U_FAILURE(status)) { return FormattedNumber(U_ILLEGAL_ARGUMENT_ERROR); }
auto results = new UFormattedNumberData();
@@ -684,9 +599,9 @@ LocalizedNumberFormatter::formatDecimalQuantity(const DecimalQuantity& dq, UErro
void LocalizedNumberFormatter::formatImpl(impl::UFormattedNumberData* results, UErrorCode& status) const {
if (computeCompiled(status)) {
- fCompiled->format(results->quantity, results->getStringRef(), status);
+ fCompiled->format(results, status);
} else {
- NumberFormatterImpl::formatStatic(fMacros, results->quantity, results->getStringRef(), status);
+ NumberFormatterImpl::formatStatic(fMacros, results, status);
}
if (U_FAILURE(status)) {
return;
@@ -766,14 +681,11 @@ int32_t LocalizedNumberFormatter::getCallCount() const {
return umtx_loadAcquire(*callCount);
}
-Format* LocalizedNumberFormatter::toFormat(UErrorCode& status) const {
- if (U_FAILURE(status)) {
- return nullptr;
- }
- LocalPointer<LocalizedNumberFormatterAsFormat> retval(
- new LocalizedNumberFormatterAsFormat(*this, fMacros.locale), status);
- return retval.orphan();
-}
+// Note: toFormat defined in number_asformat.cpp
+#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
+// Warning 4661.
+#pragma warning(pop)
+#endif
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
index 2e2c4a9620c..9a9f3c8b71e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
@@ -24,60 +24,21 @@ using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
-namespace {
-
-struct CurrencyFormatInfoResult {
- bool exists;
- const char16_t* pattern;
- const char16_t* decimalSeparator;
- const char16_t* groupingSeparator;
-};
-
-CurrencyFormatInfoResult
-getCurrencyFormatInfo(const Locale& locale, const char* isoCode, UErrorCode& status) {
- // TODO: Load this data in a centralized location like ICU4J?
- // TODO: Move this into the CurrencySymbols class?
- // TODO: Parts of this same data are loaded in dcfmtsym.cpp; should clean up.
- CurrencyFormatInfoResult result = {false, nullptr, nullptr, nullptr};
- if (U_FAILURE(status)) { return result; }
- CharString key;
- key.append("Currencies/", status);
- key.append(isoCode, status);
- UErrorCode localStatus = status;
- LocalUResourceBundlePointer bundle(ures_open(U_ICUDATA_CURR, locale.getName(), &localStatus));
- ures_getByKeyWithFallback(bundle.getAlias(), key.data(), bundle.getAlias(), &localStatus);
- if (U_SUCCESS(localStatus) &&
- ures_getSize(bundle.getAlias()) > 2) { // the length is 3 if more data is present
- ures_getByIndex(bundle.getAlias(), 2, bundle.getAlias(), &localStatus);
- int32_t dummy;
- result.exists = true;
- result.pattern = ures_getStringByIndex(bundle.getAlias(), 0, &dummy, &localStatus);
- result.decimalSeparator = ures_getStringByIndex(bundle.getAlias(), 1, &dummy, &localStatus);
- result.groupingSeparator = ures_getStringByIndex(bundle.getAlias(), 2, &dummy, &localStatus);
- status = localStatus;
- } else if (localStatus != U_MISSING_RESOURCE_ERROR) {
- status = localStatus;
- }
- return result;
-}
-
-} // namespace
-
-
-MicroPropsGenerator::~MicroPropsGenerator() = default;
-
NumberFormatterImpl::NumberFormatterImpl(const MacroProps& macros, UErrorCode& status)
: NumberFormatterImpl(macros, true, status) {
}
-int32_t NumberFormatterImpl::formatStatic(const MacroProps& macros, DecimalQuantity& inValue,
- FormattedStringBuilder& outString, UErrorCode& status) {
+int32_t NumberFormatterImpl::formatStatic(const MacroProps &macros, UFormattedNumberData *results,
+ UErrorCode &status) {
+ DecimalQuantity &inValue = results->quantity;
+ FormattedStringBuilder &outString = results->getStringRef();
NumberFormatterImpl impl(macros, false, status);
MicroProps& micros = impl.preProcessUnsafe(inValue, status);
if (U_FAILURE(status)) { return 0; }
int32_t length = writeNumber(micros, inValue, outString, 0, status);
length += writeAffixes(micros, outString, 0, length, status);
+ results->outputUnit = std::move(micros.outputUnit);
return length;
}
@@ -93,13 +54,15 @@ int32_t NumberFormatterImpl::getPrefixSuffixStatic(const MacroProps& macros, Sig
// The "unsafe" method simply re-uses fMicros, eliminating the extra copy operation.
// See MicroProps::processQuantity() for details.
-int32_t NumberFormatterImpl::format(DecimalQuantity& inValue, FormattedStringBuilder& outString,
- UErrorCode& status) const {
+int32_t NumberFormatterImpl::format(UFormattedNumberData *results, UErrorCode &status) const {
+ DecimalQuantity &inValue = results->quantity;
+ FormattedStringBuilder &outString = results->getStringRef();
MicroProps micros;
preProcess(inValue, micros, status);
if (U_FAILURE(status)) { return 0; }
int32_t length = writeNumber(micros, inValue, outString, 0, status);
length += writeAffixes(micros, outString, 0, length, status);
+ results->outputUnit = std::move(micros.outputUnit);
return length;
}
@@ -111,7 +74,6 @@ void NumberFormatterImpl::preProcess(DecimalQuantity& inValue, MicroProps& micro
return;
}
fMicroPropsGenerator->processQuantity(inValue, microsOut, status);
- microsOut.rounder.apply(inValue, status);
microsOut.integerWidth.apply(inValue, status);
}
@@ -124,7 +86,6 @@ MicroProps& NumberFormatterImpl::preProcessUnsafe(DecimalQuantity& inValue, UErr
return fMicros; // must always return a value
}
fMicroPropsGenerator->processQuantity(inValue, fMicros, status);
- fMicros.rounder.apply(inValue, status);
fMicros.integerWidth.apply(inValue, status);
return fMicros;
}
@@ -171,9 +132,10 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
// Pre-compute a few values for efficiency.
bool isCurrency = utils::unitIsCurrency(macros.unit);
- bool isNoUnit = utils::unitIsNoUnit(macros.unit);
+ bool isBaseUnit = utils::unitIsBaseUnit(macros.unit);
bool isPercent = utils::unitIsPercent(macros.unit);
bool isPermille = utils::unitIsPermille(macros.unit);
+ bool isCompactNotation = macros.notation.fType == Notation::NTN_COMPACT;
bool isAccounting =
macros.sign == UNUM_SIGN_ACCOUNTING || macros.sign == UNUM_SIGN_ACCOUNTING_ALWAYS ||
macros.sign == UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO;
@@ -181,20 +143,24 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
if (isCurrency) {
currency = CurrencyUnit(macros.unit, status); // Restore CurrencyUnit from MeasureUnit
}
- const CurrencySymbols* currencySymbols;
- if (macros.currencySymbols != nullptr) {
- // Used by the DecimalFormat code path
- currencySymbols = macros.currencySymbols;
- } else {
- fWarehouse.fCurrencySymbols = {currency, macros.locale, status};
- currencySymbols = &fWarehouse.fCurrencySymbols;
- }
UNumberUnitWidth unitWidth = UNUM_UNIT_WIDTH_SHORT;
if (macros.unitWidth != UNUM_UNIT_WIDTH_COUNT) {
unitWidth = macros.unitWidth;
}
- bool isCldrUnit = !isCurrency && !isNoUnit &&
- (unitWidth == UNUM_UNIT_WIDTH_FULL_NAME || !(isPercent || isPermille));
+ // Use CLDR unit data for all MeasureUnits (not currency and not
+ // no-unit), except use the dedicated percent pattern for percent and
+ // permille. However, use the CLDR unit data for percent/permille if a
+ // long name was requested OR if compact notation is being used, since
+ // compact notation overrides the middle modifier (micros.modMiddle)
+ // normally used for the percent pattern.
+ bool isCldrUnit = !isCurrency
+ && !isBaseUnit
+ && (unitWidth == UNUM_UNIT_WIDTH_FULL_NAME
+ || !(isPercent || isPermille)
+ || isCompactNotation
+ );
+ bool isMixedUnit = isCldrUnit && (uprv_strcmp(macros.unit.getType(), "") == 0) &&
+ macros.unit.getComplexity(status) == UMEASURE_UNIT_MIXED;
// Select the numbering system.
LocalPointer<const NumberingSystem> nsLocal;
@@ -215,41 +181,26 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
if (macros.symbols.isDecimalFormatSymbols()) {
fMicros.symbols = macros.symbols.getDecimalFormatSymbols();
} else {
- auto newSymbols = new DecimalFormatSymbols(macros.locale, *ns, status);
- if (newSymbols == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
+ LocalPointer<DecimalFormatSymbols> newSymbols(
+ new DecimalFormatSymbols(macros.locale, *ns, status), status);
+ if (U_FAILURE(status)) {
return nullptr;
}
- fMicros.symbols = newSymbols;
- // Give ownership to the NumberFormatterImpl.
- fSymbols.adoptInstead(fMicros.symbols);
+ if (isCurrency) {
+ newSymbols->setCurrency(currency.getISOCurrency(), status);
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ }
+ fMicros.symbols = newSymbols.getAlias();
+ fSymbols.adoptInstead(newSymbols.orphan());
}
// Load and parse the pattern string. It is used for grouping sizes and affixes only.
// If we are formatting currency, check for a currency-specific pattern.
const char16_t* pattern = nullptr;
- if (isCurrency) {
- CurrencyFormatInfoResult info = getCurrencyFormatInfo(
- macros.locale, currency.getSubtype(), status);
- if (info.exists) {
- pattern = info.pattern;
- // It's clunky to clone an object here, but this code is not frequently executed.
- auto symbols = new DecimalFormatSymbols(*fMicros.symbols);
- if (symbols == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return nullptr;
- }
- fMicros.symbols = symbols;
- fSymbols.adoptInstead(symbols);
- symbols->setSymbol(
- DecimalFormatSymbols::ENumberFormatSymbol::kMonetarySeparatorSymbol,
- UnicodeString(info.decimalSeparator),
- FALSE);
- symbols->setSymbol(
- DecimalFormatSymbols::ENumberFormatSymbol::kMonetaryGroupingSeparatorSymbol,
- UnicodeString(info.groupingSeparator),
- FALSE);
- }
+ if (isCurrency && fMicros.symbols->getCurrencyPattern() != nullptr) {
+ pattern = fMicros.symbols->getCurrencyPattern();
}
if (pattern == nullptr) {
CldrPatternStyle patternStyle;
@@ -267,6 +218,9 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
patternStyle = CLDR_PATTERN_STYLE_CURRENCY;
}
pattern = utils::getPatternForStyle(macros.locale, nsName, patternStyle, status);
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
}
auto patternInfo = new ParsedPatternInfo();
if (patternInfo == nullptr) {
@@ -275,11 +229,35 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
}
fPatternInfo.adoptInstead(patternInfo);
PatternParser::parseToPatternInfo(UnicodeString(pattern), *patternInfo, status);
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
/////////////////////////////////////////////////////////////////////////////////////
/// START POPULATING THE DEFAULT MICROPROPS AND BUILDING THE MICROPROPS GENERATOR ///
/////////////////////////////////////////////////////////////////////////////////////
+ // Unit Preferences and Conversions as our first step
+ if (macros.usage.isSet()) {
+ if (!isCldrUnit) {
+ // We only support "usage" when the input unit is specified, and is
+ // a CLDR Unit.
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return nullptr;
+ }
+ auto usagePrefsHandler =
+ new UsagePrefsHandler(macros.locale, macros.unit, macros.usage.fUsage, chain, status);
+ fUsagePrefsHandler.adoptInsteadAndCheckErrorCode(usagePrefsHandler, status);
+ chain = fUsagePrefsHandler.getAlias();
+ } else if (isMixedUnit) {
+ MeasureUnitImpl temp;
+ const MeasureUnitImpl &outputUnit = MeasureUnitImpl::forMeasureUnit(macros.unit, temp, status);
+ auto unitConversionHandler =
+ new UnitConversionHandler(outputUnit.units[0]->build(status), macros.unit, chain, status);
+ fUnitConversionHandler.adoptInsteadAndCheckErrorCode(unitConversionHandler, status);
+ chain = fUnitConversionHandler.getAlias();
+ }
+
// Multiplier
if (macros.scale.isValid()) {
fMicros.helpers.multiplier.setAndChain(macros.scale, chain);
@@ -290,26 +268,27 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
Precision precision;
if (!macros.precision.isBogus()) {
precision = macros.precision;
- } else if (macros.notation.fType == Notation::NTN_COMPACT) {
+ } else if (isCompactNotation) {
precision = Precision::integer().withMinDigits(2);
} else if (isCurrency) {
precision = Precision::currency(UCURR_USAGE_STANDARD);
+ } else if (macros.usage.isSet()) {
+ // Bogus Precision - it will get set in the UsagePrefsHandler instead
+ precision = Precision();
} else {
precision = Precision::maxFraction(6);
}
UNumberFormatRoundingMode roundingMode;
- if (macros.roundingMode != kDefaultMode) {
- roundingMode = macros.roundingMode;
- } else {
- // Temporary until ICU 64
- roundingMode = precision.fRoundingMode;
- }
+ roundingMode = macros.roundingMode;
fMicros.rounder = {precision, roundingMode, currency, status};
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
// Grouping strategy
if (!macros.grouper.isBogus()) {
fMicros.grouping = macros.grouper;
- } else if (macros.notation.fType == Notation::NTN_COMPACT) {
+ } else if (isCompactNotation) {
// Compact notation uses minGrouping by default since ICU 59
fMicros.grouping = Grouper::forStrategy(UNUM_GROUPING_MIN2);
} else {
@@ -372,55 +351,67 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
patternModifier->setPatternInfo(
macros.affixProvider != nullptr ? macros.affixProvider
: static_cast<const AffixPatternProvider*>(fPatternInfo.getAlias()),
- UNUM_FIELD_COUNT);
+ kUndefinedField);
patternModifier->setPatternAttributes(fMicros.sign, isPermille);
if (patternModifier->needsPlurals()) {
patternModifier->setSymbols(
fMicros.symbols,
- currencySymbols,
+ currency,
unitWidth,
- resolvePluralRules(macros.rules, macros.locale, status));
+ resolvePluralRules(macros.rules, macros.locale, status),
+ status);
} else {
- patternModifier->setSymbols(fMicros.symbols, currencySymbols, unitWidth, nullptr);
+ patternModifier->setSymbols(fMicros.symbols, currency, unitWidth, nullptr, status);
}
if (safe) {
- fImmutablePatternModifier.adoptInstead(patternModifier->createImmutableAndChain(chain, status));
- chain = fImmutablePatternModifier.getAlias();
- } else {
- patternModifier->addToChain(chain);
- chain = patternModifier;
+ fImmutablePatternModifier.adoptInsteadAndCheckErrorCode(patternModifier->createImmutable(status),
+ status);
+ }
+ if (U_FAILURE(status)) {
+ return nullptr;
}
// Outer modifier (CLDR units and currency long names)
if (isCldrUnit) {
- fLongNameHandler.adoptInstead(
- LongNameHandler::forMeasureUnit(
- macros.locale,
- macros.unit,
- macros.perUnit,
- unitWidth,
- resolvePluralRules(macros.rules, macros.locale, status),
- chain,
- status));
- chain = fLongNameHandler.getAlias();
+ if (macros.usage.isSet()) {
+ fLongNameMultiplexer.adoptInsteadAndCheckErrorCode(
+ LongNameMultiplexer::forMeasureUnits(
+ macros.locale, *fUsagePrefsHandler->getOutputUnits(), unitWidth,
+ resolvePluralRules(macros.rules, macros.locale, status), chain, status),
+ status);
+ chain = fLongNameMultiplexer.getAlias();
+ } else if (isMixedUnit) {
+ fMixedUnitLongNameHandler.adoptInsteadAndCheckErrorCode(new MixedUnitLongNameHandler(),
+ status);
+ MixedUnitLongNameHandler::forMeasureUnit(
+ macros.locale, macros.unit, unitWidth,
+ resolvePluralRules(macros.rules, macros.locale, status), chain,
+ fMixedUnitLongNameHandler.getAlias(), status);
+ chain = fMixedUnitLongNameHandler.getAlias();
+ } else {
+ fLongNameHandler.adoptInsteadAndCheckErrorCode(new LongNameHandler(), status);
+ LongNameHandler::forMeasureUnit(macros.locale, macros.unit, macros.perUnit, unitWidth,
+ resolvePluralRules(macros.rules, macros.locale, status),
+ chain, fLongNameHandler.getAlias(), status);
+ chain = fLongNameHandler.getAlias();
+ }
} else if (isCurrency && unitWidth == UNUM_UNIT_WIDTH_FULL_NAME) {
- fLongNameHandler.adoptInstead(
- LongNameHandler::forCurrencyLongNames(
- macros.locale,
- currency,
- resolvePluralRules(macros.rules, macros.locale, status),
- chain,
- status));
+ fLongNameHandler.adoptInsteadAndCheckErrorCode(
+ LongNameHandler::forCurrencyLongNames(
+ macros.locale, currency, resolvePluralRules(macros.rules, macros.locale, status), chain,
+ status),
+ status);
chain = fLongNameHandler.getAlias();
} else {
// No outer modifier required
fMicros.modOuter = &fMicros.helpers.emptyWeakModifier;
}
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
// Compact notation
- // NOTE: Compact notation can (but might not) override the middle modifier and rounding.
- // It therefore needs to go at the end of the chain.
- if (macros.notation.fType == Notation::NTN_COMPACT) {
+ if (isCompactNotation) {
CompactType compactType = (isCurrency && unitWidth != UNUM_UNIT_WIDTH_FULL_NAME)
? CompactType::TYPE_CURRENCY : CompactType::TYPE_DECIMAL;
auto newCompactHandler = new CompactHandler(
@@ -429,9 +420,13 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
nsName,
compactType,
resolvePluralRules(macros.rules, macros.locale, status),
- safe ? patternModifier : nullptr,
+ patternModifier,
+ safe,
chain,
status);
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
if (newCompactHandler == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
@@ -439,6 +434,18 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
fCompactHandler.adoptInstead(newCompactHandler);
chain = fCompactHandler.getAlias();
}
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+
+ // Always add the pattern modifier as the last element of the chain.
+ if (safe) {
+ fImmutablePatternModifier->addToChain(chain);
+ chain = fImmutablePatternModifier.getAlias();
+ } else {
+ patternModifier->addToChain(chain);
+ chain = patternModifier;
+ }
return chain;
}
@@ -458,6 +465,7 @@ NumberFormatterImpl::resolvePluralRules(const PluralRules* rulesPtr, const Local
int32_t NumberFormatterImpl::writeAffixes(const MicroProps& micros, FormattedStringBuilder& string,
int32_t start, int32_t end, UErrorCode& status) {
+ U_ASSERT(micros.modOuter != nullptr);
// Always apply the inner modifier (which is "strong").
int32_t length = micros.modInner->apply(string, start, end, status);
if (micros.padding.isValid()) {
@@ -478,14 +486,14 @@ int32_t NumberFormatterImpl::writeNumber(const MicroProps& micros, DecimalQuanti
length += string.insert(
length + index,
micros.symbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kInfinitySymbol),
- UNUM_INTEGER_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD},
status);
} else if (quantity.isNaN()) {
length += string.insert(
length + index,
micros.symbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kNaNSymbol),
- UNUM_INTEGER_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD},
status);
} else {
@@ -501,12 +509,23 @@ int32_t NumberFormatterImpl::writeNumber(const MicroProps& micros, DecimalQuanti
.symbols
->getSymbol(
DecimalFormatSymbols::ENumberFormatSymbol::kDecimalSeparatorSymbol),
- UNUM_DECIMAL_SEPARATOR_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_DECIMAL_SEPARATOR_FIELD},
status);
}
// Add the fraction digits
length += writeFractionDigits(micros, quantity, string, length + index, status);
+
+ if (length == 0) {
+ // Force output of the digit for value 0
+ length += utils::insertDigitFromSymbols(
+ string,
+ index,
+ 0,
+ *micros.symbols,
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD},
+ status);
+ }
}
return length;
@@ -526,14 +545,20 @@ int32_t NumberFormatterImpl::writeIntegerDigits(const MicroProps& micros, Decima
DecimalFormatSymbols::ENumberFormatSymbol::kMonetaryGroupingSeparatorSymbol)
: micros.symbols->getSymbol(
DecimalFormatSymbols::ENumberFormatSymbol::kGroupingSeparatorSymbol),
- UNUM_GROUPING_SEPARATOR_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD},
status);
}
// Get and append the next digit value
int8_t nextDigit = quantity.getDigit(i);
length += utils::insertDigitFromSymbols(
- string, index, nextDigit, *micros.symbols, UNUM_INTEGER_FIELD, status);
+ string,
+ index,
+ nextDigit,
+ *micros.symbols,
+ {UFIELD_CATEGORY_NUMBER,
+ UNUM_INTEGER_FIELD},
+ status);
}
return length;
}
@@ -547,7 +572,12 @@ int32_t NumberFormatterImpl::writeFractionDigits(const MicroProps& micros, Decim
// Get and append the next digit value
int8_t nextDigit = quantity.getDigit(-i - 1);
length += utils::insertDigitFromSymbols(
- string, length + index, nextDigit, *micros.symbols, UNUM_FRACTION_FIELD, status);
+ string,
+ length + index,
+ nextDigit,
+ *micros.symbols,
+ {UFIELD_CATEGORY_NUMBER, UNUM_FRACTION_FIELD},
+ status);
}
return length;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
index 206c5f58c57..5cd549e54a3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
@@ -10,11 +10,13 @@
#include "number_types.h"
#include "formatted_string_builder.h"
#include "number_patternstring.h"
+#include "number_usageprefs.h"
#include "number_utils.h"
#include "number_patternmodifier.h"
#include "number_longnames.h"
#include "number_compact.h"
#include "number_microprops.h"
+#include "number_utypes.h"
U_NAMESPACE_BEGIN namespace number {
namespace impl {
@@ -34,9 +36,8 @@ class NumberFormatterImpl : public UMemory {
/**
* Builds and evaluates an "unsafe" MicroPropsGenerator, which is cheaper but can be used only once.
*/
- static int32_t
- formatStatic(const MacroProps &macros, DecimalQuantity &inValue, FormattedStringBuilder &outString,
- UErrorCode &status);
+ static int32_t formatStatic(const MacroProps &macros, UFormattedNumberData *results,
+ UErrorCode &status);
/**
* Prints only the prefix and suffix; used for DecimalFormat getters.
@@ -51,7 +52,7 @@ class NumberFormatterImpl : public UMemory {
/**
* Evaluates the "safe" MicroPropsGenerator created by "fromMacros".
*/
- int32_t format(DecimalQuantity& inValue, FormattedStringBuilder& outString, UErrorCode& status) const;
+ int32_t format(UFormattedNumberData *results, UErrorCode &status) const;
/**
* Like format(), but saves the result into an output MicroProps without additional processing.
@@ -82,7 +83,9 @@ class NumberFormatterImpl : public UMemory {
int32_t end, UErrorCode& status);
private:
- // Head of the MicroPropsGenerator linked list:
+ // Head of the MicroPropsGenerator linked list. Subclasses' processQuantity
+ // methods process this list in a parent-first order, such that the last
+ // item added, which this points to, typically has its logic executed last.
const MicroPropsGenerator *fMicroPropsGenerator = nullptr;
// Tail of the list:
@@ -90,13 +93,20 @@ class NumberFormatterImpl : public UMemory {
// Other fields possibly used by the number formatting pipeline:
// TODO: Convert more of these LocalPointers to value objects to reduce the number of news?
+ LocalPointer<const UsagePrefsHandler> fUsagePrefsHandler;
+ LocalPointer<const UnitConversionHandler> fUnitConversionHandler;
LocalPointer<const DecimalFormatSymbols> fSymbols;
LocalPointer<const PluralRules> fRules;
LocalPointer<const ParsedPatternInfo> fPatternInfo;
LocalPointer<const ScientificHandler> fScientificHandler;
LocalPointer<MutablePatternModifier> fPatternModifier;
- LocalPointer<const ImmutablePatternModifier> fImmutablePatternModifier;
- LocalPointer<const LongNameHandler> fLongNameHandler;
+ LocalPointer<ImmutablePatternModifier> fImmutablePatternModifier;
+ LocalPointer<LongNameHandler> fLongNameHandler;
+ // TODO: use a common base class that enables fLongNameHandler,
+ // fLongNameMultiplexer, and fMixedUnitLongNameHandler to be merged into one
+ // member?
+ LocalPointer<MixedUnitLongNameHandler> fMixedUnitLongNameHandler;
+ LocalPointer<const LongNameMultiplexer> fLongNameMultiplexer;
LocalPointer<const CompactHandler> fCompactHandler;
// Value objects possibly used by the number formatting pipeline:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
index 41f727a458f..6b1642cfd34 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
@@ -64,6 +64,13 @@ Grouper Grouper::forProperties(const DecimalFormatProperties& properties) {
}
void Grouper::setLocaleData(const impl::ParsedPatternInfo &patternInfo, const Locale& locale) {
+ if (fMinGrouping == -2) {
+ fMinGrouping = getMinGroupingForLocale(locale);
+ } else if (fMinGrouping == -3) {
+ fMinGrouping = static_cast<int16_t>(uprv_max(2, getMinGroupingForLocale(locale)));
+ } else {
+ // leave fMinGrouping alone
+ }
if (fGrouping1 != -2 && fGrouping2 != -4) {
return;
}
@@ -76,13 +83,6 @@ void Grouper::setLocaleData(const impl::ParsedPatternInfo &patternInfo, const Lo
if (grouping3 == -1) {
grouping2 = grouping1;
}
- if (fMinGrouping == -2) {
- fMinGrouping = getMinGroupingForLocale(locale);
- } else if (fMinGrouping == -3) {
- fMinGrouping = static_cast<int16_t>(uprv_max(2, getMinGroupingForLocale(locale)));
- } else {
- // leave fMinGrouping alone
- }
fGrouping1 = grouping1;
fGrouping2 = grouping2;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp
index d62aef444dc..10b853423c8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp
@@ -40,6 +40,9 @@ IntegerWidth IntegerWidth::truncateAt(int32_t maxInt) {
}
void IntegerWidth::apply(impl::DecimalQuantity& quantity, UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return;
+ }
if (fHasError) {
status = U_ILLEGAL_ARGUMENT_ERROR;
} else if (fUnion.minMaxInt.fMaxInt == -1) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
index 817aa0e0d9c..3891d532dea 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
@@ -10,6 +10,7 @@
#include "ureslocs.h"
#include "charstr.h"
#include "uresimp.h"
+#include "measunit_impl.h"
#include "number_longnames.h"
#include "number_microprops.h"
#include <algorithm>
@@ -22,8 +23,23 @@ using namespace icu::number::impl;
namespace {
+/**
+ * Display Name (this format has no placeholder).
+ *
+ * Used as an index into the LongNameHandler::simpleFormats array. Units
+ * resources cover the normal set of PluralRules keys, as well as `dnam` and
+ * `per` forms.
+ */
constexpr int32_t DNAM_INDEX = StandardPlural::Form::COUNT;
+/**
+ * "per" form (e.g. "{0} per day" is day's "per" form).
+ *
+ * Used as an index into the LongNameHandler::simpleFormats array. Units
+ * resources cover the normal set of PluralRules keys, as well as `dnam` and
+ * `per` forms.
+ */
constexpr int32_t PER_INDEX = StandardPlural::Form::COUNT + 1;
+// Number of keys in the array populated by PluralTableSink.
constexpr int32_t ARRAY_LENGTH = StandardPlural::Form::COUNT + 2;
static int32_t getIndex(const char* pluralKeyword, UErrorCode& status) {
@@ -38,6 +54,11 @@ static int32_t getIndex(const char* pluralKeyword, UErrorCode& status) {
}
}
+// Selects a string out of the `strings` array which corresponds to the
+// specified plural form, with fallback to the OTHER form.
+//
+// The `strings` array must have ARRAY_LENGTH items: one corresponding to each
+// of the plural forms, plus a display name ("dnam") and a "per" form.
static UnicodeString getWithPlural(
const UnicodeString* strings,
StandardPlural::Form plural,
@@ -87,6 +108,18 @@ class PluralTableSink : public ResourceSink {
// NOTE: outArray MUST have room for all StandardPlural values. No bounds checking is performed.
+/**
+ * Populates outArray with `locale`-specific values for `unit` through use of
+ * PluralTableSink. Only the set of basic units are supported!
+ *
+ * Reading from resources *unitsNarrow* and *unitsShort* (for width
+ * UNUM_UNIT_WIDTH_NARROW), or just *unitsShort* (for width
+ * UNUM_UNIT_WIDTH_SHORT). For other widths, it reads just "units".
+ *
+ * @param unit must have a type and subtype (i.e. it must be a unit listed in
+ * gTypes and gSubTypes in measunit.cpp).
+ * @param outArray must be of fixed length ARRAY_LENGTH.
+ */
void getMeasureData(const Locale &locale, const MeasureUnit &unit, const UNumberUnitWidth &width,
UnicodeString *outArray, UErrorCode &status) {
PluralTableSink sink(outArray);
@@ -184,71 +217,107 @@ UnicodeString getPerUnitFormat(const Locale& locale, const UNumberUnitWidth &wid
} // namespace
-LongNameHandler*
-LongNameHandler::forMeasureUnit(const Locale &loc, const MeasureUnit &unitRef, const MeasureUnit &perUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, UErrorCode &status) {
+void LongNameHandler::forMeasureUnit(const Locale &loc, const MeasureUnit &unitRef,
+ const MeasureUnit &perUnit, const UNumberUnitWidth &width,
+ const PluralRules *rules, const MicroPropsGenerator *parent,
+ LongNameHandler *fillIn, UErrorCode &status) {
+ // Not valid for mixed units that aren't built-in units, and there should
+ // not be any built-in mixed units!
+ U_ASSERT(uprv_strcmp(unitRef.getType(), "") != 0 ||
+ unitRef.getComplexity(status) != UMEASURE_UNIT_MIXED);
+ U_ASSERT(fillIn != nullptr);
+
MeasureUnit unit = unitRef;
if (uprv_strcmp(perUnit.getType(), "none") != 0) {
// Compound unit: first try to simplify (e.g., meters per second is its own unit).
- bool isResolved = false;
- MeasureUnit resolved = MeasureUnit::resolveUnitPerUnit(unit, perUnit, &isResolved);
- if (isResolved) {
- unit = resolved;
+ MeasureUnit simplified = unit.product(perUnit.reciprocal(status), status);
+ if (uprv_strcmp(simplified.getType(), "") != 0) {
+ unit = simplified;
} else {
// No simplified form is available.
- return forCompoundUnit(loc, unit, perUnit, width, rules, parent, status);
+ forCompoundUnit(loc, unit, perUnit, width, rules, parent, fillIn, status);
+ return;
}
}
- auto* result = new LongNameHandler(rules, parent);
- if (result == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return nullptr;
+ if (uprv_strcmp(unit.getType(), "") == 0) {
+ // TODO(ICU-20941): Unsanctioned unit. Not yet fully supported. Set an
+ // error code. Once we support not-built-in units here, unitRef may be
+ // anything, but if not built-in, perUnit has to be "none".
+ status = U_UNSUPPORTED_ERROR;
+ return;
}
+
UnicodeString simpleFormats[ARRAY_LENGTH];
getMeasureData(loc, unit, width, simpleFormats, status);
- if (U_FAILURE(status)) { return result; }
- result->simpleFormatsToModifiers(simpleFormats, UNUM_MEASURE_UNIT_FIELD, status);
- return result;
+ if (U_FAILURE(status)) {
+ return;
+ }
+ fillIn->rules = rules;
+ fillIn->parent = parent;
+ fillIn->simpleFormatsToModifiers(simpleFormats, {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD},
+ status);
}
-LongNameHandler*
-LongNameHandler::forCompoundUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, UErrorCode &status) {
- auto* result = new LongNameHandler(rules, parent);
- if (result == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return nullptr;
+void LongNameHandler::forCompoundUnit(const Locale &loc, const MeasureUnit &unit,
+ const MeasureUnit &perUnit, const UNumberUnitWidth &width,
+ const PluralRules *rules, const MicroPropsGenerator *parent,
+ LongNameHandler *fillIn, UErrorCode &status) {
+ if (uprv_strcmp(unit.getType(), "") == 0 || uprv_strcmp(perUnit.getType(), "") == 0) {
+ // TODO(ICU-20941): Unsanctioned unit. Not yet fully supported. Set an
+ // error code. Once we support not-built-in units here, unitRef may be
+ // anything, but if not built-in, perUnit has to be "none".
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
+ if (fillIn == nullptr) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return;
}
UnicodeString primaryData[ARRAY_LENGTH];
getMeasureData(loc, unit, width, primaryData, status);
- if (U_FAILURE(status)) { return result; }
+ if (U_FAILURE(status)) {
+ return;
+ }
UnicodeString secondaryData[ARRAY_LENGTH];
getMeasureData(loc, perUnit, width, secondaryData, status);
- if (U_FAILURE(status)) { return result; }
+ if (U_FAILURE(status)) {
+ return;
+ }
UnicodeString perUnitFormat;
if (!secondaryData[PER_INDEX].isBogus()) {
perUnitFormat = secondaryData[PER_INDEX];
} else {
UnicodeString rawPerUnitFormat = getPerUnitFormat(loc, width, status);
- if (U_FAILURE(status)) { return result; }
+ if (U_FAILURE(status)) {
+ return;
+ }
// rawPerUnitFormat is something like "{0}/{1}"; we need to substitute in the secondary unit.
SimpleFormatter compiled(rawPerUnitFormat, 2, 2, status);
- if (U_FAILURE(status)) { return result; }
+ if (U_FAILURE(status)) {
+ return;
+ }
UnicodeString secondaryFormat = getWithPlural(secondaryData, StandardPlural::Form::ONE, status);
- if (U_FAILURE(status)) { return result; }
- SimpleFormatter secondaryCompiled(secondaryFormat, 1, 1, status);
- if (U_FAILURE(status)) { return result; }
+ if (U_FAILURE(status)) {
+ return;
+ }
+ // Some "one" pattern may not contain "{0}". For example in "ar" or "ne" locale.
+ SimpleFormatter secondaryCompiled(secondaryFormat, 0, 1, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
UnicodeString secondaryString = secondaryCompiled.getTextWithNoArguments().trim();
// TODO: Why does UnicodeString need to be explicit in the following line?
compiled.format(UnicodeString(u"{0}"), secondaryString, perUnitFormat, status);
- if (U_FAILURE(status)) { return result; }
+ if (U_FAILURE(status)) {
+ return;
+ }
}
- result->multiSimpleFormatsToModifiers(primaryData, perUnitFormat, UNUM_MEASURE_UNIT_FIELD, status);
- return result;
+ fillIn->rules = rules;
+ fillIn->parent = parent;
+ fillIn->multiSimpleFormatsToModifiers(primaryData, perUnitFormat,
+ {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD}, status);
}
UnicodeString LongNameHandler::getUnitDisplayName(
@@ -296,7 +365,7 @@ LongNameHandler* LongNameHandler::forCurrencyLongNames(const Locale &loc, const
UnicodeString simpleFormats[ARRAY_LENGTH];
getCurrencyLongNameData(loc, currency, simpleFormats, status);
if (U_FAILURE(status)) { return nullptr; }
- result->simpleFormatsToModifiers(simpleFormats, UNUM_CURRENCY_FIELD, status);
+ result->simpleFormatsToModifiers(simpleFormats, {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
return result;
}
@@ -308,7 +377,7 @@ void LongNameHandler::simpleFormatsToModifiers(const UnicodeString *simpleFormat
if (U_FAILURE(status)) { return; }
SimpleFormatter compiledFormatter(simpleFormat, 0, 1, status);
if (U_FAILURE(status)) { return; }
- fModifiers[i] = SimpleModifier(compiledFormatter, field, false, {this, SIGNUM_ZERO, plural});
+ fModifiers[i] = SimpleModifier(compiledFormatter, field, false, {this, SIGNUM_POS_ZERO, plural});
}
}
@@ -325,13 +394,15 @@ void LongNameHandler::multiSimpleFormatsToModifiers(const UnicodeString *leadFor
if (U_FAILURE(status)) { return; }
SimpleFormatter compoundCompiled(compoundFormat, 0, 1, status);
if (U_FAILURE(status)) { return; }
- fModifiers[i] = SimpleModifier(compoundCompiled, field, false, {this, SIGNUM_ZERO, plural});
+ fModifiers[i] = SimpleModifier(compoundCompiled, field, false, {this, SIGNUM_POS_ZERO, plural});
}
}
void LongNameHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
UErrorCode &status) const {
- parent->processQuantity(quantity, micros, status);
+ if (parent != NULL) {
+ parent->processQuantity(quantity, micros, status);
+ }
StandardPlural::Form pluralForm = utils::getPluralSafe(micros.rounder, rules, quantity, status);
micros.modOuter = &fModifiers[pluralForm];
}
@@ -340,4 +411,199 @@ const Modifier* LongNameHandler::getModifier(Signum /*signum*/, StandardPlural::
return &fModifiers[plural];
}
+void MixedUnitLongNameHandler::forMeasureUnit(const Locale &loc, const MeasureUnit &mixedUnit,
+ const UNumberUnitWidth &width, const PluralRules *rules,
+ const MicroPropsGenerator *parent,
+ MixedUnitLongNameHandler *fillIn, UErrorCode &status) {
+ U_ASSERT(mixedUnit.getComplexity(status) == UMEASURE_UNIT_MIXED);
+ U_ASSERT(fillIn != nullptr);
+
+ MeasureUnitImpl temp;
+ const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(mixedUnit, temp, status);
+ fillIn->fMixedUnitCount = impl.units.length();
+ fillIn->fMixedUnitData.adoptInstead(new UnicodeString[fillIn->fMixedUnitCount * ARRAY_LENGTH]);
+ for (int32_t i = 0; i < fillIn->fMixedUnitCount; i++) {
+ // Grab data for each of the components.
+ UnicodeString *unitData = &fillIn->fMixedUnitData[i * ARRAY_LENGTH];
+ getMeasureData(loc, impl.units[i]->build(status), width, unitData, status);
+ }
+
+ UListFormatterWidth listWidth = ULISTFMT_WIDTH_SHORT;
+ if (width == UNUM_UNIT_WIDTH_NARROW) {
+ listWidth = ULISTFMT_WIDTH_NARROW;
+ } else if (width == UNUM_UNIT_WIDTH_FULL_NAME) {
+ // This might be the same as SHORT in most languages:
+ listWidth = ULISTFMT_WIDTH_WIDE;
+ }
+ fillIn->fListFormatter.adoptInsteadAndCheckErrorCode(
+ ListFormatter::createInstance(loc, ULISTFMT_TYPE_UNITS, listWidth, status), status);
+ fillIn->rules = rules;
+ fillIn->parent = parent;
+
+ // We need a localised NumberFormatter for the integers of the bigger units
+ // (providing Arabic numerals, for example).
+ fillIn->fIntegerFormatter = NumberFormatter::withLocale(loc);
+}
+
+void MixedUnitLongNameHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const {
+ U_ASSERT(fMixedUnitCount > 1);
+ if (parent != nullptr) {
+ parent->processQuantity(quantity, micros, status);
+ }
+ micros.modOuter = getMixedUnitModifier(quantity, micros, status);
+}
+
+const Modifier *MixedUnitLongNameHandler::getMixedUnitModifier(DecimalQuantity &quantity,
+ MicroProps &micros,
+ UErrorCode &status) const {
+ if (micros.mixedMeasuresCount == 0) {
+ U_ASSERT(micros.mixedMeasuresCount > 0); // Mixed unit: we must have more than one unit value
+ status = U_UNSUPPORTED_ERROR;
+ return &micros.helpers.emptyWeakModifier;
+ }
+ // If we don't have at least one mixedMeasure, the LongNameHandler would be
+ // sufficient and we shouldn't be running MixedUnitLongNameHandler code:
+ U_ASSERT(micros.mixedMeasuresCount > 0);
+ // mixedMeasures does not contain the last value:
+ U_ASSERT(fMixedUnitCount == micros.mixedMeasuresCount + 1);
+ U_ASSERT(fListFormatter.isValid());
+
+ // Algorithm:
+ //
+ // For the mixed-units measurement of: "3 yard, 1 foot, 2.6 inch", we should
+ // find "3 yard" and "1 foot" in micros.mixedMeasures.
+ //
+ // Obtain long-names with plural forms corresponding to measure values:
+ // * {0} yards, {0} foot, {0} inches
+ //
+ // Format the integer values appropriately and modify with the format
+ // strings:
+ // - 3 yards, 1 foot
+ //
+ // Use ListFormatter to combine, with one placeholder:
+ // - 3 yards, 1 foot and {0} inches
+ //
+ // Return a SimpleModifier for this pattern, letting the rest of the
+ // pipeline take care of the remaining inches.
+
+ LocalArray<UnicodeString> outputMeasuresList(new UnicodeString[fMixedUnitCount], status);
+ if (U_FAILURE(status)) {
+ return &micros.helpers.emptyWeakModifier;
+ }
+
+ for (int32_t i = 0; i < micros.mixedMeasuresCount; i++) {
+ DecimalQuantity fdec;
+ fdec.setToLong(micros.mixedMeasures[i]);
+ if (i > 0 && fdec.isNegative()) {
+ // If numbers are negative, only the first number needs to have its
+ // negative sign formatted.
+ fdec.negate();
+ }
+ StandardPlural::Form pluralForm = utils::getStandardPlural(rules, fdec);
+
+ UnicodeString simpleFormat =
+ getWithPlural(&fMixedUnitData[i * ARRAY_LENGTH], pluralForm, status);
+ SimpleFormatter compiledFormatter(simpleFormat, 0, 1, status);
+
+ UnicodeString num;
+ auto appendable = UnicodeStringAppendable(num);
+ fIntegerFormatter.formatDecimalQuantity(fdec, status).appendTo(appendable, status);
+ compiledFormatter.format(num, outputMeasuresList[i], status);
+ // TODO(icu-units#67): fix field positions
+ }
+
+ // Reiterated: we have at least one mixedMeasure:
+ U_ASSERT(micros.mixedMeasuresCount > 0);
+ // Thus if negative, a negative has already been formatted:
+ if (quantity.isNegative()) {
+ quantity.negate();
+ }
+
+ UnicodeString *finalSimpleFormats = &fMixedUnitData[(fMixedUnitCount - 1) * ARRAY_LENGTH];
+ StandardPlural::Form finalPlural = utils::getPluralSafe(micros.rounder, rules, quantity, status);
+ UnicodeString finalSimpleFormat = getWithPlural(finalSimpleFormats, finalPlural, status);
+ SimpleFormatter finalFormatter(finalSimpleFormat, 0, 1, status);
+ finalFormatter.format(UnicodeString(u"{0}"), outputMeasuresList[fMixedUnitCount - 1], status);
+
+ // Combine list into a "premixed" pattern
+ UnicodeString premixedFormatPattern;
+ fListFormatter->format(outputMeasuresList.getAlias(), fMixedUnitCount, premixedFormatPattern,
+ status);
+ SimpleFormatter premixedCompiled(premixedFormatPattern, 0, 1, status);
+ if (U_FAILURE(status)) {
+ return &micros.helpers.emptyWeakModifier;
+ }
+
+ // TODO(icu-units#67): fix field positions
+ // Return a SimpleModifier for the "premixed" pattern
+ micros.helpers.mixedUnitModifier =
+ SimpleModifier(premixedCompiled, kUndefinedField, false, {this, SIGNUM_POS_ZERO, finalPlural});
+ return &micros.helpers.mixedUnitModifier;
+}
+
+const Modifier *MixedUnitLongNameHandler::getModifier(Signum /*signum*/,
+ StandardPlural::Form /*plural*/) const {
+ // TODO(units): investigate this method when investigating where
+ // LongNameHandler::getModifier() gets used. To be sure it remains
+ // unreachable:
+ UPRV_UNREACHABLE;
+ return nullptr;
+}
+
+LongNameMultiplexer *
+LongNameMultiplexer::forMeasureUnits(const Locale &loc, const MaybeStackVector<MeasureUnit> &units,
+ const UNumberUnitWidth &width, const PluralRules *rules,
+ const MicroPropsGenerator *parent, UErrorCode &status) {
+ LocalPointer<LongNameMultiplexer> result(new LongNameMultiplexer(parent), status);
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ U_ASSERT(units.length() > 0);
+ if (result->fHandlers.resize(units.length()) == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return nullptr;
+ }
+ result->fMeasureUnits.adoptInstead(new MeasureUnit[units.length()]);
+ for (int32_t i = 0, length = units.length(); i < length; i++) {
+ const MeasureUnit& unit = *units[i];
+ result->fMeasureUnits[i] = unit;
+ if (unit.getComplexity(status) == UMEASURE_UNIT_MIXED) {
+ MixedUnitLongNameHandler *mlnh = result->fMixedUnitHandlers.createAndCheckErrorCode(status);
+ MixedUnitLongNameHandler::forMeasureUnit(loc, unit, width, rules, NULL, mlnh, status);
+ result->fHandlers[i] = mlnh;
+ } else {
+ LongNameHandler *lnh = result->fLongNameHandlers.createAndCheckErrorCode(status);
+ LongNameHandler::forMeasureUnit(loc, unit, MeasureUnit(), width, rules, NULL, lnh, status);
+ result->fHandlers[i] = lnh;
+ }
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ }
+ return result.orphan();
+}
+
+void LongNameMultiplexer::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const {
+ // We call parent->processQuantity() from the Multiplexer, instead of
+ // letting LongNameHandler handle it: we don't know which LongNameHandler to
+ // call until we've called the parent!
+ fParent->processQuantity(quantity, micros, status);
+
+ // Call the correct LongNameHandler based on outputUnit
+ for (int i = 0; i < fHandlers.getCapacity(); i++) {
+ if (fMeasureUnits[i] == micros.outputUnit) {
+ fHandlers[i]->processQuantity(quantity, micros, status);
+ return;
+ }
+ }
+ if (U_FAILURE(status)) {
+ return;
+ }
+ // We shouldn't receive any outputUnit for which we haven't already got a
+ // LongNameHandler:
+ status = U_INTERNAL_PROGRAM_ERROR;
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
index a19425aa268..67f2316a9cd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
@@ -7,6 +7,8 @@
#ifndef __NUMBER_LONGNAMES_H__
#define __NUMBER_LONGNAMES_H__
+#include "cmemory.h"
+#include "unicode/listformatter.h"
#include "unicode/uversion.h"
#include "number_utils.h"
#include "number_modifiers.h"
@@ -33,34 +35,206 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
forCurrencyLongNames(const Locale &loc, const CurrencyUnit &currency, const PluralRules *rules,
const MicroPropsGenerator *parent, UErrorCode &status);
- static LongNameHandler*
- forMeasureUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, UErrorCode &status);
-
+ /**
+ * Construct a localized LongNameHandler for the specified MeasureUnit.
+ *
+ * Compound units can be constructed via `unit` and `perUnit`. Both of these
+ * must then be built-in units.
+ *
+ * Mixed units are not supported, use MixedUnitLongNameHandler::forMeasureUnit.
+ *
+ * This function uses a fillIn intead of returning a pointer, because we
+ * want to fill in instances in a MemoryPool (which cannot adopt pointers it
+ * didn't create itself).
+ *
+ * @param loc The desired locale.
+ * @param unit The measure unit to construct a LongNameHandler for. If
+ * `perUnit` is also defined, `unit` must not be a mixed unit.
+ * @param perUnit If `unit` is a mixed unit, `perUnit` must be "none".
+ * @param width Specifies the desired unit rendering.
+ * @param rules Does not take ownership.
+ * @param parent Does not take ownership.
+ * @param fillIn Required.
+ */
+ static void forMeasureUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
+ const UNumberUnitWidth &width, const PluralRules *rules,
+ const MicroPropsGenerator *parent, LongNameHandler *fillIn,
+ UErrorCode &status);
+
+ /**
+ * Selects the plural-appropriate Modifier from the set of fModifiers based
+ * on the plural form.
+ */
void
processQuantity(DecimalQuantity &quantity, MicroProps &micros, UErrorCode &status) const U_OVERRIDE;
+ // TODO(units): investigate whether we might run into Mixed Unit trouble
+ // with this. This override for ModifierStore::getModifier does not support
+ // mixed units: investigate under which circumstances it gets called (check
+ // both ImmutablePatternModifier and in NumberRangeFormatterImpl).
const Modifier* getModifier(Signum signum, StandardPlural::Form plural) const U_OVERRIDE;
private:
+ // A set of pre-computed modifiers, one for each plural form.
SimpleModifier fModifiers[StandardPlural::Form::COUNT];
+ // Not owned
const PluralRules *rules;
+ // Not owned
const MicroPropsGenerator *parent;
LongNameHandler(const PluralRules *rules, const MicroPropsGenerator *parent)
- : rules(rules), parent(parent) {}
+ : rules(rules), parent(parent) {
+ }
- static LongNameHandler*
- forCompoundUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, UErrorCode &status);
+ LongNameHandler() : rules(nullptr), parent(nullptr) {
+ }
+
+ // Enables MemoryPool<LongNameHandler>::emplaceBack(): requires access to
+ // the private constructors.
+ friend class MemoryPool<LongNameHandler>;
+
+ // Allow macrosToMicroGenerator to call the private default constructor.
+ friend class NumberFormatterImpl;
+ // Fills in LongNameHandler fields for formatting compound units identified
+ // via `unit` and `perUnit`. Both `unit` and `perUnit` need to be built-in
+ // units (for which data exists).
+ static void forCompoundUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
+ const UNumberUnitWidth &width, const PluralRules *rules,
+ const MicroPropsGenerator *parent, LongNameHandler *fillIn,
+ UErrorCode &status);
+
+ // Sets fModifiers to use the patterns from `simpleFormats`.
void simpleFormatsToModifiers(const UnicodeString *simpleFormats, Field field, UErrorCode &status);
+
+ // Sets fModifiers to a combination of `leadFormats` (one per plural form)
+ // and `trailFormat` appended to each.
+ //
+ // With a leadFormat of "{0}m" and a trailFormat of "{0}/s", it produces a
+ // pattern of "{0}m/s" by inserting the leadFormat pattern into trailFormat.
void multiSimpleFormatsToModifiers(const UnicodeString *leadFormats, UnicodeString trailFormat,
Field field, UErrorCode &status);
};
+// Similar to LongNameHandler, but only for MIXED units.
+class MixedUnitLongNameHandler : public MicroPropsGenerator, public ModifierStore, public UMemory {
+ public:
+ /**
+ * Construct a localized MixedUnitLongNameHandler for the specified
+ * MeasureUnit. It must be a MIXED unit.
+ *
+ * This function uses a fillIn intead of returning a pointer, because we
+ * want to fill in instances in a MemoryPool (which cannot adopt pointers it
+ * didn't create itself).
+ *
+ * @param loc The desired locale.
+ * @param mixedUnit The mixed measure unit to construct a
+ * MixedUnitLongNameHandler for.
+ * @param width Specifies the desired unit rendering.
+ * @param rules Does not take ownership.
+ * @param parent Does not take ownership.
+ * @param fillIn Required.
+ */
+ static void forMeasureUnit(const Locale &loc, const MeasureUnit &mixedUnit,
+ const UNumberUnitWidth &width, const PluralRules *rules,
+ const MicroPropsGenerator *parent, MixedUnitLongNameHandler *fillIn,
+ UErrorCode &status);
+
+ /**
+ * Produces a plural-appropriate Modifier for a mixed unit: `quantity` is
+ * taken as the final smallest unit, while the larger unit values must be
+ * provided via `micros.mixedMeasures`.
+ */
+ void processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const U_OVERRIDE;
+
+ // Required for ModifierStore. And ModifierStore is required by
+ // SimpleModifier constructor's last parameter. We assert his will never get
+ // called though.
+ const Modifier *getModifier(Signum signum, StandardPlural::Form plural) const U_OVERRIDE;
+
+ private:
+ // Not owned
+ const PluralRules *rules;
+ // Not owned
+ const MicroPropsGenerator *parent;
+
+ // Total number of units in the MeasureUnit this handler was configured for:
+ // for "foot-and-inch", this will be 2.
+ int32_t fMixedUnitCount = 1;
+ // Stores unit data for each of the individual units. For each unit, it
+ // stores ARRAY_LENGTH strings, as returned by getMeasureData. (Each unit
+ // with index `i` has ARRAY_LENGTH strings starting at index
+ // `i*ARRAY_LENGTH` in this array.)
+ LocalArray<UnicodeString> fMixedUnitData;
+ // A localized NumberFormatter used to format the integer-valued bigger
+ // units of Mixed Unit measurements.
+ LocalizedNumberFormatter fIntegerFormatter;
+ // A localised list formatter for joining mixed units together.
+ LocalPointer<ListFormatter> fListFormatter;
+
+ MixedUnitLongNameHandler(const PluralRules *rules, const MicroPropsGenerator *parent)
+ : rules(rules), parent(parent) {
+ }
+
+ MixedUnitLongNameHandler() : rules(nullptr), parent(nullptr) {
+ }
+
+ // Allow macrosToMicroGenerator to call the private default constructor.
+ friend class NumberFormatterImpl;
+
+ // Enables MemoryPool<LongNameHandler>::emplaceBack(): requires access to
+ // the private constructors.
+ friend class MemoryPool<MixedUnitLongNameHandler>;
+
+ // For a mixed unit, returns a Modifier that takes only one parameter: the
+ // smallest and final unit of the set. The bigger units' values and labels
+ // get baked into this Modifier, together with the unit label of the final
+ // unit.
+ const Modifier *getMixedUnitModifier(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const;
+};
+
+/**
+ * A MicroPropsGenerator that multiplexes between different LongNameHandlers,
+ * depending on the outputUnit.
+ *
+ * See processQuantity() for the input requirements.
+ */
+class LongNameMultiplexer : public MicroPropsGenerator, public UMemory {
+ public:
+ // Produces a multiplexer for LongNameHandlers, one for each unit in
+ // `units`. An individual unit might be a mixed unit.
+ static LongNameMultiplexer *forMeasureUnits(const Locale &loc,
+ const MaybeStackVector<MeasureUnit> &units,
+ const UNumberUnitWidth &width, const PluralRules *rules,
+ const MicroPropsGenerator *parent, UErrorCode &status);
+
+ // The output unit must be provided via `micros.outputUnit`, it must match
+ // one of the units provided to the factory function.
+ void processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const U_OVERRIDE;
+
+ private:
+ /**
+ * Because we only know which LongNameHandler we wish to call after calling
+ * earlier MicroPropsGenerators in the chain, LongNameMultiplexer keeps the
+ * parent link, while the LongNameHandlers are given no parents.
+ */
+ MemoryPool<LongNameHandler> fLongNameHandlers;
+ MemoryPool<MixedUnitLongNameHandler> fMixedUnitHandlers;
+ // Unowned pointers to instances owned by MaybeStackVectors.
+ MaybeStackArray<MicroPropsGenerator *, 8> fHandlers;
+ // Each MeasureUnit corresponds to the same-index MicroPropsGenerator
+ // pointed to in fHandlers.
+ LocalArray<MeasureUnit> fMeasureUnits;
+
+ const MicroPropsGenerator *fParent;
+
+ LongNameMultiplexer(const MicroPropsGenerator *parent) : fParent(parent) {
+ }
+};
+
} // namespace impl
} // namespace number
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp
index 40fd5284b86..e2a0d284b7c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp
@@ -13,7 +13,6 @@
#include "number_patternstring.h"
#include "unicode/errorcode.h"
#include "number_utils.h"
-#include "number_currencysymbols.h"
using namespace icu;
using namespace icu::number;
@@ -63,17 +62,8 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert
// AFFIXES //
/////////////
- AffixPatternProvider* affixProvider;
- if (properties.currencyPluralInfo.fPtr.isNull()) {
- warehouse.currencyPluralInfoAPP.setToBogus();
- warehouse.propertiesAPP.setTo(properties, status);
- affixProvider = &warehouse.propertiesAPP;
- } else {
- warehouse.currencyPluralInfoAPP.setTo(*properties.currencyPluralInfo.fPtr, properties, status);
- warehouse.propertiesAPP.setToBogus();
- affixProvider = &warehouse.currencyPluralInfoAPP;
- }
- macros.affixProvider = affixProvider;
+ warehouse.affixProvider.setTo(properties, status);
+ macros.affixProvider = &warehouse.affixProvider.get();
///////////
// UNITS //
@@ -83,15 +73,13 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert
!properties.currency.isNull() ||
!properties.currencyPluralInfo.fPtr.isNull() ||
!properties.currencyUsage.isNull() ||
- affixProvider->hasCurrencySign());
+ warehouse.affixProvider.get().hasCurrencySign());
CurrencyUnit currency = resolveCurrency(properties, locale, status);
UCurrencyUsage currencyUsage = properties.currencyUsage.getOrDefault(UCURR_USAGE_STANDARD);
if (useCurrency) {
// NOTE: Slicing is OK.
macros.unit = currency; // NOLINT
}
- warehouse.currencySymbols = {currency, locale, symbols, status};
- macros.currencySymbols = &warehouse.currencySymbols;
///////////////////////
// ROUNDING STRATEGY //
@@ -104,6 +92,8 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert
int32_t minSig = properties.minimumSignificantDigits;
int32_t maxSig = properties.maximumSignificantDigits;
double roundingIncrement = properties.roundingIncrement;
+ // Not assigning directly to macros.roundingMode here: we change
+ // roundingMode if and when we also change macros.precision.
RoundingMode roundingMode = properties.roundingMode.getOrDefault(UNUM_ROUND_HALFEVEN);
bool explicitMinMaxFrac = minFrac != -1 || maxFrac != -1;
bool explicitMinMaxSig = minSig != -1 || maxSig != -1;
@@ -125,10 +115,8 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert
}
// Validate min/max int/frac.
// For backwards compatibility, minimum overrides maximum if the two conflict.
- // The following logic ensures that there is always a minimum of at least one digit.
if (minInt == 0 && maxFrac != 0) {
- // Force a digit after the decimal point.
- minFrac = minFrac <= 0 ? 1 : minFrac;
+ minFrac = (minFrac < 0 || (minFrac == 0 && maxInt == 0)) ? 1 : minFrac;
maxFrac = maxFrac < 0 ? -1 : maxFrac < minFrac ? minFrac : maxFrac;
minInt = 0;
maxInt = maxInt < 0 ? -1 : maxInt > kMaxIntFracSig ? -1 : maxInt;
@@ -159,7 +147,7 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert
precision = Precision::constructCurrency(currencyUsage);
}
if (!precision.isBogus()) {
- precision.fRoundingMode = roundingMode;
+ macros.roundingMode = roundingMode;
macros.precision = precision;
}
@@ -253,7 +241,7 @@ MacroProps NumberPropertyMapper::oldToNew(const DecimalFormatProperties& propert
// TODO: Reset maxSig_ = 1 + minFrac_ to follow the spec.
macros.precision = Precision::constructSignificant(minSig_, maxSig_);
}
- macros.precision.fRoundingMode = roundingMode;
+ macros.roundingMode = roundingMode;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
index de7d9c3865c..9ecd776b3b4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
@@ -20,6 +20,10 @@ namespace number {
namespace impl {
+class AutoAffixPatternProvider;
+class CurrencyPluralInfoAffixProvider;
+
+
class PropertiesAffixPatternProvider : public AffixPatternProvider, public UMemory {
public:
bool isBogus() const {
@@ -32,12 +36,6 @@ class PropertiesAffixPatternProvider : public AffixPatternProvider, public UMemo
void setTo(const DecimalFormatProperties& properties, UErrorCode& status);
- PropertiesAffixPatternProvider() = default; // puts instance in valid but undefined state
-
- PropertiesAffixPatternProvider(const DecimalFormatProperties& properties, UErrorCode& status) {
- setTo(properties, status);
- }
-
// AffixPatternProvider Methods:
char16_t charAt(int32_t flags, int32_t i) const U_OVERRIDE;
@@ -65,9 +63,14 @@ class PropertiesAffixPatternProvider : public AffixPatternProvider, public UMemo
UnicodeString negSuffix;
bool isCurrencyPattern;
+ PropertiesAffixPatternProvider() = default; // puts instance in valid but undefined state
+
const UnicodeString& getStringInternal(int32_t flags) const;
bool fBogus{true};
+
+ friend class AutoAffixPatternProvider;
+ friend class CurrencyPluralInfoAffixProvider;
};
@@ -107,17 +110,62 @@ class CurrencyPluralInfoAffixProvider : public AffixPatternProvider, public UMem
private:
PropertiesAffixPatternProvider affixesByPlural[StandardPlural::COUNT];
+ CurrencyPluralInfoAffixProvider() = default;
+
bool fBogus{true};
+
+ friend class AutoAffixPatternProvider;
+};
+
+
+class AutoAffixPatternProvider {
+ public:
+ inline AutoAffixPatternProvider() = default;
+
+ inline AutoAffixPatternProvider(const DecimalFormatProperties& properties, UErrorCode& status) {
+ setTo(properties, status);
+ }
+
+ inline void setTo(const DecimalFormatProperties& properties, UErrorCode& status) {
+ if (properties.currencyPluralInfo.fPtr.isNull()) {
+ propertiesAPP.setTo(properties, status);
+ currencyPluralInfoAPP.setToBogus();
+ } else {
+ propertiesAPP.setToBogus();
+ currencyPluralInfoAPP.setTo(*properties.currencyPluralInfo.fPtr, properties, status);
+ }
+ }
+
+ inline void setTo(const AffixPatternProvider* provider, UErrorCode& status) {
+ if (auto ptr = dynamic_cast<const PropertiesAffixPatternProvider*>(provider)) {
+ propertiesAPP = *ptr;
+ } else if (auto ptr = dynamic_cast<const CurrencyPluralInfoAffixProvider*>(provider)) {
+ currencyPluralInfoAPP = *ptr;
+ } else {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ }
+ }
+
+ inline const AffixPatternProvider& get() const {
+ if (!currencyPluralInfoAPP.isBogus()) {
+ return currencyPluralInfoAPP;
+ } else {
+ return propertiesAPP;
+ }
+ }
+
+ private:
+ PropertiesAffixPatternProvider propertiesAPP;
+ CurrencyPluralInfoAffixProvider currencyPluralInfoAPP;
};
/**
* A struct for ownership of a few objects needed for formatting.
*/
-struct DecimalFormatWarehouse {
- PropertiesAffixPatternProvider propertiesAPP;
- CurrencyPluralInfoAffixProvider currencyPluralInfoAPP;
- CurrencySymbols currencySymbols;
+struct DecimalFormatWarehouse : public UMemory {
+ AutoAffixPatternProvider affixProvider;
+ LocalPointer<PluralRules> rules;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h b/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
index d2393aea50c..058c5923b45 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
@@ -22,6 +22,56 @@
U_NAMESPACE_BEGIN namespace number {
namespace impl {
+/**
+ * A copyable container for the integer values of mixed unit measurements.
+ *
+ * If memory allocation fails during copying, no values are copied and status is
+ * set to U_MEMORY_ALLOCATION_ERROR.
+ */
+class IntMeasures : public MaybeStackArray<int64_t, 2> {
+ public:
+ /**
+ * Default constructor initializes with internal T[stackCapacity] buffer.
+ *
+ * Stack Capacity: most mixed units are expected to consist of two or three
+ * subunits, so one or two integer measures should be enough.
+ */
+ IntMeasures() : MaybeStackArray<int64_t, 2>() {
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * If memory allocation fails during copying, no values are copied and
+ * status is set to U_MEMORY_ALLOCATION_ERROR.
+ */
+ IntMeasures(const IntMeasures &other) : MaybeStackArray<int64_t, 2>() {
+ this->operator=(other);
+ }
+
+ // Assignment operator
+ IntMeasures &operator=(const IntMeasures &rhs) {
+ if (this == &rhs) {
+ return *this;
+ }
+ copyFrom(rhs, status);
+ return *this;
+ }
+
+ /** Move constructor */
+ IntMeasures(IntMeasures &&src) = default;
+
+ /** Move assignment */
+ IntMeasures &operator=(IntMeasures &&src) = default;
+
+ UErrorCode status = U_ZERO_ERROR;
+};
+
+/**
+ * MicroProps is the first MicroPropsGenerator that should be should be called,
+ * producing an initialized MicroProps instance that will be passed on and
+ * modified throughout the rest of the chain of MicroPropsGenerator instances.
+ */
struct MicroProps : public MicroPropsGenerator {
// NOTE: All of these fields are properly initialized in NumberFormatterImpl.
@@ -36,19 +86,47 @@ struct MicroProps : public MicroPropsGenerator {
// Note: This struct has no direct ownership of the following pointers.
const DecimalFormatSymbols* symbols;
+
+ // Pointers to Modifiers provided by the number formatting pipeline (when
+ // the value is known):
+
+ // A Modifier provided by LongNameHandler, used for currency long names and
+ // units. If there is no LongNameHandler needed, this should be an
+ // EmptyModifier. (This is typically the third modifier applied.)
const Modifier* modOuter;
- const Modifier* modMiddle;
+ // A Modifier for short currencies and compact notation. (This is typically
+ // the second modifier applied.)
+ const Modifier* modMiddle = nullptr;
+ // A Modifier provided by ScientificHandler, used for scientific notation.
+ // This is typically the first modifier applied.
const Modifier* modInner;
// The following "helper" fields may optionally be used during the MicroPropsGenerator.
// They live here to retain memory.
struct {
+ // The ScientificModifier for which ScientificHandler is responsible.
+ // ScientificHandler::processQuantity() modifies this Modifier.
ScientificModifier scientificModifier;
+ // EmptyModifier used for modOuter
EmptyModifier emptyWeakModifier{false};
+ // EmptyModifier used for modInner
EmptyModifier emptyStrongModifier{true};
MultiplierFormatHandler multiplier;
+ // A Modifier used for Mixed Units. When formatting mixed units,
+ // LongNameHandler assigns this Modifier.
+ SimpleModifier mixedUnitModifier;
} helpers;
+ // The MeasureUnit with which the output is represented. May also have
+ // UMEASURE_UNIT_MIXED complexity, in which case mixedMeasures comes into
+ // play.
+ MeasureUnit outputUnit;
+
+ // In the case of mixed units, this is the set of integer-only units
+ // *preceding* the final unit.
+ IntMeasures mixedMeasures;
+ // Number of mixedMeasures that have been populated
+ int32_t mixedMeasuresCount = 0;
MicroProps() = default;
@@ -56,7 +134,23 @@ struct MicroProps : public MicroPropsGenerator {
MicroProps& operator=(const MicroProps& other) = default;
- void processQuantity(DecimalQuantity&, MicroProps& micros, UErrorCode& status) const U_OVERRIDE {
+ /**
+ * As MicroProps is the "base instance", this implementation of
+ * MicroPropsGenerator::processQuantity() just ensures that the output
+ * `micros` is correctly initialized.
+ *
+ * For the "safe" invocation of this function, micros must not be *this,
+ * such that a copy of the base instance is made. For the "unsafe" path,
+ * this function can be used only once, because the base MicroProps instance
+ * will be modified and thus not be available for re-use.
+ *
+ * @param quantity The quantity for consideration and optional mutation.
+ * @param micros The MicroProps instance to populate. If this parameter is
+ * not already `*this`, it will be overwritten with a copy of `*this`.
+ */
+ void processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const U_OVERRIDE {
+ (void) quantity;
(void) status;
if (this == &micros) {
// Unsafe path: no need to perform a copy.
@@ -65,6 +159,7 @@ struct MicroProps : public MicroPropsGenerator {
U_ASSERT(exhausted);
} else {
// Safe path: copy self into the output micros.
+ U_ASSERT(!exhausted);
micros = *this;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
index 3a44f8f6f15..b7d825f499e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
@@ -25,13 +25,13 @@ const int32_t ARG_NUM_LIMIT = 0x100;
icu::UInitOnce gDefaultCurrencySpacingInitOnce = U_INITONCE_INITIALIZER;
UnicodeSet *UNISET_DIGIT = nullptr;
-UnicodeSet *UNISET_NOTS = nullptr;
+UnicodeSet *UNISET_NOTSZ = nullptr;
UBool U_CALLCONV cleanupDefaultCurrencySpacing() {
delete UNISET_DIGIT;
UNISET_DIGIT = nullptr;
- delete UNISET_NOTS;
- UNISET_NOTS = nullptr;
+ delete UNISET_NOTSZ;
+ UNISET_NOTSZ = nullptr;
gDefaultCurrencySpacingInitOnce.reset();
return TRUE;
}
@@ -39,13 +39,13 @@ UBool U_CALLCONV cleanupDefaultCurrencySpacing() {
void U_CALLCONV initDefaultCurrencySpacing(UErrorCode &status) {
ucln_i18n_registerCleanup(UCLN_I18N_CURRENCY_SPACING, cleanupDefaultCurrencySpacing);
UNISET_DIGIT = new UnicodeSet(UnicodeString(u"[:digit:]"), status);
- UNISET_NOTS = new UnicodeSet(UnicodeString(u"[:^S:]"), status);
- if (UNISET_DIGIT == nullptr || UNISET_NOTS == nullptr) {
+ UNISET_NOTSZ = new UnicodeSet(UnicodeString(u"[[:^S:]&[:^Z:]]"), status);
+ if (UNISET_DIGIT == nullptr || UNISET_NOTSZ == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
UNISET_DIGIT->freeze();
- UNISET_NOTS->freeze();
+ UNISET_NOTSZ->freeze();
}
} // namespace
@@ -89,7 +89,7 @@ bool ConstantAffixModifier::isStrong() const {
return fStrong;
}
-bool ConstantAffixModifier::containsField(UNumberFormatFields field) const {
+bool ConstantAffixModifier::containsField(Field field) const {
(void)field;
// This method is not currently used.
UPRV_UNREACHABLE;
@@ -151,7 +151,7 @@ SimpleModifier::SimpleModifier(const SimpleFormatter &simpleFormatter, Field fie
}
SimpleModifier::SimpleModifier()
- : fField(UNUM_FIELD_COUNT), fStrong(false), fPrefixLength(0), fSuffixLength(0) {
+ : fField(kUndefinedField), fStrong(false), fPrefixLength(0), fSuffixLength(0) {
}
int32_t SimpleModifier::apply(FormattedStringBuilder &output, int leftIndex, int rightIndex,
@@ -178,7 +178,7 @@ bool SimpleModifier::isStrong() const {
return fStrong;
}
-bool SimpleModifier::containsField(UNumberFormatFields field) const {
+bool SimpleModifier::containsField(Field field) const {
(void)field;
// This method is not currently used.
UPRV_UNREACHABLE;
@@ -292,7 +292,7 @@ int32_t ConstantMultiFieldModifier::apply(FormattedStringBuilder &output, int le
leftIndex + length,
rightIndex + length,
UnicodeString(), 0, 0,
- UNUM_FIELD_COUNT, status);
+ kUndefinedField, status);
}
length += output.insert(rightIndex + length, fSuffix, status);
return length;
@@ -310,7 +310,7 @@ bool ConstantMultiFieldModifier::isStrong() const {
return fStrong;
}
-bool ConstantMultiFieldModifier::containsField(UNumberFormatFields field) const {
+bool ConstantMultiFieldModifier::containsField(Field field) const {
return fPrefix.containsField(field) || fSuffix.containsField(field);
}
@@ -342,7 +342,7 @@ CurrencySpacingEnabledModifier::CurrencySpacingEnabledModifier(const FormattedSt
: ConstantMultiFieldModifier(prefix, suffix, overwrite, strong) {
// Check for currency spacing. Do not build the UnicodeSets unless there is
// a currency code point at a boundary.
- if (prefix.length() > 0 && prefix.fieldAt(prefix.length() - 1) == UNUM_CURRENCY_FIELD) {
+ if (prefix.length() > 0 && prefix.fieldAt(prefix.length() - 1) == Field(UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD)) {
int prefixCp = prefix.getLastCodePoint();
UnicodeSet prefixUnicodeSet = getUnicodeSet(symbols, IN_CURRENCY, PREFIX, status);
if (prefixUnicodeSet.contains(prefixCp)) {
@@ -357,8 +357,8 @@ CurrencySpacingEnabledModifier::CurrencySpacingEnabledModifier(const FormattedSt
fAfterPrefixUnicodeSet.setToBogus();
fAfterPrefixInsert.setToBogus();
}
- if (suffix.length() > 0 && suffix.fieldAt(0) == UNUM_CURRENCY_FIELD) {
- int suffixCp = suffix.getLastCodePoint();
+ if (suffix.length() > 0 && suffix.fieldAt(0) == Field(UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD)) {
+ int suffixCp = suffix.getFirstCodePoint();
UnicodeSet suffixUnicodeSet = getUnicodeSet(symbols, IN_CURRENCY, SUFFIX, status);
if (suffixUnicodeSet.contains(suffixCp)) {
fBeforeSuffixUnicodeSet = getUnicodeSet(symbols, IN_NUMBER, SUFFIX, status);
@@ -381,12 +381,20 @@ int32_t CurrencySpacingEnabledModifier::apply(FormattedStringBuilder &output, in
if (rightIndex - leftIndex > 0 && !fAfterPrefixUnicodeSet.isBogus() &&
fAfterPrefixUnicodeSet.contains(output.codePointAt(leftIndex))) {
// TODO: Should we use the CURRENCY field here?
- length += output.insert(leftIndex, fAfterPrefixInsert, UNUM_FIELD_COUNT, status);
+ length += output.insert(
+ leftIndex,
+ fAfterPrefixInsert,
+ kUndefinedField,
+ status);
}
if (rightIndex - leftIndex > 0 && !fBeforeSuffixUnicodeSet.isBogus() &&
fBeforeSuffixUnicodeSet.contains(output.codePointBefore(rightIndex))) {
// TODO: Should we use the CURRENCY field here?
- length += output.insert(rightIndex + length, fBeforeSuffixInsert, UNUM_FIELD_COUNT, status);
+ length += output.insert(
+ rightIndex + length,
+ fBeforeSuffixInsert,
+ kUndefinedField,
+ status);
}
// Call super for the remaining logic
@@ -422,7 +430,7 @@ CurrencySpacingEnabledModifier::applyCurrencySpacingAffix(FormattedStringBuilder
// This works even if the last code point in the prefix is 2 code units because the
// field value gets populated to both indices in the field array.
Field affixField = (affix == PREFIX) ? output.fieldAt(index - 1) : output.fieldAt(index);
- if (affixField != UNUM_CURRENCY_FIELD) {
+ if (affixField != Field(UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD)) {
return 0;
}
int affixCp = (affix == PREFIX) ? output.codePointBefore(index) : output.codePointAt(index);
@@ -443,7 +451,7 @@ CurrencySpacingEnabledModifier::applyCurrencySpacingAffix(FormattedStringBuilder
// However, the build code path is more efficient, and this is the most natural
// place to put currency spacing in the non-build code path.
// TODO: Should we use the CURRENCY field here?
- return output.insert(index, spacingString, UNUM_FIELD_COUNT, status);
+ return output.insert(index, spacingString, kUndefinedField, status);
}
UnicodeSet
@@ -461,8 +469,8 @@ CurrencySpacingEnabledModifier::getUnicodeSet(const DecimalFormatSymbols &symbol
status);
if (pattern.compare(u"[:digit:]", -1) == 0) {
return *UNISET_DIGIT;
- } else if (pattern.compare(u"[:^S:]", -1) == 0) {
- return *UNISET_NOTS;
+ } else if (pattern.compare(u"[[:^S:]&[:^Z:]]", -1) == 0) {
+ return *UNISET_NOTSZ;
} else {
return UnicodeSet(pattern, status);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
index c84c6aa273e..375254310ca 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
@@ -37,7 +37,7 @@ class U_I18N_API ConstantAffixModifier : public Modifier, public UObject {
bool isStrong() const U_OVERRIDE;
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
+ bool containsField(Field field) const U_OVERRIDE;
void getParameters(Parameters& output) const U_OVERRIDE;
@@ -73,7 +73,7 @@ class U_I18N_API SimpleModifier : public Modifier, public UMemory {
bool isStrong() const U_OVERRIDE;
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
+ bool containsField(Field field) const U_OVERRIDE;
void getParameters(Parameters& output) const U_OVERRIDE;
@@ -166,7 +166,7 @@ class U_I18N_API ConstantMultiFieldModifier : public Modifier, public UMemory {
bool isStrong() const U_OVERRIDE;
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
+ bool containsField(Field field) const U_OVERRIDE;
void getParameters(Parameters& output) const U_OVERRIDE;
@@ -255,7 +255,7 @@ class U_I18N_API EmptyModifier : public Modifier, public UMemory {
return fStrong;
}
- bool containsField(UNumberFormatFields field) const U_OVERRIDE {
+ bool containsField(Field field) const U_OVERRIDE {
(void)field;
return false;
}
@@ -319,12 +319,12 @@ class U_I18N_API AdoptingModifierStore : public ModifierStore, public UMemory {
private:
// NOTE: mods is zero-initialized (to nullptr)
- const Modifier *mods[3 * StandardPlural::COUNT] = {};
+ const Modifier *mods[4 * StandardPlural::COUNT] = {};
inline static int32_t getModIndex(Signum signum, StandardPlural::Form plural) {
- U_ASSERT(signum >= -1 && signum <= 1);
+ U_ASSERT(signum >= 0 && signum < SIGNUM_COUNT);
U_ASSERT(plural >= 0 && plural < StandardPlural::COUNT);
- return static_cast<int32_t>(plural) * 3 + (signum + 1);
+ return static_cast<int32_t>(plural) * SIGNUM_COUNT + signum;
}
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp
index e2f069139a4..7129b94e0f8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp
@@ -5,11 +5,13 @@
#if !UCONFIG_NO_FORMATTING
+#include "unicode/measunit.h"
#include "unicode/numberformatter.h"
#include "number_utypes.h"
#include "util.h"
#include "number_decimalquantity.h"
#include "number_decnum.h"
+#include "numrange_impl.h"
U_NAMESPACE_BEGIN
namespace number {
@@ -19,16 +21,6 @@ UPRV_FORMATTED_VALUE_SUBCLASS_AUTO_IMPL(FormattedNumber)
#define UPRV_NOARG
-UBool FormattedNumber::nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(FALSE)
- return fData->nextFieldPosition(fieldPosition, status);
-}
-
-void FormattedNumber::getAllFieldPositions(FieldPositionIterator& iterator, UErrorCode& status) const {
- FieldPositionIteratorHandler fpih(&iterator, status);
- getAllFieldPositionsImpl(fpih, status);
-}
-
void FormattedNumber::toDecimalNumber(ByteSink& sink, UErrorCode& status) const {
UPRV_FORMATTED_VALUE_METHOD_GUARD(UPRV_NOARG)
impl::DecNum decnum;
@@ -42,6 +34,11 @@ void FormattedNumber::getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpi
fData->getAllFieldPositions(fpih, status);
}
+MeasureUnit FormattedNumber::getOutputUnit(UErrorCode& status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(MeasureUnit())
+ return fData->outputUnit;
+}
+
void FormattedNumber::getDecimalQuantity(impl::DecimalQuantity& output, UErrorCode& status) const {
UPRV_FORMATTED_VALUE_METHOD_GUARD(UPRV_NOARG)
output = fData->quantity;
@@ -51,6 +48,42 @@ void FormattedNumber::getDecimalQuantity(impl::DecimalQuantity& output, UErrorCo
impl::UFormattedNumberData::~UFormattedNumberData() = default;
+UPRV_FORMATTED_VALUE_SUBCLASS_AUTO_IMPL(FormattedNumberRange)
+
+#define UPRV_NOARG
+
+UnicodeString FormattedNumberRange::getFirstDecimal(UErrorCode& status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(ICU_Utility::makeBogusString())
+ return fData->quantity1.toScientificString();
+}
+
+UnicodeString FormattedNumberRange::getSecondDecimal(UErrorCode& status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(ICU_Utility::makeBogusString())
+ return fData->quantity2.toScientificString();
+}
+
+void FormattedNumberRange::getDecimalNumbers(ByteSink& sink1, ByteSink& sink2, UErrorCode& status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(UPRV_NOARG)
+ impl::DecNum decnum1;
+ impl::DecNum decnum2;
+ fData->quantity1.toDecNum(decnum1, status).toString(sink1, status);
+ fData->quantity2.toDecNum(decnum2, status).toString(sink2, status);
+}
+
+UNumberRangeIdentityResult FormattedNumberRange::getIdentityResult(UErrorCode& status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(UNUM_IDENTITY_RESULT_NOT_EQUAL)
+ return fData->identityResult;
+}
+
+const impl::UFormattedNumberRangeData* FormattedNumberRange::getData(UErrorCode& status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD(nullptr)
+ return fData;
+}
+
+
+impl::UFormattedNumberRangeData::~UFormattedNumberRangeData() = default;
+
+
} // namespace number
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp
index c68a9875b20..c320c3ffb6f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp
@@ -21,7 +21,7 @@ addPaddingHelper(UChar32 paddingCp, int32_t requiredPadding, FormattedStringBuil
UErrorCode &status) {
for (int32_t i = 0; i < requiredPadding; i++) {
// TODO: If appending to the end, this will cause actual insertion operations. Improve.
- string.insertCodePoint(index, paddingCp, UNUM_FIELD_COUNT, status);
+ string.insertCodePoint(index, paddingCp, kUndefinedField, status);
}
return U16_LENGTH(paddingCp) * requiredPadding;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
index 724f5b9741c..314e7cb75ee 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
@@ -34,11 +34,13 @@ void MutablePatternModifier::setPatternAttributes(UNumberSignDisplay signDisplay
}
void MutablePatternModifier::setSymbols(const DecimalFormatSymbols* symbols,
- const CurrencySymbols* currencySymbols,
- const UNumberUnitWidth unitWidth, const PluralRules* rules) {
+ const CurrencyUnit& currency,
+ const UNumberUnitWidth unitWidth,
+ const PluralRules* rules,
+ UErrorCode& status) {
U_ASSERT((rules != nullptr) == needsPlurals());
fSymbols = symbols;
- fCurrencySymbols = currencySymbols;
+ fCurrencySymbols = {currency, symbols->getLocale(), *symbols, status};
fUnitWidth = unitWidth;
fRules = rules;
}
@@ -55,12 +57,6 @@ bool MutablePatternModifier::needsPlurals() const {
}
ImmutablePatternModifier* MutablePatternModifier::createImmutable(UErrorCode& status) {
- return createImmutableAndChain(nullptr, status);
-}
-
-ImmutablePatternModifier*
-MutablePatternModifier::createImmutableAndChain(const MicroPropsGenerator* parent, UErrorCode& status) {
-
// TODO: Move StandardPlural VALUES to standardplural.h
static const StandardPlural::Form STANDARD_PLURAL_VALUES[] = {
StandardPlural::Form::ZERO,
@@ -81,8 +77,10 @@ MutablePatternModifier::createImmutableAndChain(const MicroPropsGenerator* paren
for (StandardPlural::Form plural : STANDARD_PLURAL_VALUES) {
setNumberProperties(SIGNUM_POS, plural);
pm->adoptModifier(SIGNUM_POS, plural, createConstantModifier(status));
- setNumberProperties(SIGNUM_ZERO, plural);
- pm->adoptModifier(SIGNUM_ZERO, plural, createConstantModifier(status));
+ setNumberProperties(SIGNUM_NEG_ZERO, plural);
+ pm->adoptModifier(SIGNUM_NEG_ZERO, plural, createConstantModifier(status));
+ setNumberProperties(SIGNUM_POS_ZERO, plural);
+ pm->adoptModifier(SIGNUM_POS_ZERO, plural, createConstantModifier(status));
setNumberProperties(SIGNUM_NEG, plural);
pm->adoptModifier(SIGNUM_NEG, plural, createConstantModifier(status));
}
@@ -90,20 +88,22 @@ MutablePatternModifier::createImmutableAndChain(const MicroPropsGenerator* paren
delete pm;
return nullptr;
}
- return new ImmutablePatternModifier(pm, fRules, parent); // adopts pm
+ return new ImmutablePatternModifier(pm, fRules); // adopts pm
} else {
// Faster path when plural keyword is not needed.
setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
pm->adoptModifierWithoutPlural(SIGNUM_POS, createConstantModifier(status));
- setNumberProperties(SIGNUM_ZERO, StandardPlural::Form::COUNT);
- pm->adoptModifierWithoutPlural(SIGNUM_ZERO, createConstantModifier(status));
+ setNumberProperties(SIGNUM_NEG_ZERO, StandardPlural::Form::COUNT);
+ pm->adoptModifierWithoutPlural(SIGNUM_NEG_ZERO, createConstantModifier(status));
+ setNumberProperties(SIGNUM_POS_ZERO, StandardPlural::Form::COUNT);
+ pm->adoptModifierWithoutPlural(SIGNUM_POS_ZERO, createConstantModifier(status));
setNumberProperties(SIGNUM_NEG, StandardPlural::Form::COUNT);
pm->adoptModifierWithoutPlural(SIGNUM_NEG, createConstantModifier(status));
if (U_FAILURE(status)) {
delete pm;
return nullptr;
}
- return new ImmutablePatternModifier(pm, nullptr, parent); // adopts pm
+ return new ImmutablePatternModifier(pm, nullptr); // adopts pm
}
}
@@ -120,13 +120,16 @@ ConstantMultiFieldModifier* MutablePatternModifier::createConstantModifier(UErro
}
}
-ImmutablePatternModifier::ImmutablePatternModifier(AdoptingModifierStore* pm, const PluralRules* rules,
- const MicroPropsGenerator* parent)
- : pm(pm), rules(rules), parent(parent) {}
+ImmutablePatternModifier::ImmutablePatternModifier(AdoptingModifierStore* pm, const PluralRules* rules)
+ : pm(pm), rules(rules), parent(nullptr) {}
void ImmutablePatternModifier::processQuantity(DecimalQuantity& quantity, MicroProps& micros,
UErrorCode& status) const {
parent->processQuantity(quantity, micros, status);
+ micros.rounder.apply(quantity, status);
+ if (micros.modMiddle != nullptr) {
+ return;
+ }
applyToMicros(micros, quantity, status);
}
@@ -148,6 +151,10 @@ const Modifier* ImmutablePatternModifier::getModifier(Signum signum, StandardPlu
}
}
+void ImmutablePatternModifier::addToChain(const MicroPropsGenerator* parent) {
+ this->parent = parent;
+}
+
/** Used by the unsafe code path. */
MicroPropsGenerator& MutablePatternModifier::addToChain(const MicroPropsGenerator* parent) {
@@ -158,6 +165,10 @@ MicroPropsGenerator& MutablePatternModifier::addToChain(const MicroPropsGenerato
void MutablePatternModifier::processQuantity(DecimalQuantity& fq, MicroProps& micros,
UErrorCode& status) const {
fParent->processQuantity(fq, micros, status);
+ micros.rounder.apply(fq, status);
+ if (micros.modMiddle != nullptr) {
+ return;
+ }
// The unsafe code path performs self-mutation, so we need a const_cast.
// This method needs to be const because it overrides a const method in the parent class.
auto nonConstThis = const_cast<MutablePatternModifier*>(this);
@@ -186,7 +197,7 @@ int32_t MutablePatternModifier::apply(FormattedStringBuilder& output, int32_t le
UnicodeString(),
0,
0,
- UNUM_FIELD_COUNT,
+ kUndefinedField,
status);
}
CurrencySpacingEnabledModifier::applyCurrencySpacing(
@@ -230,7 +241,7 @@ bool MutablePatternModifier::isStrong() const {
return fStrong;
}
-bool MutablePatternModifier::containsField(UNumberFormatFields field) const {
+bool MutablePatternModifier::containsField(Field field) const {
(void)field;
// This method is not currently used.
UPRV_UNREACHABLE;
@@ -263,7 +274,12 @@ int32_t MutablePatternModifier::insertSuffix(FormattedStringBuilder& sb, int pos
/** This method contains the heart of the logic for rendering LDML affix strings. */
void MutablePatternModifier::prepareAffix(bool isPrefix) {
PatternStringUtils::patternInfoToStringBuilder(
- *fPatternInfo, isPrefix, fSignum, fSignDisplay, fPlural, fPerMilleReplacesPercent, currentAffix);
+ *fPatternInfo,
+ isPrefix,
+ PatternStringUtils::resolveSignDisplay(fSignDisplay, fSignum),
+ fPlural,
+ fPerMilleReplacesPercent,
+ currentAffix);
}
UnicodeString MutablePatternModifier::getSymbol(AffixPatternType type) const {
@@ -278,25 +294,31 @@ UnicodeString MutablePatternModifier::getSymbol(AffixPatternType type) const {
case AffixPatternType::TYPE_PERMILLE:
return fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPerMillSymbol);
case AffixPatternType::TYPE_CURRENCY_SINGLE: {
- // UnitWidth ISO and HIDDEN overrides the singular currency symbol.
- if (fUnitWidth == UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE) {
- return fCurrencySymbols->getIntlCurrencySymbol(localStatus);
- } else if (fUnitWidth == UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN) {
+ switch (fUnitWidth) {
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW:
+ return fCurrencySymbols.getNarrowCurrencySymbol(localStatus);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT:
+ return fCurrencySymbols.getCurrencySymbol(localStatus);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE:
+ return fCurrencySymbols.getIntlCurrencySymbol(localStatus);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL:
+ return fCurrencySymbols.getFormalCurrencySymbol(localStatus);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT:
+ return fCurrencySymbols.getVariantCurrencySymbol(localStatus);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN:
return UnicodeString();
- } else if (fUnitWidth == UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW) {
- return fCurrencySymbols->getNarrowCurrencySymbol(localStatus);
- } else {
- return fCurrencySymbols->getCurrencySymbol(localStatus);
+ default:
+ return fCurrencySymbols.getCurrencySymbol(localStatus);
}
}
case AffixPatternType::TYPE_CURRENCY_DOUBLE:
- return fCurrencySymbols->getIntlCurrencySymbol(localStatus);
+ return fCurrencySymbols.getIntlCurrencySymbol(localStatus);
case AffixPatternType::TYPE_CURRENCY_TRIPLE:
// NOTE: This is the code path only for patterns containing "¤¤¤".
// Plural currencies set via the API are formatted in LongNameHandler.
// This code path is used by DecimalFormat via CurrencyPluralInfo.
U_ASSERT(fPlural != StandardPlural::Form::COUNT);
- return fCurrencySymbols->getPluralName(fPlural, localStatus);
+ return fCurrencySymbols.getPluralName(fPlural, localStatus);
case AffixPatternType::TYPE_CURRENCY_QUAD:
return UnicodeString(u"\uFFFD");
case AffixPatternType::TYPE_CURRENCY_QUINT:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
index b2c90e0af76..5ba842d5692 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
@@ -50,9 +50,11 @@ class U_I18N_API ImmutablePatternModifier : public MicroPropsGenerator, public U
const Modifier* getModifier(Signum signum, StandardPlural::Form plural) const;
+ // Non-const method:
+ void addToChain(const MicroPropsGenerator* parent);
+
private:
- ImmutablePatternModifier(AdoptingModifierStore* pm, const PluralRules* rules,
- const MicroPropsGenerator* parent);
+ ImmutablePatternModifier(AdoptingModifierStore* pm, const PluralRules* rules);
const LocalPointer<AdoptingModifierStore> pm;
const PluralRules* rules;
@@ -122,16 +124,18 @@ class U_I18N_API MutablePatternModifier
*
* @param symbols
* The desired instance of DecimalFormatSymbols.
- * @param currencySymbols
- * The currency symbols to be used when substituting currency values into the affixes.
+ * @param currency
+ * The currency to be used when substituting currency values into the affixes.
* @param unitWidth
* The width used to render currencies.
* @param rules
* Required if the triple currency sign, "¤¤¤", appears in the pattern, which can be determined from the
* convenience method {@link #needsPlurals()}.
+ * @param status
+ * Set if an error occurs while loading currency data.
*/
- void setSymbols(const DecimalFormatSymbols* symbols, const CurrencySymbols* currencySymbols,
- UNumberUnitWidth unitWidth, const PluralRules* rules);
+ void setSymbols(const DecimalFormatSymbols* symbols, const CurrencyUnit& currency,
+ UNumberUnitWidth unitWidth, const PluralRules* rules, UErrorCode& status);
/**
* Sets attributes of the current number being processed.
@@ -165,21 +169,6 @@ class U_I18N_API MutablePatternModifier
*/
ImmutablePatternModifier *createImmutable(UErrorCode &status);
- /**
- * Creates a new quantity-dependent Modifier that behaves the same as the current instance, but which is immutable
- * and can be saved for future use. The number properties in the current instance are mutated; all other properties
- * are left untouched.
- *
- * <p>
- * CREATES A NEW HEAP OBJECT; THE CALLER GETS OWNERSHIP.
- *
- * @param parent
- * The QuantityChain to which to chain this immutable.
- * @return An immutable that supports both positive and negative numbers.
- */
- ImmutablePatternModifier *
- createImmutableAndChain(const MicroPropsGenerator *parent, UErrorCode &status);
-
MicroPropsGenerator &addToChain(const MicroPropsGenerator *parent);
void processQuantity(DecimalQuantity &, MicroProps &micros, UErrorCode &status) const U_OVERRIDE;
@@ -193,7 +182,7 @@ class U_I18N_API MutablePatternModifier
bool isStrong() const U_OVERRIDE;
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
+ bool containsField(Field field) const U_OVERRIDE;
void getParameters(Parameters& output) const U_OVERRIDE;
@@ -219,7 +208,7 @@ class U_I18N_API MutablePatternModifier
// Symbol details (initialized in setSymbols)
const DecimalFormatSymbols *fSymbols;
UNumberUnitWidth fUnitWidth;
- const CurrencySymbols *fCurrencySymbols;
+ CurrencySymbols fCurrencySymbols;
const PluralRules *fRules;
// Number details (initialized in setNumberProperties)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
index c7212c1e5c2..9d845056069 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
@@ -686,10 +686,10 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP
int32_t exponentDigits = uprv_min(properties.minimumExponentDigits, dosMax);
bool exponentShowPlusSign = properties.exponentSignAlwaysShown;
- PropertiesAffixPatternProvider affixes(properties, status);
+ AutoAffixPatternProvider affixProvider(properties, status);
// Prefixes
- sb.append(affixes.getString(AffixPatternProvider::AFFIX_POS_PREFIX));
+ sb.append(affixProvider.get().getString(AffixPatternProvider::AFFIX_POS_PREFIX));
int32_t afterPrefixPos = sb.length();
// Figure out the grouping sizes.
@@ -778,7 +778,7 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP
// Suffixes
int32_t beforeSuffixPos = sb.length();
- sb.append(affixes.getString(AffixPatternProvider::AFFIX_POS_SUFFIX));
+ sb.append(affixProvider.get().getString(AffixPatternProvider::AFFIX_POS_SUFFIX));
// Resolve Padding
if (paddingWidth > 0 && !paddingLocation.isNull()) {
@@ -814,16 +814,16 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP
// Negative affixes
// Ignore if the negative prefix pattern is "-" and the negative suffix is empty
- if (affixes.hasNegativeSubpattern()) {
+ if (affixProvider.get().hasNegativeSubpattern()) {
sb.append(u';');
- sb.append(affixes.getString(AffixPatternProvider::AFFIX_NEG_PREFIX));
+ sb.append(affixProvider.get().getString(AffixPatternProvider::AFFIX_NEG_PREFIX));
// Copy the positive digit format into the negative.
// This is optional; the pattern is the same as if '#' were appended here instead.
// NOTE: It is not safe to append the UnicodeString to itself, so we need to copy.
// See http://bugs.icu-project.org/trac/ticket/13707
UnicodeString copy(sb);
sb.append(copy, afterPrefixPos, beforeSuffixPos - afterPrefixPos);
- sb.append(affixes.getString(AffixPatternProvider::AFFIX_NEG_SUFFIX));
+ sb.append(affixProvider.get().getString(AffixPatternProvider::AFFIX_NEG_SUFFIX));
}
return sb;
@@ -1000,23 +1000,19 @@ PatternStringUtils::convertLocalized(const UnicodeString& input, const DecimalFo
}
void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider& patternInfo, bool isPrefix,
- Signum signum, UNumberSignDisplay signDisplay,
+ PatternSignType patternSignType,
StandardPlural::Form plural,
bool perMilleReplacesPercent, UnicodeString& output) {
// Should the output render '+' where '-' would normally appear in the pattern?
- bool plusReplacesMinusSign = signum != -1 && (
- signDisplay == UNUM_SIGN_ALWAYS || signDisplay == UNUM_SIGN_ACCOUNTING_ALWAYS || (
- signum == 1 && (
- signDisplay == UNUM_SIGN_EXCEPT_ZERO ||
- signDisplay == UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO))) &&
- patternInfo.positiveHasPlusSign() == false;
-
- // Should we use the affix from the negative subpattern? (If not, we will use the positive
- // subpattern.)
- // TODO: Deal with signum
- bool useNegativeAffixPattern = patternInfo.hasNegativeSubpattern() && (
- signum == -1 || (patternInfo.negativeHasMinusSign() && plusReplacesMinusSign));
+ bool plusReplacesMinusSign = (patternSignType == PATTERN_SIGN_TYPE_POS_SIGN)
+ && !patternInfo.positiveHasPlusSign();
+
+ // Should we use the affix from the negative subpattern?
+ // (If not, we will use the positive subpattern.)
+ bool useNegativeAffixPattern = patternInfo.hasNegativeSubpattern()
+ && (patternSignType == PATTERN_SIGN_TYPE_NEG
+ || (patternInfo.negativeHasMinusSign() && plusReplacesMinusSign));
// Resolve the flags for the affix pattern.
int flags = 0;
@@ -1035,8 +1031,8 @@ void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider&
bool prependSign;
if (!isPrefix || useNegativeAffixPattern) {
prependSign = false;
- } else if (signum == -1) {
- prependSign = signDisplay != UNUM_SIGN_NEVER;
+ } else if (patternSignType == PATTERN_SIGN_TYPE_NEG) {
+ prependSign = true;
} else {
prependSign = plusReplacesMinusSign;
}
@@ -1065,4 +1061,60 @@ void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider&
}
}
+PatternSignType PatternStringUtils::resolveSignDisplay(UNumberSignDisplay signDisplay, Signum signum) {
+ switch (signDisplay) {
+ case UNUM_SIGN_AUTO:
+ case UNUM_SIGN_ACCOUNTING:
+ switch (signum) {
+ case SIGNUM_NEG:
+ case SIGNUM_NEG_ZERO:
+ return PATTERN_SIGN_TYPE_NEG;
+ case SIGNUM_POS_ZERO:
+ case SIGNUM_POS:
+ return PATTERN_SIGN_TYPE_POS;
+ default:
+ break;
+ }
+ break;
+
+ case UNUM_SIGN_ALWAYS:
+ case UNUM_SIGN_ACCOUNTING_ALWAYS:
+ switch (signum) {
+ case SIGNUM_NEG:
+ case SIGNUM_NEG_ZERO:
+ return PATTERN_SIGN_TYPE_NEG;
+ case SIGNUM_POS_ZERO:
+ case SIGNUM_POS:
+ return PATTERN_SIGN_TYPE_POS_SIGN;
+ default:
+ break;
+ }
+ break;
+
+ case UNUM_SIGN_EXCEPT_ZERO:
+ case UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO:
+ switch (signum) {
+ case SIGNUM_NEG:
+ return PATTERN_SIGN_TYPE_NEG;
+ case SIGNUM_NEG_ZERO:
+ case SIGNUM_POS_ZERO:
+ return PATTERN_SIGN_TYPE_POS;
+ case SIGNUM_POS:
+ return PATTERN_SIGN_TYPE_POS_SIGN;
+ default:
+ break;
+ }
+ break;
+
+ case UNUM_SIGN_NEVER:
+ return PATTERN_SIGN_TYPE_POS;
+
+ default:
+ break;
+ }
+
+ UPRV_UNREACHABLE;
+ return PATTERN_SIGN_TYPE_POS;
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
index 1191d298287..54f37fd7e2f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
@@ -22,6 +22,18 @@ namespace impl {
// Forward declaration
class PatternParser;
+// Note: the order of fields in this enum matters for parsing.
+enum PatternSignType {
+ /** Render using normal positive subpattern rules */
+ PATTERN_SIGN_TYPE_POS,
+ /** Render using rules to force the display of a plus sign */
+ PATTERN_SIGN_TYPE_POS_SIGN,
+ /** Render using negative subpattern rules */
+ PATTERN_SIGN_TYPE_NEG,
+ /** Count for looping over the possibilities */
+ PATTERN_SIGN_TYPE_COUNT
+};
+
// Exported as U_I18N_API because it is a public member field of exported ParsedSubpatternInfo
struct U_I18N_API Endpoints {
int32_t start = 0;
@@ -295,10 +307,12 @@ class U_I18N_API PatternStringUtils {
* substitution, and plural forms for CurrencyPluralInfo.
*/
static void patternInfoToStringBuilder(const AffixPatternProvider& patternInfo, bool isPrefix,
- Signum signum, UNumberSignDisplay signDisplay,
+ PatternSignType patternSignType,
StandardPlural::Form plural, bool perMilleReplacesPercent,
UnicodeString& output);
+ static PatternSignType resolveSignDisplay(UNumberSignDisplay signDisplay, Signum signum);
+
private:
/** @return The number of chars inserted. */
static int escapePaddingString(UnicodeString input, UnicodeString& output, int startIndex,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
index 813d4b680d4..a8fd6bc892a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
@@ -5,13 +5,16 @@
#if !UCONFIG_NO_FORMATTING
+#include "charstr.h"
#include "uassert.h"
#include "unicode/numberformatter.h"
#include "number_types.h"
#include "number_decimalquantity.h"
#include "double-conversion.h"
#include "number_roundingutils.h"
+#include "number_skeletons.h"
#include "putilimp.h"
+#include "string_segment.h"
using namespace icu;
using namespace icu::number;
@@ -19,6 +22,39 @@ using namespace icu::number::impl;
using double_conversion::DoubleToStringConverter;
+using icu::StringSegment;
+
+void number::impl::parseIncrementOption(const StringSegment &segment,
+ Precision &outPrecision,
+ UErrorCode &status) {
+ // Need to do char <-> UChar conversion...
+ U_ASSERT(U_SUCCESS(status));
+ CharString buffer;
+ SKELETON_UCHAR_TO_CHAR(buffer, segment.toTempUnicodeString(), 0, segment.length(), status);
+
+ // Utilize DecimalQuantity/decNumber to parse this for us.
+ DecimalQuantity dq;
+ UErrorCode localStatus = U_ZERO_ERROR;
+ dq.setToDecNumber({buffer.data(), buffer.length()}, localStatus);
+ if (U_FAILURE(localStatus)) {
+ // throw new SkeletonSyntaxException("Invalid rounding increment", segment, e);
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return;
+ }
+ double increment = dq.toDouble();
+
+ // We also need to figure out how many digits. Do a brute force string operation.
+ int decimalOffset = 0;
+ while (decimalOffset < segment.length() && segment.charAt(decimalOffset) != '.') {
+ decimalOffset++;
+ }
+ if (decimalOffset == segment.length()) {
+ outPrecision = Precision::increment(increment);
+ } else {
+ int32_t fractionLength = segment.length() - decimalOffset - 1;
+ outPrecision = Precision::increment(increment).withMinFraction(fractionLength);
+ }
+}
namespace {
@@ -84,7 +120,7 @@ digits_t roundingutils::doubleFractionLength(double input, int8_t* singleDigit)
Precision Precision::unlimited() {
- return Precision(RND_NONE, {}, kDefaultMode);
+ return Precision(RND_NONE, {});
}
FractionPrecision Precision::integer() {
@@ -229,7 +265,7 @@ FractionPrecision Precision::constructFraction(int32_t minFrac, int32_t maxFrac)
settings.fMaxSig = -1;
PrecisionUnion union_;
union_.fracSig = settings;
- return {RND_FRACTION, union_, kDefaultMode};
+ return {RND_FRACTION, union_};
}
Precision Precision::constructSignificant(int32_t minSig, int32_t maxSig) {
@@ -240,7 +276,7 @@ Precision Precision::constructSignificant(int32_t minSig, int32_t maxSig) {
settings.fMaxSig = static_cast<digits_t>(maxSig);
PrecisionUnion union_;
union_.fracSig = settings;
- return {RND_SIGNIFICANT, union_, kDefaultMode};
+ return {RND_SIGNIFICANT, union_};
}
Precision
@@ -250,7 +286,7 @@ Precision::constructFractionSignificant(const FractionPrecision &base, int32_t m
settings.fMaxSig = static_cast<digits_t>(maxSig);
PrecisionUnion union_;
union_.fracSig = settings;
- return {RND_FRACTION_SIGNIFICANT, union_, kDefaultMode};
+ return {RND_FRACTION_SIGNIFICANT, union_};
}
IncrementPrecision Precision::constructIncrement(double increment, int32_t minFrac) {
@@ -270,18 +306,18 @@ IncrementPrecision Precision::constructIncrement(double increment, int32_t minFr
// NOTE: In C++, we must return the correct value type with the correct union.
// It would be invalid to return a RND_FRACTION here because the methods on the
// IncrementPrecision type assume that the union is backed by increment data.
- return {RND_INCREMENT_ONE, union_, kDefaultMode};
+ return {RND_INCREMENT_ONE, union_};
} else if (singleDigit == 5) {
- return {RND_INCREMENT_FIVE, union_, kDefaultMode};
+ return {RND_INCREMENT_FIVE, union_};
} else {
- return {RND_INCREMENT, union_, kDefaultMode};
+ return {RND_INCREMENT, union_};
}
}
CurrencyPrecision Precision::constructCurrency(UCurrencyUsage usage) {
PrecisionUnion union_;
union_.currencyUsage = usage;
- return {RND_CURRENCY, union_, kDefaultMode};
+ return {RND_CURRENCY, union_};
}
@@ -294,9 +330,7 @@ RoundingImpl::RoundingImpl(const Precision& precision, UNumberFormatRoundingMode
}
RoundingImpl RoundingImpl::passThrough() {
- RoundingImpl retval;
- retval.fPassThrough = true;
- return retval;
+ return {};
}
bool RoundingImpl::isSignificantDigits() const {
@@ -343,6 +377,9 @@ RoundingImpl::chooseMultiplierAndApply(impl::DecimalQuantity &input, const impl:
/** This is the method that contains the actual rounding logic. */
void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return;
+ }
if (fPassThrough) {
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h b/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
index 9c2c47b6e41..e85cbae9fdd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
@@ -8,6 +8,7 @@
#define __NUMBER_ROUNDINGUTILS_H__
#include "number_types.h"
+#include "string_segment.h"
U_NAMESPACE_BEGIN
namespace number {
@@ -44,6 +45,9 @@ enum Section {
inline bool
getRoundingDirection(bool isEven, bool isNegative, Section section, RoundingMode roundingMode,
UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return false;
+ }
switch (roundingMode) {
case RoundingMode::UNUM_ROUND_UP:
// round away from zero
@@ -150,7 +154,7 @@ digits_t doubleFractionLength(double input, int8_t* singleDigit);
*/
class RoundingImpl {
public:
- RoundingImpl() = default; // default constructor: leaves object in undefined state
+ RoundingImpl() = default; // defaults to pass-through rounder
RoundingImpl(const Precision& precision, UNumberFormatRoundingMode roundingMode,
const CurrencyUnit& currency, UErrorCode& status);
@@ -186,9 +190,23 @@ class RoundingImpl {
private:
Precision fPrecision;
UNumberFormatRoundingMode fRoundingMode;
- bool fPassThrough;
+ bool fPassThrough = true; // default value
+
+ // Permits access to fPrecision.
+ friend class units::UnitsRouter;
+
+ // Permits access to fPrecision.
+ friend class UnitConversionHandler;
};
+/**
+ * Parses Precision-related skeleton strings without knowledge of MacroProps
+ * - see blueprint_helpers::parseIncrementOption().
+ *
+ * Referencing MacroProps means needing to pull in the .o files that have the
+ * destructors for the SymbolsWrapper, Usage, and Scale classes.
+ */
+void parseIncrementOption(const StringSegment &segment, Precision &outPrecision, UErrorCode &status);
} // namespace impl
} // namespace number
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
index f3de7414125..527ffbf78df 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
@@ -44,21 +44,21 @@ int32_t ScientificModifier::apply(FormattedStringBuilder &output, int32_t /*left
i += output.insert(
i,
fHandler->fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kExponentialSymbol),
- UNUM_EXPONENT_SYMBOL_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_EXPONENT_SYMBOL_FIELD},
status);
if (fExponent < 0 && fHandler->fSettings.fExponentSignDisplay != UNUM_SIGN_NEVER) {
i += output.insert(
i,
fHandler->fSymbols
->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kMinusSignSymbol),
- UNUM_EXPONENT_SIGN_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_EXPONENT_SIGN_FIELD},
status);
} else if (fExponent >= 0 && fHandler->fSettings.fExponentSignDisplay == UNUM_SIGN_ALWAYS) {
i += output.insert(
i,
fHandler->fSymbols
->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPlusSignSymbol),
- UNUM_EXPONENT_SIGN_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_EXPONENT_SIGN_FIELD},
status);
}
// Append the exponent digits (using a simple inline algorithm)
@@ -70,7 +70,7 @@ int32_t ScientificModifier::apply(FormattedStringBuilder &output, int32_t /*left
i - j,
d,
*fHandler->fSymbols,
- UNUM_EXPONENT_FIELD,
+ {UFIELD_CATEGORY_NUMBER, UNUM_EXPONENT_FIELD},
status);
}
return i - rightIndex;
@@ -93,7 +93,7 @@ bool ScientificModifier::isStrong() const {
return true;
}
-bool ScientificModifier::containsField(UNumberFormatFields field) const {
+bool ScientificModifier::containsField(Field field) const {
(void)field;
// This method is not used for inner modifiers.
UPRV_UNREACHABLE;
@@ -149,6 +149,11 @@ void ScientificHandler::processQuantity(DecimalQuantity &quantity, MicroProps &m
mod.set(exponent, this);
micros.modInner = &mod;
+ // Change the exponent only after we select appropriate plural form
+ // for formatting purposes so that we preserve expected formatted
+ // string behavior.
+ quantity.adjustExponent(exponent);
+
// We already performed rounding. Do not perform it again.
micros.rounder = RoundingImpl::passThrough();
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
index 1c9ce1efa80..a55d5ed1d41 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
@@ -30,7 +30,7 @@ class U_I18N_API ScientificModifier : public UMemory, public Modifier {
bool isStrong() const U_OVERRIDE;
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
+ bool containsField(Field field) const U_OVERRIDE;
void getParameters(Parameters& output) const U_OVERRIDE;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
index 4025539239b..028525a589d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
@@ -10,6 +10,7 @@
#define UNISTR_FROM_STRING_EXPLICIT
#include "number_decnum.h"
+#include "number_roundingutils.h"
#include "number_skeletons.h"
#include "umutex.h"
#include "ucln_in.h"
@@ -21,6 +22,9 @@
#include "uinvchar.h"
#include "charstr.h"
#include "string_segment.h"
+#include "unicode/errorcode.h"
+#include "util.h"
+#include "measunit_impl.h"
using namespace icu;
using namespace icu::number;
@@ -77,6 +81,8 @@ void U_CALLCONV initNumberSkeletons(UErrorCode& status) {
b.add(u"unit-width-short", STEM_UNIT_WIDTH_SHORT, status);
b.add(u"unit-width-full-name", STEM_UNIT_WIDTH_FULL_NAME, status);
b.add(u"unit-width-iso-code", STEM_UNIT_WIDTH_ISO_CODE, status);
+ b.add(u"unit-width-formal", STEM_UNIT_WIDTH_FORMAL, status);
+ b.add(u"unit-width-variant", STEM_UNIT_WIDTH_VARIANT, status);
b.add(u"unit-width-hidden", STEM_UNIT_WIDTH_HIDDEN, status);
b.add(u"sign-auto", STEM_SIGN_AUTO, status);
b.add(u"sign-always", STEM_SIGN_ALWAYS, status);
@@ -93,12 +99,30 @@ void U_CALLCONV initNumberSkeletons(UErrorCode& status) {
b.add(u"precision-increment", STEM_PRECISION_INCREMENT, status);
b.add(u"measure-unit", STEM_MEASURE_UNIT, status);
b.add(u"per-measure-unit", STEM_PER_MEASURE_UNIT, status);
+ b.add(u"unit", STEM_UNIT, status);
+ b.add(u"usage", STEM_UNIT_USAGE, status);
b.add(u"currency", STEM_CURRENCY, status);
b.add(u"integer-width", STEM_INTEGER_WIDTH, status);
b.add(u"numbering-system", STEM_NUMBERING_SYSTEM, status);
b.add(u"scale", STEM_SCALE, status);
if (U_FAILURE(status)) { return; }
+ // Section 3 (concise tokens):
+ b.add(u"K", STEM_COMPACT_SHORT, status);
+ b.add(u"KK", STEM_COMPACT_LONG, status);
+ b.add(u"%", STEM_PERCENT, status);
+ b.add(u"%x100", STEM_PERCENT_100, status);
+ b.add(u",_", STEM_GROUP_OFF, status);
+ b.add(u",?", STEM_GROUP_MIN2, status);
+ b.add(u",!", STEM_GROUP_ON_ALIGNED, status);
+ b.add(u"+!", STEM_SIGN_ALWAYS, status);
+ b.add(u"+_", STEM_SIGN_NEVER, status);
+ b.add(u"()", STEM_SIGN_ACCOUNTING, status);
+ b.add(u"()!", STEM_SIGN_ACCOUNTING_ALWAYS, status);
+ b.add(u"+?", STEM_SIGN_EXCEPT_ZERO, status);
+ b.add(u"()?", STEM_SIGN_ACCOUNTING_EXCEPT_ZERO, status);
+ if (U_FAILURE(status)) { return; }
+
// Build the CharsTrie
// TODO: Use SLOW or FAST here?
UnicodeString result;
@@ -129,21 +153,6 @@ UPRV_BLOCK_MACRO_BEGIN { \
} UPRV_BLOCK_MACRO_END
-#define SKELETON_UCHAR_TO_CHAR(dest, src, start, end, status) (void)(dest); \
-UPRV_BLOCK_MACRO_BEGIN { \
- UErrorCode conversionStatus = U_ZERO_ERROR; \
- (dest).appendInvariantChars({FALSE, (src).getBuffer() + (start), (end) - (start)}, conversionStatus); \
- if (conversionStatus == U_INVARIANT_CONVERSION_ERROR) { \
- /* Don't propagate the invariant conversion error; it is a skeleton syntax error */ \
- (status) = U_NUMBER_SKELETON_SYNTAX_ERROR; \
- return; \
- } else if (U_FAILURE(conversionStatus)) { \
- (status) = conversionStatus; \
- return; \
- } \
-} UPRV_BLOCK_MACRO_END
-
-
} // anonymous namespace
@@ -167,14 +176,11 @@ Notation stem_to_object::notation(skeleton::StemEnum stem) {
MeasureUnit stem_to_object::unit(skeleton::StemEnum stem) {
switch (stem) {
case STEM_BASE_UNIT:
- // Slicing is okay
- return NoUnit::base(); // NOLINT
+ return MeasureUnit();
case STEM_PERCENT:
- // Slicing is okay
- return NoUnit::percent(); // NOLINT
+ return MeasureUnit::getPercent();
case STEM_PERMILLE:
- // Slicing is okay
- return NoUnit::permille(); // NOLINT
+ return MeasureUnit::getPermille();
default:
UPRV_UNREACHABLE;
}
@@ -245,6 +251,10 @@ UNumberUnitWidth stem_to_object::unitWidth(skeleton::StemEnum stem) {
return UNUM_UNIT_WIDTH_FULL_NAME;
case STEM_UNIT_WIDTH_ISO_CODE:
return UNUM_UNIT_WIDTH_ISO_CODE;
+ case STEM_UNIT_WIDTH_FORMAL:
+ return UNUM_UNIT_WIDTH_FORMAL;
+ case STEM_UNIT_WIDTH_VARIANT:
+ return UNUM_UNIT_WIDTH_VARIANT;
case STEM_UNIT_WIDTH_HIDDEN:
return UNUM_UNIT_WIDTH_HIDDEN;
default:
@@ -352,6 +362,12 @@ void enum_to_stem_string::unitWidth(UNumberUnitWidth value, UnicodeString& sb) {
case UNUM_UNIT_WIDTH_ISO_CODE:
sb.append(u"unit-width-iso-code", -1);
break;
+ case UNUM_UNIT_WIDTH_FORMAL:
+ sb.append(u"unit-width-formal", -1);
+ break;
+ case UNUM_UNIT_WIDTH_VARIANT:
+ sb.append(u"unit-width-variant", -1);
+ break;
case UNUM_UNIT_WIDTH_HIDDEN:
sb.append(u"unit-width-hidden", -1);
break;
@@ -450,6 +466,7 @@ UnicodeString skeleton::generate(const MacroProps& macros, UErrorCode& status) {
MacroProps skeleton::parseSkeleton(
const UnicodeString& skeletonString, int32_t& errOffset, UErrorCode& status) {
U_ASSERT(U_SUCCESS(status));
+ U_ASSERT(kSerializedStemTrie != nullptr);
// Add a trailing whitespace to the end of the skeleton string to make code cleaner.
UnicodeString tempSkeletonString(skeletonString);
@@ -529,6 +546,8 @@ MacroProps skeleton::parseSkeleton(
case STATE_INCREMENT_PRECISION:
case STATE_MEASURE_UNIT:
case STATE_PER_MEASURE_UNIT:
+ case STATE_IDENTIFIER_UNIT:
+ case STATE_UNIT_USAGE:
case STATE_CURRENCY_UNIT:
case STATE_INTEGER_WIDTH:
case STATE_NUMBERING_SYSTEM:
@@ -554,16 +573,26 @@ MacroProps skeleton::parseSkeleton(
ParseState
skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, SeenMacroProps& seen,
MacroProps& macros, UErrorCode& status) {
+ U_ASSERT(U_SUCCESS(status));
+
// First check for "blueprint" stems, which start with a "signal char"
switch (segment.charAt(0)) {
case u'.':
- CHECK_NULL(seen, precision, status);
+ CHECK_NULL(seen, precision, status);
blueprint_helpers::parseFractionStem(segment, macros, status);
return STATE_FRACTION_PRECISION;
case u'@':
- CHECK_NULL(seen, precision, status);
+ CHECK_NULL(seen, precision, status);
blueprint_helpers::parseDigitsStem(segment, macros, status);
return STATE_NULL;
+ case u'E':
+ CHECK_NULL(seen, notation, status);
+ blueprint_helpers::parseScientificStem(segment, macros, status);
+ return STATE_NULL;
+ case u'0':
+ CHECK_NULL(seen, integerWidth, status);
+ blueprint_helpers::parseIntegerStem(segment, macros, status);
+ return STATE_NULL;
default:
break;
}
@@ -587,7 +616,7 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_SCIENTIFIC:
case STEM_ENGINEERING:
case STEM_NOTATION_SIMPLE:
- CHECK_NULL(seen, notation, status);
+ CHECK_NULL(seen, notation, status);
macros.notation = stem_to_object::notation(stem);
switch (stem) {
case STEM_SCIENTIFIC:
@@ -600,15 +629,22 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_BASE_UNIT:
case STEM_PERCENT:
case STEM_PERMILLE:
- CHECK_NULL(seen, unit, status);
+ CHECK_NULL(seen, unit, status);
macros.unit = stem_to_object::unit(stem);
return STATE_NULL;
+ case STEM_PERCENT_100:
+ CHECK_NULL(seen, scale, status);
+ CHECK_NULL(seen, unit, status);
+ macros.scale = Scale::powerOfTen(2);
+ macros.unit = NoUnit::percent();
+ return STATE_NULL;
+
case STEM_PRECISION_INTEGER:
case STEM_PRECISION_UNLIMITED:
case STEM_PRECISION_CURRENCY_STANDARD:
case STEM_PRECISION_CURRENCY_CASH:
- CHECK_NULL(seen, precision, status);
+ CHECK_NULL(seen, precision, status);
macros.precision = stem_to_object::precision(stem);
switch (stem) {
case STEM_PRECISION_INTEGER:
@@ -625,7 +661,7 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_ROUNDING_MODE_HALF_DOWN:
case STEM_ROUNDING_MODE_HALF_UP:
case STEM_ROUNDING_MODE_UNNECESSARY:
- CHECK_NULL(seen, roundingMode, status);
+ CHECK_NULL(seen, roundingMode, status);
macros.roundingMode = stem_to_object::roundingMode(stem);
return STATE_NULL;
@@ -634,12 +670,12 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_GROUP_AUTO:
case STEM_GROUP_ON_ALIGNED:
case STEM_GROUP_THOUSANDS:
- CHECK_NULL(seen, grouper, status);
+ CHECK_NULL(seen, grouper, status);
macros.grouper = Grouper::forStrategy(stem_to_object::groupingStrategy(stem));
return STATE_NULL;
case STEM_LATIN:
- CHECK_NULL(seen, symbols, status);
+ CHECK_NULL(seen, symbols, status);
macros.symbols.setTo(NumberingSystem::createInstanceByName("latn", status));
return STATE_NULL;
@@ -647,8 +683,10 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_UNIT_WIDTH_SHORT:
case STEM_UNIT_WIDTH_FULL_NAME:
case STEM_UNIT_WIDTH_ISO_CODE:
+ case STEM_UNIT_WIDTH_FORMAL:
+ case STEM_UNIT_WIDTH_VARIANT:
case STEM_UNIT_WIDTH_HIDDEN:
- CHECK_NULL(seen, unitWidth, status);
+ CHECK_NULL(seen, unitWidth, status);
macros.unitWidth = stem_to_object::unitWidth(stem);
return STATE_NULL;
@@ -659,44 +697,54 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_SIGN_ACCOUNTING_ALWAYS:
case STEM_SIGN_EXCEPT_ZERO:
case STEM_SIGN_ACCOUNTING_EXCEPT_ZERO:
- CHECK_NULL(seen, sign, status);
+ CHECK_NULL(seen, sign, status);
macros.sign = stem_to_object::signDisplay(stem);
return STATE_NULL;
case STEM_DECIMAL_AUTO:
case STEM_DECIMAL_ALWAYS:
- CHECK_NULL(seen, decimal, status);
+ CHECK_NULL(seen, decimal, status);
macros.decimal = stem_to_object::decimalSeparatorDisplay(stem);
return STATE_NULL;
- // Stems requiring an option:
+ // Stems requiring an option:
case STEM_PRECISION_INCREMENT:
- CHECK_NULL(seen, precision, status);
+ CHECK_NULL(seen, precision, status);
return STATE_INCREMENT_PRECISION;
case STEM_MEASURE_UNIT:
- CHECK_NULL(seen, unit, status);
+ CHECK_NULL(seen, unit, status);
return STATE_MEASURE_UNIT;
case STEM_PER_MEASURE_UNIT:
- CHECK_NULL(seen, perUnit, status);
+ CHECK_NULL(seen, perUnit, status);
return STATE_PER_MEASURE_UNIT;
+ case STEM_UNIT:
+ CHECK_NULL(seen, unit, status);
+ CHECK_NULL(seen, perUnit, status);
+ return STATE_IDENTIFIER_UNIT;
+
+ case STEM_UNIT_USAGE:
+ CHECK_NULL(seen, usage, status);
+ return STATE_UNIT_USAGE;
+
case STEM_CURRENCY:
- CHECK_NULL(seen, unit, status);
+ CHECK_NULL(seen, unit, status);
+ CHECK_NULL(seen, perUnit, status);
return STATE_CURRENCY_UNIT;
case STEM_INTEGER_WIDTH:
- CHECK_NULL(seen, integerWidth, status);
+ CHECK_NULL(seen, integerWidth, status);
return STATE_INTEGER_WIDTH;
case STEM_NUMBERING_SYSTEM:
- CHECK_NULL(seen, symbols, status);
+ CHECK_NULL(seen, symbols, status);
return STATE_NUMBERING_SYSTEM;
case STEM_SCALE:
- CHECK_NULL(seen, scale, status);
+ CHECK_NULL(seen, scale, status);
return STATE_SCALE;
default:
@@ -706,6 +754,7 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
ParseState skeleton::parseOption(ParseState stem, const StringSegment& segment, MacroProps& macros,
UErrorCode& status) {
+ U_ASSERT(U_SUCCESS(status));
///// Required options: /////
@@ -719,6 +768,12 @@ ParseState skeleton::parseOption(ParseState stem, const StringSegment& segment,
case STATE_PER_MEASURE_UNIT:
blueprint_helpers::parseMeasurePerUnitOption(segment, macros, status);
return STATE_NULL;
+ case STATE_IDENTIFIER_UNIT:
+ blueprint_helpers::parseIdentifierUnitOption(segment, macros, status);
+ return STATE_NULL;
+ case STATE_UNIT_USAGE:
+ blueprint_helpers::parseUnitUsageOption(segment, macros, status);
+ return STATE_NULL;
case STATE_INCREMENT_PRECISION:
blueprint_helpers::parseIncrementOption(segment, macros, status);
return STATE_NULL;
@@ -789,7 +844,7 @@ void GeneratorHelpers::generateSkeleton(const MacroProps& macros, UnicodeString&
sb.append(u' ');
}
if (U_FAILURE(status)) { return; }
- if (GeneratorHelpers::perUnit(macros, sb, status)) {
+ if (GeneratorHelpers::usage(macros, sb, status)) {
sb.append(u' ');
}
if (U_FAILURE(status)) { return; }
@@ -843,10 +898,6 @@ void GeneratorHelpers::generateSkeleton(const MacroProps& macros, UnicodeString&
status = U_UNSUPPORTED_ERROR;
return;
}
- if (macros.currencySymbols != nullptr) {
- status = U_UNSUPPORTED_ERROR;
- return;
- }
// Remove the trailing space
if (sb.length() > 0) {
@@ -857,7 +908,7 @@ void GeneratorHelpers::generateSkeleton(const MacroProps& macros, UnicodeString&
bool blueprint_helpers::parseExponentWidthOption(const StringSegment& segment, MacroProps& macros,
UErrorCode&) {
- if (segment.charAt(0) != u'+') {
+ if (!isWildcardChar(segment.charAt(0))) {
return false;
}
int32_t offset = 1;
@@ -879,7 +930,7 @@ bool blueprint_helpers::parseExponentWidthOption(const StringSegment& segment, M
void
blueprint_helpers::generateExponentWidthOption(int32_t minExponentDigits, UnicodeString& sb, UErrorCode&) {
- sb.append(u'+');
+ sb.append(kWildcardChar);
appendMultiple(sb, u'e', minExponentDigits);
}
@@ -928,6 +979,7 @@ blueprint_helpers::generateCurrencyOption(const CurrencyUnit& currency, UnicodeS
void blueprint_helpers::parseMeasureUnitOption(const StringSegment& segment, MacroProps& macros,
UErrorCode& status) {
+ U_ASSERT(U_SUCCESS(status));
const UnicodeString stemString = segment.toTempUnicodeString();
// NOTE: The category (type) of the unit is guaranteed to be a valid subtag (alphanumeric)
@@ -943,14 +995,13 @@ void blueprint_helpers::parseMeasureUnitOption(const StringSegment& segment, Mac
}
// Need to do char <-> UChar conversion...
- U_ASSERT(U_SUCCESS(status));
CharString type;
SKELETON_UCHAR_TO_CHAR(type, stemString, 0, firstHyphen, status);
CharString subType;
SKELETON_UCHAR_TO_CHAR(subType, stemString, firstHyphen + 1, stemString.length(), status);
- // Note: the largest type as of this writing (March 2018) is "volume", which has 24 units.
- static constexpr int32_t CAPACITY = 30;
+ // Note: the largest type as of this writing (Aug 2020) is "volume", which has 33 units.
+ static constexpr int32_t CAPACITY = 40;
MeasureUnit units[CAPACITY];
UErrorCode localStatus = U_ZERO_ERROR;
int32_t numUnits = MeasureUnit::getAvailable(type.data(), units, CAPACITY, localStatus);
@@ -971,17 +1022,9 @@ void blueprint_helpers::parseMeasureUnitOption(const StringSegment& segment, Mac
status = U_NUMBER_SKELETON_SYNTAX_ERROR;
}
-void blueprint_helpers::generateMeasureUnitOption(const MeasureUnit& measureUnit, UnicodeString& sb,
- UErrorCode&) {
- // Need to do char <-> UChar conversion...
- sb.append(UnicodeString(measureUnit.getType(), -1, US_INV));
- sb.append(u'-');
- sb.append(UnicodeString(measureUnit.getSubtype(), -1, US_INV));
-}
-
void blueprint_helpers::parseMeasurePerUnitOption(const StringSegment& segment, MacroProps& macros,
UErrorCode& status) {
- // A little bit of a hack: safe the current unit (numerator), call the main measure unit
+ // A little bit of a hack: save the current unit (numerator), call the main measure unit
// parsing code, put back the numerator unit, and put the new unit into per-unit.
MeasureUnit numerator = macros.unit;
parseMeasureUnitOption(segment, macros, status);
@@ -990,6 +1033,58 @@ void blueprint_helpers::parseMeasurePerUnitOption(const StringSegment& segment,
macros.unit = numerator;
}
+void blueprint_helpers::parseIdentifierUnitOption(const StringSegment& segment, MacroProps& macros,
+ UErrorCode& status) {
+ // Need to do char <-> UChar conversion...
+ U_ASSERT(U_SUCCESS(status));
+ CharString buffer;
+ SKELETON_UCHAR_TO_CHAR(buffer, segment.toTempUnicodeString(), 0, segment.length(), status);
+
+ ErrorCode internalStatus;
+ auto fullUnit = MeasureUnitImpl::forIdentifier(buffer.toStringPiece(), internalStatus);
+ if (internalStatus.isFailure()) {
+ // throw new SkeletonSyntaxException("Invalid core unit identifier", segment, e);
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return;
+ }
+
+ // Mixed units can only be represented by full MeasureUnit instances, so we
+ // don't split the denominator into macros.perUnit.
+ if (fullUnit.complexity == UMEASURE_UNIT_MIXED) {
+ macros.unit = std::move(fullUnit).build(status);
+ return;
+ }
+
+ // When we have a built-in unit (e.g. meter-per-second), we don't split it up
+ MeasureUnit testBuiltin = fullUnit.copy(status).build(status);
+ if (uprv_strcmp(testBuiltin.getType(), "") != 0) {
+ macros.unit = std::move(testBuiltin);
+ return;
+ }
+
+ // TODO(ICU-20941): Clean this up.
+ for (int32_t i = 0; i < fullUnit.units.length(); i++) {
+ SingleUnitImpl* subUnit = fullUnit.units[i];
+ if (subUnit->dimensionality > 0) {
+ macros.unit = macros.unit.product(subUnit->build(status), status);
+ } else {
+ subUnit->dimensionality *= -1;
+ macros.perUnit = macros.perUnit.product(subUnit->build(status), status);
+ }
+ }
+}
+
+void blueprint_helpers::parseUnitUsageOption(const StringSegment &segment, MacroProps &macros,
+ UErrorCode &status) {
+ // Need to do char <-> UChar conversion...
+ U_ASSERT(U_SUCCESS(status));
+ CharString buffer;
+ SKELETON_UCHAR_TO_CHAR(buffer, segment.toTempUnicodeString(), 0, segment.length(), status);
+ macros.usage.set(buffer.toStringPiece());
+ // We do not do any validation of the usage string: it depends on the
+ // unitPreferenceData in the units resources.
+}
+
void blueprint_helpers::parseFractionStem(const StringSegment& segment, MacroProps& macros,
UErrorCode& status) {
U_ASSERT(segment.charAt(0) == u'.');
@@ -1004,7 +1099,7 @@ void blueprint_helpers::parseFractionStem(const StringSegment& segment, MacroPro
}
}
if (offset < segment.length()) {
- if (segment.charAt(offset) == u'+') {
+ if (isWildcardChar(segment.charAt(offset))) {
maxFrac = -1;
offset++;
} else {
@@ -1027,7 +1122,11 @@ void blueprint_helpers::parseFractionStem(const StringSegment& segment, MacroPro
}
// Use the public APIs to enforce bounds checking
if (maxFrac == -1) {
- macros.precision = Precision::minFraction(minFrac);
+ if (minFrac == 0) {
+ macros.precision = Precision::unlimited();
+ } else {
+ macros.precision = Precision::minFraction(minFrac);
+ }
} else {
macros.precision = Precision::minMaxFraction(minFrac, maxFrac);
}
@@ -1042,7 +1141,7 @@ blueprint_helpers::generateFractionStem(int32_t minFrac, int32_t maxFrac, Unicod
sb.append(u'.');
appendMultiple(sb, u'0', minFrac);
if (maxFrac == -1) {
- sb.append(u'+');
+ sb.append(kWildcardChar);
} else {
appendMultiple(sb, u'#', maxFrac - minFrac);
}
@@ -1051,9 +1150,9 @@ blueprint_helpers::generateFractionStem(int32_t minFrac, int32_t maxFrac, Unicod
void
blueprint_helpers::parseDigitsStem(const StringSegment& segment, MacroProps& macros, UErrorCode& status) {
U_ASSERT(segment.charAt(0) == u'@');
- int offset = 0;
- int minSig = 0;
- int maxSig;
+ int32_t offset = 0;
+ int32_t minSig = 0;
+ int32_t maxSig;
for (; offset < segment.length(); offset++) {
if (segment.charAt(offset) == u'@') {
minSig++;
@@ -1062,7 +1161,7 @@ blueprint_helpers::parseDigitsStem(const StringSegment& segment, MacroProps& mac
}
}
if (offset < segment.length()) {
- if (segment.charAt(offset) == u'+') {
+ if (isWildcardChar(segment.charAt(offset))) {
maxSig = -1;
offset++;
} else {
@@ -1095,12 +1194,81 @@ void
blueprint_helpers::generateDigitsStem(int32_t minSig, int32_t maxSig, UnicodeString& sb, UErrorCode&) {
appendMultiple(sb, u'@', minSig);
if (maxSig == -1) {
- sb.append(u'+');
+ sb.append(kWildcardChar);
} else {
appendMultiple(sb, u'#', maxSig - minSig);
}
}
+void blueprint_helpers::parseScientificStem(const StringSegment& segment, MacroProps& macros, UErrorCode& status) {
+ U_ASSERT(segment.charAt(0) == u'E');
+ {
+ int32_t offset = 1;
+ if (segment.length() == offset) {
+ goto fail;
+ }
+ bool isEngineering = false;
+ if (segment.charAt(offset) == u'E') {
+ isEngineering = true;
+ offset++;
+ if (segment.length() == offset) {
+ goto fail;
+ }
+ }
+ UNumberSignDisplay signDisplay = UNUM_SIGN_AUTO;
+ if (segment.charAt(offset) == u'+') {
+ offset++;
+ if (segment.length() == offset) {
+ goto fail;
+ }
+ if (segment.charAt(offset) == u'!') {
+ signDisplay = UNUM_SIGN_ALWAYS;
+ } else if (segment.charAt(offset) == u'?') {
+ signDisplay = UNUM_SIGN_EXCEPT_ZERO;
+ } else {
+ goto fail;
+ }
+ offset++;
+ if (segment.length() == offset) {
+ goto fail;
+ }
+ }
+ int32_t minDigits = 0;
+ for (; offset < segment.length(); offset++) {
+ if (segment.charAt(offset) != u'0') {
+ goto fail;
+ }
+ minDigits++;
+ }
+ macros.notation = (isEngineering ? Notation::engineering() : Notation::scientific())
+ .withExponentSignDisplay(signDisplay)
+ .withMinExponentDigits(minDigits);
+ return;
+ }
+ fail: void();
+ // throw new SkeletonSyntaxException("Invalid scientific stem", segment);
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return;
+}
+
+void blueprint_helpers::parseIntegerStem(const StringSegment& segment, MacroProps& macros, UErrorCode& status) {
+ U_ASSERT(segment.charAt(0) == u'0');
+ int32_t offset = 1;
+ for (; offset < segment.length(); offset++) {
+ if (segment.charAt(offset) != u'0') {
+ offset--;
+ break;
+ }
+ }
+ if (offset < segment.length()) {
+ // throw new SkeletonSyntaxException("Invalid integer stem", segment);
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return;
+ }
+ macros.integerWidth = IntegerWidth::zeroFillTo(offset);
+ return;
+}
+
bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroProps& macros,
UErrorCode& status) {
if (segment.charAt(0) != u'@') {
@@ -1122,7 +1290,7 @@ bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroPr
// Invalid: @, @@, @@@
// Invalid: @@#, @@##, @@@#
if (offset < segment.length()) {
- if (segment.charAt(offset) == u'+') {
+ if (isWildcardChar(segment.charAt(offset))) {
maxSig = -1;
offset++;
} else if (minSig > 1) {
@@ -1161,35 +1329,9 @@ bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroPr
return true;
}
-void blueprint_helpers::parseIncrementOption(const StringSegment& segment, MacroProps& macros,
- UErrorCode& status) {
- // Need to do char <-> UChar conversion...
- U_ASSERT(U_SUCCESS(status));
- CharString buffer;
- SKELETON_UCHAR_TO_CHAR(buffer, segment.toTempUnicodeString(), 0, segment.length(), status);
-
- // Utilize DecimalQuantity/decNumber to parse this for us.
- DecimalQuantity dq;
- UErrorCode localStatus = U_ZERO_ERROR;
- dq.setToDecNumber({buffer.data(), buffer.length()}, localStatus);
- if (U_FAILURE(localStatus)) {
- // throw new SkeletonSyntaxException("Invalid rounding increment", segment, e);
- status = U_NUMBER_SKELETON_SYNTAX_ERROR;
- return;
- }
- double increment = dq.toDouble();
-
- // We also need to figure out how many digits. Do a brute force string operation.
- int decimalOffset = 0;
- while (decimalOffset < segment.length() && segment.charAt(decimalOffset) != '.') {
- decimalOffset++;
- }
- if (decimalOffset == segment.length()) {
- macros.precision = Precision::increment(increment);
- } else {
- int32_t fractionLength = segment.length() - decimalOffset - 1;
- macros.precision = Precision::increment(increment).withMinFraction(fractionLength);
- }
+void blueprint_helpers::parseIncrementOption(const StringSegment &segment, MacroProps &macros,
+ UErrorCode &status) {
+ number::impl::parseIncrementOption(segment, macros.precision, status);
}
void blueprint_helpers::generateIncrementOption(double increment, int32_t trailingZeros, UnicodeString& sb,
@@ -1211,7 +1353,7 @@ void blueprint_helpers::parseIntegerWidthOption(const StringSegment& segment, Ma
int32_t offset = 0;
int32_t minInt = 0;
int32_t maxInt;
- if (segment.charAt(0) == u'+') {
+ if (isWildcardChar(segment.charAt(0))) {
maxInt = -1;
offset++;
} else {
@@ -1252,7 +1394,7 @@ void blueprint_helpers::parseIntegerWidthOption(const StringSegment& segment, Ma
void blueprint_helpers::generateIntegerWidthOption(int32_t minInt, int32_t maxInt, UnicodeString& sb,
UErrorCode&) {
if (maxInt == -1) {
- sb.append(u'+');
+ sb.append(kWildcardChar);
} else {
appendMultiple(sb, u'#', maxInt - minInt);
}
@@ -1359,50 +1501,46 @@ bool GeneratorHelpers::notation(const MacroProps& macros, UnicodeString& sb, UEr
}
bool GeneratorHelpers::unit(const MacroProps& macros, UnicodeString& sb, UErrorCode& status) {
- if (utils::unitIsCurrency(macros.unit)) {
+ MeasureUnit unit = macros.unit;
+ if (!utils::unitIsBaseUnit(macros.perUnit)) {
+ if (utils::unitIsCurrency(macros.unit) || utils::unitIsCurrency(macros.perUnit)) {
+ status = U_UNSUPPORTED_ERROR;
+ return false;
+ }
+ unit = unit.product(macros.perUnit.reciprocal(status), status);
+ }
+
+ if (utils::unitIsCurrency(unit)) {
sb.append(u"currency/", -1);
- CurrencyUnit currency(macros.unit, status);
+ CurrencyUnit currency(unit, status);
if (U_FAILURE(status)) {
return false;
}
blueprint_helpers::generateCurrencyOption(currency, sb, status);
return true;
- } else if (utils::unitIsNoUnit(macros.unit)) {
- if (utils::unitIsPercent(macros.unit)) {
- sb.append(u"percent", -1);
- return true;
- } else if (utils::unitIsPermille(macros.unit)) {
- sb.append(u"permille", -1);
- return true;
- } else {
- // Default value is not shown in normalized form
- return false;
- }
+ } else if (utils::unitIsBaseUnit(unit)) {
+ // Default value is not shown in normalized form
+ return false;
+ } else if (utils::unitIsPercent(unit)) {
+ sb.append(u"percent", -1);
+ return true;
+ } else if (utils::unitIsPermille(unit)) {
+ sb.append(u"permille", -1);
+ return true;
} else {
- sb.append(u"measure-unit/", -1);
- blueprint_helpers::generateMeasureUnitOption(macros.unit, sb, status);
+ sb.append(u"unit/", -1);
+ sb.append(unit.getIdentifier());
return true;
}
}
-bool GeneratorHelpers::perUnit(const MacroProps& macros, UnicodeString& sb, UErrorCode& status) {
- // Per-units are currently expected to be only MeasureUnits.
- if (utils::unitIsNoUnit(macros.perUnit)) {
- if (utils::unitIsPercent(macros.perUnit) || utils::unitIsPermille(macros.perUnit)) {
- status = U_UNSUPPORTED_ERROR;
- return false;
- } else {
- // Default value: ok to ignore
- return false;
- }
- } else if (utils::unitIsCurrency(macros.perUnit)) {
- status = U_UNSUPPORTED_ERROR;
- return false;
- } else {
- sb.append(u"per-measure-unit/", -1);
- blueprint_helpers::generateMeasureUnitOption(macros.perUnit, sb, status);
+bool GeneratorHelpers::usage(const MacroProps& macros, UnicodeString& sb, UErrorCode& /* status */) {
+ if (macros.usage.isSet()) {
+ sb.append(u"usage/", -1);
+ sb.append(UnicodeString(macros.usage.fUsage, -1, US_INV));
return true;
}
+ return false;
}
bool GeneratorHelpers::precision(const MacroProps& macros, UnicodeString& sb, UErrorCode& status) {
@@ -1543,4 +1681,49 @@ bool GeneratorHelpers::scale(const MacroProps& macros, UnicodeString& sb, UError
}
+// Definitions of public API methods (put here for dependency disentanglement)
+
+#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
+// Ignore MSVC warning 4661. This is generated for NumberFormatterSettings<>::toSkeleton() as this method
+// is defined elsewhere (in number_skeletons.cpp). The compiler is warning that the explicit template instantiation
+// inside this single translation unit (CPP file) is incomplete, and thus it isn't sure if the template class is
+// fully defined. However, since each translation unit explicitly instantiates all the necessary template classes,
+// they will all be passed to the linker, and the linker will still find and export all the class members.
+#pragma warning(push)
+#pragma warning(disable: 4661)
+#endif
+
+template<typename Derived>
+UnicodeString NumberFormatterSettings<Derived>::toSkeleton(UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return ICU_Utility::makeBogusString();
+ }
+ if (fMacros.copyErrorTo(status)) {
+ return ICU_Utility::makeBogusString();
+ }
+ return skeleton::generate(fMacros, status);
+}
+
+// Declare all classes that implement NumberFormatterSettings
+// See https://stackoverflow.com/a/495056/1407170
+template
+class icu::number::NumberFormatterSettings<icu::number::UnlocalizedNumberFormatter>;
+template
+class icu::number::NumberFormatterSettings<icu::number::LocalizedNumberFormatter>;
+
+UnlocalizedNumberFormatter
+NumberFormatter::forSkeleton(const UnicodeString& skeleton, UErrorCode& status) {
+ return skeleton::create(skeleton, nullptr, status);
+}
+
+UnlocalizedNumberFormatter
+NumberFormatter::forSkeleton(const UnicodeString& skeleton, UParseError& perror, UErrorCode& status) {
+ return skeleton::create(skeleton, &perror, status);
+}
+
+#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
+// Warning 4661.
+#pragma warning(pop)
+#endif
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h
index 59af771928f..201267e635c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h
@@ -22,10 +22,12 @@ struct SeenMacroProps;
// namespace for enums and entrypoint functions
namespace skeleton {
-///////////////////////////////////////////////////////////////////////////////////////
-// NOTE: For an example of how to add a new stem to the number skeleton parser, see: //
-// http://bugs.icu-project.org/trac/changeset/41193 //
-///////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////
+// NOTE: For examples of how to add a new stem to the number skeleton parser, see: //
+// https://github.com/unicode-org/icu/commit/a2a7982216b2348070dc71093775ac7195793d73 //
+// and //
+// https://github.com/unicode-org/icu/commit/6fe86f3934a8a5701034f648a8f7c5087e84aa28 //
+////////////////////////////////////////////////////////////////////////////////////////
/**
* While parsing a skeleton, this enum records what type of option we expect to find next.
@@ -46,6 +48,8 @@ enum ParseState {
STATE_INCREMENT_PRECISION,
STATE_MEASURE_UNIT,
STATE_PER_MEASURE_UNIT,
+ STATE_IDENTIFIER_UNIT,
+ STATE_UNIT_USAGE,
STATE_CURRENCY_UNIT,
STATE_INTEGER_WIDTH,
STATE_NUMBERING_SYSTEM,
@@ -71,6 +75,7 @@ enum StemEnum {
STEM_BASE_UNIT,
STEM_PERCENT,
STEM_PERMILLE,
+ STEM_PERCENT_100, // concise-only
STEM_PRECISION_INTEGER,
STEM_PRECISION_UNLIMITED,
STEM_PRECISION_CURRENCY_STANDARD,
@@ -93,6 +98,8 @@ enum StemEnum {
STEM_UNIT_WIDTH_SHORT,
STEM_UNIT_WIDTH_FULL_NAME,
STEM_UNIT_WIDTH_ISO_CODE,
+ STEM_UNIT_WIDTH_FORMAL,
+ STEM_UNIT_WIDTH_VARIANT,
STEM_UNIT_WIDTH_HIDDEN,
STEM_SIGN_AUTO,
STEM_SIGN_ALWAYS,
@@ -109,12 +116,25 @@ enum StemEnum {
STEM_PRECISION_INCREMENT,
STEM_MEASURE_UNIT,
STEM_PER_MEASURE_UNIT,
+ STEM_UNIT,
+ STEM_UNIT_USAGE,
STEM_CURRENCY,
STEM_INTEGER_WIDTH,
STEM_NUMBERING_SYSTEM,
STEM_SCALE,
};
+/** Default wildcard char, accepted on input and printed in output */
+constexpr char16_t kWildcardChar = u'*';
+
+/** Alternative wildcard char, accept on input but not printed in output */
+constexpr char16_t kAltWildcardChar = u'+';
+
+/** Checks whether the char is a wildcard on input */
+inline bool isWildcardChar(char16_t c) {
+ return c == kWildcardChar || c == kAltWildcardChar;
+}
+
/**
* Creates a NumberFormatter corresponding to the given skeleton string.
*
@@ -220,12 +240,20 @@ void parseCurrencyOption(const StringSegment& segment, MacroProps& macros, UErro
void generateCurrencyOption(const CurrencyUnit& currency, UnicodeString& sb, UErrorCode& status);
+// "measure-unit/" is deprecated in favour of "unit/".
void parseMeasureUnitOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
-void generateMeasureUnitOption(const MeasureUnit& measureUnit, UnicodeString& sb, UErrorCode& status);
-
+// "per-measure-unit/" is deprecated in favour of "unit/".
void parseMeasurePerUnitOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+/**
+ * Parses unit identifiers like "meter-per-second" and "foot-and-inch", as
+ * specified via a "unit/" concise skeleton.
+ */
+void parseIdentifierUnitOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+
+void parseUnitUsageOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+
void parseFractionStem(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
void generateFractionStem(int32_t minFrac, int32_t maxFrac, UnicodeString& sb, UErrorCode& status);
@@ -234,6 +262,14 @@ void parseDigitsStem(const StringSegment& segment, MacroProps& macros, UErrorCod
void generateDigitsStem(int32_t minSig, int32_t maxSig, UnicodeString& sb, UErrorCode& status);
+void parseScientificStem(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+
+// Note: no generateScientificStem since this syntax was added later in ICU 67
+
+void parseIntegerStem(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+
+// Note: no generateIntegerStem since this syntax was added later in ICU 67
+
/** @return Whether we successfully found and parsed a frac-sig option. */
bool parseFracSigOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
@@ -278,7 +314,7 @@ class GeneratorHelpers {
static bool unit(const MacroProps& macros, UnicodeString& sb, UErrorCode& status);
- static bool perUnit(const MacroProps& macros, UnicodeString& sb, UErrorCode& status);
+ static bool usage(const MacroProps& macros, UnicodeString& sb, UErrorCode& status);
static bool precision(const MacroProps& macros, UnicodeString& sb, UErrorCode& status);
@@ -308,6 +344,7 @@ struct SeenMacroProps {
bool notation = false;
bool unit = false;
bool perUnit = false;
+ bool usage = false;
bool precision = false;
bool roundingMode = false;
bool grouper = false;
@@ -320,6 +357,24 @@ struct SeenMacroProps {
bool scale = false;
};
+namespace {
+
+#define SKELETON_UCHAR_TO_CHAR(dest, src, start, end, status) (void)(dest); \
+UPRV_BLOCK_MACRO_BEGIN { \
+ UErrorCode conversionStatus = U_ZERO_ERROR; \
+ (dest).appendInvariantChars({false, (src).getBuffer() + (start), (end) - (start)}, conversionStatus); \
+ if (conversionStatus == U_INVARIANT_CONVERSION_ERROR) { \
+ /* Don't propagate the invariant conversion error; it is a skeleton syntax error */ \
+ (status) = U_NUMBER_SKELETON_SYNTAX_ERROR; \
+ return; \
+ } else if (U_FAILURE(conversionStatus)) { \
+ (status) = conversionStatus; \
+ return; \
+ } \
+} UPRV_BLOCK_MACRO_END
+
+} // namespace
+
} // namespace impl
} // namespace number
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_symbolswrapper.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_symbolswrapper.cpp
new file mode 100644
index 00000000000..ac3043d1ca1
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_symbolswrapper.cpp
@@ -0,0 +1,131 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "number_microprops.h"
+#include "unicode/numberformatter.h"
+
+using namespace icu;
+using namespace icu::number;
+using namespace icu::number::impl;
+
+SymbolsWrapper::SymbolsWrapper(const SymbolsWrapper &other) {
+ doCopyFrom(other);
+}
+
+SymbolsWrapper::SymbolsWrapper(SymbolsWrapper &&src) U_NOEXCEPT {
+ doMoveFrom(std::move(src));
+}
+
+SymbolsWrapper &SymbolsWrapper::operator=(const SymbolsWrapper &other) {
+ if (this == &other) {
+ return *this;
+ }
+ doCleanup();
+ doCopyFrom(other);
+ return *this;
+}
+
+SymbolsWrapper &SymbolsWrapper::operator=(SymbolsWrapper &&src) U_NOEXCEPT {
+ if (this == &src) {
+ return *this;
+ }
+ doCleanup();
+ doMoveFrom(std::move(src));
+ return *this;
+}
+
+SymbolsWrapper::~SymbolsWrapper() {
+ doCleanup();
+}
+
+void SymbolsWrapper::setTo(const DecimalFormatSymbols &dfs) {
+ doCleanup();
+ fType = SYMPTR_DFS;
+ fPtr.dfs = new DecimalFormatSymbols(dfs);
+}
+
+void SymbolsWrapper::setTo(const NumberingSystem *ns) {
+ doCleanup();
+ fType = SYMPTR_NS;
+ fPtr.ns = ns;
+}
+
+void SymbolsWrapper::doCopyFrom(const SymbolsWrapper &other) {
+ fType = other.fType;
+ switch (fType) {
+ case SYMPTR_NONE:
+ // No action necessary
+ break;
+ case SYMPTR_DFS:
+ // Memory allocation failures are exposed in copyErrorTo()
+ if (other.fPtr.dfs != nullptr) {
+ fPtr.dfs = new DecimalFormatSymbols(*other.fPtr.dfs);
+ } else {
+ fPtr.dfs = nullptr;
+ }
+ break;
+ case SYMPTR_NS:
+ // Memory allocation failures are exposed in copyErrorTo()
+ if (other.fPtr.ns != nullptr) {
+ fPtr.ns = new NumberingSystem(*other.fPtr.ns);
+ } else {
+ fPtr.ns = nullptr;
+ }
+ break;
+ }
+}
+
+void SymbolsWrapper::doMoveFrom(SymbolsWrapper &&src) {
+ fType = src.fType;
+ switch (fType) {
+ case SYMPTR_NONE:
+ // No action necessary
+ break;
+ case SYMPTR_DFS:
+ fPtr.dfs = src.fPtr.dfs;
+ src.fPtr.dfs = nullptr;
+ break;
+ case SYMPTR_NS:
+ fPtr.ns = src.fPtr.ns;
+ src.fPtr.ns = nullptr;
+ break;
+ }
+}
+
+void SymbolsWrapper::doCleanup() {
+ switch (fType) {
+ case SYMPTR_NONE:
+ // No action necessary
+ break;
+ case SYMPTR_DFS:
+ delete fPtr.dfs;
+ break;
+ case SYMPTR_NS:
+ delete fPtr.ns;
+ break;
+ }
+}
+
+bool SymbolsWrapper::isDecimalFormatSymbols() const {
+ return fType == SYMPTR_DFS;
+}
+
+bool SymbolsWrapper::isNumberingSystem() const {
+ return fType == SYMPTR_NS;
+}
+
+const DecimalFormatSymbols *SymbolsWrapper::getDecimalFormatSymbols() const {
+ U_ASSERT(fType == SYMPTR_DFS);
+ return fPtr.dfs;
+}
+
+const NumberingSystem *SymbolsWrapper::getNumberingSystem() const {
+ U_ASSERT(fType == SYMPTR_NS);
+ return fPtr.ns;
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_types.h b/Build/source/libs/icu/icu-src/source/i18n/number_types.h
index d62aa6a66b3..8078851ba3f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_types.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_types.h
@@ -92,9 +92,11 @@ enum CompactType {
};
enum Signum {
- SIGNUM_NEG = -1,
- SIGNUM_ZERO = 0,
- SIGNUM_POS = 1
+ SIGNUM_NEG = 0,
+ SIGNUM_NEG_ZERO = 1,
+ SIGNUM_POS_ZERO = 2,
+ SIGNUM_POS = 3,
+ SIGNUM_COUNT = 4,
};
@@ -192,7 +194,7 @@ class U_I18N_API Modifier {
/**
* Whether the modifier contains at least one occurrence of the given field.
*/
- virtual bool containsField(UNumberFormatFields field) const = 0;
+ virtual bool containsField(Field field) const = 0;
/**
* A fill-in for getParameters(). obj will always be set; if non-null, the other
@@ -244,31 +246,31 @@ class U_I18N_API ModifierStore {
* itself. The {@link #processQuantity} method performs the final step in the number processing pipeline: it uses the
* quantity to generate a finalized {@link MicroProps}, which can be used to render the number to output.
*
- * <p>
* In other words, this interface is used for the parts of number processing that are <em>quantity-dependent</em>.
*
- * <p>
* In order to allow for multiple different objects to all mutate the same MicroProps, a "chain" of MicroPropsGenerators
* are linked together, and each one is responsible for manipulating a certain quantity-dependent part of the
* MicroProps. At the tail of the linked list is a base instance of {@link MicroProps} with properties that are not
* quantity-dependent. Each element in the linked list calls {@link #processQuantity} on its "parent", then does its
* work, and then returns the result.
*
+ * This chain of MicroPropsGenerators is typically constructed by NumberFormatterImpl::macrosToMicroGenerator() when
+ * constructing a NumberFormatter.
+ *
* Exported as U_I18N_API because it is a base class for other exported types
*
*/
class U_I18N_API MicroPropsGenerator {
public:
- virtual ~MicroPropsGenerator();
+ virtual ~MicroPropsGenerator() = default;
/**
- * Considers the given {@link DecimalQuantity}, optionally mutates it, and returns a {@link MicroProps}.
+ * Considers the given {@link DecimalQuantity}, optionally mutates it, and
+ * populates a {@link MicroProps} instance.
*
- * @param quantity
- * The quantity for consideration and optional mutation.
- * @param micros
- * The MicroProps instance to populate.
- * @return A MicroProps instance resolved for the quantity.
+ * @param quantity The quantity for consideration and optional mutation.
+ * @param micros The MicroProps instance to populate. It will be modified as
+ * needed for the given quantity.
*/
virtual void processQuantity(DecimalQuantity& quantity, MicroProps& micros,
UErrorCode& status) const = 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp
new file mode 100644
index 00000000000..0d9cb06c50a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp
@@ -0,0 +1,208 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "number_usageprefs.h"
+#include "cstring.h"
+#include "number_decimalquantity.h"
+#include "number_microprops.h"
+#include "number_roundingutils.h"
+#include "number_skeletons.h"
+#include "unicode/char16ptr.h"
+#include "unicode/currunit.h"
+#include "unicode/fmtable.h"
+#include "unicode/measure.h"
+#include "unicode/numberformatter.h"
+#include "unicode/platform.h"
+#include "unicode/unum.h"
+#include "unicode/urename.h"
+#include "units_data.h"
+
+using namespace icu;
+using namespace icu::number;
+using namespace icu::number::impl;
+using icu::StringSegment;
+using icu::units::ConversionRates;
+
+// Copy constructor
+Usage::Usage(const Usage &other) : Usage() {
+ this->operator=(other);
+}
+
+// Copy assignment operator
+Usage &Usage::operator=(const Usage &other) {
+ fLength = 0;
+ fError = other.fError;
+ if (fUsage != nullptr) {
+ uprv_free(fUsage);
+ fUsage = nullptr;
+ }
+ if (other.fUsage == nullptr) {
+ return *this;
+ }
+ if (U_FAILURE(other.fError)) {
+ // We don't bother trying to allocating memory if we're in any case busy
+ // copying an errored Usage.
+ return *this;
+ }
+ fUsage = (char *)uprv_malloc(other.fLength + 1);
+ if (fUsage == nullptr) {
+ fError = U_MEMORY_ALLOCATION_ERROR;
+ return *this;
+ }
+ fLength = other.fLength;
+ uprv_strncpy(fUsage, other.fUsage, fLength + 1);
+ return *this;
+}
+
+// Move constructor
+Usage::Usage(Usage &&src) U_NOEXCEPT : fUsage(src.fUsage), fLength(src.fLength), fError(src.fError) {
+ // Take ownership away from src if necessary
+ src.fUsage = nullptr;
+}
+
+// Move assignment operator
+Usage &Usage::operator=(Usage &&src) U_NOEXCEPT {
+ if (this == &src) {
+ return *this;
+ }
+ if (fUsage != nullptr) {
+ uprv_free(fUsage);
+ }
+ fUsage = src.fUsage;
+ fLength = src.fLength;
+ fError = src.fError;
+ // Take ownership away from src if necessary
+ src.fUsage = nullptr;
+ return *this;
+}
+
+Usage::~Usage() {
+ if (fUsage != nullptr) {
+ uprv_free(fUsage);
+ fUsage = nullptr;
+ }
+}
+
+void Usage::set(StringPiece value) {
+ if (fUsage != nullptr) {
+ uprv_free(fUsage);
+ fUsage = nullptr;
+ }
+ fLength = value.length();
+ fUsage = (char *)uprv_malloc(fLength + 1);
+ if (fUsage == nullptr) {
+ fLength = 0;
+ fError = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_strncpy(fUsage, value.data(), fLength);
+ fUsage[fLength] = 0;
+}
+
+// Populates micros.mixedMeasures and modifies quantity, based on the values in
+// measures.
+void mixedMeasuresToMicros(const MaybeStackVector<Measure> &measures, DecimalQuantity *quantity,
+ MicroProps *micros, UErrorCode status) {
+ micros->mixedMeasuresCount = measures.length() - 1;
+ if (micros->mixedMeasuresCount > 0) {
+#ifdef U_DEBUG
+ U_ASSERT(micros->outputUnit.getComplexity(status) == UMEASURE_UNIT_MIXED);
+ U_ASSERT(U_SUCCESS(status));
+ // Check that we received measurements with the expected MeasureUnits:
+ MeasureUnitImpl temp;
+ const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(micros->outputUnit, temp, status);
+ U_ASSERT(U_SUCCESS(status));
+ U_ASSERT(measures.length() == impl.units.length());
+ for (int32_t i = 0; i < measures.length(); i++) {
+ U_ASSERT(measures[i]->getUnit() == impl.units[i]->build(status));
+ }
+ (void)impl;
+#endif
+ // Mixed units: except for the last value, we pass all values to the
+ // LongNameHandler via micros->mixedMeasures.
+ if (micros->mixedMeasures.getCapacity() < micros->mixedMeasuresCount) {
+ if (micros->mixedMeasures.resize(micros->mixedMeasuresCount) == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+ for (int32_t i = 0; i < micros->mixedMeasuresCount; i++) {
+ micros->mixedMeasures[i] = measures[i]->getNumber().getInt64();
+ }
+ } else {
+ micros->mixedMeasuresCount = 0;
+ }
+ // The last value (potentially the only value) gets passed on via quantity.
+ quantity->setToDouble(measures[measures.length() - 1]->getNumber().getDouble());
+}
+
+UsagePrefsHandler::UsagePrefsHandler(const Locale &locale,
+ const MeasureUnit &inputUnit,
+ const StringPiece usage,
+ const MicroPropsGenerator *parent,
+ UErrorCode &status)
+ : fUnitsRouter(inputUnit, StringPiece(locale.getCountry()), usage, status),
+ fParent(parent) {
+}
+
+void UsagePrefsHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const {
+ fParent->processQuantity(quantity, micros, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ quantity.roundToInfinity(); // Enables toDouble
+ const units::RouteResult routed = fUnitsRouter.route(quantity.toDouble(), &micros.rounder, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ const MaybeStackVector<Measure>& routedMeasures = routed.measures;
+ micros.outputUnit = routed.outputUnit.copy(status).build(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ mixedMeasuresToMicros(routedMeasures, &quantity, &micros, status);
+}
+
+UnitConversionHandler::UnitConversionHandler(const MeasureUnit &inputUnit, const MeasureUnit &outputUnit,
+ const MicroPropsGenerator *parent, UErrorCode &status)
+ : fOutputUnit(outputUnit), fParent(parent) {
+ MeasureUnitImpl tempInput, tempOutput;
+ const MeasureUnitImpl &inputUnitImpl = MeasureUnitImpl::forMeasureUnit(inputUnit, tempInput, status);
+ const MeasureUnitImpl &outputUnitImpl =
+ MeasureUnitImpl::forMeasureUnit(outputUnit, tempOutput, status);
+
+ // TODO: this should become an initOnce thing? Review with other
+ // ConversionRates usages.
+ ConversionRates conversionRates(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ fUnitConverter.adoptInsteadAndCheckErrorCode(
+ new ComplexUnitsConverter(inputUnitImpl, outputUnitImpl, conversionRates, status), status);
+}
+
+void UnitConversionHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const {
+ fParent->processQuantity(quantity, micros, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ quantity.roundToInfinity(); // Enables toDouble
+ MaybeStackVector<Measure> measures =
+ fUnitConverter->convert(quantity.toDouble(), &micros.rounder, status);
+ micros.outputUnit = fOutputUnit;
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ mixedMeasuresToMicros(measures, &quantity, &micros, status);
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h
new file mode 100644
index 00000000000..9e8bd936bd7
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h
@@ -0,0 +1,125 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+#ifndef __NUMBER_USAGEPREFS_H__
+#define __NUMBER_USAGEPREFS_H__
+
+#include "cmemory.h"
+#include "number_types.h"
+#include "unicode/listformatter.h"
+#include "unicode/localpointer.h"
+#include "unicode/locid.h"
+#include "unicode/measunit.h"
+#include "unicode/stringpiece.h"
+#include "unicode/uobject.h"
+#include "units_converter.h"
+#include "units_router.h"
+
+U_NAMESPACE_BEGIN
+
+using ::icu::units::ComplexUnitsConverter;
+using ::icu::units::UnitsRouter;
+
+namespace number {
+namespace impl {
+
+/**
+ * A MicroPropsGenerator which uses UnitsRouter to produce output converted to a
+ * MeasureUnit appropriate for a particular localized usage: see
+ * NumberFormatterSettings::usage().
+ */
+class U_I18N_API UsagePrefsHandler : public MicroPropsGenerator, public UMemory {
+ public:
+ UsagePrefsHandler(const Locale &locale, const MeasureUnit &inputUnit, const StringPiece usage,
+ const MicroPropsGenerator *parent, UErrorCode &status);
+
+ /**
+ * Obtains the appropriate output value, MeasureUnit and
+ * rounding/precision behaviour from the UnitsRouter.
+ *
+ * The output unit is passed on to the LongNameHandler via
+ * micros.outputUnit.
+ */
+ void processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const U_OVERRIDE;
+
+ /**
+ * Returns the list of possible output units, i.e. the full set of
+ * preferences, for the localized, usage-specific unit preferences.
+ *
+ * The returned pointer should be valid for the lifetime of the
+ * UsagePrefsHandler instance.
+ */
+ const MaybeStackVector<MeasureUnit> *getOutputUnits() const {
+ return fUnitsRouter.getOutputUnits();
+ }
+
+ private:
+ UnitsRouter fUnitsRouter;
+ const MicroPropsGenerator *fParent;
+};
+
+} // namespace impl
+} // namespace number
+
+// Export explicit template instantiations of LocalPointerBase and LocalPointer.
+// This is required when building DLLs for Windows. (See datefmt.h,
+// collationiterator.h, erarules.h and others for similar examples.)
+//
+// Note: These need to be outside of the number::impl namespace, or Clang will
+// generate a compile error.
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+#if defined(_MSC_VER)
+// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!=
+#pragma warning(push)
+#pragma warning(disable: 4661)
+#endif
+template class U_I18N_API LocalPointerBase<ComplexUnitsConverter>;
+template class U_I18N_API LocalPointer<ComplexUnitsConverter>;
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+#endif
+
+namespace number {
+namespace impl {
+
+/**
+ * A MicroPropsGenerator which converts a measurement from one MeasureUnit to
+ * another. In particular, the output MeasureUnit may be a mixed unit. (The
+ * input unit may not be a mixed unit.)
+ */
+class U_I18N_API UnitConversionHandler : public MicroPropsGenerator, public UMemory {
+ public:
+ /**
+ * Constructor.
+ *
+ * @param inputUnit Specifies the input MeasureUnit. Mixed units are not
+ * supported as input (because input is just a single decimal quantity).
+ * @param outputUnit Specifies the output MeasureUnit.
+ * @param parent The parent MicroPropsGenerator.
+ * @param status Receives status.
+ */
+ UnitConversionHandler(const MeasureUnit &inputUnit, const MeasureUnit &outputUnit,
+ const MicroPropsGenerator *parent, UErrorCode &status);
+
+ /**
+ * Obtains the appropriate output values from the Unit Converter.
+ */
+ void processQuantity(DecimalQuantity &quantity, MicroProps &micros,
+ UErrorCode &status) const U_OVERRIDE;
+ private:
+ MeasureUnit fOutputUnit;
+ LocalPointer<ComplexUnitsConverter> fUnitConverter;
+ const MicroPropsGenerator *fParent;
+};
+
+} // namespace impl
+} // namespace number
+U_NAMESPACE_END
+
+#endif // __NUMBER_USAGEPREFS_H__
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp
index 91d7f335cd8..bef7ea6c61f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp
@@ -258,7 +258,10 @@ void DecNum::toString(ByteSink& output, UErrorCode& status) const {
}
// "string must be at least dn->digits+14 characters long"
int32_t minCapacity = fData.getAlias()->digits + 14;
- MaybeStackArray<char, 30> buffer(minCapacity);
+ MaybeStackArray<char, 30> buffer(minCapacity, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
uprv_decNumberToString(fData, buffer.getAlias());
output.Append(buffer.getAlias(), static_cast<int32_t>(uprv_strlen(buffer.getAlias())));
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_utils.h b/Build/source/libs/icu/icu-src/source/i18n/number_utils.h
index 93195f080b2..bc369c940f7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_utils.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_utils.h
@@ -49,8 +49,8 @@ inline bool unitIsCurrency(const MeasureUnit& unit) {
return uprv_strcmp("currency", unit.getType()) == 0;
}
-inline bool unitIsNoUnit(const MeasureUnit& unit) {
- return uprv_strcmp("none", unit.getType()) == 0;
+inline bool unitIsBaseUnit(const MeasureUnit& unit) {
+ return unit == MeasureUnit();
}
inline bool unitIsPercent(const MeasureUnit& unit) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h b/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
index 6dbe5bee68f..d97eadc5cdb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
@@ -28,15 +28,20 @@ const DecimalQuantity* validateUFormattedNumberToDecimalQuantity(
* This struct is held internally by the C++ version FormattedNumber since the member types are not
* declared in the public header file.
*
- * The DecimalQuantity is not currently being used by FormattedNumber, but at some point it could be used
- * to add a toDecNumber() or similar method.
+ * Exported as U_I18N_API for tests
*/
-class UFormattedNumberData : public FormattedValueStringBuilderImpl {
+class U_I18N_API UFormattedNumberData : public FormattedValueStringBuilderImpl {
public:
- UFormattedNumberData() : FormattedValueStringBuilderImpl(0) {}
+ UFormattedNumberData() : FormattedValueStringBuilderImpl(kUndefinedField) {}
virtual ~UFormattedNumberData();
+ // The formatted quantity.
DecimalQuantity quantity;
+
+ // The output unit for the formatted quantity.
+ // TODO(units,hugovdm): populate this correctly for the general case - it's
+ // currently only implemented for the .usage() use case.
+ MeasureUnit outputUnit;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp b/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp
index cf8bab4d81f..cef1685d03c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp
@@ -127,8 +127,8 @@ void AffixPatternMatcherBuilder::addMatcher(NumberParseMatcher& matcher) {
fMatchers[fMatchersLen++] = &matcher;
}
-AffixPatternMatcher AffixPatternMatcherBuilder::build() {
- return AffixPatternMatcher(fMatchers, fMatchersLen, fPattern);
+AffixPatternMatcher AffixPatternMatcherBuilder::build(UErrorCode& status) {
+ return AffixPatternMatcher(fMatchers, fMatchersLen, fPattern, status);
}
AffixTokenMatcherWarehouse::AffixTokenMatcherWarehouse(const AffixTokenMatcherSetupData* setupData)
@@ -209,12 +209,13 @@ AffixPatternMatcher AffixPatternMatcher::fromAffixPattern(const UnicodeString& a
AffixPatternMatcherBuilder builder(affixPattern, tokenWarehouse, ignorables);
AffixUtils::iterateWithConsumer(affixPattern, builder, status);
- return builder.build();
+ return builder.build(status);
}
AffixPatternMatcher::AffixPatternMatcher(MatcherArray& matchers, int32_t matchersLen,
- const UnicodeString& pattern)
- : ArraySeriesMatcher(matchers, matchersLen), fPattern(pattern) {}
+ const UnicodeString& pattern, UErrorCode& status)
+ : ArraySeriesMatcher(matchers, matchersLen), fPattern(pattern, status) {
+}
UnicodeString AffixPatternMatcher::getPattern() const {
return fPattern.toAliasedUnicodeString();
@@ -271,8 +272,6 @@ void AffixMatcherWarehouse::createAffixMatchers(const AffixPatternProvider& patt
// Use initial capacity of 6, the highest possible number of AffixMatchers.
UnicodeString sb;
bool includeUnpaired = 0 != (parseFlags & PARSE_FLAG_INCLUDE_UNPAIRED_AFFIXES);
- UNumberSignDisplay signDisplay = (0 != (parseFlags & PARSE_FLAG_PLUS_SIGN_ALLOWED)) ? UNUM_SIGN_ALWAYS
- : UNUM_SIGN_AUTO;
int32_t numAffixMatchers = 0;
int32_t numAffixPatternMatchers = 0;
@@ -281,13 +280,23 @@ void AffixMatcherWarehouse::createAffixMatchers(const AffixPatternProvider& patt
AffixPatternMatcher* posSuffix = nullptr;
// Pre-process the affix strings to resolve LDML rules like sign display.
- for (int8_t signumInt = 1; signumInt >= -1; signumInt--) {
- auto signum = static_cast<Signum>(signumInt);
+ for (int8_t typeInt = 0; typeInt < PATTERN_SIGN_TYPE_COUNT; typeInt++) {
+ auto type = static_cast<PatternSignType>(typeInt);
+
+ // Skip affixes in some cases
+ if (type == PATTERN_SIGN_TYPE_POS
+ && 0 != (parseFlags & PARSE_FLAG_PLUS_SIGN_ALLOWED)) {
+ continue;
+ }
+ if (type == PATTERN_SIGN_TYPE_POS_SIGN
+ && 0 == (parseFlags & PARSE_FLAG_PLUS_SIGN_ALLOWED)) {
+ continue;
+ }
// Generate Prefix
bool hasPrefix = false;
PatternStringUtils::patternInfoToStringBuilder(
- patternInfo, true, signum, signDisplay, StandardPlural::OTHER, false, sb);
+ patternInfo, true, type, StandardPlural::OTHER, false, sb);
fAffixPatternMatchers[numAffixPatternMatchers] = AffixPatternMatcher::fromAffixPattern(
sb, *fTokenWarehouse, parseFlags, &hasPrefix, status);
AffixPatternMatcher* prefix = hasPrefix ? &fAffixPatternMatchers[numAffixPatternMatchers++]
@@ -296,13 +305,13 @@ void AffixMatcherWarehouse::createAffixMatchers(const AffixPatternProvider& patt
// Generate Suffix
bool hasSuffix = false;
PatternStringUtils::patternInfoToStringBuilder(
- patternInfo, false, signum, signDisplay, StandardPlural::OTHER, false, sb);
+ patternInfo, false, type, StandardPlural::OTHER, false, sb);
fAffixPatternMatchers[numAffixPatternMatchers] = AffixPatternMatcher::fromAffixPattern(
sb, *fTokenWarehouse, parseFlags, &hasSuffix, status);
AffixPatternMatcher* suffix = hasSuffix ? &fAffixPatternMatchers[numAffixPatternMatchers++]
: nullptr;
- if (signum == 1) {
+ if (type == PATTERN_SIGN_TYPE_POS) {
posPrefix = prefix;
posSuffix = suffix;
} else if (equals(prefix, posPrefix) && equals(suffix, posSuffix)) {
@@ -311,17 +320,17 @@ void AffixMatcherWarehouse::createAffixMatchers(const AffixPatternProvider& patt
}
// Flags for setting in the ParsedNumber; the token matchers may add more.
- int flags = (signum == -1) ? FLAG_NEGATIVE : 0;
+ int flags = (type == PATTERN_SIGN_TYPE_NEG) ? FLAG_NEGATIVE : 0;
// Note: it is indeed possible for posPrefix and posSuffix to both be null.
// We still need to add that matcher for strict mode to work.
fAffixMatchers[numAffixMatchers++] = {prefix, suffix, flags};
if (includeUnpaired && prefix != nullptr && suffix != nullptr) {
// The following if statements are designed to prevent adding two identical matchers.
- if (signum == 1 || !equals(prefix, posPrefix)) {
+ if (type == PATTERN_SIGN_TYPE_POS || !equals(prefix, posPrefix)) {
fAffixMatchers[numAffixMatchers++] = {prefix, nullptr, flags};
}
- if (signum == 1 || !equals(suffix, posSuffix)) {
+ if (type == PATTERN_SIGN_TYPE_POS || !equals(suffix, posSuffix)) {
fAffixMatchers[numAffixMatchers++] = {nullptr, suffix, flags};
}
}
@@ -438,28 +447,3 @@ UnicodeString AffixMatcher::toString() const {
#endif /* #if !UCONFIG_NO_FORMATTING */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.h b/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.h
index e02b17ba2d0..a82b731ab5b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.h
@@ -28,7 +28,7 @@ using ::icu::number::impl::TokenConsumer;
using ::icu::number::impl::CurrencySymbols;
-class CodePointMatcher : public NumberParseMatcher, public UMemory {
+class U_I18N_API CodePointMatcher : public NumberParseMatcher, public UMemory {
public:
CodePointMatcher() = default; // WARNING: Leaves the object in an unusable state
@@ -128,7 +128,7 @@ class AffixPatternMatcherBuilder : public TokenConsumer, public MutableMatcherCo
void consumeToken(::icu::number::impl::AffixPatternType type, UChar32 cp, UErrorCode& status) override;
/** NOTE: You can build only once! */
- AffixPatternMatcher build();
+ AffixPatternMatcher build(UErrorCode& status);
private:
ArraySeriesMatcher::MatcherArray fMatchers;
@@ -160,7 +160,8 @@ class U_I18N_API AffixPatternMatcher : public ArraySeriesMatcher {
private:
CompactUnicodeString<4> fPattern;
- AffixPatternMatcher(MatcherArray& matchers, int32_t matchersLen, const UnicodeString& pattern);
+ AffixPatternMatcher(MatcherArray& matchers, int32_t matchersLen, const UnicodeString& pattern,
+ UErrorCode& status);
friend class AffixPatternMatcherBuilder;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp b/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp
index bf5829061a1..4b76da1c149 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp
@@ -83,23 +83,14 @@ NumberParserImpl::createParserFromProperties(const number::impl::DecimalFormatPr
const DecimalFormatSymbols& symbols, bool parseCurrency,
UErrorCode& status) {
Locale locale = symbols.getLocale();
- PropertiesAffixPatternProvider localPAPP;
- CurrencyPluralInfoAffixProvider localCPIAP;
- AffixPatternProvider* affixProvider;
- if (properties.currencyPluralInfo.fPtr.isNull()) {
- localPAPP.setTo(properties, status);
- affixProvider = &localPAPP;
- } else {
- localCPIAP.setTo(*properties.currencyPluralInfo.fPtr, properties, status);
- affixProvider = &localCPIAP;
- }
- if (affixProvider == nullptr || U_FAILURE(status)) { return nullptr; }
+ AutoAffixPatternProvider affixProvider(properties, status);
+ if (U_FAILURE(status)) { return nullptr; }
CurrencyUnit currency = resolveCurrency(properties, locale, status);
CurrencySymbols currencySymbols(currency, locale, symbols, status);
bool isStrict = properties.parseMode.getOrDefault(PARSE_MODE_STRICT) == PARSE_MODE_STRICT;
Grouper grouper = Grouper::forProperties(properties);
int parseFlags = 0;
- if (affixProvider == nullptr || U_FAILURE(status)) { return nullptr; }
+ if (U_FAILURE(status)) { return nullptr; }
if (!properties.parseCaseSensitive) {
parseFlags |= PARSE_FLAG_IGNORE_CASE;
}
@@ -121,7 +112,7 @@ NumberParserImpl::createParserFromProperties(const number::impl::DecimalFormatPr
if (grouper.getPrimary() <= 0) {
parseFlags |= PARSE_FLAG_GROUPING_DISABLED;
}
- if (parseCurrency || affixProvider->hasCurrencySign()) {
+ if (parseCurrency || affixProvider.get().hasCurrencySign()) {
parseFlags |= PARSE_FLAG_MONETARY_SEPARATORS;
}
if (!parseCurrency) {
@@ -143,13 +134,13 @@ NumberParserImpl::createParserFromProperties(const number::impl::DecimalFormatPr
parser->fLocalMatchers.affixTokenMatcherWarehouse = {&affixSetupData};
parser->fLocalMatchers.affixMatcherWarehouse = {&parser->fLocalMatchers.affixTokenMatcherWarehouse};
parser->fLocalMatchers.affixMatcherWarehouse.createAffixMatchers(
- *affixProvider, *parser, ignorables, parseFlags, status);
+ affixProvider.get(), *parser, ignorables, parseFlags, status);
////////////////////////
/// CURRENCY MATCHER ///
////////////////////////
- if (parseCurrency || affixProvider->hasCurrencySign()) {
+ if (parseCurrency || affixProvider.get().hasCurrencySign()) {
parser->addMatcher(parser->fLocalMatchers.currency = {currencySymbols, symbols, parseFlags, status});
}
@@ -159,10 +150,10 @@ NumberParserImpl::createParserFromProperties(const number::impl::DecimalFormatPr
// ICU-TC meeting, April 11, 2018: accept percent/permille only if it is in the pattern,
// and to maintain regressive behavior, divide by 100 even if no percent sign is present.
- if (!isStrict && affixProvider->containsSymbolType(AffixPatternType::TYPE_PERCENT, status)) {
+ if (!isStrict && affixProvider.get().containsSymbolType(AffixPatternType::TYPE_PERCENT, status)) {
parser->addMatcher(parser->fLocalMatchers.percent = {symbols});
}
- if (!isStrict && affixProvider->containsSymbolType(AffixPatternType::TYPE_PERMILLE, status)) {
+ if (!isStrict && affixProvider.get().containsSymbolType(AffixPatternType::TYPE_PERMILLE, status)) {
parser->addMatcher(parser->fLocalMatchers.permille = {symbols});
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_types.h b/Build/source/libs/icu/icu-src/source/i18n/numparse_types.h
index b4007c2ff5b..623f0e80f16 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_types.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_types.h
@@ -64,14 +64,15 @@ class CompactUnicodeString {
fBuffer[0] = 0;
}
- CompactUnicodeString(const UnicodeString& text)
- : fBuffer(text.length() + 1) {
+ CompactUnicodeString(const UnicodeString& text, UErrorCode& status)
+ : fBuffer(text.length() + 1, status) {
+ if (U_FAILURE(status)) { return; }
uprv_memcpy(fBuffer.getAlias(), text.getBuffer(), sizeof(UChar) * text.length());
fBuffer[text.length()] = 0;
}
inline UnicodeString toAliasedUnicodeString() const {
- return UnicodeString(TRUE, fBuffer.getAlias(), -1);
+ return UnicodeString(true, fBuffer.getAlias(), -1);
}
bool operator==(const CompactUnicodeString& other) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp b/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp
new file mode 100644
index 00000000000..a440a53fe6b
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp
@@ -0,0 +1,193 @@
+// © 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+// Allow implicit conversion from char16_t* to UnicodeString for this file:
+// Helpful in toString methods and elsewhere.
+#define UNISTR_FROM_STRING_EXPLICIT
+
+#include "fphdlimp.h"
+#include "number_utypes.h"
+#include "numparse_types.h"
+#include "formattedval_impl.h"
+#include "numrange_impl.h"
+#include "number_decnum.h"
+#include "unicode/numberrangeformatter.h"
+#include "unicode/unumberrangeformatter.h"
+
+using namespace icu;
+using namespace icu::number;
+using namespace icu::number::impl;
+
+
+U_NAMESPACE_BEGIN
+namespace number {
+namespace impl {
+
+/**
+ * Implementation class for UNumberRangeFormatter. Wraps a LocalizedRangeNumberFormatter.
+ */
+struct UNumberRangeFormatterData : public UMemory,
+ // Magic number as ASCII == "NRF" (NumberRangeFormatter)
+ public IcuCApiHelper<UNumberRangeFormatter, UNumberRangeFormatterData, 0x4E524600> {
+ LocalizedNumberRangeFormatter fFormatter;
+};
+
+struct UFormattedNumberRangeImpl;
+
+// Magic number as ASCII == "FDN" (FormatteDNumber)
+typedef IcuCApiHelper<UFormattedNumberRange, UFormattedNumberRangeImpl, 0x46444E00> UFormattedNumberRangeApiHelper;
+
+struct UFormattedNumberRangeImpl : public UFormattedValueImpl, public UFormattedNumberRangeApiHelper {
+ UFormattedNumberRangeImpl();
+ ~UFormattedNumberRangeImpl();
+
+ FormattedNumberRange fImpl;
+ UFormattedNumberRangeData fData;
+};
+
+UFormattedNumberRangeImpl::UFormattedNumberRangeImpl()
+ : fImpl(&fData) {
+ fFormattedValue = &fImpl;
+}
+
+UFormattedNumberRangeImpl::~UFormattedNumberRangeImpl() {
+ // Disown the data from fImpl so it doesn't get deleted twice
+ fImpl.fData = nullptr;
+}
+
+} // namespace impl
+} // namespace number
+U_NAMESPACE_END
+
+
+UPRV_FORMATTED_VALUE_CAPI_NO_IMPLTYPE_AUTO_IMPL(
+ UFormattedNumberRange,
+ UFormattedNumberRangeImpl,
+ UFormattedNumberRangeApiHelper,
+ unumrf)
+
+
+const UFormattedNumberRangeData* number::impl::validateUFormattedNumberRange(
+ const UFormattedNumberRange* uresult, UErrorCode& status) {
+ auto* result = UFormattedNumberRangeApiHelper::validate(uresult, status);
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ return &result->fData;
+}
+
+
+U_CAPI UNumberRangeFormatter* U_EXPORT2
+unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ const UChar* skeleton,
+ int32_t skeletonLen,
+ UNumberRangeCollapse collapse,
+ UNumberRangeIdentityFallback identityFallback,
+ const char* locale,
+ UParseError* perror,
+ UErrorCode* ec) {
+ auto* impl = new UNumberRangeFormatterData();
+ if (impl == nullptr) {
+ *ec = U_MEMORY_ALLOCATION_ERROR;
+ return nullptr;
+ }
+ // Readonly-alias constructor (first argument is whether we are NUL-terminated)
+ UnicodeString skeletonString(skeletonLen == -1, skeleton, skeletonLen);
+ impl->fFormatter = NumberRangeFormatter::withLocale(locale)
+ .numberFormatterBoth(NumberFormatter::forSkeleton(skeletonString, *perror, *ec))
+ .collapse(collapse)
+ .identityFallback(identityFallback);
+ return impl->exportForC();
+}
+
+U_CAPI void U_EXPORT2
+unumrf_formatDoubleRange(
+ const UNumberRangeFormatter* uformatter,
+ double first,
+ double second,
+ UFormattedNumberRange* uresult,
+ UErrorCode* ec) {
+ const UNumberRangeFormatterData* formatter = UNumberRangeFormatterData::validate(uformatter, *ec);
+ auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
+ if (U_FAILURE(*ec)) { return; }
+
+ result->fData.getStringRef().clear();
+ result->fData.quantity1.setToDouble(first);
+ result->fData.quantity2.setToDouble(second);
+ formatter->fFormatter.formatImpl(result->fData, first == second, *ec);
+}
+
+U_CAPI void U_EXPORT2
+unumrf_formatDecimalRange(
+ const UNumberRangeFormatter* uformatter,
+ const char* first, int32_t firstLen,
+ const char* second, int32_t secondLen,
+ UFormattedNumberRange* uresult,
+ UErrorCode* ec) {
+ const UNumberRangeFormatterData* formatter = UNumberRangeFormatterData::validate(uformatter, *ec);
+ auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
+ if (U_FAILURE(*ec)) { return; }
+
+ result->fData.getStringRef().clear();
+ result->fData.quantity1.setToDecNumber({first, firstLen}, *ec);
+ result->fData.quantity2.setToDecNumber({second, secondLen}, *ec);
+ formatter->fFormatter.formatImpl(result->fData, first == second, *ec);
+}
+
+U_CAPI UNumberRangeIdentityResult U_EXPORT2
+unumrf_resultGetIdentityResult(
+ const UFormattedNumberRange* uresult,
+ UErrorCode* ec) {
+ auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
+ if (U_FAILURE(*ec)) {
+ return UNUM_IDENTITY_RESULT_COUNT;
+ }
+ return result->fData.identityResult;
+}
+
+U_CAPI int32_t U_EXPORT2
+unumrf_resultGetFirstDecimalNumber(
+ const UFormattedNumberRange* uresult,
+ char* dest,
+ int32_t destCapacity,
+ UErrorCode* ec) {
+ const auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
+ if (U_FAILURE(*ec)) {
+ return 0;
+ }
+ DecNum decnum;
+ return result->fData.quantity1.toDecNum(decnum, *ec)
+ .toCharString(*ec)
+ .extract(dest, destCapacity, *ec);
+}
+
+U_CAPI int32_t U_EXPORT2
+unumrf_resultGetSecondDecimalNumber(
+ const UFormattedNumberRange* uresult,
+ char* dest,
+ int32_t destCapacity,
+ UErrorCode* ec) {
+ const auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
+ if (U_FAILURE(*ec)) {
+ return 0;
+ }
+ DecNum decnum;
+ return result->fData.quantity2
+ .toDecNum(decnum, *ec)
+ .toCharString(*ec)
+ .extract(dest, destCapacity, *ec);
+}
+
+U_CAPI void U_EXPORT2
+unumrf_close(UNumberRangeFormatter* f) {
+ UErrorCode localStatus = U_ZERO_ERROR;
+ const UNumberRangeFormatterData* impl = UNumberRangeFormatterData::validate(f, localStatus);
+ delete impl;
+}
+
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp b/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
index 654cafaf00b..d9286d1d713 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
@@ -12,6 +12,7 @@
#include "numrange_impl.h"
#include "util.h"
#include "number_utypes.h"
+#include "number_decnum.h"
using namespace icu;
using namespace icu::number;
@@ -375,45 +376,4 @@ LocalizedNumberRangeFormatter::getFormatter(UErrorCode& status) const {
}
-UPRV_FORMATTED_VALUE_SUBCLASS_AUTO_IMPL(FormattedNumberRange)
-
-#define UPRV_NOARG
-
-UBool FormattedNumberRange::nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(FALSE)
- // NOTE: MSVC sometimes complains when implicitly converting between bool and UBool
- return fData->nextFieldPosition(fieldPosition, status);
-}
-
-void FormattedNumberRange::getAllFieldPositions(FieldPositionIterator& iterator, UErrorCode& status) const {
- FieldPositionIteratorHandler fpih(&iterator, status);
- getAllFieldPositionsImpl(fpih, status);
-}
-
-void FormattedNumberRange::getAllFieldPositionsImpl(
- FieldPositionIteratorHandler& fpih, UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(UPRV_NOARG)
- fData->getAllFieldPositions(fpih, status);
-}
-
-UnicodeString FormattedNumberRange::getFirstDecimal(UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(ICU_Utility::makeBogusString())
- return fData->quantity1.toScientificString();
-}
-
-UnicodeString FormattedNumberRange::getSecondDecimal(UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(ICU_Utility::makeBogusString())
- return fData->quantity2.toScientificString();
-}
-
-UNumberRangeIdentityResult FormattedNumberRange::getIdentityResult(UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(UNUM_IDENTITY_RESULT_NOT_EQUAL)
- return fData->identityResult;
-}
-
-
-UFormattedNumberRangeData::~UFormattedNumberRangeData() = default;
-
-
-
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
index 7d732b31ec1..3aae5c23548 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
@@ -12,6 +12,7 @@
#include "unicode/numberrangeformatter.h"
#include "numrange_impl.h"
#include "patternprops.h"
+#include "pluralranges.h"
#include "uresimp.h"
#include "util.h"
@@ -106,92 +107,9 @@ void getNumberRangeData(const char* localeName, const char* nsName, NumberRangeD
sink.fillInDefaults(status);
}
-class PluralRangesDataSink : public ResourceSink {
- public:
- PluralRangesDataSink(StandardPluralRanges& output) : fOutput(output) {}
-
- void put(const char* /*key*/, ResourceValue& value, UBool /*noFallback*/, UErrorCode& status) U_OVERRIDE {
- ResourceArray entriesArray = value.getArray(status);
- if (U_FAILURE(status)) { return; }
- fOutput.setCapacity(entriesArray.getSize());
- for (int i = 0; entriesArray.getValue(i, value); i++) {
- ResourceArray pluralFormsArray = value.getArray(status);
- if (U_FAILURE(status)) { return; }
- pluralFormsArray.getValue(0, value);
- StandardPlural::Form first = StandardPlural::fromString(value.getUnicodeString(status), status);
- if (U_FAILURE(status)) { return; }
- pluralFormsArray.getValue(1, value);
- StandardPlural::Form second = StandardPlural::fromString(value.getUnicodeString(status), status);
- if (U_FAILURE(status)) { return; }
- pluralFormsArray.getValue(2, value);
- StandardPlural::Form result = StandardPlural::fromString(value.getUnicodeString(status), status);
- if (U_FAILURE(status)) { return; }
- fOutput.addPluralRange(first, second, result);
- }
- }
-
- private:
- StandardPluralRanges& fOutput;
-};
-
-void getPluralRangesData(const Locale& locale, StandardPluralRanges& output, UErrorCode& status) {
- if (U_FAILURE(status)) { return; }
- LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "pluralRanges", &status));
- if (U_FAILURE(status)) { return; }
-
- CharString dataPath;
- dataPath.append("locales/", -1, status);
- dataPath.append(locale.getLanguage(), -1, status);
- if (U_FAILURE(status)) { return; }
- int32_t setLen;
- // Not all languages are covered: fail gracefully
- UErrorCode internalStatus = U_ZERO_ERROR;
- const UChar* set = ures_getStringByKeyWithFallback(rb.getAlias(), dataPath.data(), &setLen, &internalStatus);
- if (U_FAILURE(internalStatus)) { return; }
-
- dataPath.clear();
- dataPath.append("rules/", -1, status);
- dataPath.appendInvariantChars(set, setLen, status);
- if (U_FAILURE(status)) { return; }
- PluralRangesDataSink sink(output);
- ures_getAllItemsWithFallback(rb.getAlias(), dataPath.data(), sink, status);
- if (U_FAILURE(status)) { return; }
-}
-
} // namespace
-void StandardPluralRanges::initialize(const Locale& locale, UErrorCode& status) {
- getPluralRangesData(locale, *this, status);
-}
-
-void StandardPluralRanges::addPluralRange(
- StandardPlural::Form first,
- StandardPlural::Form second,
- StandardPlural::Form result) {
- U_ASSERT(fTriplesLen < fTriples.getCapacity());
- fTriples[fTriplesLen] = {first, second, result};
- fTriplesLen++;
-}
-
-void StandardPluralRanges::setCapacity(int32_t length) {
- if (length > fTriples.getCapacity()) {
- fTriples.resize(length, 0);
- }
-}
-
-StandardPlural::Form
-StandardPluralRanges::resolve(StandardPlural::Form first, StandardPlural::Form second) const {
- for (int32_t i=0; i<fTriplesLen; i++) {
- const auto& triple = fTriples[i];
- if (triple.first == first && triple.second == second) {
- return triple.result;
- }
- }
- // Default fallback
- return StandardPlural::OTHER;
-}
-
NumberRangeFormatterImpl::NumberRangeFormatterImpl(const RangeMacroProps& macros, UErrorCode& status)
: formatterImpl1(macros.formatter1.fMacros, status),
@@ -210,10 +128,10 @@ NumberRangeFormatterImpl::NumberRangeFormatterImpl(const RangeMacroProps& macros
getNumberRangeData(macros.locale.getName(), nsName, data, status);
if (U_FAILURE(status)) { return; }
fRangeFormatter = data.rangePattern;
- fApproximatelyModifier = {data.approximatelyPattern, UNUM_FIELD_COUNT, false};
+ fApproximatelyModifier = {data.approximatelyPattern, kUndefinedField, false};
// TODO: Get locale from PluralRules instead?
- fPluralRanges.initialize(macros.locale, status);
+ fPluralRanges = StandardPluralRanges::forLocale(macros.locale, status);
if (U_FAILURE(status)) { return; }
}
@@ -368,7 +286,8 @@ void NumberRangeFormatterImpl::formatRange(UFormattedNumberRangeData& data,
// Only collapse if the modifier is a unit.
// TODO: Make a better way to check for a unit?
// TODO: Handle case where the modifier has both notation and unit (compact currency)?
- if (!mm->containsField(UNUM_CURRENCY_FIELD) && !mm->containsField(UNUM_PERCENT_FIELD)) {
+ if (!mm->containsField({UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD})
+ && !mm->containsField({UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD})) {
collapseMiddle = false;
}
} else if (fCollapse == UNUM_RANGE_COLLAPSE_AUTO) {
@@ -416,7 +335,7 @@ void NumberRangeFormatterImpl::formatRange(UFormattedNumberRangeData& data,
0,
&lengthPrefix,
&lengthSuffix,
- UNUM_FIELD_COUNT,
+ kUndefinedField,
status);
if (U_FAILURE(status)) { return; }
lengthInfix = lengthRange - lengthPrefix - lengthSuffix;
@@ -434,10 +353,10 @@ void NumberRangeFormatterImpl::formatRange(UFormattedNumberRangeData& data,
if (repeatInner || repeatMiddle || repeatOuter) {
// Add spacing if there is not already spacing
if (!PatternProps::isWhiteSpace(string.charAt(UPRV_INDEX_1))) {
- lengthInfix += string.insertCodePoint(UPRV_INDEX_1, u'\u0020', UNUM_FIELD_COUNT, status);
+ lengthInfix += string.insertCodePoint(UPRV_INDEX_1, u'\u0020', kUndefinedField, status);
}
if (!PatternProps::isWhiteSpace(string.charAt(UPRV_INDEX_2 - 1))) {
- lengthInfix += string.insertCodePoint(UPRV_INDEX_2, u'\u0020', UNUM_FIELD_COUNT, status);
+ lengthInfix += string.insertCodePoint(UPRV_INDEX_2, u'\u0020', kUndefinedField, status);
}
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h
index f88e3009136..b81a311a5f3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h
@@ -15,6 +15,7 @@
#include "number_formatimpl.h"
#include "formatted_string_builder.h"
#include "formattedval_impl.h"
+#include "pluralranges.h"
U_NAMESPACE_BEGIN namespace number {
namespace impl {
@@ -31,7 +32,7 @@ namespace impl {
*/
class UFormattedNumberRangeData : public FormattedValueStringBuilderImpl {
public:
- UFormattedNumberRangeData() : FormattedValueStringBuilderImpl(0) {}
+ UFormattedNumberRangeData() : FormattedValueStringBuilderImpl(kUndefinedField) {}
virtual ~UFormattedNumberRangeData();
DecimalQuantity quantity1;
@@ -40,36 +41,6 @@ public:
};
-class StandardPluralRanges : public UMemory {
- public:
- void initialize(const Locale& locale, UErrorCode& status);
- StandardPlural::Form resolve(StandardPlural::Form first, StandardPlural::Form second) const;
-
- /** Used for data loading. */
- void addPluralRange(
- StandardPlural::Form first,
- StandardPlural::Form second,
- StandardPlural::Form result);
-
- /** Used for data loading. */
- void setCapacity(int32_t length);
-
- private:
- struct StandardPluralRangeTriple {
- StandardPlural::Form first;
- StandardPlural::Form second;
- StandardPlural::Form result;
- };
-
- // TODO: An array is simple here, but it results in linear lookup time.
- // Certain locales have 20-30 entries in this list.
- // Consider changing to a smarter data structure.
- typedef MaybeStackArray<StandardPluralRangeTriple, 3> PluralRangeTriples;
- PluralRangeTriples fTriples;
- int32_t fTriplesLen = 0;
-};
-
-
class NumberRangeFormatterImpl : public UMemory {
public:
NumberRangeFormatterImpl(const RangeMacroProps& macros, UErrorCode& status);
@@ -105,6 +76,11 @@ class NumberRangeFormatterImpl : public UMemory {
};
+/** Helper function used in upluralrules.cpp */
+const UFormattedNumberRangeData* validateUFormattedNumberRange(
+ const UFormattedNumberRange* uresult, UErrorCode& status);
+
+
} // namespace impl
} // namespace number
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp b/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
index ee530e8d333..62d555aad28 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
@@ -118,7 +118,7 @@ NumberingSystem::createInstance(const Locale & inLocale, UErrorCode& status) {
UBool nsResolved = TRUE;
UBool usingFallback = FALSE;
- char buffer[ULOC_KEYWORDS_CAPACITY];
+ char buffer[ULOC_KEYWORDS_CAPACITY] = "";
int32_t count = inLocale.getKeywordValue("numbers", buffer, sizeof(buffer), status);
if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
// the "numbers" keyword exceeds ULOC_KEYWORDS_CAPACITY; ignore and use default.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp b/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
index d21e6e99297..4873caaee6d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
@@ -197,58 +197,60 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top,
}
// Process final rule and data, if any
- const UChar *ruleIdUStr = ures_getStringByKey(res, kFINALRULE, &len, &ec);
- ures_getByKey(res, kFINALRAW, r.getAlias(), &ec);
- int32_t ruleRaw = ures_getInt(r.getAlias(), &ec);
- ures_getByKey(res, kFINALYEAR, r.getAlias(), &ec);
- int32_t ruleYear = ures_getInt(r.getAlias(), &ec);
if (U_SUCCESS(ec)) {
- UnicodeString ruleID(TRUE, ruleIdUStr, len);
- UResourceBundle *rule = TimeZone::loadRule(top, ruleID, NULL, ec);
- const int32_t *ruleData = ures_getIntVector(rule, &len, &ec);
- if (U_SUCCESS(ec) && len == 11) {
- UnicodeString emptyStr;
- finalZone = new SimpleTimeZone(
- ruleRaw * U_MILLIS_PER_SECOND,
- emptyStr,
- (int8_t)ruleData[0], (int8_t)ruleData[1], (int8_t)ruleData[2],
- ruleData[3] * U_MILLIS_PER_SECOND,
- (SimpleTimeZone::TimeMode) ruleData[4],
- (int8_t)ruleData[5], (int8_t)ruleData[6], (int8_t)ruleData[7],
- ruleData[8] * U_MILLIS_PER_SECOND,
- (SimpleTimeZone::TimeMode) ruleData[9],
- ruleData[10] * U_MILLIS_PER_SECOND, ec);
- if (finalZone == NULL) {
- ec = U_MEMORY_ALLOCATION_ERROR;
- } else {
- finalStartYear = ruleYear;
+ const UChar *ruleIdUStr = ures_getStringByKey(res, kFINALRULE, &len, &ec);
+ ures_getByKey(res, kFINALRAW, r.getAlias(), &ec);
+ int32_t ruleRaw = ures_getInt(r.getAlias(), &ec);
+ ures_getByKey(res, kFINALYEAR, r.getAlias(), &ec);
+ int32_t ruleYear = ures_getInt(r.getAlias(), &ec);
+ if (U_SUCCESS(ec)) {
+ UnicodeString ruleID(TRUE, ruleIdUStr, len);
+ UResourceBundle *rule = TimeZone::loadRule(top, ruleID, NULL, ec);
+ const int32_t *ruleData = ures_getIntVector(rule, &len, &ec);
+ if (U_SUCCESS(ec) && len == 11) {
+ UnicodeString emptyStr;
+ finalZone = new SimpleTimeZone(
+ ruleRaw * U_MILLIS_PER_SECOND,
+ emptyStr,
+ (int8_t)ruleData[0], (int8_t)ruleData[1], (int8_t)ruleData[2],
+ ruleData[3] * U_MILLIS_PER_SECOND,
+ (SimpleTimeZone::TimeMode) ruleData[4],
+ (int8_t)ruleData[5], (int8_t)ruleData[6], (int8_t)ruleData[7],
+ ruleData[8] * U_MILLIS_PER_SECOND,
+ (SimpleTimeZone::TimeMode) ruleData[9],
+ ruleData[10] * U_MILLIS_PER_SECOND, ec);
+ if (finalZone == NULL) {
+ ec = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ finalStartYear = ruleYear;
- // Note: Setting finalStartYear to the finalZone is problematic. When a date is around
- // year boundary, SimpleTimeZone may return false result when DST is observed at the
- // beginning of year. We could apply safe margin (day or two), but when one of recurrent
- // rules falls around year boundary, it could return false result. Without setting the
- // start year, finalZone works fine around the year boundary of the start year.
+ // Note: Setting finalStartYear to the finalZone is problematic. When a date is around
+ // year boundary, SimpleTimeZone may return false result when DST is observed at the
+ // beginning of year. We could apply safe margin (day or two), but when one of recurrent
+ // rules falls around year boundary, it could return false result. Without setting the
+ // start year, finalZone works fine around the year boundary of the start year.
- // finalZone->setStartYear(finalStartYear);
+ // finalZone->setStartYear(finalStartYear);
- // Compute the millis for Jan 1, 0:00 GMT of the finalYear
+ // Compute the millis for Jan 1, 0:00 GMT of the finalYear
- // Note: finalStartMillis is used for detecting either if
- // historic transition data or finalZone to be used. In an
- // extreme edge case - for example, two transitions fall into
- // small windows of time around the year boundary, this may
- // result incorrect offset computation. But I think it will
- // never happen practically. Yoshito - Feb 20, 2010
- finalStartMillis = Grego::fieldsToDay(finalStartYear, 0, 1) * U_MILLIS_PER_DAY;
+ // Note: finalStartMillis is used for detecting either if
+ // historic transition data or finalZone to be used. In an
+ // extreme edge case - for example, two transitions fall into
+ // small windows of time around the year boundary, this may
+ // result incorrect offset computation. But I think it will
+ // never happen practically. Yoshito - Feb 20, 2010
+ finalStartMillis = Grego::fieldsToDay(finalStartYear, 0, 1) * U_MILLIS_PER_DAY;
+ }
+ } else {
+ ec = U_INVALID_FORMAT_ERROR;
}
- } else {
- ec = U_INVALID_FORMAT_ERROR;
+ ures_close(rule);
+ } else if (ec == U_MISSING_RESOURCE_ERROR) {
+ // No final zone
+ ec = U_ZERO_ERROR;
}
- ures_close(rule);
- } else if (ec == U_MISSING_RESOURCE_ERROR) {
- // No final zone
- ec = U_ZERO_ERROR;
}
// initialize canonical ID
diff --git a/Build/source/libs/icu/icu-src/source/i18n/olsontz.h b/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
index a3b7dcc8f3d..275b1b4add3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
@@ -208,7 +208,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
/**
* TimeZone API. For a historical zone, whether DST is used or
* not varies over time. In order to approximate expected
- * behavior, this method returns TRUE if DST is observed at any
+ * behavior, this method returns true if DST is observed at any
* point in the current year.
*/
virtual UBool useDaylightTime() const;
@@ -234,7 +234,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
*/
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
@@ -244,7 +244,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
*/
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp b/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp
index 26fd294ceeb..d30577f337f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp
@@ -79,7 +79,7 @@ PersianCalendar* PersianCalendar::clone() const {
}
PersianCalendar::PersianCalendar(const Locale& aLocale, UErrorCode& success)
- : Calendar(TimeZone::createDefault(), aLocale, success)
+ : Calendar(TimeZone::forLocaleOrDefault(aLocale), aLocale, success)
{
setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly.
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/persncal.h b/Build/source/libs/icu/icu-src/source/i18n/persncal.h
index ce6d7397bf4..c9eff1c3058 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/persncal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/persncal.h
@@ -295,7 +295,7 @@ class PersianCalendar : public Calendar {
virtual UBool inDaylightTime(UErrorCode& status) const;
/**
- * Returns TRUE because the Persian Calendar does have a default century
+ * Returns true because the Persian Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/pluralranges.cpp b/Build/source/libs/icu/icu-src/source/i18n/pluralranges.cpp
new file mode 100644
index 00000000000..da10e2117d0
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/pluralranges.cpp
@@ -0,0 +1,144 @@
+// © 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+// Allow implicit conversion from char16_t* to UnicodeString for this file:
+// Helpful in toString methods and elsewhere.
+#define UNISTR_FROM_STRING_EXPLICIT
+
+#include "unicode/numberrangeformatter.h"
+#include "pluralranges.h"
+#include "uresimp.h"
+#include "charstr.h"
+#include "uassert.h"
+#include "util.h"
+#include "numrange_impl.h"
+
+U_NAMESPACE_BEGIN
+
+
+namespace {
+
+class PluralRangesDataSink : public ResourceSink {
+ public:
+ PluralRangesDataSink(StandardPluralRanges& output) : fOutput(output) {}
+
+ void put(const char* /*key*/, ResourceValue& value, UBool /*noFallback*/, UErrorCode& status) U_OVERRIDE {
+ ResourceArray entriesArray = value.getArray(status);
+ if (U_FAILURE(status)) { return; }
+ fOutput.setCapacity(entriesArray.getSize(), status);
+ if (U_FAILURE(status)) { return; }
+ for (int i = 0; entriesArray.getValue(i, value); i++) {
+ ResourceArray pluralFormsArray = value.getArray(status);
+ if (U_FAILURE(status)) { return; }
+ if (pluralFormsArray.getSize() != 3) {
+ status = U_RESOURCE_TYPE_MISMATCH;
+ return;
+ }
+ pluralFormsArray.getValue(0, value);
+ StandardPlural::Form first = StandardPlural::fromString(value.getUnicodeString(status), status);
+ if (U_FAILURE(status)) { return; }
+ pluralFormsArray.getValue(1, value);
+ StandardPlural::Form second = StandardPlural::fromString(value.getUnicodeString(status), status);
+ if (U_FAILURE(status)) { return; }
+ pluralFormsArray.getValue(2, value);
+ StandardPlural::Form result = StandardPlural::fromString(value.getUnicodeString(status), status);
+ if (U_FAILURE(status)) { return; }
+ fOutput.addPluralRange(first, second, result);
+ }
+ }
+
+ private:
+ StandardPluralRanges& fOutput;
+};
+
+void getPluralRangesData(const Locale& locale, StandardPluralRanges& output, UErrorCode& status) {
+ LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "pluralRanges", &status));
+ if (U_FAILURE(status)) { return; }
+
+ CharString dataPath;
+ dataPath.append("locales/", -1, status);
+ dataPath.append(locale.getLanguage(), -1, status);
+ if (U_FAILURE(status)) { return; }
+ int32_t setLen;
+ // Not all languages are covered: fail gracefully
+ UErrorCode internalStatus = U_ZERO_ERROR;
+ const UChar* set = ures_getStringByKeyWithFallback(rb.getAlias(), dataPath.data(), &setLen, &internalStatus);
+ if (U_FAILURE(internalStatus)) { return; }
+
+ dataPath.clear();
+ dataPath.append("rules/", -1, status);
+ dataPath.appendInvariantChars(set, setLen, status);
+ if (U_FAILURE(status)) { return; }
+ PluralRangesDataSink sink(output);
+ ures_getAllItemsWithFallback(rb.getAlias(), dataPath.data(), sink, status);
+}
+
+} // namespace
+
+
+StandardPluralRanges
+StandardPluralRanges::forLocale(const Locale& locale, UErrorCode& status) {
+ StandardPluralRanges result;
+ getPluralRangesData(locale, result, status);
+ return result;
+}
+
+StandardPluralRanges
+StandardPluralRanges::copy(UErrorCode& status) const {
+ StandardPluralRanges result;
+ if (fTriplesLen > result.fTriples.getCapacity()) {
+ if (result.fTriples.resize(fTriplesLen) == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return result;
+ }
+ }
+ uprv_memcpy(result.fTriples.getAlias(),
+ fTriples.getAlias(),
+ fTriplesLen * sizeof(fTriples[0]));
+ result.fTriplesLen = fTriplesLen;
+ return result;
+}
+
+LocalPointer<StandardPluralRanges>
+StandardPluralRanges::toPointer(UErrorCode& status) && noexcept {
+ return LocalPointer<StandardPluralRanges>(new StandardPluralRanges(std::move(*this)), status);
+}
+
+void StandardPluralRanges::addPluralRange(
+ StandardPlural::Form first,
+ StandardPlural::Form second,
+ StandardPlural::Form result) {
+ U_ASSERT(fTriplesLen < fTriples.getCapacity());
+ fTriples[fTriplesLen] = {first, second, result};
+ fTriplesLen++;
+}
+
+void StandardPluralRanges::setCapacity(int32_t length, UErrorCode& status) {
+ if (U_FAILURE(status)) { return; }
+ if (length > fTriples.getCapacity()) {
+ if (fTriples.resize(length, 0) == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ }
+}
+
+StandardPlural::Form
+StandardPluralRanges::resolve(StandardPlural::Form first, StandardPlural::Form second) const {
+ for (int32_t i=0; i<fTriplesLen; i++) {
+ const auto& triple = fTriples[i];
+ if (triple.first == first && triple.second == second) {
+ return triple.result;
+ }
+ }
+ // Default fallback
+ return StandardPlural::OTHER;
+}
+
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/pluralranges.h b/Build/source/libs/icu/icu-src/source/i18n/pluralranges.h
new file mode 100644
index 00000000000..eba59c70ed7
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/pluralranges.h
@@ -0,0 +1,67 @@
+// © 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#ifndef __PLURALRANGES_H__
+#define __PLURALRANGES_H__
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "unicode/uobject.h"
+#include "unicode/locid.h"
+#include "unicode/plurrule.h"
+#include "standardplural.h"
+#include "cmemory.h"
+
+U_NAMESPACE_BEGIN
+
+// Forward declarations
+namespace number {
+namespace impl {
+class UFormattedNumberRangeData;
+}
+}
+
+class StandardPluralRanges : public UMemory {
+ public:
+ /** Create a new StandardPluralRanges for the given locale */
+ static StandardPluralRanges forLocale(const Locale& locale, UErrorCode& status);
+
+ /** Explicit copy constructor */
+ StandardPluralRanges copy(UErrorCode& status) const;
+
+ /** Create an object (called on an rvalue) */
+ LocalPointer<StandardPluralRanges> toPointer(UErrorCode& status) && noexcept;
+
+ /** Select rule based on the first and second forms */
+ StandardPlural::Form resolve(StandardPlural::Form first, StandardPlural::Form second) const;
+
+ /** Used for data loading. */
+ void addPluralRange(
+ StandardPlural::Form first,
+ StandardPlural::Form second,
+ StandardPlural::Form result);
+
+ /** Used for data loading. */
+ void setCapacity(int32_t length, UErrorCode& status);
+
+ private:
+ struct StandardPluralRangeTriple {
+ StandardPlural::Form first;
+ StandardPlural::Form second;
+ StandardPlural::Form result;
+ };
+
+ // TODO: An array is simple here, but it results in linear lookup time.
+ // Certain locales have 20-30 entries in this list.
+ // Consider changing to a smarter data structure.
+ typedef MaybeStackArray<StandardPluralRangeTriple, 3> PluralRangeTriples;
+ PluralRangeTriples fTriples;
+ int32_t fTriplesLen = 0;
+};
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+#endif //__PLURALRANGES_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
index b99437630e6..aac35c5b094 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
@@ -549,9 +549,15 @@ void PluralFormat::parseType(const UnicodeString& source, const NFRule *rbnfLeni
UnicodeString currArg = pattern.tempSubString(partStart->getLimit(), partLimit->getIndex() - partStart->getLimit());
if (rbnfLenientScanner != NULL) {
- // If lenient parsing is turned ON, we've got some time consuming parsing ahead of us.
- int32_t length = -1;
- currMatchIndex = rbnfLenientScanner->findTextLenient(source, currArg, startingAt, &length);
+ // Check if non-lenient rule finds the text before call lenient parsing
+ int32_t tempIndex = source.indexOf(currArg, startingAt);
+ if (tempIndex >= 0) {
+ currMatchIndex = tempIndex;
+ } else {
+ // If lenient parsing is turned ON, we've got some time consuming parsing ahead of us.
+ int32_t length = -1;
+ currMatchIndex = rbnfLenientScanner->findTextLenient(source, currArg, startingAt, &length);
+ }
}
else {
currMatchIndex = source.indexOf(currArg, startingAt);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp b/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
index fd193560708..e1e1667a6ea 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
@@ -19,6 +19,7 @@
#include "unicode/ures.h"
#include "unicode/numfmt.h"
#include "unicode/decimfmt.h"
+#include "unicode/numberrangeformatter.h"
#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
@@ -36,6 +37,8 @@
#include "unifiedcache.h"
#include "number_decimalquantity.h"
#include "util.h"
+#include "pluralranges.h"
+#include "numrange_impl.h"
#if !UCONFIG_NO_FORMATTING
@@ -56,6 +59,7 @@ static const UChar PK_VAR_N[]={LOW_N,0};
static const UChar PK_VAR_I[]={LOW_I,0};
static const UChar PK_VAR_F[]={LOW_F,0};
static const UChar PK_VAR_T[]={LOW_T,0};
+static const UChar PK_VAR_E[]={LOW_E,0};
static const UChar PK_VAR_V[]={LOW_V,0};
static const UChar PK_WITHIN[]={LOW_W,LOW_I,LOW_T,LOW_H,LOW_I,LOW_N,0};
static const UChar PK_DECIMAL[]={LOW_D,LOW_E,LOW_C,LOW_I,LOW_M,LOW_A,LOW_L,0};
@@ -67,6 +71,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(PluralKeywordEnumeration)
PluralRules::PluralRules(UErrorCode& /*status*/)
: UObject(),
mRules(nullptr),
+ mStandardPluralRanges(nullptr),
mInternalStatus(U_ZERO_ERROR)
{
}
@@ -74,6 +79,7 @@ PluralRules::PluralRules(UErrorCode& /*status*/)
PluralRules::PluralRules(const PluralRules& other)
: UObject(other),
mRules(nullptr),
+ mStandardPluralRanges(nullptr),
mInternalStatus(U_ZERO_ERROR)
{
*this=other;
@@ -81,6 +87,7 @@ PluralRules::PluralRules(const PluralRules& other)
PluralRules::~PluralRules() {
delete mRules;
+ delete mStandardPluralRanges;
}
SharedPluralRules::~SharedPluralRules() {
@@ -89,14 +96,20 @@ SharedPluralRules::~SharedPluralRules() {
PluralRules*
PluralRules::clone() const {
- PluralRules* newObj = new PluralRules(*this);
// Since clone doesn't have a 'status' parameter, the best we can do is return nullptr if
// the newly created object was not fully constructed properly (an error occurred).
- if (newObj != nullptr && U_FAILURE(newObj->mInternalStatus)) {
- delete newObj;
- newObj = nullptr;
+ UErrorCode localStatus = U_ZERO_ERROR;
+ return clone(localStatus);
+}
+
+PluralRules*
+PluralRules::clone(UErrorCode& status) const {
+ LocalPointer<PluralRules> newObj(new PluralRules(*this), status);
+ if (U_SUCCESS(status) && U_FAILURE(newObj->mInternalStatus)) {
+ status = newObj->mInternalStatus;
+ newObj.adoptInstead(nullptr);
}
- return newObj;
+ return newObj.orphan();
}
PluralRules&
@@ -104,6 +117,8 @@ PluralRules::operator=(const PluralRules& other) {
if (this != &other) {
delete mRules;
mRules = nullptr;
+ delete mStandardPluralRanges;
+ mStandardPluralRanges = nullptr;
mInternalStatus = other.mInternalStatus;
if (U_FAILURE(mInternalStatus)) {
// bail out early if the object we were copying from was already 'invalid'.
@@ -119,6 +134,11 @@ PluralRules::operator=(const PluralRules& other) {
mInternalStatus = mRules->fInternalStatus;
}
}
+ if (other.mStandardPluralRanges != nullptr) {
+ mStandardPluralRanges = other.mStandardPluralRanges->copy(mInternalStatus)
+ .toPointer(mInternalStatus)
+ .orphan();
+ }
}
return *this;
}
@@ -211,11 +231,8 @@ PluralRules::forLocale(const Locale& locale, UPluralType type, UErrorCode& statu
if (U_FAILURE(status)) {
return nullptr;
}
- PluralRules *result = (*shared)->clone();
+ PluralRules *result = (*shared)->clone(status);
shared->removeRef();
- if (result == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- }
return result;
}
@@ -252,6 +269,10 @@ PluralRules::internalForLocale(const Locale& locale, UPluralType type, UErrorCod
// Original impl used default rules.
// Ask the question to ICU Core.
+ newObj->mStandardPluralRanges = StandardPluralRanges::forLocale(locale, status)
+ .toPointer(status)
+ .orphan();
+
return newObj.orphan();
}
@@ -272,6 +293,10 @@ PluralRules::select(const number::FormattedNumber& number, UErrorCode& status) c
if (U_FAILURE(status)) {
return ICU_Utility::makeBogusString();
}
+ if (U_FAILURE(mInternalStatus)) {
+ status = mInternalStatus;
+ return ICU_Utility::makeBogusString();
+ }
return select(dq);
}
@@ -285,6 +310,33 @@ PluralRules::select(const IFixedDecimal &number) const {
}
}
+UnicodeString
+PluralRules::select(const number::FormattedNumberRange& range, UErrorCode& status) const {
+ return select(range.getData(status), status);
+}
+
+UnicodeString
+PluralRules::select(const number::impl::UFormattedNumberRangeData* impl, UErrorCode& status) const {
+ if (U_FAILURE(status)) {
+ return ICU_Utility::makeBogusString();
+ }
+ if (U_FAILURE(mInternalStatus)) {
+ status = mInternalStatus;
+ return ICU_Utility::makeBogusString();
+ }
+ if (mStandardPluralRanges == nullptr) {
+ // Happens if PluralRules was constructed via createRules()
+ status = U_UNSUPPORTED_ERROR;
+ return ICU_Utility::makeBogusString();
+ }
+ auto form1 = StandardPlural::fromString(select(impl->quantity1), status);
+ auto form2 = StandardPlural::fromString(select(impl->quantity2), status);
+ if (U_FAILURE(status)) {
+ return ICU_Utility::makeBogusString();
+ }
+ auto result = mStandardPluralRanges->resolve(form1, form2);
+ return UnicodeString(StandardPlural::getKeyword(result), -1, US_INV);
+}
StringEnumeration*
@@ -326,9 +378,23 @@ static double scaleForInt(double d) {
return scale;
}
+/**
+ * Helper method for the overrides of getSamples() for double and FixedDecimal
+ * return value types. Provide only one of an allocated array of doubles or
+ * FixedDecimals, and a nullptr for the other.
+ */
static int32_t
-getSamplesFromString(const UnicodeString &samples, double *dest,
- int32_t destCapacity, UErrorCode& status) {
+getSamplesFromString(const UnicodeString &samples, double *destDbl,
+ FixedDecimal* destFd, int32_t destCapacity,
+ UErrorCode& status) {
+
+ if ((destDbl == nullptr && destFd == nullptr)
+ || (destDbl != nullptr && destFd != nullptr)) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return 0;
+ }
+
+ bool isDouble = destDbl != nullptr;
int32_t sampleCount = 0;
int32_t sampleStartIdx = 0;
int32_t sampleEndIdx = 0;
@@ -346,9 +412,13 @@ getSamplesFromString(const UnicodeString &samples, double *dest,
int32_t tildeIndex = sampleRange.indexOf(TILDE);
if (tildeIndex < 0) {
FixedDecimal fixed(sampleRange, status);
- double sampleValue = fixed.source;
- if (fixed.visibleDecimalDigitCount == 0 || sampleValue != floor(sampleValue)) {
- dest[sampleCount++] = sampleValue;
+ if (isDouble) {
+ double sampleValue = fixed.source;
+ if (fixed.visibleDecimalDigitCount == 0 || sampleValue != floor(sampleValue)) {
+ destDbl[sampleCount++] = sampleValue;
+ }
+ } else {
+ destFd[sampleCount++] = fixed;
}
} else {
@@ -375,14 +445,21 @@ getSamplesFromString(const UnicodeString &samples, double *dest,
rangeLo *= scale;
rangeHi *= scale;
for (double n=rangeLo; n<=rangeHi; n+=1) {
- // Hack Alert: don't return any decimal samples with integer values that
- // originated from a format with trailing decimals.
- // This API is returning doubles, which can't distinguish having displayed
- // zeros to the right of the decimal.
- // This results in test failures with values mapping back to a different keyword.
double sampleValue = n/scale;
- if (!(sampleValue == floor(sampleValue) && fixedLo.visibleDecimalDigitCount > 0)) {
- dest[sampleCount++] = sampleValue;
+ if (isDouble) {
+ // Hack Alert: don't return any decimal samples with integer values that
+ // originated from a format with trailing decimals.
+ // This API is returning doubles, which can't distinguish having displayed
+ // zeros to the right of the decimal.
+ // This results in test failures with values mapping back to a different keyword.
+ if (!(sampleValue == floor(sampleValue) && fixedLo.visibleDecimalDigitCount > 0)) {
+ destDbl[sampleCount++] = sampleValue;
+ }
+ } else {
+ int32_t v = (int32_t) fixedLo.getPluralOperand(PluralOperand::PLURAL_OPERAND_V);
+ int32_t e = (int32_t) fixedLo.getPluralOperand(PluralOperand::PLURAL_OPERAND_E);
+ FixedDecimal newSample = FixedDecimal::createWithExponent(sampleValue, v, e);
+ destFd[sampleCount++] = newSample;
}
if (sampleCount >= destCapacity) {
break;
@@ -394,24 +471,52 @@ getSamplesFromString(const UnicodeString &samples, double *dest,
return sampleCount;
}
-
int32_t
PluralRules::getSamples(const UnicodeString &keyword, double *dest,
int32_t destCapacity, UErrorCode& status) {
- if (destCapacity == 0 || U_FAILURE(status)) {
+ if (U_FAILURE(status)) {
return 0;
}
if (U_FAILURE(mInternalStatus)) {
status = mInternalStatus;
return 0;
}
+ if (dest != nullptr ? destCapacity < 0 : destCapacity != 0) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
RuleChain *rc = rulesForKeyword(keyword);
if (rc == nullptr) {
return 0;
}
- int32_t numSamples = getSamplesFromString(rc->fIntegerSamples, dest, destCapacity, status);
+ int32_t numSamples = getSamplesFromString(rc->fIntegerSamples, dest, nullptr, destCapacity, status);
if (numSamples == 0) {
- numSamples = getSamplesFromString(rc->fDecimalSamples, dest, destCapacity, status);
+ numSamples = getSamplesFromString(rc->fDecimalSamples, dest, nullptr, destCapacity, status);
+ }
+ return numSamples;
+}
+
+int32_t
+PluralRules::getSamples(const UnicodeString &keyword, FixedDecimal *dest,
+ int32_t destCapacity, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return 0;
+ }
+ if (U_FAILURE(mInternalStatus)) {
+ status = mInternalStatus;
+ return 0;
+ }
+ if (dest != nullptr ? destCapacity < 0 : destCapacity != 0) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+ RuleChain *rc = rulesForKeyword(keyword);
+ if (rc == nullptr) {
+ return 0;
+ }
+ int32_t numSamples = getSamplesFromString(rc->fIntegerSamples, nullptr, dest, destCapacity, status);
+ if (numSamples == 0) {
+ numSamples = getSamplesFromString(rc->fDecimalSamples, nullptr, dest, destCapacity, status);
}
return numSamples;
}
@@ -600,6 +705,7 @@ PluralRuleParser::parse(const UnicodeString& ruleData, PluralRules *prules, UErr
case tVariableI:
case tVariableF:
case tVariableT:
+ case tVariableE:
case tVariableV:
U_ASSERT(curAndConstraint != nullptr);
curAndConstraint->digitsType = type;
@@ -984,6 +1090,8 @@ static UnicodeString tokenString(tokenType tok) {
s.append(LOW_V); break;
case tVariableT:
s.append(LOW_T); break;
+ case tVariableE:
+ s.append(LOW_E); break;
default:
s.append(TILDE);
}
@@ -1160,6 +1268,7 @@ PluralRuleParser::checkSyntax(UErrorCode &status)
case tVariableI:
case tVariableF:
case tVariableT:
+ case tVariableE:
case tVariableV:
if (type != tIs && type != tMod && type != tIn &&
type != tNot && type != tWithin && type != tEqual && type != tNotEqual) {
@@ -1176,6 +1285,7 @@ PluralRuleParser::checkSyntax(UErrorCode &status)
type == tVariableI ||
type == tVariableF ||
type == tVariableT ||
+ type == tVariableE ||
type == tVariableV ||
type == tAt)) {
status = U_UNEXPECTED_TOKEN;
@@ -1207,6 +1317,7 @@ PluralRuleParser::checkSyntax(UErrorCode &status)
type != tVariableI &&
type != tVariableF &&
type != tVariableT &&
+ type != tVariableE &&
type != tVariableV) {
status = U_UNEXPECTED_TOKEN;
}
@@ -1384,6 +1495,8 @@ PluralRuleParser::getKeyType(const UnicodeString &token, tokenType keyType)
keyType = tVariableF;
} else if (0 == token.compare(PK_VAR_T, 1)) {
keyType = tVariableT;
+ } else if (0 == token.compare(PK_VAR_E, 1)) {
+ keyType = tVariableE;
} else if (0 == token.compare(PK_VAR_V, 1)) {
keyType = tVariableV;
} else if (0 == token.compare(PK_IS, 2)) {
@@ -1481,13 +1594,15 @@ PluralOperand tokenTypeToPluralOperand(tokenType tt) {
return PLURAL_OPERAND_V;
case tVariableT:
return PLURAL_OPERAND_T;
+ case tVariableE:
+ return PLURAL_OPERAND_E;
default:
UPRV_UNREACHABLE; // unexpected.
}
}
-FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f) {
- init(n, v, f);
+FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f, int32_t e) {
+ init(n, v, f, e);
// check values. TODO make into unit test.
//
// long visiblePower = (int) Math.pow(10, v);
@@ -1503,6 +1618,10 @@ FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f) {
// }
}
+FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f) {
+ init(n, v, f);
+}
+
FixedDecimal::FixedDecimal(double n, int32_t v) {
// Ugly, but for samples we don't care.
init(n, v, getFractionalDigits(n, v));
@@ -1522,20 +1641,36 @@ FixedDecimal::FixedDecimal() {
FixedDecimal::FixedDecimal(const UnicodeString &num, UErrorCode &status) {
CharString cs;
- cs.appendInvariantChars(num, status);
+ int32_t parsedExponent = 0;
+
+ int32_t exponentIdx = num.indexOf(u'e');
+ if (exponentIdx < 0) {
+ exponentIdx = num.indexOf(u'E');
+ }
+ if (exponentIdx >= 0) {
+ cs.appendInvariantChars(num.tempSubString(0, exponentIdx), status);
+ int32_t expSubstrStart = exponentIdx + 1;
+ parsedExponent = ICU_Utility::parseAsciiInteger(num, expSubstrStart);
+ }
+ else {
+ cs.appendInvariantChars(num, status);
+ }
+
DecimalQuantity dl;
dl.setToDecNumber(cs.toStringPiece(), status);
if (U_FAILURE(status)) {
init(0, 0, 0);
return;
}
+
int32_t decimalPoint = num.indexOf(DOT);
double n = dl.toDouble();
if (decimalPoint == -1) {
- init(n, 0, 0);
+ init(n, 0, 0, parsedExponent);
} else {
- int32_t v = num.length() - decimalPoint - 1;
- init(n, v, getFractionalDigits(n, v));
+ int32_t fractionNumLength = exponentIdx < 0 ? num.length() : cs.length();
+ int32_t v = fractionNumLength - decimalPoint - 1;
+ init(n, v, getFractionalDigits(n, v), parsedExponent);
}
}
@@ -1546,6 +1681,7 @@ FixedDecimal::FixedDecimal(const FixedDecimal &other) {
decimalDigits = other.decimalDigits;
decimalDigitsWithoutTrailingZeros = other.decimalDigitsWithoutTrailingZeros;
intValue = other.intValue;
+ exponent = other.exponent;
_hasIntegerValue = other._hasIntegerValue;
isNegative = other.isNegative;
_isNaN = other._isNaN;
@@ -1554,6 +1690,10 @@ FixedDecimal::FixedDecimal(const FixedDecimal &other) {
FixedDecimal::~FixedDecimal() = default;
+FixedDecimal FixedDecimal::createWithExponent(double n, int32_t v, int32_t e) {
+ return FixedDecimal(n, v, getFractionalDigits(n, v), e);
+}
+
void FixedDecimal::init(double n) {
int32_t numFractionDigits = decimals(n);
@@ -1562,10 +1702,17 @@ void FixedDecimal::init(double n) {
void FixedDecimal::init(double n, int32_t v, int64_t f) {
+ int32_t exponent = 0;
+ init(n, v, f, exponent);
+}
+
+
+void FixedDecimal::init(double n, int32_t v, int64_t f, int32_t e) {
isNegative = n < 0.0;
source = fabs(n);
_isNaN = uprv_isNaN(source);
_isInfinite = uprv_isInfinite(source);
+ exponent = e;
if (_isNaN || _isInfinite) {
v = 0;
f = 0;
@@ -1661,7 +1808,9 @@ int64_t FixedDecimal::getFractionalDigits(double n, int32_t v) {
case 3: return (int64_t)(fract*1000.0 + 0.5);
default:
double scaled = floor(fract * pow(10.0, (double)v) + 0.5);
- if (scaled > U_INT64_MAX) {
+ if (scaled >= static_cast<double>(U_INT64_MAX)) {
+ // Note: a double cannot accurately represent U_INT64_MAX. Casting it to double
+ // will round up to the next representable value, which is U_INT64_MAX + 1.
return U_INT64_MAX;
} else {
return (int64_t)scaled;
@@ -1693,6 +1842,7 @@ double FixedDecimal::getPluralOperand(PluralOperand operand) const {
case PLURAL_OPERAND_F: return static_cast<double>(decimalDigits);
case PLURAL_OPERAND_T: return static_cast<double>(decimalDigitsWithoutTrailingZeros);
case PLURAL_OPERAND_V: return visibleDecimalDigitCount;
+ case PLURAL_OPERAND_E: return exponent;
default:
UPRV_UNREACHABLE; // unexpected.
}
@@ -1718,6 +1868,23 @@ int32_t FixedDecimal::getVisibleFractionDigitCount() const {
return visibleDecimalDigitCount;
}
+bool FixedDecimal::operator==(const FixedDecimal &other) const {
+ return source == other.source && visibleDecimalDigitCount == other.visibleDecimalDigitCount
+ && decimalDigits == other.decimalDigits && exponent == other.exponent;
+}
+
+UnicodeString FixedDecimal::toString() const {
+ char pattern[15];
+ char buffer[20];
+ if (exponent == 0) {
+ snprintf(pattern, sizeof(pattern), "%%.%df", visibleDecimalDigitCount);
+ snprintf(buffer, sizeof(buffer), pattern, source);
+ } else {
+ snprintf(pattern, sizeof(pattern), "%%.%dfe%%d", visibleDecimalDigitCount);
+ snprintf(buffer, sizeof(buffer), pattern, source, exponent);
+ }
+ return UnicodeString(buffer, -1, US_INV);
+}
PluralAvailableLocalesEnumeration::PluralAvailableLocalesEnumeration(UErrorCode &status) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h b/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
index 3a919ea9f5d..52af3a74131 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
@@ -30,6 +30,12 @@
#include "hash.h"
#include "uassert.h"
+/**
+ * A FixedDecimal version of UPLRULES_NO_UNIQUE_VALUE used in PluralRulesTest
+ * for parsing of samples.
+ */
+#define UPLRULES_NO_UNIQUE_VALUE_DECIMAL (FixedDecimal((double)-0.00123456777))
+
class PluralRulesTest;
U_NAMESPACE_BEGIN
@@ -138,6 +144,7 @@ enum tokenType {
tVariableF,
tVariableV,
tVariableT,
+ tVariableE,
tDecimal,
tInteger,
tEOF
@@ -215,6 +222,12 @@ enum PluralOperand {
PLURAL_OPERAND_W,
/**
+ * Suppressed exponent for compact notation (exponent needed in
+ * scientific notation with compact notation to approximate i).
+ */
+ PLURAL_OPERAND_E,
+
+ /**
* THIS OPERAND IS DEPRECATED AND HAS BEEN REMOVED FROM THE SPEC.
*
* <p>Returns the integer value, but will fail if the number has fraction digits.
@@ -267,7 +280,9 @@ class U_I18N_API FixedDecimal: public IFixedDecimal, public UObject {
* @param n the number, e.g. 12.345
* @param v The number of visible fraction digits, e.g. 3
* @param f The fraction digits, e.g. 345
+ * @param e The exponent, e.g. 7 in 1.2e7 (for compact/scientific)
*/
+ FixedDecimal(double n, int32_t v, int64_t f, int32_t e);
FixedDecimal(double n, int32_t v, int64_t f);
FixedDecimal(double n, int32_t);
explicit FixedDecimal(double n);
@@ -276,6 +291,8 @@ class U_I18N_API FixedDecimal: public IFixedDecimal, public UObject {
FixedDecimal(const UnicodeString &s, UErrorCode &ec);
FixedDecimal(const FixedDecimal &other);
+ static FixedDecimal createWithExponent(double n, int32_t v, int32_t e);
+
double getPluralOperand(PluralOperand operand) const U_OVERRIDE;
bool isNaN() const U_OVERRIDE;
bool isInfinite() const U_OVERRIDE;
@@ -285,19 +302,25 @@ class U_I18N_API FixedDecimal: public IFixedDecimal, public UObject {
int32_t getVisibleFractionDigitCount() const;
+ void init(double n, int32_t v, int64_t f, int32_t e);
void init(double n, int32_t v, int64_t f);
void init(double n);
UBool quickInit(double n); // Try a fast-path only initialization,
- // return TRUE if successful.
+ // return true if successful.
void adjustForMinFractionDigits(int32_t min);
static int64_t getFractionalDigits(double n, int32_t v);
static int32_t decimals(double n);
+ bool operator==(const FixedDecimal &other) const;
+
+ UnicodeString toString() const;
+
double source;
int32_t visibleDecimalDigitCount;
int64_t decimalDigits;
int64_t decimalDigitsWithoutTrailingZeros;
int64_t intValue;
+ int32_t exponent;
UBool _hasIntegerValue;
UBool isNegative;
UBool _isNaN;
@@ -314,8 +337,8 @@ public:
int32_t opNum = -1; // for mod expressions, the right operand of the mod.
int32_t value = -1; // valid for 'is' rules only.
UVector32 *rangeList = nullptr; // for 'in', 'within' rules. Null otherwise.
- UBool negated = FALSE; // TRUE for negated rules.
- UBool integerOnly = FALSE; // TRUE for 'within' rules.
+ UBool negated = false; // true for negated rules.
+ UBool integerOnly = false; // true for 'within' rules.
tokenType digitsType = none; // n | i | v | f constraint.
AndConstraint *next = nullptr;
// Internal error status, used for errors that occur during the copy constructor.
@@ -351,8 +374,8 @@ public:
OrConstraint *ruleHeader = nullptr;
UnicodeString fDecimalSamples; // Samples strings from rule source
UnicodeString fIntegerSamples; // without @decimal or @integer, otherwise unprocessed.
- UBool fDecimalSamplesUnbounded = FALSE;
- UBool fIntegerSamplesUnbounded = FALSE;
+ UBool fDecimalSamplesUnbounded = false;
+ UBool fIntegerSamplesUnbounded = false;
// Internal error status, used for errors that occur during the copy constructor.
UErrorCode fInternalStatus = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/quant.h b/Build/source/libs/icu/icu-src/source/i18n/quant.h
index d5aa8e5eeee..df6924cc127 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/quant.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/quant.h
@@ -62,11 +62,11 @@ class Quantifier : public UnicodeFunctor, public UnicodeMatcher {
* considered for matching will be text.charAt(limit-1) in the
* forward direction or text.charAt(limit+1) in the backward
* direction.
- * @param incremental if TRUE, then assume further characters may
+ * @param incremental if true, then assume further characters may
* be inserted at limit and check for partial matching. Otherwise
* assume the text as given is complete.
* @return a match degree value indicating a full match, a partial
- * match, or a mismatch. If incremental is FALSE then
+ * match, or a mismatch. If incremental is false then
* U_PARTIAL_MATCH should never be returned.
*/
virtual UMatchDegree matches(const Replaceable& text,
@@ -81,7 +81,7 @@ class Quantifier : public UnicodeFunctor, public UnicodeMatcher {
* @return A reference to 'result'.
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = FALSE) const;
+ UBool escapeUnprintable = false) const;
/**
* Implement UnicodeMatcher
diff --git a/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp b/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp
index e88b70fbd71..9c9aa99b670 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp
@@ -204,7 +204,8 @@ void QuantityFormatter::formatAndSelect(
if (U_FAILURE(status)) {
return;
}
- output.append(result, UNUM_FIELD_COUNT, status);
+ // This code path is probably RBNF. Use the generic numeric field.
+ output.append(result, kGeneralNumericField, status);
if (U_FAILURE(status)) {
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h b/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h
index daaef4f060a..841798cf889 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h
@@ -74,18 +74,18 @@ public:
* @param variant "zero", "one", "two", "few", "many", "other"
* @param rawPattern the pattern for the variant e.g "{0} meters"
* @param status any error returned here.
- * @return TRUE on success; FALSE if status was set to a non zero error.
+ * @return true on success; false if status was set to a non zero error.
*/
UBool addIfAbsent(const char *variant, const UnicodeString &rawPattern, UErrorCode &status);
/**
- * returns TRUE if this object has at least the "other" variant.
+ * returns true if this object has at least the "other" variant.
*/
UBool isValid() const;
/**
* Gets the pattern formatter that would be used for a particular variant.
- * If isValid() returns TRUE, this method is guaranteed to return a
+ * If isValid() returns true, this method is guaranteed to return a
* non-NULL value.
*/
const SimpleFormatter *getByVariant(const char *variant) const;
@@ -112,7 +112,7 @@ public:
/**
* Selects the standard plural form for the number/formatter/rules.
- * TODO(13591): Remove this method.
+ * Used in MeasureFormat for backwards compatibility with NumberFormat.
*/
static StandardPlural::Form selectPlural(
const Formattable &number,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt.h b/Build/source/libs/icu/icu-src/source/i18n/rbt.h
index 97ef01e140a..61d3b6be527 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt.h
@@ -161,7 +161,7 @@ public:
* to construct a new transliterator.
* @param result the string to receive the rules. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \uxxxx or
* \Uxxxxxxxx. Unprintable characters are those other than
* U+000A, U+0020..U+007E.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
index 1ae5b81f034..89d426813ce 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
@@ -1557,7 +1557,7 @@ UChar TransliteratorParser::getSegmentStandin(int32_t seg, UErrorCode& status) {
return 0;
}
c = variableNext++;
- // Set a placeholder in the master variables vector that will be
+ // Set a placeholder in the primary variables vector that will be
// filled in later by setSegmentObject(). We know that we will get
// called first because setSegmentObject() will call us.
variablesVector.addElement((void*) NULL, status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
index 61ce9727e05..2a972e1eaa3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
@@ -210,7 +210,7 @@ private:
/**
* Assert that the given character is NOT within the variable range.
- * If it is, return FALSE. This is neccesary to ensure that the
+ * If it is, return false. This is neccesary to ensure that the
* variable range does not overlap characters used in a rule.
* @param ch the given character.
* @return True, if the given character is NOT within the variable range.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h b/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h
index 55019812667..b927f5d6c05 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h
@@ -172,9 +172,9 @@ public:
* segments, or null if there are none. The array itself is adopted,
* but the pointers within it are not.
* @param segsCount number of elements in segs[].
- * @param anchorStart TRUE if the the rule is anchored on the left to
+ * @param anchorStart true if the the rule is anchored on the left to
* the context start.
- * @param anchorEnd TRUE if the rule is anchored on the right to the
+ * @param anchorEnd true if the rule is anchored on the right to the
* context limit.
* @param data the rule data.
* @param status Output parameter filled in with success or failure status.
@@ -267,11 +267,11 @@ public:
*
* @param text the text
* @param pos the position indices
- * @param incremental if TRUE, test for partial matches that may
+ * @param incremental if true, test for partial matches that may
* be completed by additional text inserted at pos.limit.
* @return one of <code>U_MISMATCH</code>,
* <code>U_PARTIAL_MATCH</code>, or <code>U_MATCH</code>. If
- * incremental is FALSE then U_PARTIAL_MATCH will not be returned.
+ * incremental is false then U_PARTIAL_MATCH will not be returned.
*/
UMatchDegree matchAndReplace(Replaceable& text,
UTransPosition& pos,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h b/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
index b4b46786bf1..35ae3fbb4ba 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
@@ -123,14 +123,14 @@ public:
/**
* Transliterate the given text with the given UTransPosition
- * indices. Return TRUE if the transliteration should continue
- * or FALSE if it should halt (because of a U_PARTIAL_MATCH match).
- * Note that FALSE is only ever returned if isIncremental is TRUE.
+ * indices. Return true if the transliteration should continue
+ * or false if it should halt (because of a U_PARTIAL_MATCH match).
+ * Note that false is only ever returned if isIncremental is true.
* @param text the text to be transliterated
* @param index the position indices, which will be updated
- * @param isIncremental if TRUE, assume new text may be inserted
- * at index.limit, and return FALSE if thre is a partial match.
- * @return TRUE unless a U_PARTIAL_MATCH has been obtained,
+ * @param isIncremental if true, assume new text may be inserted
+ * at index.limit, and return false if thre is a partial match.
+ * @return true unless a U_PARTIAL_MATCH has been obtained,
* indicating that transliteration should stop until more text
* arrives.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
index cacc069e962..dd777b75384 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
@@ -148,9 +148,6 @@ void RegexCompile::compile(
if (U_FAILURE(*fStatus)) {
return;
}
- fRXPat->fStaticSets = RegexStaticSets::gStaticSets->fPropSets;
- fRXPat->fStaticSets8 = RegexStaticSets::gStaticSets->fPropSets8;
-
// Initialize the pattern scanning state machine
fPatternLength = utext_nativeLength(pat);
@@ -490,6 +487,12 @@ UBool RegexCompile::doParseActions(int32_t action)
// If this is a named capture group, add the name->group number mapping.
if (fCaptureName != NULL) {
+ if (!fRXPat->initNamedCaptureMap()) {
+ if (U_SUCCESS(*fStatus)) {
+ error(fRXPat->fDeferredStatus);
+ }
+ break;
+ }
int32_t groupNumber = fRXPat->fGroupMap->size();
int32_t previousMapping = uhash_puti(fRXPat->fNamedCaptureMap, fCaptureName, groupNumber, fStatus);
fCaptureName = NULL; // hash table takes ownership of the name (key) string.
@@ -1251,11 +1254,14 @@ UBool RegexCompile::doParseActions(int32_t action)
break;
case doBackslashX:
+ #if UCONFIG_NO_BREAK_ITERATION==1
+ // Grapheme Cluster Boundary requires ICU break iteration.
+ error(U_UNSUPPORTED_ERROR);
+ #endif
fixLiterals(FALSE);
appendOp(URX_BACKSLASH_X, 0);
break;
-
case doBackslashZ:
fixLiterals(FALSE);
appendOp(URX_DOLLAR, 0);
@@ -1345,7 +1351,8 @@ UBool RegexCompile::doParseActions(int32_t action)
case doCompleteNamedBackRef:
{
- int32_t groupNumber = uhash_geti(fRXPat->fNamedCaptureMap, fCaptureName);
+ int32_t groupNumber =
+ fRXPat->fNamedCaptureMap ? uhash_geti(fRXPat->fNamedCaptureMap, fCaptureName) : 0;
if (groupNumber == 0) {
// Group name has not been defined.
// Could be a forward reference. If we choose to support them at some
@@ -1558,15 +1565,15 @@ UBool RegexCompile::doParseActions(int32_t action)
case doSetBackslash_s:
{
UnicodeSet *set = (UnicodeSet *)fSetStack.peek();
- set->addAll(*RegexStaticSets::gStaticSets->fPropSets[URX_ISSPACE_SET]);
+ set->addAll(RegexStaticSets::gStaticSets->fPropSets[URX_ISSPACE_SET]);
break;
}
case doSetBackslash_S:
{
UnicodeSet *set = (UnicodeSet *)fSetStack.peek();
- UnicodeSet SSet(*RegexStaticSets::gStaticSets->fPropSets[URX_ISSPACE_SET]);
- SSet.complement();
+ UnicodeSet SSet;
+ SSet.addAll(RegexStaticSets::gStaticSets->fPropSets[URX_ISSPACE_SET]).complement();
set->addAll(SSet);
break;
}
@@ -1635,15 +1642,15 @@ UBool RegexCompile::doParseActions(int32_t action)
case doSetBackslash_w:
{
UnicodeSet *set = (UnicodeSet *)fSetStack.peek();
- set->addAll(*RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET]);
+ set->addAll(RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET]);
break;
}
case doSetBackslash_W:
{
UnicodeSet *set = (UnicodeSet *)fSetStack.peek();
- UnicodeSet SSet(*RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET]);
- SSet.complement();
+ UnicodeSet SSet;
+ SSet.addAll(RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET]).complement();
set->addAll(SSet);
break;
}
@@ -2418,6 +2425,7 @@ void RegexCompile::compileSet(UnicodeSet *theSet)
{
// The set contains two or more chars. (the normal case)
// Put it into the compiled pattern as a set.
+ theSet->freeze();
int32_t setNumber = fRXPat->fSets->size();
fRXPat->fSets->addElement(theSet, *fStatus);
appendOp(URX_SETREF, setNumber);
@@ -2811,8 +2819,8 @@ void RegexCompile::matchStartType() {
if (currentLen == 0) {
int32_t sn = URX_VAL(op);
U_ASSERT(sn>0 && sn<URX_LAST_SET);
- const UnicodeSet *s = fRXPat->fStaticSets[sn];
- fRXPat->fInitialChars->addAll(*s);
+ const UnicodeSet &s = RegexStaticSets::gStaticSets->fPropSets[sn];
+ fRXPat->fInitialChars->addAll(s);
numInitialStrings += 2;
}
currentLen = safeIncrement(currentLen, 1);
@@ -2824,9 +2832,8 @@ void RegexCompile::matchStartType() {
case URX_STAT_SETREF_N:
if (currentLen == 0) {
int32_t sn = URX_VAL(op);
- const UnicodeSet *s = fRXPat->fStaticSets[sn];
- UnicodeSet sc(*s);
- sc.complement();
+ UnicodeSet sc;
+ sc.addAll(RegexStaticSets::gStaticSets->fPropSets[sn]).complement();
fRXPat->fInitialChars->addAll(sc);
numInitialStrings += 2;
}
@@ -4413,7 +4420,8 @@ UnicodeSet *RegexCompile::createSetForProperty(const UnicodeString &propName, UB
status = U_ZERO_ERROR;
if (propName.caseCompare(u"word", -1, 0) == 0) {
- set.adoptInsteadAndCheckErrorCode(new UnicodeSet(*(fRXPat->fStaticSets[URX_ISWORD_SET])), status);
+ set.adoptInsteadAndCheckErrorCode(
+ RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET].cloneAsThawed(), status);
break;
}
if (propName.compare(u"all", -1) == 0) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
index f2aeea909e7..f3cfa6e6d15 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
@@ -104,7 +104,7 @@ private:
int32_t LoopOp);
UBool compileInlineInterval(); // Generate inline code for a {min,max} quantifier
void literalChar(UChar32 c); // Compile a literal char
- void fixLiterals(UBool split=FALSE); // Generate code for pending literal characters.
+ void fixLiterals(UBool split=false); // Generate code for pending literal characters.
void insertOp(int32_t where); // Open up a slot for a new op in the
// generated code at the specified location.
void appendOp(int32_t op); // Append a new op to the compiled pattern.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcst.h b/Build/source/libs/icu/icu-src/source/i18n/regexcst.h
index 8b12096ac7c..d44c2aec2be 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcst.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcst.h
@@ -20,117 +20,117 @@ U_NAMESPACE_BEGIN
//
// Character classes for regex pattern scanning.
//
- static const uint8_t kRuleSet_ascii_letter = 128;
- static const uint8_t kRuleSet_digit_char = 129;
+ static const uint8_t kRuleSet_digit_char = 128;
+ static const uint8_t kRuleSet_ascii_letter = 129;
static const uint8_t kRuleSet_rule_char = 130;
-
+ constexpr uint32_t kRuleSet_count = 131-128;
enum Regex_PatternParseAction {
- doSetBackslash_V,
- doSetBackslash_h,
- doBeginNamedBackRef,
- doSetMatchMode,
- doEnterQuoteMode,
- doOpenCaptureParen,
- doContinueNamedCapture,
- doSetBackslash_d,
- doBeginMatchMode,
- doBackslashX,
- doSetPosixProp,
- doIntervalError,
+ doSetBackslash_D,
+ doBackslashh,
+ doBackslashH,
doSetLiteralEscaped,
- doSetBackslash_s,
- doNOP,
- doBackslashv,
- doOpenLookBehind,
- doPatStart,
- doPossessiveInterval,
- doOpenAtomicParen,
doOpenLookAheadNeg,
- doBackslashd,
+ doCompleteNamedBackRef,
+ doPatStart,
+ doBackslashS,
+ doBackslashD,
+ doNGStar,
+ doNOP,
+ doBackslashX,
+ doSetLiteral,
+ doContinueNamedCapture,
+ doBackslashG,
+ doBackslashR,
+ doSetBegin,
+ doSetBackslash_v,
+ doPossessivePlus,
+ doPerlInline,
doBackslashZ,
- doIntervalUpperDigit,
- doBadNamedCapture,
- doSetDifference2,
doSetAddAmp,
- doSetNamedChar,
- doNamedChar,
- doSetBackslash_H,
- doBackslashb,
- doBackslashz,
doSetBeginDifference1,
- doOpenLookAhead,
- doMatchModeParen,
- doBackslashV,
- doIntevalLowerDigit,
- doCaret,
- doSetEnd,
+ doIntervalError,
doSetNegate,
- doBackslashS,
- doOrOperator,
- doBackslashB,
- doBackslashw,
- doBackslashR,
+ doIntervalInit,
+ doSetIntersection2,
+ doPossessiveInterval,
doRuleError,
- doDotAny,
- doMatchMode,
- doSetBackslash_W,
- doNGPlus,
- doSetBackslash_D,
- doPossessiveOpt,
- doSetNamedRange,
+ doBackslashW,
+ doContinueNamedBackRef,
+ doOpenNonCaptureParen,
+ doExit,
+ doSetNamedChar,
+ doSetBackslash_V,
doConditionalExpr,
- doBackslashs,
+ doEscapeError,
+ doBadOpenParenType,
doPossessiveStar,
+ doSetAddDash,
+ doEscapedLiteralChar,
+ doSetBackslash_w,
+ doIntervalUpperDigit,
+ doBackslashv,
+ doSetBackslash_S,
+ doSetNoCloseError,
+ doSetProp,
+ doBackslashB,
+ doSetEnd,
+ doSetRange,
+ doMatchModeParen,
doPlus,
- doBadOpenParenType,
+ doBackslashV,
+ doSetMatchMode,
+ doBackslashz,
+ doSetNamedRange,
+ doOpenLookBehindNeg,
+ doInterval,
+ doBadNamedCapture,
+ doBeginMatchMode,
+ doBackslashd,
+ doPatFinish,
+ doNamedChar,
+ doNGPlus,
+ doSetDifference2,
+ doSetBackslash_H,
doCloseParen,
- doNGInterval,
- doSetProp,
+ doDotAny,
+ doOpenCaptureParen,
+ doEnterQuoteMode,
+ doOpenAtomicParen,
+ doBadModeFlag,
+ doSetBackslash_d,
+ doSetFinish,
+ doProperty,
+ doBeginNamedBackRef,
doBackRef,
- doSetBeginUnion,
- doEscapeError,
doOpt,
- doSetBeginIntersection1,
- doPossessivePlus,
- doBackslashD,
- doOpenLookBehindNeg,
- doSetBegin,
- doSetIntersection2,
- doCompleteNamedBackRef,
- doSetRange,
doDollar,
- doBackslashH,
- doExit,
- doNGOpt,
- doOpenNonCaptureParen,
- doBackslashA,
- doSetBackslash_v,
- doBackslashh,
- doBadModeFlag,
- doSetNoCloseError,
- doIntervalSame,
- doSetAddDash,
- doBackslashW,
- doPerlInline,
- doSetOpError,
- doSetLiteral,
- doPatFinish,
doBeginNamedCapture,
- doEscapedLiteralChar,
+ doNGInterval,
+ doSetOpError,
+ doSetPosixProp,
+ doSetBeginIntersection1,
+ doBackslashb,
+ doSetBeginUnion,
+ doIntevalLowerDigit,
+ doSetBackslash_h,
+ doStar,
+ doMatchMode,
+ doBackslashA,
+ doOpenLookBehind,
+ doPossessiveOpt,
+ doOrOperator,
+ doBackslashw,
+ doBackslashs,
doLiteralChar,
doSuppressComments,
+ doCaret,
+ doIntervalSame,
+ doNGOpt,
+ doOpenLookAhead,
+ doSetBackslash_W,
doMismatchedParenErr,
- doNGStar,
- doSetFinish,
- doInterval,
- doBackslashG,
- doStar,
- doSetBackslash_w,
- doSetBackslash_S,
- doProperty,
- doContinueNamedBackRef,
- doIntervalInit,
+ doSetBackslash_s,
rbbiLastAction};
//-------------------------------------------------------------------------------
@@ -197,7 +197,7 @@ static const struct RegexTableEl gRuleParseStateTable[] = {
, {doBadOpenParenType, 255, 206,0, FALSE} // 45
, {doOpenLookBehind, 61 /* = */, 2, 20, TRUE} // 46 open-paren-lookbehind
, {doOpenLookBehindNeg, 33 /* ! */, 2, 20, TRUE} // 47
- , {doBeginNamedCapture, 128, 64,0, FALSE} // 48
+ , {doBeginNamedCapture, 129, 64,0, FALSE} // 48
, {doBadOpenParenType, 255, 206,0, FALSE} // 49
, {doNOP, 41 /* ) */, 255,0, TRUE} // 50 paren-comment
, {doMismatchedParenErr, 253, 206,0, FALSE} // 51
@@ -213,8 +213,8 @@ static const struct RegexTableEl gRuleParseStateTable[] = {
, {doSetMatchMode, 41 /* ) */, 2,0, TRUE} // 61
, {doMatchModeParen, 58 /* : */, 2, 14, TRUE} // 62
, {doBadModeFlag, 255, 206,0, FALSE} // 63
- , {doContinueNamedCapture, 128, 64,0, TRUE} // 64 named-capture
- , {doContinueNamedCapture, 129, 64,0, TRUE} // 65
+ , {doContinueNamedCapture, 129, 64,0, TRUE} // 64 named-capture
+ , {doContinueNamedCapture, 128, 64,0, TRUE} // 65
, {doOpenCaptureParen, 62 /* > */, 2, 14, TRUE} // 66
, {doBadNamedCapture, 255, 206,0, FALSE} // 67
, {doNGStar, 63 /* ? */, 20,0, TRUE} // 68 quant-star
@@ -226,13 +226,13 @@ static const struct RegexTableEl gRuleParseStateTable[] = {
, {doNGOpt, 63 /* ? */, 20,0, TRUE} // 74 quant-opt
, {doPossessiveOpt, 43 /* + */, 20,0, TRUE} // 75
, {doOpt, 255, 20,0, FALSE} // 76
- , {doNOP, 129, 79,0, FALSE} // 77 interval-open
+ , {doNOP, 128, 79,0, FALSE} // 77 interval-open
, {doIntervalError, 255, 206,0, FALSE} // 78
- , {doIntevalLowerDigit, 129, 79,0, TRUE} // 79 interval-lower
+ , {doIntevalLowerDigit, 128, 79,0, TRUE} // 79 interval-lower
, {doNOP, 44 /* , */, 83,0, TRUE} // 80
, {doIntervalSame, 125 /* } */, 86,0, TRUE} // 81
, {doIntervalError, 255, 206,0, FALSE} // 82
- , {doIntervalUpperDigit, 129, 83,0, TRUE} // 83 interval-upper
+ , {doIntervalUpperDigit, 128, 83,0, TRUE} // 83 interval-upper
, {doNOP, 125 /* } */, 86,0, TRUE} // 84
, {doIntervalError, 255, 206,0, FALSE} // 85
, {doNGInterval, 63 /* ? */, 20,0, TRUE} // 86 interval-type
@@ -261,15 +261,15 @@ static const struct RegexTableEl gRuleParseStateTable[] = {
, {doBackslashX, 88 /* X */, 14,0, TRUE} // 109
, {doBackslashZ, 90 /* Z */, 2,0, TRUE} // 110
, {doBackslashz, 122 /* z */, 2,0, TRUE} // 111
- , {doBackRef, 129, 14,0, TRUE} // 112
+ , {doBackRef, 128, 14,0, TRUE} // 112
, {doEscapeError, 253, 206,0, FALSE} // 113
, {doEscapedLiteralChar, 255, 14,0, TRUE} // 114
, {doBeginNamedBackRef, 60 /* < */, 117,0, TRUE} // 115 named-backref
, {doBadNamedCapture, 255, 206,0, FALSE} // 116
- , {doContinueNamedBackRef, 128, 119,0, TRUE} // 117 named-backref-2
+ , {doContinueNamedBackRef, 129, 119,0, TRUE} // 117 named-backref-2
, {doBadNamedCapture, 255, 206,0, FALSE} // 118
- , {doContinueNamedBackRef, 128, 119,0, TRUE} // 119 named-backref-3
- , {doContinueNamedBackRef, 129, 119,0, TRUE} // 120
+ , {doContinueNamedBackRef, 129, 119,0, TRUE} // 119 named-backref-3
+ , {doContinueNamedBackRef, 128, 119,0, TRUE} // 120
, {doCompleteNamedBackRef, 62 /* > */, 14,0, TRUE} // 121
, {doBadNamedCapture, 255, 206,0, FALSE} // 122
, {doSetNegate, 94 /* ^ */, 126,0, TRUE} // 123 set-open
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl b/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl
index 384281ffbad..3d656ed2310 100755
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl
@@ -10,13 +10,13 @@
# regexcst.pl
# Compile the regular expression paser state table data into initialized C data.
# Usage:
-# cd icu/source/i18n
+# cd icu4c/source/i18n
# perl regexcst.pl < regexcst.txt > regexcst.h
#
# The output file, regexcst.h, is included by some of the .cpp regex
# implementation files. This perl script is NOT run as part
# of a normal ICU build. It is run by hand when needed, and the
-# regexcst.h generated file is put back into cvs.
+# regexcst.h generated file is put back into the source code repository.
#
# See regexcst.txt for a description of the input format for this script.
#
@@ -201,6 +201,8 @@ for ($state=1; $state<$num_states; $state++) {
die if ($errors>0);
+print "// © 2016 and later: Unicode, Inc. and others.\n";
+print "// License & terms of use: http://www.unicode.org/copyright.html\n";
print "//---------------------------------------------------------------------------------\n";
print "//\n";
print "// Generated Header File. Do not edit by hand.\n";
@@ -246,6 +248,7 @@ foreach $setName (keys %charClasses) {
$i++;
}
}
+print " constexpr uint32_t kRuleSet_count = $i-128;";
print "\n\n";
#
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp b/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp
index 4f12e87bc66..97e417ab5a8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp
@@ -35,216 +35,101 @@
// generated by a Perl script.
#include "regexst.h"
-
-
U_NAMESPACE_BEGIN
-
-//------------------------------------------------------------------------------
-//
-// Unicode Set pattern strings for all of the required constant sets.
-// Initialized with hex values for portability to EBCDIC based machines.
-// Really ugly, but there's no good way to avoid it.
-//
-//------------------------------------------------------------------------------
-
-// "Rule Char" Characters are those with no special meaning, and therefore do not
-// need to be escaped to appear as literals in a regexp. Expressed
-// as the inverse of those needing escaping -- [^\*\?\+\[\(\)\{\}\^\$\|\\\.]
-static const UChar gRuleSet_rule_char_pattern[] = {
- // [ ^ \ * \ ? \ + \ [ \ ( / )
- 0x5b, 0x5e, 0x5c, 0x2a, 0x5c, 0x3f, 0x5c, 0x2b, 0x5c, 0x5b, 0x5c, 0x28, 0x5c, 0x29,
- // \ { \ } \ ^ \ $ \ | \ \ \ . ]
- 0x5c, 0x7b,0x5c, 0x7d, 0x5c, 0x5e, 0x5c, 0x24, 0x5c, 0x7c, 0x5c, 0x5c, 0x5c, 0x2e, 0x5d, 0};
+// "Rule Char" Characters are those with special meaning, and therefore
+// need to be escaped to appear as literals in a regexp.
+constexpr char16_t const *gRuleSet_rule_chars = u"*?+[(){}^$|\\.";
//
-// Here are the backslash escape characters that ICU's unescape() function
-// will handle.
+// The backslash escape characters that ICU's unescape() function will handle.
//
-static const UChar gUnescapeCharPattern[] = {
-// [ a c e f n r t u U x ]
- 0x5b, 0x61, 0x63, 0x65, 0x66, 0x6e, 0x72, 0x74, 0x75, 0x55, 0x78, 0x5d, 0};
-
+constexpr char16_t const *gUnescapeChars = u"acefnrtuUx";
//
-// Unicode Set Definitions for Regular Expression \w
+// Unicode Set pattern for Regular Expression \w
//
-static const UChar gIsWordPattern[] = {
-// [ \ p { A l p h a b e t i c }
- 0x5b, 0x5c, 0x70, 0x7b, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x7d,
-// \ p { M } Mark
- 0x5c, 0x70, 0x7b, 0x4d, 0x7d,
-// \ p { N d } Digit_Numeric
- 0x5c, 0x70, 0x7b, 0x4e, 0x64, 0x7d,
-// \ p { P c } Connector_Punctuation
- 0x5c, 0x70, 0x7b, 0x50, 0x63, 0x7d,
-// \ u 2 0 0 c \ u 2 0 0 d ]
- 0x5c, 0x75, 0x32, 0x30, 0x30, 0x63, 0x5c, 0x75, 0x32, 0x30, 0x30, 0x64, 0x5d, 0};
-
+constexpr char16_t const *gIsWordPattern = u"[\\p{Alphabetic}\\p{M}\\p{Nd}\\p{Pc}\\u200c\\u200d]";
//
// Unicode Set Definitions for Regular Expression \s
//
-static const UChar gIsSpacePattern[] = {
-// [ \ p { W h i t e S p a c e } ]
- 0x5b, 0x5c, 0x70, 0x7b, 0x57, 0x68, 0x69, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x5d, 0};
-
+constexpr char16_t const *gIsSpacePattern = u"[\\p{WhiteSpace}]";
//
// UnicodeSets used in implementation of Grapheme Cluster detection, \X
//
-static const UChar gGC_ControlPattern[] = {
-// [ [ : Z l : ] [ : Z p : ]
- 0x5b, 0x5b, 0x3a, 0x5A, 0x6c, 0x3a, 0x5d, 0x5b, 0x3a, 0x5A, 0x70, 0x3a, 0x5d,
-// [ : C c : ] [ : C f : ] -
- 0x5b, 0x3a, 0x43, 0x63, 0x3a, 0x5d, 0x5b, 0x3a, 0x43, 0x66, 0x3a, 0x5d, 0x2d,
-// [ : G r a p h e m e _
- 0x5b, 0x3a, 0x47, 0x72, 0x61, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x5f,
-// E x t e n d : ] ]
- 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x3a, 0x5d, 0x5d, 0};
-
-static const UChar gGC_ExtendPattern[] = {
-// [ \ p { G r a p h e m e _
- 0x5b, 0x5c, 0x70, 0x7b, 0x47, 0x72, 0x61, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x5f,
-// E x t e n d } ]
- 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x7d, 0x5d, 0};
+constexpr char16_t const *gGC_ControlPattern = u"[[:Zl:][:Zp:][:Cc:][:Cf:]-[:Grapheme_Extend:]]";
+constexpr char16_t const *gGC_ExtendPattern = u"[\\p{Grapheme_Extend}]";
+constexpr char16_t const *gGC_LPattern = u"[\\p{Hangul_Syllable_Type=L}]";
+constexpr char16_t const *gGC_VPattern = u"[\\p{Hangul_Syllable_Type=V}]";
+constexpr char16_t const *gGC_TPattern = u"[\\p{Hangul_Syllable_Type=T}]";
+constexpr char16_t const *gGC_LVPattern = u"[\\p{Hangul_Syllable_Type=LV}]";
+constexpr char16_t const *gGC_LVTPattern = u"[\\p{Hangul_Syllable_Type=LVT}]";
-static const UChar gGC_LPattern[] = {
-// [ \ p { H a n g u l _ S y l
- 0x5b, 0x5c, 0x70, 0x7b, 0x48, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x5f, 0x53, 0x79, 0x6c,
-// l a b l e _ T y p e = L } ]
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x3d, 0x4c, 0x7d, 0x5d, 0};
-static const UChar gGC_VPattern[] = {
-// [ \ p { H a n g u l _ S y l
- 0x5b, 0x5c, 0x70, 0x7b, 0x48, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x5f, 0x53, 0x79, 0x6c,
-// l a b l e _ T y p e = V } ]
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x3d, 0x56, 0x7d, 0x5d, 0};
-
-static const UChar gGC_TPattern[] = {
-// [ \ p { H a n g u l _ S y l
- 0x5b, 0x5c, 0x70, 0x7b, 0x48, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x5f, 0x53, 0x79, 0x6c,
-// l a b l e _ T y p e = T } ]
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x3d, 0x54, 0x7d, 0x5d, 0};
-
-static const UChar gGC_LVPattern[] = {
-// [ \ p { H a n g u l _ S y l
- 0x5b, 0x5c, 0x70, 0x7b, 0x48, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x5f, 0x53, 0x79, 0x6c,
-// l a b l e _ T y p e = L V } ]
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x3d, 0x4c, 0x56, 0x7d, 0x5d, 0};
-
-static const UChar gGC_LVTPattern[] = {
-// [ \ p { H a n g u l _ S y l
- 0x5b, 0x5c, 0x70, 0x7b, 0x48, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x5f, 0x53, 0x79, 0x6c,
-// l a b l e _ T y p e = L V T } ]
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x3d, 0x4c, 0x56, 0x54, 0x7d, 0x5d, 0};
-
-
-RegexStaticSets *RegexStaticSets::gStaticSets = NULL;
+RegexStaticSets *RegexStaticSets::gStaticSets = nullptr;
UInitOnce gStaticSetsInitOnce = U_INITONCE_INITIALIZER;
-RegexStaticSets::RegexStaticSets(UErrorCode *status)
-:
-fUnescapeCharSet(UnicodeString(TRUE, gUnescapeCharPattern, -1), *status),
-fRuleDigitsAlias(NULL),
-fEmptyText(NULL)
-{
- // First zero out everything
- int i;
- for (i=0; i<URX_LAST_SET; i++) {
- fPropSets[i] = NULL;
- }
- // Then init the sets to their correct values.
- fPropSets[URX_ISWORD_SET] = new UnicodeSet(UnicodeString(TRUE, gIsWordPattern, -1), *status);
- fPropSets[URX_ISSPACE_SET] = new UnicodeSet(UnicodeString(TRUE, gIsSpacePattern, -1), *status);
- fPropSets[URX_GC_EXTEND] = new UnicodeSet(UnicodeString(TRUE, gGC_ExtendPattern, -1), *status);
- fPropSets[URX_GC_CONTROL] = new UnicodeSet(UnicodeString(TRUE, gGC_ControlPattern, -1), *status);
- fPropSets[URX_GC_L] = new UnicodeSet(UnicodeString(TRUE, gGC_LPattern, -1), *status);
- fPropSets[URX_GC_V] = new UnicodeSet(UnicodeString(TRUE, gGC_VPattern, -1), *status);
- fPropSets[URX_GC_T] = new UnicodeSet(UnicodeString(TRUE, gGC_TPattern, -1), *status);
- fPropSets[URX_GC_LV] = new UnicodeSet(UnicodeString(TRUE, gGC_LVPattern, -1), *status);
- fPropSets[URX_GC_LVT] = new UnicodeSet(UnicodeString(TRUE, gGC_LVTPattern, -1), *status);
-
- // Check for null pointers
- if (fPropSets[URX_ISWORD_SET] == NULL || fPropSets[URX_ISSPACE_SET] == NULL || fPropSets[URX_GC_EXTEND] == NULL ||
- fPropSets[URX_GC_CONTROL] == NULL || fPropSets[URX_GC_L] == NULL || fPropSets[URX_GC_V] == NULL ||
- fPropSets[URX_GC_T] == NULL || fPropSets[URX_GC_LV] == NULL || fPropSets[URX_GC_LVT] == NULL) {
- goto ExitConstrDeleteAll;
- }
- if (U_FAILURE(*status)) {
- // Bail out if we were unable to create the above sets.
- // The rest of the initialization needs them, so we cannot proceed.
- return;
- }
-
-
- //
- // The following sets are dynamically constructed, because their
- // initialization strings would be unreasonable.
- //
+RegexStaticSets::RegexStaticSets(UErrorCode *status) {
+ // Initialize the shared static sets to their correct values.
+ fUnescapeCharSet.addAll(UnicodeString(true, gUnescapeChars, -1)).freeze();
+ fPropSets[URX_ISWORD_SET].applyPattern(UnicodeString(true, gIsWordPattern, -1), *status).freeze();
+ fPropSets[URX_ISSPACE_SET].applyPattern(UnicodeString(true, gIsSpacePattern, -1), *status).freeze();
+ fPropSets[URX_GC_EXTEND].applyPattern(UnicodeString(TRUE, gGC_ExtendPattern, -1), *status).freeze();
+ fPropSets[URX_GC_CONTROL].applyPattern(UnicodeString(TRUE, gGC_ControlPattern, -1), *status).freeze();
+ fPropSets[URX_GC_L].applyPattern(UnicodeString(TRUE, gGC_LPattern, -1), *status).freeze();
+ fPropSets[URX_GC_V].applyPattern(UnicodeString(TRUE, gGC_VPattern, -1), *status).freeze();
+ fPropSets[URX_GC_T].applyPattern(UnicodeString(TRUE, gGC_TPattern, -1), *status).freeze();
+ fPropSets[URX_GC_LV].applyPattern(UnicodeString(TRUE, gGC_LVPattern, -1), *status).freeze();
+ fPropSets[URX_GC_LVT].applyPattern(UnicodeString(TRUE, gGC_LVTPattern, -1), *status).freeze();
+
//
// "Normal" is the set of characters that don't need special handling
// when finding grapheme cluster boundaries.
//
- fPropSets[URX_GC_NORMAL] = new UnicodeSet(0, UnicodeSet::MAX_VALUE);
- // Null pointer check
- if (fPropSets[URX_GC_NORMAL] == NULL) {
- goto ExitConstrDeleteAll;
- }
- fPropSets[URX_GC_NORMAL]->remove(0xac00, 0xd7a4);
- fPropSets[URX_GC_NORMAL]->removeAll(*fPropSets[URX_GC_CONTROL]);
- fPropSets[URX_GC_NORMAL]->removeAll(*fPropSets[URX_GC_L]);
- fPropSets[URX_GC_NORMAL]->removeAll(*fPropSets[URX_GC_V]);
- fPropSets[URX_GC_NORMAL]->removeAll(*fPropSets[URX_GC_T]);
+ fPropSets[URX_GC_NORMAL].complement();
+ fPropSets[URX_GC_NORMAL].remove(0xac00, 0xd7a4);
+ fPropSets[URX_GC_NORMAL].removeAll(fPropSets[URX_GC_CONTROL]);
+ fPropSets[URX_GC_NORMAL].removeAll(fPropSets[URX_GC_L]);
+ fPropSets[URX_GC_NORMAL].removeAll(fPropSets[URX_GC_V]);
+ fPropSets[URX_GC_NORMAL].removeAll(fPropSets[URX_GC_T]);
+ fPropSets[URX_GC_NORMAL].freeze();
// Initialize the 8-bit fast bit sets from the parallel full
// UnicodeSets.
- for (i=0; i<URX_LAST_SET; i++) {
- if (fPropSets[i]) {
- fPropSets[i]->compact();
- fPropSets8[i].init(fPropSets[i]);
- }
+ //
+ // TODO: 25 Oct 2019 are these fast 8-bit sets worth keeping?
+ // Measured 3.5% gain on (non) matching with the pattern "x(?:\\S+)+x"
+ // This runs in exponential time, making it easy to adjust the time for
+ // convenient measuring.
+ //
+ // This 8 bit optimization dates from the early days of ICU,
+ // with a less optimized UnicodeSet. At the time, the difference
+ // was substantial.
+
+ for (int32_t i=0; i<URX_LAST_SET; i++) {
+ fPropSets8[i].init(&fPropSets[i]);
}
// Sets used while parsing rules, but not referenced from the parse state table
- fRuleSets[kRuleSet_rule_char-128] = UnicodeSet(UnicodeString(TRUE, gRuleSet_rule_char_pattern, -1), *status);
- fRuleSets[kRuleSet_digit_char-128].add((UChar)0x30, (UChar)0x39); // [0-9]
- fRuleSets[kRuleSet_ascii_letter-128].add((UChar)0x41, (UChar)0x5A); // [A-Z]
- fRuleSets[kRuleSet_ascii_letter-128].add((UChar)0x61, (UChar)0x7A); // [a-z]
+ fRuleSets[kRuleSet_rule_char-128]
+ .addAll(UnicodeString(gRuleSet_rule_chars)).complement().freeze();
+
+ fRuleSets[kRuleSet_digit_char-128].add(u'0', u'9').freeze();
+ fRuleSets[kRuleSet_ascii_letter-128].add(u'A', u'Z').add(u'a', u'z').freeze();
fRuleDigitsAlias = &fRuleSets[kRuleSet_digit_char-128];
- for (i=0; i<UPRV_LENGTHOF(fRuleSets); i++) {
- fRuleSets[i].compact();
- }
- // Finally, initialize an empty string for utility purposes
- fEmptyText = utext_openUChars(NULL, NULL, 0, status);
+ // Finally, initialize an empty UText string for utility purposes
+ fEmptyText = utext_openUChars(nullptr, nullptr, 0, status);
- if (U_SUCCESS(*status)) {
- return;
- }
-
-ExitConstrDeleteAll: // Remove fPropSets and fRuleSets and return error
- for (i=0; i<URX_LAST_SET; i++) {
- delete fPropSets[i];
- fPropSets[i] = NULL;
- }
- if (U_SUCCESS(*status)) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- }
}
RegexStaticSets::~RegexStaticSets() {
- int32_t i;
-
- for (i=0; i<URX_LAST_SET; i++) {
- delete fPropSets[i];
- fPropSets[i] = NULL;
- }
- fRuleDigitsAlias = NULL;
-
+ fRuleDigitsAlias = nullptr;
utext_close(fEmptyText);
}
@@ -255,29 +140,25 @@ RegexStaticSets::~RegexStaticSets() {
// cached memory. Called by ICU's u_cleanup() function.
//
//------------------------------------------------------------------------------
-UBool
-RegexStaticSets::cleanup(void) {
- delete RegexStaticSets::gStaticSets;
- RegexStaticSets::gStaticSets = NULL;
- gStaticSetsInitOnce.reset();
- return TRUE;
-}
U_CDECL_BEGIN
static UBool U_CALLCONV
regex_cleanup(void) {
- return RegexStaticSets::cleanup();
+ delete RegexStaticSets::gStaticSets;
+ RegexStaticSets::gStaticSets = nullptr;
+ gStaticSetsInitOnce.reset();
+ return TRUE;
}
static void U_CALLCONV initStaticSets(UErrorCode &status) {
- U_ASSERT(RegexStaticSets::gStaticSets == NULL);
+ U_ASSERT(RegexStaticSets::gStaticSets == nullptr);
ucln_i18n_registerCleanup(UCLN_I18N_REGEX, regex_cleanup);
RegexStaticSets::gStaticSets = new RegexStaticSets(&status);
if (U_FAILURE(status)) {
delete RegexStaticSets::gStaticSets;
- RegexStaticSets::gStaticSets = NULL;
+ RegexStaticSets::gStaticSets = nullptr;
}
- if (RegexStaticSets::gStaticSets == NULL && U_SUCCESS(status)) {
+ if (RegexStaticSets::gStaticSets == nullptr && U_SUCCESS(status)) {
status = U_MEMORY_ALLOCATION_ERROR;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexst.h b/Build/source/libs/icu/icu-src/source/i18n/regexst.h
index 3f542337410..bcb393dd3f3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexst.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexst.h
@@ -25,6 +25,7 @@
#if !UCONFIG_NO_REGULAR_EXPRESSIONS
#include "regeximp.h"
+#include "regexcst.h"
U_NAMESPACE_BEGIN
@@ -39,17 +40,16 @@ public:
RegexStaticSets(UErrorCode *status);
~RegexStaticSets();
static void initGlobals(UErrorCode *status);
- static UBool cleanup();
- UnicodeSet *fPropSets[URX_LAST_SET]; // The sets for common regex items, e.g. \s
- Regex8BitSet fPropSets8[URX_LAST_SET]; // Fast bitmap sets for latin-1 range for above.
+ UnicodeSet fPropSets[URX_LAST_SET] {}; // The sets for common regex items, e.g. \s
+ Regex8BitSet fPropSets8[URX_LAST_SET] {}; // Fast bitmap sets for latin-1 range for above.
- UnicodeSet fRuleSets[10]; // Sets used while parsing regexp patterns.
- UnicodeSet fUnescapeCharSet; // Set of chars handled by unescape when
- // encountered with a \ in a pattern.
- UnicodeSet *fRuleDigitsAlias;
- UText *fEmptyText; // An empty string, to be used when a matcher
- // is created with no input.
+ UnicodeSet fRuleSets[kRuleSet_count] {}; // Sets used while parsing regexp patterns.
+ UnicodeSet fUnescapeCharSet {}; // Set of chars handled by unescape when
+ // encountered with a \ in a pattern.
+ UnicodeSet *fRuleDigitsAlias {};
+ UText *fEmptyText {}; // An empty string, to be used when a matcher
+ // is created with no input.
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regextxt.h b/Build/source/libs/icu/icu-src/source/i18n/regextxt.h
index 9cfabbe4153..0f64b8437e7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regextxt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/regextxt.h
@@ -29,7 +29,7 @@ U_NAMESPACE_BEGIN
#endif
#ifdef REGEX_DISABLE_CHUNK_MODE
-# define UTEXT_FULL_TEXT_IN_CHUNK(ut,len) (FALSE)
+# define UTEXT_FULL_TEXT_IN_CHUNK(ut,len) (false)
#else
# define UTEXT_FULL_TEXT_IN_CHUNK(ut,len) ((0==((ut)->chunkNativeStart))&&((len)==((ut)->chunkNativeLimit))&&((len)==((ut)->nativeIndexingLimit)))
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/region.cpp b/Build/source/libs/icu/icu-src/source/i18n/region.cpp
index 76445aef328..d8a5ffddc37 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/region.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/region.cpp
@@ -217,7 +217,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
if ( aliasToRegion != NULL && aliasFromRegion == NULL ) { // This is just an alias from some string to a region
uhash_put(newRegionAliases.getAlias(),(void *)aliasFromStr.orphan(), (void *)aliasToRegion,&status);
} else {
- if ( aliasFromRegion == NULL ) { // Deprecated region code not in the master codes list - so need to create a deprecated region for it.
+ if ( aliasFromRegion == NULL ) { // Deprecated region code not in the primary codes list - so need to create a deprecated region for it.
LocalPointer<Region> newRgn(new Region, status);
if ( U_SUCCESS(status) ) {
aliasFromRegion = newRgn.orphan();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
index f66092ba948..b4d4e646b04 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
@@ -728,11 +728,11 @@ const RelativeDateTimeCacheData *LocaleCacheKey<RelativeDateTimeCacheData>::crea
-static constexpr number::impl::Field kRDTNumericField
- = StringBuilderFieldUtils::compress<UFIELD_CATEGORY_RELATIVE_DATETIME, UDAT_REL_NUMERIC_FIELD>();
+static constexpr FormattedStringBuilder::Field kRDTNumericField
+ = {UFIELD_CATEGORY_RELATIVE_DATETIME, UDAT_REL_NUMERIC_FIELD};
-static constexpr number::impl::Field kRDTLiteralField
- = StringBuilderFieldUtils::compress<UFIELD_CATEGORY_RELATIVE_DATETIME, UDAT_REL_LITERAL_FIELD>();
+static constexpr FormattedStringBuilder::Field kRDTLiteralField
+ = {UFIELD_CATEGORY_RELATIVE_DATETIME, UDAT_REL_LITERAL_FIELD};
class FormattedRelativeDateTimeData : public FormattedValueStringBuilderImpl {
public:
@@ -1326,7 +1326,7 @@ ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt,
return res.extract(result, resultCapacity, *status);
}
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ureldatefmt_formatNumericToResult(
const URelativeDateTimeFormatter* reldatefmt,
double offset,
@@ -1369,7 +1369,7 @@ ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt,
return res.extract(result, resultCapacity, *status);
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ureldatefmt_formatToResult(
const URelativeDateTimeFormatter* reldatefmt,
double offset,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp b/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
index 6d6ea0fb5dd..8e496329ad3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
@@ -177,6 +177,7 @@ RegexMatcher::~RegexMatcher() {
#if UCONFIG_NO_BREAK_ITERATION==0
delete fWordBreakItr;
+ delete fGCBreakItr;
#endif
}
@@ -222,6 +223,7 @@ void RegexMatcher::init(UErrorCode &status) {
fDeferredStatus = status;
fData = fSmallData;
fWordBreakItr = NULL;
+ fGCBreakItr = NULL;
fStack = NULL;
fInputText = NULL;
@@ -429,7 +431,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest,
(nextChar >= 0x31 && nextChar <= 0x39)) { // 0..9
groupName.append(nextChar);
} else if (nextChar == RIGHTBRACKET) {
- groupNum = uhash_geti(fPattern->fNamedCaptureMap, &groupName);
+ groupNum = fPattern->fNamedCaptureMap ? uhash_geti(fPattern->fNamedCaptureMap, &groupName) : 0;
if (groupNum == 0) {
status = U_REGEX_INVALID_CAPTURE_GROUP_NAME;
}
@@ -1854,12 +1856,15 @@ RegexMatcher &RegexMatcher::reset(const UnicodeString &input) {
// This is for compatibility for those clients who modify the input string "live" during regex operations.
fInputUniStrMaybeMutable = TRUE;
- if (fWordBreakItr != NULL) {
#if UCONFIG_NO_BREAK_ITERATION==0
- UErrorCode status = U_ZERO_ERROR;
- fWordBreakItr->setText(fInputText, status);
-#endif
+ if (fWordBreakItr) {
+ fWordBreakItr->setText(fInputText, fDeferredStatus);
}
+ if (fGCBreakItr) {
+ fGCBreakItr->setText(fInputText, fDeferredStatus);
+ }
+#endif
+
return *this;
}
@@ -1876,12 +1881,14 @@ RegexMatcher &RegexMatcher::reset(UText *input) {
delete fInput;
fInput = NULL;
- if (fWordBreakItr != NULL) {
#if UCONFIG_NO_BREAK_ITERATION==0
- UErrorCode status = U_ZERO_ERROR;
- fWordBreakItr->setText(input, status);
-#endif
+ if (fWordBreakItr) {
+ fWordBreakItr->setText(input, fDeferredStatus);
+ }
+ if (fGCBreakItr) {
+ fGCBreakItr->setText(fInputText, fDeferredStatus);
}
+#endif
}
reset();
fInputUniStrMaybeMutable = FALSE;
@@ -2065,7 +2072,7 @@ int32_t RegexMatcher::split(UText *input,
UErrorCode &status)
{
//
- // Check arguements for validity
+ // Check arguments for validity
//
if (U_FAILURE(status)) {
return 0;
@@ -2542,7 +2549,7 @@ UBool RegexMatcher::isWordBoundary(int64_t pos) {
// Current char is a combining one. Not a boundary.
return FALSE;
}
- cIsWord = fPattern->fStaticSets[URX_ISWORD_SET]->contains(c);
+ cIsWord = RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET].contains(c);
}
// Back up until we come to a non-combining char, determine whether
@@ -2555,7 +2562,7 @@ UBool RegexMatcher::isWordBoundary(int64_t pos) {
UChar32 prevChar = UTEXT_PREVIOUS32(fInputText);
if (!(u_hasBinaryProperty(prevChar, UCHAR_GRAPHEME_EXTEND)
|| u_charType(prevChar) == U_FORMAT_CHAR)) {
- prevCIsWord = fPattern->fStaticSets[URX_ISWORD_SET]->contains(prevChar);
+ prevCIsWord = RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET].contains(prevChar);
break;
}
}
@@ -2580,7 +2587,7 @@ UBool RegexMatcher::isChunkWordBoundary(int32_t pos) {
// Current char is a combining one. Not a boundary.
return FALSE;
}
- cIsWord = fPattern->fStaticSets[URX_ISWORD_SET]->contains(c);
+ cIsWord = RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET].contains(c);
}
// Back up until we come to a non-combining char, determine whether
@@ -2594,7 +2601,7 @@ UBool RegexMatcher::isChunkWordBoundary(int32_t pos) {
U16_PREV(inputBuf, fLookStart, pos, prevChar);
if (!(u_hasBinaryProperty(prevChar, UCHAR_GRAPHEME_EXTEND)
|| u_charType(prevChar) == U_FORMAT_CHAR)) {
- prevCIsWord = fPattern->fStaticSets[URX_ISWORD_SET]->contains(prevChar);
+ prevCIsWord = RegexStaticSets::gStaticSets->fPropSets[URX_ISWORD_SET].contains(prevChar);
break;
}
}
@@ -2611,37 +2618,60 @@ UBool RegexMatcher::isChunkWordBoundary(int32_t pos) {
// parameters: pos - the current position in the input buffer
//
//--------------------------------------------------------------------------------
-UBool RegexMatcher::isUWordBoundary(int64_t pos) {
+UBool RegexMatcher::isUWordBoundary(int64_t pos, UErrorCode &status) {
UBool returnVal = FALSE;
+
#if UCONFIG_NO_BREAK_ITERATION==0
+ // Note: this point will never be reached if break iteration is configured out.
+ // Regex patterns that would require this function will fail to compile.
// If we haven't yet created a break iterator for this matcher, do it now.
- if (fWordBreakItr == NULL) {
- fWordBreakItr =
- (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getEnglish(), fDeferredStatus);
- if (U_FAILURE(fDeferredStatus)) {
+ if (fWordBreakItr == nullptr) {
+ fWordBreakItr = BreakIterator::createWordInstance(Locale::getEnglish(), status);
+ if (U_FAILURE(status)) {
return FALSE;
}
- fWordBreakItr->setText(fInputText, fDeferredStatus);
+ fWordBreakItr->setText(fInputText, status);
}
+ // Note: zero width boundary tests like \b see through transparent region bounds,
+ // which is why fLookLimit is used here, rather than fActiveLimit.
if (pos >= fLookLimit) {
fHitEnd = TRUE;
returnVal = TRUE; // With Unicode word rules, only positions within the interior of "real"
// words are not boundaries. All non-word chars stand by themselves,
// with word boundaries on both sides.
} else {
- if (!UTEXT_USES_U16(fInputText)) {
- // !!!: Would like a better way to do this!
- UErrorCode status = U_ZERO_ERROR;
- pos = utext_extract(fInputText, 0, pos, NULL, 0, &status);
- }
returnVal = fWordBreakItr->isBoundary((int32_t)pos);
}
#endif
return returnVal;
}
+
+int64_t RegexMatcher::followingGCBoundary(int64_t pos, UErrorCode &status) {
+ int64_t result = pos;
+
+#if UCONFIG_NO_BREAK_ITERATION==0
+ // Note: this point will never be reached if break iteration is configured out.
+ // Regex patterns that would require this function will fail to compile.
+
+ // If we haven't yet created a break iterator for this matcher, do it now.
+ if (fGCBreakItr == nullptr) {
+ fGCBreakItr = BreakIterator::createCharacterInstance(Locale::getEnglish(), status);
+ if (U_FAILURE(status)) {
+ return pos;
+ }
+ fGCBreakItr->setText(fInputText, status);
+ }
+ result = fGCBreakItr->following(pos);
+ if (result == BreakIterator::DONE) {
+ result = pos;
+ }
+#endif
+ return result;
+}
+
//--------------------------------------------------------------------------------
//
// IncrementTime This function is called once each TIMER_INITIAL_VALUE state
@@ -3082,7 +3112,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
case URX_BACKSLASH_BU: // Test for word boundaries, Unicode-style
{
- UBool success = isUWordBoundary(fp->fInputIdx);
+ UBool success = isUWordBoundary(fp->fInputIdx, status);
success ^= (UBool)(opValue != 0); // flip sense for \B
if (!success) {
fp = (REStackFrame *)fStack->popFrame(fFrameSize);
@@ -3184,99 +3214,21 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
case URX_BACKSLASH_X:
- // Match a Grapheme, as defined by Unicode TR 29.
- // Differs slightly from Perl, which consumes combining marks independently
- // of context.
- {
-
- // Fail if at end of input
- if (fp->fInputIdx >= fActiveLimit) {
- fHitEnd = TRUE;
- fp = (REStackFrame *)fStack->popFrame(fFrameSize);
- break;
- }
-
- UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
+ // Match a Grapheme, as defined by Unicode UAX 29.
- // Examine (and consume) the current char.
- // Dispatch into a little state machine, based on the char.
- UChar32 c;
- c = UTEXT_NEXT32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- UnicodeSet **sets = fPattern->fStaticSets;
- if (sets[URX_GC_NORMAL]->contains(c)) goto GC_Extend;
- if (sets[URX_GC_CONTROL]->contains(c)) goto GC_Control;
- if (sets[URX_GC_L]->contains(c)) goto GC_L;
- if (sets[URX_GC_LV]->contains(c)) goto GC_V;
- if (sets[URX_GC_LVT]->contains(c)) goto GC_T;
- if (sets[URX_GC_V]->contains(c)) goto GC_V;
- if (sets[URX_GC_T]->contains(c)) goto GC_T;
- goto GC_Extend;
-
-
-
-GC_L:
- if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
- c = UTEXT_NEXT32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- if (sets[URX_GC_L]->contains(c)) goto GC_L;
- if (sets[URX_GC_LV]->contains(c)) goto GC_V;
- if (sets[URX_GC_LVT]->contains(c)) goto GC_T;
- if (sets[URX_GC_V]->contains(c)) goto GC_V;
- (void)UTEXT_PREVIOUS32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- goto GC_Extend;
-
-GC_V:
- if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
- c = UTEXT_NEXT32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- if (sets[URX_GC_V]->contains(c)) goto GC_V;
- if (sets[URX_GC_T]->contains(c)) goto GC_T;
- (void)UTEXT_PREVIOUS32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- goto GC_Extend;
-
-GC_T:
- if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
- c = UTEXT_NEXT32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- if (sets[URX_GC_T]->contains(c)) goto GC_T;
- (void)UTEXT_PREVIOUS32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- goto GC_Extend;
-
-GC_Extend:
- // Combining characters are consumed here
- for (;;) {
- if (fp->fInputIdx >= fActiveLimit) {
- break;
- }
- c = UTEXT_CURRENT32(fInputText);
- if (sets[URX_GC_EXTEND]->contains(c) == FALSE) {
- break;
- }
- (void)UTEXT_NEXT32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- }
- goto GC_Done;
-
-GC_Control:
- // Most control chars stand alone (don't combine with combining chars),
- // except for that CR/LF sequence is a single grapheme cluster.
- if (c == 0x0d && fp->fInputIdx < fActiveLimit && UTEXT_CURRENT32(fInputText) == 0x0a) {
- c = UTEXT_NEXT32(fInputText);
- fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
- }
-
-GC_Done:
- if (fp->fInputIdx >= fActiveLimit) {
- fHitEnd = TRUE;
- }
+ // Fail if at end of input
+ if (fp->fInputIdx >= fActiveLimit) {
+ fHitEnd = TRUE;
+ fp = (REStackFrame *)fStack->popFrame(fFrameSize);
break;
}
-
+ fp->fInputIdx = followingGCBoundary(fp->fInputIdx, status);
+ if (fp->fInputIdx >= fActiveLimit) {
+ fHitEnd = TRUE;
+ fp->fInputIdx = fActiveLimit;
+ }
+ break;
case URX_BACKSLASH_Z: // Test for end of Input
@@ -3310,13 +3262,13 @@ GC_Done:
UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
UChar32 c = UTEXT_NEXT32(fInputText);
if (c < 256) {
- Regex8BitSet *s8 = &fPattern->fStaticSets8[opValue];
- if (s8->contains(c)) {
+ Regex8BitSet &s8 = RegexStaticSets::gStaticSets->fPropSets8[opValue];
+ if (s8.contains(c)) {
success = !success;
}
} else {
- const UnicodeSet *s = fPattern->fStaticSets[opValue];
- if (s->contains(c)) {
+ const UnicodeSet &s = RegexStaticSets::gStaticSets->fPropSets[opValue];
+ if (s.contains(c)) {
success = !success;
}
}
@@ -3346,14 +3298,14 @@ GC_Done:
UChar32 c = UTEXT_NEXT32(fInputText);
if (c < 256) {
- Regex8BitSet *s8 = &fPattern->fStaticSets8[opValue];
- if (s8->contains(c) == FALSE) {
+ Regex8BitSet &s8 = RegexStaticSets::gStaticSets->fPropSets8[opValue];
+ if (s8.contains(c) == FALSE) {
fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
break;
}
} else {
- const UnicodeSet *s = fPattern->fStaticSets[opValue];
- if (s->contains(c) == FALSE) {
+ const UnicodeSet &s = RegexStaticSets::gStaticSets->fPropSets[opValue];
+ if (s.contains(c) == FALSE) {
fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
break;
}
@@ -4662,7 +4614,7 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
case URX_BACKSLASH_BU: // Test for word boundaries, Unicode-style
{
- UBool success = isUWordBoundary(fp->fInputIdx);
+ UBool success = isUWordBoundary(fp->fInputIdx, status);
success ^= (UBool)(opValue != 0); // flip sense for \B
if (!success) {
fp = (REStackFrame *)fStack->popFrame(fFrameSize);
@@ -4760,12 +4712,8 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
break;
-
case URX_BACKSLASH_X:
- // Match a Grapheme, as defined by Unicode TR 29.
- // Differs slightly from Perl, which consumes combining marks independently
- // of context.
- {
+ // Match a Grapheme, as defined by Unicode UAX 29.
// Fail if at end of input
if (fp->fInputIdx >= fActiveLimit) {
@@ -4774,76 +4722,12 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
break;
}
- // Examine (and consume) the current char.
- // Dispatch into a little state machine, based on the char.
- UChar32 c;
- U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
- UnicodeSet **sets = fPattern->fStaticSets;
- if (sets[URX_GC_NORMAL]->contains(c)) goto GC_Extend;
- if (sets[URX_GC_CONTROL]->contains(c)) goto GC_Control;
- if (sets[URX_GC_L]->contains(c)) goto GC_L;
- if (sets[URX_GC_LV]->contains(c)) goto GC_V;
- if (sets[URX_GC_LVT]->contains(c)) goto GC_T;
- if (sets[URX_GC_V]->contains(c)) goto GC_V;
- if (sets[URX_GC_T]->contains(c)) goto GC_T;
- goto GC_Extend;
-
-
-
-GC_L:
- if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
- U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
- if (sets[URX_GC_L]->contains(c)) goto GC_L;
- if (sets[URX_GC_LV]->contains(c)) goto GC_V;
- if (sets[URX_GC_LVT]->contains(c)) goto GC_T;
- if (sets[URX_GC_V]->contains(c)) goto GC_V;
- U16_PREV(inputBuf, 0, fp->fInputIdx, c);
- goto GC_Extend;
-
-GC_V:
- if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
- U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
- if (sets[URX_GC_V]->contains(c)) goto GC_V;
- if (sets[URX_GC_T]->contains(c)) goto GC_T;
- U16_PREV(inputBuf, 0, fp->fInputIdx, c);
- goto GC_Extend;
-
-GC_T:
- if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
- U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
- if (sets[URX_GC_T]->contains(c)) goto GC_T;
- U16_PREV(inputBuf, 0, fp->fInputIdx, c);
- goto GC_Extend;
-
-GC_Extend:
- // Combining characters are consumed here
- for (;;) {
- if (fp->fInputIdx >= fActiveLimit) {
- break;
- }
- U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
- if (sets[URX_GC_EXTEND]->contains(c) == FALSE) {
- U16_BACK_1(inputBuf, 0, fp->fInputIdx);
- break;
- }
- }
- goto GC_Done;
-
-GC_Control:
- // Most control chars stand alone (don't combine with combining chars),
- // except for that CR/LF sequence is a single grapheme cluster.
- if (c == 0x0d && fp->fInputIdx < fActiveLimit && inputBuf[fp->fInputIdx] == 0x0a) {
- fp->fInputIdx++;
- }
-
-GC_Done:
+ fp->fInputIdx = followingGCBoundary(fp->fInputIdx, status);
if (fp->fInputIdx >= fActiveLimit) {
fHitEnd = TRUE;
+ fp->fInputIdx = fActiveLimit;
}
break;
- }
-
-
case URX_BACKSLASH_Z: // Test for end of Input
@@ -4877,13 +4761,13 @@ GC_Done:
UChar32 c;
U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
if (c < 256) {
- Regex8BitSet *s8 = &fPattern->fStaticSets8[opValue];
- if (s8->contains(c)) {
+ Regex8BitSet &s8 = RegexStaticSets::gStaticSets->fPropSets8[opValue];
+ if (s8.contains(c)) {
success = !success;
}
} else {
- const UnicodeSet *s = fPattern->fStaticSets[opValue];
- if (s->contains(c)) {
+ const UnicodeSet &s = RegexStaticSets::gStaticSets->fPropSets[opValue];
+ if (s.contains(c)) {
success = !success;
}
}
@@ -4909,13 +4793,13 @@ GC_Done:
UChar32 c;
U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
if (c < 256) {
- Regex8BitSet *s8 = &fPattern->fStaticSets8[opValue];
- if (s8->contains(c) == FALSE) {
+ Regex8BitSet &s8 = RegexStaticSets::gStaticSets->fPropSets8[opValue];
+ if (s8.contains(c) == FALSE) {
break;
}
} else {
- const UnicodeSet *s = fPattern->fStaticSets[opValue];
- if (s->contains(c) == FALSE) {
+ const UnicodeSet &s = RegexStaticSets::gStaticSets->fPropSets[opValue];
+ if (s.contains(c) == FALSE) {
break;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp b/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
index 1386d186c4d..b3028e04f7a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
@@ -97,8 +97,6 @@ RegexPattern &RegexPattern::operator = (const RegexPattern &other) {
fMinMatchLen = other.fMinMatchLen;
fFrameSize = other.fFrameSize;
fDataSize = other.fDataSize;
- fStaticSets = other.fStaticSets;
- fStaticSets8 = other.fStaticSets8;
fStartType = other.fStartType;
fInitialStringIdx = other.fInitialStringIdx;
@@ -138,18 +136,20 @@ RegexPattern &RegexPattern::operator = (const RegexPattern &other) {
}
// Copy the named capture group hash map.
- int32_t hashPos = UHASH_FIRST;
- while (const UHashElement *hashEl = uhash_nextElement(other.fNamedCaptureMap, &hashPos)) {
- if (U_FAILURE(fDeferredStatus)) {
- break;
- }
- const UnicodeString *name = (const UnicodeString *)hashEl->key.pointer;
- UnicodeString *key = new UnicodeString(*name);
- int32_t val = hashEl->value.integer;
- if (key == NULL) {
- fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
- } else {
- uhash_puti(fNamedCaptureMap, key, val, &fDeferredStatus);
+ if (other.fNamedCaptureMap != nullptr && initNamedCaptureMap()) {
+ int32_t hashPos = UHASH_FIRST;
+ while (const UHashElement *hashEl = uhash_nextElement(other.fNamedCaptureMap, &hashPos)) {
+ if (U_FAILURE(fDeferredStatus)) {
+ break;
+ }
+ const UnicodeString *name = (const UnicodeString *)hashEl->key.pointer;
+ UnicodeString *key = new UnicodeString(*name);
+ int32_t val = hashEl->value.integer;
+ if (key == NULL) {
+ fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ uhash_puti(fNamedCaptureMap, key, val, &fDeferredStatus);
+ }
}
}
return *this;
@@ -173,8 +173,6 @@ void RegexPattern::init() {
fFrameSize = 0;
fDataSize = 0;
fGroupMap = NULL;
- fStaticSets = NULL;
- fStaticSets8 = NULL;
fStartType = START_NO_INFO;
fInitialStringIdx = 0;
fInitialStringLen = 0;
@@ -191,27 +189,38 @@ void RegexPattern::init() {
fSets = new UVector(fDeferredStatus);
fInitialChars = new UnicodeSet;
fInitialChars8 = new Regex8BitSet;
- fNamedCaptureMap = uhash_open(uhash_hashUnicodeString, // Key hash function
- uhash_compareUnicodeString, // Key comparator function
- uhash_compareLong, // Value comparator function
- &fDeferredStatus);
if (U_FAILURE(fDeferredStatus)) {
return;
}
if (fCompiledPat == NULL || fGroupMap == NULL || fSets == NULL ||
- fInitialChars == NULL || fInitialChars8 == NULL || fNamedCaptureMap == NULL) {
+ fInitialChars == NULL || fInitialChars8 == NULL) {
fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
return;
}
// Slot zero of the vector of sets is reserved. Fill it here.
fSets->addElement((int32_t)0, fDeferredStatus);
+}
+
+
+bool RegexPattern::initNamedCaptureMap() {
+ if (fNamedCaptureMap) {
+ return true;
+ }
+ fNamedCaptureMap = uhash_openSize(uhash_hashUnicodeString, // Key hash function
+ uhash_compareUnicodeString, // Key comparator function
+ uhash_compareLong, // Value comparator function
+ 7, // Initial table capacity
+ &fDeferredStatus);
+ if (U_FAILURE(fDeferredStatus)) {
+ return false;
+ }
// fNamedCaptureMap owns its key strings, type (UnicodeString *)
uhash_setKeyDeleter(fNamedCaptureMap, uprv_deleteUObject);
+ return true;
}
-
//--------------------------------------------------------------------------
//
// zap Delete everything owned by this RegexPattern.
@@ -246,8 +255,10 @@ void RegexPattern::zap() {
delete fPatternString;
fPatternString = NULL;
}
- uhash_close(fNamedCaptureMap);
- fNamedCaptureMap = NULL;
+ if (fNamedCaptureMap != NULL) {
+ uhash_close(fNamedCaptureMap);
+ fNamedCaptureMap = NULL;
+ }
}
@@ -618,7 +629,7 @@ int32_t RegexPattern::groupNumberFromName(const UnicodeString &groupName, UError
// No need to explicitly check for syntactically valid names.
// Invalid ones will never be in the map, and the lookup will fail.
- int32_t number = uhash_geti(fNamedCaptureMap, &groupName);
+ int32_t number = fNamedCaptureMap ? uhash_geti(fNamedCaptureMap, &groupName) : 0;
if (number == 0) {
status = U_REGEX_INVALID_CAPTURE_GROUP_NAME;
}
@@ -790,8 +801,8 @@ void RegexPattern::dumpOp(int32_t index) const {
printf("NOT ");
val &= ~URX_NEG_SET;
}
- UnicodeSet *set = fStaticSets[val];
- set->toPattern(s, TRUE);
+ UnicodeSet &set = RegexStaticSets::gStaticSets->fPropSets[val];
+ set.toPattern(s, TRUE);
printf("%s", CStr(s)());
}
break;
@@ -835,7 +846,7 @@ void RegexPattern::dumpPattern() const {
}
printf("Named Capture Groups:\n");
- if (uhash_count(fNamedCaptureMap) == 0) {
+ if (!fNamedCaptureMap || uhash_count(fNamedCaptureMap) == 0) {
printf(" None\n");
} else {
int32_t pos = UHASH_FIRST;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp b/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
index 60acf17815a..917482d65bb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
@@ -1600,10 +1600,7 @@ RuleBasedCollator::internalGetShortDefinitionString(const char *locale,
appendSubtag(result, 'Z', subtag, length, errorCode);
if(U_FAILURE(errorCode)) { return 0; }
- if(result.length() <= capacity) {
- uprv_memcpy(buffer, result.data(), result.length());
- }
- return u_terminateChars(buffer, capacity, result.length(), &errorCode);
+ return result.extract(buffer, capacity, errorCode);
}
UBool
diff --git a/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp b/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
index 54ead803c2a..18a3b263b71 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
@@ -29,9 +29,7 @@ U_NAMESPACE_BEGIN
//
//----------------------------------------------------------------------------
ScriptSet::ScriptSet() {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = 0;
- }
+ uprv_memset(bits, 0, sizeof(bits));
}
ScriptSet::~ScriptSet() {
@@ -40,16 +38,12 @@ ScriptSet::~ScriptSet() {
ScriptSet::ScriptSet(const ScriptSet &other) {
*this = other;
}
-
ScriptSet & ScriptSet::operator =(const ScriptSet &other) {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = other.bits[i];
- }
+ uprv_memcpy(bits, other.bits, sizeof(bits));
return *this;
}
-
UBool ScriptSet::operator == (const ScriptSet &other) const {
for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
if (bits[i] != other.bits[i]) {
@@ -63,7 +57,7 @@ UBool ScriptSet::test(UScriptCode script, UErrorCode &status) const {
if (U_FAILURE(status)) {
return FALSE;
}
- if (script < 0 || script >= (int32_t)sizeof(bits) * 8) {
+ if (script < 0 || (int32_t)script >= SCRIPT_LIMIT) {
status = U_ILLEGAL_ARGUMENT_ERROR;
return FALSE;
}
@@ -77,7 +71,7 @@ ScriptSet &ScriptSet::set(UScriptCode script, UErrorCode &status) {
if (U_FAILURE(status)) {
return *this;
}
- if (script < 0 || script >= (int32_t)sizeof(bits) * 8) {
+ if (script < 0 || (int32_t)script >= SCRIPT_LIMIT) {
status = U_ILLEGAL_ARGUMENT_ERROR;
return *this;
}
@@ -91,7 +85,7 @@ ScriptSet &ScriptSet::reset(UScriptCode script, UErrorCode &status) {
if (U_FAILURE(status)) {
return *this;
}
- if (script < 0 || script >= (int32_t)sizeof(bits) * 8) {
+ if (script < 0 || (int32_t)script >= SCRIPT_LIMIT) {
status = U_ILLEGAL_ARGUMENT_ERROR;
return *this;
}
@@ -125,7 +119,7 @@ ScriptSet &ScriptSet::intersect(UScriptCode script, UErrorCode &status) {
}
return *this;
}
-
+
UBool ScriptSet::intersects(const ScriptSet &other) const {
for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
if ((bits[i] & other.bits[i]) != 0) {
@@ -151,9 +145,7 @@ ScriptSet &ScriptSet::setAll() {
ScriptSet &ScriptSet::resetAll() {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = 0;
- }
+ uprv_memset(bits, 0, sizeof(bits));
return *this;
}
@@ -185,7 +177,7 @@ int32_t ScriptSet::nextSetBit(int32_t fromIndex) const {
return -1;
}
UErrorCode status = U_ZERO_ERROR;
- for (int32_t scriptIndex = fromIndex; scriptIndex < (int32_t)sizeof(bits)*8; scriptIndex++) {
+ for (int32_t scriptIndex = fromIndex; scriptIndex < SCRIPT_LIMIT; scriptIndex++) {
if (test((UScriptCode)scriptIndex, status)) {
return scriptIndex;
}
@@ -251,7 +243,7 @@ ScriptSet &ScriptSet::parseScripts(const UnicodeString &scriptString, UErrorCode
void ScriptSet::setScriptExtensions(UChar32 codePoint, UErrorCode& status) {
if (U_FAILURE(status)) { return; }
- static const int32_t FIRST_GUESS_SCRIPT_CAPACITY = 5;
+ static const int32_t FIRST_GUESS_SCRIPT_CAPACITY = 20;
MaybeStackArray<UScriptCode,FIRST_GUESS_SCRIPT_CAPACITY> scripts;
UErrorCode internalStatus = U_ZERO_ERROR;
int32_t script_count = -1;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/scriptset.h b/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
index 99a71ec803f..a41ab737a6d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
@@ -35,6 +35,8 @@ U_NAMESPACE_BEGIN
//-------------------------------------------------------------------------------
class U_I18N_API ScriptSet: public UMemory {
public:
+ static constexpr int32_t SCRIPT_LIMIT = 224; // multiple of 32!
+
ScriptSet();
ScriptSet(const ScriptSet &other);
~ScriptSet();
@@ -67,7 +69,7 @@ class U_I18N_API ScriptSet: public UMemory {
void setScriptExtensions(UChar32 codePoint, UErrorCode& status);
private:
- uint32_t bits[6];
+ uint32_t bits[SCRIPT_LIMIT / 32];
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
index 5fcbb5875b2..4717899cf38 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
@@ -54,6 +54,7 @@
#include "unicode/udisplaycontext.h"
#include "unicode/brkiter.h"
#include "unicode/rbnf.h"
+#include "unicode/dtptngen.h"
#include "uresimp.h"
#include "olsontz.h"
#include "patternprops.h"
@@ -583,11 +584,14 @@ SimpleDateFormat& SimpleDateFormat::operator=(const SimpleDateFormat& other)
fHasMinute = other.fHasMinute;
fHasSecond = other.fHasSecond;
- // TimeZoneFormat in ICU4C only depends on a locale for now
- if (fLocale != other.fLocale) {
- delete fTimeZoneFormat;
- fTimeZoneFormat = NULL; // forces lazy instantiation with the other locale
- fLocale = other.fLocale;
+ fLocale = other.fLocale;
+
+ // TimeZoneFormat can now be set independently via setter.
+ // If it is NULL, it will be lazily initialized from locale
+ delete fTimeZoneFormat;
+ fTimeZoneFormat = NULL;
+ if (other.fTimeZoneFormat) {
+ fTimeZoneFormat = new TimeZoneFormat(*other.fTimeZoneFormat);
}
#if !UCONFIG_NO_BREAK_ITERATION
@@ -647,6 +651,12 @@ SimpleDateFormat::operator==(const Format& other) const
}
//----------------------------------------------------------------------
+static const UChar* timeSkeletons[4] = {
+ u"jmmsszzzz", // kFull
+ u"jmmssz", // kLong
+ u"jmmss", // kMedium
+ u"jmm", // kShort
+};
void SimpleDateFormat::construct(EStyle timeStyle,
EStyle dateStyle,
@@ -711,35 +721,75 @@ void SimpleDateFormat::construct(EStyle timeStyle,
fDateOverride.setToBogus();
fTimeOverride.setToBogus();
+ UnicodeString timePattern;
+ if (timeStyle >= kFull && timeStyle <= kShort) {
+ const char* baseLocID = locale.getBaseName();
+ if (baseLocID[0]!=0 && uprv_strcmp(baseLocID,"und")!=0) {
+ UErrorCode useStatus = U_ZERO_ERROR;
+ Locale baseLoc(baseLocID);
+ Locale validLoc(getLocale(ULOC_VALID_LOCALE, useStatus));
+ if (U_SUCCESS(useStatus) && validLoc!=baseLoc) {
+ bool useDTPG = false;
+ const char* baseReg = baseLoc.getCountry(); // empty string if no region
+ if ((baseReg[0]!=0 && uprv_strncmp(baseReg,validLoc.getCountry(),ULOC_COUNTRY_CAPACITY)!=0)
+ || uprv_strncmp(baseLoc.getLanguage(),validLoc.getLanguage(),ULOC_LANG_CAPACITY)!=0) {
+ // use DTPG if
+ // * baseLoc has a region and validLoc does not have the same one (or has none), OR
+ // * validLoc has a different language code than baseLoc
+ useDTPG = true;
+ }
+ if (useDTPG) {
+ // The standard time formats may have the wrong time cycle, because:
+ // the valid locale differs in important ways (region, language) from
+ // the base locale.
+ // We could *also* check whether they do actually have a mismatch with
+ // the time cycle preferences for the region, but that is a lot more
+ // work for little or no additional benefit, since just going ahead
+ // and always synthesizing the time format as per the following should
+ // create a locale-appropriate pattern with cycle that matches the
+ // region preferences anyway.
+ LocalPointer<DateTimePatternGenerator> dtpg(DateTimePatternGenerator::createInstanceNoStdPat(locale, useStatus));
+ if (U_SUCCESS(useStatus)) {
+ UnicodeString timeSkeleton(TRUE, timeSkeletons[timeStyle], -1);
+ timePattern = dtpg->getBestPattern(timeSkeleton, useStatus);
+ }
+ }
+ }
+ }
+ }
+
// if the pattern should include both date and time information, use the date/time
// pattern string as a guide to tell use how to glue together the appropriate date
// and time pattern strings.
if ((timeStyle != kNone) && (dateStyle != kNone))
{
- currentBundle.adoptInstead(
- ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status));
- if (U_FAILURE(status)) {
- status = U_INVALID_FORMAT_ERROR;
- return;
- }
- switch (ures_getType(currentBundle.getAlias())) {
- case URES_STRING: {
- resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status);
- break;
- }
- case URES_ARRAY: {
- resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status);
- ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status);
- fTimeOverride.setTo(TRUE, ovrStr, ovrStrLen);
- break;
- }
- default: {
+ UnicodeString tempus1(timePattern);
+ if (tempus1.length() == 0) {
+ currentBundle.adoptInstead(
+ ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status));
+ if (U_FAILURE(status)) {
status = U_INVALID_FORMAT_ERROR;
return;
}
- }
+ switch (ures_getType(currentBundle.getAlias())) {
+ case URES_STRING: {
+ resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status);
+ break;
+ }
+ case URES_ARRAY: {
+ resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status);
+ ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status);
+ fTimeOverride.setTo(TRUE, ovrStr, ovrStrLen);
+ break;
+ }
+ default: {
+ status = U_INVALID_FORMAT_ERROR;
+ return;
+ }
+ }
- UnicodeString tempus1(TRUE, resStr, resStrLen);
+ tempus1.setTo(TRUE, resStr, resStrLen);
+ }
currentBundle.adoptInstead(
ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)dateStyle, NULL, &status));
@@ -781,29 +831,32 @@ void SimpleDateFormat::construct(EStyle timeStyle,
// pattern string from the resources
// setTo() - see DateFormatSymbols::assignArray comments
else if (timeStyle != kNone) {
- currentBundle.adoptInstead(
- ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status));
- if (U_FAILURE(status)) {
- status = U_INVALID_FORMAT_ERROR;
- return;
- }
- switch (ures_getType(currentBundle.getAlias())) {
- case URES_STRING: {
- resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status);
- break;
- }
- case URES_ARRAY: {
- resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status);
- ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status);
- fDateOverride.setTo(TRUE, ovrStr, ovrStrLen);
- break;
- }
- default: {
+ fPattern.setTo(timePattern);
+ if (fPattern.length() == 0) {
+ currentBundle.adoptInstead(
+ ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status));
+ if (U_FAILURE(status)) {
status = U_INVALID_FORMAT_ERROR;
return;
}
+ switch (ures_getType(currentBundle.getAlias())) {
+ case URES_STRING: {
+ resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status);
+ break;
+ }
+ case URES_ARRAY: {
+ resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status);
+ ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status);
+ fDateOverride.setTo(TRUE, ovrStr, ovrStrLen);
+ break;
+ }
+ default: {
+ status = U_INVALID_FORMAT_ERROR;
+ return;
+ }
+ }
+ fPattern.setTo(TRUE, resStr, resStrLen);
}
- fPattern.setTo(TRUE, resStr, resStrLen);
}
else if (dateStyle != kNone) {
currentBundle.adoptInstead(
@@ -845,7 +898,8 @@ Calendar*
SimpleDateFormat::initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status)
{
if(!U_FAILURE(status)) {
- fCalendar = Calendar::createInstance(adoptZone?adoptZone:TimeZone::createDefault(), locale, status);
+ fCalendar = Calendar::createInstance(
+ adoptZone ? adoptZone : TimeZone::forLocaleOrDefault(locale), locale, status);
}
return fCalendar;
}
@@ -996,7 +1050,8 @@ SimpleDateFormat::_format(Calendar& cal, UnicodeString& appendTo,
// Use subFormat() to format a repeated pattern character
// when a different pattern or non-pattern character is seen
if (ch != prevCh && count > 0) {
- subFormat(appendTo, prevCh, count, capitalizationContext, fieldNum++, handler, *workCal, status);
+ subFormat(appendTo, prevCh, count, capitalizationContext, fieldNum++,
+ prevCh, handler, *workCal, status);
count = 0;
}
if (ch == QUOTE) {
@@ -1023,7 +1078,8 @@ SimpleDateFormat::_format(Calendar& cal, UnicodeString& appendTo,
// Format the last item in the pattern, if any
if (count > 0) {
- subFormat(appendTo, prevCh, count, capitalizationContext, fieldNum++, handler, *workCal, status);
+ subFormat(appendTo, prevCh, count, capitalizationContext, fieldNum++,
+ prevCh, handler, *workCal, status);
}
if (calClone != NULL) {
@@ -1402,10 +1458,11 @@ SimpleDateFormat::processOverrideString(const Locale &locale, const UnicodeStrin
//---------------------------------------------------------------------
void
SimpleDateFormat::subFormat(UnicodeString &appendTo,
- UChar ch,
+ char16_t ch,
int32_t count,
UDisplayContext capitalizationContext,
int32_t fieldNum,
+ char16_t fieldToOutput,
FieldPositionHandler& handler,
Calendar& cal,
UErrorCode& status) const
@@ -1853,8 +1910,11 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
// In either case, fall back to am/pm.
if (toAppend == NULL || toAppend->isBogus()) {
// Reformat with identical arguments except ch, now changed to 'a'.
- subFormat(appendTo, 0x61, count, capitalizationContext, fieldNum,
- handler, cal, status);
+ // We are passing a different fieldToOutput because we want to add
+ // 'b' to field position. This makes this fallback stable when
+ // there is a data change on locales.
+ subFormat(appendTo, u'a', count, capitalizationContext, fieldNum, u'b', handler, cal, status);
+ return;
} else {
appendTo += *toAppend;
}
@@ -1874,9 +1934,11 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
if (ruleSet == NULL) {
// Data doesn't exist for the locale we're looking for.
// Falling back to am/pm.
- subFormat(appendTo, 0x61, count, capitalizationContext, fieldNum,
- handler, cal, status);
- break;
+ // We are passing a different fieldToOutput because we want to add
+ // 'B' to field position. This makes this fallback stable when
+ // there is a data change on locales.
+ subFormat(appendTo, u'a', count, capitalizationContext, fieldNum, u'B', handler, cal, status);
+ return;
}
// Get current display time.
@@ -1945,8 +2007,11 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
if (periodType == DayPeriodRules::DAYPERIOD_AM ||
periodType == DayPeriodRules::DAYPERIOD_PM ||
toAppend->isBogus()) {
- subFormat(appendTo, 0x61, count, capitalizationContext, fieldNum,
- handler, cal, status);
+ // We are passing a different fieldToOutput because we want to add
+ // 'B' to field position iterator. This makes this fallback stable when
+ // there is a data change on locales.
+ subFormat(appendTo, u'a', count, capitalizationContext, fieldNum, u'B', handler, cal, status);
+ return;
}
else {
appendTo += *toAppend;
@@ -1990,7 +2055,7 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
}
#endif
- handler.addAttribute(fgPatternIndexToDateFormatField[patternCharIndex], beginOffset, appendTo.length());
+ handler.addAttribute(DateFormatSymbols::getPatternCharIndex(fieldToOutput), beginOffset, appendTo.length());
}
//----------------------------------------------------------------------
diff --git a/Build/source/libs/icu/icu-src/source/i18n/sources.txt b/Build/source/libs/icu/icu-src/source/i18n/sources.txt
new file mode 100644
index 00000000000..b28f34c86fb
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/sources.txt
@@ -0,0 +1,240 @@
+alphaindex.cpp
+anytrans.cpp
+astro.cpp
+basictz.cpp
+bocsu.cpp
+brktrans.cpp
+buddhcal.cpp
+calendar.cpp
+casetrn.cpp
+cecal.cpp
+chnsecal.cpp
+choicfmt.cpp
+coleitr.cpp
+coll.cpp
+collation.cpp
+collationbuilder.cpp
+collationcompare.cpp
+collationdata.cpp
+collationdatabuilder.cpp
+collationdatareader.cpp
+collationdatawriter.cpp
+collationfastlatin.cpp
+collationfastlatinbuilder.cpp
+collationfcd.cpp
+collationiterator.cpp
+collationkeys.cpp
+collationroot.cpp
+collationrootelements.cpp
+collationruleparser.cpp
+collationsets.cpp
+collationsettings.cpp
+collationtailoring.cpp
+collationweights.cpp
+compactdecimalformat.cpp
+coptccal.cpp
+cpdtrans.cpp
+csdetect.cpp
+csmatch.cpp
+csr2022.cpp
+csrecog.cpp
+csrmbcs.cpp
+csrsbcs.cpp
+csrucode.cpp
+csrutf8.cpp
+curramt.cpp
+currfmt.cpp
+currpinf.cpp
+currunit.cpp
+dangical.cpp
+datefmt.cpp
+dayperiodrules.cpp
+dcfmtsym.cpp
+decContext.cpp
+decNumber.cpp
+decimfmt.cpp
+double-conversion-bignum-dtoa.cpp
+double-conversion-bignum.cpp
+double-conversion-cached-powers.cpp
+double-conversion-double-to-string.cpp
+double-conversion-fast-dtoa.cpp
+double-conversion-string-to-double.cpp
+double-conversion-strtod.cpp
+dtfmtsym.cpp
+dtitvfmt.cpp
+dtitvinf.cpp
+dtptngen.cpp
+dtrule.cpp
+erarules.cpp
+esctrn.cpp
+ethpccal.cpp
+fmtable.cpp
+fmtable_cnv.cpp
+format.cpp
+formatted_string_builder.cpp
+formattedval_iterimpl.cpp
+formattedval_sbimpl.cpp
+formattedvalue.cpp
+fphdlimp.cpp
+fpositer.cpp
+funcrepl.cpp
+gender.cpp
+gregocal.cpp
+gregoimp.cpp
+hebrwcal.cpp
+indiancal.cpp
+inputext.cpp
+islamcal.cpp
+japancal.cpp
+listformatter.cpp
+measfmt.cpp
+measunit.cpp
+measunit_extra.cpp
+measure.cpp
+msgfmt.cpp
+name2uni.cpp
+nfrs.cpp
+nfrule.cpp
+nfsubs.cpp
+nortrans.cpp
+nultrans.cpp
+number_affixutils.cpp
+number_asformat.cpp
+number_capi.cpp
+number_compact.cpp
+number_currencysymbols.cpp
+number_decimalquantity.cpp
+number_decimfmtprops.cpp
+number_fluent.cpp
+number_formatimpl.cpp
+number_grouping.cpp
+number_integerwidth.cpp
+number_longnames.cpp
+number_mapper.cpp
+number_modifiers.cpp
+number_multiplier.cpp
+number_notation.cpp
+number_output.cpp
+number_padding.cpp
+number_patternmodifier.cpp
+number_patternstring.cpp
+number_rounding.cpp
+number_scientific.cpp
+number_skeletons.cpp
+number_symbolswrapper.cpp
+number_usageprefs.cpp
+number_utils.cpp
+numfmt.cpp
+numparse_affixes.cpp
+numparse_compositions.cpp
+numparse_currency.cpp
+numparse_decimal.cpp
+numparse_impl.cpp
+numparse_parsednumber.cpp
+numparse_scientific.cpp
+numparse_symbols.cpp
+numparse_validators.cpp
+numrange_capi.cpp
+numrange_fluent.cpp
+numrange_impl.cpp
+numsys.cpp
+olsontz.cpp
+persncal.cpp
+pluralranges.cpp
+plurfmt.cpp
+plurrule.cpp
+quant.cpp
+quantityformatter.cpp
+rbnf.cpp
+rbt.cpp
+rbt_data.cpp
+rbt_pars.cpp
+rbt_rule.cpp
+rbt_set.cpp
+rbtz.cpp
+regexcmp.cpp
+regeximp.cpp
+regexst.cpp
+regextxt.cpp
+region.cpp
+reldatefmt.cpp
+reldtfmt.cpp
+rematch.cpp
+remtrans.cpp
+repattrn.cpp
+rulebasedcollator.cpp
+scientificnumberformatter.cpp
+scriptset.cpp
+search.cpp
+selfmt.cpp
+sharedbreakiterator.cpp
+simpletz.cpp
+smpdtfmt.cpp
+smpdtfst.cpp
+sortkey.cpp
+standardplural.cpp
+string_segment.cpp
+strmatch.cpp
+strrepl.cpp
+stsearch.cpp
+taiwncal.cpp
+timezone.cpp
+titletrn.cpp
+tmunit.cpp
+tmutamt.cpp
+tmutfmt.cpp
+tolowtrn.cpp
+toupptrn.cpp
+translit.cpp
+transreg.cpp
+tridpars.cpp
+tzfmt.cpp
+tzgnames.cpp
+tznames.cpp
+tznames_impl.cpp
+tzrule.cpp
+tztrans.cpp
+ucal.cpp
+ucln_in.cpp
+ucol.cpp
+ucol_res.cpp
+ucol_sit.cpp
+ucoleitr.cpp
+ucsdet.cpp
+udat.cpp
+udateintervalformat.cpp
+udatpg.cpp
+ufieldpositer.cpp
+uitercollationiterator.cpp
+ulistformatter.cpp
+ulocdata.cpp
+umsg.cpp
+unesctrn.cpp
+uni2name.cpp
+units_data.cpp
+units_complexconverter.cpp
+units_converter.cpp
+units_router.cpp
+unum.cpp
+unumsys.cpp
+upluralrules.cpp
+uregex.cpp
+uregexc.cpp
+uregion.cpp
+usearch.cpp
+uspoof.cpp
+uspoof_build.cpp
+uspoof_conf.cpp
+uspoof_impl.cpp
+utf16collationiterator.cpp
+utf8collationiterator.cpp
+utmscale.cpp
+utrans.cpp
+vtzone.cpp
+vzone.cpp
+windtfmt.cpp
+winnmfmt.cpp
+wintzimpl.cpp
+zonemeta.cpp
+zrule.cpp
+ztrans.cpp
diff --git a/Build/source/libs/icu/icu-src/source/i18n/strmatch.h b/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
index 71ae9849511..4ee5cbd0887 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
@@ -109,11 +109,11 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* considered for matching will be text.charAt(limit-1) in the
* forward direction or text.charAt(limit+1) in the backward
* direction.
- * @param incremental if TRUE, then assume further characters may
+ * @param incremental if true, then assume further characters may
* be inserted at limit and check for partial matching. Otherwise
* assume the text as given is complete.
* @return a match degree value indicating a full match, a partial
- * match, or a mismatch. If incremental is FALSE then
+ * match, or a mismatch. If incremental is false then
* U_PARTIAL_MATCH should never be returned.
*/
virtual UMatchDegree matches(const Replaceable& text,
@@ -128,16 +128,16 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* @return A reference to 'result'.
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = FALSE) const;
+ UBool escapeUnprintable = false) const;
/**
* Implement UnicodeMatcher
- * Returns TRUE if this matcher will match a character c, where c
+ * Returns true if this matcher will match a character c, where c
* & 0xFF == v, at offset, in the forward direction (with limit >
* offset). This is used by <tt>RuleBasedTransliterator</tt> for
* indexing.
* @param v the given value
- * @return TRUE if this matcher will match a character c,
+ * @return true if this matcher will match a character c,
* where c & 0xFF == v
*/
virtual UBool matchesIndexValue(uint8_t v) const;
@@ -181,7 +181,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* replacer that is equal to this one.
* @param result the string to receive the pattern. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \\uxxxx or
* \\Uxxxxxxxx. Unprintable characters are defined by
* Utility.isUnprintable().
diff --git a/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h b/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
index 01d4d31e80b..5fec78d1466 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
@@ -156,7 +156,7 @@ private:
virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
/**
- * Returns TRUE because the Taiwan Calendar does have a default century
+ * Returns true because the Taiwan Calendar does have a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp b/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
index 284334ebf7e..78f538ccecd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
@@ -579,6 +579,24 @@ TimeZone::createDefault()
// -------------------------------------
+TimeZone* U_EXPORT2
+TimeZone::forLocaleOrDefault(const Locale& locale)
+{
+ char buffer[ULOC_KEYWORDS_CAPACITY] = "";
+ UErrorCode localStatus = U_ZERO_ERROR;
+ int32_t count = locale.getKeywordValue("timezone", buffer, sizeof(buffer), localStatus);
+ if (U_FAILURE(localStatus) || localStatus == U_STRING_NOT_TERMINATED_WARNING) {
+ // the "timezone" keyword exceeds ULOC_KEYWORDS_CAPACITY; ignore and use default.
+ count = 0;
+ }
+ if (count > 0) {
+ return TimeZone::createTimeZone(UnicodeString(buffer, count, US_INV));
+ }
+ return TimeZone::createDefault();
+}
+
+// -------------------------------------
+
void U_EXPORT2
TimeZone::adoptDefault(TimeZone* zone)
{
diff --git a/Build/source/libs/icu/icu-src/source/i18n/translit.cpp b/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
index dae87d06d79..ef44f42aa66 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
@@ -1508,28 +1508,35 @@ UBool Transliterator::initializeRegistry(UErrorCode &status) {
*/
//static const char translit_index[] = "translit_index";
+ UErrorCode lstatus = U_ZERO_ERROR;
UResourceBundle *bundle, *transIDs, *colBund;
- bundle = ures_open(U_ICUDATA_TRANSLIT, NULL/*open default locale*/, &status);
- transIDs = ures_getByKey(bundle, RB_RULE_BASED_IDS, 0, &status);
+ bundle = ures_open(U_ICUDATA_TRANSLIT, NULL/*open default locale*/, &lstatus);
+ transIDs = ures_getByKey(bundle, RB_RULE_BASED_IDS, 0, &lstatus);
const UnicodeString T_PART = UNICODE_STRING_SIMPLE("-t-");
int32_t row, maxRows;
- if (U_SUCCESS(status)) {
+ if (lstatus == U_MEMORY_ALLOCATION_ERROR) {
+ delete registry;
+ registry = nullptr;
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return FALSE;
+ }
+ if (U_SUCCESS(lstatus)) {
maxRows = ures_getSize(transIDs);
for (row = 0; row < maxRows; row++) {
- colBund = ures_getByIndex(transIDs, row, 0, &status);
- if (U_SUCCESS(status)) {
+ colBund = ures_getByIndex(transIDs, row, 0, &lstatus);
+ if (U_SUCCESS(lstatus)) {
UnicodeString id(ures_getKey(colBund), -1, US_INV);
if(id.indexOf(T_PART) != -1) {
ures_close(colBund);
continue;
}
- UResourceBundle* res = ures_getNextResource(colBund, NULL, &status);
+ UResourceBundle* res = ures_getNextResource(colBund, NULL, &lstatus);
const char* typeStr = ures_getKey(res);
UChar type;
u_charsToUChars(typeStr, &type, 1);
- if (U_SUCCESS(status)) {
+ if (U_SUCCESS(lstatus)) {
int32_t len = 0;
const UChar *resString;
switch (type) {
@@ -1539,19 +1546,19 @@ UBool Transliterator::initializeRegistry(UErrorCode &status) {
// row[2]=resource, row[3]=direction
{
- resString = ures_getStringByKey(res, "resource", &len, &status);
+ resString = ures_getStringByKey(res, "resource", &len, &lstatus);
UBool visible = (type == 0x0066 /*f*/);
UTransDirection dir =
- (ures_getUnicodeStringByKey(res, "direction", &status).charAt(0) ==
+ (ures_getUnicodeStringByKey(res, "direction", &lstatus).charAt(0) ==
0x0046 /*F*/) ?
UTRANS_FORWARD : UTRANS_REVERSE;
- registry->put(id, UnicodeString(TRUE, resString, len), dir, TRUE, visible, status);
+ registry->put(id, UnicodeString(TRUE, resString, len), dir, TRUE, visible, lstatus);
}
break;
case 0x61: // 'a'
// 'alias'; row[2]=createInstance argument
- resString = ures_getString(res, &len, &status);
- registry->put(id, UnicodeString(TRUE, resString, len), TRUE, TRUE, status);
+ resString = ures_getString(res, &len, &lstatus);
+ registry->put(id, UnicodeString(TRUE, resString, len), TRUE, TRUE, lstatus);
break;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/transreg.h b/Build/source/libs/icu/icu-src/source/i18n/transreg.h
index 041244e1b02..04ed3fb5010 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/transreg.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/transreg.h
@@ -69,7 +69,7 @@ class TransliteratorAlias : public UMemory {
* it when the registry mutex is NOT held, to prevent deadlock.
* It may only be called once.
*
- * Note: Only call create() if isRuleBased() returns FALSE.
+ * Note: Only call create() if isRuleBased() returns false.
*
* This method must be called *outside* of the TransliteratorRegistry
* mutex.
@@ -77,17 +77,17 @@ class TransliteratorAlias : public UMemory {
Transliterator* create(UParseError&, UErrorCode&);
/**
- * Return TRUE if this alias is rule-based. If so, the caller
+ * Return true if this alias is rule-based. If so, the caller
* must call parse() on it, then call TransliteratorRegistry::reget().
*/
UBool isRuleBased() const;
/**
- * If isRuleBased() returns TRUE, then the caller must call this
+ * If isRuleBased() returns true, then the caller must call this
* method, followed by TransliteratorRegistry::reget(). The latter
* method must be called inside the TransliteratorRegistry mutex.
*
- * Note: Only call parse() if isRuleBased() returns TRUE.
+ * Note: Only call parse() if isRuleBased() returns true.
*
* This method must be called *outside* of the TransliteratorRegistry
* mutex, because it can instantiate Transliterators embedded in
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tridpars.h b/Build/source/libs/icu/icu-src/source/i18n/tridpars.h
index 5e42f068a47..03d68ccac91 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tridpars.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/tridpars.h
@@ -222,7 +222,7 @@ class TransliteratorIDParser /* not : public UObject because all methods are sta
* @param source the given source.
* @param target the given target.
* @param variant the given variant
- * @param isSourcePresent If TRUE then the source is present.
+ * @param isSourcePresent If true then the source is present.
* If the source is not present, ANY will be
* given as the source, and isSourcePresent will be null
* @return an array of 4 strings: source, target, variant, and
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h b/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
index 1286eeb80dc..417c0511f81 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
@@ -92,9 +92,9 @@ struct CharacterNode {
UBool fHasValuesVector;
UBool fPadding;
- // No value: fValues == NULL and fHasValuesVector == FALSE
- // One value: fValues == value and fHasValuesVector == FALSE
- // >=2 values: fValues == UVector of values and fHasValuesVector == TRUE
+ // No value: fValues == NULL and fHasValuesVector == false
+ // One value: fValues == value and fHasValuesVector == false
+ // >=2 values: fValues == UVector of values and fHasValuesVector == true
};
inline UBool CharacterNode::hasValues() const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp b/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
index 927b2d36979..c30ce093352 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
@@ -91,7 +91,7 @@ ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec) {
}
}
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getHostTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec) {
int32_t len = 0;
if (ec != NULL && U_SUCCESS(*ec)) {
@@ -154,25 +154,31 @@ ucal_open( const UChar* zoneID,
UCalendarType caltype,
UErrorCode* status)
{
-
- if(U_FAILURE(*status)) return 0;
+ if (U_FAILURE(*status)) {
+ return nullptr;
+ }
- LocalPointer<TimeZone> zone( (zoneID==NULL) ? TimeZone::createDefault()
+ LocalPointer<TimeZone> zone( (zoneID==nullptr) ? TimeZone::createDefault()
: _createTimeZone(zoneID, len, status), *status);
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
if ( caltype == UCAL_GREGORIAN ) {
- char localeBuf[ULOC_LOCALE_IDENTIFIER_CAPACITY];
- if ( locale == NULL ) {
+ char localeBuf[ULOC_LOCALE_IDENTIFIER_CAPACITY];
+ if ( locale == nullptr ) {
locale = uloc_getDefault();
}
- uprv_strncpy(localeBuf, locale, ULOC_LOCALE_IDENTIFIER_CAPACITY);
+ int32_t localeLength = static_cast<int32_t>(uprv_strlen(locale));
+ if (localeLength >= ULOC_LOCALE_IDENTIFIER_CAPACITY) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return nullptr;
+ }
+ uprv_strcpy(localeBuf, locale);
uloc_setKeywordValue("calendar", "gregorian", localeBuf, ULOC_LOCALE_IDENTIFIER_CAPACITY, status);
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
return (UCalendar*)Calendar::createInstance(zone.orphan(), Locale(localeBuf), *status);
}
@@ -182,8 +188,9 @@ ucal_open( const UChar* zoneID,
U_CAPI void U_EXPORT2
ucal_close(UCalendar *cal)
{
-
- delete (Calendar*) cal;
+ if (cal != nullptr) {
+ delete (Calendar*) cal;
+ }
}
U_CAPI UCalendar* U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucln_in.h b/Build/source/libs/icu/icu-src/source/i18n/ucln_in.h
index 2f70a8500e1..765cdd559fb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucln_in.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucln_in.h
@@ -26,6 +26,7 @@ as the functions are suppose to be called.
It's usually best to have child dependencies called first. */
typedef enum ECleanupI18NType {
UCLN_I18N_START = -1,
+ UCLN_I18N_UNIT_EXTRAS,
UCLN_I18N_NUMBER_SKELETONS,
UCLN_I18N_CURRENCY_SPACING,
UCLN_I18N_SPOOF,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h b/Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h
index a251fc461d3..f463957fd4f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h
@@ -41,10 +41,10 @@
* rules must be equivalent.
* @param source first collator
* @param target second collator
- * @return TRUE or FALSE
+ * @return true or false
* @internal ICU 3.0
*/
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucol_equals(const UCollator *source, const UCollator *target);
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp b/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp
index 43c1f5d6732..4dc81aebcc9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp
@@ -24,6 +24,10 @@
#include "cstring.h"
#include "uresimp.h"
#include "unicode/coll.h"
+#include "unicode/stringpiece.h"
+#include "charstr.h"
+
+U_NAMESPACE_USE
#ifdef UCOL_TRACE_SIT
# include <stdio.h>
@@ -82,7 +86,6 @@ static const char providerKeyword[] = "@sp=";
static const int32_t locElementCount = UCOL_SIT_LOCELEMENT_MAX+1;
static const int32_t locElementCapacity = 32;
static const int32_t loc3066Capacity = 256;
-static const int32_t locProviderCapacity = 10;
static const int32_t internalBufferSize = 512;
/* structure containing specification of a collator. Initialized
@@ -90,20 +93,30 @@ static const int32_t internalBufferSize = 512;
* collator instance
*/
struct CollatorSpec {
- char locElements[locElementCount][locElementCapacity];
- char locale[loc3066Capacity];
- char provider[locProviderCapacity];
+ inline CollatorSpec();
+
+ CharString locElements[locElementCount];
+ CharString locale;
UColAttributeValue options[UCOL_ATTRIBUTE_COUNT];
uint32_t variableTopValue;
UChar variableTopString[locElementCapacity];
int32_t variableTopStringLen;
UBool variableTopSet;
- struct {
- const char *start;
- int32_t len;
- } entries[UCOL_SIT_ITEMS_COUNT];
+ CharString entries[UCOL_SIT_ITEMS_COUNT];
};
+CollatorSpec::CollatorSpec() :
+locale(),
+variableTopValue(0),
+variableTopString(),
+variableTopSet(FALSE)
+ {
+ // set collation options to default
+ for(int32_t i = 0; i < UCOL_ATTRIBUTE_COUNT; i++) {
+ options[i] = UCOL_DEFAULT;
+ }
+}
+
/* structure for converting between character attribute
* representation and real collation attribute value.
@@ -156,18 +169,13 @@ static const char* U_CALLCONV
_processLocaleElement(CollatorSpec *spec, uint32_t value, const char* string,
UErrorCode *status)
{
- int32_t len = 0;
do {
if(value == UCOL_SIT_LANGUAGE || value == UCOL_SIT_KEYWORD || value == UCOL_SIT_PROVIDER) {
- spec->locElements[value][len++] = uprv_tolower(*string);
+ spec->locElements[value].append(uprv_tolower(*string), *status);
} else {
- spec->locElements[value][len++] = *string;
+ spec->locElements[value].append(*string, *status);
}
- } while(*(++string) != '_' && *string && len < locElementCapacity);
- if(len >= locElementCapacity) {
- *status = U_BUFFER_OVERFLOW_ERROR;
- return string;
- }
+ } while(*(++string) != '_' && *string && U_SUCCESS(*status));
// don't skip the underscore at the end
return string;
}
@@ -185,7 +193,7 @@ _processRFC3066Locale(CollatorSpec *spec, uint32_t, const char* string,
*status = U_BUFFER_OVERFLOW_ERROR;
return string;
} else {
- uprv_strncpy(spec->locale, string, end-string);
+ spec->locale.copyFrom(CharString(string, static_cast<int32_t>(end-string), *status), *status);
return end+1;
}
}
@@ -306,9 +314,12 @@ const char* ucol_sit_readOption(const char *start, CollatorSpec *spec,
for(i = 0; i < UCOL_SIT_ITEMS_COUNT; i++) {
if(*start == options[i].optionStart) {
- spec->entries[i].start = start;
const char* end = options[i].action(spec, options[i].attr, start+1, status);
- spec->entries[i].len = (int32_t)(end - start);
+#ifdef UCOL_TRACE_SIT
+ fprintf(stderr, "***Set %d to %s...\n", i, start);
+#endif
+ // assume 'start' does not go away through all this
+ spec->entries[i].copyFrom(CharString(start, (int32_t)(end - start), *status), *status);
return end;
}
}
@@ -319,18 +330,6 @@ const char* ucol_sit_readOption(const char *start, CollatorSpec *spec,
return start;
}
-static
-void ucol_sit_initCollatorSpecs(CollatorSpec *spec)
-{
- // reset everything
- uprv_memset(spec, 0, sizeof(CollatorSpec));
- // set collation options to default
- int32_t i = 0;
- for(i = 0; i < UCOL_ATTRIBUTE_COUNT; i++) {
- spec->options[i] = UCOL_DEFAULT;
- }
-}
-
static const char*
ucol_sit_readSpecs(CollatorSpec *s, const char *string,
UParseError *parseError, UErrorCode *status)
@@ -357,26 +356,23 @@ int32_t ucol_sit_dumpSpecs(CollatorSpec *s, char *destination, int32_t capacity,
char optName;
if(U_SUCCESS(*status)) {
for(i = 0; i < UCOL_SIT_ITEMS_COUNT; i++) {
- if(s->entries[i].start) {
+ if(!s->entries[i].isEmpty()) {
if(len) {
if(len < capacity) {
uprv_strcat(destination, "_");
}
len++;
}
- optName = *(s->entries[i].start);
+ optName = s->entries[i][0];
if(optName == languageArg || optName == regionArg || optName == variantArg || optName == keywordArg) {
- for(j = 0; j < s->entries[i].len; j++) {
+ for(j = 0; j < s->entries[i].length(); j++) {
if(len + j < capacity) {
- destination[len+j] = uprv_toupper(*(s->entries[i].start+j));
+ destination[len+j] = uprv_toupper(s->entries[i][j]);
}
}
- len += s->entries[i].len;
+ len += s->entries[i].length();
} else {
- len += s->entries[i].len;
- if(len < capacity) {
- uprv_strncat(destination,s->entries[i].start, s->entries[i].len);
- }
+ len += s->entries[i].extract(destination + len, capacity - len, *status);
}
}
}
@@ -387,40 +383,40 @@ int32_t ucol_sit_dumpSpecs(CollatorSpec *s, char *destination, int32_t capacity,
}
static void
-ucol_sit_calculateWholeLocale(CollatorSpec *s) {
+ucol_sit_calculateWholeLocale(CollatorSpec *s, UErrorCode &status) {
// put the locale together, unless we have a done
// locale
- if(s->locale[0] == 0) {
+ if(s->locale.isEmpty()) {
// first the language
- uprv_strcat(s->locale, s->locElements[UCOL_SIT_LANGUAGE]);
+ s->locale.append(s->locElements[UCOL_SIT_LANGUAGE], status);
// then the script, if present
- if(*(s->locElements[UCOL_SIT_SCRIPT])) {
- uprv_strcat(s->locale, "_");
- uprv_strcat(s->locale, s->locElements[UCOL_SIT_SCRIPT]);
+ if(!s->locElements[UCOL_SIT_SCRIPT].isEmpty()) {
+ s->locale.append("_", status);
+ s->locale.append(s->locElements[UCOL_SIT_SCRIPT], status);
}
// then the region, if present
- if(*(s->locElements[UCOL_SIT_REGION])) {
- uprv_strcat(s->locale, "_");
- uprv_strcat(s->locale, s->locElements[UCOL_SIT_REGION]);
- } else if(*(s->locElements[UCOL_SIT_VARIANT])) { // if there is a variant, we need an underscore
- uprv_strcat(s->locale, "_");
+ if(!s->locElements[UCOL_SIT_REGION].isEmpty()) {
+ s->locale.append("_", status);
+ s->locale.append(s->locElements[UCOL_SIT_REGION], status);
+ } else if(!s->locElements[UCOL_SIT_VARIANT].isEmpty()) { // if there is a variant, we need an underscore
+ s->locale.append("_", status);
}
// add variant, if there
- if(*(s->locElements[UCOL_SIT_VARIANT])) {
- uprv_strcat(s->locale, "_");
- uprv_strcat(s->locale, s->locElements[UCOL_SIT_VARIANT]);
+ if(!s->locElements[UCOL_SIT_VARIANT].isEmpty()) {
+ s->locale.append("_", status);
+ s->locale.append(s->locElements[UCOL_SIT_VARIANT], status);
}
// if there is a collation keyword, add that too
- if(*(s->locElements[UCOL_SIT_KEYWORD])) {
- uprv_strcat(s->locale, collationKeyword);
- uprv_strcat(s->locale, s->locElements[UCOL_SIT_KEYWORD]);
+ if(!s->locElements[UCOL_SIT_KEYWORD].isEmpty()) {
+ s->locale.append(collationKeyword, status);
+ s->locale.append(s->locElements[UCOL_SIT_KEYWORD], status);
}
// if there is a provider keyword, add that too
- if(*(s->locElements[UCOL_SIT_PROVIDER])) {
- uprv_strcat(s->locale, providerKeyword);
- uprv_strcat(s->locale, s->locElements[UCOL_SIT_PROVIDER]);
+ if(!s->locElements[UCOL_SIT_PROVIDER].isEmpty()) {
+ s->locale.append(providerKeyword, status);
+ s->locale.append(s->locElements[UCOL_SIT_PROVIDER], status);
}
}
}
@@ -451,13 +447,12 @@ ucol_prepareShortStringOpen( const char *definition,
// analyse the string in order to get everything we need.
CollatorSpec s;
- ucol_sit_initCollatorSpecs(&s);
ucol_sit_readSpecs(&s, definition, parseError, status);
- ucol_sit_calculateWholeLocale(&s);
+ ucol_sit_calculateWholeLocale(&s, *status);
char buffer[internalBufferSize];
uprv_memset(buffer, 0, internalBufferSize);
- uloc_canonicalize(s.locale, buffer, internalBufferSize, status);
+ uloc_canonicalize(s.locale.data(), buffer, internalBufferSize, status);
UResourceBundle *b = ures_open(U_ICUDATA_COLL, buffer, status);
/* we try to find stuff from keyword */
@@ -522,13 +517,15 @@ ucol_openFromShortString( const char *definition,
// analyse the string in order to get everything we need.
const char *string = definition;
CollatorSpec s;
- ucol_sit_initCollatorSpecs(&s);
string = ucol_sit_readSpecs(&s, definition, parseError, status);
- ucol_sit_calculateWholeLocale(&s);
+ ucol_sit_calculateWholeLocale(&s, *status);
char buffer[internalBufferSize];
uprv_memset(buffer, 0, internalBufferSize);
- uloc_canonicalize(s.locale, buffer, internalBufferSize, status);
+#ifdef UCOL_TRACE_SIT
+ fprintf(stderr, "DEF %s, DATA %s, ERR %s\n", definition, s.locale.data(), u_errorName(*status));
+#endif
+ uloc_canonicalize(s.locale.data(), buffer, internalBufferSize, status);
UCollator *result = ucol_open(buffer, status);
int32_t i = 0;
@@ -604,7 +601,6 @@ ucol_normalizeShortDefinitionString(const char *definition,
// validate
CollatorSpec s;
- ucol_sit_initCollatorSpecs(&s);
ucol_sit_readSpecs(&s, definition, parseError, status);
return ucol_sit_dumpSpecs(&s, destination, capacity, status);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp b/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp
index 46f69cf90cb..63f204d0e10 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp
@@ -193,7 +193,7 @@ ucsdet_getAllDetectableCharsets(const UCharsetDetector * /*ucsd*/, UErrorCode *s
return CharsetDetector::getAllDetectableCharsets(*status);
}
-U_DRAFT UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status)
{
return ((CharsetDetector *)ucsd)->getDetectableCharsets(*status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/udat.cpp b/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
index ab91bcff412..ba44710ca0a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
@@ -82,19 +82,24 @@ static UCalendarDateFields gDateFieldMapping[] = {
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_ISO_FIELD = 32 (also UCAL_DST_OFFSET)
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33 (also UCAL_DST_OFFSET)
UCAL_EXTENDED_YEAR, // UDAT_RELATED_YEAR_FIELD = 34 (not an exact match)
- UCAL_FIELD_COUNT, // UDAT_FIELD_COUNT = 35
+ UCAL_FIELD_COUNT, // UDAT_AM_PM_MIDNIGHT_NOON_FIELD=35 (no match)
+ UCAL_FIELD_COUNT, // UDAT_FLEXIBLE_DAY_PERIOD_FIELD=36 (no match)
+ UCAL_FIELD_COUNT, // UDAT_TIME_SEPARATOR_FIELD = 37 (no match)
+ // UDAT_FIELD_COUNT = 38 as of ICU 67
// UCAL_IS_LEAP_MONTH is not the target of a mapping
};
U_CAPI UCalendarDateFields U_EXPORT2
udat_toCalendarDateField(UDateFormatField field) {
- return gDateFieldMapping[field];
+ static_assert(UDAT_FIELD_COUNT == UPRV_LENGTHOF(gDateFieldMapping),
+ "UDateFormatField and gDateFieldMapping should have the same number of entries and be kept in sync.");
+ return (field >= UDAT_ERA_FIELD && field < UPRV_LENGTHOF(gDateFieldMapping))? gDateFieldMapping[field]: UCAL_FIELD_COUNT;
}
/* For now- one opener. */
static UDateFormatOpener gOpener = NULL;
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
udat_registerOpener(UDateFormatOpener opener, UErrorCode *status)
{
if(U_FAILURE(*status)) return;
@@ -107,7 +112,7 @@ udat_registerOpener(UDateFormatOpener opener, UErrorCode *status)
umtx_unlock(NULL);
}
-U_INTERNAL UDateFormatOpener U_EXPORT2
+U_CAPI UDateFormatOpener U_EXPORT2
udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status)
{
if(U_FAILURE(*status)) return NULL;
@@ -419,7 +424,7 @@ udat_setLenient( UDateFormat* fmt,
((DateFormat*)fmt)->setLenient(isLenient);
}
-U_DRAFT UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
udat_getBooleanAttribute(const UDateFormat* fmt,
UDateFormatBooleanAttribute attr,
UErrorCode* status)
@@ -429,7 +434,7 @@ udat_getBooleanAttribute(const UDateFormat* fmt,
//return FALSE;
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
udat_setBooleanAttribute(UDateFormat *fmt,
UDateFormatBooleanAttribute attr,
UBool newValue,
@@ -452,7 +457,7 @@ udat_setCalendar(UDateFormat* fmt,
((DateFormat*)fmt)->setCalendar(*((Calendar*)calendarToSet));
}
-U_DRAFT const UNumberFormat* U_EXPORT2
+U_CAPI const UNumberFormat* U_EXPORT2
udat_getNumberFormatForField(const UDateFormat* fmt, UChar field)
{
UErrorCode status = U_ZERO_ERROR;
@@ -467,7 +472,7 @@ udat_getNumberFormat(const UDateFormat* fmt)
return (const UNumberFormat*) ((DateFormat*)fmt)->getNumberFormat();
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
udat_adoptNumberFormatForFields( UDateFormat* fmt,
const UChar* fields,
UNumberFormat* numberFormatToSet,
@@ -489,7 +494,7 @@ udat_setNumberFormat(UDateFormat* fmt,
((DateFormat*)fmt)->setNumberFormat(*((NumberFormat*)numberFormatToSet));
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
udat_adoptNumberFormat( UDateFormat* fmt,
UNumberFormat* numberFormatToAdopt)
{
diff --git a/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp b/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp
index d9eaae4d3e2..355744346a3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp
@@ -18,6 +18,7 @@
#include "unicode/timezone.h"
#include "unicode/locid.h"
#include "unicode/unistr.h"
+#include "unicode/udisplaycontext.h"
#include "formattedval_impl.h"
U_NAMESPACE_USE
@@ -116,20 +117,59 @@ udtitvfmt_format(const UDateIntervalFormat* formatter,
}
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
udtitvfmt_formatToResult(
const UDateIntervalFormat* formatter,
- UFormattedDateInterval* result,
UDate fromDate,
UDate toDate,
+ UFormattedDateInterval* result,
UErrorCode* status) {
if (U_FAILURE(*status)) {
return;
}
auto* resultImpl = UFormattedDateIntervalApiHelper::validate(result, *status);
DateInterval interval = DateInterval(fromDate,toDate);
- resultImpl->fImpl = reinterpret_cast<const DateIntervalFormat*>(formatter)
- ->formatToValue(interval, *status);
+ if (resultImpl != nullptr) {
+ resultImpl->fImpl = reinterpret_cast<const DateIntervalFormat*>(formatter)
+ ->formatToValue(interval, *status);
+ }
+}
+
+U_CAPI void U_EXPORT2
+udtitvfmt_formatCalendarToResult(
+ const UDateIntervalFormat* formatter,
+ UCalendar* fromCalendar,
+ UCalendar* toCalendar,
+ UFormattedDateInterval* result,
+ UErrorCode* status) {
+ if (U_FAILURE(*status)) {
+ return;
+ }
+ auto* resultImpl = UFormattedDateIntervalApiHelper::validate(result, *status);
+ if (resultImpl != nullptr) {
+ resultImpl->fImpl = reinterpret_cast<const DateIntervalFormat*>(formatter)
+ ->formatToValue(*(Calendar *)fromCalendar, *(Calendar *)toCalendar, *status);
+ }
+}
+
+U_CAPI void U_EXPORT2
+udtitvfmt_setContext(UDateIntervalFormat* formatter,
+ UDisplayContext value,
+ UErrorCode* status) {
+ if (U_FAILURE(*status)) {
+ return;
+ }
+ reinterpret_cast<DateIntervalFormat*>(formatter)->setContext( value, *status );
+}
+
+U_CAPI UDisplayContext U_EXPORT2
+udtitvfmt_getContext(const UDateIntervalFormat* formatter,
+ UDisplayContextType type,
+ UErrorCode* status) {
+ if (U_FAILURE(*status)) {
+ return (UDisplayContext)0;
+ }
+ return reinterpret_cast<const DateIntervalFormat*>(formatter)->getContext( type, *status );
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp b/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp
index febf73b3ce4..332636a9388 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp
@@ -291,4 +291,9 @@ udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
return result.getBuffer();
}
+U_CAPI UDateFormatHourCycle U_EXPORT2
+udatpg_getDefaultHourCycle(const UDateTimePatternGenerator *dtpg, UErrorCode* pErrorCode) {
+ return ((const DateTimePatternGenerator *)dtpg)->getDefaultHourCycle(*pErrorCode);
+}
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
index 62b6f834193..3a7b1a0ec23 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
@@ -96,7 +96,7 @@ private:
/**
* Extends the FCD text segment forward or normalizes around pos.
- * @return TRUE if success
+ * @return true if success
*/
UBool nextSegment(UErrorCode &errorCode);
@@ -107,7 +107,7 @@ private:
/**
* Extends the FCD text segment backward or normalizes around pos.
- * @return TRUE if success
+ * @return true if success
*/
UBool previousSegment(UErrorCode &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ulistformatter.cpp b/Build/source/libs/icu/icu-src/source/i18n/ulistformatter.cpp
index f7ad6751d33..bfb7cf96bd4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ulistformatter.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ulistformatter.cpp
@@ -34,6 +34,21 @@ ulistfmt_open(const char* locale,
}
+U_CAPI UListFormatter* U_EXPORT2
+ulistfmt_openForType(const char* locale, UListFormatterType type,
+ UListFormatterWidth width, UErrorCode* status)
+{
+ if (U_FAILURE(*status)) {
+ return NULL;
+ }
+ LocalPointer<ListFormatter> listfmt(ListFormatter::createInstance(Locale(locale), type, width, *status));
+ if (U_FAILURE(*status)) {
+ return NULL;
+ }
+ return (UListFormatter*)listfmt.orphan();
+}
+
+
U_CAPI void U_EXPORT2
ulistfmt_close(UListFormatter *listfmt)
{
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp b/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp
index 7f4e7b9b116..68b9e0cf634 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp
@@ -172,7 +172,7 @@ ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type,
return 0;
}
- delimiter = ures_getStringByKey(delimiterBundle, delimiterKeys[type], &len, &localStatus);
+ delimiter = ures_getStringByKeyWithFallback(delimiterBundle, delimiterKeys[type], &len, &localStatus);
ures_close(delimiterBundle);
if ( (localStatus == U_USING_DEFAULT_WARNING) && uld->noSubstitute ) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
index e3c68ea7cce..edab16bd604 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
@@ -549,14 +549,14 @@ public:
/**
- * Advance the iteration over the Buckets of this index. Return FALSE if
+ * Advance the iteration over the Buckets of this index. Return false if
* there are no more Buckets.
*
* @param status Error code, will be set with the reason if the operation fails.
* U_ENUM_OUT_OF_SYNC_ERROR will be reported if the index is modified while
* an enumeration of its contents are in process.
*
- * @return TRUE if success, FALSE if at end of iteration
+ * @return true if success, false if at end of iteration
* @stable ICU 4.8
*/
virtual UBool nextBucket(UErrorCode &status);
@@ -609,7 +609,7 @@ public:
* @param status Error code, will be set with the reason if the operation fails.
* U_ENUM_OUT_OF_SYNC_ERROR will be reported if the index is modified while
* an enumeration of its contents are in process.
- * @return TRUE if successful, FALSE when the iteration advances past the last item.
+ * @return true if successful, false when the iteration advances past the last item.
* @stable ICU 4.8
*/
virtual UBool nextRecord(UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
index c4d08768987..7dd981abf93 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
@@ -56,7 +56,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0;
@@ -66,7 +66,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0;
@@ -207,6 +207,12 @@ protected:
BasicTimeZone(const BasicTimeZone& source);
/**
+ * Copy assignment.
+ * @stable ICU 3.8
+ */
+ BasicTimeZone& operator=(const BasicTimeZone&) = default;
+
+ /**
* Gets the set of TimeZoneRule instances applicable to the specified time and after.
* @param start The start date used for extracting time zone rules
* @param initial Receives the InitialTimeZone, always not NULL
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
index 2a8c2935ca8..cc84bb274de 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
@@ -464,10 +464,10 @@ public:
UBool operator!=(const Calendar& that) const {return !operator==(that);}
/**
- * Returns TRUE if the given Calendar object is equivalent to this
+ * Returns true if the given Calendar object is equivalent to this
* one. An equivalent Calendar will behave exactly as this one
* does, but it may be set to a different time. By contrast, for
- * the operator==() method to return TRUE, the other Calendar must
+ * the operator==() method to return true, the other Calendar must
* be set to the same time.
*
* @param other the Calendar to be compared with this Calendar
@@ -1359,7 +1359,7 @@ public:
* localeID.append(calType);
* char langTag[100];
* UErrorCode errorCode = U_ZERO_ERROR;
- * int32_t length = uloc_toLanguageTag(localeID.c_str(), langTag, (int32_t)sizeof(langTag), TRUE, &errorCode);
+ * int32_t length = uloc_toLanguageTag(localeID.c_str(), langTag, (int32_t)sizeof(langTag), true, &errorCode);
* if (U_FAILURE(errorCode)) {
* // deal with errors & overflow
* }
@@ -1410,21 +1410,21 @@ public:
virtual int32_t getWeekendTransition(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const;
/**
- * Returns TRUE if the given UDate is in the weekend in
+ * Returns true if the given UDate is in the weekend in
* this calendar system.
* @param date The UDate in question.
* @param status The error code for the operation.
- * @return TRUE if the given UDate is in the weekend in
- * this calendar system, FALSE otherwise.
+ * @return true if the given UDate is in the weekend in
+ * this calendar system, false otherwise.
* @stable ICU 4.4
*/
virtual UBool isWeekend(UDate date, UErrorCode &status) const;
/**
- * Returns TRUE if this Calendar's current date-time is in the weekend in
+ * Returns true if this Calendar's current date-time is in the weekend in
* this calendar system.
- * @return TRUE if this Calendar's current date-time is in the weekend in
- * this calendar system, FALSE otherwise.
+ * @return true if this Calendar's current date-time is in the weekend in
+ * this calendar system, false otherwise.
* @stable ICU 4.4
*/
virtual UBool isWeekend(void) const;
@@ -2372,7 +2372,7 @@ private:
*
* @param key the registry key returned by a previous call to registerFactory
* @param status the in/out status code, no special meanings are assigned
- * @return TRUE if the factory for the key was successfully unregistered
+ * @return true if the factory for the key was successfully unregistered
* @internal
*/
static UBool unregister(URegistryKey key, UErrorCode& status);
@@ -2398,7 +2398,7 @@ private:
#endif /* !UCONFIG_NO_SERVICE */
/**
- * @return TRUE if this calendar has a default century (i.e. 03 -> 2003)
+ * @return true if this calendar has a default century (i.e. 03 -> 2003)
* @internal
*/
virtual UBool haveDefaultCentury() const = 0;
@@ -2458,7 +2458,7 @@ private:
* @param base The base time, inclusive
* @param transitionTime Receives the result time
* @param status The error status
- * @return TRUE if a transition is found.
+ * @return true if a transition is found.
*/
UBool getImmediatePreviousZoneTransition(UDate base, UDate *transitionTime, UErrorCode& status) const;
@@ -2531,7 +2531,7 @@ Calendar::internalSet(UCalendarDateFields field, int32_t value)
{
fFields[field] = value;
fStamp[field] = kInternallySet;
- fIsSet[field] = TRUE; // Remove later
+ fIsSet[field] = true; // Remove later
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
index 3b2f48cb1f8..cb01fca2533 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
@@ -106,7 +106,7 @@ class MessageFormat;
* arrays of numbers, closure flags and strings,
* they are interpreted just like
* the sequence of <code>(number separator string)</code> in an equivalent pattern string.
- * <code>closure[i]==TRUE</code> corresponds to a <code>less_than</code> separator sign.
+ * <code>closure[i]==true</code> corresponds to a <code>less_than</code> separator sign.
* The equivalent pattern string will be constructed automatically.</p>
*
* <p>During formatting, a number is mapped to the first range
@@ -126,7 +126,7 @@ class MessageFormat;
* <p>Here is an example of two arrays that map the number
* <code>1..7</code> to the English day of the week abbreviations
* <code>Sun..Sat</code>. No closures array is given; this is the same as
- * specifying all closures to be <code>FALSE</code>.</p>
+ * specifying all closures to be <code>false</code>.</p>
*
* <pre> {1,2,3,4,5,6,7},
* {&quot;Sun&quot;,&quot;Mon&quot;,&quot;Tue&quot;,&quot;Wed&quot;,&quot;Thur&quot;,&quot;Fri&quot;,&quot;Sat&quot;}</pre>
@@ -138,7 +138,7 @@ class MessageFormat;
* like the turned bracket in European notation: [-Inf, 1) == [-Inf, 1[ )</p>
*
* <pre> {0, 1, 1},
- * {FALSE, FALSE, TRUE},
+ * {false, false, true},
* {&quot;no files&quot;, &quot;one file&quot;, &quot;many files&quot;}</pre>
*
* <p>Here is an example that shows formatting and parsing: </p>
@@ -189,7 +189,7 @@ public:
/**
* Constructs a new ChoiceFormat with the given limits and message strings.
- * All closure flags default to <code>FALSE</code>,
+ * All closure flags default to <code>false</code>,
* equivalent to <code>less_than_or_equal</code> separators.
*
* Copies the limits and formats instead of adopting them.
@@ -210,9 +210,9 @@ public:
*
* @param limits Array of limit values
* @param closures Array of booleans specifying whether each
- * element of 'limits' is open or closed. If FALSE, then the
+ * element of 'limits' is open or closed. If false, then the
* corresponding limit number is a member of its range.
- * If TRUE, then the limit number belongs to the previous range it.
+ * If true, then the limit number belongs to the previous range it.
* @param formats Array of formats
* @param count Size of 'limits', 'closures', and 'formats' arrays
* @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments.
@@ -568,13 +568,13 @@ private:
* The intervals may be closed, half open, or open. This affects
* formatting but does not affect parsing. Interval i is affected
* by fClosures[i] and fClosures[i+1]. If fClosures[i]
- * is FALSE, then the value fChoiceLimits[i] is in interval i.
+ * is false, then the value fChoiceLimits[i] is in interval i.
* That is, intervals i and i are:
*
* i-1: ... x < fChoiceLimits[i]
* i: fChoiceLimits[i] <= x ...
*
- * If fClosures[i] is TRUE, then the value fChoiceLimits[i] is
+ * If fClosures[i] is true, then the value fChoiceLimits[i] is
* in interval i-1. That is, intervals i-1 and i are:
*
* i-1: ... x <= fChoiceLimits[i]
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
index e3ec0e01a18..aa0b08f5e73 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
@@ -253,7 +253,7 @@ public:
/**
* Checks if a comparison order is ignorable.
* @param order the collation order.
- * @return TRUE if a character is ignorable, FALSE otherwise.
+ * @return true if a character is ignorable, false otherwise.
* @stable ICU 2.0
*/
static inline UBool isIgnorable(int32_t order);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
index f5564c73944..c750711fc15 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
@@ -236,21 +236,21 @@ public:
// Collator public methods --------------------------------------------
/**
- * Returns TRUE if "other" is the same as "this".
+ * Returns true if "other" is the same as "this".
*
- * The base class implementation returns TRUE if "other" has the same type/class as "this":
+ * The base class implementation returns true if "other" has the same type/class as "this":
* `typeid(*this) == typeid(other)`.
*
* Subclass implementations should do something like the following:
*
- * if (this == &other) { return TRUE; }
- * if (!Collator::operator==(other)) { return FALSE; } // not the same class
+ * if (this == &other) { return true; }
+ * if (!Collator::operator==(other)) { return false; } // not the same class
*
* const MyCollator &o = (const MyCollator&)other;
* (compare this vs. o's subclass fields)
*
* @param other Collator object to be compared
- * @return TRUE if other is the same as this.
+ * @return true if other is the same as this.
* @stable ICU 2.0
*/
virtual UBool operator==(const Collator& other) const;
@@ -259,7 +259,7 @@ public:
* Returns true if "other" is not the same as "this".
* Calls ! operator==(const Collator&) const which works for all subclasses.
* @param other Collator object to be compared
- * @return TRUE if other is not the same as this.
+ * @return true if other is not the same as this.
* @stable ICU 2.0
*/
virtual UBool operator!=(const Collator& other) const;
@@ -304,7 +304,7 @@ public:
* Starting with ICU 54, collation attributes can be specified via locale keywords as well,
* in the old locale extension syntax ("el@colCaseFirst=upper")
* or in language tag syntax ("el-u-kf-upper").
- * See <a href="http://userguide.icu-project.org/collation/api">User Guide: Collation API</a>.
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/api">User Guide: Collation API</a>.
*
* The UErrorCode& err parameter is used to return status information to the user.
* To check whether the construction succeeded or not, you should check
@@ -788,7 +788,7 @@ public:
* applications who wish to cache collators, or otherwise reuse
* collators when possible. The functional equivalent may change
* over time. For more information, please see the <a
- * href="http://userguide.icu-project.org/locale#TOC-Locales-and-Services">
+ * href="https://unicode-org.github.io/icu/userguide/locale#locales-and-services">
* Locales and Services</a> section of the ICU User Guide.
* @param keyword a particular keyword as enumerated by
* ucol_getKeywords.
@@ -841,7 +841,7 @@ public:
* Collator::createInstance to avoid undefined behavior.
* @param key the registry key returned by a previous call to registerInstance
* @param status the in/out status code, no special meanings are assigned
- * @return TRUE if the collator for the key was successfully unregistered
+ * @return true if the collator for the key was successfully unregistered
* @stable ICU 2.6
*/
static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
@@ -1139,7 +1139,7 @@ public:
* This string will be normalized.
* The structure and the syntax of the string is defined in the "Naming collators"
* section of the users guide:
- * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme
+ * https://unicode-org.github.io/icu/userguide/collation/concepts#collator-naming-scheme
* This function supports preflighting.
*
* This is internal, and intended to be used with delegate converters.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
index 5cfe1cf75e6..e4c35c18111 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
@@ -41,7 +41,7 @@ class U_I18N_API CurrencyAmount: public Measure {
/**
* Construct an object with the given numeric amount and the given
* ISO currency code.
- * @param amount a numeric object; amount.isNumeric() must be TRUE
+ * @param amount a numeric object; amount.isNumeric() must be true
* @param isoCode the 3-letter ISO 4217 currency code; must not be
* NULL and must have length 3
* @param ec input-output error code. If the amount or the isoCode
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
index d536e2fc031..9b608fdeef2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
@@ -56,7 +56,6 @@ class U_I18N_API CurrencyUnit: public MeasureUnit {
*/
CurrencyUnit(ConstChar16Ptr isoCode, UErrorCode &ec);
-#ifndef U_HIDE_DRAFT_API
/**
* Construct an object with the given ISO currency code.
*
@@ -64,10 +63,9 @@ class U_I18N_API CurrencyUnit: public MeasureUnit {
* length 3. If invalid, the currency is initialized to XXX.
* @param ec input-output error code. If the isoCode is invalid,
* then this will be set to a failing value.
- * @draft ICU 64
+ * @stable ICU 64
*/
CurrencyUnit(StringPiece isoCode, UErrorCode &ec);
-#endif /* U_HIDE_DRAFT_API */
/**
* Copy constructor
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
index e1e0ab6b08c..b2c39a0236e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
@@ -291,6 +291,17 @@ public:
*/
void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * Loads symbols for the specified currency into this instance.
+ *
+ * This method is internal. If you think it should be public, file a ticket.
+ *
+ * @internal
+ */
+ void setCurrency(const UChar* currency, UErrorCode& status);
+#endif // U_HIDE_INTERNAL_API
+
/**
* Returns the locale for which this object was constructed.
* @stable ICU 2.6
@@ -367,15 +378,13 @@ private:
* back to the locale.
*/
void initialize(const Locale& locale, UErrorCode& success,
- UBool useLastResortData = FALSE, const NumberingSystem* ns = nullptr);
+ UBool useLastResortData = false, const NumberingSystem* ns = nullptr);
/**
* Initialize the symbols with default values.
*/
void initialize();
- void setCurrencyForSymbols();
-
public:
#ifndef U_HIDE_INTERNAL_API
@@ -534,12 +543,12 @@ inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t di
// -------------------------------------
inline void
-DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
+DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propagateDigits = true) {
if (symbol == kCurrencySymbol) {
- fIsCustomCurrencySymbol = TRUE;
+ fIsCustomCurrencySymbol = true;
}
else if (symbol == kIntlCurrencySymbol) {
- fIsCustomIntlCurrencySymbol = TRUE;
+ fIsCustomIntlCurrencySymbol = true;
}
if(symbol<kFormatSymbolCount) {
fSymbols[symbol]=value;
@@ -550,7 +559,7 @@ DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString
// Also record updates to fCodePointZero. Be conservative if in doubt.
if (symbol == kZeroDigitSymbol) {
UChar32 sym = value.char32At(0);
- if ( propogateDigits && u_charDigitValue(sym) == 0 && value.countChar32() == 1 ) {
+ if ( propagateDigits && u_charDigitValue(sym) == 0 && value.countChar32() == 1 ) {
fCodePointZero = sym;
for ( int8_t i = 1 ; i<= 9 ; i++ ) {
sym++;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
index c33ec80cacc..b9be18f768c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
@@ -53,10 +53,10 @@ class CompactDecimalFormat;
namespace number {
class LocalizedNumberFormatter;
-class FormattedNumber;
namespace impl {
class DecimalQuantity;
struct DecimalFormatFields;
+class UFormattedNumberData;
}
}
@@ -564,11 +564,11 @@ class NumberParserImpl;
*
* <li>In order to enable significant digits formatting, use a pattern
* containing the <code>'@'</code> pattern character. Alternatively,
- * call setSignificantDigitsUsed(TRUE).
+ * call setSignificantDigitsUsed(true).
*
* <li>In order to disable significant digits formatting, use a
* pattern that does not contain the <code>'@'</code> pattern
- * character. Alternatively, call setSignificantDigitsUsed(FALSE).
+ * character. Alternatively, call setSignificantDigitsUsed(false).
*
* <li>The number of significant digits has no effect on parsing.
*
@@ -817,8 +817,8 @@ class U_I18N_API DecimalFormat : public NumberFormat {
/**
* Sets whether lenient parsing should be enabled (it is off by default).
*
- * @param enable \c TRUE if lenient parsing should be used,
- * \c FALSE otherwise.
+ * @param enable \c true if lenient parsing should be used,
+ * \c false otherwise.
* @stable ICU 4.8
*/
void setLenient(UBool enable) U_OVERRIDE;
@@ -1283,14 +1283,13 @@ class U_I18N_API DecimalFormat : public NumberFormat {
*/
virtual void setNegativeSuffix(const UnicodeString& newValue);
-#ifndef U_HIDE_DRAFT_API
/**
* Whether to show the plus sign on positive (non-negative) numbers; for example, "+12"
*
* For more control over sign display, use NumberFormatter.
*
* @return Whether the sign is shown on positive numbers and zero.
- * @draft ICU 64
+ * @stable ICU 64
*/
UBool isSignAlwaysShown() const;
@@ -1300,10 +1299,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* For more control over sign display, use NumberFormatter.
*
* @param value true to always show a sign; false to hide the sign on positive numbers and zero.
- * @draft ICU 64
+ * @stable ICU 64
*/
void setSignAlwaysShown(UBool value);
-#endif /* U_HIDE_DRAFT_API */
/**
* Get the multiplier for use in percent, permill, etc.
@@ -1509,7 +1507,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
/**
* Return whether or not scientific notation is used.
- * @return TRUE if this object formats and parses scientific notation
+ * @return true if this object formats and parses scientific notation
* @see #setScientificNotation
* @see #getMinimumExponentDigits
* @see #setMinimumExponentDigits
@@ -1525,7 +1523,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* maximum number of integer digits is set to more than 8, the effective
* maximum will be 1. This allows this call to generate a 'default' scientific
* number format without additional changes.
- * @param useScientific TRUE if this object formats and parses scientific
+ * @param useScientific true if this object formats and parses scientific
* notation
* @see #isScientificNotation
* @see #getMinimumExponentDigits
@@ -1564,7 +1562,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
/**
* Return whether the exponent sign is always shown.
- * @return TRUE if the exponent is always prefixed with either the
+ * @return true if the exponent is always prefixed with either the
* localized minus sign or the localized plus sign, false if only negative
* exponents are prefixed with the localized minus sign.
* @see #setScientificNotation
@@ -1579,7 +1577,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
/**
* Set whether the exponent sign is always shown. This has no effect
* unless scientific notation is in use.
- * @param expSignAlways TRUE if the exponent is always prefixed with either
+ * @param expSignAlways true if the exponent is always prefixed with either
* the localized minus sign or the localized plus sign, false if only
* negative exponents are prefixed with the localized minus sign.
* @see #setScientificNotation
@@ -1650,7 +1648,6 @@ class U_I18N_API DecimalFormat : public NumberFormat {
*/
virtual void setSecondaryGroupingSize(int32_t newValue);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns the minimum number of grouping digits.
* Grouping separators are output if there are at least this many
@@ -1672,29 +1669,34 @@ class U_I18N_API DecimalFormat : public NumberFormat {
*
* @see setMinimumGroupingDigits
* @see getGroupingSize
- * @draft ICU 64
+ * @stable ICU 64
*/
int32_t getMinimumGroupingDigits() const;
/**
- * Sets the minimum grouping digits. Setting to a value less than or
- * equal to 1 turns off minimum grouping digits.
+ * Sets the minimum grouping digits. Setting the value to
+ * - 1: Turns off minimum grouping digits.
+ * - 0 or -1: The behavior is undefined.
+ * - UNUM_MINIMUM_GROUPING_DIGITS_AUTO: Display grouping using the default
+ * strategy for all locales.
+ * - UNUM_MINIMUM_GROUPING_DIGITS_MIN2: Display grouping using locale
+ * defaults, except do not show grouping on values smaller than 10000
+ * (such that there is a minimum of two digits before the first
+ * separator).
*
* For more control over grouping strategies, use NumberFormatter.
*
* @param newValue the new value of minimum grouping digits.
* @see getMinimumGroupingDigits
- * @draft ICU 64
+ * @stable ICU 64
*/
void setMinimumGroupingDigits(int32_t newValue);
-#endif /* U_HIDE_DRAFT_API */
-
/**
* Allows you to get the behavior of the decimal separator with integers.
* (The decimal separator will always appear with decimals.)
*
- * @return TRUE if the decimal separator always appear with decimals.
+ * @return true if the decimal separator always appear with decimals.
* Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345
* @stable ICU 2.0
*/
@@ -1704,7 +1706,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* Allows you to set the behavior of the decimal separator with integers.
* (The decimal separator will always appear with decimals.)
*
- * @param newValue set TRUE if the decimal separator will always appear with decimals.
+ * @param newValue set true if the decimal separator will always appear with decimals.
* Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345
* @stable ICU 2.0
*/
@@ -1713,7 +1715,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
/**
* Allows you to get the parse behavior of the pattern decimal mark.
*
- * @return TRUE if input must contain a match to decimal mark in pattern
+ * @return true if input must contain a match to decimal mark in pattern
* @stable ICU 54
*/
UBool isDecimalPatternMatchRequired(void) const;
@@ -1721,21 +1723,20 @@ class U_I18N_API DecimalFormat : public NumberFormat {
/**
* Allows you to set the parse behavior of the pattern decimal mark.
*
- * if TRUE, the input must have a decimal mark if one was specified in the pattern. When
- * FALSE the decimal mark may be omitted from the input.
+ * if true, the input must have a decimal mark if one was specified in the pattern. When
+ * false the decimal mark may be omitted from the input.
*
- * @param newValue set TRUE if input must contain a match to decimal mark in pattern
+ * @param newValue set true if input must contain a match to decimal mark in pattern
* @stable ICU 54
*/
virtual void setDecimalPatternMatchRequired(UBool newValue);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns whether to ignore exponents when parsing.
*
* @return Whether to ignore exponents when parsing.
* @see #setParseNoExponent
- * @draft ICU 64
+ * @stable ICU 64
*/
UBool isParseNoExponent() const;
@@ -1745,7 +1746,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* 5).
*
* @param value true to prevent exponents from being parsed; false to allow them to be parsed.
- * @draft ICU 64
+ * @stable ICU 64
*/
void setParseNoExponent(UBool value);
@@ -1754,7 +1755,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
*
* @return Whether parsing is case-sensitive.
* @see #setParseCaseSensitive
- * @draft ICU 64
+ * @stable ICU 64
*/
UBool isParseCaseSensitive() const;
@@ -1767,7 +1768,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
*
* @param value true to enable case-sensitive parsing (the default); false to force
* case-sensitive parsing behavior.
- * @draft ICU 64
+ * @stable ICU 64
*/
void setParseCaseSensitive(UBool value);
@@ -1777,7 +1778,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
*
* @return Whether an error code is set if high-order digits are truncated.
* @see setFormatFailIfMoreThanMaxDigits
- * @draft ICU 64
+ * @stable ICU 64
*/
UBool isFormatFailIfMoreThanMaxDigits() const;
@@ -1786,11 +1787,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* By default, setMaximumIntegerDigits truncates high-order digits silently.
*
* @param value Whether to set an error code if high-order digits are truncated.
- * @draft ICU 64
+ * @stable ICU 64
*/
void setFormatFailIfMoreThanMaxDigits(UBool value);
-#endif /* U_HIDE_DRAFT_API */
-
/**
* Synthesizes a pattern string that represents the current state
@@ -1970,7 +1969,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* to one. If the maximum significant digits count is less than
* <code>min</code>, then it is set to <code>min</code>.
* This function also enables the use of significant digits
- * by this formatter - areSignificantDigitsUsed() will return TRUE.
+ * by this formatter - areSignificantDigitsUsed() will return true.
* @see #areSignificantDigitsUsed
* @param min the fewest significant digits to be shown
* @stable ICU 3.0
@@ -1983,7 +1982,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* to one. If the minimum significant digits count is greater
* than <code>max</code>, then it is set to <code>max</code>.
* This function also enables the use of significant digits
- * by this formatter - areSignificantDigitsUsed() will return TRUE.
+ * by this formatter - areSignificantDigitsUsed() will return true.
* @see #areSignificantDigitsUsed
* @param max the most significant digits to be shown
* @stable ICU 3.0
@@ -2067,7 +2066,6 @@ class U_I18N_API DecimalFormat : public NumberFormat {
#endif /* U_HIDE_INTERNAL_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Converts this DecimalFormat to a (Localized)NumberFormatter. Starting
* in ICU 60, NumberFormatter is the recommended way to format numbers.
@@ -2111,10 +2109,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* @param status Set on failure, like U_MEMORY_ALLOCATION_ERROR.
* @return A pointer to an internal object, or nullptr on failure.
* Do not delete the return value!
- * @draft ICU 64
+ * @stable ICU 64
*/
const number::LocalizedNumberFormatter* toNumberFormatter(UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Return the class ID for this class. This is useful only for
@@ -2168,11 +2165,17 @@ class U_I18N_API DecimalFormat : public NumberFormat {
const numparse::impl::NumberParserImpl* getCurrencyParser(UErrorCode& status) const;
- static void fieldPositionHelper(const number::FormattedNumber& formatted, FieldPosition& fieldPosition,
- int32_t offset, UErrorCode& status);
-
- static void fieldPositionIteratorHelper(const number::FormattedNumber& formatted,
- FieldPositionIterator* fpi, int32_t offset, UErrorCode& status);
+ static void fieldPositionHelper(
+ const number::impl::UFormattedNumberData& formatted,
+ FieldPosition& fieldPosition,
+ int32_t offset,
+ UErrorCode& status);
+
+ static void fieldPositionIteratorHelper(
+ const number::impl::UFormattedNumberData& formatted,
+ FieldPositionIterator* fpi,
+ int32_t offset,
+ UErrorCode& status);
void setupFastFormat();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
index c6d76fe98eb..69f9f9759ec 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
@@ -919,7 +919,8 @@ private:
* failure code upon return.
* @param useLastResortData determine if use last resort data
*/
- void initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData = FALSE);
+ void initializeData(const Locale& locale, const char *type,
+ UErrorCode& status, UBool useLastResortData = false);
/**
* Copy or alias an array in another object, as appropriate.
@@ -983,12 +984,12 @@ private:
static UDateFormatField U_EXPORT2 getPatternCharIndex(char16_t c);
/**
- * Returns TRUE if f (with its pattern character repeated count times) is a numeric field.
+ * Returns true if f (with its pattern character repeated count times) is a numeric field.
*/
static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count);
/**
- * Returns TRUE if c (repeated count times) is the pattern character for a numeric field.
+ * Returns true if c (repeated count times) is the pattern character for a numeric field.
*/
static UBool U_EXPORT2 isNumericPatternChar(char16_t c, int32_t count);
public:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
index 23fc02e2a7b..f45e68038ac 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
@@ -31,6 +31,7 @@
#include "unicode/dtitvinf.h"
#include "unicode/dtptngen.h"
#include "unicode/formattedvalue.h"
+#include "unicode/udisplaycontext.h"
U_NAMESPACE_BEGIN
@@ -38,7 +39,6 @@ U_NAMESPACE_BEGIN
class FormattedDateIntervalData;
class DateIntervalFormat;
-#ifndef U_HIDE_DRAFT_API
/**
* An immutable class containing the result of a date interval formatting operation.
*
@@ -54,25 +54,25 @@ class DateIntervalFormat;
*
* Not intended for public subclassing.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
class U_I18N_API FormattedDateInterval : public UMemory, public FormattedValue {
public:
/**
* Default constructor; makes an empty FormattedDateInterval.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedDateInterval() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
/**
* Move constructor: Leaves the source FormattedDateInterval in an undefined state.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedDateInterval(FormattedDateInterval&& src) U_NOEXCEPT;
/**
* Destruct an instance of FormattedDateInterval.
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual ~FormattedDateInterval() U_OVERRIDE;
@@ -84,7 +84,7 @@ class U_I18N_API FormattedDateInterval : public UMemory, public FormattedValue {
/**
* Move assignment: Leaves the source FormattedDateInterval in an undefined state.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedDateInterval& operator=(FormattedDateInterval&& src) U_NOEXCEPT;
@@ -109,7 +109,6 @@ class U_I18N_API FormattedDateInterval : public UMemory, public FormattedValue {
: fData(nullptr), fErrorCode(errorCode) {}
friend class DateIntervalFormat;
};
-#endif /* U_HIDE_DRAFT_API */
/**
@@ -174,11 +173,12 @@ class U_I18N_API FormattedDateInterval : public UMemory, public FormattedValue {
*
* <P>
* The calendar fields we support for interval formatting are:
- * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, and second
+ * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, second,
+ * and millisecond.
* (though we do not currently have specific intervalFormat date for skeletons
- * with seconds).
+ * with seconds and millisecond).
* Those calendar fields can be defined in the following order:
- * year > month > date > hour (in day) > minute > second
+ * year > month > date > hour (in day) > minute > second > millisecond
*
* The largest different calendar fields between 2 calendars is the
* first different calendar field in above order.
@@ -503,7 +503,6 @@ public:
FieldPosition& fieldPosition,
UErrorCode& status) const ;
-#ifndef U_HIDE_DRAFT_API
/**
* Format a DateInterval to produce a FormattedDateInterval.
*
@@ -512,12 +511,11 @@ public:
* @param dtInterval DateInterval to be formatted.
* @param status Set if an error occurs.
* @return A FormattedDateInterval containing the format result.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedDateInterval formatToValue(
const DateInterval& dtInterval,
UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Format 2 Calendars to produce a string.
@@ -548,7 +546,6 @@ public:
FieldPosition& fieldPosition,
UErrorCode& status) const ;
-#ifndef U_HIDE_DRAFT_API
/**
* Format 2 Calendars to produce a FormattedDateInterval.
*
@@ -563,13 +560,12 @@ public:
* to be formatted into date interval string
* @param status Set if an error occurs.
* @return A FormattedDateInterval containing the format result.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedDateInterval formatToValue(
Calendar& fromCalendar,
Calendar& toCalendar,
UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Date interval parsing is not supported. Please do not use.
@@ -656,6 +652,34 @@ public:
*/
virtual void setTimeZone(const TimeZone& zone);
+#ifndef U_FORCE_HIDE_DRAFT_API
+ /**
+ * Set a particular UDisplayContext value in the formatter, such as
+ * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted
+ * result to be capitalized appropriately for the context in which
+ * it is intended to be used, considering both the locale and the
+ * type of field at the beginning of the formatted result.
+ * @param value The UDisplayContext value to set.
+ * @param status Input/output status. If at entry this indicates a failure
+ * status, the function will do nothing; otherwise this will be
+ * updated with any new status from the function.
+ * @draft ICU 68
+ */
+ virtual void setContext(UDisplayContext value, UErrorCode& status);
+
+ /**
+ * Get the formatter's UDisplayContext value for the specified UDisplayContextType,
+ * such as UDISPCTX_TYPE_CAPITALIZATION.
+ * @param type The UDisplayContextType whose value to return
+ * @param status Input/output status. If at entry this indicates a failure
+ * status, the function will do nothing; otherwise this will be
+ * updated with any new status from the function.
+ * @return The UDisplayContextValue for the specified type.
+ * @draft ICU 68
+ */
+ virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
+#endif // U_FORCE_HIDE_DRAFT_API
+
/**
* Return the class ID for this class. This is useful only for comparing to
* a return value from getDynamicClassID(). For example:
@@ -801,7 +825,7 @@ private:
* to be formatted into date interval string
* @param toCalendar calendar set to the to date in date interval
* to be formatted into date interval string
- * @param fromToOnSameDay TRUE iff from and to dates are on the same day
+ * @param fromToOnSameDay true iff from and to dates are on the same day
* (any difference is in ampm/hours or below)
* @param appendTo Output parameter to receive result.
* Result is appended to existing contents.
@@ -869,6 +893,19 @@ private:
void setFallbackPattern(UCalendarDateFields field,
const UnicodeString& skeleton,
UErrorCode& status);
+
+
+
+ /**
+ * Converts special hour metacharacters (such as 'j') in the skeleton into locale-appropriate
+ * pattern characters.
+ *
+ *
+ * @param skeleton The skeleton to convert
+ * @return A copy of the skeleton, which "j" and any other special hour metacharacters converted to the regular ones.
+ *
+ */
+ UnicodeString normalizeHourMetacharacters(const UnicodeString& skeleton) const;
@@ -924,8 +961,8 @@ private:
* @param dateSkeleton normalized date skeleton
* @param timeSkeleton normalized time skeleton
* @return whether the resource is found for the skeleton.
- * TRUE if interval pattern found for the skeleton,
- * FALSE otherwise.
+ * true if interval pattern found for the skeleton,
+ * false otherwise.
*/
UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton,
const UnicodeString& timeSkeleton);
@@ -953,8 +990,8 @@ private:
* @param extendedBestSkeleton extended best match skeleton
* @return whether the interval pattern is found
* through extending skeleton or not.
- * TRUE if interval pattern is found by
- * extending skeleton, FALSE otherwise.
+ * true if interval pattern is found by
+ * extending skeleton, false otherwise.
*/
UBool setIntervalPattern(UCalendarDateFields field,
const UnicodeString* skeleton,
@@ -989,6 +1026,7 @@ private:
* @param differenceInfo the difference between 2 skeletons
* 1 means only field width differs
* 2 means v/z exchange
+ * @param suppressDayPeriodField if true, remove the day period field from the pattern, if there is one
* @param adjustedIntervalPattern adjusted interval pattern
*/
static void U_EXPORT2 adjustFieldWidth(
@@ -996,9 +1034,21 @@ private:
const UnicodeString& bestMatchSkeleton,
const UnicodeString& bestMatchIntervalPattern,
int8_t differenceInfo,
+ UBool suppressDayPeriodField,
UnicodeString& adjustedIntervalPattern);
/**
+ * Does the same thing as UnicodeString::findAndReplace(), except that it won't perform
+ * the substitution inside quoted literal text.
+ * @param targetString The string to perform the find-replace operation on.
+ * @param strToReplace The string to search for and replace in the target string.
+ * @param strToReplaceWith The string to substitute in wherever `stringToReplace` was found.
+ */
+ static void U_EXPORT2 findReplaceInPattern(UnicodeString& targetString,
+ const UnicodeString& strToReplace,
+ const UnicodeString& strToReplaceWith);
+
+ /**
* Concat a single date pattern with a time interval pattern,
* set it into the intervalPatterns, while field is time field.
* This is used to handle time interval patterns on skeleton with
@@ -1142,6 +1192,11 @@ private:
UnicodeString* fDatePattern;
UnicodeString* fTimePattern;
UnicodeString* fDateTimeFormat;
+
+ /**
+ * Other formatting information
+ */
+ UDisplayContext fCapitalizationContext;
};
inline UBool
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
index fa73ca211d3..e55bea83537 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
@@ -137,8 +137,8 @@ U_NAMESPACE_BEGIN
* After a DateIntervalInfo object is created, clients may modify
* the interval patterns using setIntervalPattern function as so desired.
* Currently, users can only set interval patterns when the following
- * calendar fields are different: ERA, YEAR, MONTH, DATE, DAY_OF_MONTH,
- * DAY_OF_WEEK, AM_PM, HOUR, HOUR_OF_DAY, and MINUTE.
+ * calendar fields are different: ERA, YEAR, MONTH, DATE, DAY_OF_MONTH,
+ * DAY_OF_WEEK, AM_PM, HOUR, HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND.
* Interval patterns when other calendar fields are different is not supported.
* <P>
* DateIntervalInfo objects are cloneable.
@@ -245,7 +245,7 @@ public:
* Restriction:
* Currently, users can only set interval patterns when the following
* calendar fields are different: ERA, YEAR, MONTH, DATE, DAY_OF_MONTH,
- * DAY_OF_WEEK, AM_PM, HOUR, HOUR_OF_DAY, and MINUTE.
+ * DAY_OF_WEEK, AM_PM, HOUR, HOUR_OF_DAY, MINUTE, SECOND and MILLISECOND.
* Interval patterns when other calendar fields are different are
* not supported.
*
@@ -307,8 +307,8 @@ public:
/** Get default order -- whether the first date in pattern is later date
or not.
- * return default date ordering in interval pattern. TRUE if the first date
- * in pattern is later date, FALSE otherwise.
+ * return default date ordering in interval pattern. true if the first date
+ * in pattern is later date, false otherwise.
* @stable ICU 4.0
*/
UBool getDefaultOrder() const;
@@ -348,7 +348,7 @@ public:
/**
* Following is for saving the interval patterns.
* We only support interval patterns on
- * ERA, YEAR, MONTH, DAY, AM_PM, HOUR, and MINUTE
+ * ERA, YEAR, MONTH, DAY, AM_PM, HOUR, MINUTE, SECOND and MILLISECOND.
*/
enum IntervalPatternIndex
{
@@ -360,6 +360,7 @@ public:
kIPI_HOUR,
kIPI_MINUTE,
kIPI_SECOND,
+ kIPI_MILLISECOND,
kIPI_MAX_INDEX
};
public:
@@ -454,8 +455,8 @@ public:
* hash table.
*
* Since we only support the following calendar fields:
- * ERA, YEAR, MONTH, DATE, DAY_OF_MONTH, DAY_OF_WEEK,
- * AM_PM, HOUR, HOUR_OF_DAY, and MINUTE,
+ * ERA, YEAR, MONTH, DATE, DAY_OF_MONTH, DAY_OF_WEEK,
+ * AM_PM, HOUR, HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND.
* We reserve only 4 interval patterns for a skeleton.
*
* @param field calendar field
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
index a71938b31cf..828c0a9854b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
@@ -77,6 +77,13 @@ public:
#ifndef U_HIDE_INTERNAL_API
/**
+ * For ICU use only. Skips loading the standard date/time patterns (which is done via DateFormat).
+ *
+ * @internal
+ */
+ static DateTimePatternGenerator* U_EXPORT2 createInstanceNoStdPat(const Locale& uLocale, UErrorCode& status);
+
+ /**
* For ICU use only
*
* @internal
@@ -483,6 +490,26 @@ public:
*/
const UnicodeString& getDecimal() const;
+#if !UCONFIG_NO_FORMATTING
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Get the default hour cycle for a locale. Uses the locale that the
+ * DateTimePatternGenerator was initially created with.
+ *
+ * Cannot be used on an empty DateTimePatternGenerator instance.
+ *
+ * @param status Output param set to success/failure code on exit, which
+ * which must not indicate a failure before the function call.
+ * Set to U_UNSUPPORTED_ERROR if used on an empty instance.
+ * @return the default hour cycle.
+ * @draft ICU 67
+ */
+ UDateFormatHourCycle getDefaultHourCycle(UErrorCode& status) const;
+#endif /* U_HIDE_DRAFT_API */
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*
@@ -506,7 +533,7 @@ private:
/**
* Constructor.
*/
- DateTimePatternGenerator(const Locale& locale, UErrorCode & status);
+ DateTimePatternGenerator(const Locale& locale, UErrorCode & status, UBool skipStdPatterns = false);
/**
* Copy constructor.
@@ -553,7 +580,7 @@ private:
// with #13183, no longer need flags for b, B
};
- void initData(const Locale &locale, UErrorCode &status);
+ void initData(const Locale &locale, UErrorCode &status, UBool skipStdPatterns = false);
void addCanonicalItems(UErrorCode &status);
void addICUPatterns(const Locale& locale, UErrorCode& status);
void hackTimes(const UnicodeString& hackPattern, UErrorCode& status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
index 23ee38624b7..ea0a23b13ec 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
@@ -161,7 +161,7 @@ public:
/**
* Equality operator.
* @param that the object to be compared with.
- * @return TRUE if the two field positions are equal, FALSE otherwise.
+ * @return true if the two field positions are equal, false otherwise.
* @stable ICU 2.0
*/
UBool operator==(const FieldPosition& that) const;
@@ -169,7 +169,7 @@ public:
/**
* Equality operator.
* @param that the object to be compared with.
- * @return TRUE if the two field positions are not equal, FALSE otherwise.
+ * @return true if the two field positions are not equal, false otherwise.
* @stable ICU 2.0
*/
UBool operator!=(const FieldPosition& that) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
index 7bec4f6906e..3a090393ac4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
@@ -179,7 +179,7 @@ public:
/**
* Equality comparison.
* @param other the object to be compared with.
- * @return TRUE if other are equal to this, FALSE otherwise.
+ * @return true if other are equal to this, false otherwise.
* @stable ICU 2.0
*/
UBool operator==(const Formattable &other) const;
@@ -187,7 +187,7 @@ public:
/**
* Equality operator.
* @param other the object to be compared with.
- * @return TRUE if other are unequal to this, FALSE otherwise.
+ * @return true if other are unequal to this, false otherwise.
* @stable ICU 2.0
*/
UBool operator!=(const Formattable& other) const
@@ -277,9 +277,9 @@ public:
Type getType(void) const;
/**
- * Returns TRUE if the data type of this Formattable object
+ * Returns true if the data type of this Formattable object
* is kDouble, kLong, or kInt64
- * @return TRUE if this is a pure numeric object
+ * @return true if this is a pure numeric object
* @stable ICU 3.0
*/
UBool isNumeric() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/formattedvalue.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/formattedvalue.h
index 5c47264136b..5febea06618 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/formattedvalue.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/formattedvalue.h
@@ -25,11 +25,6 @@ U_NAMESPACE_BEGIN
* of APIs throughout ICU use these classes for expressing their localized output.
*/
-
-// The following cannot have #ifndef U_HIDE_DRAFT_API because
-// class FormattedValue depends on it, and FormattedValue cannot be
-// hidden becauseclass FormattedNumber (stable ICU 60) depends on it.
-#ifndef U_FORCE_HIDE_DRAFT_API
/**
* Represents a span of a string containing a given field.
*
@@ -41,7 +36,7 @@ U_NAMESPACE_BEGIN
*
* This class is not intended for public subclassing.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
class U_I18N_API ConstrainedFieldPosition : public UMemory {
public:
@@ -51,21 +46,20 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
*
* By default, the ConstrainedFieldPosition has no iteration constraints.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
ConstrainedFieldPosition();
- /** @draft ICU 64 */
+ /** @stable ICU 64 */
~ConstrainedFieldPosition();
-#ifndef U_HIDE_DRAFT_API
/**
* Resets this ConstrainedFieldPosition to its initial state, as if it were newly created:
*
* - Removes any constraints that may have been set on the instance.
* - Resets the iteration position.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
void reset();
@@ -89,7 +83,7 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
* does not generally have well-defined behavior.
*
* @param category The field category to fix when iterating.
- * @draft ICU 64
+ * @stable ICU 64
*/
void constrainCategory(int32_t category);
@@ -114,7 +108,7 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
*
* @param category The field category to fix when iterating.
* @param field The field to fix when iterating.
- * @draft ICU 64
+ * @stable ICU 64
*/
void constrainField(int32_t category, int32_t field);
@@ -122,10 +116,10 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
* Gets the field category for the current position.
*
* The return value is well-defined only after
- * FormattedValue#nextPosition returns TRUE.
+ * FormattedValue#nextPosition returns true.
*
* @return The field category saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
*/
inline int32_t getCategory() const {
return fCategory;
@@ -135,10 +129,10 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
* Gets the field for the current position.
*
* The return value is well-defined only after
- * FormattedValue#nextPosition returns TRUE.
+ * FormattedValue#nextPosition returns true.
*
* @return The field saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
*/
inline int32_t getField() const {
return fField;
@@ -147,10 +141,10 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
/**
* Gets the INCLUSIVE start index for the current position.
*
- * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ * The return value is well-defined only after FormattedValue#nextPosition returns true.
*
* @return The start index saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
*/
inline int32_t getStart() const {
return fStart;
@@ -159,10 +153,10 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
/**
* Gets the EXCLUSIVE end index stored for the current position.
*
- * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ * The return value is well-defined only after FormattedValue#nextPosition returns true.
*
* @return The end index saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
*/
inline int32_t getLimit() const {
return fLimit;
@@ -181,7 +175,7 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
* Users of FormattedValue should not need to call this method.
*
* @return The current iteration context from {@link #setInt64IterationContext}.
- * @draft ICU 64
+ * @stable ICU 64
*/
inline int64_t getInt64IterationContext() const {
return fContext;
@@ -193,7 +187,7 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
* Intended to be used by FormattedValue implementations.
*
* @param context The new iteration context.
- * @draft ICU 64
+ * @stable ICU 64
*/
void setInt64IterationContext(int64_t context);
@@ -205,7 +199,7 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
*
* @param category The category to test.
* @param field The field to test.
- * @draft ICU 64
+ * @stable ICU 64
*/
UBool matchesField(int32_t category, int32_t field) const;
@@ -221,39 +215,32 @@ class U_I18N_API ConstrainedFieldPosition : public UMemory {
* @param field The new field.
* @param start The new inclusive start index.
* @param limit The new exclusive end index.
- * @draft ICU 64
+ * @stable ICU 64
*/
void setState(
int32_t category,
int32_t field,
int32_t start,
int32_t limit);
-#endif /* U_HIDE_DRAFT_API */
private:
int64_t fContext = 0LL;
int32_t fField = 0;
int32_t fStart = 0;
int32_t fLimit = 0;
-#ifndef U_HIDE_DRAFT_API
int32_t fCategory = UFIELD_CATEGORY_UNDEFINED;
-#else /* U_HIDE_DRAFT_API */
- int32_t fCategory = 0;
-#endif /* U_HIDE_DRAFT_API */
int8_t fConstraint = 0;
};
-// The following cannot have #ifndef U_HIDE_DRAFT_API because
-// class FormattedNumber (stable ICU 60) depends on it.
/**
* An abstract formatted value: a string with associated field attributes.
* Many formatters format to classes implementing FormattedValue.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
class U_I18N_API FormattedValue /* not : public UObject because this is an interface/mixin class */ {
public:
- /** @draft ICU 64 */
+ /** @stable ICU 64 */
virtual ~FormattedValue();
/**
@@ -264,7 +251,7 @@ class U_I18N_API FormattedValue /* not : public UObject because this is an inter
* @param status Set if an error occurs.
* @return a UnicodeString containing the formatted string.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual UnicodeString toString(UErrorCode& status) const = 0;
@@ -280,7 +267,7 @@ class U_I18N_API FormattedValue /* not : public UObject because this is an inter
* @param status Set if an error occurs.
* @return a temporary UnicodeString containing the formatted string.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual UnicodeString toTempString(UErrorCode& status) const = 0;
@@ -292,7 +279,7 @@ class U_I18N_API FormattedValue /* not : public UObject because this is an inter
* @param status Set if an error occurs.
* @return The same Appendable, for chaining.
*
- * @draft ICU 64
+ * @stable ICU 64
* @see Appendable
*/
virtual Appendable& appendTo(Appendable& appendable, UErrorCode& status) const = 0;
@@ -314,14 +301,13 @@ class U_I18N_API FormattedValue /* not : public UObject because this is an inter
* see ConstrainedFieldPosition#constrainCategory
* and ConstrainedFieldPosition#constrainField.
* @param status Set if an error occurs.
- * @return TRUE if a new occurrence of the field was found;
- * FALSE otherwise or if an error was set.
+ * @return true if a new occurrence of the field was found;
+ * false otherwise or if an error was set.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const = 0;
};
-#endif // U_FORCE_HIDE_DRAFT_API
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
index 3e8a0108f16..87e811ea232 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
@@ -96,7 +96,7 @@ public:
/**
* If the current position is valid, updates the FieldPosition values, advances the iterator,
- * and returns TRUE, otherwise returns FALSE.
+ * and returns true, otherwise returns false.
* @stable ICU 4.4
*/
UBool next(FieldPosition& fp);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
index 4ce40daf3a4..e5e6df17fda 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
@@ -344,7 +344,7 @@ public:
UBool isLeapYear(int32_t year) const;
/**
- * Returns TRUE if the given Calendar object is equivalent to this
+ * Returns true if the given Calendar object is equivalent to this
* one. Calendar override.
*
* @param other the Calendar to be compared with this Calendar
@@ -756,7 +756,7 @@ public:
public: // internal implementation
/**
- * @return TRUE if this calendar has the notion of a default century
+ * @return true if this calendar has the notion of a default century
* @internal
*/
virtual UBool haveDefaultCentury() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
index 88fc46cf37b..76a728942d9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
@@ -23,13 +23,15 @@
#if U_SHOW_CPLUSPLUS_API
+#if !UCONFIG_NO_FORMATTING
+
#include "unicode/unistr.h"
#include "unicode/locid.h"
#include "unicode/formattedvalue.h"
+#include "unicode/ulistformatter.h"
U_NAMESPACE_BEGIN
-class FieldPositionIterator;
class FieldPositionHandler;
class FormattedListData;
class ListFormatter;
@@ -50,9 +52,11 @@ struct ListFormatData : public UMemory {
UnicodeString startPattern;
UnicodeString middlePattern;
UnicodeString endPattern;
+ Locale locale;
- ListFormatData(const UnicodeString& two, const UnicodeString& start, const UnicodeString& middle, const UnicodeString& end) :
- twoPattern(two), startPattern(start), middlePattern(middle), endPattern(end) {}
+ ListFormatData(const UnicodeString& two, const UnicodeString& start, const UnicodeString& middle, const UnicodeString& end,
+ const Locale& loc) :
+ twoPattern(two), startPattern(start), middlePattern(middle), endPattern(end), locale(loc) {}
};
/** \endcond */
@@ -63,8 +67,6 @@ struct ListFormatData : public UMemory {
*/
-#if !UCONFIG_NO_FORMATTING
-#ifndef U_HIDE_DRAFT_API
/**
* An immutable class containing the result of a list formatting operation.
*
@@ -79,25 +81,25 @@ struct ListFormatData : public UMemory {
*
* Not intended for public subclassing.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
class U_I18N_API FormattedList : public UMemory, public FormattedValue {
public:
/**
* Default constructor; makes an empty FormattedList.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedList() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
/**
* Move constructor: Leaves the source FormattedList in an undefined state.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedList(FormattedList&& src) U_NOEXCEPT;
/**
* Destruct an instance of FormattedList.
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual ~FormattedList() U_OVERRIDE;
@@ -109,7 +111,7 @@ class U_I18N_API FormattedList : public UMemory, public FormattedValue {
/**
* Move assignment: Leaves the source FormattedList in an undefined state.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedList& operator=(FormattedList&& src) U_NOEXCEPT;
@@ -134,8 +136,6 @@ class U_I18N_API FormattedList : public UMemory, public FormattedValue {
: fData(nullptr), fErrorCode(errorCode) {}
friend class ListFormatter;
};
-#endif /* U_HIDE_DRAFT_API */
-#endif // !UCONFIG_NO_FORMATTING
/**
@@ -185,10 +185,25 @@ class U_I18N_API ListFormatter : public UObject{
*/
static ListFormatter* createInstance(const Locale& locale, UErrorCode& errorCode);
+ /**
+ * Creates a ListFormatter for the given locale, list type, and style.
+ *
+ * @param locale The locale.
+ * @param type The type of list formatting to use.
+ * @param width The width of formatting to use.
+ * @param errorCode ICU error code, set if no data available for the given locale.
+ * @return A ListFormatter object created from internal data derived from CLDR data.
+ * @stable ICU 67
+ */
+ static ListFormatter* createInstance(
+ const Locale& locale, UListFormatterType type, UListFormatterWidth width, UErrorCode& errorCode);
+
#ifndef U_HIDE_INTERNAL_API
/**
* Creates a ListFormatter appropriate for a locale and style.
*
+ * TODO(ICU-20888): Remove this in ICU 68.
+ *
* @param locale The locale.
* @param style the style, either "standard", "or", "unit", "unit-narrow", or "unit-short"
* @param errorCode ICU error code, set if no data available for the given locale.
@@ -220,29 +235,6 @@ class U_I18N_API ListFormatter : public UObject{
UnicodeString& format(const UnicodeString items[], int32_t n_items,
UnicodeString& appendTo, UErrorCode& errorCode) const;
-#ifndef U_HIDE_DRAFT_API
- /**
- * Format a list of strings.
- *
- * @param items An array of strings to be combined and formatted.
- * @param n_items Length of the array items.
- * @param appendTo The string to which the formatted result will be
- * appended.
- * @param posIter On return, can be used to iterate over positions of
- * fields generated by this format call. Field values are
- * defined in UListFormatterField. Can be NULL.
- * @param errorCode ICU error code returned here.
- * @return Formatted string combining the elements of items,
- * appended to appendTo.
- * @draft ICU 63
- */
- UnicodeString& format(const UnicodeString items[], int32_t n_items,
- UnicodeString & appendTo, FieldPositionIterator* posIter,
- UErrorCode& errorCode) const;
-#endif // U_HIDE_DRAFT_API
-
-#if !UCONFIG_NO_FORMATTING
-#ifndef U_HIDE_DRAFT_API
/**
* Formats a list of strings to a FormattedList, which exposes field
* position information. The FormattedList contains more information than
@@ -252,14 +244,12 @@ class U_I18N_API ListFormatter : public UObject{
* @param n_items Length of the array items.
* @param errorCode ICU error code returned here.
* @return A FormattedList containing field information.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedList formatStringsToValue(
const UnicodeString items[],
int32_t n_items,
UErrorCode& errorCode) const;
-#endif /* U_HIDE_DRAFT_API */
-#endif // !UCONFIG_NO_FORMATTING
#ifndef U_HIDE_INTERNAL_API
/**
@@ -300,6 +290,8 @@ class U_I18N_API ListFormatter : public UObject{
U_NAMESPACE_END
+#endif /* #if !UCONFIG_NO_FORMATTING */
+
#endif /* U_SHOW_CPLUSPLUS_API */
#endif // __LISTFORMATTER_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
index b4f90486294..2155ad531aa 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
@@ -309,7 +309,7 @@ class U_I18N_API MeasureFormat : public Format {
/**
* ICU use only.
* Allows subclass to change locale. Note that this method also changes
- * the NumberFormat object. Returns TRUE if locale changed; FALSE if no
+ * the NumberFormat object. Returns true if locale changed; false if no
* change was made.
* @internal.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
index dbcad62f229..d86bab39095 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
@@ -20,6 +20,7 @@
#if !UCONFIG_NO_FORMATTING
#include "unicode/unistr.h"
+#include "unicode/localpointer.h"
/**
* \file
@@ -29,6 +30,202 @@
U_NAMESPACE_BEGIN
class StringEnumeration;
+struct MeasureUnitImpl;
+
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Enumeration for unit complexity. There are three levels:
+ *
+ * - SINGLE: A single unit, optionally with a power and/or SI prefix. Examples: hectare,
+ * square-kilometer, kilojoule, per-second.
+ * - COMPOUND: A unit composed of the product of multiple single units. Examples:
+ * meter-per-second, kilowatt-hour, kilogram-meter-per-square-second.
+ * - MIXED: A unit composed of the sum of multiple single units. Examples: foot+inch,
+ * hour+minute+second, degree+arcminute+arcsecond.
+ *
+ * The complexity determines which operations are available. For example, you cannot set the power
+ * or SI prefix of a compound unit.
+ *
+ * @draft ICU 67
+ */
+enum UMeasureUnitComplexity {
+ /**
+ * A single unit, like kilojoule.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_UNIT_SINGLE,
+
+ /**
+ * A compound unit, like meter-per-second.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_UNIT_COMPOUND,
+
+ /**
+ * A mixed unit, like hour+minute.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_UNIT_MIXED
+};
+
+/**
+ * Enumeration for SI prefixes, such as "kilo".
+ *
+ * @draft ICU 67
+ */
+typedef enum UMeasureSIPrefix {
+
+ /**
+ * SI prefix: yotta, 10^24.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_YOTTA = 24,
+
+ /**
+ * SI prefix: zetta, 10^21.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_ZETTA = 21,
+
+ /**
+ * SI prefix: exa, 10^18.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_EXA = 18,
+
+ /**
+ * SI prefix: peta, 10^15.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_PETA = 15,
+
+ /**
+ * SI prefix: tera, 10^12.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_TERA = 12,
+
+ /**
+ * SI prefix: giga, 10^9.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_GIGA = 9,
+
+ /**
+ * SI prefix: mega, 10^6.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_MEGA = 6,
+
+ /**
+ * SI prefix: kilo, 10^3.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_KILO = 3,
+
+ /**
+ * SI prefix: hecto, 10^2.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_HECTO = 2,
+
+ /**
+ * SI prefix: deka, 10^1.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_DEKA = 1,
+
+ /**
+ * The absence of an SI prefix.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_ONE = 0,
+
+ /**
+ * SI prefix: deci, 10^-1.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_DECI = -1,
+
+ /**
+ * SI prefix: centi, 10^-2.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_CENTI = -2,
+
+ /**
+ * SI prefix: milli, 10^-3.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_MILLI = -3,
+
+ /**
+ * SI prefix: micro, 10^-6.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_MICRO = -6,
+
+ /**
+ * SI prefix: nano, 10^-9.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_NANO = -9,
+
+ /**
+ * SI prefix: pico, 10^-12.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_PICO = -12,
+
+ /**
+ * SI prefix: femto, 10^-15.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_FEMTO = -15,
+
+ /**
+ * SI prefix: atto, 10^-18.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_ATTO = -18,
+
+ /**
+ * SI prefix: zepto, 10^-21.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_ZEPTO = -21,
+
+ /**
+ * SI prefix: yocto, 10^-24.
+ *
+ * @draft ICU 67
+ */
+ UMEASURE_SI_PREFIX_YOCTO = -24
+} UMeasureSIPrefix;
+#endif // U_HIDE_DRAFT_API
/**
* A unit such as length, mass, volume, currency, etc. A unit is
@@ -52,13 +249,43 @@ class U_I18N_API MeasureUnit: public UObject {
* @stable ICU 3.0
*/
MeasureUnit(const MeasureUnit &other);
-
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Move constructor.
+ * @draft ICU 67
+ */
+ MeasureUnit(MeasureUnit &&other) noexcept;
+
+ /**
+ * Construct a MeasureUnit from a CLDR Unit Identifier, defined in UTS 35.
+ * Validates and canonicalizes the identifier.
+ *
+ * <pre>
+ * MeasureUnit example = MeasureUnit::forIdentifier("furlong-per-nanosecond")
+ * </pre>
+ *
+ * @param identifier The CLDR Unit Identifier
+ * @param status Set if the identifier is invalid.
+ * @draft ICU 67
+ */
+ static MeasureUnit forIdentifier(StringPiece identifier, UErrorCode& status);
+#endif // U_HIDE_DRAFT_API
+
/**
- * Assignment operator.
+ * Copy assignment operator.
* @stable ICU 3.0
*/
MeasureUnit &operator=(const MeasureUnit &other);
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Move assignment operator.
+ * @draft ICU 67
+ */
+ MeasureUnit &operator=(MeasureUnit &&other) noexcept;
+#endif // U_HIDE_DRAFT_API
+
/**
* Returns a polymorphic clone of this object. The result will
* have the same class as returned by getDynamicClassID().
@@ -90,16 +317,153 @@ class U_I18N_API MeasureUnit: public UObject {
/**
* Get the type.
+ *
+ * If the unit does not have a type, the empty string is returned.
+ *
* @stable ICU 53
*/
const char *getType() const;
/**
* Get the sub type.
+ *
+ * If the unit does not have a subtype, the empty string is returned.
+ *
* @stable ICU 53
*/
const char *getSubtype() const;
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Get the CLDR Unit Identifier for this MeasureUnit, as defined in UTS 35.
+ *
+ * @return The string form of this unit, owned by this MeasureUnit.
+ * @draft ICU 67
+ */
+ const char* getIdentifier() const;
+
+ /**
+ * Compute the complexity of the unit. See UMeasureUnitComplexity for more information.
+ *
+ * @param status Set if an error occurs.
+ * @return The unit complexity.
+ * @draft ICU 67
+ */
+ UMeasureUnitComplexity getComplexity(UErrorCode& status) const;
+
+ /**
+ * Creates a MeasureUnit which is this SINGLE unit augmented with the specified SI prefix.
+ * For example, UMEASURE_SI_PREFIX_KILO for "kilo".
+ *
+ * There is sufficient locale data to format all standard SI prefixes.
+ *
+ * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
+ * occur. For more information, see UMeasureUnitComplexity.
+ *
+ * @param prefix The SI prefix, from UMeasureSIPrefix.
+ * @param status Set if this is not a SINGLE unit or if another error occurs.
+ * @return A new SINGLE unit.
+ * @draft ICU 67
+ */
+ MeasureUnit withSIPrefix(UMeasureSIPrefix prefix, UErrorCode& status) const;
+
+ /**
+ * Gets the current SI prefix of this SINGLE unit. For example, if the unit has the SI prefix
+ * "kilo", then UMEASURE_SI_PREFIX_KILO is returned.
+ *
+ * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
+ * occur. For more information, see UMeasureUnitComplexity.
+ *
+ * @param status Set if this is not a SINGLE unit or if another error occurs.
+ * @return The SI prefix of this SINGLE unit, from UMeasureSIPrefix.
+ * @draft ICU 67
+ */
+ UMeasureSIPrefix getSIPrefix(UErrorCode& status) const;
+
+ /**
+ * Creates a MeasureUnit which is this SINGLE unit augmented with the specified dimensionality
+ * (power). For example, if dimensionality is 2, the unit will be squared.
+ *
+ * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
+ * occur. For more information, see UMeasureUnitComplexity.
+ *
+ * For the base dimensionless unit, withDimensionality does nothing.
+ *
+ * @param dimensionality The dimensionality (power).
+ * @param status Set if this is not a SINGLE unit or if another error occurs.
+ * @return A new SINGLE unit.
+ * @draft ICU 67
+ */
+ MeasureUnit withDimensionality(int32_t dimensionality, UErrorCode& status) const;
+
+ /**
+ * Gets the dimensionality (power) of this MeasureUnit. For example, if the unit is square,
+ * then 2 is returned.
+ *
+ * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
+ * occur. For more information, see UMeasureUnitComplexity.
+ *
+ * For the base dimensionless unit, getDimensionality returns 0.
+ *
+ * @param status Set if this is not a SINGLE unit or if another error occurs.
+ * @return The dimensionality (power) of this simple unit.
+ * @draft ICU 67
+ */
+ int32_t getDimensionality(UErrorCode& status) const;
+
+ /**
+ * Gets the reciprocal of this MeasureUnit, with the numerator and denominator flipped.
+ *
+ * For example, if the receiver is "meter-per-second", the unit "second-per-meter" is returned.
+ *
+ * NOTE: Only works on SINGLE and COMPOUND units. If this is a MIXED unit, an error will
+ * occur. For more information, see UMeasureUnitComplexity.
+ *
+ * @param status Set if this is a MIXED unit or if another error occurs.
+ * @return The reciprocal of the target unit.
+ * @draft ICU 67
+ */
+ MeasureUnit reciprocal(UErrorCode& status) const;
+
+ /**
+ * Gets the product of this unit with another unit. This is a way to build units from
+ * constituent parts.
+ *
+ * The numerator and denominator are preserved through this operation.
+ *
+ * For example, if the receiver is "kilowatt" and the argument is "hour-per-day", then the
+ * unit "kilowatt-hour-per-day" is returned.
+ *
+ * NOTE: Only works on SINGLE and COMPOUND units. If either unit (receiver and argument) is a
+ * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity.
+ *
+ * @param other The MeasureUnit to multiply with the target.
+ * @param status Set if this or other is a MIXED unit or if another error occurs.
+ * @return The product of the target unit with the provided unit.
+ * @draft ICU 67
+ */
+ MeasureUnit product(const MeasureUnit& other, UErrorCode& status) const;
+#endif // U_HIDE_DRAFT_API
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Gets the list of SINGLE units contained within a MIXED or COMPOUND unit.
+ *
+ * Examples:
+ * - Given "meter-kilogram-per-second", three units will be returned: "meter",
+ * "kilogram", and "per-second".
+ * - Given "hour+minute+second", three units will be returned: "hour", "minute",
+ * and "second".
+ *
+ * If this is a SINGLE unit, an array of length 1 will be returned.
+ *
+ * @param status Set if an error occurs.
+ * @return A pair with the list of units as a LocalArray and the number of units in the list.
+ * @draft ICU 68
+ */
+ inline std::pair<LocalArray<MeasureUnit>, int32_t> splitToSingleUnits(UErrorCode& status) const;
+#endif // U_HIDE_DRAFT_API
+
/**
* getAvailable gets all of the available units.
* If there are too many units to fit into destCapacity then the
@@ -173,33 +537,10 @@ class U_I18N_API MeasureUnit: public UObject {
#ifndef U_HIDE_INTERNAL_API
/**
* ICU use only.
- * Returns associated array index for this measure unit. Only valid for
- * non-currency measure units.
- * @internal
- */
- int32_t getIndex() const;
-
- /**
- * ICU use only.
- * Returns maximum value from getIndex plus 1.
- * @internal
- */
- static int32_t getIndexCount();
-
- /**
- * ICU use only.
- * @return the unit.getIndex() of the unit which has this unit.getType() and unit.getSubtype(),
- * or a negative value if there is no such unit
+ * Returns associated array index for this measure unit.
* @internal
*/
- static int32_t internalGetIndexForTypeAndSubtype(const char *type, const char *subtype);
-
- /**
- * ICU use only.
- * @internal
- */
- static MeasureUnit resolveUnitPerUnit(
- const MeasureUnit &unit, const MeasureUnit &perUnit, bool* isResolved);
+ int32_t getOffset() const;
#endif /* U_HIDE_INTERNAL_API */
// All code between the "Start generated createXXX methods" comment and
@@ -219,17 +560,15 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGForce(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of acceleration: g-force.
* Also see {@link #createGForce()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGForce();
-#endif /* U_HIDE_DRAFT_API */
/**
- * Returns by pointer, unit of acceleration: meter-per-second-squared.
+ * Returns by pointer, unit of acceleration: meter-per-square-second.
* Caller owns returned value and must free it.
* Also see {@link #getMeterPerSecondSquared()}.
* @param status ICU error code.
@@ -237,14 +576,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
- * Returns by value, unit of acceleration: meter-per-second-squared.
+ * Returns by value, unit of acceleration: meter-per-square-second.
* Also see {@link #createMeterPerSecondSquared()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMeterPerSecondSquared();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of angle: arc-minute.
@@ -255,14 +592,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createArcMinute(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of angle: arc-minute.
* Also see {@link #createArcMinute()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getArcMinute();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of angle: arc-second.
@@ -273,14 +608,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createArcSecond(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of angle: arc-second.
* Also see {@link #createArcSecond()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getArcSecond();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of angle: degree.
@@ -291,14 +624,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createDegree(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of angle: degree.
* Also see {@link #createDegree()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDegree();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of angle: radian.
@@ -309,14 +640,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createRadian(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of angle: radian.
* Also see {@link #createRadian()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getRadian();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of angle: revolution.
@@ -327,14 +656,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createRevolutionAngle(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of angle: revolution.
* Also see {@link #createRevolutionAngle()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getRevolutionAngle();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: acre.
@@ -345,32 +672,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createAcre(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: acre.
* Also see {@link #createAcre()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getAcre();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of area: dunam.
* Caller owns returned value and must free it.
* Also see {@link #getDunam()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createDunam(UErrorCode &status);
/**
* Returns by value, unit of area: dunam.
* Also see {@link #createDunam()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDunam();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: hectare.
@@ -381,14 +704,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createHectare(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: hectare.
* Also see {@link #createHectare()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getHectare();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-centimeter.
@@ -399,14 +720,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareCentimeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-centimeter.
* Also see {@link #createSquareCentimeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareCentimeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-foot.
@@ -417,14 +736,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareFoot(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-foot.
* Also see {@link #createSquareFoot()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareFoot();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-inch.
@@ -435,14 +752,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareInch(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-inch.
* Also see {@link #createSquareInch()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareInch();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-kilometer.
@@ -453,14 +768,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareKilometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-kilometer.
* Also see {@link #createSquareKilometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareKilometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-meter.
@@ -471,14 +784,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareMeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-meter.
* Also see {@link #createSquareMeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareMeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-mile.
@@ -489,14 +800,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareMile(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-mile.
* Also see {@link #createSquareMile()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareMile();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of area: square-yard.
@@ -507,14 +816,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSquareYard(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of area: square-yard.
* Also see {@link #createSquareYard()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSquareYard();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of concentr: karat.
@@ -525,14 +832,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKarat(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of concentr: karat.
* Also see {@link #createKarat()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKarat();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of concentr: milligram-per-deciliter.
@@ -543,14 +848,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilligramPerDeciliter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of concentr: milligram-per-deciliter.
* Also see {@link #createMilligramPerDeciliter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilligramPerDeciliter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of concentr: millimole-per-liter.
@@ -561,50 +864,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMillimolePerLiter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of concentr: millimole-per-liter.
* Also see {@link #createMillimolePerLiter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMillimolePerLiter();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of concentr: mole.
* Caller owns returned value and must free it.
* Also see {@link #getMole()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createMole(UErrorCode &status);
/**
* Returns by value, unit of concentr: mole.
* Also see {@link #createMole()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMole();
-#endif /* U_HIDE_DRAFT_API */
-
- /**
- * Returns by pointer, unit of concentr: part-per-million.
- * Caller owns returned value and must free it.
- * Also see {@link #getPartPerMillion()}.
- * @param status ICU error code.
- * @stable ICU 57
- */
- static MeasureUnit *createPartPerMillion(UErrorCode &status);
-
-#ifndef U_HIDE_DRAFT_API
- /**
- * Returns by value, unit of concentr: part-per-million.
- * Also see {@link #createPartPerMillion()}.
- * @draft ICU 64
- */
- static MeasureUnit getPartPerMillion();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of concentr: percent.
@@ -615,14 +896,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPercent(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of concentr: percent.
* Also see {@link #createPercent()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPercent();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of concentr: permille.
@@ -633,35 +912,47 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPermille(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of concentr: permille.
* Also see {@link #createPermille()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPermille();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of concentr: permillion.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getPartPerMillion()}.
+ * @param status ICU error code.
+ * @stable ICU 57
+ */
+ static MeasureUnit *createPartPerMillion(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of concentr: permillion.
+ * Also see {@link #createPartPerMillion()}.
+ * @stable ICU 64
+ */
+ static MeasureUnit getPartPerMillion();
+
/**
* Returns by pointer, unit of concentr: permyriad.
* Caller owns returned value and must free it.
* Also see {@link #getPermyriad()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createPermyriad(UErrorCode &status);
/**
* Returns by value, unit of concentr: permyriad.
* Also see {@link #createPermyriad()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPermyriad();
-#endif /* U_HIDE_DRAFT_API */
/**
- * Returns by pointer, unit of consumption: liter-per-100kilometers.
+ * Returns by pointer, unit of consumption: liter-per-100-kilometer.
* Caller owns returned value and must free it.
* Also see {@link #getLiterPer100Kilometers()}.
* @param status ICU error code.
@@ -669,14 +960,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
- * Returns by value, unit of consumption: liter-per-100kilometers.
+ * Returns by value, unit of consumption: liter-per-100-kilometer.
* Also see {@link #createLiterPer100Kilometers()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getLiterPer100Kilometers();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of consumption: liter-per-kilometer.
@@ -687,14 +976,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createLiterPerKilometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of consumption: liter-per-kilometer.
* Also see {@link #createLiterPerKilometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getLiterPerKilometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of consumption: mile-per-gallon.
@@ -705,14 +992,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilePerGallon(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of consumption: mile-per-gallon.
* Also see {@link #createMilePerGallon()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilePerGallon();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of consumption: mile-per-gallon-imperial.
@@ -723,14 +1008,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilePerGallonImperial(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of consumption: mile-per-gallon-imperial.
* Also see {@link #createMilePerGallonImperial()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilePerGallonImperial();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: bit.
@@ -741,14 +1024,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createBit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: bit.
* Also see {@link #createBit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getBit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: byte.
@@ -759,14 +1040,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createByte(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: byte.
* Also see {@link #createByte()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getByte();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: gigabit.
@@ -777,14 +1056,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGigabit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: gigabit.
* Also see {@link #createGigabit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGigabit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: gigabyte.
@@ -795,14 +1072,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGigabyte(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: gigabyte.
* Also see {@link #createGigabyte()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGigabyte();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: kilobit.
@@ -813,14 +1088,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilobit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: kilobit.
* Also see {@link #createKilobit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilobit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: kilobyte.
@@ -831,14 +1104,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilobyte(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: kilobyte.
* Also see {@link #createKilobyte()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilobyte();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: megabit.
@@ -849,14 +1120,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMegabit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: megabit.
* Also see {@link #createMegabit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMegabit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: megabyte.
@@ -867,14 +1136,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMegabyte(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: megabyte.
* Also see {@link #createMegabyte()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMegabyte();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: petabyte.
@@ -885,14 +1152,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPetabyte(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: petabyte.
* Also see {@link #createPetabyte()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPetabyte();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: terabit.
@@ -903,14 +1168,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createTerabit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: terabit.
* Also see {@link #createTerabit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getTerabit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of digital: terabyte.
@@ -921,14 +1184,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createTerabyte(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of digital: terabyte.
* Also see {@link #createTerabyte()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getTerabyte();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: century.
@@ -939,14 +1200,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCentury(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: century.
* Also see {@link #createCentury()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCentury();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: day.
@@ -957,50 +1216,44 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createDay(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: day.
* Also see {@link #createDay()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDay();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of duration: day-person.
* Caller owns returned value and must free it.
* Also see {@link #getDayPerson()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createDayPerson(UErrorCode &status);
/**
* Returns by value, unit of duration: day-person.
* Also see {@link #createDayPerson()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDayPerson();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of duration: decade.
* Caller owns returned value and must free it.
* Also see {@link #getDecade()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createDecade(UErrorCode &status);
/**
* Returns by value, unit of duration: decade.
* Also see {@link #createDecade()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getDecade();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: hour.
@@ -1011,14 +1264,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createHour(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: hour.
* Also see {@link #createHour()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getHour();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: microsecond.
@@ -1029,14 +1280,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMicrosecond(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: microsecond.
* Also see {@link #createMicrosecond()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMicrosecond();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: millisecond.
@@ -1047,14 +1296,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMillisecond(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: millisecond.
* Also see {@link #createMillisecond()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMillisecond();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: minute.
@@ -1065,14 +1312,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMinute(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: minute.
* Also see {@link #createMinute()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMinute();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: month.
@@ -1083,32 +1328,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMonth(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: month.
* Also see {@link #createMonth()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMonth();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of duration: month-person.
* Caller owns returned value and must free it.
* Also see {@link #getMonthPerson()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createMonthPerson(UErrorCode &status);
/**
* Returns by value, unit of duration: month-person.
* Also see {@link #createMonthPerson()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMonthPerson();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: nanosecond.
@@ -1119,14 +1360,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createNanosecond(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: nanosecond.
* Also see {@link #createNanosecond()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getNanosecond();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: second.
@@ -1137,14 +1376,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createSecond(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: second.
* Also see {@link #createSecond()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSecond();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: week.
@@ -1155,32 +1392,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createWeek(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: week.
* Also see {@link #createWeek()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getWeek();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of duration: week-person.
* Caller owns returned value and must free it.
* Also see {@link #getWeekPerson()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createWeekPerson(UErrorCode &status);
/**
* Returns by value, unit of duration: week-person.
* Also see {@link #createWeekPerson()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getWeekPerson();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of duration: year.
@@ -1191,32 +1424,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createYear(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of duration: year.
* Also see {@link #createYear()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getYear();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of duration: year-person.
* Caller owns returned value and must free it.
* Also see {@link #getYearPerson()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createYearPerson(UErrorCode &status);
/**
* Returns by value, unit of duration: year-person.
* Also see {@link #createYearPerson()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getYearPerson();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of electric: ampere.
@@ -1227,14 +1456,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createAmpere(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of electric: ampere.
* Also see {@link #createAmpere()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getAmpere();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of electric: milliampere.
@@ -1245,14 +1472,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilliampere(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of electric: milliampere.
* Also see {@link #createMilliampere()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilliampere();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of electric: ohm.
@@ -1263,14 +1488,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createOhm(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of electric: ohm.
* Also see {@link #createOhm()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getOhm();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of electric: volt.
@@ -1281,32 +1504,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createVolt(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of electric: volt.
* Also see {@link #createVolt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getVolt();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of energy: british-thermal-unit.
* Caller owns returned value and must free it.
* Also see {@link #getBritishThermalUnit()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createBritishThermalUnit(UErrorCode &status);
/**
* Returns by value, unit of energy: british-thermal-unit.
* Also see {@link #createBritishThermalUnit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getBritishThermalUnit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of energy: calorie.
@@ -1317,32 +1536,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCalorie(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of energy: calorie.
* Also see {@link #createCalorie()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCalorie();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of energy: electronvolt.
* Caller owns returned value and must free it.
* Also see {@link #getElectronvolt()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createElectronvolt(UErrorCode &status);
/**
* Returns by value, unit of energy: electronvolt.
* Also see {@link #createElectronvolt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getElectronvolt();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of energy: foodcalorie.
@@ -1353,14 +1568,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createFoodcalorie(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of energy: foodcalorie.
* Also see {@link #createFoodcalorie()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFoodcalorie();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of energy: joule.
@@ -1371,14 +1584,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createJoule(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of energy: joule.
* Also see {@link #createJoule()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getJoule();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of energy: kilocalorie.
@@ -1389,14 +1600,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilocalorie(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of energy: kilocalorie.
* Also see {@link #createKilocalorie()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilocalorie();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of energy: kilojoule.
@@ -1407,14 +1616,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilojoule(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of energy: kilojoule.
* Also see {@link #createKilojoule()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilojoule();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of energy: kilowatt-hour.
@@ -1425,68 +1632,60 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilowattHour(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of energy: kilowatt-hour.
* Also see {@link #createKilowattHour()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilowattHour();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of energy: therm-us.
* Caller owns returned value and must free it.
* Also see {@link #getThermUs()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createThermUs(UErrorCode &status);
/**
* Returns by value, unit of energy: therm-us.
* Also see {@link #createThermUs()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getThermUs();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of force: newton.
* Caller owns returned value and must free it.
* Also see {@link #getNewton()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createNewton(UErrorCode &status);
/**
* Returns by value, unit of force: newton.
* Also see {@link #createNewton()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getNewton();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of force: pound-force.
* Caller owns returned value and must free it.
* Also see {@link #getPoundForce()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createPoundForce(UErrorCode &status);
/**
* Returns by value, unit of force: pound-force.
* Also see {@link #createPoundForce()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPoundForce();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of frequency: gigahertz.
@@ -1497,14 +1696,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGigahertz(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of frequency: gigahertz.
* Also see {@link #createGigahertz()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGigahertz();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of frequency: hertz.
@@ -1515,14 +1712,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createHertz(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of frequency: hertz.
* Also see {@link #createHertz()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getHertz();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of frequency: kilohertz.
@@ -1533,14 +1728,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilohertz(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of frequency: kilohertz.
* Also see {@link #createKilohertz()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilohertz();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of frequency: megahertz.
@@ -1551,140 +1744,142 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMegahertz(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of frequency: megahertz.
* Also see {@link #createMegahertz()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMegahertz();
-#endif /* U_HIDE_DRAFT_API */
#ifndef U_HIDE_DRAFT_API
/**
+ * Returns by pointer, unit of graphics: dot.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getDot()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createDot(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of graphics: dot.
+ * Also see {@link #createDot()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getDot();
+#endif /* U_HIDE_DRAFT_API */
+
+ /**
* Returns by pointer, unit of graphics: dot-per-centimeter.
* Caller owns returned value and must free it.
* Also see {@link #getDotPerCentimeter()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createDotPerCentimeter(UErrorCode &status);
/**
* Returns by value, unit of graphics: dot-per-centimeter.
* Also see {@link #createDotPerCentimeter()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getDotPerCentimeter();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: dot-per-inch.
* Caller owns returned value and must free it.
* Also see {@link #getDotPerInch()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createDotPerInch(UErrorCode &status);
/**
* Returns by value, unit of graphics: dot-per-inch.
* Also see {@link #createDotPerInch()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getDotPerInch();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: em.
* Caller owns returned value and must free it.
* Also see {@link #getEm()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createEm(UErrorCode &status);
/**
* Returns by value, unit of graphics: em.
* Also see {@link #createEm()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getEm();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: megapixel.
* Caller owns returned value and must free it.
* Also see {@link #getMegapixel()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createMegapixel(UErrorCode &status);
/**
* Returns by value, unit of graphics: megapixel.
* Also see {@link #createMegapixel()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getMegapixel();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: pixel.
* Caller owns returned value and must free it.
* Also see {@link #getPixel()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createPixel(UErrorCode &status);
/**
* Returns by value, unit of graphics: pixel.
* Also see {@link #createPixel()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getPixel();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: pixel-per-centimeter.
* Caller owns returned value and must free it.
* Also see {@link #getPixelPerCentimeter()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createPixelPerCentimeter(UErrorCode &status);
/**
* Returns by value, unit of graphics: pixel-per-centimeter.
* Also see {@link #createPixelPerCentimeter()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getPixelPerCentimeter();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: pixel-per-inch.
* Caller owns returned value and must free it.
* Also see {@link #getPixelPerInch()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createPixelPerInch(UErrorCode &status);
/**
* Returns by value, unit of graphics: pixel-per-inch.
* Also see {@link #createPixelPerInch()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getPixelPerInch();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: astronomical-unit.
@@ -1695,14 +1890,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createAstronomicalUnit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: astronomical-unit.
* Also see {@link #createAstronomicalUnit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getAstronomicalUnit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: centimeter.
@@ -1713,14 +1906,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCentimeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: centimeter.
* Also see {@link #createCentimeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCentimeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: decimeter.
@@ -1731,14 +1922,30 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createDecimeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: decimeter.
* Also see {@link #createDecimeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDecimeter();
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of length: earth-radius.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getEarthRadius()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createEarthRadius(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of length: earth-radius.
+ * Also see {@link #createEarthRadius()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getEarthRadius();
+#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: fathom.
@@ -1749,14 +1956,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createFathom(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: fathom.
* Also see {@link #createFathom()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFathom();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: foot.
@@ -1767,14 +1972,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createFoot(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: foot.
* Also see {@link #createFoot()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFoot();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: furlong.
@@ -1785,14 +1988,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createFurlong(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: furlong.
* Also see {@link #createFurlong()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFurlong();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: inch.
@@ -1803,14 +2004,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createInch(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: inch.
* Also see {@link #createInch()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getInch();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: kilometer.
@@ -1821,14 +2020,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: kilometer.
* Also see {@link #createKilometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: light-year.
@@ -1839,14 +2036,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createLightYear(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: light-year.
* Also see {@link #createLightYear()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getLightYear();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: meter.
@@ -1857,14 +2052,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: meter.
* Also see {@link #createMeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: micrometer.
@@ -1875,14 +2068,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMicrometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: micrometer.
* Also see {@link #createMicrometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMicrometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: mile.
@@ -1893,14 +2084,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMile(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: mile.
* Also see {@link #createMile()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMile();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: mile-scandinavian.
@@ -1911,14 +2100,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMileScandinavian(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: mile-scandinavian.
* Also see {@link #createMileScandinavian()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMileScandinavian();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: millimeter.
@@ -1929,14 +2116,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMillimeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: millimeter.
* Also see {@link #createMillimeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMillimeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: nanometer.
@@ -1947,14 +2132,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createNanometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: nanometer.
* Also see {@link #createNanometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getNanometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: nautical-mile.
@@ -1965,14 +2148,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createNauticalMile(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: nautical-mile.
* Also see {@link #createNauticalMile()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getNauticalMile();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: parsec.
@@ -1983,14 +2164,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createParsec(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: parsec.
* Also see {@link #createParsec()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getParsec();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: picometer.
@@ -2001,14 +2180,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPicometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: picometer.
* Also see {@link #createPicometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPicometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: point.
@@ -2019,32 +2196,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPoint(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: point.
* Also see {@link #createPoint()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPoint();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of length: solar-radius.
* Caller owns returned value and must free it.
* Also see {@link #getSolarRadius()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createSolarRadius(UErrorCode &status);
/**
* Returns by value, unit of length: solar-radius.
* Also see {@link #createSolarRadius()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSolarRadius();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: yard.
@@ -2055,14 +2228,48 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createYard(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of length: yard.
* Also see {@link #createYard()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getYard();
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of light: candela.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getCandela()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createCandela(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of light: candela.
+ * Also see {@link #createCandela()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getCandela();
+#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of light: lumen.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getLumen()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createLumen(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of light: lumen.
+ * Also see {@link #createLumen()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getLumen();
+#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of light: lux.
@@ -2073,32 +2280,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createLux(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of light: lux.
* Also see {@link #createLux()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getLux();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of light: solar-luminosity.
* Caller owns returned value and must free it.
* Also see {@link #getSolarLuminosity()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createSolarLuminosity(UErrorCode &status);
/**
* Returns by value, unit of light: solar-luminosity.
* Also see {@link #createSolarLuminosity()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSolarLuminosity();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: carat.
@@ -2109,49 +2312,61 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCarat(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: carat.
* Also see {@link #createCarat()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCarat();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of mass: dalton.
* Caller owns returned value and must free it.
* Also see {@link #getDalton()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createDalton(UErrorCode &status);
/**
* Returns by value, unit of mass: dalton.
* Also see {@link #createDalton()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDalton();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of mass: earth-mass.
* Caller owns returned value and must free it.
* Also see {@link #getEarthMass()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createEarthMass(UErrorCode &status);
/**
* Returns by value, unit of mass: earth-mass.
* Also see {@link #createEarthMass()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getEarthMass();
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of mass: grain.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getGrain()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createGrain(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of mass: grain.
+ * Also see {@link #createGrain()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getGrain();
#endif /* U_HIDE_DRAFT_API */
/**
@@ -2163,14 +2378,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGram(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: gram.
* Also see {@link #createGram()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGram();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: kilogram.
@@ -2181,14 +2394,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilogram(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: kilogram.
* Also see {@link #createKilogram()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilogram();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: metric-ton.
@@ -2199,14 +2410,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMetricTon(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: metric-ton.
* Also see {@link #createMetricTon()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMetricTon();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: microgram.
@@ -2217,14 +2426,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMicrogram(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: microgram.
* Also see {@link #createMicrogram()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMicrogram();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: milligram.
@@ -2235,14 +2442,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilligram(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: milligram.
* Also see {@link #createMilligram()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilligram();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: ounce.
@@ -2253,14 +2458,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createOunce(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: ounce.
* Also see {@link #createOunce()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getOunce();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: ounce-troy.
@@ -2271,14 +2474,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createOunceTroy(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: ounce-troy.
* Also see {@link #createOunceTroy()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getOunceTroy();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: pound.
@@ -2289,32 +2490,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPound(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: pound.
* Also see {@link #createPound()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPound();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of mass: solar-mass.
* Caller owns returned value and must free it.
* Also see {@link #getSolarMass()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createSolarMass(UErrorCode &status);
/**
* Returns by value, unit of mass: solar-mass.
* Also see {@link #createSolarMass()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getSolarMass();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: stone.
@@ -2325,14 +2522,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createStone(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: stone.
* Also see {@link #createStone()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getStone();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: ton.
@@ -2343,14 +2538,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createTon(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of mass: ton.
* Also see {@link #createTon()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getTon();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of power: gigawatt.
@@ -2361,14 +2554,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGigawatt(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of power: gigawatt.
* Also see {@link #createGigawatt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGigawatt();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of power: horsepower.
@@ -2379,14 +2570,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createHorsepower(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of power: horsepower.
* Also see {@link #createHorsepower()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getHorsepower();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of power: kilowatt.
@@ -2397,14 +2586,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilowatt(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of power: kilowatt.
* Also see {@link #createKilowatt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilowatt();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of power: megawatt.
@@ -2415,14 +2602,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMegawatt(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of power: megawatt.
* Also see {@link #createMegawatt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMegawatt();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of power: milliwatt.
@@ -2433,14 +2618,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilliwatt(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of power: milliwatt.
* Also see {@link #createMilliwatt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilliwatt();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of power: watt.
@@ -2451,14 +2634,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createWatt(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of power: watt.
* Also see {@link #createWatt()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getWatt();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of pressure: atmosphere.
@@ -2469,32 +2650,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createAtmosphere(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of pressure: atmosphere.
* Also see {@link #createAtmosphere()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getAtmosphere();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of pressure: bar.
* Caller owns returned value and must free it.
* Also see {@link #getBar()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createBar(UErrorCode &status);
/**
* Returns by value, unit of pressure: bar.
* Also see {@link #createBar()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getBar();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of pressure: hectopascal.
@@ -2505,17 +2682,15 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createHectopascal(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of pressure: hectopascal.
* Also see {@link #createHectopascal()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getHectopascal();
-#endif /* U_HIDE_DRAFT_API */
/**
- * Returns by pointer, unit of pressure: inch-hg.
+ * Returns by pointer, unit of pressure: inch-ofhg.
* Caller owns returned value and must free it.
* Also see {@link #getInchHg()}.
* @param status ICU error code.
@@ -2523,50 +2698,44 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createInchHg(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
- * Returns by value, unit of pressure: inch-hg.
+ * Returns by value, unit of pressure: inch-ofhg.
* Also see {@link #createInchHg()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getInchHg();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of pressure: kilopascal.
* Caller owns returned value and must free it.
* Also see {@link #getKilopascal()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createKilopascal(UErrorCode &status);
/**
* Returns by value, unit of pressure: kilopascal.
* Also see {@link #createKilopascal()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilopascal();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of pressure: megapascal.
* Caller owns returned value and must free it.
* Also see {@link #getMegapascal()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createMegapascal(UErrorCode &status);
/**
* Returns by value, unit of pressure: megapascal.
* Also see {@link #createMegapascal()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMegapascal();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of pressure: millibar.
@@ -2577,17 +2746,15 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMillibar(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of pressure: millibar.
* Also see {@link #createMillibar()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMillibar();
-#endif /* U_HIDE_DRAFT_API */
/**
- * Returns by pointer, unit of pressure: millimeter-of-mercury.
+ * Returns by pointer, unit of pressure: millimeter-ofhg.
* Caller owns returned value and must free it.
* Also see {@link #getMillimeterOfMercury()}.
* @param status ICU error code.
@@ -2595,35 +2762,31 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMillimeterOfMercury(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
- * Returns by value, unit of pressure: millimeter-of-mercury.
+ * Returns by value, unit of pressure: millimeter-ofhg.
* Also see {@link #createMillimeterOfMercury()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMillimeterOfMercury();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of pressure: pascal.
* Caller owns returned value and must free it.
* Also see {@link #getPascal()}.
* @param status ICU error code.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit *createPascal(UErrorCode &status);
/**
* Returns by value, unit of pressure: pascal.
* Also see {@link #createPascal()}.
- * @draft ICU 65
+ * @stable ICU 65
*/
static MeasureUnit getPascal();
-#endif /* U_HIDE_DRAFT_API */
/**
- * Returns by pointer, unit of pressure: pound-per-square-inch.
+ * Returns by pointer, unit of pressure: pound-force-per-square-inch.
* Caller owns returned value and must free it.
* Also see {@link #getPoundPerSquareInch()}.
* @param status ICU error code.
@@ -2631,14 +2794,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPoundPerSquareInch(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
- * Returns by value, unit of pressure: pound-per-square-inch.
+ * Returns by value, unit of pressure: pound-force-per-square-inch.
* Also see {@link #createPoundPerSquareInch()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPoundPerSquareInch();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of speed: kilometer-per-hour.
@@ -2649,14 +2810,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKilometerPerHour(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of speed: kilometer-per-hour.
* Also see {@link #createKilometerPerHour()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKilometerPerHour();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of speed: knot.
@@ -2667,14 +2826,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKnot(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of speed: knot.
* Also see {@link #createKnot()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKnot();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of speed: meter-per-second.
@@ -2685,14 +2842,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMeterPerSecond(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of speed: meter-per-second.
* Also see {@link #createMeterPerSecond()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMeterPerSecond();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of speed: mile-per-hour.
@@ -2703,14 +2858,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilePerHour(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of speed: mile-per-hour.
* Also see {@link #createMilePerHour()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilePerHour();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of temperature: celsius.
@@ -2721,14 +2874,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCelsius(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of temperature: celsius.
* Also see {@link #createCelsius()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCelsius();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of temperature: fahrenheit.
@@ -2739,14 +2890,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createFahrenheit(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of temperature: fahrenheit.
* Also see {@link #createFahrenheit()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFahrenheit();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of temperature: generic.
@@ -2757,14 +2906,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGenericTemperature(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of temperature: generic.
* Also see {@link #createGenericTemperature()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGenericTemperature();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of temperature: kelvin.
@@ -2775,50 +2922,44 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createKelvin(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of temperature: kelvin.
* Also see {@link #createKelvin()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getKelvin();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of torque: newton-meter.
* Caller owns returned value and must free it.
* Also see {@link #getNewtonMeter()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createNewtonMeter(UErrorCode &status);
/**
* Returns by value, unit of torque: newton-meter.
* Also see {@link #createNewtonMeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getNewtonMeter();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
- * Returns by pointer, unit of torque: pound-foot.
+ * Returns by pointer, unit of torque: pound-force-foot.
* Caller owns returned value and must free it.
* Also see {@link #getPoundFoot()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createPoundFoot(UErrorCode &status);
/**
- * Returns by value, unit of torque: pound-foot.
+ * Returns by value, unit of torque: pound-force-foot.
* Also see {@link #createPoundFoot()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPoundFoot();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: acre-foot.
@@ -2829,32 +2970,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createAcreFoot(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: acre-foot.
* Also see {@link #createAcreFoot()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getAcreFoot();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: barrel.
* Caller owns returned value and must free it.
* Also see {@link #getBarrel()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createBarrel(UErrorCode &status);
/**
* Returns by value, unit of volume: barrel.
* Also see {@link #createBarrel()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getBarrel();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: bushel.
@@ -2865,14 +3002,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createBushel(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: bushel.
* Also see {@link #createBushel()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getBushel();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: centiliter.
@@ -2883,14 +3018,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCentiliter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: centiliter.
* Also see {@link #createCentiliter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCentiliter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-centimeter.
@@ -2901,14 +3034,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicCentimeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-centimeter.
* Also see {@link #createCubicCentimeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicCentimeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-foot.
@@ -2919,14 +3050,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicFoot(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-foot.
* Also see {@link #createCubicFoot()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicFoot();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-inch.
@@ -2937,14 +3066,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicInch(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-inch.
* Also see {@link #createCubicInch()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicInch();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-kilometer.
@@ -2955,14 +3082,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicKilometer(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-kilometer.
* Also see {@link #createCubicKilometer()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicKilometer();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-meter.
@@ -2973,14 +3098,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicMeter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-meter.
* Also see {@link #createCubicMeter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicMeter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-mile.
@@ -2991,14 +3114,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicMile(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-mile.
* Also see {@link #createCubicMile()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicMile();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cubic-yard.
@@ -3009,14 +3130,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCubicYard(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cubic-yard.
* Also see {@link #createCubicYard()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCubicYard();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cup.
@@ -3027,14 +3146,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCup(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cup.
* Also see {@link #createCup()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCup();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: cup-metric.
@@ -3045,14 +3162,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createCupMetric(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: cup-metric.
* Also see {@link #createCupMetric()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getCupMetric();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: deciliter.
@@ -3063,14 +3178,84 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createDeciliter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: deciliter.
* Also see {@link #createDeciliter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getDeciliter();
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: dessert-spoon.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getDessertSpoon()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createDessertSpoon(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: dessert-spoon.
+ * Also see {@link #createDessertSpoon()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getDessertSpoon();
+#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: dessert-spoon-imperial.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getDessertSpoonImperial()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createDessertSpoonImperial(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: dessert-spoon-imperial.
+ * Also see {@link #createDessertSpoonImperial()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getDessertSpoonImperial();
+#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: dram.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getDram()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createDram(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: dram.
+ * Also see {@link #createDram()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getDram();
+#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: drop.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getDrop()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createDrop(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: drop.
+ * Also see {@link #createDrop()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getDrop();
+#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: fluid-ounce.
@@ -3081,32 +3266,28 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createFluidOunce(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: fluid-ounce.
* Also see {@link #createFluidOunce()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFluidOunce();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: fluid-ounce-imperial.
* Caller owns returned value and must free it.
* Also see {@link #getFluidOunceImperial()}.
* @param status ICU error code.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit *createFluidOunceImperial(UErrorCode &status);
/**
* Returns by value, unit of volume: fluid-ounce-imperial.
* Also see {@link #createFluidOunceImperial()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getFluidOunceImperial();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: gallon.
@@ -3117,14 +3298,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGallon(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: gallon.
* Also see {@link #createGallon()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGallon();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: gallon-imperial.
@@ -3135,14 +3314,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createGallonImperial(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: gallon-imperial.
* Also see {@link #createGallonImperial()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getGallonImperial();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: hectoliter.
@@ -3153,14 +3330,30 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createHectoliter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: hectoliter.
* Also see {@link #createHectoliter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getHectoliter();
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: jigger.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getJigger()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createJigger(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: jigger.
+ * Also see {@link #createJigger()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getJigger();
+#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: liter.
@@ -3171,14 +3364,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createLiter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: liter.
* Also see {@link #createLiter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getLiter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: megaliter.
@@ -3189,14 +3380,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMegaliter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: megaliter.
* Also see {@link #createMegaliter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMegaliter();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: milliliter.
@@ -3207,14 +3396,30 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createMilliliter(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: milliliter.
* Also see {@link #createMilliliter()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getMilliliter();
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: pinch.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getPinch()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createPinch(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: pinch.
+ * Also see {@link #createPinch()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getPinch();
+#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: pint.
@@ -3225,14 +3430,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPint(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: pint.
* Also see {@link #createPint()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPint();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: pint-metric.
@@ -3243,14 +3446,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createPintMetric(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: pint-metric.
* Also see {@link #createPintMetric()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getPintMetric();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: quart.
@@ -3261,14 +3462,30 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createQuart(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: quart.
* Also see {@link #createQuart()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getQuart();
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of volume: quart-imperial.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getQuartImperial()}.
+ * @param status ICU error code.
+ * @draft ICU 68
+ */
+ static MeasureUnit *createQuartImperial(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of volume: quart-imperial.
+ * Also see {@link #createQuartImperial()}.
+ * @draft ICU 68
+ */
+ static MeasureUnit getQuartImperial();
+#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: tablespoon.
@@ -3279,14 +3496,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createTablespoon(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: tablespoon.
* Also see {@link #createTablespoon()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getTablespoon();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: teaspoon.
@@ -3297,14 +3512,12 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit *createTeaspoon(UErrorCode &status);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by value, unit of volume: teaspoon.
* Also see {@link #createTeaspoon()}.
- * @draft ICU 64
+ * @stable ICU 64
*/
static MeasureUnit getTeaspoon();
-#endif /* U_HIDE_DRAFT_API */
// End generated createXXX methods
@@ -3322,29 +3535,52 @@ class U_I18N_API MeasureUnit: public UObject {
* For ICU use only.
* @internal
*/
- void initCurrency(const char *isoCurrency);
-
- /**
- * For ICU use only.
- * @internal
- */
- void initNoUnit(const char *subtype);
+ void initCurrency(StringPiece isoCurrency);
#endif /* U_HIDE_INTERNAL_API */
private:
- int32_t fTypeId;
- int32_t fSubTypeId;
- char fCurrency[4];
- MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) {
- fCurrency[0] = 0;
- }
+ // Used by new draft APIs in ICU 67. If non-null, fImpl is owned by the
+ // MeasureUnit.
+ MeasureUnitImpl* fImpl;
+
+ // An index into a static string list in measunit.cpp. If set to -1, fImpl
+ // is in use instead of fTypeId and fSubTypeId.
+ int16_t fSubTypeId;
+ // An index into a static string list in measunit.cpp. If set to -1, fImpl
+ // is in use instead of fTypeId and fSubTypeId.
+ int8_t fTypeId;
+
+ MeasureUnit(int32_t typeId, int32_t subTypeId);
+ MeasureUnit(MeasureUnitImpl&& impl);
void setTo(int32_t typeId, int32_t subTypeId);
- int32_t getOffset() const;
static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
+
+ /**
+ * Sets output's typeId and subTypeId according to subType, if subType is a
+ * valid/known identifier.
+ *
+ * @return Whether subType is known to ICU. If false, output was not
+ * modified.
+ */
+ static bool findBySubType(StringPiece subType, MeasureUnit* output);
+
+ /** Internal version of public API */
+ LocalArray<MeasureUnit> splitToSingleUnitsImpl(int32_t& outCount, UErrorCode& status) const;
+
+ friend struct MeasureUnitImpl;
};
+#ifndef U_HIDE_DRAFT_API // @draft ICU 68
+inline std::pair<LocalArray<MeasureUnit>, int32_t>
+MeasureUnit::splitToSingleUnits(UErrorCode& status) const {
+ int32_t length;
+ auto array = splitToSingleUnitsImpl(length, status);
+ return std::make_pair(std::move(array), length);
+}
+#endif // U_HIDE_DRAFT_API
+
U_NAMESPACE_END
#endif // !UNCONFIG_NO_FORMATTING
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
index fa9c29351e3..aeb1dace43d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
@@ -48,7 +48,7 @@ class U_I18N_API Measure: public UObject {
* Construct an object with the given numeric amount and the given
* unit. After this call, the caller must not delete the given
* unit object.
- * @param number a numeric object; amount.isNumeric() must be TRUE
+ * @param number a numeric object; amount.isNumeric() must be true
* @param adoptedUnit the unit object, which must not be NULL
* @param ec input-output error code. If the amount or the unit
* is invalid, then this will be set to a failing value.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
index 99b0eaeec1d..2d9bc8f2e2b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
@@ -255,7 +255,7 @@ class NumberFormat;
* or preformatted values, but not pattern strings or custom format objects.</p>
*
* <p>For more details, see the
- * <a href="http://userguide.icu-project.org/formatparse/messages">ICU User Guide</a>.</p>
+ * <a href="https://unicode-org.github.io/icu/userguide/format_parse/messages">ICU User Guide</a>.</p>
*
* <h4>Usage Information</h4>
*
@@ -920,7 +920,7 @@ private:
int32_t argTypeCapacity;
/**
- * TRUE if there are different argTypes for the same argument.
+ * true if there are different argTypes for the same argument.
* This only matters when the MessageFormat is used in the plain C (umsg_xxx) API
* where the pattern argTypes determine how the va_arg list is read.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
index 61b5c16ee39..cee45e352df 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
@@ -29,80 +29,53 @@ U_NAMESPACE_BEGIN
/**
* Dimensionless unit for percent and permille.
+ * Prior to ICU 68, this namespace was a class with the same name.
* @see NumberFormatter
- * @draft ICU 60
+ * @draft ICU 68
*/
-class U_I18N_API NoUnit: public MeasureUnit {
-public:
+namespace NoUnit {
/**
* Returns an instance for the base unit (dimensionless and no scaling).
*
- * @return a NoUnit instance
- * @draft ICU 60
+ * Prior to ICU 68, this function returned a NoUnit by value.
+ *
+ * Since ICU 68, this function returns the same value as the default MeasureUnit constructor.
+ *
+ * @return a MeasureUnit instance
+ * @draft ICU 68
*/
- static NoUnit U_EXPORT2 base();
+ static inline MeasureUnit U_EXPORT2 base() {
+ return MeasureUnit();
+ }
/**
* Returns an instance for percent, or 1/100 of a base unit.
*
- * @return a NoUnit instance
- * @draft ICU 60
+ * Prior to ICU 68, this function returned a NoUnit by value.
+ *
+ * Since ICU 68, this function returns the same value as MeasureUnit::getPercent().
+ *
+ * @return a MeasureUnit instance
+ * @draft ICU 68
*/
- static NoUnit U_EXPORT2 percent();
+ static inline MeasureUnit U_EXPORT2 percent() {
+ return MeasureUnit::getPercent();
+ }
/**
* Returns an instance for permille, or 1/1000 of a base unit.
*
- * @return a NoUnit instance
- * @draft ICU 60
- */
- static NoUnit U_EXPORT2 permille();
-
- /**
- * Copy operator.
- * @draft ICU 60
- */
- NoUnit(const NoUnit& other);
-
- /**
- * Destructor.
- * @draft ICU 60
- */
- virtual ~NoUnit();
-
- /**
- * Return a polymorphic clone of this object. The result will
- * have the same class as returned by getDynamicClassID().
- * @draft ICU 60
- */
- virtual NoUnit* clone() const;
-
- /**
- * Returns a unique class ID for this object POLYMORPHICALLY.
- * This method implements a simple form of RTTI used by ICU.
- * @return The class ID for this object. All objects of a given
- * class have the same class ID. Objects of other classes have
- * different class IDs.
- * @draft ICU 60
- */
- virtual UClassID getDynamicClassID() const;
-
- /**
- * Returns the class ID for this class. This is used to compare to
- * the return value of getDynamicClassID().
- * @return The class ID for all objects of this class.
- * @draft ICU 60
- */
- static UClassID U_EXPORT2 getStaticClassID();
-
-private:
- /**
- * Constructor
- * @internal (private)
+ * Prior to ICU 68, this function returned a NoUnit by value.
+ *
+ * Since ICU 68, this function returns the same value as MeasureUnit::getPermille().
+ *
+ * @return a MeasureUnit instance
+ * @draft ICU 68
*/
- NoUnit(const char* subtype);
-
-};
+ static inline MeasureUnit U_EXPORT2 permille() {
+ return MeasureUnit::getPermille();
+ }
+}
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
index 6d48f18ab55..06329b8e7aa 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
@@ -99,6 +99,13 @@ class MultiplierParseHandler;
}
}
+namespace units {
+
+// Forward declarations:
+class UnitsRouter;
+
+} // namespace units
+
namespace number { // icu::number
// Forward declarations:
@@ -155,6 +162,9 @@ class DecNum;
class NumberRangeFormatterImpl;
struct RangeMacroProps;
struct UFormattedNumberImpl;
+class MutablePatternModifier;
+class ImmutablePatternModifier;
+struct DecimalFormatWarehouse;
/**
* Used for NumberRangeFormatter and implemented in numrange_fluent.cpp.
@@ -369,9 +379,9 @@ class U_I18N_API Notation : public UMemory {
UBool copyErrorTo(UErrorCode &status) const {
if (fType == NTN_ERROR) {
status = fUnion.errorCode;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
// To allow MacroProps to initialize empty instances:
@@ -703,12 +713,8 @@ class U_I18N_API Precision : public UMemory {
typedef PrecisionUnion::FractionSignificantSettings FractionSignificantSettings;
typedef PrecisionUnion::IncrementSettings IncrementSettings;
- /** The Precision encapsulates the RoundingMode when used within the implementation. */
- UNumberFormatRoundingMode fRoundingMode;
-
- Precision(const PrecisionType& type, const PrecisionUnion& union_,
- UNumberFormatRoundingMode roundingMode)
- : fType(type), fUnion(union_), fRoundingMode(roundingMode) {}
+ Precision(const PrecisionType& type, const PrecisionUnion& union_)
+ : fType(type), fUnion(union_) {}
Precision(UErrorCode errorCode) : fType(RND_ERROR) {
fUnion.errorCode = errorCode;
@@ -723,9 +729,9 @@ class U_I18N_API Precision : public UMemory {
UBool copyErrorTo(UErrorCode &status) const {
if (fType == RND_ERROR) {
status = fUnion.errorCode;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
// On the parent type so that this method can be called internally on Precision instances.
@@ -742,8 +748,6 @@ class U_I18N_API Precision : public UMemory {
static CurrencyPrecision constructCurrency(UCurrencyUsage usage);
- static Precision constructPassThrough();
-
// To allow MacroProps/MicroProps to initialize bogus instances:
friend struct impl::MacroProps;
friend struct impl::MicroProps;
@@ -764,6 +768,9 @@ class U_I18N_API Precision : public UMemory {
// To allow access to the skeleton generation code:
friend class impl::GeneratorHelpers;
+
+ // To allow access to isBogus and the default (bogus) constructor:
+ friend class units::UnitsRouter;
};
/**
@@ -967,9 +974,9 @@ class U_I18N_API IntegerWidth : public UMemory {
UBool copyErrorTo(UErrorCode &status) const {
if (fHasError) {
status = fUnion.errorCode;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
void apply(impl::DecimalQuantity &quantity, UErrorCode &status) const;
@@ -980,9 +987,13 @@ class U_I18N_API IntegerWidth : public UMemory {
friend struct impl::MacroProps;
friend struct impl::MicroProps;
- // To allow NumberFormatterImpl to access isBogus() and perform other operations:
+ // To allow NumberFormatterImpl to access isBogus():
friend class impl::NumberFormatterImpl;
+ // To allow the use of this class when formatting:
+ friend class impl::MutablePatternModifier;
+ friend class impl::ImmutablePatternModifier;
+
// So that NumberPropertyMapper can create instances
friend class impl::NumberPropertyMapper;
@@ -1089,11 +1100,11 @@ class U_I18N_API Scale : public UMemory {
}
UBool copyErrorTo(UErrorCode &status) const {
- if (fError != U_ZERO_ERROR) {
+ if (U_FAILURE(fError)) {
status = fError;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
void applyTo(impl::DecimalQuantity& quantity) const;
@@ -1120,6 +1131,71 @@ class U_I18N_API Scale : public UMemory {
namespace impl {
+// Do not enclose entire Usage with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
+/**
+ * Manages NumberFormatterSettings::usage()'s char* instance on the heap.
+ * @internal
+ */
+class U_I18N_API Usage : public UMemory {
+
+#ifndef U_HIDE_INTERNAL_API
+
+ public:
+ /** @internal */
+ Usage(const Usage& other);
+
+ /** @internal */
+ Usage& operator=(const Usage& other);
+
+ /** @internal */
+ Usage(Usage &&src) U_NOEXCEPT;
+
+ /** @internal */
+ Usage& operator=(Usage&& src) U_NOEXCEPT;
+
+ /** @internal */
+ ~Usage();
+
+ /** @internal */
+ int16_t length() const { return fLength; }
+
+ /** @internal
+ * Makes a copy of value. Set to "" to unset.
+ */
+ void set(StringPiece value);
+
+ /** @internal */
+ bool isSet() const { return fLength > 0; }
+
+#endif // U_HIDE_INTERNAL_API
+
+ private:
+ char *fUsage;
+ int16_t fLength;
+ UErrorCode fError;
+
+ Usage() : fUsage(nullptr), fLength(0), fError(U_ZERO_ERROR) {}
+
+ /** @internal */
+ UBool copyErrorTo(UErrorCode &status) const {
+ if (U_FAILURE(fError)) {
+ status = fError;
+ return true;
+ }
+ return false;
+ }
+
+ // Allow NumberFormatterImpl to access fUsage.
+ friend class impl::NumberFormatterImpl;
+
+ // Allow skeleton generation code to access private members.
+ friend class impl::GeneratorHelpers;
+
+ // Allow MacroProps/MicroProps to initialize empty instances and to call
+ // copyErrorTo().
+ friend struct impl::MacroProps;
+};
+
// Do not enclose entire SymbolsWrapper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
/** @internal */
class U_I18N_API SymbolsWrapper : public UMemory {
@@ -1186,12 +1262,12 @@ class U_I18N_API SymbolsWrapper : public UMemory {
UBool copyErrorTo(UErrorCode &status) const {
if (fType == SYMPTR_DFS && fPtr.dfs == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
- return TRUE;
+ return true;
} else if (fType == SYMPTR_NS && fPtr.ns == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
private:
@@ -1233,13 +1309,13 @@ class U_I18N_API Grouper : public UMemory {
fGrouping2(grouping2),
fMinGrouping(minGrouping),
fStrategy(strategy) {}
-#endif // U_HIDE_INTERNAL_API
/** @internal */
int16_t getPrimary() const;
/** @internal */
int16_t getSecondary() const;
+#endif // U_HIDE_INTERNAL_API
private:
/**
@@ -1303,10 +1379,10 @@ class U_I18N_API Padder : public UMemory {
/** @internal */
static Padder codePoints(UChar32 cp, int32_t targetWidth, UNumberFormatPadPosition position);
-#endif // U_HIDE_INTERNAL_API
/** @internal */
static Padder forProperties(const DecimalFormatProperties& properties);
+#endif // U_HIDE_INTERNAL_API
private:
UChar32 fWidth; // -3 = error; -2 = bogus; -1 = no padding
@@ -1335,9 +1411,9 @@ class U_I18N_API Padder : public UMemory {
UBool copyErrorTo(UErrorCode &status) const {
if (fWidth == -3) {
status = fUnion.errorCode;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
bool isValid() const {
@@ -1366,10 +1442,10 @@ struct U_I18N_API MacroProps : public UMemory {
Notation notation;
/** @internal */
- MeasureUnit unit; // = NoUnit::base();
+ MeasureUnit unit; // = MeasureUnit(); (the base dimensionless unit)
/** @internal */
- MeasureUnit perUnit; // = NoUnit::base();
+ MeasureUnit perUnit; // = MeasureUnit(); (the base dimensionless unit)
/** @internal */
Precision precision; // = Precision(); (bogus)
@@ -1404,13 +1480,13 @@ struct U_I18N_API MacroProps : public UMemory {
Scale scale; // = Scale(); (benign value)
/** @internal */
- const AffixPatternProvider* affixProvider = nullptr; // no ownership
+ Usage usage; // = Usage(); (no usage)
/** @internal */
- const PluralRules* rules = nullptr; // no ownership
+ const AffixPatternProvider* affixProvider = nullptr; // no ownership
/** @internal */
- const CurrencySymbols* currencySymbols = nullptr; // no ownership
+ const PluralRules* rules = nullptr; // no ownership
/** @internal */
int32_t threshold = kInternalDefaultThreshold;
@@ -1427,12 +1503,22 @@ struct U_I18N_API MacroProps : public UMemory {
bool copyErrorTo(UErrorCode &status) const {
return notation.copyErrorTo(status) || precision.copyErrorTo(status) ||
padder.copyErrorTo(status) || integerWidth.copyErrorTo(status) ||
- symbols.copyErrorTo(status) || scale.copyErrorTo(status);
+ symbols.copyErrorTo(status) || scale.copyErrorTo(status) || usage.copyErrorTo(status);
}
};
} // namespace impl
+#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
+// Ignore MSVC warning 4661. This is generated for NumberFormatterSettings<>::toSkeleton() as this method
+// is defined elsewhere (in number_skeletons.cpp). The compiler is warning that the explicit template instantiation
+// inside this single translation unit (CPP file) is incomplete, and thus it isn't sure if the template class is
+// fully defined. However, since each translation unit explicitly instantiates all the necessary template classes,
+// they will all be passed to the linker, and the linker will still find and export all the class members.
+#pragma warning(push)
+#pragma warning(disable: 4661)
+#endif
+
/**
* An abstract base class for specifying settings related to number formatting. This class is implemented by
* {@link UnlocalizedNumberFormatter} and {@link LocalizedNumberFormatter}. This class is not intended for
@@ -1494,10 +1580,15 @@ class U_I18N_API NumberFormatterSettings {
* All units will be properly localized with locale data, and all units are compatible with notation styles,
* rounding precisions, and other number formatter settings.
*
+ * \note If the usage() is set, the output unit **will be changed** to
+ * produce localised units, according to usage, locale and unit. See
+ * FormattedNumber::getOutputUnit().
+ *
* Pass this method any instance of {@link MeasureUnit}. For units of measure:
*
* <pre>
* NumberFormatter::with().unit(MeasureUnit::getMeter())
+ * NumberFormatter::with().unit(MeasureUnit::forIdentifier("foot-per-second", status))
* </pre>
*
* Currency:
@@ -1680,7 +1771,7 @@ class U_I18N_API NumberFormatterSettings {
*
* The default is HALF_EVEN. For more information on rounding mode, see the ICU userguide here:
*
- * http://userguide.icu-project.org/formatparse/numbers/rounding-modes
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes
*
* @param roundingMode The rounding mode to use.
* @return The fluent chain.
@@ -2025,6 +2116,61 @@ class U_I18N_API NumberFormatterSettings {
*/
Derived scale(const Scale &scale) &&;
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Specifies the usage for which numbers will be formatted ("person-height",
+ * "road", "rainfall", etc.)
+ *
+ * When a `usage` is specified, the output unit will change depending on the
+ * `Locale` and the unit quantity. For example, formatting length
+ * measurements specified in meters:
+ *
+ * `NumberFormatter::with().usage("person").unit(MeasureUnit::getMeter()).locale("en-US")`
+ * * When formatting 0.25, the output will be "10 inches".
+ * * When formatting 1.50, the output will be "4 feet and 11 inches".
+ *
+ * The input unit specified via unit() determines the type of measurement
+ * being formatted (e.g. "length" when the unit is "foot"). The usage
+ * requested will be looked for only within this category of measurement
+ * units.
+ *
+ * The output unit can be found via FormattedNumber::getOutputUnit().
+ *
+ * If the usage has multiple parts (e.g. "land-agriculture-grain") and does
+ * not match a known usage preference, the last part will be dropped
+ * repeatedly until a match is found (e.g. trying "land-agriculture", then
+ * "land"). If a match is still not found, usage will fall back to
+ * "default".
+ *
+ * Setting usage to an empty string clears the usage (disables usage-based
+ * localized formatting).
+ *
+ * Setting a usage string but not a correct input unit will result in an
+ * U_ILLEGAL_ARGUMENT_ERROR.
+ *
+ * When using usage, specifying rounding or precision is unnecessary.
+ * Specifying a precision in some manner will override the default
+ * formatting.
+ *
+ * @param usage A `usage` parameter from the units resource. See the
+ * unitPreferenceData in *source/data/misc/units.txt*, generated from
+ * `unitPreferenceData` in [CLDR's
+ * supplemental/units.xml](https://github.com/unicode-org/cldr/blob/master/common/supplemental/units.xml).
+ * @return The fluent chain.
+ * @draft ICU 68
+ */
+ Derived usage(StringPiece usage) const &;
+
+ /**
+ * Overload of usage() for use on an rvalue reference.
+ *
+ * @param usage The unit `usage`.
+ * @return The fluent chain.
+ * @draft ICU 68
+ */
+ Derived usage(StringPiece usage) &&;
+#endif // U_HIDE_DRAFT_API
+
#ifndef U_HIDE_INTERNAL_API
/**
@@ -2082,7 +2228,6 @@ class U_I18N_API NumberFormatterSettings {
*/
UnicodeString toSkeleton(UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Returns the current (Un)LocalizedNumberFormatter as a LocalPointer
* wrapping a heap-allocated copy of the current object.
@@ -2092,7 +2237,7 @@ class U_I18N_API NumberFormatterSettings {
*
* @return A wrapped (Un)LocalizedNumberFormatter pointer, or a wrapped
* nullptr on failure.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocalPointer<Derived> clone() const &;
@@ -2101,21 +2246,20 @@ class U_I18N_API NumberFormatterSettings {
*
* @return A wrapped (Un)LocalizedNumberFormatter pointer, or a wrapped
* nullptr on failure.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocalPointer<Derived> clone() &&;
-#endif /* U_HIDE_DRAFT_API */
/**
* Sets the UErrorCode if an error occurred in the fluent chain.
* Preserves older error codes in the outErrorCode.
- * @return TRUE if U_FAILURE(outErrorCode)
+ * @return true if U_FAILURE(outErrorCode)
* @stable ICU 60
*/
UBool copyErrorTo(UErrorCode &outErrorCode) const {
if (U_FAILURE(outErrorCode)) {
// Do not overwrite the older error code
- return TRUE;
+ return true;
}
fMacros.copyErrorTo(outErrorCode);
return U_FAILURE(outErrorCode);
@@ -2374,6 +2518,10 @@ class U_I18N_API LocalizedNumberFormatter
const impl::NumberFormatterImpl* fCompiled {nullptr};
char fUnsafeCallCount[8] {}; // internally cast to u_atomic_int32_t
+ // Owned pointer to a DecimalFormatWarehouse, used when copying a LocalizedNumberFormatter
+ // from a DecimalFormat.
+ const impl::DecimalFormatWarehouse* fWarehouse {nullptr};
+
explicit LocalizedNumberFormatter(const NumberFormatterSettings<LocalizedNumberFormatter>& other);
explicit LocalizedNumberFormatter(NumberFormatterSettings<LocalizedNumberFormatter>&& src) U_NOEXCEPT;
@@ -2382,10 +2530,12 @@ class U_I18N_API LocalizedNumberFormatter
LocalizedNumberFormatter(impl::MacroProps &&macros, const Locale &locale);
- void clear();
+ void resetCompiled();
void lnfMoveHelper(LocalizedNumberFormatter&& src);
+ void lnfCopyHelper(const LocalizedNumberFormatter& src, UErrorCode& status);
+
/**
* @return true if the compiled formatter is available.
*/
@@ -2399,6 +2549,11 @@ class U_I18N_API LocalizedNumberFormatter
friend class UnlocalizedNumberFormatter;
};
+#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
+// Warning 4661.
+#pragma warning(pop)
+#endif
+
/**
* The result of a number formatting operation. This class allows the result to be exported in several data types,
* including a UnicodeString and a FieldPositionIterator.
@@ -2410,15 +2565,12 @@ class U_I18N_API LocalizedNumberFormatter
class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
public:
- // Default constructor cannot have #ifndef U_HIDE_DRAFT_API
-#ifndef U_FORCE_HIDE_DRAFT_API
/**
* Default constructor; makes an empty FormattedNumber.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedNumber()
: fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
-#endif // U_FORCE_HIDE_DRAFT_API
/**
* Move constructor: Leaves the source FormattedNumber in an undefined state.
@@ -2472,61 +2624,6 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
/** @copydoc FormattedValue::nextPosition() */
UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE;
-#ifndef U_HIDE_DRAFT_API
- /**
- * Determines the start (inclusive) and end (exclusive) indices of the next occurrence of the given
- * <em>field</em> in the output string. This allows you to determine the locations of, for example,
- * the integer part, fraction part, or symbols.
- *
- * This is a simpler but less powerful alternative to {@link #nextPosition}.
- *
- * If a field occurs just once, calling this method will find that occurrence and return it. If a
- * field occurs multiple times, this method may be called repeatedly with the following pattern:
- *
- * <pre>
- * FieldPosition fpos(UNUM_GROUPING_SEPARATOR_FIELD);
- * while (formattedNumber.nextFieldPosition(fpos, status)) {
- * // do something with fpos.
- * }
- * </pre>
- *
- * This method is useful if you know which field to query. If you want all available field position
- * information, use {@link #nextPosition} or {@link #getAllFieldPositions}.
- *
- * @param fieldPosition
- * Input+output variable. On input, the "field" property determines which field to look
- * up, and the "beginIndex" and "endIndex" properties determine where to begin the search.
- * On output, the "beginIndex" is set to the beginning of the first occurrence of the
- * field with either begin or end indices after the input indices; "endIndex" is set to
- * the end of that occurrence of the field (exclusive index). If a field position is not
- * found, the method returns FALSE and the FieldPosition may or may not be changed.
- * @param status
- * Set if an error occurs while populating the FieldPosition.
- * @return TRUE if a new occurrence of the field was found; FALSE otherwise.
- * @draft ICU 62
- * @see UNumberFormatFields
- */
- UBool nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const;
-
- /**
- * Export the formatted number to a FieldPositionIterator. This allows you to determine which characters in
- * the output string correspond to which <em>fields</em>, such as the integer part, fraction part, and sign.
- *
- * This is an alternative to the more powerful #nextPosition() API.
- *
- * If information on only one field is needed, use #nextPosition() or #nextFieldPosition() instead.
- *
- * @param iterator
- * The FieldPositionIterator to populate with all of the fields present in the formatted number.
- * @param status
- * Set if an error occurs while populating the FieldPositionIterator.
- * @draft ICU 62
- * @see UNumberFormatFields
- */
- void getAllFieldPositions(FieldPositionIterator &iterator, UErrorCode &status) const;
-#endif /* U_HIDE_DRAFT_API */
-
-#ifndef U_HIDE_DRAFT_API
/**
* Export the formatted number as a "numeric string" conforming to the
* syntax defined in the Decimal Arithmetic Specification, available at
@@ -2543,10 +2640,24 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
* for example, std::string.
* @param status Set if an error occurs.
* @return A StringClass containing the numeric string.
- * @draft ICU 65
+ * @stable ICU 65
*/
template<typename StringClass>
inline StringClass toDecimalNumber(UErrorCode& status) const;
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Gets the resolved output unit.
+ *
+ * The output unit is dependent upon the localized preferences for the usage
+ * specified via NumberFormatterSettings::usage(), and may be a unit with
+ * UMEASURE_UNIT_MIXED unit complexity (MeasureUnit::getComplexity()), such
+ * as "foot-and-inch" or "hour-and-minute-and-second".
+ *
+ * @return `MeasureUnit`.
+ * @draft ICU 68
+ */
+ MeasureUnit getOutputUnit(UErrorCode& status) const;
#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
@@ -2582,7 +2693,6 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
explicit FormattedNumber(UErrorCode errorCode)
: fData(nullptr), fErrorCode(errorCode) {}
- // TODO(ICU-20775): Propose this as API.
void toDecimalNumber(ByteSink& sink, UErrorCode& status) const;
// To give LocalizedNumberFormatter format methods access to this class's constructor:
@@ -2600,7 +2710,7 @@ StringClass FormattedNumber::toDecimalNumber(UErrorCode& status) const {
StringByteSink<StringClass> sink(&result);
toDecimalNumber(sink, status);
return result;
-};
+}
#endif // U_HIDE_DRAFT_API
/**
@@ -2646,7 +2756,6 @@ class U_I18N_API NumberFormatter final {
*/
static UnlocalizedNumberFormatter forSkeleton(const UnicodeString& skeleton, UErrorCode& status);
-#ifndef U_HIDE_DRAFT_API
/**
* Call this method at the beginning of a NumberFormatter fluent chain to create an instance based
* on a given number skeleton string.
@@ -2662,11 +2771,10 @@ class U_I18N_API NumberFormatter final {
* @param status
* Set to U_NUMBER_SKELETON_SYNTAX_ERROR if the skeleton was invalid.
* @return An UnlocalizedNumberFormatter, to be used for chaining.
- * @draft ICU 64
+ * @stable ICU 64
*/
static UnlocalizedNumberFormatter forSkeleton(const UnicodeString& skeleton,
UParseError& perror, UErrorCode& status);
-#endif
/**
* Use factory methods instead of the constructor to create a NumberFormatter.
@@ -2682,4 +2790,3 @@ U_NAMESPACE_END
#endif /* U_SHOW_CPLUSPLUS_API */
#endif // __NUMBERFORMATTER_H__
-
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
index 0f0d2af5f5b..4e0a15badb1 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
@@ -16,6 +16,7 @@
#include "unicode/formattedvalue.h"
#include "unicode/fpositer.h"
#include "unicode/numberformatter.h"
+#include "unicode/unumberrangeformatter.h"
/**
* \file
@@ -31,7 +32,7 @@
* .numberFormatterFirst(NumberFormatter::with().adoptUnit(MeasureUnit::createMeter()))
* .numberFormatterSecond(NumberFormatter::with().adoptUnit(MeasureUnit::createKilometer()))
* .locale("en-GB")
- * .formatRange(750, 1.2, status)
+ * .formatFormattableRange(750, 1.2, status)
* .toString(status);
* // => "750 m - 1.2 km"
* </pre>
@@ -44,130 +45,11 @@
*/
-/**
- * Defines how to merge fields that are identical across the range sign.
- *
- * @stable ICU 63
- */
-typedef enum UNumberRangeCollapse {
- /**
- * Use locale data and heuristics to determine how much of the string to collapse. Could end up collapsing none,
- * some, or all repeated pieces in a locale-sensitive way.
- *
- * The heuristics used for this option are subject to change over time.
- *
- * @stable ICU 63
- */
- UNUM_RANGE_COLLAPSE_AUTO,
-
- /**
- * Do not collapse any part of the number. Example: "3.2 thousand kilograms – 5.3 thousand kilograms"
- *
- * @stable ICU 63
- */
- UNUM_RANGE_COLLAPSE_NONE,
-
- /**
- * Collapse the unit part of the number, but not the notation, if present. Example: "3.2 thousand – 5.3 thousand
- * kilograms"
- *
- * @stable ICU 63
- */
- UNUM_RANGE_COLLAPSE_UNIT,
-
- /**
- * Collapse any field that is equal across the range sign. May introduce ambiguity on the magnitude of the
- * number. Example: "3.2 – 5.3 thousand kilograms"
- *
- * @stable ICU 63
- */
- UNUM_RANGE_COLLAPSE_ALL
-} UNumberRangeCollapse;
-
-/**
- * Defines the behavior when the two numbers in the range are identical after rounding. To programmatically detect
- * when the identity fallback is used, compare the lower and upper BigDecimals via FormattedNumber.
- *
- * @stable ICU 63
- * @see NumberRangeFormatter
- */
-typedef enum UNumberRangeIdentityFallback {
- /**
- * Show the number as a single value rather than a range. Example: "$5"
- *
- * @stable ICU 63
- */
- UNUM_IDENTITY_FALLBACK_SINGLE_VALUE,
-
- /**
- * Show the number using a locale-sensitive approximation pattern. If the numbers were the same before rounding,
- * show the single value. Example: "~$5" or "$5"
- *
- * @stable ICU 63
- */
- UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE,
-
- /**
- * Show the number using a locale-sensitive approximation pattern. Use the range pattern always, even if the
- * inputs are the same. Example: "~$5"
- *
- * @stable ICU 63
- */
- UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
-
- /**
- * Show the number as the range of two equal values. Use the range pattern always, even if the inputs are the
- * same. Example (with RangeCollapse.NONE): "$5 – $5"
- *
- * @stable ICU 63
- */
- UNUM_IDENTITY_FALLBACK_RANGE
-} UNumberRangeIdentityFallback;
-
-/**
- * Used in the result class FormattedNumberRange to indicate to the user whether the numbers formatted in the range
- * were equal or not, and whether or not the identity fallback was applied.
- *
- * @stable ICU 63
- * @see NumberRangeFormatter
- */
-typedef enum UNumberRangeIdentityResult {
- /**
- * Used to indicate that the two numbers in the range were equal, even before any rounding rules were applied.
- *
- * @stable ICU 63
- * @see NumberRangeFormatter
- */
- UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING,
-
- /**
- * Used to indicate that the two numbers in the range were equal, but only after rounding rules were applied.
- *
- * @stable ICU 63
- * @see NumberRangeFormatter
- */
- UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING,
-
- /**
- * Used to indicate that the two numbers in the range were not equal, even after rounding rules were applied.
- *
- * @stable ICU 63
- * @see NumberRangeFormatter
- */
- UNUM_IDENTITY_RESULT_NOT_EQUAL,
-
-#ifndef U_HIDE_INTERNAL_API
- /**
- * The number of entries in this enum.
- * @internal
- */
- UNUM_IDENTITY_RESULT_COUNT
-#endif
-
-} UNumberRangeIdentityResult;
-
U_NAMESPACE_BEGIN
+// Forward declarations:
+class PluralRules;
+
namespace number { // icu::number
// Forward declarations:
@@ -182,6 +64,7 @@ struct RangeMacroProps;
class DecimalQuantity;
class UFormattedNumberRangeData;
class NumberRangeFormatterImpl;
+struct UFormattedNumberRangeImpl;
} // namespace impl
@@ -418,8 +301,8 @@ class U_I18N_API NumberRangeFormatterSettings {
/**
* Sets the behavior when the two sides of the range are the same. This could happen if the same two numbers are
- * passed to the formatRange function, or if different numbers are passed to the function but they become the same
- * after rounding rules are applied. Possible values:
+ * passed to the formatFormattableRange function, or if different numbers are passed to the function but they
+ * become the same after rounding rules are applied. Possible values:
* <p>
* <ul>
* <li>SINGLE_VALUE: "5 miles"</li>
@@ -449,7 +332,6 @@ class U_I18N_API NumberRangeFormatterSettings {
*/
Derived identityFallback(UNumberRangeIdentityFallback identityFallback) &&;
-#ifndef U_HIDE_DRAFT_API
/**
* Returns the current (Un)LocalizedNumberRangeFormatter as a LocalPointer
* wrapping a heap-allocated copy of the current object.
@@ -459,7 +341,7 @@ class U_I18N_API NumberRangeFormatterSettings {
*
* @return A wrapped (Un)LocalizedNumberRangeFormatter pointer, or a wrapped
* nullptr on failure.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocalPointer<Derived> clone() const &;
@@ -468,21 +350,20 @@ class U_I18N_API NumberRangeFormatterSettings {
*
* @return A wrapped (Un)LocalizedNumberRangeFormatter pointer, or a wrapped
* nullptr on failure.
- * @draft ICU 64
+ * @stable ICU 64
*/
LocalPointer<Derived> clone() &&;
-#endif /* U_HIDE_DRAFT_API */
/**
* Sets the UErrorCode if an error occurred in the fluent chain.
* Preserves older error codes in the outErrorCode.
- * @return TRUE if U_FAILURE(outErrorCode)
+ * @return true if U_FAILURE(outErrorCode)
* @stable ICU 63
*/
UBool copyErrorTo(UErrorCode &outErrorCode) const {
if (U_FAILURE(outErrorCode)) {
// Do not overwrite the older error code
- return TRUE;
+ return true;
}
fMacros.copyErrorTo(outErrorCode);
return U_FAILURE(outErrorCode);
@@ -727,64 +608,22 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
/** @copydoc FormattedValue::nextPosition() */
UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE;
-#ifndef U_HIDE_DRAFT_API
- /**
- * Determines the start (inclusive) and end (exclusive) indices of the next occurrence of the given
- * <em>field</em> in the output string. This allows you to determine the locations of, for example,
- * the integer part, fraction part, or symbols.
- *
- * If both sides of the range have the same field, the field will occur twice, once before the
- * range separator and once after the range separator, if applicable.
- *
- * If a field occurs just once, calling this method will find that occurrence and return it. If a
- * field occurs multiple times, this method may be called repeatedly with the following pattern:
- *
- * <pre>
- * FieldPosition fpos(UNUM_INTEGER_FIELD);
- * while (formattedNumberRange.nextFieldPosition(fpos, status)) {
- * // do something with fpos.
- * }
- * </pre>
- *
- * This method is useful if you know which field to query. If you want all available field position
- * information, use #getAllFieldPositions().
- *
- * @param fieldPosition
- * Input+output variable. See {@link FormattedNumber#nextFieldPosition}.
- * @param status
- * Set if an error occurs while populating the FieldPosition.
- * @return TRUE if a new occurrence of the field was found; FALSE otherwise.
- * @draft ICU 63
- * @see UNumberFormatFields
- */
- UBool nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const;
-
- /**
- * Export the formatted number range to a FieldPositionIterator. This allows you to determine which characters in
- * the output string correspond to which <em>fields</em>, such as the integer part, fraction part, and sign.
- *
- * If information on only one field is needed, use #nextFieldPosition() instead.
- *
- * @param iterator
- * The FieldPositionIterator to populate with all of the fields present in the formatted number.
- * @param status
- * Set if an error occurs while populating the FieldPositionIterator.
- * @draft ICU 63
- * @see UNumberFormatFields
- */
- void getAllFieldPositions(FieldPositionIterator &iterator, UErrorCode &status) const;
-
+#ifndef U_HIDE_DEPRECATED_API
/**
* Export the first formatted number as a decimal number. This endpoint
* is useful for obtaining the exact number being printed after scaling
* and rounding have been applied by the number range formatting pipeline.
- *
+ *
* The syntax of the unformatted number is a "numeric string"
* as defined in the Decimal Arithmetic Specification, available at
* http://speleotrove.com/decimal
*
+ * TODO(ICU-21275): This function will be removed in ICU 69.
+ * Use getDecimalNumbers() instead.
+ *
+ * @param status Set if an error occurs.
* @return A decimal representation of the first formatted number.
- * @draft ICU 63
+ * @deprecated ICU 68 Use getDecimalNumbers instead.
* @see NumberRangeFormatter
* @see #getSecondDecimal
*/
@@ -794,17 +633,46 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
* Export the second formatted number as a decimal number. This endpoint
* is useful for obtaining the exact number being printed after scaling
* and rounding have been applied by the number range formatting pipeline.
- *
+ *
* The syntax of the unformatted number is a "numeric string"
* as defined in the Decimal Arithmetic Specification, available at
* http://speleotrove.com/decimal
*
+ * TODO(ICU-21275): This function will be removed in ICU 69.
+ * Use getDecimalNumbers() instead.
+ *
+ * @param status Set if an error occurs.
* @return A decimal representation of the second formatted number.
- * @draft ICU 63
+ * @deprecated ICU 68 Use getDecimalNumbers instead.
* @see NumberRangeFormatter
* @see #getFirstDecimal
*/
UnicodeString getSecondDecimal(UErrorCode& status) const;
+#endif // U_HIDE_DEPRECATED_API
+
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Extracts the formatted range as a pair of decimal numbers. This endpoint
+ * is useful for obtaining the exact number being printed after scaling
+ * and rounding have been applied by the number range formatting pipeline.
+ *
+ * The syntax of the unformatted numbers is a "numeric string"
+ * as defined in the Decimal Arithmetic Specification, available at
+ * http://speleotrove.com/decimal
+ *
+ * Example C++17 call site:
+ *
+ * auto [ first, second ] = range.getDecimalNumbers<std::string>(status);
+ *
+ * @tparam StringClass A string class compatible with StringByteSink;
+ * for example, std::string.
+ * @param status Set if an error occurs.
+ * @return A pair of StringClasses containing the numeric strings.
+ * @draft ICU 68
+ */
+ template<typename StringClass>
+ inline std::pair<StringClass, StringClass> getDecimalNumbers(UErrorCode& status) const;
#endif // U_HIDE_DRAFT_API
/**
@@ -866,10 +734,33 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
void getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpih, UErrorCode& status) const;
+ void getDecimalNumbers(ByteSink& sink1, ByteSink& sink2, UErrorCode& status) const;
+
+ const impl::UFormattedNumberRangeData* getData(UErrorCode& status) const;
+
+ // To allow PluralRules to access the underlying data
+ friend class ::icu::PluralRules;
+
// To give LocalizedNumberRangeFormatter format methods access to this class's constructor:
friend class LocalizedNumberRangeFormatter;
+
+ // To give C API access to internals
+ friend struct impl::UFormattedNumberRangeImpl;
};
+#ifndef U_HIDE_DRAFT_API
+// Note: This is draft ICU 68
+template<typename StringClass>
+std::pair<StringClass, StringClass> FormattedNumberRange::getDecimalNumbers(UErrorCode& status) const {
+ StringClass str1;
+ StringClass str2;
+ StringByteSink<StringClass> sink1(&str1);
+ StringByteSink<StringClass> sink2(&str2);
+ getDecimalNumbers(sink1, sink2, status);
+ return std::make_pair(str1, str2);
+}
+#endif // U_HIDE_DRAFT_API
+
/**
* See the main description in numberrangeformatter.h for documentation and examples.
*
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
index 722e6b7e74c..61fb59d2108 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
@@ -179,7 +179,7 @@ public:
*
* <p>
* For more detail on rounding modes, see:
- * http://userguide.icu-project.org/formatparse/numbers/rounding-modes
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes
*
* @stable ICU 2.4
*/
@@ -239,12 +239,10 @@ public:
kPermillField = UNUM_PERMILL_FIELD,
/** @stable ICU 2.0 */
kSignField = UNUM_SIGN_FIELD,
-#ifndef U_HIDE_DRAFT_API
- /** @draft ICU 64 */
+ /** @stable ICU 64 */
kMeasureUnitField = UNUM_MEASURE_UNIT_FIELD,
- /** @draft ICU 64 */
+ /** @stable ICU 64 */
kCompactField = UNUM_COMPACT_FIELD,
-#endif // U_HIDE_DRAFT_API
/**
* These constants are provided for backwards compatibility only.
@@ -706,8 +704,8 @@ public:
/**
* Sets whether lenient parsing should be enabled (it is off by default).
*
- * @param enable \c TRUE if lenient parsing should be used,
- * \c FALSE otherwise.
+ * @param enable \c true if lenient parsing should be used,
+ * \c false otherwise.
* @stable ICU 4.8
*/
virtual void setLenient(UBool enable);
@@ -715,8 +713,8 @@ public:
/**
* Returns whether lenient parsing is enabled (it is off by default).
*
- * @return \c TRUE if lenient parsing is enabled,
- * \c FALSE otherwise.
+ * @return \c true if lenient parsing is enabled,
+ * \c false otherwise.
* @see #setLenient
* @stable ICU 4.8
*/
@@ -872,7 +870,7 @@ public:
* NumberFormat::createInstance to avoid undefined behavior.
* @param key the registry key returned by a previous call to registerFactory
* @param status the in/out status code, no special meanings are assigned
- * @return TRUE if the factory for the key was successfully unregistered
+ * @return true if the factory for the key was successfully unregistered
* @stable ICU 2.6
*/
static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
@@ -1114,7 +1112,7 @@ protected:
#ifndef U_HIDE_INTERNAL_API
/**
* Creates the specified number format style of the desired locale.
- * If mustBeDecimalFormat is TRUE, then the returned pointer is
+ * If mustBeDecimalFormat is true, then the returned pointer is
* either a DecimalFormat or it is NULL.
* @internal
*/
@@ -1153,7 +1151,7 @@ private:
private:
UBool fParseIntegerOnly;
- UBool fLenient; // TRUE => lenient parse is enabled
+ UBool fLenient; // true => lenient parse is enabled
// ISO currency code
char16_t fCurrency[4];
@@ -1230,7 +1228,7 @@ public:
/**
* @stable ICU 2.6
*/
- SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
+ SimpleNumberFormatFactory(const Locale& locale, UBool visible = true);
/**
* @stable ICU 3.0
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
index b2b16fa0d0e..1646729777f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
@@ -74,6 +74,12 @@ public:
NumberingSystem(const NumberingSystem& other);
/**
+ * Copy assignment.
+ * @stable ICU 4.2
+ */
+ NumberingSystem& operator=(const NumberingSystem& other) = default;
+
+ /**
* Destructor.
* @stable ICU 4.2
*/
@@ -96,7 +102,7 @@ public:
/**
* Create a numbering system using the specified radix, type, and description.
* @param radix The radix (base) for this numbering system.
- * @param isAlgorithmic TRUE if the numbering system is algorithmic rather than numeric.
+ * @param isAlgorithmic true if the numbering system is algorithmic rather than numeric.
* @param description The string representing the set of digits used in a numeric system, or the name of the RBNF
* ruleset to be used in an algorithmic system.
* @param status ICU status
@@ -165,10 +171,10 @@ public:
/**
- * Returns TRUE if the given numbering system is algorithmic
+ * Returns true if the given numbering system is algorithmic
*
- * @return TRUE if the numbering system is algorithmic.
- * Otherwise, return FALSE.
+ * @return true if the numbering system is algorithmic.
+ * Otherwise, return false.
* @stable ICU 4.2
*/
UBool isAlgorithmic() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
index 2c2116586f6..fd60857b065 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
@@ -587,7 +587,7 @@ private:
*/
static int32_t findSubMessage(
const MessagePattern& pattern, int32_t partIndex,
- const PluralSelector& selector, void *context, double number, UErrorCode& ec); /**< @internal */
+ const PluralSelector& selector, void *context, double number, UErrorCode& ec);
void parseType(const UnicodeString& source, const NFRule *rbnfLenientScanner,
Formattable& result, FieldPosition& pos) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
index a1553567caf..7b30f69b077 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
@@ -46,14 +46,20 @@ U_NAMESPACE_BEGIN
class Hashtable;
class IFixedDecimal;
+class FixedDecimal;
class RuleChain;
class PluralRuleParser;
class PluralKeywordEnumeration;
class AndConstraint;
class SharedPluralRules;
+class StandardPluralRanges;
namespace number {
class FormattedNumber;
+class FormattedNumberRange;
+namespace impl {
+class UFormattedNumberRangeData;
+}
}
/**
@@ -350,7 +356,6 @@ public:
*/
UnicodeString select(double number) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Given a formatted number, returns the keyword of the first rule
* that applies to the number. This function can be used with
@@ -364,16 +369,39 @@ public:
* @param status Set if an error occurs while selecting plural keyword.
* This could happen if the FormattedNumber is invalid.
* @return The keyword of the selected rule.
- * @draft ICU 64
+ * @stable ICU 64
*/
UnicodeString select(const number::FormattedNumber& number, UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Given a formatted number range, returns the overall plural form of the
+ * range. For example, "3-5" returns "other" in English.
+ *
+ * To get a FormattedNumberRange, see NumberRangeFormatter.
+ *
+ * This method only works if PluralRules was created with a locale. If it was created
+ * from PluralRules::createRules(), this method sets status code U_UNSUPPORTED_ERROR.
+ *
+ * @param range The number range onto which the rules will be applied.
+ * @param status Set if an error occurs while selecting plural keyword.
+ * This could happen if the FormattedNumberRange is invalid,
+ * or if plural ranges data is unavailable.
+ * @return The keyword of the selected rule.
+ * @draft ICU 68
+ */
+ UnicodeString select(const number::FormattedNumberRange& range, UErrorCode& status) const;
+#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
/**
- * @internal
- */
+ * @internal
+ */
UnicodeString select(const IFixedDecimal &number) const;
+ /**
+ * @internal
+ */
+ UnicodeString select(const number::impl::UFormattedNumberRangeData* urange, UErrorCode& status) const;
#endif /* U_HIDE_INTERNAL_API */
/**
@@ -448,13 +476,39 @@ public:
double *dest, int32_t destCapacity,
UErrorCode& status);
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * Internal-only function that returns FixedDecimals instead of doubles.
+ *
+ * Returns sample values for which select() would return the keyword. If
+ * the keyword is unknown, returns no values, but this is not an error.
+ *
+ * The number of returned values is typically small.
+ *
+ * @param keyword The keyword.
+ * @param dest Array into which to put the returned values. May
+ * be NULL if destCapacity is 0.
+ * @param destCapacity The capacity of the array, must be at least 0.
+ * @param status The error code.
+ * @return The count of values written.
+ * If more than destCapacity samples are available, then
+ * only destCapacity are written, and destCapacity is returned as the count,
+ * rather than setting a U_BUFFER_OVERFLOW_ERROR.
+ * (The actual number of keyword values could be unlimited.)
+ * @internal
+ */
+ int32_t getSamples(const UnicodeString &keyword,
+ FixedDecimal *dest, int32_t destCapacity,
+ UErrorCode& status);
+#endif /* U_HIDE_INTERNAL_API */
+
/**
- * Returns TRUE if the given keyword is defined in this
+ * Returns true if the given keyword is defined in this
* <code>PluralRules</code> object.
*
* @param keyword the input keyword.
- * @return TRUE if the input keyword is defined.
- * Otherwise, return FALSE.
+ * @return true if the input keyword is defined.
+ * Otherwise, return false.
* @stable ICU 4.0
*/
UBool isKeyword(const UnicodeString& keyword) const;
@@ -515,12 +569,14 @@ public:
private:
RuleChain *mRules;
+ StandardPluralRanges *mStandardPluralRanges;
PluralRules(); // default constructor not implemented
void parseDescription(const UnicodeString& ruleData, UErrorCode &status);
int32_t getNumberValue(const UnicodeString& token) const;
UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status);
RuleChain *rulesForKeyword(const UnicodeString &keyword) const;
+ PluralRules *clone(UErrorCode& status) const;
/**
* An internal status variable used to indicate that the object is in an 'invalid' state.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
index 62b02324b14..283e9696fb9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
@@ -297,7 +297,7 @@ enum URBNFRuleSetTag {
* </tr>
* <tr>
* <td>x.0:</td>
- * <td>The rule is a <em>master rule</em>. If the full stop in
+ * <td>The rule is a <em>default rule</em>. If the full stop in
* the middle of the rule name is replaced with the decimal point
* that is used in the language or DecimalFormatSymbols, then that rule will
* have precedence when formatting and parsing this rule. For example, some
@@ -332,9 +332,9 @@ enum URBNFRuleSetTag {
* algorithms: If the rule set is a regular rule set, do the following:
*
* <ul>
- * <li>If the rule set includes a master rule (and the number was passed in as a <tt>double</tt>),
- * use the master rule.&nbsp; (If the number being formatted was passed in as a <tt>long</tt>,
- * the master rule is ignored.)</li>
+ * <li>If the rule set includes a default rule (and the number was passed in as a <tt>double</tt>),
+ * use the default rule.&nbsp; (If the number being formatted was passed in as a <tt>long</tt>,
+ * the default rule is ignored.)</li>
* <li>If the number is negative, use the negative-number rule.</li>
* <li>If the number has a fractional part and is greater than 1, use the improper fraction
* rule.</li>
@@ -393,7 +393,7 @@ enum URBNFRuleSetTag {
* </tr>
* <tr>
* <td></td>
- * <td>in fraction or master rule</td>
+ * <td>in fraction or default rule</td>
* <td>Isolate the number's fractional part and format it.</td>
* </tr>
* <tr>
@@ -425,7 +425,7 @@ enum URBNFRuleSetTag {
* </tr>
* <tr>
* <td></td>
- * <td>in fraction or master rule</td>
+ * <td>in fraction or default rule</td>
* <td>Isolate the number's integral part and format it.</td>
* </tr>
* <tr>
@@ -456,7 +456,7 @@ enum URBNFRuleSetTag {
* </tr>
* <tr>
* <td></td>
- * <td>in master rule</td>
+ * <td>in default rule</td>
* <td>Omit the optional text if the number is an integer (same as specifying both an x.x
* rule and an x.0 rule)</td>
* </tr>
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
index d66e1f08ec8..d481e9bf399 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
@@ -258,7 +258,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
@@ -268,7 +268,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
index 69fb7ecd093..98ef6a749fe 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
@@ -66,7 +66,7 @@ class RegexCImpl;
class RegexMatcher;
class RegexPattern;
struct REStackFrame;
-class RuleBasedBreakIterator;
+class BreakIterator;
class UnicodeSet;
class UVector;
class UVector32;
@@ -116,7 +116,7 @@ public:
* were constructed from identical source patterns using the same #URegexpFlag
* settings.
* @param that a RegexPattern object to compare with "this".
- * @return TRUE if the objects are equivalent.
+ * @return true if the objects are equivalent.
* @stable ICU 2.4
*/
UBool operator==(const RegexPattern& that) const;
@@ -126,7 +126,7 @@ public:
* were constructed from identical source patterns using the same #URegexpFlag
* settings.
* @param that a RegexPattern object to compare with "this".
- * @return TRUE if the objects are different.
+ * @return true if the objects are different.
* @stable ICU 2.4
*/
inline UBool operator!=(const RegexPattern& that) const {return ! operator ==(that);}
@@ -612,12 +612,6 @@ private:
UVector32 *fGroupMap; // Map from capture group number to position of
// the group's variables in the matcher stack frame.
- UnicodeSet **fStaticSets; // Ptr to static (shared) sets for predefined
- // regex character classes, e.g. Word.
-
- Regex8BitSet *fStaticSets8; // Ptr to the static (shared) latin-1 only
- // sets for predefined regex classes.
-
int32_t fStartType; // Info on how a match must start.
int32_t fInitialStringIdx; //
int32_t fInitialStringLen;
@@ -635,8 +629,9 @@ private:
//
// Implementation Methods
//
- void init(); // Common initialization, for use by constructors.
- void zap(); // Common cleanup
+ void init(); // Common initialization, for use by constructors.
+ bool initNamedCaptureMap(); // Lazy init for fNamedCaptureMap.
+ void zap(); // Common cleanup
void dumpOp(int32_t index) const;
@@ -769,7 +764,7 @@ public:
/**
* Attempts to match the entire input region against the pattern.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if there is a match
+ * @return true if there is a match
* @stable ICU 2.4
*/
virtual UBool matches(UErrorCode &status);
@@ -782,7 +777,7 @@ public:
* A successful match must extend to the end of the input.
* @param startIndex The input string (native) index at which to begin matching.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if there is a match
+ * @return true if there is a match
* @stable ICU 2.8
*/
virtual UBool matches(int64_t startIndex, UErrorCode &status);
@@ -798,7 +793,7 @@ public:
* end(), and group() functions.
*
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if there is a match at the start of the input string.
+ * @return true if there is a match at the start of the input string.
* @stable ICU 2.4
*/
virtual UBool lookingAt(UErrorCode &status);
@@ -814,7 +809,7 @@ public:
*
* @param startIndex The input string (native) index at which to begin matching.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if there is a match.
+ * @return true if there is a match.
* @stable ICU 2.8
*/
virtual UBool lookingAt(int64_t startIndex, UErrorCode &status);
@@ -829,7 +824,7 @@ public:
* Note that if the input string is changed by the application,
* use find(startPos, status) instead of find(), because the saved starting
* position may not be valid with the altered input string.
- * @return TRUE if a match is found.
+ * @return true if a match is found.
* @stable ICU 2.4
*/
virtual UBool find();
@@ -846,7 +841,7 @@ public:
* use find(startPos, status) instead of find(), because the saved starting
* position may not be valid with the altered input string.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if a match is found.
+ * @return true if a match is found.
* @stable ICU 55
*/
virtual UBool find(UErrorCode &status);
@@ -857,7 +852,7 @@ public:
*
* @param start The (native) index in the input string to begin the search.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if a match is found.
+ * @return true if a match is found.
* @stable ICU 2.4
*/
virtual UBool find(int64_t start, UErrorCode &status);
@@ -1276,7 +1271,7 @@ public:
* See useTransparentBounds for a description of transparent and opaque bounds.
* By default, a matcher uses opaque region boundaries.
*
- * @return TRUE if this matcher is using opaque bounds, false if it is not.
+ * @return true if this matcher is using opaque bounds, false if it is not.
* @stable ICU 4.0
*/
virtual UBool hasTransparentBounds() const;
@@ -1295,7 +1290,7 @@ public:
*
* By default, a matcher uses opaque bounds.
*
- * @param b TRUE for transparent bounds; FALSE for opaque bounds
+ * @param b true for transparent bounds; false for opaque bounds
* @return This Matcher;
* @stable ICU 4.0
**/
@@ -1306,7 +1301,7 @@ public:
* Return true if this matcher is using anchoring bounds.
* By default, matchers use anchoring region bounds.
*
- * @return TRUE if this matcher is using anchoring bounds.
+ * @return true if this matcher is using anchoring bounds.
* @stable ICU 4.0
*/
virtual UBool hasAnchoringBounds() const;
@@ -1320,7 +1315,7 @@ public:
*
* Anchoring Bounds are the default for regions.
*
- * @param b TRUE if to enable anchoring bounds; FALSE to disable them.
+ * @param b true if to enable anchoring bounds; false to disable them.
* @return This Matcher
* @stable ICU 4.0
*/
@@ -1328,26 +1323,26 @@ public:
/**
- * Return TRUE if the most recent matching operation attempted to access
+ * Return true if the most recent matching operation attempted to access
* additional input beyond the available input text.
* In this case, additional input text could change the results of the match.
*
* hitEnd() is defined for both successful and unsuccessful matches.
- * In either case hitEnd() will return TRUE if if the end of the text was
+ * In either case hitEnd() will return true if if the end of the text was
* reached at any point during the matching process.
*
- * @return TRUE if the most recent match hit the end of input
+ * @return true if the most recent match hit the end of input
* @stable ICU 4.0
*/
virtual UBool hitEnd() const;
/**
- * Return TRUE the most recent match succeeded and additional input could cause
+ * Return true the most recent match succeeded and additional input could cause
* it to fail. If this method returns false and a match was found, then more input
* might change the match but the match won't be lost. If a match was not found,
* then requireEnd has no meaning.
*
- * @return TRUE if more input could cause the most recent match to no longer match.
+ * @return true if more input could cause the most recent match to no longer match.
* @stable ICU 4.0
*/
virtual UBool requireEnd() const;
@@ -1779,12 +1774,14 @@ private:
void MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status);
inline void backTrack(int64_t &inputIdx, int32_t &patIdx);
UBool isWordBoundary(int64_t pos); // perform Perl-like \b test
- UBool isUWordBoundary(int64_t pos); // perform RBBI based \b test
+ UBool isUWordBoundary(int64_t pos, UErrorCode &status); // perform RBBI based \b test
+ // Find a grapheme cluster boundary using a break iterator. For handling \X in regexes.
+ int64_t followingGCBoundary(int64_t pos, UErrorCode &status);
REStackFrame *resetStack();
inline REStackFrame *StateSave(REStackFrame *fp, int64_t savePatIdx, UErrorCode &status);
void IncrementTime(UErrorCode &status);
- // Call user find callback function, if set. Return TRUE if operation should be interrupted.
+ // Call user find callback function, if set. Return true if operation should be interrupted.
inline UBool findProgressInterrupt(int64_t matchIndex, UErrorCode &status);
int64_t appendGroup(int32_t groupNum, UText *dest, UErrorCode &status) const;
@@ -1873,7 +1870,8 @@ private:
UErrorCode fDeferredStatus; // Save error state that cannot be immediately
// reported, or that permanently disables this matcher.
- RuleBasedBreakIterator *fWordBreakItr;
+ BreakIterator *fWordBreakItr;
+ BreakIterator *fGCBreakItr;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h
index 044465b10f6..2a3742fd63c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h
@@ -175,19 +175,17 @@ typedef enum UDateAbsoluteUnit {
*/
UDAT_ABSOLUTE_QUARTER,
-#ifndef U_HIDE_DRAFT_API
/**
* Hour
- * @draft ICU 65
+ * @stable ICU 65
*/
UDAT_ABSOLUTE_HOUR,
/**
* Minute
- * @draft ICU 65
+ * @stable ICU 65
*/
UDAT_ABSOLUTE_MINUTE,
-#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_DEPRECATED_API
/**
@@ -264,7 +262,6 @@ class UnicodeString;
class FormattedRelativeDateTime;
class FormattedRelativeDateTimeData;
-#ifndef U_HIDE_DRAFT_API
/**
* An immutable class containing the result of a relative datetime formatting operation.
*
@@ -272,25 +269,25 @@ class FormattedRelativeDateTimeData;
*
* Not intended for public subclassing.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
class U_I18N_API FormattedRelativeDateTime : public UMemory, public FormattedValue {
public:
/**
* Default constructor; makes an empty FormattedRelativeDateTime.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
/**
* Move constructor: Leaves the source FormattedRelativeDateTime in an undefined state.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime(FormattedRelativeDateTime&& src) U_NOEXCEPT;
/**
* Destruct an instance of FormattedRelativeDateTime.
- * @draft ICU 64
+ * @stable ICU 64
*/
virtual ~FormattedRelativeDateTime() U_OVERRIDE;
@@ -302,7 +299,7 @@ class U_I18N_API FormattedRelativeDateTime : public UMemory, public FormattedVal
/**
* Move assignment: Leaves the source FormattedRelativeDateTime in an undefined state.
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime& operator=(FormattedRelativeDateTime&& src) U_NOEXCEPT;
@@ -327,7 +324,6 @@ class U_I18N_API FormattedRelativeDateTime : public UMemory, public FormattedVal
: fData(nullptr), fErrorCode(errorCode) {}
friend class RelativeDateTimeFormatter;
};
-#endif /* U_HIDE_DRAFT_API */
/**
* Formats simple relative dates. There are two types of relative dates that
@@ -492,7 +488,6 @@ public:
UnicodeString& appendTo,
UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Formats a relative date with a quantity such as "in 5 days" or
* "3 months ago"
@@ -508,14 +503,13 @@ public:
* @param unit the unit e.g day? month? year?
* @param status ICU error code returned here.
* @return The formatted relative datetime
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime formatToValue(
double quantity,
UDateDirection direction,
UDateRelativeUnit unit,
UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Formats a relative date without a quantity.
@@ -539,7 +533,6 @@ public:
UnicodeString& appendTo,
UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Formats a relative date without a quantity.
*
@@ -553,13 +546,12 @@ public:
* @param unit e.g SATURDAY, DAY, MONTH
* @param status ICU error code returned here.
* @return The formatted relative datetime
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime formatToValue(
UDateDirection direction,
UDateAbsoluteUnit unit,
UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Format a combination of URelativeDateTimeUnit and numeric offset
@@ -587,7 +579,6 @@ public:
UnicodeString& appendTo,
UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Format a combination of URelativeDateTimeUnit and numeric offset
* using a numeric style, e.g. "1 week ago", "in 1 week",
@@ -604,13 +595,12 @@ public:
* UDAT_REL_UNIT_FRIDAY.
* @param status ICU error code returned here.
* @return The formatted relative datetime
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime formatNumericToValue(
double offset,
URelativeDateTimeUnit unit,
UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Format a combination of URelativeDateTimeUnit and numeric offset
@@ -638,7 +628,6 @@ public:
UnicodeString& appendTo,
UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Format a combination of URelativeDateTimeUnit and numeric offset
* using a text style if possible, e.g. "last week", "this week",
@@ -655,13 +644,12 @@ public:
* UDAT_REL_UNIT_FRIDAY.
* @param status ICU error code returned here.
* @return The formatted relative datetime
- * @draft ICU 64
+ * @stable ICU 64
*/
FormattedRelativeDateTime formatToValue(
double offset,
URelativeDateTimeUnit unit,
UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
/**
* Combines a relative date string and a time string in this object's
@@ -724,13 +712,11 @@ private:
UErrorCode& status,
Args... args) const;
-#ifndef U_HIDE_DRAFT_API // for FormattedRelativeDateTime
template<typename F, typename... Args>
FormattedRelativeDateTime doFormatToValue(
F callback,
UErrorCode& status,
Args... args) const;
-#endif // U_HIDE_DRAFT_API
void formatImpl(
double quantity,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
index 2865366a33f..f1c4b2bc97e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
@@ -267,9 +267,9 @@ public:
/**
* Equality operator.
* @param that SearchIterator instance to be compared.
- * @return TRUE if both BreakIterators are of the same class, have the
+ * @return true if both BreakIterators are of the same class, have the
* same behavior, terates over the same text and have the same
- * attributes. FALSE otherwise.
+ * attributes. false otherwise.
* @stable ICU 2.0
*/
virtual UBool operator==(const SearchIterator &that) const;
@@ -277,7 +277,7 @@ public:
/**
* Not-equal operator.
* @param that SearchIterator instance to be compared.
- * @return FALSE if operator== returns TRUE, and vice versa.
+ * @return false if operator== returns true, and vice versa.
* @stable ICU 2.0
*/
UBool operator!=(const SearchIterator &that) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
index 980a1b8c62e..792fddb4d9d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
@@ -714,7 +714,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
@@ -724,7 +724,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
index 79fa817d5af..3296c6b3ab7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
@@ -81,7 +81,7 @@ class LocalizedNumberFormatter;
* the date and time formatting algorithm and pattern letters defined by
* <a href="http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table">UTS#35
* Unicode Locale Data Markup Language (LDML)</a> and further documented for ICU in the
- * <a href="https://sites.google.com/site/icuprojectuserguide/formatparse/datetime?pli=1#TOC-Date-Field-Symbol-Table">ICU
+ * <a href="https://unicode-org.github.io/icu/userguide/format_parse/datetime/#date-field-symbol-table">ICU
* User Guide</a>. The following pattern letters are currently available (note that the actual
* values depend on CLDR and may change from the examples shown here):</p>
*
@@ -1183,11 +1183,11 @@ public:
/**
* This is for ICU internal use only. Please do not use.
* Check whether the 'field' is smaller than all the fields covered in
- * pattern, return TRUE if it is. The sequence of calendar field,
+ * pattern, return true if it is. The sequence of calendar field,
* from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,...
* @param field the calendar field need to check against
- * @return TRUE if the 'field' is smaller than all the fields
- * covered in pattern. FALSE otherwise.
+ * @return true if the 'field' is smaller than all the fields
+ * covered in pattern. false otherwise.
* @internal ICU 4.0
*/
UBool isFieldUnitIgnored(UCalendarDateFields field) const;
@@ -1196,12 +1196,12 @@ public:
/**
* This is for ICU internal use only. Please do not use.
* Check whether the 'field' is smaller than all the fields covered in
- * pattern, return TRUE if it is. The sequence of calendar field,
+ * pattern, return true if it is. The sequence of calendar field,
* from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,...
* @param pattern the pattern to check against
* @param field the calendar field need to check against
- * @return TRUE if the 'field' is smaller than all the fields
- * covered in pattern. FALSE otherwise.
+ * @return true if the 'field' is smaller than all the fields
+ * covered in pattern. false otherwise.
* @internal ICU 4.0
*/
static UBool isFieldUnitIgnored(const UnicodeString& pattern,
@@ -1274,6 +1274,7 @@ private:
int32_t count,
UDisplayContext capitalizationContext,
int32_t fieldNum,
+ char16_t fieldToOutput,
FieldPositionHandler& handler,
Calendar& cal,
UErrorCode& status) const; // in case of illegal argument
@@ -1304,12 +1305,12 @@ private:
static UBool isNumeric(char16_t formatChar, int32_t count);
/**
- * Returns TRUE if the patternOffset is at the start of a numeric field.
+ * Returns true if the patternOffset is at the start of a numeric field.
*/
static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset);
/**
- * Returns TRUE if the patternOffset is right after a non-numeric field.
+ * Returns true if the patternOffset is right after a non-numeric field.
*/
static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset);
@@ -1389,11 +1390,11 @@ private:
* @param text the text being parsed
* @param textOffset the starting offset into the text. On output
* will be set to the offset of the character after the match
- * @param whitespaceLenient <code>TRUE</code> if whitespace parse is lenient, <code>FALSE</code> otherwise.
- * @param partialMatchLenient <code>TRUE</code> if partial match parse is lenient, <code>FALSE</code> otherwise.
- * @param oldLeniency <code>TRUE</code> if old leniency control is lenient, <code>FALSE</code> otherwise.
+ * @param whitespaceLenient <code>true</code> if whitespace parse is lenient, <code>false</code> otherwise.
+ * @param partialMatchLenient <code>true</code> if partial match parse is lenient, <code>false</code> otherwise.
+ * @param oldLeniency <code>true</code> if old leniency control is lenient, <code>false</code> otherwise.
*
- * @return <code>TRUE</code> if the literal text could be matched, <code>FALSE</code> otherwise.
+ * @return <code>true</code> if the literal text could be matched, <code>false</code> otherwise.
*/
static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
const UnicodeString &text, int32_t &textOffset,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
index 34ed7ee6921..1ca074477c7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
@@ -150,7 +150,7 @@ public:
/**
* Compare if two collation keys are not the same.
* @param source the collation key to compare to.
- * @return Returns TRUE if two collation keys are different, FALSE otherwise.
+ * @return Returns true if two collation keys are different, false otherwise.
* @stable ICU 2.0
*/
UBool operator!=(const CollationKey& source) const;
@@ -159,7 +159,7 @@ public:
/**
* Test to see if the key is in an invalid state. The key will be in an
* invalid state if it couldn't allocate memory for some operation.
- * @return Returns TRUE if the key is in an invalid, FALSE otherwise.
+ * @return Returns true if the key is in an invalid, false otherwise.
* @stable ICU 2.0
*/
UBool isBogus(void) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
index fcb5dbf2009..9bf3df07df5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
@@ -292,7 +292,7 @@ public:
/**
* Equality operator.
* @param that instance to be compared.
- * @return TRUE if both instances have the same attributes,
+ * @return true if both instances have the same attributes,
* breakiterators, collators and iterate over the same text
* while looking for the same pattern.
* @stable ICU 2.0
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
index f5dc135bc49..a004dd6644c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
@@ -99,14 +99,14 @@ class UVector64;
* table-based collation.
* <p>
* For more information about the collation service see
- * <a href="http://userguide.icu-project.org/collation">the User Guide</a>.
+ * <a href="https://unicode-org.github.io/icu/userguide/collation">the User Guide</a>.
* <p>
* Collation service provides correct sorting orders for most locales supported in ICU.
* If specific data for a locale is not available, the orders eventually falls back
* to the <a href="http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation">CLDR root sort order</a>.
* <p>
* Sort ordering may be customized by providing your own set of rules. For more on
- * this subject see the <a href="http://userguide.icu-project.org/collation/customization">
+ * this subject see the <a href="https://unicode-org.github.io/icu/userguide/collation/customization">
* Collation Customization</a> section of the User Guide.
* <p>
* Note, RuleBasedCollator is not to be subclassed.
@@ -495,7 +495,7 @@ public:
* just the tailoring.
*
* getRules(void) should normally be used instead.
- * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales
+ * See https://unicode-org.github.io/icu/userguide/collation/customization#building-on-existing-locales
* @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES.
* @param buffer UnicodeString to store the result rules
* @stable ICU 2.2
@@ -702,7 +702,7 @@ public:
* This string will be normalized.
* The structure and the syntax of the string is defined in the "Naming collators"
* section of the users guide:
- * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme
+ * https://unicode-org.github.io/icu/userguide/collation/concepts#collator-naming-scheme
* This function supports preflighting.
*
* This is internal, and intended to be used with delegate converters.
@@ -752,7 +752,7 @@ public:
* Implements ucol_getContractionsAndExpansions().
* Gets this collator's sets of contraction strings and/or
* characters and strings that map to multiple collation elements (expansions).
- * If addPrefixes is TRUE, then contractions that are expressed as
+ * If addPrefixes is true, then contractions that are expressed as
* prefix/pre-context rules are included.
* @param contractions if not NULL, the set to hold the contractions
* @param expansions if not NULL, the set to hold the expansions
@@ -857,7 +857,7 @@ private:
* Tests whether a character is "unsafe" for use as a collation starting point.
*
* @param c code point or code unit
- * @return TRUE if c is unsafe
+ * @return true if c is unsafe
* @see CollationElementIterator#setOffset(int)
*/
UBool isUnsafe(UChar32 c) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
index 433e3b5c466..90e5f254f48 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
@@ -317,6 +317,19 @@ public:
*/
static TimeZone* U_EXPORT2 createDefault(void);
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * If the locale contains the timezone keyword, creates a copy of that TimeZone.
+ * Otherwise, create the default timezone.
+ *
+ * @param locale a locale which may contains 'timezone' keyword/value.
+ * @return A TimeZone. Clients are responsible for deleting the time zone
+ * object returned.
+ * @internal
+ */
+ static TimeZone* U_EXPORT2 forLocaleOrDefault(const Locale& locale);
+#endif /* U_HIDE_INTERNAL_API */
+
/**
* Sets the default time zone (i.e., what's returned by createDefault()) to be the
* specified time zone. If NULL is specified for the time zone, the default time
@@ -392,7 +405,7 @@ public:
*
* <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
* Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
- * please read the ICU user guide section <a href="http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data">
+ * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
* Updating the Time Zone Data</a>.
*
* @param id A system time zone ID.
@@ -420,7 +433,7 @@ public:
*
* <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
* Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
- * please read the ICU user guide section <a href="http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data">
+ * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
* Updating the Time Zone Data</a>.
*
* @param winid A Windows time zone ID.
@@ -696,8 +709,8 @@ public:
* there are time zones that used daylight savings time in the
* past, but no longer used currently. For example, Asia/Tokyo has
* never used daylight savings time since 1951. Most clients would
- * expect that this method to return <code>FALSE</code> for such case.
- * The default implementation of this method returns <code>TRUE</code>
+ * expect that this method to return <code>false</code> for such case.
+ * The default implementation of this method returns <code>true</code>
* when the time zone uses daylight savings time in the current
* (Gregorian) calendar year.
* <p>In Java 7, <code>observesDaylightTime()</code> was added in
@@ -914,7 +927,7 @@ private:
* @param hour Receives parsed hour field
* @param minute Receives parsed minute field
* @param second Receives parsed second field
- * @return Returns TRUE when the given custom id is valid.
+ * @return Returns true when the given custom id is valid.
*/
static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
int32_t& minute, int32_t& second);
@@ -937,7 +950,7 @@ private:
* @param hour offset hours
* @param min offset minutes
* @param sec offset seconds
- * @param negative sign of the offset, TRUE for negative offset.
+ * @param negative sign of the offset, true for negative offset.
* @param id Receves the format result (normalized custom ID)
* @return The reference to id
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
index 8bcc684d3a9..d5972e7991e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
@@ -39,7 +39,7 @@ public:
/**
* Construct TimeUnitAmount object with the given number and the
* given time unit.
- * @param number a numeric object; number.isNumeric() must be TRUE
+ * @param number a numeric object; number.isNumeric() must be true
* @param timeUnitField the time unit field of a time unit
* @param status the input-output error code.
* If the number is not numeric or the timeUnitField
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
index fe2568d50aa..2aa02c39f13 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
@@ -882,7 +882,7 @@ public:
* another transliterator.
* @param text the text to be transliterated
* @param index the position indices
- * @param incremental if TRUE, then assume more characters may be inserted
+ * @param incremental if true, then assume more characters may be inserted
* at index.limit, and postpone processing to accomodate future incoming
* characters
* @stable ICU 2.4
@@ -897,14 +897,14 @@ private:
* Top-level transliteration method, handling filtering, incremental and
* non-incremental transliteration, and rollback. All transliteration
* public API methods eventually call this method with a rollback argument
- * of TRUE. Other entities may call this method but rollback should be
- * FALSE.
+ * of true. Other entities may call this method but rollback should be
+ * false.
*
* <p>If this transliterator has a filter, break up the input text into runs
* of unfiltered characters. Pass each run to
* subclass.handleTransliterate().
*
- * <p>In incremental mode, if rollback is TRUE, perform a special
+ * <p>In incremental mode, if rollback is true, perform a special
* incremental procedure in which several passes are made over the input
* text, adding one character at a time, and committing successful
* transliterations as they occur. Unsuccessful transliterations are rolled
@@ -912,12 +912,12 @@ private:
*
* @param text the text to be transliterated
* @param index the position indices
- * @param incremental if TRUE, then assume more characters may be inserted
+ * @param incremental if true, then assume more characters may be inserted
* at index.limit, and postpone processing to accomodate future incoming
* characters
- * @param rollback if TRUE and if incremental is TRUE, then perform special
+ * @param rollback if true and if incremental is true, then perform special
* incremental processing, as described above, and undo partial
- * transliterations where necessary. If incremental is FALSE then this
+ * transliterations where necessary. If incremental is false then this
* parameter is ignored.
*/
virtual void filteredTransliterate(Replaceable& text,
@@ -1119,7 +1119,7 @@ public:
* to recreate this transliterator.
* @param result the string to receive the rules. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \\uxxxx or
* \\Uxxxxxxxx. Unprintable characters are those other than
* U+000A, U+0020..U+007E.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
index 6d3863b1e5a..4411865984b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
@@ -295,7 +295,7 @@ public:
* Return true if the given Format objects are semantically equal.
* Objects of different subclasses are considered unequal.
* @param other The object to be compared with.
- * @return Return TRUE if the given Format objects are semantically equal.
+ * @return Return true if the given Format objects are semantically equal.
* Objects of different subclasses are considered unequal.
* @stable ICU 50
*/
@@ -814,7 +814,7 @@ private:
* @param str the string
* @param codeArray receives the result
* @param capacity the capacity of codeArray
- * @return TRUE when the specified code array is fully filled with code points
+ * @return true when the specified code array is fully filled with code points
* (no under/overflow).
*/
static UBool toCodePoints(const UnicodeString& str, UChar32* codeArray, int32_t capacity);
@@ -849,8 +849,8 @@ private:
* @param text the text contains ISO 8601 style time zone string (e.g. "-08:00", "Z")
* at the position.
* @param pos the position, non-negative error index will be set on failure.
- * @param extendedOnly TRUE if parsing the text as ISO 8601 extended offset format (e.g. "-08:00"),
- * or FALSE to evaluate the text as basic format.
+ * @param extendedOnly true if parsing the text as ISO 8601 extended offset format (e.g. "-08:00"),
+ * or false to evaluate the text as basic format.
* @param hasDigitOffset receiving if the parsed zone string contains offset digits.
* @return the offset from GMT(UTC) in milliseconds for the given ISO 8601 style
* time zone string.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
index 860494221df..2e20eff6089 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
@@ -139,7 +139,7 @@ public:
/**
* Return true if the given TimeZoneNames objects are semantically equal.
* @param other the object to be compared with.
- * @return Return TRUE if the given Format objects are semantically equal.
+ * @return Return true if the given Format objects are semantically equal.
* @stable ICU 50
*/
virtual UBool operator==(const TimeZoneNames& other) const = 0;
@@ -148,7 +148,7 @@ public:
* Return true if the given TimeZoneNames objects are not semantically
* equal.
* @param other the object to be compared with.
- * @return Return TRUE if the given Format objects are not semantically equal.
+ * @return Return true if the given Format objects are not semantically equal.
* @stable ICU 50
*/
UBool operator!=(const TimeZoneNames& other) const { return !operator==(other); }
@@ -373,7 +373,7 @@ public:
* Gets the zone ID of a match at the specified index.
* @param idx The index
* @param tzID Receives the zone ID.
- * @return TRUE if the zone ID was set to tzID.
+ * @return true if the zone ID was set to tzID.
* @internal
*/
UBool getTimeZoneIDAt(int32_t idx, UnicodeString& tzID) const;
@@ -382,7 +382,7 @@ public:
* Gets the metazone ID of a match at the specified index.
* @param idx The index
* @param mzID Receives the metazone ID
- * @return TRUE if the meta zone ID was set to mzID.
+ * @return true if the meta zone ID was set to mzID.
* @internal
*/
UBool getMetaZoneIDAt(int32_t idx, UnicodeString& mzID) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
index c198450ba2f..89b16042437 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
@@ -13,7 +13,10 @@
#include "unicode/utypes.h"
#include "unicode/uenum.h"
#include "unicode/uloc.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
#if !UCONFIG_NO_FORMATTING
@@ -32,7 +35,7 @@
*
* <p>
* Types of <code>UCalendar</code> interpret a <code>UDate</code>
- * according to the rules of a specific calendar system. The U_STABLE
+ * according to the rules of a specific calendar system. The C API
* provides the enum UCalendarType with UCAL_TRADITIONAL and
* UCAL_GREGORIAN.
* <p>
@@ -584,7 +587,7 @@ typedef enum USystemTimeZoneType USystemTimeZoneType;
* *ec will indicate the error.
* @stable ICU 4.8
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucal_openTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char* region,
const int32_t* rawOffset, UErrorCode* ec);
@@ -599,7 +602,7 @@ ucal_openTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char* region,
*
* @stable ICU 2.6
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucal_openTimeZones(UErrorCode* ec);
/**
@@ -618,7 +621,7 @@ ucal_openTimeZones(UErrorCode* ec);
*
* @stable ICU 2.6
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucal_openCountryTimeZones(const char* country, UErrorCode* ec);
/**
@@ -644,7 +647,7 @@ ucal_openCountryTimeZones(const char* country, UErrorCode* ec);
*
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec);
/**
@@ -656,11 +659,9 @@ ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec);
*
* @stable ICU 2.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec);
-#ifndef U_HIDE_DRAFT_API
-
/**
* Return the current host time zone. The host time zone is detected from
* the current host system configuration by querying the host operating
@@ -688,13 +689,11 @@ ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec);
*
* @see #UCAL_UNKNOWN_ZONE_ID
*
- * @draft ICU 65
+ * @stable ICU 65
*/
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getHostTimeZone(UChar *result, int32_t resultCapacity, UErrorCode *ec);
-#endif // U_HIDE_DRAFT_API
-
/**
* Return the amount of time in milliseconds that the clock is
* advanced during daylight savings time for the given time zone, or
@@ -711,7 +710,7 @@ ucal_getHostTimeZone(UChar *result, int32_t resultCapacity, UErrorCode *ec);
*
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec);
/**
@@ -720,7 +719,7 @@ ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec);
* @return The current date and time.
* @stable ICU 2.0
*/
-U_STABLE UDate U_EXPORT2
+U_CAPI UDate U_EXPORT2
ucal_getNow(void);
/**
@@ -746,7 +745,7 @@ ucal_getNow(void);
* @see #UCAL_UNKNOWN_ZONE_ID
* @stable ICU 2.0
*/
-U_STABLE UCalendar* U_EXPORT2
+U_CAPI UCalendar* U_EXPORT2
ucal_open(const UChar* zoneID,
int32_t len,
const char* locale,
@@ -759,7 +758,7 @@ ucal_open(const UChar* zoneID,
* @param cal The UCalendar to close.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_close(UCalendar *cal);
#if U_SHOW_CPLUSPLUS_API
@@ -789,7 +788,7 @@ U_NAMESPACE_END
* @return A pointer to a UCalendar identical to cal.
* @stable ICU 4.0
*/
-U_STABLE UCalendar* U_EXPORT2
+U_CAPI UCalendar* U_EXPORT2
ucal_clone(const UCalendar* cal,
UErrorCode* status);
@@ -802,7 +801,7 @@ ucal_clone(const UCalendar* cal,
* @param status A pointer to an UErrorCode to receive any errors.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setTimeZone(UCalendar* cal,
const UChar* zoneID,
int32_t len,
@@ -818,7 +817,7 @@ ucal_setTimeZone(UCalendar* cal,
* @return The total buffer size needed; if greater than resultLength, the output was truncated.
* @stable ICU 51
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getTimeZoneID(const UCalendar *cal,
UChar *result,
int32_t resultLength,
@@ -855,7 +854,7 @@ typedef enum UCalendarDisplayNameType UCalendarDisplayNameType;
* @return The total buffer size needed; if greater than resultLength, the output was truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getTimeZoneDisplayName(const UCalendar* cal,
UCalendarDisplayNameType type,
const char* locale,
@@ -868,10 +867,10 @@ ucal_getTimeZoneDisplayName(const UCalendar* cal,
* Daylight savings time is not used in all parts of the world.
* @param cal The UCalendar to query.
* @param status A pointer to an UErrorCode to receive any errors
- * @return TRUE if cal is currently in daylight savings time, FALSE otherwise
+ * @return true if cal is currently in daylight savings time, false otherwise
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucal_inDaylightTime(const UCalendar* cal,
UErrorCode* status );
@@ -895,7 +894,7 @@ ucal_inDaylightTime(const UCalendar* cal,
* @see ucal_getGregorianChange
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode);
/**
@@ -918,7 +917,7 @@ ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode);
* @see ucal_setGregorianChange
* @stable ICU 3.6
*/
-U_STABLE UDate U_EXPORT2
+U_CAPI UDate U_EXPORT2
ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode);
/**
@@ -999,7 +998,7 @@ typedef enum UCalendarWallTimeOption UCalendarWallTimeOption;
* @see ucal_setAttribute
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getAttribute(const UCalendar* cal,
UCalendarAttribute attr);
@@ -1014,7 +1013,7 @@ ucal_getAttribute(const UCalendar* cal,
* @see ucal_getAttribute
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setAttribute(UCalendar* cal,
UCalendarAttribute attr,
int32_t newValue);
@@ -1028,7 +1027,7 @@ ucal_setAttribute(UCalendar* cal,
* @see ucal_countAvailable
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ucal_getAvailable(int32_t localeIndex);
/**
@@ -1039,7 +1038,7 @@ ucal_getAvailable(int32_t localeIndex);
* @see ucal_getAvailable
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_countAvailable(void);
/**
@@ -1053,7 +1052,7 @@ ucal_countAvailable(void);
* @see ucal_setDateTime
* @stable ICU 2.0
*/
-U_STABLE UDate U_EXPORT2
+U_CAPI UDate U_EXPORT2
ucal_getMillis(const UCalendar* cal,
UErrorCode* status);
@@ -1068,7 +1067,7 @@ ucal_getMillis(const UCalendar* cal,
* @see ucal_setDateTime
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setMillis(UCalendar* cal,
UDate dateTime,
UErrorCode* status );
@@ -1087,7 +1086,7 @@ ucal_setMillis(UCalendar* cal,
* @see ucal_setDateTime
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setDate(UCalendar* cal,
int32_t year,
int32_t month,
@@ -1111,7 +1110,7 @@ ucal_setDate(UCalendar* cal,
* @see ucal_setDate
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_setDateTime(UCalendar* cal,
int32_t year,
int32_t month,
@@ -1122,15 +1121,15 @@ ucal_setDateTime(UCalendar* cal,
UErrorCode* status);
/**
- * Returns TRUE if two UCalendars are equivalent. Equivalent
+ * Returns true if two UCalendars are equivalent. Equivalent
* UCalendars will behave identically, but they may be set to
* different times.
* @param cal1 The first of the UCalendars to compare.
* @param cal2 The second of the UCalendars to compare.
- * @return TRUE if cal1 and cal2 are equivalent, FALSE otherwise.
+ * @return true if cal1 and cal2 are equivalent, false otherwise.
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucal_equivalentTo(const UCalendar* cal1,
const UCalendar* cal2);
@@ -1152,7 +1151,7 @@ ucal_equivalentTo(const UCalendar* cal1,
* @see ucal_roll
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_add(UCalendar* cal,
UCalendarDateFields field,
int32_t amount,
@@ -1182,7 +1181,7 @@ ucal_add(UCalendar* cal,
* @see ucal_add
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_roll(UCalendar* cal,
UCalendarDateFields field,
int32_t amount,
@@ -1204,7 +1203,7 @@ ucal_roll(UCalendar* cal,
* @see ucal_clear
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_get(const UCalendar* cal,
UCalendarDateFields field,
UErrorCode* status );
@@ -1224,7 +1223,7 @@ ucal_get(const UCalendar* cal,
* @see ucal_clear
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_set(UCalendar* cal,
UCalendarDateFields field,
int32_t value);
@@ -1237,14 +1236,14 @@ ucal_set(UCalendar* cal,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
- * @return TRUE if field is set, FALSE otherwise.
+ * @return true if field is set, false otherwise.
* @see ucal_get
* @see ucal_set
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucal_isSet(const UCalendar* cal,
UCalendarDateFields field);
@@ -1262,7 +1261,7 @@ ucal_isSet(const UCalendar* cal,
* @see ucal_clear
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_clearField(UCalendar* cal,
UCalendarDateFields field);
@@ -1276,7 +1275,7 @@ ucal_clearField(UCalendar* cal,
* @see ucal_clearField
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucal_clear(UCalendar* calendar);
/**
@@ -1315,7 +1314,7 @@ typedef enum UCalendarLimitType UCalendarLimitType;
* @return The requested value.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getLimit(const UCalendar* cal,
UCalendarDateFields field,
UCalendarLimitType type,
@@ -1328,7 +1327,7 @@ ucal_getLimit(const UCalendar* cal,
* @return the locale name
* @stable ICU 2.8
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status);
/**
@@ -1337,7 +1336,7 @@ ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode*
* @return the version string, such as "2007f"
* @stable ICU 3.8
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucal_getTZDataVersion(UErrorCode* status);
/**
@@ -1358,7 +1357,7 @@ ucal_getTZDataVersion(UErrorCode* status);
* null.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getCanonicalTimeZoneID(const UChar* id, int32_t len,
UChar* result, int32_t resultCapacity, UBool *isSystemID, UErrorCode* status);
/**
@@ -1368,7 +1367,7 @@ ucal_getCanonicalTimeZoneID(const UChar* id, int32_t len,
* @return The resource keyword value string.
* @stable ICU 4.2
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucal_getType(const UCalendar *cal, UErrorCode* status);
/**
@@ -1387,7 +1386,7 @@ ucal_getType(const UCalendar *cal, UErrorCode* status);
* @return a string enumeration over keyword values for the given key and the locale.
* @stable ICU 4.2
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucal_getKeywordValuesForLocale(const char* key,
const char* locale,
UBool commonlyUsed,
@@ -1442,7 +1441,7 @@ typedef enum UCalendarWeekdayType UCalendarWeekdayType;
* @return The UCalendarWeekdayType for the day of the week.
* @stable ICU 4.4
*/
-U_STABLE UCalendarWeekdayType U_EXPORT2
+U_CAPI UCalendarWeekdayType U_EXPORT2
ucal_getDayOfWeekType(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode* status);
/**
@@ -1460,20 +1459,20 @@ ucal_getDayOfWeekType(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErro
* @return The milliseconds after midnight at which the weekend begins or ends.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getWeekendTransition(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode *status);
/**
- * Returns TRUE if the given UDate is in the weekend in
+ * Returns true if the given UDate is in the weekend in
* this calendar system.
* @param cal The UCalendar to query.
* @param date The UDate in question.
* @param status The error code for the operation.
- * @return TRUE if the given UDate is in the weekend in
- * this calendar system, FALSE otherwise.
+ * @return true if the given UDate is in the weekend in
+ * this calendar system, false otherwise.
* @stable ICU 4.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status);
/**
@@ -1500,7 +1499,7 @@ ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status);
* @return The date difference for the specified field.
* @stable ICU 4.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getFieldDifference(UCalendar* cal,
UDate target,
UCalendarDateFields field,
@@ -1544,17 +1543,17 @@ typedef enum UTimeZoneTransitionType UTimeZoneTransitionType; /**< @stable ICU 5
* the calendar's current date, in the time zone to which the calendar
* is currently set. If there is no known time zone transition of the
* requested type relative to the calendar's date, the function returns
-* FALSE.
+* false.
* @param cal The UCalendar to query.
* @param type The type of transition desired.
* @param transition A pointer to a UDate to be set to the transition time.
-* If the function returns FALSE, the value set is unspecified.
+* If the function returns false, the value set is unspecified.
* @param status A pointer to a UErrorCode to receive any errors.
-* @return TRUE if a valid transition time is set in *transition, FALSE
+* @return true if a valid transition time is set in *transition, false
* otherwise.
* @stable ICU 50
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType type,
UDate* transition, UErrorCode* status);
@@ -1569,7 +1568,7 @@ ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType typ
*
* <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
* Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
-* please read the ICU user guide section <a href="http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data">
+* please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
* Updating the Time Zone Data</a>.
*
* @param id A system time zone ID.
@@ -1582,7 +1581,7 @@ ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType typ
*
* @stable ICU 52
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getWindowsTimeZoneID(const UChar* id, int32_t len,
UChar* winid, int32_t winidCapacity, UErrorCode* status);
@@ -1600,7 +1599,7 @@ ucal_getWindowsTimeZoneID(const UChar* id, int32_t len,
*
* <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
* Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
-* please read the ICU user guide section <a href="http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data">
+* please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
* Updating the Time Zone Data</a>.
*
* @param winid A Windows time zone ID.
@@ -1614,7 +1613,7 @@ ucal_getWindowsTimeZoneID(const UChar* id, int32_t len,
*
* @stable ICU 52
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucal_getTimeZoneIDForWindowsID(const UChar* winid, int32_t len, const char* region,
UChar* id, int32_t idCapacity, UErrorCode* status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
index 673af1c55a7..a01d0ae9af8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
@@ -15,12 +15,15 @@
#if !UCONFIG_NO_COLLATION
#include "unicode/unorm.h"
-#include "unicode/localpointer.h"
#include "unicode/parseerr.h"
#include "unicode/uloc.h"
#include "unicode/uset.h"
#include "unicode/uscript.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: Collator
@@ -32,14 +35,14 @@
* searching and sorting routines for natural language text.
* <p>
* For more information about the collation service see
- * <a href="http://userguide.icu-project.org/collation">the User Guide</a>.
+ * <a href="https://unicode-org.github.io/icu/userguide/collation">the User Guide</a>.
* <p>
* Collation service provides correct sorting orders for most locales supported in ICU.
* If specific data for a locale is not available, the orders eventually falls back
* to the <a href="http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation">CLDR root sort order</a>.
* <p>
* Sort ordering may be customized by providing your own set of rules. For more on
- * this subject see the <a href="http://userguide.icu-project.org/collation/customization">
+ * this subject see the <a href="https://unicode-org.github.io/icu/userguide/collation/customization">
* Collation Customization</a> section of the User Guide.
* <p>
* @see UCollationResult
@@ -367,7 +370,7 @@ typedef enum {
* Retrieves the "UCA rules" concatenated with the tailoring rules.
* The "UCA rules" are an <i>approximation</i> of the root collator's sort order.
* They are almost never used or useful at runtime and can be removed from the data.
- * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales
+ * See https://unicode-org.github.io/icu/userguide/collation/customization#building-on-existing-locales
* @stable ICU 2.0
*/
UCOL_FULL_RULES
@@ -381,7 +384,7 @@ typedef enum {
* Starting with ICU 54, collation attributes can be specified via locale keywords as well,
* in the old locale extension syntax ("el@colCaseFirst=upper")
* or in language tag syntax ("el-u-kf-upper").
- * See <a href="http://userguide.icu-project.org/collation/api">User Guide: Collation API</a>.
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/api">User Guide: Collation API</a>.
*
* The UCollator pointer is used in all the calls to the Collation
* service. After finished, collator must be disposed of by calling
@@ -398,7 +401,7 @@ typedef enum {
* @see ucol_close
* @stable ICU 2.0
*/
-U_STABLE UCollator* U_EXPORT2
+U_CAPI UCollator* U_EXPORT2
ucol_open(const char *loc, UErrorCode *status);
/**
@@ -426,7 +429,7 @@ ucol_open(const char *loc, UErrorCode *status);
* @see ucol_close
* @stable ICU 2.0
*/
-U_STABLE UCollator* U_EXPORT2
+U_CAPI UCollator* U_EXPORT2
ucol_openRules( const UChar *rules,
int32_t rulesLength,
UColAttributeValue normalizationMode,
@@ -439,7 +442,7 @@ ucol_openRules( const UChar *rules,
* Open a collator defined by a short form string.
* The structure and the syntax of the string is defined in the "Naming collators"
* section of the users guide:
- * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme
+ * https://unicode-org.github.io/icu/userguide/collation/concepts#collator-naming-scheme
* Attributes are overriden by the subsequent attributes. So, for "S2_S3", final
* strength will be 3. 3066bis locale overrides individual locale parts.
* The call to this function is equivalent to a call to ucol_open, followed by a
@@ -449,12 +452,12 @@ ucol_openRules( const UChar *rules,
* state for a locale.
* @param parseError if not NULL, structure that will get filled with error's pre
* and post context in case of error.
- * @param forceDefaults if FALSE, the settings that are the same as the collator
+ * @param forceDefaults if false, the settings that are the same as the collator
* default settings will not be applied (for example, setting
* French secondary on a French collator would not be executed).
- * If TRUE, all the settings will be applied regardless of the
+ * If true, all the settings will be applied regardless of the
* collator default value. If the definition
- * strings are to be cached, should be set to FALSE.
+ * strings are to be cached, should be set to false.
* @param status Error code. Apart from regular error conditions connected to
* instantiating collators (like out of memory or similar), this
* API will return an error if an invalid attribute or attribute/value
@@ -506,7 +509,7 @@ ucol_getContractions( const UCollator *coll,
*
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_getContractionsAndExpansions( const UCollator *coll,
USet *contractions, USet *expansions,
UBool addPrefixes, UErrorCode *status);
@@ -521,7 +524,7 @@ ucol_getContractionsAndExpansions( const UCollator *coll,
* @see ucol_safeClone
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_close(UCollator *coll);
#if U_SHOW_CPLUSPLUS_API
@@ -558,7 +561,7 @@ U_NAMESPACE_END
* @see ucol_equal
* @stable ICU 2.0
*/
-U_STABLE UCollationResult U_EXPORT2
+U_CAPI UCollationResult U_EXPORT2
ucol_strcoll( const UCollator *coll,
const UChar *source,
int32_t sourceLength,
@@ -583,7 +586,7 @@ ucol_strcoll( const UCollator *coll,
* @see ucol_equal
* @stable ICU 50
*/
-U_STABLE UCollationResult U_EXPORT2
+U_CAPI UCollationResult U_EXPORT2
ucol_strcollUTF8(
const UCollator *coll,
const char *source,
@@ -600,13 +603,13 @@ ucol_strcollUTF8(
* @param sourceLength The length of source, or -1 if null-terminated.
* @param target The target string.
* @param targetLength The length of target, or -1 if null-terminated.
- * @return TRUE if source is greater than target, FALSE otherwise.
+ * @return true if source is greater than target, false otherwise.
* @see ucol_strcoll
* @see ucol_greaterOrEqual
* @see ucol_equal
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucol_greater(const UCollator *coll,
const UChar *source, int32_t sourceLength,
const UChar *target, int32_t targetLength);
@@ -619,13 +622,13 @@ ucol_greater(const UCollator *coll,
* @param sourceLength The length of source, or -1 if null-terminated.
* @param target The target string.
* @param targetLength The length of target, or -1 if null-terminated.
- * @return TRUE if source is greater than or equal to target, FALSE otherwise.
+ * @return true if source is greater than or equal to target, false otherwise.
* @see ucol_strcoll
* @see ucol_greater
* @see ucol_equal
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucol_greaterOrEqual(const UCollator *coll,
const UChar *source, int32_t sourceLength,
const UChar *target, int32_t targetLength);
@@ -638,13 +641,13 @@ ucol_greaterOrEqual(const UCollator *coll,
* @param sourceLength The length of source, or -1 if null-terminated.
* @param target The target string.
* @param targetLength The length of target, or -1 if null-terminated.
- * @return TRUE if source is equal to target, FALSE otherwise
+ * @return true if source is equal to target, false otherwise
* @see ucol_strcoll
* @see ucol_greater
* @see ucol_greaterOrEqual
* @stable ICU 2.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucol_equal(const UCollator *coll,
const UChar *source, int32_t sourceLength,
const UChar *target, int32_t targetLength);
@@ -661,7 +664,7 @@ ucol_equal(const UCollator *coll,
* @see ucol_strcoll
* @stable ICU 2.6
*/
-U_STABLE UCollationResult U_EXPORT2
+U_CAPI UCollationResult U_EXPORT2
ucol_strcollIter( const UCollator *coll,
UCharIterator *sIter,
UCharIterator *tIter,
@@ -676,7 +679,7 @@ ucol_strcollIter( const UCollator *coll,
* @see ucol_setStrength
* @stable ICU 2.0
*/
-U_STABLE UCollationStrength U_EXPORT2
+U_CAPI UCollationStrength U_EXPORT2
ucol_getStrength(const UCollator *coll);
/**
@@ -688,7 +691,7 @@ ucol_getStrength(const UCollator *coll);
* @see ucol_getStrength
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_setStrength(UCollator *coll,
UCollationStrength strength);
@@ -708,7 +711,7 @@ ucol_setStrength(UCollator *coll,
* @see UColReorderCode
* @stable ICU 4.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getReorderCodes(const UCollator* coll,
int32_t* dest,
int32_t destCapacity,
@@ -753,7 +756,7 @@ ucol_getReorderCodes(const UCollator* coll,
* @see UColReorderCode
* @stable ICU 4.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_setReorderCodes(UCollator* coll,
const int32_t* reorderCodes,
int32_t reorderCodesLength,
@@ -778,7 +781,7 @@ ucol_setReorderCodes(UCollator* coll,
* @see UColReorderCode
* @stable ICU 4.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getEquivalentReorderCodes(int32_t reorderCode,
int32_t* dest,
int32_t destCapacity,
@@ -796,7 +799,7 @@ ucol_getEquivalentReorderCodes(int32_t reorderCode,
* the output was truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getDisplayName( const char *objLoc,
const char *dispLoc,
UChar *result,
@@ -812,7 +815,7 @@ ucol_getDisplayName( const char *objLoc,
* @see ucol_countAvailable
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
ucol_getAvailable(int32_t localeIndex);
/**
@@ -823,7 +826,7 @@ ucol_getAvailable(int32_t localeIndex);
* @see ucol_getAvailable
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_countAvailable(void);
#if !UCONFIG_NO_SERVICE
@@ -835,7 +838,7 @@ ucol_countAvailable(void);
* responsible for closing the result.
* @stable ICU 3.0
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucol_openAvailableLocales(UErrorCode *status);
#endif
@@ -848,7 +851,7 @@ ucol_openAvailableLocales(UErrorCode *status);
* responsible for closing the result.
* @stable ICU 3.0
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucol_getKeywords(UErrorCode *status);
/**
@@ -862,7 +865,7 @@ ucol_getKeywords(UErrorCode *status);
* upon error. The caller is responsible for closing the result.
* @stable ICU 3.0
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucol_getKeywordValues(const char *keyword, UErrorCode *status);
/**
@@ -881,7 +884,7 @@ ucol_getKeywordValues(const char *keyword, UErrorCode *status);
* @return a string enumeration over keyword values for the given key and the locale.
* @stable ICU 4.2
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
ucol_getKeywordValuesForLocale(const char* key,
const char* locale,
UBool commonlyUsed,
@@ -901,7 +904,7 @@ ucol_getKeywordValuesForLocale(const char* key,
* applications who wish to cache collators, or otherwise reuse
* collators when possible. The functional equivalent may change
* over time. For more information, please see the <a
- * href="http://userguide.icu-project.org/locale#TOC-Locales-and-Services">
+ * href="https://unicode-org.github.io/icu/userguide/locale#locales-and-services">
* Locales and Services</a> section of the ICU User Guide.
* @param result fillin for the functionally equivalent result locale
* @param resultCapacity capacity of the fillin buffer
@@ -918,7 +921,7 @@ ucol_getKeywordValuesForLocale(const char* key,
* an error code will be returned.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity,
const char* keyword, const char* locale,
UBool* isAvailable, UErrorCode* status);
@@ -931,7 +934,7 @@ ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity,
* @return The collation tailoring rules.
* @stable ICU 2.0
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ucol_getRules( const UCollator *coll,
int32_t *length);
@@ -942,7 +945,7 @@ ucol_getRules( const UCollator *coll,
* This string will be normalized.
* The structure and the syntax of the string is defined in the "Naming collators"
* section of the users guide:
- * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme
+ * https://unicode-org.github.io/icu/userguide/collation/concepts#collator-naming-scheme
* This API supports preflighting.
* @param coll a collator
* @param locale a locale that will appear as a collators locale in the resulting
@@ -1014,7 +1017,7 @@ ucol_normalizeShortDefinitionString(const char *source,
* @see ucol_keyHashCode
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getSortKey(const UCollator *coll,
const UChar *source,
int32_t sourceLength,
@@ -1042,7 +1045,7 @@ ucol_getSortKey(const UCollator *coll,
* the sort key.
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_nextSortKeyPart(const UCollator *coll,
UCharIterator *iter,
uint32_t state[2],
@@ -1109,7 +1112,7 @@ typedef enum {
* @see ucol_keyHashCode
* @stable ICU 2.1
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getBound(const uint8_t *source,
int32_t sourceLength,
UColBoundMode boundType,
@@ -1126,7 +1129,7 @@ ucol_getBound(const uint8_t *source,
* @param info the version # information, the result will be filled in
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_getVersion(const UCollator* coll, UVersionInfo info);
/**
@@ -1136,7 +1139,7 @@ ucol_getVersion(const UCollator* coll, UVersionInfo info);
* @param info the version # information, the result will be filled in
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_getUCAVersion(const UCollator* coll, UVersionInfo info);
/**
@@ -1155,7 +1158,7 @@ ucol_getUCAVersion(const UCollator* coll, UVersionInfo info);
* Using strings with U+FFFE may yield shorter sort keys.
*
* For details about Sort Key Features see
- * http://userguide.icu-project.org/collation/api#TOC-Sort-Key-Features
+ * https://unicode-org.github.io/icu/userguide/collation/api#sort-key-features
*
* It is possible to merge multiple sort keys by consecutively merging
* another one with the intermediate result.
@@ -1186,7 +1189,7 @@ ucol_getUCAVersion(const UCollator* coll, UVersionInfo info);
* in which cases the contents of dest is undefined
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length,
const uint8_t *src2, int32_t src2Length,
uint8_t *dest, int32_t destCapacity);
@@ -1202,7 +1205,7 @@ ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length,
* @see ucol_getAttribute
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value, UErrorCode *status);
/**
@@ -1216,7 +1219,7 @@ ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value,
* @see ucol_setAttribute
* @stable ICU 2.0
*/
-U_STABLE UColAttributeValue U_EXPORT2
+U_CAPI UColAttributeValue U_EXPORT2
ucol_getAttribute(const UCollator *coll, UColAttribute attr, UErrorCode *status);
/**
@@ -1235,7 +1238,7 @@ ucol_getAttribute(const UCollator *coll, UColAttribute attr, UErrorCode *status)
* @see ucol_getMaxVariable
* @stable ICU 53
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_setMaxVariable(UCollator *coll, UColReorderCode group, UErrorCode *pErrorCode);
/**
@@ -1245,7 +1248,7 @@ ucol_setMaxVariable(UCollator *coll, UColReorderCode group, UErrorCode *pErrorCo
* @see ucol_setMaxVariable
* @stable ICU 53
*/
-U_STABLE UColReorderCode U_EXPORT2
+U_CAPI UColReorderCode U_EXPORT2
ucol_getMaxVariable(const UCollator *coll);
#ifndef U_HIDE_DEPRECATED_API
@@ -1286,7 +1289,7 @@ ucol_setVariableTop(UCollator *coll,
* @see ucol_restoreVariableTop
* @stable ICU 2.0
*/
-U_STABLE uint32_t U_EXPORT2 ucol_getVariableTop(const UCollator *coll, UErrorCode *status);
+U_CAPI uint32_t U_EXPORT2 ucol_getVariableTop(const UCollator *coll, UErrorCode *status);
#ifndef U_HIDE_DEPRECATED_API
/**
@@ -1330,7 +1333,7 @@ ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *stat
* @see ucol_close
* @stable ICU 2.0
*/
-U_STABLE UCollator* U_EXPORT2
+U_CAPI UCollator* U_EXPORT2
ucol_safeClone(const UCollator *coll,
void *stackBuffer,
int32_t *pBufferSize,
@@ -1351,7 +1354,7 @@ ucol_safeClone(const UCollator *coll,
* to store rules, will store up to available space.
*
* ucol_getRules() should normally be used instead.
- * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales
+ * See https://unicode-org.github.io/icu/userguide/collation/customization#building-on-existing-locales
* @param coll collator to get the rules from
* @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES.
* @param buffer buffer to store the result in. If NULL, you'll get no rules.
@@ -1360,7 +1363,7 @@ ucol_safeClone(const UCollator *coll,
* @stable ICU 2.0
* @see UCOL_FULL_RULES
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int32_t bufferLen);
#ifndef U_HIDE_DEPRECATED_API
@@ -1396,7 +1399,7 @@ ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *statu
* NULL.
* @stable ICU 2.8
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status);
/**
@@ -1409,7 +1412,7 @@ ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode
* @see uset_close
* @stable ICU 2.4
*/
-U_STABLE USet * U_EXPORT2
+U_CAPI USet * U_EXPORT2
ucol_getTailoredSet(const UCollator *coll, UErrorCode *status);
#ifndef U_HIDE_INTERNAL_API
@@ -1424,7 +1427,7 @@ ucol_getTailoredSet(const UCollator *coll, UErrorCode *status);
* @return number of elements in the set
* @internal ICU 3.0
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getUnsafeSet( const UCollator *coll,
USet *unsafe,
UErrorCode *status);
@@ -1436,12 +1439,12 @@ ucol_getUnsafeSet( const UCollator *coll,
* state for a locale.
* @param parseError if not NULL, structure that will get filled with error's pre
* and post context in case of error.
- * @param forceDefaults if FALSE, the settings that are the same as the collator
+ * @param forceDefaults if false, the settings that are the same as the collator
* default settings will not be applied (for example, setting
* French secondary on a French collator would not be executed).
- * If TRUE, all the settings will be applied regardless of the
+ * If true, all the settings will be applied regardless of the
* collator default value. If the definition
- * strings are to be cached, should be set to FALSE.
+ * strings are to be cached, should be set to false.
* @param status Error code. Apart from regular error conditions connected to
* instantiating collators (like out of memory or similar), this
* API will return an error if an invalid attribute or attribute/value
@@ -1449,7 +1452,7 @@ ucol_getUnsafeSet( const UCollator *coll,
* @see ucol_openFromShortString
* @internal ICU 3.2.1
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_prepareShortStringOpen( const char *definition,
UBool forceDefaults,
UParseError *parseError,
@@ -1467,7 +1470,7 @@ ucol_prepareShortStringOpen( const char *definition,
* @see ucol_openBinary
* @stable ICU 3.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_cloneBinary(const UCollator *coll,
uint8_t *buffer, int32_t capacity,
UErrorCode *status);
@@ -1489,7 +1492,7 @@ ucol_cloneBinary(const UCollator *coll,
* @see ucol_cloneBinary
* @stable ICU 3.2
*/
-U_STABLE UCollator* U_EXPORT2
+U_CAPI UCollator* U_EXPORT2
ucol_openBinary(const uint8_t *bin, int32_t length,
const UCollator *base,
UErrorCode *status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
index 85ec8383d7c..d50003622a2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
@@ -23,7 +23,7 @@
#if !UCONFIG_NO_COLLATION
/**
- * This indicates an error has occured during processing or if no more CEs is
+ * This indicates an error has occurred during processing or if no more CEs is
* to be returned.
* @stable ICU 2.0
*/
@@ -66,14 +66,14 @@ typedef struct UCollationElements UCollationElements;
* . UCollationElements *c;
* . UCollatorOld *coll;
* . UErrorCode success = U_ZERO_ERROR;
- * . s=(UChar*)malloc(sizeof(UChar) * (strlen("This is a test")+1) );
- * . u_uastrcpy(s, "This is a test");
+ * . str=(UChar*)malloc(sizeof(UChar) * (strlen("This is a test")+1) );
+ * . u_uastrcpy(str, "This is a test");
* . coll = ucol_open(NULL, &success);
* . c = ucol_openElements(coll, str, u_strlen(str), &status);
* . order = ucol_next(c, &success);
* . ucol_reset(c);
* . order = ucol_prev(c, &success);
- * . free(s);
+ * . free(str);
* . ucol_close(coll);
* . ucol_closeElements(c);
* . }
@@ -102,6 +102,10 @@ typedef struct UCollationElements UCollationElements;
/**
* Open the collation elements for a string.
*
+ * The UCollationElements retains a pointer to the supplied text.
+ * The caller must not modify or delete the text while the UCollationElements
+ * object is used to iterate over this text.
+ *
* @param coll The collator containing the desired collation rules.
* @param text The text to iterate over.
* @param textLength The number of characters in text, or -1 if null-terminated
@@ -109,13 +113,12 @@ typedef struct UCollationElements UCollationElements;
* @return a struct containing collation element information
* @stable ICU 2.0
*/
-U_STABLE UCollationElements* U_EXPORT2
+U_CAPI UCollationElements* U_EXPORT2
ucol_openElements(const UCollator *coll,
const UChar *text,
int32_t textLength,
UErrorCode *status);
-
/**
* get a hash code for a key... Not very useful!
* @param key the given key.
@@ -123,7 +126,7 @@ ucol_openElements(const UCollator *coll,
* @return the hash code.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_keyHashCode(const uint8_t* key, int32_t length);
/**
@@ -132,7 +135,7 @@ ucol_keyHashCode(const uint8_t* key, int32_t length);
* @param elems The UCollationElements to close.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_closeElements(UCollationElements *elems);
/**
@@ -144,7 +147,7 @@ ucol_closeElements(UCollationElements *elems);
* @see ucol_previous
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_reset(UCollationElements *elems);
/**
@@ -153,10 +156,10 @@ ucol_reset(UCollationElements *elems);
* @param elems The UCollationElements containing the text.
* @param status A pointer to a UErrorCode to receive any errors.
* @return The next collation elements ordering, otherwise returns UCOL_NULLORDER
- * if an error has occured or if the end of string has been reached
+ * if an error has occurred or if the end of string has been reached
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_next(UCollationElements *elems, UErrorCode *status);
/**
@@ -168,11 +171,11 @@ ucol_next(UCollationElements *elems, UErrorCode *status);
* a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
* buffer has been exhausted.
* @return The previous collation elements ordering, otherwise returns
- * UCOL_NULLORDER if an error has occured or if the start of string has
+ * UCOL_NULLORDER if an error has occurred or if the start of string has
* been reached.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_previous(UCollationElements *elems, UErrorCode *status);
/**
@@ -186,7 +189,7 @@ ucol_previous(UCollationElements *elems, UErrorCode *status);
* expansion sequence
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getMaxExpansion(const UCollationElements *elems, int32_t order);
/**
@@ -194,6 +197,11 @@ ucol_getMaxExpansion(const UCollationElements *elems, int32_t order);
* Property settings for collation will remain the same.
* In order to reset the iterator to the current collation property settings,
* the API reset() has to be called.
+ *
+ * The UCollationElements retains a pointer to the supplied text.
+ * The caller must not modify or delete the text while the UCollationElements
+ * object is used to iterate over this text.
+ *
* @param elems The UCollationElements to set.
* @param text The source text containing the collation elements.
* @param textLength The length of text, or -1 if null-terminated.
@@ -201,8 +209,8 @@ ucol_getMaxExpansion(const UCollationElements *elems, int32_t order);
* @see ucol_getText
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
-ucol_setText( UCollationElements *elems,
+U_CAPI void U_EXPORT2
+ucol_setText( UCollationElements *elems,
const UChar *text,
int32_t textLength,
UErrorCode *status);
@@ -216,7 +224,7 @@ ucol_setText( UCollationElements *elems,
* @see ucol_setOffset
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getOffset(const UCollationElements *elems);
/**
@@ -231,9 +239,9 @@ ucol_getOffset(const UCollationElements *elems);
* @see ucol_getOffset
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucol_setOffset(UCollationElements *elems,
- int32_t offset,
+ int32_t offset,
UErrorCode *status);
/**
@@ -242,7 +250,7 @@ ucol_setOffset(UCollationElements *elems,
* @return the primary order of a collation order.
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_primaryOrder (int32_t order);
/**
@@ -251,7 +259,7 @@ ucol_primaryOrder (int32_t order);
* @return the secondary order of a collation order.
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_secondaryOrder (int32_t order);
/**
@@ -260,7 +268,7 @@ ucol_secondaryOrder (int32_t order);
* @return the tertiary order of a collation order.
* @stable ICU 2.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_tertiaryOrder (int32_t order);
#endif /* #if !UCONFIG_NO_COLLATION */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h
index 52ed5ad0ee2..8c62fde9d2e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h
@@ -25,9 +25,12 @@
#if !UCONFIG_NO_CONVERSION
-#include "unicode/localpointer.h"
#include "unicode/uenum.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: Charset Detection API
@@ -75,7 +78,7 @@ typedef struct UCharsetMatch UCharsetMatch;
* @return the newly opened charset detector.
* @stable ICU 3.6
*/
-U_STABLE UCharsetDetector * U_EXPORT2
+U_CAPI UCharsetDetector * U_EXPORT2
ucsdet_open(UErrorCode *status);
/**
@@ -87,7 +90,7 @@ ucsdet_open(UErrorCode *status);
* @param ucsd The charset detector to be closed.
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucsdet_close(UCharsetDetector *ucsd);
#if U_SHOW_CPLUSPLUS_API
@@ -124,7 +127,7 @@ U_NAMESPACE_END
*
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status);
@@ -146,7 +149,7 @@ ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCo
*
* @stable ICU 3.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status);
@@ -175,7 +178,7 @@ ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t
*
* @stable ICU 3.6
*/
-U_STABLE const UCharsetMatch * U_EXPORT2
+U_CAPI const UCharsetMatch * U_EXPORT2
ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status);
@@ -209,7 +212,7 @@ ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status);
* the detector is closed or modified.
* @stable ICU 3.6
*/
-U_STABLE const UCharsetMatch ** U_EXPORT2
+U_CAPI const UCharsetMatch ** U_EXPORT2
ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *status);
@@ -229,7 +232,7 @@ ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *stat
*
* @stable ICU 3.6
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status);
/**
@@ -255,7 +258,7 @@ ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status);
*
* @stable ICU 3.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status);
/**
@@ -287,7 +290,7 @@ ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status);
*
* @stable ICU 3.6
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status);
@@ -313,7 +316,7 @@ ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status);
*
* @stable ICU 3.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucsdet_getUChars(const UCharsetMatch *ucsm,
UChar *buf, int32_t cap, UErrorCode *status);
@@ -347,7 +350,7 @@ ucsdet_getUChars(const UCharsetMatch *ucsm,
* @return an iterator providing access to the detectable charset names.
* @stable ICU 3.6
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status);
/**
@@ -357,11 +360,11 @@ ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *statu
* heuristics.
*
* @param ucsd The charset detector to check.
- * @return TRUE if filtering is enabled.
+ * @return true if filtering is enabled.
* @stable ICU 3.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd);
@@ -376,7 +379,7 @@ ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd);
*
* @stable ICU 3.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter);
#ifndef U_HIDE_INTERNAL_API
@@ -393,7 +396,7 @@ ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter);
* the specified charset detector.
* @internal
*/
-U_INTERNAL UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status);
/**
@@ -403,13 +406,13 @@ ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status);
*
* @param ucsd a Charset detector.
* @param encoding encoding the name of charset encoding.
- * @param enabled <code>TRUE</code> to enable, or <code>FALSE</code> to disable the
+ * @param enabled <code>true</code> to enable, or <code>false</code> to disable the
* charset encoding.
* @param status receives the return status. When the name of charset encoding
* is not supported, U_ILLEGAL_ARGUMENT_ERROR is set.
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
ucsdet_setDetectableCharset(UCharsetDetector *ucsd, const char *encoding, UBool enabled, UErrorCode *status);
#endif /* U_HIDE_INTERNAL_API */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
index bdbd080c005..ec25eba8085 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
@@ -14,11 +14,15 @@
#if !UCONFIG_NO_FORMATTING
-#include "unicode/localpointer.h"
#include "unicode/ucal.h"
#include "unicode/unum.h"
#include "unicode/udisplaycontext.h"
#include "unicode/ufieldpositer.h"
+
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: DateFormat
@@ -142,7 +146,7 @@
* the date and time formatting algorithm and pattern letters defined by
* <a href="http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table">UTS#35
* Unicode Locale Data Markup Language (LDML)</a> and further documented for ICU in the
- * <a href="https://sites.google.com/site/icuprojectuserguide/formatparse/datetime?pli=1#TOC-Date-Field-Symbol-Table">ICU
+ * <a href="https://unicode-org.github.io/icu/userguide/format_parse/datetime#date-field-symbol-table">ICU
* User Guide</a>.</p>
*/
@@ -832,10 +836,24 @@ typedef enum UDateFormatField {
/**
* Maps from a UDateFormatField to the corresponding UCalendarDateFields.
- * Note: since the mapping is many-to-one, there is no inverse mapping.
+ *
+ * Note 1: Since the mapping is many-to-one, there is no inverse mapping.
+ *
+ * Note 2: There is no UErrorCode parameter, so in case of error (UDateFormatField is
+ * unknown or has no corresponding UCalendarDateFields value), the function returns the
+ * current value of UCAL_FIELD_COUNT. However, that value may change from release to
+ * release and is consequently deprecated. For a future-proof runtime way of checking
+ * for errors:
+ * a) First save the value returned by the function when it is passed an invalid value
+ * such as "(UDateFormatField)-1".
+ * b) Then, to test for errors when passing some other UDateFormatField value, check
+ * whether the function returns that saved value.
+ *
* @param field the UDateFormatField.
- * @return the UCalendarDateField. This will be UCAL_FIELD_COUNT in case
- * of error (e.g., the input field is UDAT_FIELD_COUNT).
+ * @return the UCalendarDateField. In case of error (UDateFormatField is unknown or has
+ * no corresponding UCalendarDateFields value) this will be the current value of
+ * UCAL_FIELD_COUNT, but that value may change from release to release.
+ * See Note 2 above.
* @stable ICU 4.4
*/
U_CAPI UCalendarDateFields U_EXPORT2
@@ -958,7 +976,37 @@ udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute att
U_CAPI void U_EXPORT2
udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Hour Cycle.
+ * @draft ICU 67
+ */
+typedef enum UDateFormatHourCycle {
+ /**
+ * Hour in am/pm (0~11)
+ * @draft ICU 67
+ */
+ UDAT_HOUR_CYCLE_11,
+
+ /**
+ * Hour in am/pm (1~12)
+ * @draft ICU 67
+ */
+ UDAT_HOUR_CYCLE_12,
+
+ /**
+ * Hour in day (0~23)
+ * @draft ICU 67
+ */
+ UDAT_HOUR_CYCLE_23,
+ /**
+ * Hour in day (1~24)
+ * @draft ICU 67
+ */
+ UDAT_HOUR_CYCLE_24
+} UDateFormatHourCycle;
+#endif /* U_HIDE_DRAFT_API */
#if U_SHOW_CPLUSPLUS_API
@@ -1187,7 +1235,7 @@ udat_parseCalendar(const UDateFormat* format,
* With lenient parsing, the parser may use heuristics to interpret inputs that do not
* precisely match the pattern. With strict parsing, inputs must match the pattern.
* @param fmt The formatter to query
-* @return TRUE if fmt is set to perform lenient parsing, FALSE otherwise.
+* @return true if fmt is set to perform lenient parsing, false otherwise.
* @see udat_setLenient
* @stable ICU 2.0
*/
@@ -1199,7 +1247,7 @@ udat_isLenient(const UDateFormat* fmt);
* With lenient parsing, the parser may use heuristics to interpret inputs that do not
* precisely match the pattern. With strict parsing, inputs must match the pattern.
* @param fmt The formatter to set
-* @param isLenient TRUE if fmt should perform lenient parsing, FALSE otherwise.
+* @param isLenient true if fmt should perform lenient parsing, false otherwise.
* @see dat_isLenient
* @stable ICU 2.0
*/
@@ -1359,7 +1407,7 @@ udat_set2DigitYearStart( UDateFormat *fmt,
* Extract the pattern from a UDateFormat.
* The pattern will follow the pattern syntax rules.
* @param fmt The formatter to query.
-* @param localized TRUE if the pattern should be localized, FALSE otherwise.
+* @param localized true if the pattern should be localized, false otherwise.
* @param result A pointer to a buffer to receive the pattern.
* @param resultLength The maximum size of result.
* @param status A pointer to an UErrorCode to receive any errors
@@ -1378,7 +1426,7 @@ udat_toPattern( const UDateFormat *fmt,
* Set the pattern used by an UDateFormat.
* The pattern should follow the pattern syntax rules.
* @param format The formatter to set.
-* @param localized TRUE if the pattern is localized, FALSE otherwise.
+* @param localized true if the pattern is localized, false otherwise.
* @param pattern The new pattern
* @param patternLength The length of pattern, or -1 if null-terminated.
* @see udat_toPattern
@@ -1606,7 +1654,7 @@ udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* st
* @see udat_applyPatternRelative
* @internal ICU 4.2 technology preview
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udat_toPatternRelativeDate(const UDateFormat *fmt,
UChar *result,
int32_t resultLength,
@@ -1623,7 +1671,7 @@ udat_toPatternRelativeDate(const UDateFormat *fmt,
* @see udat_applyPatternRelative
* @internal ICU 4.2 technology preview
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udat_toPatternRelativeTime(const UDateFormat *fmt,
UChar *result,
int32_t resultLength,
@@ -1641,7 +1689,7 @@ udat_toPatternRelativeTime(const UDateFormat *fmt,
* @see udat_toPatternRelativeDate, udat_toPatternRelativeTime
* @internal ICU 4.2 technology preview
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
udat_applyPatternRelative(UDateFormat *format,
const UChar *datePattern,
int32_t datePatternLength,
@@ -1666,14 +1714,14 @@ typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle
* Register a provider factory
* @internal ICU 49
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
/**
* Un-Register a provider factory
* @internal ICU 49
*/
-U_INTERNAL UDateFormatOpener U_EXPORT2
+U_CAPI UDateFormatOpener U_EXPORT2
udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
#endif /* U_HIDE_INTERNAL_API */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
index b42223a5db3..b100ea6d84f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
@@ -14,9 +14,14 @@
#if !UCONFIG_NO_FORMATTING
+#include "unicode/ucal.h"
#include "unicode/umisc.h"
-#include "unicode/localpointer.h"
#include "unicode/uformattedvalue.h"
+#include "unicode/udisplaycontext.h"
+
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -82,14 +87,12 @@
struct UDateIntervalFormat;
typedef struct UDateIntervalFormat UDateIntervalFormat; /**< C typedef for struct UDateIntervalFormat. @stable ICU 4.8 */
-#ifndef U_HIDE_DRAFT_API
struct UFormattedDateInterval;
/**
* Opaque struct to contain the results of a UDateIntervalFormat operation.
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef struct UFormattedDateInterval UFormattedDateInterval;
-#endif /* U_HIDE_DRAFT_API */
/**
* Open a new UDateIntervalFormat object using the predefined rules for a
@@ -115,7 +118,7 @@ typedef struct UFormattedDateInterval UFormattedDateInterval;
* or NULL if an error occurred.
* @stable ICU 4.8
*/
-U_STABLE UDateIntervalFormat* U_EXPORT2
+U_CAPI UDateIntervalFormat* U_EXPORT2
udtitvfmt_open(const char* locale,
const UChar* skeleton,
int32_t skeletonLength,
@@ -129,11 +132,9 @@ udtitvfmt_open(const char* locale,
* The UDateIntervalFormat object to close.
* @stable ICU 4.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udtitvfmt_close(UDateIntervalFormat *formatter);
-
-#ifndef U_HIDE_DRAFT_API
/**
* Creates an object to hold the result of a UDateIntervalFormat
* operation. The object can be used repeatedly; it is cleared whenever
@@ -141,7 +142,7 @@ udtitvfmt_close(UDateIntervalFormat *formatter);
*
* @param ec Set if an error occurs.
* @return A pointer needing ownership.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI UFormattedDateInterval* U_EXPORT2
udtitvfmt_openResult(UErrorCode* ec);
@@ -166,7 +167,7 @@ udtitvfmt_openResult(UErrorCode* ec);
* @param uresult The object containing the formatted string.
* @param ec Set if an error occurs.
* @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI const UFormattedValue* U_EXPORT2
udtitvfmt_resultAsValue(const UFormattedDateInterval* uresult, UErrorCode* ec);
@@ -175,11 +176,10 @@ udtitvfmt_resultAsValue(const UFormattedDateInterval* uresult, UErrorCode* ec);
* Releases the UFormattedDateInterval created by udtitvfmt_openResult().
*
* @param uresult The object to release.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI void U_EXPORT2
udtitvfmt_closeResult(UFormattedDateInterval* uresult);
-#endif /* U_HIDE_DRAFT_API */
#if U_SHOW_CPLUSPLUS_API
@@ -197,7 +197,6 @@ U_NAMESPACE_BEGIN
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateIntervalFormatPointer, UDateIntervalFormat, udtitvfmt_close);
-#ifndef U_HIDE_DRAFT_API
/**
* \class LocalUFormattedDateIntervalPointer
* "Smart pointer" class, closes a UFormattedDateInterval via udtitvfmt_close().
@@ -205,10 +204,9 @@ U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateIntervalFormatPointer, UDateIntervalFormat
*
* @see LocalPointerBase
* @see LocalPointer
- * @draft ICU 64
+ * @stable ICU 64
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedDateIntervalPointer, UFormattedDateInterval, udtitvfmt_closeResult);
-#endif /* U_HIDE_DRAFT_API */
U_NAMESPACE_END
@@ -244,7 +242,7 @@ U_NAMESPACE_END
* output was truncated.
* @stable ICU 4.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udtitvfmt_format(const UDateIntervalFormat* formatter,
UDate fromDate,
UDate toDate,
@@ -260,26 +258,79 @@ udtitvfmt_format(const UDateIntervalFormat* formatter,
* UDateIntervalFormat object.
* @param formatter
* The UDateIntervalFormat object specifying the format conventions.
- * @param result
- * The UFormattedDateInterval to contain the result of the
- * formatting operation.
* @param fromDate
* The starting point of the range.
* @param toDate
* The ending point of the range.
+ * @param result
+ * The UFormattedDateInterval to contain the result of the
+ * formatting operation.
* @param status
* A pointer to a UErrorCode to receive any errors.
- * @draft ICU 64
+ * @draft ICU 67
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
udtitvfmt_formatToResult(
const UDateIntervalFormat* formatter,
- UFormattedDateInterval* result,
UDate fromDate,
UDate toDate,
+ UFormattedDateInterval* result,
+ UErrorCode* status);
+
+/**
+ * Formats a date/time range using the conventions established for the
+ * UDateIntervalFormat object.
+ * @param formatter
+ * The UDateIntervalFormat object specifying the format conventions.
+ * @param fromCalendar
+ * The starting point of the range.
+ * @param toCalendar
+ * The ending point of the range.
+ * @param result
+ * The UFormattedDateInterval to contain the result of the
+ * formatting operation.
+ * @param status
+ * A pointer to a UErrorCode to receive any errors.
+ * @draft ICU 67
+ */
+
+U_CAPI void U_EXPORT2
+udtitvfmt_formatCalendarToResult(
+ const UDateIntervalFormat* formatter,
+ UCalendar* fromCalendar,
+ UCalendar* toCalendar,
+ UFormattedDateInterval* result,
UErrorCode* status);
#endif /* U_HIDE_DRAFT_API */
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Set a particular UDisplayContext value in the formatter, such as
+ * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted
+ * result to be capitalized appropriately for the context in which
+ * it is intended to be used, considering both the locale and the
+ * type of field at the beginning of the formatted result.
+ * @param formatter The formatter for which to set a UDisplayContext value.
+ * @param value The UDisplayContext value to set.
+ * @param status A pointer to an UErrorCode to receive any errors
+ * @draft ICU 68
+ */
+U_CAPI void U_EXPORT2
+udtitvfmt_setContext(UDateIntervalFormat* formatter, UDisplayContext value, UErrorCode* status);
+
+/**
+ * Get the formatter's UDisplayContext value for the specified UDisplayContextType,
+ * such as UDISPCTX_TYPE_CAPITALIZATION.
+ * @param formatter The formatter to query.
+ * @param type The UDisplayContextType whose value to return
+ * @param status A pointer to an UErrorCode to receive any errors
+ * @return The UDisplayContextValue for the specified type.
+ * @draft ICU 68
+ */
+U_CAPI UDisplayContext U_EXPORT2
+udtitvfmt_getContext(const UDateIntervalFormat* formatter, UDisplayContextType type, UErrorCode* status);
+
+#endif /* U_HIDE_DRAFT_API */
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
index 7f28b5a3197..5e44cd8985d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
@@ -20,8 +20,12 @@
#define __UDATPG_H__
#include "unicode/utypes.h"
+#include "unicode/udat.h"
#include "unicode/uenum.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -160,7 +164,7 @@ typedef enum UDateTimePatternConflict {
* @return a pointer to UDateTimePatternGenerator.
* @stable ICU 3.8
*/
-U_STABLE UDateTimePatternGenerator * U_EXPORT2
+U_CAPI UDateTimePatternGenerator * U_EXPORT2
udatpg_open(const char *locale, UErrorCode *pErrorCode);
/**
@@ -170,7 +174,7 @@ udatpg_open(const char *locale, UErrorCode *pErrorCode);
* @return a pointer to UDateTimePatternGenerator.
* @stable ICU 3.8
*/
-U_STABLE UDateTimePatternGenerator * U_EXPORT2
+U_CAPI UDateTimePatternGenerator * U_EXPORT2
udatpg_openEmpty(UErrorCode *pErrorCode);
/**
@@ -178,7 +182,7 @@ udatpg_openEmpty(UErrorCode *pErrorCode);
* @param dtpg a pointer to UDateTimePatternGenerator.
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udatpg_close(UDateTimePatternGenerator *dtpg);
#if U_SHOW_CPLUSPLUS_API
@@ -208,7 +212,7 @@ U_NAMESPACE_END
* @return a pointer to a new UDateTimePatternGenerator.
* @stable ICU 3.8
*/
-U_STABLE UDateTimePatternGenerator * U_EXPORT2
+U_CAPI UDateTimePatternGenerator * U_EXPORT2
udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
/**
@@ -234,7 +238,7 @@ udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
* @return the length of bestPattern.
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
const UChar *skeleton, int32_t length,
UChar *bestPattern, int32_t capacity,
@@ -270,7 +274,7 @@ udatpg_getBestPattern(UDateTimePatternGenerator *dtpg,
* @return the length of bestPattern.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
const UChar *skeleton, int32_t length,
UDateTimePatternMatchOptions options,
@@ -298,7 +302,7 @@ udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg,
* @return the length of skeleton.
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_getSkeleton(UDateTimePatternGenerator *unusedDtpg,
const UChar *pattern, int32_t length,
UChar *skeleton, int32_t capacity,
@@ -328,7 +332,7 @@ udatpg_getSkeleton(UDateTimePatternGenerator *unusedDtpg,
* @return the length of baseSkeleton.
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg,
const UChar *pattern, int32_t length,
UChar *baseSkeleton, int32_t capacity,
@@ -358,7 +362,7 @@ udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg,
* UDATPG_BASE_CONFLICT or UDATPG_CONFLICT.
* @stable ICU 3.8
*/
-U_STABLE UDateTimePatternConflict U_EXPORT2
+U_CAPI UDateTimePatternConflict U_EXPORT2
udatpg_addPattern(UDateTimePatternGenerator *dtpg,
const UChar *pattern, int32_t patternLength,
UBool override,
@@ -385,7 +389,7 @@ udatpg_addPattern(UDateTimePatternGenerator *dtpg,
* @param length the length of value.
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
UDateTimePatternField field,
const UChar *value, int32_t length);
@@ -400,7 +404,7 @@ udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg,
* @return appendItemFormat for field.
* @stable ICU 3.8
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
UDateTimePatternField field,
int32_t *pLength);
@@ -418,7 +422,7 @@ udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg,
* @param length the length of value.
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
UDateTimePatternField field,
const UChar *value, int32_t length);
@@ -435,7 +439,7 @@ udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg,
* @see udatpg_getFieldDisplayName
* @stable ICU 3.8
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
UDateTimePatternField field,
int32_t *pLength);
@@ -465,7 +469,7 @@ udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg,
* truncated result.
* @stable ICU 61
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_getFieldDisplayName(const UDateTimePatternGenerator *dtpg,
UDateTimePatternField field,
UDateTimePGDisplayWidth width,
@@ -495,7 +499,7 @@ udatpg_getFieldDisplayName(const UDateTimePatternGenerator *dtpg,
* @param length the length of dtFormat.
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
const UChar *dtFormat, int32_t length);
@@ -506,7 +510,7 @@ udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg,
* @return dateTimeFormat.
* @stable ICU 3.8
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
int32_t *pLength);
@@ -523,7 +527,7 @@ udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg,
* @param length the length of decimal.
* @stable ICU 3.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
udatpg_setDecimal(UDateTimePatternGenerator *dtpg,
const UChar *decimal, int32_t length);
@@ -535,7 +539,7 @@ udatpg_setDecimal(UDateTimePatternGenerator *dtpg,
* @return corresponding to the decimal point.
* @stable ICU 3.8
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
udatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
int32_t *pLength);
@@ -564,7 +568,7 @@ udatpg_getDecimal(const UDateTimePatternGenerator *dtpg,
* @return the length of dest.
* @stable ICU 3.8
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
const UChar *pattern, int32_t patternLength,
const UChar *skeleton, int32_t skeletonLength,
@@ -601,7 +605,7 @@ udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg,
* @return the length of dest.
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg,
const UChar *pattern, int32_t patternLength,
const UChar *skeleton, int32_t skeletonLength,
@@ -620,7 +624,7 @@ udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg,
* The caller must close the object.
* @stable ICU 3.8
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
/**
@@ -633,7 +637,7 @@ udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCo
* The caller must close the object.
* @stable ICU 3.8
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode);
/**
@@ -646,9 +650,31 @@ udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErr
* @return pattern corresponding to a given skeleton.
* @stable ICU 3.8
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
const UChar *skeleton, int32_t skeletonLength,
int32_t *pLength);
+#if !UCONFIG_NO_FORMATTING
+
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Return the default hour cycle for a locale. Uses the locale that the
+ * UDateTimePatternGenerator was initially created with.
+ *
+ * Cannot be used on an empty UDateTimePatternGenerator instance.
+ *
+ * @param dtpg a pointer to UDateTimePatternGenerator.
+ * @param pErrorCode a pointer to the UErrorCode which must not indicate a
+ * failure before the function call. Set to U_UNSUPPORTED_ERROR
+ * if used on an empty instance.
+ * @return the default hour cycle.
+ * @draft ICU 67
+ */
+U_CAPI UDateFormatHourCycle U_EXPORT2
+udatpg_getDefaultHourCycle(const UDateTimePatternGenerator *dtpg, UErrorCode* pErrorCode);
+#endif /* U_HIDE_DRAFT_API */
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h
index 3ae73b6d843..83df184f0a5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h
@@ -14,7 +14,9 @@
#if !UCONFIG_NO_FORMATTING
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -52,7 +54,7 @@ typedef struct UFieldPositionIterator UFieldPositionIterator; /**< C typedef fo
* or NULL if an error occurred.
* @stable ICU 55
*/
-U_STABLE UFieldPositionIterator* U_EXPORT2
+U_CAPI UFieldPositionIterator* U_EXPORT2
ufieldpositer_open(UErrorCode* status);
/**
@@ -61,7 +63,7 @@ ufieldpositer_open(UErrorCode* status);
* A pointer to the UFieldPositionIterator object to close.
* @stable ICU 55
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ufieldpositer_close(UFieldPositionIterator *fpositer);
@@ -112,7 +114,7 @@ U_NAMESPACE_END
*
* @stable ICU 55
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ufieldpositer_next(UFieldPositionIterator *fpositer,
int32_t *beginIndex, int32_t *endIndex);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
index 9ba2a36901a..6b8bee1f3df 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
@@ -34,7 +34,9 @@
#if !UCONFIG_NO_FORMATTING
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* Enum designating the type of a UFormattable instance.
@@ -79,7 +81,7 @@ typedef void *UFormattable;
* @see ufmt_close
* @see icu::Formattable::Formattable()
*/
-U_STABLE UFormattable* U_EXPORT2
+U_CAPI UFormattable* U_EXPORT2
ufmt_open(UErrorCode* status);
/**
@@ -88,7 +90,7 @@ ufmt_open(UErrorCode* status);
* @stable ICU 52
* @see ufmt_open
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ufmt_close(UFormattable* fmt);
#if U_SHOW_CPLUSPLUS_API
@@ -120,7 +122,7 @@ U_NAMESPACE_END
* @see icu::Formattable::getType() const
* @stable ICU 52
*/
-U_STABLE UFormattableType U_EXPORT2
+U_CAPI UFormattableType U_EXPORT2
ufmt_getType(const UFormattable* fmt, UErrorCode *status);
/**
@@ -131,7 +133,7 @@ ufmt_getType(const UFormattable* fmt, UErrorCode *status);
* @see icu::Formattable::isNumeric() const
* @stable ICU 52
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ufmt_isNumeric(const UFormattable* fmt);
/**
@@ -144,7 +146,7 @@ ufmt_isNumeric(const UFormattable* fmt);
* @stable ICU 52
* @see icu::Formattable::getDate(UErrorCode&) const
*/
-U_STABLE UDate U_EXPORT2
+U_CAPI UDate U_EXPORT2
ufmt_getDate(const UFormattable* fmt, UErrorCode *status);
/**
@@ -162,7 +164,7 @@ ufmt_getDate(const UFormattable* fmt, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getDouble(UErrorCode&) const
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
ufmt_getDouble(UFormattable* fmt, UErrorCode *status);
/**
@@ -183,7 +185,7 @@ ufmt_getDouble(UFormattable* fmt, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getLong(UErrorCode&) const
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ufmt_getLong(UFormattable* fmt, UErrorCode *status);
@@ -204,7 +206,7 @@ ufmt_getLong(UFormattable* fmt, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getInt64(UErrorCode&) const
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
ufmt_getInt64(UFormattable* fmt, UErrorCode *status);
/**
@@ -217,7 +219,7 @@ ufmt_getInt64(UFormattable* fmt, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getObject() const
*/
-U_STABLE const void *U_EXPORT2
+U_CAPI const void *U_EXPORT2
ufmt_getObject(const UFormattable* fmt, UErrorCode *status);
/**
@@ -232,7 +234,7 @@ ufmt_getObject(const UFormattable* fmt, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getString(UnicodeString&)const
*/
-U_STABLE const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ufmt_getUChars(UFormattable* fmt, int32_t *len, UErrorCode *status);
/**
@@ -243,7 +245,7 @@ ufmt_getUChars(UFormattable* fmt, int32_t *len, UErrorCode *status);
* @stable ICU 52
* @see ufmt_getArrayItemByIndex
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ufmt_getArrayLength(const UFormattable* fmt, UErrorCode *status);
/**
@@ -255,7 +257,7 @@ ufmt_getArrayLength(const UFormattable* fmt, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getArray(int32_t&, UErrorCode&) const
*/
-U_STABLE UFormattable * U_EXPORT2
+U_CAPI UFormattable * U_EXPORT2
ufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status);
/**
@@ -280,7 +282,7 @@ ufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status);
* @stable ICU 52
* @see icu::Formattable::getDecimalNumber(UErrorCode&)
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
ufmt_getDecNumChars(UFormattable *fmt, int32_t *len, UErrorCode *status);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h
index 0b289e3b455..c358629c051 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h
@@ -10,8 +10,6 @@
#include "unicode/ufieldpositer.h"
-#ifndef U_HIDE_DRAFT_API
-
/**
* \file
* \brief C API: Abstract operations for localized strings.
@@ -31,41 +29,41 @@
* categories 2^28 and higher or below zero (with the highest bit turned on)
* are private-use and will not be used by ICU in the future.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef enum UFieldCategory {
/**
* For an undefined field category.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_UNDEFINED = 0,
/**
* For fields in UDateFormatField (udat.h), from ICU 3.0.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_DATE,
/**
* For fields in UNumberFormatFields (unum.h), from ICU 49.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_NUMBER,
/**
* For fields in UListFormatterField (ulistformatter.h), from ICU 63.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_LIST,
/**
* For fields in URelativeDateTimeFormatterField (ureldatefmt.h), from ICU 64.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_RELATIVE_DATETIME,
@@ -84,14 +82,14 @@ typedef enum UFieldCategory {
/**
* Category for spans in a list.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_LIST_SPAN = 0x1000 + UFIELD_CATEGORY_LIST,
/**
* Category for spans in a date interval.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UFIELD_CATEGORY_DATE_INTERVAL_SPAN = 0x1000 + UFIELD_CATEGORY_DATE_INTERVAL,
@@ -108,7 +106,7 @@ struct UConstrainedFieldPosition;
* 2. It allows you to set constraints to use when iterating over field positions.
* 3. It is used for the newer FormattedValue APIs.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef struct UConstrainedFieldPosition UConstrainedFieldPosition;
@@ -120,9 +118,9 @@ typedef struct UConstrainedFieldPosition UConstrainedFieldPosition;
*
* @param ec Set if an error occurs.
* @return The new object, or NULL if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT UConstrainedFieldPosition* U_EXPORT2
+U_CAPI UConstrainedFieldPosition* U_EXPORT2
ucfpos_open(UErrorCode* ec);
@@ -133,9 +131,9 @@ ucfpos_open(UErrorCode* ec);
*
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_reset(
UConstrainedFieldPosition* ucfpos,
UErrorCode* ec);
@@ -145,9 +143,9 @@ ucfpos_reset(
* Destroys a UConstrainedFieldPosition and releases its memory.
*
* @param ucfpos The instance of UConstrainedFieldPosition.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_close(UConstrainedFieldPosition* ucfpos);
@@ -174,9 +172,9 @@ ucfpos_close(UConstrainedFieldPosition* ucfpos);
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param category The field category to fix when iterating.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_constrainCategory(
UConstrainedFieldPosition* ucfpos,
int32_t category,
@@ -207,9 +205,9 @@ ucfpos_constrainCategory(
* @param category The field category to fix when iterating.
* @param field The field to fix when iterating.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_constrainField(
UConstrainedFieldPosition* ucfpos,
int32_t category,
@@ -222,14 +220,14 @@ ucfpos_constrainField(
*
* If a category or field constraint was set, this function returns the constrained
* category. Otherwise, the return value is well-defined only after
- * ufmtval_nextPosition returns TRUE.
+ * ufmtval_nextPosition returns true.
*
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param ec Set if an error occurs.
* @return The field category saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucfpos_getCategory(
const UConstrainedFieldPosition* ucfpos,
UErrorCode* ec);
@@ -240,14 +238,14 @@ ucfpos_getCategory(
*
* If a field constraint was set, this function returns the constrained
* field. Otherwise, the return value is well-defined only after
- * ufmtval_nextPosition returns TRUE.
+ * ufmtval_nextPosition returns true.
*
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param ec Set if an error occurs.
* @return The field saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucfpos_getField(
const UConstrainedFieldPosition* ucfpos,
UErrorCode* ec);
@@ -256,15 +254,15 @@ ucfpos_getField(
/**
* Gets the INCLUSIVE start and EXCLUSIVE end index stored for the current position.
*
- * The output values are well-defined only after ufmtval_nextPosition returns TRUE.
+ * The output values are well-defined only after ufmtval_nextPosition returns true.
*
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param pStart Set to the start index saved in the instance. Ignored if nullptr.
* @param pLimit Set to the end index saved in the instance. Ignored if nullptr.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_getIndexes(
const UConstrainedFieldPosition* ucfpos,
int32_t* pStart,
@@ -282,9 +280,9 @@ ucfpos_getIndexes(
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param ec Set if an error occurs.
* @return The current iteration context from ucfpos_setInt64IterationContext.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
ucfpos_getInt64IterationContext(
const UConstrainedFieldPosition* ucfpos,
UErrorCode* ec);
@@ -298,9 +296,9 @@ ucfpos_getInt64IterationContext(
* @param ucfpos The instance of UConstrainedFieldPosition.
* @param context The new iteration context.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_setInt64IterationContext(
UConstrainedFieldPosition* ucfpos,
int64_t context,
@@ -317,9 +315,9 @@ ucfpos_setInt64IterationContext(
* @param category The category to test.
* @param field The field to test.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ucfpos_matchesField(
const UConstrainedFieldPosition* ucfpos,
int32_t category,
@@ -341,9 +339,9 @@ ucfpos_matchesField(
* @param start The new inclusive start index.
* @param limit The new exclusive end index.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ucfpos_setState(
UConstrainedFieldPosition* ucfpos,
int32_t category,
@@ -358,7 +356,7 @@ struct UFormattedValue;
* An abstract formatted value: a string with associated field attributes.
* Many formatters format to types compatible with UFormattedValue.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef struct UFormattedValue UFormattedValue;
@@ -374,9 +372,9 @@ typedef struct UFormattedValue UFormattedValue;
* @param pLength Output variable for the length of the string. Ignored if NULL.
* @param ec Set if an error occurs.
* @return A NUL-terminated char16 string owned by the UFormattedValue.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT const UChar* U_EXPORT2
+U_CAPI const UChar* U_EXPORT2
ufmtval_getString(
const UFormattedValue* ufmtval,
int32_t* pLength,
@@ -403,10 +401,10 @@ ufmtval_getString(
* see ucfpos_constrainCategory
* and ucfpos_constrainField.
* @param ec Set if an error occurs.
- * @return TRUE if another position was found; FALSE otherwise.
- * @draft ICU 64
+ * @return true if another position was found; false otherwise.
+ * @stable ICU 64
*/
-U_DRAFT UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ufmtval_nextPosition(
const UFormattedValue* ufmtval,
UConstrainedFieldPosition* ucfpos,
@@ -426,7 +424,7 @@ U_NAMESPACE_BEGIN
* LocalUConstrainedFieldPositionPointer ucfpos(ucfpos_open(ec));
* // no need to explicitly call ucfpos_close()
*
- * @draft ICU 64
+ * @stable ICU 64
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUConstrainedFieldPositionPointer,
UConstrainedFieldPosition,
@@ -436,6 +434,5 @@ U_NAMESPACE_END
#endif // U_SHOW_CPLUSPLUS_API
-#endif /* U_HIDE_DRAFT_API */
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif // __UFORMATTEDVALUE_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h
index 903f3dd5dee..7093686b8fd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h
@@ -14,7 +14,9 @@
#if !UCONFIG_NO_FORMATTING
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -63,7 +65,7 @@ typedef struct UGenderInfo UGenderInfo;
* @return A UGenderInfo for the specified locale, or NULL if an error occurred.
* @stable ICU 50
*/
-U_STABLE const UGenderInfo* U_EXPORT2
+U_CAPI const UGenderInfo* U_EXPORT2
ugender_getInstance(const char *locale, UErrorCode *status);
@@ -76,7 +78,7 @@ ugender_getInstance(const char *locale, UErrorCode *status);
* @return The gender of the list.
* @stable ICU 50
*/
-U_STABLE UGender U_EXPORT2
+U_CAPI UGender U_EXPORT2
ugender_getListGender(const UGenderInfo* genderInfo, const UGender *genders, int32_t size, UErrorCode *status);
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ulistformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ulistformatter.h
index 1a390088898..8334c7852f0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ulistformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ulistformatter.h
@@ -14,9 +14,12 @@
#if !UCONFIG_NO_FORMATTING
-#include "unicode/localpointer.h"
#include "unicode/uformattedvalue.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: Format a list in a locale-appropriate way.
@@ -34,37 +37,90 @@
struct UListFormatter;
typedef struct UListFormatter UListFormatter; /**< C typedef for struct UListFormatter. @stable ICU 55 */
-#ifndef U_HIDE_DRAFT_API
struct UFormattedList;
/**
* Opaque struct to contain the results of a UListFormatter operation.
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef struct UFormattedList UFormattedList;
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* FieldPosition and UFieldPosition selectors for format fields
* defined by ListFormatter.
- * @draft ICU 63
+ * @stable ICU 63
*/
typedef enum UListFormatterField {
/**
* The literal text in the result which came from the resources.
- * @draft ICU 63
+ * @stable ICU 63
*/
ULISTFMT_LITERAL_FIELD,
/**
* The element text in the result which came from the input strings.
- * @draft ICU 63
+ * @stable ICU 63
*/
ULISTFMT_ELEMENT_FIELD
} UListFormatterField;
-#endif /* U_HIDE_DRAFT_API */
+
+/**
+ * Type of meaning expressed by the list.
+ *
+ * @stable ICU 67
+ */
+typedef enum UListFormatterType {
+ /**
+ * Conjunction formatting, e.g. "Alice, Bob, Charlie, and Delta".
+ *
+ * @stable ICU 67
+ */
+ ULISTFMT_TYPE_AND,
+
+ /**
+ * Disjunction (or alternative, or simply one of) formatting, e.g.
+ * "Alice, Bob, Charlie, or Delta".
+ *
+ * @stable ICU 67
+ */
+ ULISTFMT_TYPE_OR,
+
+ /**
+ * Formatting of a list of values with units, e.g. "5 pounds, 12 ounces".
+ *
+ * @stable ICU 67
+ */
+ ULISTFMT_TYPE_UNITS
+} UListFormatterType;
+
+/**
+ * Verbosity level of the list patterns.
+ *
+ * @stable ICU 67
+ */
+typedef enum UListFormatterWidth {
+ /**
+ * Use list formatting with full words (no abbreviations) when possible.
+ *
+ * @stable ICU 67
+ */
+ ULISTFMT_WIDTH_WIDE,
+
+ /**
+ * Use list formatting of typical length.
+ * @stable ICU 67
+ */
+ ULISTFMT_WIDTH_SHORT,
+
+ /**
+ * Use list formatting of the shortest possible length.
+ * @stable ICU 67
+ */
+ ULISTFMT_WIDTH_NARROW,
+} UListFormatterWidth;
/**
* Open a new UListFormatter object using the rules for a given locale.
+ * The object will be initialized with AND type and WIDE width.
+ *
* @param locale
* The locale whose rules should be used; may be NULL for
* default locale.
@@ -84,6 +140,32 @@ ulistfmt_open(const char* locale,
UErrorCode* status);
/**
+ * Open a new UListFormatter object appropriate for the given locale, list type,
+ * and style.
+ *
+ * @param locale
+ * The locale whose rules should be used; may be NULL for
+ * default locale.
+ * @param type
+ * The type of list formatting to use.
+ * @param width
+ * The width of formatting to use.
+ * @param status
+ * A pointer to a standard ICU UErrorCode (input/output parameter).
+ * Its input value must pass the U_SUCCESS() test, or else the
+ * function returns immediately. The caller should check its output
+ * value with U_FAILURE(), or use with function chaining (see User
+ * Guide for details).
+ * @return
+ * A pointer to a UListFormatter object for the specified locale,
+ * or NULL if an error occurred.
+ * @stable ICU 67
+ */
+U_CAPI UListFormatter* U_EXPORT2
+ulistfmt_openForType(const char* locale, UListFormatterType type,
+ UListFormatterWidth width, UErrorCode* status);
+
+/**
* Close a UListFormatter object. Once closed it may no longer be used.
* @param listfmt
* The UListFormatter object to close.
@@ -92,7 +174,6 @@ ulistfmt_open(const char* locale,
U_CAPI void U_EXPORT2
ulistfmt_close(UListFormatter *listfmt);
-#ifndef U_HIDE_DRAFT_API
/**
* Creates an object to hold the result of a UListFormatter
* operation. The object can be used repeatedly; it is cleared whenever
@@ -100,7 +181,7 @@ ulistfmt_close(UListFormatter *listfmt);
*
* @param ec Set if an error occurs.
* @return A pointer needing ownership.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI UFormattedList* U_EXPORT2
ulistfmt_openResult(UErrorCode* ec);
@@ -124,7 +205,7 @@ ulistfmt_openResult(UErrorCode* ec);
* @param uresult The object containing the formatted string.
* @param ec Set if an error occurs.
* @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI const UFormattedValue* U_EXPORT2
ulistfmt_resultAsValue(const UFormattedList* uresult, UErrorCode* ec);
@@ -133,11 +214,10 @@ ulistfmt_resultAsValue(const UFormattedList* uresult, UErrorCode* ec);
* Releases the UFormattedList created by ulistfmt_openResult().
*
* @param uresult The object to release.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI void U_EXPORT2
ulistfmt_closeResult(UFormattedList* uresult);
-#endif /* U_HIDE_DRAFT_API */
#if U_SHOW_CPLUSPLUS_API
@@ -155,7 +235,6 @@ U_NAMESPACE_BEGIN
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUListFormatterPointer, UListFormatter, ulistfmt_close);
-#ifndef U_HIDE_DRAFT_API
/**
* \class LocalUFormattedListPointer
* "Smart pointer" class, closes a UFormattedList via ulistfmt_closeResult().
@@ -163,10 +242,9 @@ U_DEFINE_LOCAL_OPEN_POINTER(LocalUListFormatterPointer, UListFormatter, ulistfmt
*
* @see LocalPointerBase
* @see LocalPointer
- * @draft ICU 64
+ * @stable ICU 64
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedListPointer, UFormattedList, ulistfmt_closeResult);
-#endif /* U_HIDE_DRAFT_API */
U_NAMESPACE_END
@@ -215,7 +293,6 @@ ulistfmt_format(const UListFormatter* listfmt,
int32_t resultCapacity,
UErrorCode* status);
-#ifndef U_HIDE_DRAFT_API
/**
* Formats a list of strings to a UFormattedList, which exposes more
* information than the string exported by ulistfmt_format().
@@ -240,7 +317,7 @@ ulistfmt_format(const UListFormatter* listfmt,
* operation. See ulistfmt_openResult().
* @param status
* Error code set if an error occurred during formatting.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI void U_EXPORT2
ulistfmt_formatStringsToResult(
@@ -250,7 +327,6 @@ ulistfmt_formatStringsToResult(
int32_t stringCount,
UFormattedList* uresult,
UErrorCode* status);
-#endif /* U_HIDE_DRAFT_API */
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
index de8d8539c67..3977743e323 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
@@ -22,7 +22,10 @@
#include "unicode/ures.h"
#include "unicode/uloc.h"
#include "unicode/uset.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -87,7 +90,7 @@ typedef enum ULocaleDataDelimiterType {
* @param status Pointer to error status code.
* @stable ICU 3.4
*/
-U_STABLE ULocaleData* U_EXPORT2
+U_CAPI ULocaleData* U_EXPORT2
ulocdata_open(const char *localeID, UErrorCode *status);
/**
@@ -96,7 +99,7 @@ ulocdata_open(const char *localeID, UErrorCode *status);
* @param uld The locale data object to close
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocdata_close(ULocaleData *uld);
#if U_SHOW_CPLUSPLUS_API
@@ -129,7 +132,7 @@ U_NAMESPACE_END
* @param setting Value of the "no substitute" attribute.
* @stable ICU 3.4
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocdata_setNoSubstitute(ULocaleData *uld, UBool setting);
/**
@@ -143,7 +146,7 @@ ulocdata_setNoSubstitute(ULocaleData *uld, UBool setting);
* @return UBool Value of the "no substitute" attribute.
* @stable ICU 3.4
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
ulocdata_getNoSubstitute(ULocaleData *uld);
/**
@@ -173,7 +176,7 @@ ulocdata_getNoSubstitute(ULocaleData *uld);
* In case of error, NULL is returned.
* @stable ICU 3.4
*/
-U_STABLE USet* U_EXPORT2
+U_CAPI USet* U_EXPORT2
ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn,
uint32_t options, ULocaleDataExemplarSetType extype, UErrorCode *status);
@@ -190,7 +193,7 @@ ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn,
* the output was truncated.
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type, UChar *result, int32_t resultLength, UErrorCode *status);
/**
@@ -220,7 +223,7 @@ typedef enum UMeasurementSystem {
* @return UMeasurementSystem the measurement system used in the locale.
* @stable ICU 2.8
*/
-U_STABLE UMeasurementSystem U_EXPORT2
+U_CAPI UMeasurementSystem U_EXPORT2
ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status);
/**
@@ -239,7 +242,7 @@ ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status);
* which must not indicate a failure before the function call.
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocdata_getPaperSize(const char *localeID, int32_t *height, int32_t *width, UErrorCode *status);
/**
@@ -248,7 +251,7 @@ ulocdata_getPaperSize(const char *localeID, int32_t *height, int32_t *width, UEr
* @param status error code - could be U_MISSING_RESOURCE_ERROR if the version was not found.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ulocdata_getCLDRVersion(UVersionInfo versionArray, UErrorCode *status);
/**
@@ -266,7 +269,7 @@ ulocdata_getCLDRVersion(UVersionInfo versionArray, UErrorCode *status);
*
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ulocdata_getLocaleDisplayPattern(ULocaleData *uld,
UChar *pattern,
int32_t patternCapacity,
@@ -288,7 +291,7 @@ ulocdata_getLocaleDisplayPattern(ULocaleData *uld,
*
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ulocdata_getLocaleSeparator(ULocaleData *uld,
UChar *separator,
int32_t separatorCapacity,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
index 5d235e42e80..db660dbe7e8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
@@ -24,11 +24,14 @@
#if !UCONFIG_NO_FORMATTING
-#include "unicode/localpointer.h"
#include "unicode/uloc.h"
#include "unicode/parseerr.h"
#include <stdarg.h>
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: MessageFormat
@@ -175,7 +178,7 @@
* @see u_parseMessage
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_formatMessage(const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -202,7 +205,7 @@ u_formatMessage(const char *locale,
* @see u_parseMessage
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vformatMessage( const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -227,7 +230,7 @@ u_vformatMessage( const char *locale,
* @see u_formatMessage
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_parseMessage( const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -252,7 +255,7 @@ u_parseMessage( const char *locale,
* @see u_formatMessage
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_vparseMessage(const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -281,7 +284,7 @@ u_vparseMessage(const char *locale,
* @see u_parseMessage
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_formatMessageWithError( const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -310,7 +313,7 @@ u_formatMessageWithError( const char *locale,
* output was truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vformatMessageWithError( const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -338,7 +341,7 @@ u_vformatMessageWithError( const char *locale,
* @see u_formatMessage
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_parseMessageWithError(const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -366,7 +369,7 @@ u_parseMessageWithError(const char *locale,
* @see u_formatMessage
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_vparseMessageWithError(const char *locale,
const UChar *pattern,
int32_t patternLength,
@@ -396,7 +399,7 @@ typedef void* UMessageFormat;
* messages, or 0 if an error occurred.
* @stable ICU 2.0
*/
-U_STABLE UMessageFormat* U_EXPORT2
+U_CAPI UMessageFormat* U_EXPORT2
umsg_open( const UChar *pattern,
int32_t patternLength,
const char *locale,
@@ -409,7 +412,7 @@ umsg_open( const UChar *pattern,
* @param format The formatter to close.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
umsg_close(UMessageFormat* format);
#if U_SHOW_CPLUSPLUS_API
@@ -439,7 +442,7 @@ U_NAMESPACE_END
* @return A pointer to a UDateFormat identical to fmt.
* @stable ICU 2.0
*/
-U_STABLE UMessageFormat U_EXPORT2
+U_CAPI UMessageFormat U_EXPORT2
umsg_clone(const UMessageFormat *fmt,
UErrorCode *status);
@@ -450,7 +453,7 @@ umsg_clone(const UMessageFormat *fmt,
* @param locale The locale the formatter should use.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
umsg_setLocale(UMessageFormat *fmt,
const char* locale);
@@ -461,7 +464,7 @@ umsg_setLocale(UMessageFormat *fmt,
* @return the locale.
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
umsg_getLocale(const UMessageFormat *fmt);
/**
@@ -476,7 +479,7 @@ umsg_getLocale(const UMessageFormat *fmt);
* set to a failure result.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
umsg_applyPattern( UMessageFormat *fmt,
const UChar* pattern,
int32_t patternLength,
@@ -494,7 +497,7 @@ umsg_applyPattern( UMessageFormat *fmt,
* @return the pattern of the format
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
umsg_toPattern(const UMessageFormat *fmt,
UChar* result,
int32_t resultLength,
@@ -515,7 +518,7 @@ umsg_toPattern(const UMessageFormat *fmt,
* the output was truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
umsg_format( const UMessageFormat *fmt,
UChar *result,
int32_t resultLength,
@@ -537,7 +540,7 @@ umsg_format( const UMessageFormat *fmt,
* the output was truncated.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
umsg_vformat( const UMessageFormat *fmt,
UChar *result,
int32_t resultLength,
@@ -558,7 +561,7 @@ umsg_vformat( const UMessageFormat *fmt,
* specified in pattern.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
umsg_parse( const UMessageFormat *fmt,
const UChar *source,
int32_t sourceLength,
@@ -581,7 +584,7 @@ umsg_parse( const UMessageFormat *fmt,
* @see u_formatMessage
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
umsg_vparse(const UMessageFormat *fmt,
const UChar *source,
int32_t sourceLength,
@@ -613,7 +616,7 @@ umsg_vparse(const UMessageFormat *fmt,
* not
* @stable ICU 3.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
umsg_autoQuoteApostrophe(const UChar* pattern,
int32_t patternLength,
UChar* dest,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h
index 1ec627abcb9..7f6edcf61ad 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h
@@ -77,7 +77,7 @@ class U_I18N_API UnicodeReplacer /* not : public UObject because this is an inte
* replacer that is equal to this one.
* @param result the string to receive the pattern. Previous
* contents will be deleted.
- * @param escapeUnprintable if TRUE then convert unprintable
+ * @param escapeUnprintable if true then convert unprintable
* character to their hex escape representations, \\uxxxx or
* \\Uxxxxxxxx. Unprintable characters are defined by
* Utility.isUnprintable().
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
index 4304538f059..68207a9bec1 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
@@ -18,7 +18,6 @@
#if !UCONFIG_NO_FORMATTING
-#include "unicode/localpointer.h"
#include "unicode/uloc.h"
#include "unicode/ucurr.h"
#include "unicode/umisc.h"
@@ -27,6 +26,10 @@
#include "unicode/udisplaycontext.h"
#include "unicode/ufieldpositer.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: Compatibility APIs for number formatting.
@@ -272,7 +275,7 @@ typedef enum UNumberFormatStyle {
*
* <p>
* For more detail on rounding modes, see:
- * http://userguide.icu-project.org/formatparse/numbers/rounding-modes
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes
*
* @stable ICU 2.0
*/
@@ -377,12 +380,10 @@ typedef enum UNumberFormatFields {
UNUM_PERMILL_FIELD,
/** @stable ICU 49 */
UNUM_SIGN_FIELD,
-#ifndef U_HIDE_DRAFT_API
- /** @draft ICU 64 */
+ /** @stable ICU 64 */
UNUM_MEASURE_UNIT_FIELD,
- /** @draft ICU 64 */
+ /** @stable ICU 64 */
UNUM_COMPACT_FIELD,
-#endif /* U_HIDE_DRAFT_API */
#ifndef U_HIDE_DEPRECATED_API
/**
@@ -394,6 +395,30 @@ typedef enum UNumberFormatFields {
} UNumberFormatFields;
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Selectors with special numeric values to use locale default minimum grouping
+ * digits for the DecimalFormat/UNumberFormat setMinimumGroupingDigits method.
+ * Do not use these constants with the [U]NumberFormatter API.
+ *
+ * @draft ICU 68
+ */
+typedef enum UNumberFormatMinimumGroupingDigits {
+ /**
+ * Display grouping using the default strategy for all locales.
+ * @draft ICU 68
+ */
+ UNUM_MINIMUM_GROUPING_DIGITS_AUTO = -2,
+ /**
+ * Display grouping using locale defaults, except do not show grouping on
+ * values smaller than 10000 (such that there is a minimum of two digits
+ * before the first separator).
+ * @draft ICU 68
+ */
+ UNUM_MINIMUM_GROUPING_DIGITS_MIN2 = -3,
+} UNumberFormatMinimumGroupingDigits;
+#endif // U_HIDE_DRAFT_API
+
/**
* Create and return a new UNumberFormat for formatting and parsing
* numbers. A UNumberFormat may be used to format numbers by calling
@@ -431,7 +456,7 @@ typedef enum UNumberFormatFields {
* @see DecimalFormat
* @stable ICU 2.0
*/
-U_STABLE UNumberFormat* U_EXPORT2
+U_CAPI UNumberFormat* U_EXPORT2
unum_open( UNumberFormatStyle style,
const UChar* pattern,
int32_t patternLength,
@@ -446,7 +471,7 @@ unum_open( UNumberFormatStyle style,
* @param fmt The formatter to close.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_close(UNumberFormat* fmt);
#if U_SHOW_CPLUSPLUS_API
@@ -476,7 +501,7 @@ U_NAMESPACE_END
* @return A pointer to a UNumberFormat identical to fmt.
* @stable ICU 2.0
*/
-U_STABLE UNumberFormat* U_EXPORT2
+U_CAPI UNumberFormat* U_EXPORT2
unum_clone(const UNumberFormat *fmt,
UErrorCode *status);
@@ -504,7 +529,7 @@ unum_clone(const UNumberFormat *fmt,
* @see UFieldPosition
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_format( const UNumberFormat* fmt,
int32_t number,
UChar* result,
@@ -536,7 +561,7 @@ unum_format( const UNumberFormat* fmt,
* @see UFieldPosition
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatInt64(const UNumberFormat *fmt,
int64_t number,
UChar* result,
@@ -568,7 +593,7 @@ unum_formatInt64(const UNumberFormat *fmt,
* @see UFieldPosition
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatDouble( const UNumberFormat* fmt,
double number,
UChar* result,
@@ -618,7 +643,7 @@ unum_formatDouble( const UNumberFormat* fmt,
* @see UNumberFormatFields
* @stable ICU 59
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatDoubleForFields(const UNumberFormat* format,
double number,
UChar* result,
@@ -655,7 +680,7 @@ unum_formatDoubleForFields(const UNumberFormat* format,
* @see UFieldPosition
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatDecimal( const UNumberFormat* fmt,
const char * number,
int32_t length,
@@ -688,7 +713,7 @@ unum_formatDecimal( const UNumberFormat* fmt,
* @see UFieldPosition
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatDoubleCurrency(const UNumberFormat* fmt,
double number,
UChar* currency,
@@ -717,7 +742,7 @@ unum_formatDoubleCurrency(const UNumberFormat* fmt,
* @see unum_parseToUFormattable
* @stable ICU 52
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatUFormattable(const UNumberFormat* fmt,
const UFormattable *number,
UChar *result,
@@ -744,7 +769,7 @@ unum_formatUFormattable(const UNumberFormat* fmt,
* @see unum_formatDouble
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_parse( const UNumberFormat* fmt,
const UChar* text,
int32_t textLength,
@@ -770,7 +795,7 @@ unum_parse( const UNumberFormat* fmt,
* @see unum_formatDouble
* @stable ICU 2.8
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
unum_parseInt64(const UNumberFormat* fmt,
const UChar* text,
int32_t textLength,
@@ -796,7 +821,7 @@ unum_parseInt64(const UNumberFormat* fmt,
* @see unum_formatDouble
* @stable ICU 2.0
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
unum_parseDouble( const UNumberFormat* fmt,
const UChar* text,
int32_t textLength,
@@ -831,7 +856,7 @@ unum_parseDouble( const UNumberFormat* fmt,
* @see unum_formatDouble
* @stable ICU 4.4
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_parseDecimal(const UNumberFormat* fmt,
const UChar* text,
int32_t textLength,
@@ -859,7 +884,7 @@ unum_parseDecimal(const UNumberFormat* fmt,
* @see unum_formatDoubleCurrency
* @stable ICU 3.0
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
unum_parseDoubleCurrency(const UNumberFormat* fmt,
const UChar* text,
int32_t textLength,
@@ -887,7 +912,7 @@ unum_parseDoubleCurrency(const UNumberFormat* fmt,
* @see ufmt_close
* @stable ICU 52
*/
-U_STABLE UFormattable* U_EXPORT2
+U_CAPI UFormattable* U_EXPORT2
unum_parseToUFormattable(const UNumberFormat* fmt,
UFormattable *result,
const UChar* text,
@@ -900,7 +925,7 @@ unum_parseToUFormattable(const UNumberFormat* fmt,
* on a DecimalFormat, other formats return U_UNSUPPORTED_ERROR
* in the status.
* @param format The formatter to set.
- * @param localized TRUE if the pattern is localized, FALSE otherwise.
+ * @param localized true if the pattern is localized, false otherwise.
* @param pattern The new pattern
* @param patternLength The length of pattern, or -1 if null-terminated.
* @param parseError A pointer to UParseError to receive information
@@ -911,7 +936,7 @@ unum_parseToUFormattable(const UNumberFormat* fmt,
* @see DecimalFormat
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_applyPattern( UNumberFormat *format,
UBool localized,
const UChar *pattern,
@@ -930,7 +955,7 @@ unum_applyPattern( UNumberFormat *format,
* @see unum_countAvailable
* @stable ICU 2.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
unum_getAvailable(int32_t localeIndex);
/**
@@ -942,7 +967,7 @@ unum_getAvailable(int32_t localeIndex);
* @see unum_getAvailable
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_countAvailable(void);
#if UCONFIG_HAVE_PARSEALLINPUT
@@ -1032,17 +1057,15 @@ typedef enum UNumberFormatAttribute {
* @stable ICU 51 */
UNUM_SCALE = 21,
-#ifndef U_HIDE_DRAFT_API
/**
* Minimum grouping digits; most commonly set to 2 to print "1000" instead of "1,000".
* See DecimalFormat::getMinimumGroupingDigits().
*
* For better control over grouping strategies, use UNumberFormatter.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UNUM_MINIMUM_GROUPING_DIGITS = 22,
-#endif /* U_HIDE_DRAFT_API */
/**
* if this attribute is set to 0, it is set to UNUM_CURRENCY_STANDARD purpose,
@@ -1083,12 +1106,10 @@ typedef enum UNumberFormatAttribute {
*/
UNUM_PARSE_DECIMAL_MARK_REQUIRED = 0x1002,
-#ifndef U_HIDE_DRAFT_API
-
/**
* Parsing: if set to 1, parsing is sensitive to case (lowercase/uppercase).
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UNUM_PARSE_CASE_SENSITIVE = 0x1003,
@@ -1097,12 +1118,10 @@ typedef enum UNumberFormatAttribute {
*
* For better control over sign display, use UNumberFormatter.
*
- * @draft ICU 64
+ * @stable ICU 64
*/
UNUM_SIGN_ALWAYS_SHOWN = 0x1004,
-#endif /* U_HIDE_DRAFT_API */
-
#ifndef U_HIDE_INTERNAL_API
/** Limit of boolean attributes. (value should
* not depend on U_HIDE conditionals)
@@ -1129,7 +1148,7 @@ typedef enum UNumberFormatAttribute {
* @see unum_setTextAttribute
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_getAttribute(const UNumberFormat* fmt,
UNumberFormatAttribute attr);
@@ -1152,7 +1171,7 @@ unum_getAttribute(const UNumberFormat* fmt,
* @see unum_setTextAttribute
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_setAttribute( UNumberFormat* fmt,
UNumberFormatAttribute attr,
int32_t newValue);
@@ -1172,7 +1191,7 @@ unum_setAttribute( UNumberFormat* fmt,
* @see unum_setTextAttribute
* @stable ICU 2.0
*/
-U_STABLE double U_EXPORT2
+U_CAPI double U_EXPORT2
unum_getDoubleAttribute(const UNumberFormat* fmt,
UNumberFormatAttribute attr);
@@ -1190,7 +1209,7 @@ unum_getDoubleAttribute(const UNumberFormat* fmt,
* @see unum_setTextAttribute
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_setDoubleAttribute( UNumberFormat* fmt,
UNumberFormatAttribute attr,
double newValue);
@@ -1247,7 +1266,7 @@ typedef enum UNumberFormatTextAttribute {
* @see unum_setAttribute
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_getTextAttribute( const UNumberFormat* fmt,
UNumberFormatTextAttribute tag,
UChar* result,
@@ -1270,7 +1289,7 @@ unum_getTextAttribute( const UNumberFormat* fmt,
* @see unum_setAttribute
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_setTextAttribute( UNumberFormat* fmt,
UNumberFormatTextAttribute tag,
const UChar* newValue,
@@ -1281,8 +1300,8 @@ unum_setTextAttribute( UNumberFormat* fmt,
* Extract the pattern from a UNumberFormat. The pattern will follow
* the DecimalFormat pattern syntax.
* @param fmt The formatter to query.
- * @param isPatternLocalized TRUE if the pattern should be localized,
- * FALSE otherwise. This is ignored if the formatter is a rule-based
+ * @param isPatternLocalized true if the pattern should be localized,
+ * false otherwise. This is ignored if the formatter is a rule-based
* formatter.
* @param result A pointer to a buffer to receive the pattern.
* @param resultLength The maximum size of result.
@@ -1293,7 +1312,7 @@ unum_setTextAttribute( UNumberFormat* fmt,
* @see DecimalFormat
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_toPattern( const UNumberFormat* fmt,
UBool isPatternLocalized,
UChar* result,
@@ -1412,7 +1431,7 @@ typedef enum UNumberFormatSymbol {
* @see unum_setSymbol
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_getSymbol(const UNumberFormat *fmt,
UNumberFormatSymbol symbol,
UChar *buffer,
@@ -1432,7 +1451,7 @@ unum_getSymbol(const UNumberFormat *fmt,
* @see unum_getSymbol
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_setSymbol(UNumberFormat *fmt,
UNumberFormatSymbol symbol,
const UChar *value,
@@ -1449,7 +1468,7 @@ unum_setSymbol(UNumberFormat *fmt,
* @return the locale name
* @stable ICU 2.8
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
unum_getLocaleByType(const UNumberFormat *fmt,
ULocDataLocaleType type,
UErrorCode* status);
@@ -1462,7 +1481,7 @@ unum_getLocaleByType(const UNumberFormat *fmt,
* @param status A pointer to an UErrorCode to receive any errors
* @stable ICU 53
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unum_setContext(UNumberFormat* fmt, UDisplayContext value, UErrorCode* status);
/**
@@ -1474,7 +1493,7 @@ unum_setContext(UNumberFormat* fmt, UDisplayContext value, UErrorCode* status);
* @return The UDisplayContextValue for the specified type.
* @stable ICU 53
*/
-U_STABLE UDisplayContext U_EXPORT2
+U_CAPI UDisplayContext U_EXPORT2
unum_getContext(const UNumberFormat *fmt, UDisplayContextType type, UErrorCode* status);
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
index b27507f7a8f..754987aea09 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
@@ -1,11 +1,12 @@
// © 2018 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
+#ifndef __UNUMBERFORMATTER_H__
+#define __UNUMBERFORMATTER_H__
+
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
-#ifndef __UNUMBERFORMATTER_H__
-#define __UNUMBERFORMATTER_H__
#include "unicode/parseerr.h"
#include "unicode/ufieldpositer.h"
@@ -147,6 +148,30 @@ typedef enum UNumberUnitWidth {
*/
UNUM_UNIT_WIDTH_ISO_CODE,
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Use the formal variant of the currency symbol; for example, "NT$" for the New Taiwan
+ * dollar in zh-TW.
+ *
+ * <p>
+ * Behavior of this option with non-currency units is not defined at this time.
+ *
+ * @draft ICU 68
+ */
+ UNUM_UNIT_WIDTH_FORMAL,
+
+ /**
+ * Use the alternate variant of the currency symbol; for example, "TL" for the Turkish
+ * lira (TRY).
+ *
+ * <p>
+ * Behavior of this option with non-currency units is not defined at this time.
+ *
+ * @draft ICU 68
+ */
+ UNUM_UNIT_WIDTH_VARIANT,
+#endif // U_HIDE_DRAFT_API
+
/**
* Format the number according to the specified unit, but do not display the unit. For currencies, apply
* monetary symbols and formats as with SHORT, but omit the currency symbol. For measure units, the behavior is
@@ -336,7 +361,7 @@ typedef enum UNumberSignDisplay {
/**
* Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a
- * sign on zero or NaN, unless the sign bit is set (-0.0 gets a sign).
+ * sign on zero, numbers that round to zero, or NaN.
*
* @stable ICU 61
*/
@@ -344,9 +369,8 @@ typedef enum UNumberSignDisplay {
/**
* Use the locale-dependent accounting format on negative numbers, and show the plus sign on
- * positive numbers. Do not show a sign on zero or NaN, unless the sign bit is set (-0.0 gets a
- * sign). For more information on the accounting format, see the ACCOUNTING sign display
- * strategy.
+ * positive numbers. Do not show a sign on zero, numbers that round to zero, or NaN. For more
+ * information on the accounting format, see the ACCOUNTING sign display strategy.
*
* @stable ICU 61
*/
@@ -428,33 +452,31 @@ typedef struct UFormattedNumber UFormattedNumber;
* NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead.
*
* @param skeleton The skeleton string, like u"percent precision-integer"
- * @param skeletonLen The number of UChars in the skeleton string, or -1 it it is NUL-terminated.
+ * @param skeletonLen The number of UChars in the skeleton string, or -1 if it is NUL-terminated.
* @param locale The NUL-terminated locale ID.
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE UNumberFormatter* U_EXPORT2
+U_CAPI UNumberFormatter* U_EXPORT2
unumf_openForSkeletonAndLocale(const UChar* skeleton, int32_t skeletonLen, const char* locale,
UErrorCode* ec);
-#ifndef U_HIDE_DRAFT_API
/**
* Like unumf_openForSkeletonAndLocale, but accepts a UParseError, which will be populated with the
* location of a skeleton syntax error if such a syntax error exists.
*
* @param skeleton The skeleton string, like u"percent precision-integer"
- * @param skeletonLen The number of UChars in the skeleton string, or -1 it it is NUL-terminated.
+ * @param skeletonLen The number of UChars in the skeleton string, or -1 if it is NUL-terminated.
* @param locale The NUL-terminated locale ID.
* @param perror A parse error struct populated if an error occurs when parsing. Can be NULL.
* If no error occurs, perror->offset will be set to -1.
* @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT UNumberFormatter* U_EXPORT2
+U_CAPI UNumberFormatter* U_EXPORT2
unumf_openForSkeletonAndLocaleWithError(
const UChar* skeleton, int32_t skeletonLen, const char* locale, UParseError* perror, UErrorCode* ec);
-#endif // U_HIDE_DRAFT_API
/**
@@ -465,7 +487,7 @@ unumf_openForSkeletonAndLocaleWithError(
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE UFormattedNumber* U_EXPORT2
+U_CAPI UFormattedNumber* U_EXPORT2
unumf_openResult(UErrorCode* ec);
@@ -484,7 +506,7 @@ unumf_openResult(UErrorCode* ec);
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumf_formatInt(const UNumberFormatter* uformatter, int64_t value, UFormattedNumber* uresult,
UErrorCode* ec);
@@ -504,7 +526,7 @@ unumf_formatInt(const UNumberFormatter* uformatter, int64_t value, UFormattedNum
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumf_formatDouble(const UNumberFormatter* uformatter, double value, UFormattedNumber* uresult,
UErrorCode* ec);
@@ -528,11 +550,10 @@ unumf_formatDouble(const UNumberFormatter* uformatter, double value, UFormattedN
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumf_formatDecimal(const UNumberFormatter* uformatter, const char* value, int32_t valueLen,
UFormattedNumber* uresult, UErrorCode* ec);
-#ifndef U_HIDE_DRAFT_API
/**
* Returns a representation of a UFormattedNumber as a UFormattedValue,
* which can be subsequently passed to any API requiring that type.
@@ -545,11 +566,10 @@ unumf_formatDecimal(const UNumberFormatter* uformatter, const char* value, int32
* @param uresult The object containing the formatted string.
* @param ec Set if an error occurs.
* @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT const UFormattedValue* U_EXPORT2
+U_CAPI const UFormattedValue* U_EXPORT2
unumf_resultAsValue(const UFormattedNumber* uresult, UErrorCode* ec);
-#endif /* U_HIDE_DRAFT_API */
/**
@@ -571,7 +591,7 @@ unumf_resultAsValue(const UFormattedNumber* uresult, UErrorCode* ec);
* @return The required length.
* @stable ICU 62
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unumf_resultToString(const UFormattedNumber* uresult, UChar* buffer, int32_t bufferCapacity,
UErrorCode* ec);
@@ -605,11 +625,11 @@ unumf_resultToString(const UFormattedNumber* uresult, UChar* buffer, int32_t buf
* "beginIndex" field is set to the beginning of the first occurrence of the field after the
* input "endIndex", and "endIndex" is set to the end of that occurrence of the field
* (exclusive index). If a field position is not found, the FieldPosition is not changed and
- * the method returns FALSE.
+ * the method returns false.
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
unumf_resultNextFieldPosition(const UFormattedNumber* uresult, UFieldPosition* ufpos, UErrorCode* ec);
@@ -634,16 +654,37 @@ unumf_resultNextFieldPosition(const UFormattedNumber* uresult, UFieldPosition* u
* @param ec Set if an error occurs.
* @stable ICU 62
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumf_resultGetAllFieldPositions(const UFormattedNumber* uresult, UFieldPositionIterator* ufpositer,
UErrorCode* ec);
-// TODO(ICU-20775): Propose this as API.
-// NOTE: This is not currently implemented.
-// U_DRAFT int32_t U_EXPORT2
-// unumf_resultToDecimalNumber(const UFormattedNumber* uresult, char* buffer, int32_t bufferCapacity,
-// UErrorCode* ec);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Extracts the formatted number as a "numeric string" conforming to the
+ * syntax defined in the Decimal Arithmetic Specification, available at
+ * http://speleotrove.com/decimal
+ *
+ * This endpoint is useful for obtaining the exact number being printed
+ * after scaling and rounding have been applied by the number formatter.
+ *
+ * @param uresult The input object containing the formatted number.
+ * @param dest the 8-bit char buffer into which the decimal number is placed
+ * @param destCapacity The size, in chars, of the destination buffer. May be zero
+ * for precomputing the required size.
+ * @param ec receives any error status.
+ * If U_BUFFER_OVERFLOW_ERROR: Returns number of chars for
+ * preflighting.
+ * @return Number of chars in the data. Does not include a trailing NUL.
+ * @draft ICU 68
+ */
+U_CAPI int32_t U_EXPORT2
+unumf_resultToDecimalNumber(
+ const UFormattedNumber* uresult,
+ char* dest,
+ int32_t destCapacity,
+ UErrorCode* ec);
+#endif // U_HIDE_DRAFT_API
/**
@@ -652,7 +693,7 @@ unumf_resultGetAllFieldPositions(const UFormattedNumber* uresult, UFieldPosition
* @param uformatter An object created by unumf_openForSkeletonAndLocale().
* @stable ICU 62
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumf_close(UNumberFormatter* uformatter);
@@ -662,7 +703,7 @@ unumf_close(UNumberFormatter* uformatter);
* @param uresult An object created by unumf_openResult().
* @stable ICU 62
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumf_closeResult(UFormattedNumber* uresult);
@@ -706,5 +747,5 @@ U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedNumberPointer, UFormattedNumber, unum
U_NAMESPACE_END
#endif // U_SHOW_CPLUSPLUS_API
-#endif //__UNUMBERFORMATTER_H__
#endif /* #if !UCONFIG_NO_FORMATTING */
+#endif //__UNUMBERFORMATTER_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h
new file mode 100644
index 00000000000..e28fe51aa6a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h
@@ -0,0 +1,477 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#ifndef __UNUMBERRANGEFORMATTER_H__
+#define __UNUMBERRANGEFORMATTER_H__
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "unicode/parseerr.h"
+#include "unicode/ufieldpositer.h"
+#include "unicode/umisc.h"
+#include "unicode/uformattedvalue.h"
+#include "unicode/uformattable.h"
+
+
+/**
+ * \file
+ * \brief C-compatible API for localized number range formatting.
+ *
+ * This is the C-compatible version of the NumberRangeFormatter API. C++ users
+ * should include unicode/numberrangeformatter.h and use the proper C++ APIs.
+ *
+ * First create a UNumberRangeFormatter, which is immutable, and then format to
+ * a UFormattedNumberRange.
+ *
+ * Example code:
+ * <pre>
+ * // Setup:
+ * UErrorCode ec = U_ZERO_ERROR;
+ * UNumberRangeFormatter* uformatter = unumrf_openForSkeletonCollapseIdentityFallbackAndLocaleWithError(
+ * u"currency/USD precision-integer",
+ * -1,
+ * UNUM_RANGE_COLLAPSE_AUTO,
+ * UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ * "en-US",
+ * NULL,
+ * &ec);
+ * UFormattedNumberRange* uresult = unumrf_openResult(&ec);
+ * if (U_FAILURE(ec)) { return; }
+ *
+ * // Format a double range:
+ * unumrf_formatDoubleRange(uformatter, 3.0, 5.0, uresult, &ec);
+ * if (U_FAILURE(ec)) { return; }
+ *
+ * // Get the result string:
+ * int32_t len;
+ * const UChar* str = ufmtval_getString(unumrf_resultAsValue(uresult, &ec), &len, &ec);
+ * if (U_FAILURE(ec)) { return; }
+ * // str should equal "$3 – $5"
+ *
+ * // Cleanup:
+ * unumf_close(uformatter);
+ * unumf_closeResult(uresult);
+ * </pre>
+ *
+ * If you are a C++ user linking against the C libraries, you can use the LocalPointer versions of these
+ * APIs. The following example uses LocalPointer with the decimal number and field position APIs:
+ *
+ * <pre>
+ * // Setup:
+ * LocalUNumberRangeFormatterPointer uformatter(
+ * unumrf_openForSkeletonCollapseIdentityFallbackAndLocaleWithError(...));
+ * LocalUFormattedNumberRangePointer uresult(unumrf_openResult(&ec));
+ * if (U_FAILURE(ec)) { return; }
+ *
+ * // Format a double number range:
+ * unumrf_formatDoubleRange(uformatter.getAlias(), 3.0, 5.0, uresult.getAlias(), &ec);
+ * if (U_FAILURE(ec)) { return; }
+ *
+ * // No need to do any cleanup since we are using LocalPointer.
+ * </pre>
+ *
+ * You can also get field positions. For more information, see uformattedvalue.h.
+ */
+
+/**
+ * Defines how to merge fields that are identical across the range sign.
+ *
+ * @stable ICU 63
+ */
+typedef enum UNumberRangeCollapse {
+ /**
+ * Use locale data and heuristics to determine how much of the string to collapse. Could end up collapsing none,
+ * some, or all repeated pieces in a locale-sensitive way.
+ *
+ * The heuristics used for this option are subject to change over time.
+ *
+ * @stable ICU 63
+ */
+ UNUM_RANGE_COLLAPSE_AUTO,
+
+ /**
+ * Do not collapse any part of the number. Example: "3.2 thousand kilograms – 5.3 thousand kilograms"
+ *
+ * @stable ICU 63
+ */
+ UNUM_RANGE_COLLAPSE_NONE,
+
+ /**
+ * Collapse the unit part of the number, but not the notation, if present. Example: "3.2 thousand – 5.3 thousand
+ * kilograms"
+ *
+ * @stable ICU 63
+ */
+ UNUM_RANGE_COLLAPSE_UNIT,
+
+ /**
+ * Collapse any field that is equal across the range sign. May introduce ambiguity on the magnitude of the
+ * number. Example: "3.2 – 5.3 thousand kilograms"
+ *
+ * @stable ICU 63
+ */
+ UNUM_RANGE_COLLAPSE_ALL
+} UNumberRangeCollapse;
+
+/**
+ * Defines the behavior when the two numbers in the range are identical after rounding. To programmatically detect
+ * when the identity fallback is used, compare the lower and upper BigDecimals via FormattedNumber.
+ *
+ * @stable ICU 63
+ * @see NumberRangeFormatter
+ */
+typedef enum UNumberRangeIdentityFallback {
+ /**
+ * Show the number as a single value rather than a range. Example: "$5"
+ *
+ * @stable ICU 63
+ */
+ UNUM_IDENTITY_FALLBACK_SINGLE_VALUE,
+
+ /**
+ * Show the number using a locale-sensitive approximation pattern. If the numbers were the same before rounding,
+ * show the single value. Example: "~$5" or "$5"
+ *
+ * @stable ICU 63
+ */
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE,
+
+ /**
+ * Show the number using a locale-sensitive approximation pattern. Use the range pattern always, even if the
+ * inputs are the same. Example: "~$5"
+ *
+ * @stable ICU 63
+ */
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+
+ /**
+ * Show the number as the range of two equal values. Use the range pattern always, even if the inputs are the
+ * same. Example (with RangeCollapse.NONE): "$5 – $5"
+ *
+ * @stable ICU 63
+ */
+ UNUM_IDENTITY_FALLBACK_RANGE
+} UNumberRangeIdentityFallback;
+
+/**
+ * Used in the result class FormattedNumberRange to indicate to the user whether the numbers formatted in the range
+ * were equal or not, and whether or not the identity fallback was applied.
+ *
+ * @stable ICU 63
+ * @see NumberRangeFormatter
+ */
+typedef enum UNumberRangeIdentityResult {
+ /**
+ * Used to indicate that the two numbers in the range were equal, even before any rounding rules were applied.
+ *
+ * @stable ICU 63
+ * @see NumberRangeFormatter
+ */
+ UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING,
+
+ /**
+ * Used to indicate that the two numbers in the range were equal, but only after rounding rules were applied.
+ *
+ * @stable ICU 63
+ * @see NumberRangeFormatter
+ */
+ UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING,
+
+ /**
+ * Used to indicate that the two numbers in the range were not equal, even after rounding rules were applied.
+ *
+ * @stable ICU 63
+ * @see NumberRangeFormatter
+ */
+ UNUM_IDENTITY_RESULT_NOT_EQUAL,
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * The number of entries in this enum.
+ * @internal
+ */
+ UNUM_IDENTITY_RESULT_COUNT
+#endif
+
+} UNumberRangeIdentityResult;
+
+
+#ifndef U_HIDE_DRAFT_API
+
+struct UNumberRangeFormatter;
+/**
+ * C-compatible version of icu::number::LocalizedNumberRangeFormatter.
+ *
+ * NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
+ *
+ * @draft ICU 68
+ */
+typedef struct UNumberRangeFormatter UNumberRangeFormatter;
+
+
+struct UFormattedNumberRange;
+/**
+ * C-compatible version of icu::number::FormattedNumberRange.
+ *
+ * NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
+ *
+ * @draft ICU 68
+ */
+typedef struct UFormattedNumberRange UFormattedNumberRange;
+
+
+/**
+ * Creates a new UNumberFormatter for the given skeleton string, collapse option, identity fallback
+ * option, and locale. This is currently the only method for creating a new UNumberRangeFormatter.
+ *
+ * Objects of type UNumberRangeFormatter returned by this method are threadsafe.
+ *
+ * For more details on skeleton strings, see the documentation in numberrangeformatter.h. For more
+ * details on the usage of this API, see the documentation at the top of unumberrangeformatter.h.
+ *
+ * NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
+ *
+ * @param skeleton The skeleton string, like u"percent precision-integer"
+ * @param skeletonLen The number of UChars in the skeleton string, or -1 if it is NUL-terminated.
+ * @param collapse Option for how to merge affixes (if unsure, use UNUM_RANGE_COLLAPSE_AUTO)
+ * @param identityFallback Option for resolving when both sides of the range are equal.
+ * @param locale The NUL-terminated locale ID.
+ * @param perror A parse error struct populated if an error occurs when parsing. Can be NULL.
+ * If no error occurs, perror->offset will be set to -1.
+ * @param ec Set if an error occurs.
+ * @draft ICU 68
+ */
+U_CAPI UNumberRangeFormatter* U_EXPORT2
+unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ const UChar* skeleton,
+ int32_t skeletonLen,
+ UNumberRangeCollapse collapse,
+ UNumberRangeIdentityFallback identityFallback,
+ const char* locale,
+ UParseError* perror,
+ UErrorCode* ec);
+
+
+/**
+ * Creates an object to hold the result of a UNumberRangeFormatter
+ * operation. The object can be used repeatedly; it is cleared whenever
+ * passed to a format function.
+ *
+ * @param ec Set if an error occurs.
+ * @draft ICU 68
+ */
+U_CAPI UFormattedNumberRange* U_EXPORT2
+unumrf_openResult(UErrorCode* ec);
+
+
+/**
+ * Uses a UNumberRangeFormatter to format a range of doubles.
+ *
+ * The UNumberRangeFormatter can be shared between threads. Each thread should have its own local
+ * UFormattedNumberRange, however, for storing the result of the formatting operation.
+ *
+ * NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
+ *
+ * @param uformatter A formatter object; see unumberrangeformatter.h.
+ * @param first The first (usually smaller) number in the range.
+ * @param second The second (usually larger) number in the range.
+ * @param uresult The object that will be mutated to store the result; see unumrf_openResult.
+ * @param ec Set if an error occurs.
+ * @draft ICU 68
+ */
+U_CAPI void U_EXPORT2
+unumrf_formatDoubleRange(
+ const UNumberRangeFormatter* uformatter,
+ double first,
+ double second,
+ UFormattedNumberRange* uresult,
+ UErrorCode* ec);
+
+
+/**
+ * Uses a UNumberRangeFormatter to format a range of decimal numbers.
+ *
+ * With a decimal number string, you can specify an input with arbitrary precision.
+ *
+ * The UNumberRangeFormatter can be shared between threads. Each thread should have its own local
+ * UFormattedNumberRange, however, for storing the result of the formatting operation.
+ *
+ * NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
+ *
+ * @param uformatter A formatter object; see unumberrangeformatter.h.
+ * @param first The first (usually smaller) number in the range.
+ * @param firstLen The length of the first decimal number string.
+ * @param second The second (usually larger) number in the range.
+ * @param secondLen The length of the second decimal number string.
+ * @param uresult The object that will be mutated to store the result; see unumrf_openResult.
+ * @param ec Set if an error occurs.
+ * @draft ICU 68
+ */
+U_CAPI void U_EXPORT2
+unumrf_formatDecimalRange(
+ const UNumberRangeFormatter* uformatter,
+ const char* first,
+ int32_t firstLen,
+ const char* second,
+ int32_t secondLen,
+ UFormattedNumberRange* uresult,
+ UErrorCode* ec);
+
+
+/**
+ * Returns a representation of a UFormattedNumberRange as a UFormattedValue,
+ * which can be subsequently passed to any API requiring that type.
+ *
+ * The returned object is owned by the UFormattedNumberRange and is valid
+ * only as long as the UFormattedNumber is present and unchanged in memory.
+ *
+ * You can think of this method as a cast between types.
+ *
+ * @param uresult The object containing the formatted number range.
+ * @param ec Set if an error occurs.
+ * @return A UFormattedValue owned by the input object.
+ * @draft ICU 68
+ */
+U_CAPI const UFormattedValue* U_EXPORT2
+unumrf_resultAsValue(const UFormattedNumberRange* uresult, UErrorCode* ec);
+
+
+/**
+ * Extracts the identity result from a UFormattedNumberRange.
+ *
+ * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead.
+ *
+ * @param uresult The object containing the formatted number range.
+ * @param ec Set if an error occurs.
+ * @return The identity result; see UNumberRangeIdentityResult.
+ * @draft ICU 68
+ */
+U_CAPI UNumberRangeIdentityResult U_EXPORT2
+unumrf_resultGetIdentityResult(
+ const UFormattedNumberRange* uresult,
+ UErrorCode* ec);
+
+
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Extracts the first formatted number as a decimal number. This endpoint
+ * is useful for obtaining the exact number being printed after scaling
+ * and rounding have been applied by the number range formatting pipeline.
+ *
+ * The syntax of the unformatted number is a "numeric string"
+ * as defined in the Decimal Arithmetic Specification, available at
+ * http://speleotrove.com/decimal
+ *
+ * @param uresult The input object containing the formatted number range.
+ * @param dest the 8-bit char buffer into which the decimal number is placed
+ * @param destCapacity The size, in chars, of the destination buffer. May be zero
+ * for precomputing the required size.
+ * @param ec receives any error status.
+ * If U_BUFFER_OVERFLOW_ERROR: Returns number of chars for
+ * preflighting.
+ * @return Number of chars in the data. Does not include a trailing NUL.
+ * @draft ICU 68
+ */
+U_CAPI int32_t U_EXPORT2
+unumrf_resultGetFirstDecimalNumber(
+ const UFormattedNumberRange* uresult,
+ char* dest,
+ int32_t destCapacity,
+ UErrorCode* ec);
+
+
+/**
+ * Extracts the second formatted number as a decimal number. This endpoint
+ * is useful for obtaining the exact number being printed after scaling
+ * and rounding have been applied by the number range formatting pipeline.
+ *
+ * The syntax of the unformatted number is a "numeric string"
+ * as defined in the Decimal Arithmetic Specification, available at
+ * http://speleotrove.com/decimal
+ *
+ * @param uresult The input object containing the formatted number range.
+ * @param dest the 8-bit char buffer into which the decimal number is placed
+ * @param destCapacity The size, in chars, of the destination buffer. May be zero
+ * for precomputing the required size.
+ * @param ec receives any error status.
+ * If U_BUFFER_OVERFLOW_ERROR: Returns number of chars for
+ * preflighting.
+ * @return Number of chars in the data. Does not include a trailing NUL.
+ * @draft ICU 68
+ */
+U_CAPI int32_t U_EXPORT2
+unumrf_resultGetSecondDecimalNumber(
+ const UFormattedNumberRange* uresult,
+ char* dest,
+ int32_t destCapacity,
+ UErrorCode* ec);
+#endif // U_HIDE_DRAFT_API
+
+
+/**
+ * Releases the UNumberFormatter created by unumf_openForSkeletonAndLocale().
+ *
+ * @param uformatter An object created by unumf_openForSkeletonAndLocale().
+ * @draft ICU 68
+ */
+U_CAPI void U_EXPORT2
+unumrf_close(UNumberRangeFormatter* uformatter);
+
+
+/**
+ * Releases the UFormattedNumber created by unumf_openResult().
+ *
+ * @param uresult An object created by unumf_openResult().
+ * @draft ICU 68
+ */
+U_CAPI void U_EXPORT2
+unumrf_closeResult(UFormattedNumberRange* uresult);
+
+
+#if U_SHOW_CPLUSPLUS_API
+U_NAMESPACE_BEGIN
+
+/**
+ * \class LocalUNumberRangeFormatterPointer
+ * "Smart pointer" class; closes a UNumberFormatter via unumf_close().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * Usage:
+ * <pre>
+ * LocalUNumberRangeFormatterPointer uformatter(
+ * unumrf_openForSkeletonCollapseIdentityFallbackAndLocaleWithError(...));
+ * // no need to explicitly call unumrf_close()
+ * </pre>
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * @draft ICU 68
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberRangeFormatterPointer, UNumberRangeFormatter, unumrf_close);
+
+/**
+ * \class LocalUFormattedNumberPointer
+ * "Smart pointer" class; closes a UFormattedNumber via unumf_closeResult().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * Usage:
+ * <pre>
+ * LocalUFormattedNumberRangePointer uresult(unumrf_openResult(...));
+ * // no need to explicitly call unumrf_closeResult()
+ * </pre>
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * @draft ICU 68
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedNumberRangePointer, UFormattedNumberRange, unumrf_closeResult);
+
+U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
+
+#endif // U_HIDE_DRAFT_API
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+#endif //__UNUMBERRANGEFORMATTER_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h
index 1631c234fd2..fe713ea77a6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h
@@ -15,7 +15,10 @@
#if !UCONFIG_NO_FORMATTING
#include "unicode/uenum.h"
+
+#if U_SHOW_CPLUSPLUS_API
#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
/**
* \file
@@ -54,7 +57,7 @@ typedef struct UNumberingSystem UNumberingSystem; /**< C typedef for struct UNu
* occurred.
* @stable ICU 52
*/
-U_STABLE UNumberingSystem * U_EXPORT2
+U_CAPI UNumberingSystem * U_EXPORT2
unumsys_open(const char *locale, UErrorCode *status);
/**
@@ -75,7 +78,7 @@ unumsys_open(const char *locale, UErrorCode *status);
* occurred.
* @stable ICU 52
*/
-U_STABLE UNumberingSystem * U_EXPORT2
+U_CAPI UNumberingSystem * U_EXPORT2
unumsys_openByName(const char *name, UErrorCode *status);
/**
@@ -83,7 +86,7 @@ unumsys_openByName(const char *name, UErrorCode *status);
* @param unumsys The UNumberingSystem object to close.
* @stable ICU 52
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
unumsys_close(UNumberingSystem *unumsys);
#if U_SHOW_CPLUSPLUS_API
@@ -111,7 +114,7 @@ U_NAMESPACE_END
* or NULL if an error occurred.
* @stable ICU 52
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
unumsys_openAvailableNames(UErrorCode *status);
/**
@@ -123,18 +126,18 @@ unumsys_openAvailableNames(UErrorCode *status);
* is only valid for the lifetime of the UNumberingSystem object.
* @stable ICU 52
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
unumsys_getName(const UNumberingSystem *unumsys);
/**
* Returns whether the given UNumberingSystem object is for an algorithmic (not purely
* positional) system.
* @param unumsys The UNumberingSystem whose algorithmic status is desired.
- * @return TRUE if the specified UNumberingSystem object is for an algorithmic
+ * @return true if the specified UNumberingSystem object is for an algorithmic
* system.
* @stable ICU 52
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
unumsys_isAlgorithmic(const UNumberingSystem *unumsys);
/**
@@ -145,7 +148,7 @@ unumsys_isAlgorithmic(const UNumberingSystem *unumsys);
* @return The radix of the specified UNumberingSystem object.
* @stable ICU 52
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unumsys_getRadix(const UNumberingSystem *unumsys);
/**
@@ -164,7 +167,7 @@ unumsys_getRadix(const UNumberingSystem *unumsys);
* output was truncated.
* @stable ICU 52
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unumsys_getDescription(const UNumberingSystem *unumsys, UChar *result,
int32_t resultLength, UErrorCode *status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
index fc1b2fb5717..71a45ddf85b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
@@ -14,14 +14,19 @@
#if !UCONFIG_NO_FORMATTING
-#include "unicode/localpointer.h"
#include "unicode/uenum.h"
+
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
#ifndef U_HIDE_INTERNAL_API
#include "unicode/unum.h"
#endif /* U_HIDE_INTERNAL_API */
// Forward-declaration
struct UFormattedNumber;
+struct UFormattedNumberRange;
/**
* \file
@@ -152,7 +157,6 @@ uplrules_select(const UPluralRules *uplrules,
UChar *keyword, int32_t capacity,
UErrorCode *status);
-#ifndef U_HIDE_DRAFT_API
/**
* Given a formatted number, returns the keyword of the first rule
* that applies to the number, according to the supplied UPluralRules object.
@@ -164,18 +168,40 @@ uplrules_select(const UPluralRules *uplrules,
* @param uplrules The UPluralRules object specifying the rules.
* @param number The formatted number for which the rule has to be determined.
* @param keyword The destination buffer for the keyword of the rule that
- * applies to number.
+ * applies to the number.
* @param capacity The capacity of the keyword buffer.
* @param status A pointer to a UErrorCode to receive any errors.
* @return The length of the keyword.
- * @draft ICU 64
+ * @stable ICU 64
*/
U_CAPI int32_t U_EXPORT2
uplrules_selectFormatted(const UPluralRules *uplrules,
const struct UFormattedNumber* number,
UChar *keyword, int32_t capacity,
UErrorCode *status);
-#endif /* U_HIDE_DRAFT_API */
+
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Given a formatted number range, returns the overall plural form of the
+ * range. For example, "3-5" returns "other" in English.
+ *
+ * To get a UFormattedNumberRange, see UNumberRangeFormatter.
+ *
+ * @param uplrules The UPluralRules object specifying the rules.
+ * @param urange The number range onto which the rules will be applied.
+ * @param keyword The destination buffer for the keyword of the rule that
+ * applies to the number range.
+ * @param capacity The capacity of the keyword buffer.
+ * @param status A pointer to a UErrorCode to receive any errors.
+ * @return The length of the keyword.
+ * @draft ICU 68
+ */
+U_CAPI int32_t U_EXPORT2
+uplrules_selectForRange(const UPluralRules *uplrules,
+ const struct UFormattedNumberRange* urange,
+ UChar *keyword, int32_t capacity,
+ UErrorCode *status);
+#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
/**
@@ -196,7 +222,7 @@ uplrules_selectFormatted(const UPluralRules *uplrules,
* @return The length of keyword.
* @internal ICU 59 technology preview, may be removed in the future
*/
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uplrules_selectWithFormat(const UPluralRules *uplrules,
double number,
const UNumberFormat *fmt,
@@ -215,7 +241,7 @@ uplrules_selectWithFormat(const UPluralRules *uplrules,
* upon error. The caller is responsible for closing the result.
* @stable ICU 59
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uplrules_getKeywords(const UPluralRules *uplrules,
UErrorCode *status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h
index 131c492a55a..e946e632623 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h
@@ -30,9 +30,12 @@
#if !UCONFIG_NO_REGULAR_EXPRESSIONS
-#include "unicode/localpointer.h"
#include "unicode/parseerr.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
struct URegularExpression;
/**
* Structure representing a compiled regular expression, plus the results
@@ -131,7 +134,7 @@ typedef enum URegexpFlag{
* @stable ICU 3.0
*
*/
-U_STABLE URegularExpression * U_EXPORT2
+U_CAPI URegularExpression * U_EXPORT2
uregex_open( const UChar *pattern,
int32_t patternLength,
uint32_t flags,
@@ -161,7 +164,7 @@ uregex_open( const UChar *pattern,
*
* @stable ICU 4.6
*/
-U_STABLE URegularExpression * U_EXPORT2
+U_CAPI URegularExpression * U_EXPORT2
uregex_openUText(UText *pattern,
uint32_t flags,
UParseError *pe,
@@ -191,7 +194,7 @@ uregex_openUText(UText *pattern,
*
* @stable ICU 3.0
*/
-U_STABLE URegularExpression * U_EXPORT2
+U_CAPI URegularExpression * U_EXPORT2
uregex_openC( const char *pattern,
uint32_t flags,
UParseError *pe,
@@ -207,7 +210,7 @@ uregex_openC( const char *pattern,
* @param regexp The regular expression to be closed.
* @stable ICU 3.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_close(URegularExpression *regexp);
#if U_SHOW_CPLUSPLUS_API
@@ -247,7 +250,7 @@ U_NAMESPACE_END
* @return the cloned copy of the compiled regular expression.
* @stable ICU 3.0
*/
-U_STABLE URegularExpression * U_EXPORT2
+U_CAPI URegularExpression * U_EXPORT2
uregex_clone(const URegularExpression *regexp, UErrorCode *status);
/**
@@ -267,7 +270,7 @@ uregex_clone(const URegularExpression *regexp, UErrorCode *status);
* will remain valid until the regular expression is closed.
* @stable ICU 3.0
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
uregex_pattern(const URegularExpression *regexp,
int32_t *patLength,
UErrorCode *status);
@@ -283,7 +286,7 @@ uregex_pattern(const URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
uregex_patternUText(const URegularExpression *regexp,
UErrorCode *status);
@@ -295,7 +298,7 @@ uregex_patternUText(const URegularExpression *regexp,
* @see URegexpFlag
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_flags(const URegularExpression *regexp,
UErrorCode *status);
@@ -320,7 +323,7 @@ uregex_flags(const URegularExpression *regexp,
* @param status Receives errors detected by this function.
* @stable ICU 3.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setText(URegularExpression *regexp,
const UChar *text,
int32_t textLength,
@@ -343,7 +346,7 @@ uregex_setText(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setUText(URegularExpression *regexp,
UText *text,
UErrorCode *status);
@@ -368,7 +371,7 @@ uregex_setUText(URegularExpression *regexp,
* this regular expression.
* @stable ICU 3.0
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
uregex_getText(URegularExpression *regexp,
int32_t *textLength,
UErrorCode *status);
@@ -389,7 +392,7 @@ uregex_getText(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
uregex_getUText(URegularExpression *regexp,
UText *dest,
UErrorCode *status);
@@ -419,7 +422,7 @@ uregex_getUText(URegularExpression *regexp,
*
* @stable ICU 4.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_refreshUText(URegularExpression *regexp,
UText *text,
UErrorCode *status);
@@ -441,10 +444,10 @@ uregex_refreshUText(URegularExpression *regexp,
* @param startIndex The input string (native) index at which to begin matching, or -1
* to match the input Region.
* @param status Receives errors detected by this function.
- * @return TRUE if there is a match
+ * @return true if there is a match
* @stable ICU 3.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_matches(URegularExpression *regexp,
int32_t startIndex,
UErrorCode *status);
@@ -467,10 +470,10 @@ uregex_matches(URegularExpression *regexp,
* @param startIndex The input string (native) index at which to begin matching, or -1
* to match the input Region.
* @param status Receives errors detected by this function.
- * @return TRUE if there is a match
+ * @return true if there is a match
* @stable ICU 4.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_matches64(URegularExpression *regexp,
int64_t startIndex,
UErrorCode *status);
@@ -495,10 +498,10 @@ uregex_matches64(URegularExpression *regexp,
* @param startIndex The input string (native) index at which to begin matching, or
* -1 to match the Input Region
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if there is a match.
+ * @return true if there is a match.
* @stable ICU 3.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_lookingAt(URegularExpression *regexp,
int32_t startIndex,
UErrorCode *status);
@@ -524,10 +527,10 @@ uregex_lookingAt(URegularExpression *regexp,
* @param startIndex The input string (native) index at which to begin matching, or
* -1 to match the Input Region
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if there is a match.
+ * @return true if there is a match.
* @stable ICU 4.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_lookingAt64(URegularExpression *regexp,
int64_t startIndex,
UErrorCode *status);
@@ -548,10 +551,10 @@ uregex_lookingAt64(URegularExpression *regexp,
* @param startIndex The position (native) in the input string to begin the search, or
* -1 to search within the Input Region.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if a match is found.
+ * @return true if a match is found.
* @stable ICU 3.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_find(URegularExpression *regexp,
int32_t startIndex,
UErrorCode *status);
@@ -573,10 +576,10 @@ uregex_find(URegularExpression *regexp,
* @param startIndex The position (native) in the input string to begin the search, or
* -1 to search within the Input Region.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if a match is found.
+ * @return true if a match is found.
* @stable ICU 4.6
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_find64(URegularExpression *regexp,
int64_t startIndex,
UErrorCode *status);
@@ -590,11 +593,11 @@ uregex_find64(URegularExpression *regexp,
*
* @param regexp The compiled regular expression.
* @param status A reference to a UErrorCode to receive any errors.
- * @return TRUE if a match is found.
+ * @return true if a match is found.
* @see uregex_reset
* @stable ICU 3.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_findNext(URegularExpression *regexp,
UErrorCode *status);
@@ -605,7 +608,7 @@ uregex_findNext(URegularExpression *regexp,
* @return the number of capture groups
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_groupCount(URegularExpression *regexp,
UErrorCode *status);
@@ -625,7 +628,7 @@ uregex_groupCount(URegularExpression *regexp,
*
* @stable ICU 55
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_groupNumberFromName(URegularExpression *regexp,
const UChar *groupName,
int32_t nameLength,
@@ -649,7 +652,7 @@ uregex_groupNumberFromName(URegularExpression *regexp,
*
* @stable ICU 55
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_groupNumberFromCName(URegularExpression *regexp,
const char *groupName,
int32_t nameLength,
@@ -671,7 +674,7 @@ uregex_groupNumberFromCName(URegularExpression *regexp,
* or -1 if no applicable match.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_group(URegularExpression *regexp,
int32_t groupNum,
UChar *dest,
@@ -700,7 +703,7 @@ uregex_group(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
uregex_groupUText(URegularExpression *regexp,
int32_t groupNum,
UText *dest,
@@ -721,7 +724,7 @@ uregex_groupUText(URegularExpression *regexp,
* by the specified group.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_start(URegularExpression *regexp,
int32_t groupNum,
UErrorCode *status);
@@ -741,7 +744,7 @@ uregex_start(URegularExpression *regexp,
* by the specified group.
* @stable ICU 4.6
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
uregex_start64(URegularExpression *regexp,
int32_t groupNum,
UErrorCode *status);
@@ -759,7 +762,7 @@ uregex_start64(URegularExpression *regexp,
* @return the (native) index of the position following the last matched character.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_end(URegularExpression *regexp,
int32_t groupNum,
UErrorCode *status);
@@ -778,7 +781,7 @@ uregex_end(URegularExpression *regexp,
* @return the (native) index of the position following the last matched character.
* @stable ICU 4.6
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
uregex_end64(URegularExpression *regexp,
int32_t groupNum,
UErrorCode *status);
@@ -796,7 +799,7 @@ uregex_end64(URegularExpression *regexp,
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 3.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_reset(URegularExpression *regexp,
int32_t index,
UErrorCode *status);
@@ -815,7 +818,7 @@ uregex_reset(URegularExpression *regexp,
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_reset64(URegularExpression *regexp,
int64_t index,
UErrorCode *status);
@@ -840,7 +843,7 @@ uregex_reset64(URegularExpression *regexp,
* @param status A pointer to a UErrorCode to receive any errors.
* @stable ICU 4.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setRegion(URegularExpression *regexp,
int32_t regionStart,
int32_t regionLimit,
@@ -867,7 +870,7 @@ uregex_setRegion(URegularExpression *regexp,
* @param status A pointer to a UErrorCode to receive any errors.
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setRegion64(URegularExpression *regexp,
int64_t regionStart,
int64_t regionLimit,
@@ -887,7 +890,7 @@ uregex_setRegion64(URegularExpression *regexp,
* @param status A pointer to a UErrorCode to receive any errors.
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setRegionAndStart(URegularExpression *regexp,
int64_t regionStart,
int64_t regionLimit,
@@ -903,7 +906,7 @@ uregex_setRegionAndStart(URegularExpression *regexp,
* @return The starting (native) index of this matcher's region.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_regionStart(const URegularExpression *regexp,
UErrorCode *status);
@@ -917,7 +920,7 @@ uregex_regionStart(const URegularExpression *regexp,
* @return The starting (native) index of this matcher's region.
* @stable ICU 4.6
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
uregex_regionStart64(const URegularExpression *regexp,
UErrorCode *status);
@@ -931,7 +934,7 @@ uregex_regionStart64(const URegularExpression *regexp,
* @return The ending point (native) of this matcher's region.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_regionEnd(const URegularExpression *regexp,
UErrorCode *status);
@@ -946,7 +949,7 @@ uregex_regionEnd(const URegularExpression *regexp,
* @return The ending point (native) of this matcher's region.
* @stable ICU 4.6
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
uregex_regionEnd64(const URegularExpression *regexp,
UErrorCode *status);
@@ -957,18 +960,18 @@ uregex_regionEnd64(const URegularExpression *regexp,
*
* @param regexp The compiled regular expression.
* @param status A pointer to a UErrorCode to receive any errors.
- * @return TRUE if this matcher is using opaque bounds, false if it is not.
+ * @return true if this matcher is using opaque bounds, false if it is not.
* @stable ICU 4.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_hasTransparentBounds(const URegularExpression *regexp,
UErrorCode *status);
/**
* Sets the transparency of region bounds for this URegularExpression.
- * Invoking this function with an argument of TRUE will set matches to use transparent bounds.
- * If the boolean argument is FALSE, then opaque bounds will be used.
+ * Invoking this function with an argument of true will set matches to use transparent bounds.
+ * If the boolean argument is false, then opaque bounds will be used.
*
* Using transparent bounds, the boundaries of the matching region are transparent
* to lookahead, lookbehind, and boundary matching constructs. Those constructs can
@@ -980,11 +983,11 @@ uregex_hasTransparentBounds(const URegularExpression *regexp,
* By default, opaque bounds are used.
*
* @param regexp The compiled regular expression.
- * @param b TRUE for transparent bounds; FALSE for opaque bounds
+ * @param b true for transparent bounds; false for opaque bounds
* @param status A pointer to a UErrorCode to receive any errors.
* @stable ICU 4.0
**/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_useTransparentBounds(URegularExpression *regexp,
UBool b,
UErrorCode *status);
@@ -996,10 +999,10 @@ uregex_useTransparentBounds(URegularExpression *regexp,
*
* @param regexp The compiled regular expression.
* @param status A pointer to a UErrorCode to receive any errors.
- * @return TRUE if this matcher is using anchoring bounds.
+ * @return true if this matcher is using anchoring bounds.
* @stable ICU 4.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_hasAnchoringBounds(const URegularExpression *regexp,
UErrorCode *status);
@@ -1013,41 +1016,41 @@ uregex_hasAnchoringBounds(const URegularExpression *regexp,
* Anchoring Bounds are the default for regions.
*
* @param regexp The compiled regular expression.
- * @param b TRUE if to enable anchoring bounds; FALSE to disable them.
+ * @param b true if to enable anchoring bounds; false to disable them.
* @param status A pointer to a UErrorCode to receive any errors.
* @stable ICU 4.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_useAnchoringBounds(URegularExpression *regexp,
UBool b,
UErrorCode *status);
/**
- * Return TRUE if the most recent matching operation touched the
+ * Return true if the most recent matching operation touched the
* end of the text being processed. In this case, additional input text could
* change the results of that match.
*
* @param regexp The compiled regular expression.
* @param status A pointer to a UErrorCode to receive any errors.
- * @return TRUE if the most recent match hit the end of input
+ * @return true if the most recent match hit the end of input
* @stable ICU 4.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_hitEnd(const URegularExpression *regexp,
UErrorCode *status);
/**
- * Return TRUE the most recent match succeeded and additional input could cause
+ * Return true the most recent match succeeded and additional input could cause
* it to fail. If this function returns false and a match was found, then more input
* might change the match but the match won't be lost. If a match was not found,
* then requireEnd has no meaning.
*
* @param regexp The compiled regular expression.
* @param status A pointer to a UErrorCode to receive any errors.
- * @return TRUE if more input could cause the most recent match to no longer match.
+ * @return true if more input could cause the most recent match to no longer match.
* @stable ICU 4.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregex_requireEnd(const URegularExpression *regexp,
UErrorCode *status);
@@ -1079,7 +1082,7 @@ uregex_requireEnd(const URegularExpression *regexp,
* is still the full length of the untruncated string.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_replaceAll(URegularExpression *regexp,
const UChar *replacementText,
int32_t replacementLength,
@@ -1108,7 +1111,7 @@ uregex_replaceAll(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
uregex_replaceAllUText(URegularExpression *regexp,
UText *replacement,
UText *dest,
@@ -1138,7 +1141,7 @@ uregex_replaceAllUText(URegularExpression *regexp,
* is still the full length of the untruncated string.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_replaceFirst(URegularExpression *regexp,
const UChar *replacementText,
int32_t replacementLength,
@@ -1167,7 +1170,7 @@ uregex_replaceFirst(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
uregex_replaceFirstUText(URegularExpression *regexp,
UText *replacement,
UText *dest,
@@ -1219,7 +1222,7 @@ uregex_replaceFirstUText(URegularExpression *regexp,
* @stable ICU 3.0
*
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_appendReplacement(URegularExpression *regexp,
const UChar *replacementText,
int32_t replacementLength,
@@ -1249,7 +1252,7 @@ uregex_appendReplacement(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_appendReplacementUText(URegularExpression *regexp,
UText *replacementText,
UText *dest,
@@ -1279,7 +1282,7 @@ uregex_appendReplacementUText(URegularExpression *regexp,
*
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_appendTail(URegularExpression *regexp,
UChar **destBuf,
int32_t *destCapacity,
@@ -1303,7 +1306,7 @@ uregex_appendTail(URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE UText * U_EXPORT2
+U_CAPI UText * U_EXPORT2
uregex_appendTailUText(URegularExpression *regexp,
UText *dest,
UErrorCode *status);
@@ -1359,7 +1362,7 @@ uregex_appendTailUText(URegularExpression *regexp,
* @return The number of fields into which the input string was split.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_split( URegularExpression *regexp,
UChar *destBuf,
int32_t destCapacity,
@@ -1394,7 +1397,7 @@ uregex_split( URegularExpression *regexp,
*
* @stable ICU 4.6
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_splitUText(URegularExpression *regexp,
UText *destFields[],
int32_t destFieldsCapacity,
@@ -1422,7 +1425,7 @@ uregex_splitUText(URegularExpression *regexp,
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 4.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setTimeLimit(URegularExpression *regexp,
int32_t limit,
UErrorCode *status);
@@ -1436,7 +1439,7 @@ uregex_setTimeLimit(URegularExpression *regexp,
* @return the maximum allowed time for a match, in units of processing steps.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_getTimeLimit(const URegularExpression *regexp,
UErrorCode *status);
@@ -1460,7 +1463,7 @@ uregex_getTimeLimit(const URegularExpression *regexp,
*
* @stable ICU 4.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setStackLimit(URegularExpression *regexp,
int32_t limit,
UErrorCode *status);
@@ -1472,7 +1475,7 @@ uregex_setStackLimit(URegularExpression *regexp,
* stack size is unlimited.
* @stable ICU 4.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregex_getStackLimit(const URegularExpression *regexp,
UErrorCode *status);
@@ -1480,7 +1483,7 @@ uregex_getStackLimit(const URegularExpression *regexp,
/**
* Function pointer for a regular expression matching callback function.
* When set, a callback function will be called periodically during matching
- * operations. If the call back function returns FALSE, the matching
+ * operations. If the call back function returns false, the matching
* operation will be terminated early.
*
* Note: the callback function must not call other functions on this
@@ -1491,8 +1494,8 @@ uregex_getStackLimit(const URegularExpression *regexp,
* uregex_setMatchCallback() is called.
* @param steps the accumulated processing time, in match steps,
* for this matching operation.
- * @return TRUE to continue the matching operation.
- * FALSE to terminate the matching operation.
+ * @return true to continue the matching operation.
+ * false to terminate the matching operation.
* @stable ICU 4.0
*/
U_CDECL_BEGIN
@@ -1515,7 +1518,7 @@ U_CDECL_END
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 4.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setMatchCallback(URegularExpression *regexp,
URegexMatchCallback *callback,
const void *context,
@@ -1533,7 +1536,7 @@ uregex_setMatchCallback(URegularExpression *regexp,
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 4.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_getMatchCallback(const URegularExpression *regexp,
URegexMatchCallback **callback,
const void **context,
@@ -1554,7 +1557,7 @@ uregex_getMatchCallback(const URegularExpression *regexp,
* to be attempted, giving the application the opportunity to terminate a long-running
* find operation.
*
- * If the call back function returns FALSE, the find operation will be terminated early.
+ * If the call back function returns false, the find operation will be terminated early.
*
* Note: the callback function must not call other functions on this
* URegularExpression
@@ -1565,8 +1568,8 @@ uregex_getMatchCallback(const URegularExpression *regexp,
* @param matchIndex the next index at which a match attempt will be attempted for this
* find operation. If this callback interrupts the search, this is the
* index at which a find/findNext operation may be re-initiated.
- * @return TRUE to continue the matching operation.
- * FALSE to terminate the matching operation.
+ * @return true to continue the matching operation.
+ * false to terminate the matching operation.
* @stable ICU 4.6
*/
U_CDECL_BEGIN
@@ -1587,7 +1590,7 @@ U_CDECL_END
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_setFindProgressCallback(URegularExpression *regexp,
URegexFindProgressCallback *callback,
const void *context,
@@ -1604,7 +1607,7 @@ uregex_setFindProgressCallback(URegularExpression *regexp,
* @param status A reference to a UErrorCode to receive any errors.
* @stable ICU 4.6
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uregex_getFindProgressCallback(const URegularExpression *regexp,
URegexFindProgressCallback **callback,
const void **context,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h
index a5de49674b5..25472ae6405 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h
@@ -133,7 +133,7 @@ typedef struct URegion URegion; /**< @stable ICU 52 */
* (U_ILLEGAL_ARGUMENT_ERROR).
* @stable ICU 52
*/
-U_STABLE const URegion* U_EXPORT2
+U_CAPI const URegion* U_EXPORT2
uregion_getRegionFromCode(const char *regionCode, UErrorCode *status);
/**
@@ -141,7 +141,7 @@ uregion_getRegionFromCode(const char *regionCode, UErrorCode *status);
* code is not recognized, the appropriate error code will be set (U_ILLEGAL_ARGUMENT_ERROR).
* @stable ICU 52
*/
-U_STABLE const URegion* U_EXPORT2
+U_CAPI const URegion* U_EXPORT2
uregion_getRegionFromNumericCode (int32_t code, UErrorCode *status);
/**
@@ -149,14 +149,14 @@ uregion_getRegionFromNumericCode (int32_t code, UErrorCode *status);
* The enumeration must be closed with with uenum_close().
* @stable ICU 52
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uregion_getAvailable(URegionType type, UErrorCode *status);
/**
* Returns true if the specified uregion is equal to the specified otherRegion.
* @stable ICU 52
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregion_areEqual(const URegion* uregion, const URegion* otherRegion);
/**
@@ -165,7 +165,7 @@ uregion_areEqual(const URegion* uregion, const URegion* otherRegion);
* this method with region "IT" (Italy) returns the URegion for "039" (Southern Europe).
* @stable ICU 52
*/
-U_STABLE const URegion* U_EXPORT2
+U_CAPI const URegion* U_EXPORT2
uregion_getContainingRegion(const URegion* uregion);
/**
@@ -177,7 +177,7 @@ uregion_getContainingRegion(const URegion* uregion);
* URegion "150" (Europe).
* @stable ICU 52
*/
-U_STABLE const URegion* U_EXPORT2
+U_CAPI const URegion* U_EXPORT2
uregion_getContainingRegionOfType(const URegion* uregion, URegionType type);
/**
@@ -190,7 +190,7 @@ uregion_getContainingRegionOfType(const URegion* uregion, URegionType type);
* and "155" (Western Europe). The enumeration must be closed with with uenum_close().
* @stable ICU 52
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uregion_getContainedRegions(const URegion* uregion, UErrorCode *status);
/**
@@ -202,7 +202,7 @@ uregion_getContainedRegions(const URegion* uregion, UErrorCode *status);
* etc. The enumeration must be closed with with uenum_close().
* @stable ICU 52
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uregion_getContainedRegionsOfType(const URegion* uregion, URegionType type, UErrorCode *status);
/**
@@ -210,7 +210,7 @@ uregion_getContainedRegionsOfType(const URegion* uregion, URegionType type, UErr
* hierarchy.
* @stable ICU 52
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
uregion_contains(const URegion* uregion, const URegion* otherRegion);
/**
@@ -221,14 +221,14 @@ uregion_contains(const URegion* uregion, const URegion* otherRegion);
* "AZ" (Azerbaijan), etc... The enumeration must be closed with with uenum_close().
* @stable ICU 52
*/
-U_STABLE UEnumeration* U_EXPORT2
+U_CAPI UEnumeration* U_EXPORT2
uregion_getPreferredValues(const URegion* uregion, UErrorCode *status);
/**
* Returns the specified uregion's canonical code.
* @stable ICU 52
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
uregion_getRegionCode(const URegion* uregion);
/**
@@ -236,14 +236,14 @@ uregion_getRegionCode(const URegion* uregion);
* for the specified uregion.
* @stable ICU 52
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uregion_getNumericCode(const URegion* uregion);
/**
* Returns the URegionType of the specified uregion.
* @stable ICU 52
*/
-U_STABLE URegionType U_EXPORT2
+U_CAPI URegionType U_EXPORT2
uregion_getType(const URegion* uregion);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h
index 0724d385594..3c448900437 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h
@@ -16,9 +16,12 @@
#include "unicode/unum.h"
#include "unicode/udisplaycontext.h"
-#include "unicode/localpointer.h"
#include "unicode/uformattedvalue.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset.
@@ -175,25 +178,23 @@ typedef enum URelativeDateTimeUnit {
#endif /* U_HIDE_DEPRECATED_API */
} URelativeDateTimeUnit;
-#ifndef U_HIDE_DRAFT_API
/**
* FieldPosition and UFieldPosition selectors for format fields
* defined by RelativeDateTimeFormatter.
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef enum URelativeDateTimeFormatterField {
/**
* Represents a literal text string, like "tomorrow" or "days ago".
- * @draft ICU 64
+ * @stable ICU 64
*/
UDAT_REL_LITERAL_FIELD,
/**
* Represents a number quantity, like "3" in "3 days ago".
- * @draft ICU 64
+ * @stable ICU 64
*/
UDAT_REL_NUMERIC_FIELD,
} URelativeDateTimeFormatterField;
-#endif // U_HIDE_DRAFT_API
/**
@@ -236,7 +237,7 @@ typedef struct URelativeDateTimeFormatter URelativeDateTimeFormatter; /**< C ty
* or NULL if an error occurred.
* @stable ICU 57
*/
-U_STABLE URelativeDateTimeFormatter* U_EXPORT2
+U_CAPI URelativeDateTimeFormatter* U_EXPORT2
ureldatefmt_open( const char* locale,
UNumberFormat* nfToAdopt,
UDateRelativeDateTimeFormatterStyle width,
@@ -249,14 +250,13 @@ ureldatefmt_open( const char* locale,
* The URelativeDateTimeFormatter object to close.
* @stable ICU 57
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
ureldatefmt_close(URelativeDateTimeFormatter *reldatefmt);
-#ifndef U_HIDE_DRAFT_API
struct UFormattedRelativeDateTime;
/**
* Opaque struct to contain the results of a URelativeDateTimeFormatter operation.
- * @draft ICU 64
+ * @stable ICU 64
*/
typedef struct UFormattedRelativeDateTime UFormattedRelativeDateTime;
@@ -267,9 +267,9 @@ typedef struct UFormattedRelativeDateTime UFormattedRelativeDateTime;
*
* @param ec Set if an error occurs.
* @return A pointer needing ownership.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT UFormattedRelativeDateTime* U_EXPORT2
+U_CAPI UFormattedRelativeDateTime* U_EXPORT2
ureldatefmt_openResult(UErrorCode* ec);
/**
@@ -284,20 +284,19 @@ ureldatefmt_openResult(UErrorCode* ec);
* @param ufrdt The object containing the formatted string.
* @param ec Set if an error occurs.
* @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT const UFormattedValue* U_EXPORT2
+U_CAPI const UFormattedValue* U_EXPORT2
ureldatefmt_resultAsValue(const UFormattedRelativeDateTime* ufrdt, UErrorCode* ec);
/**
* Releases the UFormattedRelativeDateTime created by ureldatefmt_openResult.
*
* @param ufrdt The object to release.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ureldatefmt_closeResult(UFormattedRelativeDateTime* ufrdt);
-#endif /* U_HIDE_DRAFT_API */
#if U_SHOW_CPLUSPLUS_API
@@ -315,7 +314,6 @@ U_NAMESPACE_BEGIN
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDateTimeFormatter, ureldatefmt_close);
-#ifndef U_HIDE_DRAFT_API
/**
* \class LocalUFormattedRelativeDateTimePointer
* "Smart pointer" class, closes a UFormattedRelativeDateTime via ureldatefmt_closeResult().
@@ -323,10 +321,9 @@ U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDat
*
* @see LocalPointerBase
* @see LocalPointer
- * @draft ICU 64
+ * @stable ICU 64
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedRelativeDateTimePointer, UFormattedRelativeDateTime, ureldatefmt_closeResult);
-#endif /* U_HIDE_DRAFT_API */
U_NAMESPACE_END
@@ -360,7 +357,7 @@ U_NAMESPACE_END
* than resultCapacity, in which case an error is returned.
* @stable ICU 57
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt,
double offset,
URelativeDateTimeUnit unit,
@@ -368,7 +365,6 @@ ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt,
int32_t resultCapacity,
UErrorCode* status);
-#ifndef U_HIDE_DRAFT_API
/**
* Format a combination of URelativeDateTimeUnit and numeric
* offset using a numeric style, e.g. "1 week ago", "in 1 week",
@@ -390,16 +386,15 @@ ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt,
* A pointer to a UErrorCode to receive any errors. In
* case of error status, the contents of result are
* undefined.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ureldatefmt_formatNumericToResult(
const URelativeDateTimeFormatter* reldatefmt,
double offset,
URelativeDateTimeUnit unit,
UFormattedRelativeDateTime* result,
UErrorCode* status);
-#endif /* U_HIDE_DRAFT_API */
/**
* Format a combination of URelativeDateTimeUnit and numeric offset
@@ -429,7 +424,7 @@ ureldatefmt_formatNumericToResult(
* than resultCapacity, in which case an error is returned.
* @stable ICU 57
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt,
double offset,
URelativeDateTimeUnit unit,
@@ -437,7 +432,6 @@ ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt,
int32_t resultCapacity,
UErrorCode* status);
-#ifndef U_HIDE_DRAFT_API
/**
* Format a combination of URelativeDateTimeUnit and numeric offset
* using a text style if possible, e.g. "last week", "this week",
@@ -462,16 +456,15 @@ ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt,
* A pointer to a UErrorCode to receive any errors. In
* case of error status, the contents of result are
* undefined.
- * @draft ICU 64
+ * @stable ICU 64
*/
-U_DRAFT void U_EXPORT2
+U_CAPI void U_EXPORT2
ureldatefmt_formatToResult(
const URelativeDateTimeFormatter* reldatefmt,
double offset,
URelativeDateTimeUnit unit,
UFormattedRelativeDateTime* result,
UErrorCode* status);
-#endif /* U_HIDE_DRAFT_API */
/**
* Combines a relative date string and a time string in this object's
@@ -502,7 +495,7 @@ ureldatefmt_formatToResult(
* in which case an error is returned.
* @stable ICU 57
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ureldatefmt_combineDateAndTime( const URelativeDateTimeFormatter* reldatefmt,
const UChar * relativeDateString,
int32_t relativeDateStringLen,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
index 080528e3474..65747cb1ed4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
@@ -15,18 +15,21 @@
#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION
-#include "unicode/localpointer.h"
#include "unicode/ucol.h"
#include "unicode/ucoleitr.h"
#include "unicode/ubrk.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/**
* \file
* \brief C API: StringSearch
*
* C APIs for an engine that provides language-sensitive text searching based
- * on the comparison rules defined in a <tt>UCollator</tt> data struct,
- * see <tt>ucol.h</tt>. This ensures that language eccentricity can be
+ * on the comparison rules defined in a <code>UCollator</code> data struct,
+ * see <code>ucol.h</code>. This ensures that language eccentricity can be
* handled, e.g. for the German collator, characters &szlig; and SS will be matched
* if case is chosen to be ignored.
* See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
@@ -54,18 +57,18 @@
* Option 2. will be the default.
* <p>
* This search has APIs similar to that of other text iteration mechanisms
- * such as the break iterators in <tt>ubrk.h</tt>. Using these
+ * such as the break iterators in <code>ubrk.h</code>. Using these
* APIs, it is easy to scan through text looking for all occurrences of
* a given pattern. This search iterator allows changing of direction by
- * calling a <tt>reset</tt> followed by a <tt>next</tt> or <tt>previous</tt>.
- * Though a direction change can occur without calling <tt>reset</tt> first,
+ * calling a <code>reset</code> followed by a <code>next</code> or <code>previous</code>.
+ * Though a direction change can occur without calling <code>reset</code> first,
* this operation comes with some speed penalty.
* Generally, match results in the forward direction will match the result
* matches in the backwards direction in the reverse order
* <p>
- * <tt>usearch.h</tt> provides APIs to specify the starting position
- * within the text string to be searched, e.g. <tt>usearch_setOffset</tt>,
- * <tt>usearch_preceding</tt> and <tt>usearch_following</tt>. Since the
+ * <code>usearch.h</code> provides APIs to specify the starting position
+ * within the text string to be searched, e.g. <code>usearch_setOffset</code>,
+ * <code>usearch_preceding</code> and <code>usearch_following</code>. Since the
* starting position will be set as it is specified, please take note that
* there are some dangerous positions which the search may render incorrect
* results:
@@ -101,7 +104,7 @@
* Though collator attributes will be taken into consideration while
* performing matches, there are no APIs here for setting and getting the
* attributes. These attributes can be set by getting the collator
- * from <tt>usearch_getCollator</tt> and using the APIs in <tt>ucol.h</tt>.
+ * from <code>usearch_getCollator</code> and using the APIs in <code>ucol.h</code>.
* Lastly to update String Search to the new collator attributes,
* usearch_reset() has to be called.
* <p>
@@ -277,9 +280,13 @@ typedef enum {
/* open and close ------------------------------------------------------ */
/**
-* Creating a search iterator data struct using the argument locale language
+* Creates a String Search iterator data struct using the argument locale language
* rule set. A collator will be created in the process, which will be owned by
-* this search and will be deleted in <tt>usearch_close</tt>.
+* this String Search and will be deleted in <code>usearch_close</code>.
+*
+* The UStringSearch retains a pointer to both the pattern and text strings.
+* The caller must not modify or delete them while using the UStringSearch.
+*
* @param pattern for matching
* @param patternlength length of the pattern, -1 for null-termination
* @param text text string
@@ -288,9 +295,9 @@ typedef enum {
* @param breakiter A BreakIterator that will be used to restrict the points
* at which matches are detected. If a match is found, but
* the match's start or end index is not a boundary as
-* determined by the <tt>BreakIterator</tt>, the match will
+* determined by the <code>BreakIterator</code>, the match will
* be rejected and another will be searched for.
-* If this parameter is <tt>NULL</tt>, no break detection is
+* If this parameter is <code>NULL</code>, no break detection is
* attempted.
* @param status for errors if it occurs. If pattern or text is NULL, or if
* patternlength or textlength is 0 then an
@@ -298,54 +305,59 @@ typedef enum {
* @return search iterator data structure, or NULL if there is an error.
* @stable ICU 2.4
*/
-U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern,
- int32_t patternlength,
- const UChar *text,
+U_CAPI UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern,
+ int32_t patternlength,
+ const UChar *text,
int32_t textlength,
const char *locale,
UBreakIterator *breakiter,
UErrorCode *status);
/**
-* Creating a search iterator data struct using the argument collator language
-* rule set. Note, user retains the ownership of this collator, thus the
+* Creates a String Search iterator data struct using the argument collator language
+* rule set. Note, user retains the ownership of this collator, thus the
* responsibility of deletion lies with the user.
-* NOTE: string search cannot be instantiated from a collator that has
-* collate digits as numbers (CODAN) turned on.
+
+* NOTE: String Search cannot be instantiated from a collator that has
+* collate digits as numbers (CODAN) turned on (UCOL_NUMERIC_COLLATION).
+*
+* The UStringSearch retains a pointer to both the pattern and text strings.
+* The caller must not modify or delete them while using the UStringSearch.
+*
* @param pattern for matching
* @param patternlength length of the pattern, -1 for null-termination
* @param text text string
* @param textlength length of the text string, -1 for null-termination
* @param collator used for the language rules
* @param breakiter A BreakIterator that will be used to restrict the points
-* at which matches are detected. If a match is found, but
-* the match's start or end index is not a boundary as
-* determined by the <tt>BreakIterator</tt>, the match will
-* be rejected and another will be searched for.
-* If this parameter is <tt>NULL</tt>, no break detection is
+* at which matches are detected. If a match is found, but
+* the match's start or end index is not a boundary as
+* determined by the <code>BreakIterator</code>, the match will
+* be rejected and another will be searched for.
+* If this parameter is <code>NULL</code>, no break detection is
* attempted.
-* @param status for errors if it occurs. If collator, pattern or text is NULL,
-* or if patternlength or textlength is 0 then an
+* @param status for errors if it occurs. If collator, pattern or text is NULL,
+* or if patternlength or textlength is 0 then an
* U_ILLEGAL_ARGUMENT_ERROR is returned.
* @return search iterator data structure, or NULL if there is an error.
* @stable ICU 2.4
*/
-U_STABLE UStringSearch * U_EXPORT2 usearch_openFromCollator(
- const UChar *pattern,
+U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
+ const UChar *pattern,
int32_t patternlength,
- const UChar *text,
+ const UChar *text,
int32_t textlength,
const UCollator *collator,
UBreakIterator *breakiter,
UErrorCode *status);
/**
-* Destroying and cleaning up the search iterator data struct.
-* If a collator is created in <tt>usearch_open</tt>, it will be destroyed here.
-* @param searchiter data struct to clean up
-* @stable ICU 2.4
-*/
-U_STABLE void U_EXPORT2 usearch_close(UStringSearch *searchiter);
+ * Destroys and cleans up the String Search iterator data struct.
+ * If a collator was created in <code>usearch_open</code>, then it will be destroyed here.
+ * @param searchiter The UStringSearch to clean up
+ * @stable ICU 2.4
+ */
+U_CAPI void U_EXPORT2 usearch_close(UStringSearch *searchiter);
#if U_SHOW_CPLUSPLUS_API
@@ -383,24 +395,24 @@ U_NAMESPACE_END
* @param status error status if any.
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,
- int32_t position,
+U_CAPI void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,
+ int32_t position,
UErrorCode *status);
/**
* Return the current index in the string text being searched.
* If the iteration has gone past the end of the text (or past the beginning
-* for a backwards search), <tt>USEARCH_DONE</tt> is returned.
+* for a backwards search), <code>USEARCH_DONE</code> is returned.
* @param strsrch search iterator data struct
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
+U_CAPI int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
/**
* Sets the text searching attributes located in the enum USearchAttribute
* with values from the enum USearchAttributeValue.
-* <tt>USEARCH_DEFAULT</tt> can be used for all attributes for resetting.
+* <code>USEARCH_DEFAULT</code> can be used for all attributes for resetting.
* @param strsrch search iterator data struct
* @param attribute text attribute to be set
* @param value text attribute value
@@ -408,7 +420,7 @@ U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch);
* @see #usearch_getAttribute
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch *strsrch,
+U_CAPI void U_EXPORT2 usearch_setAttribute(UStringSearch *strsrch,
USearchAttribute attribute,
USearchAttributeValue value,
UErrorCode *status);
@@ -421,19 +433,19 @@ U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch *strsrch,
* @see #usearch_setAttribute
* @stable ICU 2.4
*/
-U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute(
+U_CAPI USearchAttributeValue U_EXPORT2 usearch_getAttribute(
const UStringSearch *strsrch,
USearchAttribute attribute);
/**
* Returns the index to the match in the text string that was searched.
* This call returns a valid result only after a successful call to
-* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>,
-* or <tt>usearch_last</tt>.
+* <code>usearch_first</code>, <code>usearch_next</code>, <code>usearch_previous</code>,
+* or <code>usearch_last</code>.
* Just after construction, or after a searching method returns
-* <tt>USEARCH_DONE</tt>, this method will return <tt>USEARCH_DONE</tt>.
+* <code>USEARCH_DONE</code>, this method will return <code>USEARCH_DONE</code>.
* <p>
-* Use <tt>usearch_getMatchedLength</tt> to get the matched string length.
+* Use <code>usearch_getMatchedLength</code> to get the matched string length.
* @param strsrch search iterator data struct
* @return index to a substring within the text string that is being
* searched.
@@ -444,16 +456,16 @@ U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute(
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_getMatchedStart(
+U_CAPI int32_t U_EXPORT2 usearch_getMatchedStart(
const UStringSearch *strsrch);
/**
* Returns the length of text in the string which matches the search pattern.
* This call returns a valid result only after a successful call to
-* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>,
-* or <tt>usearch_last</tt>.
+* <code>usearch_first</code>, <code>usearch_next</code>, <code>usearch_previous</code>,
+* or <code>usearch_last</code>.
* Just after construction, or after a searching method returns
-* <tt>USEARCH_DONE</tt>, this method will return 0.
+* <code>USEARCH_DONE</code>, this method will return 0.
* @param strsrch search iterator data struct
* @return The length of the match in the string text, or 0 if there is no
* match currently.
@@ -464,22 +476,22 @@ U_STABLE int32_t U_EXPORT2 usearch_getMatchedStart(
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_getMatchedLength(
+U_CAPI int32_t U_EXPORT2 usearch_getMatchedLength(
const UStringSearch *strsrch);
/**
* Returns the text that was matched by the most recent call to
-* <tt>usearch_first</tt>, <tt>usearch_next</tt>, <tt>usearch_previous</tt>,
-* or <tt>usearch_last</tt>.
+* <code>usearch_first</code>, <code>usearch_next</code>, <code>usearch_previous</code>,
+* or <code>usearch_last</code>.
* If the iterator is not pointing at a valid match (e.g. just after
-* construction or after <tt>USEARCH_DONE</tt> has been returned, returns
+* construction or after <code>USEARCH_DONE</code> has been returned, returns
* an empty string. If result is not large enough to store the matched text,
* result will be filled with the partial text and an U_BUFFER_OVERFLOW_ERROR
* will be returned in status. result will be null-terminated whenever
* possible. If the buffer fits the matched text exactly, a null-termination
* is not possible, then a U_STRING_NOT_TERMINATED_ERROR set in status.
* Pre-flighting can be either done with length = 0 or the API
-* <tt>usearch_getMatchedLength</tt>.
+* <code>usearch_getMatchedLength</code>.
* @param strsrch search iterator data struct
* @param result UChar buffer to store the matched string
* @param resultCapacity length of the result buffer
@@ -492,7 +504,7 @@ U_STABLE int32_t U_EXPORT2 usearch_getMatchedLength(
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch,
UChar *result,
int32_t resultCapacity,
UErrorCode *status);
@@ -506,38 +518,42 @@ U_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch,
* @param breakiter A BreakIterator that will be used to restrict the points
* at which matches are detected. If a match is found, but
* the match's start or end index is not a boundary as
-* determined by the <tt>BreakIterator</tt>, the match will
+* determined by the <code>BreakIterator</code>, the match will
* be rejected and another will be searched for.
-* If this parameter is <tt>NULL</tt>, no break detection is
+* If this parameter is <code>NULL</code>, no break detection is
* attempted.
* @param status for errors if it occurs
* @see #usearch_getBreakIterator
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch *strsrch,
+U_CAPI void U_EXPORT2 usearch_setBreakIterator(UStringSearch *strsrch,
UBreakIterator *breakiter,
UErrorCode *status);
/**
* Returns the BreakIterator that is used to restrict the points at which
* matches are detected. This will be the same object that was passed to the
-* constructor or to <tt>usearch_setBreakIterator</tt>. Note that
-* <tt>NULL</tt>
+* constructor or to <code>usearch_setBreakIterator</code>. Note that
+* <code>NULL</code>
* is a legal value; it means that break detection should not be attempted.
* @param strsrch search iterator data struct
* @return break iterator used
* @see #usearch_setBreakIterator
* @stable ICU 2.4
*/
-U_STABLE const UBreakIterator * U_EXPORT2 usearch_getBreakIterator(
+U_CAPI const UBreakIterator * U_EXPORT2 usearch_getBreakIterator(
const UStringSearch *strsrch);
#endif
-
+
/**
* Set the string text to be searched. Text iteration will hence begin at the
* start of the text string. This method is useful if you want to re-use an
* iterator to search for the same pattern within a different body of text.
+*
+* The UStringSearch retains a pointer to the text string. The caller must not
+* modify or delete the string while using the UStringSearch.
+*
* @param strsrch search iterator data struct
* @param text new string to look for match
* @param textlength length of the new string, -1 for null-termination
@@ -547,7 +563,7 @@ U_STABLE const UBreakIterator * U_EXPORT2 usearch_getBreakIterator(
* @see #usearch_getText
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_setText( UStringSearch *strsrch,
+U_CAPI void U_EXPORT2 usearch_setText( UStringSearch *strsrch,
const UChar *text,
int32_t textlength,
UErrorCode *status);
@@ -560,20 +576,20 @@ U_STABLE void U_EXPORT2 usearch_setText( UStringSearch *strsrch,
* @see #usearch_setText
* @stable ICU 2.4
*/
-U_STABLE const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch,
+U_CAPI const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch,
int32_t *length);
/**
* Gets the collator used for the language rules.
* <p>
-* Deleting the returned <tt>UCollator</tt> before calling
-* <tt>usearch_close</tt> would cause the string search to fail.
-* <tt>usearch_close</tt> will delete the collator if this search owns it.
+* Deleting the returned <code>UCollator</code> before calling
+* <code>usearch_close</code> would cause the string search to fail.
+* <code>usearch_close</code> will delete the collator if this search owns it.
* @param strsrch search iterator data struct
* @return collator
* @stable ICU 2.4
*/
-U_STABLE UCollator * U_EXPORT2 usearch_getCollator(
+U_CAPI UCollator * U_EXPORT2 usearch_getCollator(
const UStringSearch *strsrch);
/**
@@ -586,7 +602,7 @@ U_STABLE UCollator * U_EXPORT2 usearch_getCollator(
* @param status for errors if it occurs
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
+U_CAPI void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
const UCollator *collator,
UErrorCode *status);
@@ -594,6 +610,10 @@ U_STABLE void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
* Sets the pattern used for matching.
* Internal data like the Boyer Moore table will be recalculated, but the
* iterator's position is unchanged.
+*
+* The UStringSearch retains a pointer to the pattern string. The caller must not
+* modify or delete the string while using the UStringSearch.
+*
* @param strsrch search iterator data struct
* @param pattern string
* @param patternlength pattern length, -1 for null-terminated string
@@ -602,7 +622,7 @@ U_STABLE void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
* done to strsrch.
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch,
+U_CAPI void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch,
const UChar *pattern,
int32_t patternlength,
UErrorCode *status);
@@ -615,7 +635,7 @@ U_STABLE void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch,
* @return pattern string
* @stable ICU 2.4
*/
-U_STABLE const UChar * U_EXPORT2 usearch_getPattern(
+U_CAPI const UChar * U_EXPORT2 usearch_getPattern(
const UStringSearch *strsrch,
int32_t *length);
@@ -625,28 +645,28 @@ U_STABLE const UChar * U_EXPORT2 usearch_getPattern(
* Returns the first index at which the string text matches the search
* pattern.
* The iterator is adjusted so that its current index (as returned by
-* <tt>usearch_getOffset</tt>) is the match position if one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>.
+* <code>usearch_getOffset</code>) is the match position if one was found.
+* If a match is not found, <code>USEARCH_DONE</code> will be returned and
+* the iterator will be adjusted to the index <code>USEARCH_DONE</code>.
* @param strsrch search iterator data struct
* @param status for errors if it occurs
* @return The character index of the first match, or
-* <tt>USEARCH_DONE</tt> if there are no matches.
+* <code>USEARCH_DONE</code> if there are no matches.
* @see #usearch_getOffset
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch,
UErrorCode *status);
/**
-* Returns the first index equal or greater than <tt>position</tt> at which
+* Returns the first index equal or greater than <code>position</code> at which
* the string text
* matches the search pattern. The iterator is adjusted so that its current
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
+* index (as returned by <code>usearch_getOffset</code>) is the match position if
* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
+* If a match is not found, <code>USEARCH_DONE</code> will be returned and
+* the iterator will be adjusted to the index <code>USEARCH_DONE</code>
* <p>
* Search positions that may render incorrect results are highlighted in the
* header comments. If position is less than or greater than the text range
@@ -654,60 +674,60 @@ U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch,
* @param strsrch search iterator data struct
* @param position to start the search at
* @param status for errors if it occurs
-* @return The character index of the first match following <tt>pos</tt>,
-* or <tt>USEARCH_DONE</tt> if there are no matches.
+* @return The character index of the first match following <code>pos</code>,
+* or <code>USEARCH_DONE</code> if there are no matches.
* @see #usearch_getOffset
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch,
int32_t position,
UErrorCode *status);
/**
* Returns the last index in the target text at which it matches the search
* pattern. The iterator is adjusted so that its current
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
+* index (as returned by <code>usearch_getOffset</code>) is the match position if
* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>.
+* If a match is not found, <code>USEARCH_DONE</code> will be returned and
+* the iterator will be adjusted to the index <code>USEARCH_DONE</code>.
* @param strsrch search iterator data struct
* @param status for errors if it occurs
-* @return The index of the first match, or <tt>USEARCH_DONE</tt> if there
+* @return The index of the first match, or <code>USEARCH_DONE</code> if there
* are no matches.
* @see #usearch_getOffset
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch,
UErrorCode *status);
/**
-* Returns the first index less than <tt>position</tt> at which the string text
+* Returns the first index less than <code>position</code> at which the string text
* matches the search pattern. The iterator is adjusted so that its current
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
+* index (as returned by <code>usearch_getOffset</code>) is the match position if
* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
+* If a match is not found, <code>USEARCH_DONE</code> will be returned and
+* the iterator will be adjusted to the index <code>USEARCH_DONE</code>
* <p>
* Search positions that may render incorrect results are highlighted in the
* header comments. If position is less than or greater than the text range
* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned.
* <p>
-* When <tt>USEARCH_OVERLAP</tt> option is off, the last index of the
-* result match is always less than <tt>position</tt>.
-* When <tt>USERARCH_OVERLAP</tt> is on, the result match may span across
-* <tt>position</tt>.
+* When <code>USEARCH_OVERLAP</code> option is off, the last index of the
+* result match is always less than <code>position</code>.
+* When <code>USERARCH_OVERLAP</code> is on, the result match may span across
+* <code>position</code>.
* @param strsrch search iterator data struct
* @param position index position the search is to begin at
* @param status for errors if it occurs
-* @return The character index of the first match preceding <tt>pos</tt>,
-* or <tt>USEARCH_DONE</tt> if there are no matches.
+* @return The character index of the first match preceding <code>pos</code>,
+* or <code>USEARCH_DONE</code> if there are no matches.
* @see #usearch_getOffset
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch,
int32_t position,
UErrorCode *status);
@@ -715,40 +735,40 @@ U_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch,
* Returns the index of the next point at which the string text matches the
* search pattern, starting from the current position.
* The iterator is adjusted so that its current
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
+* index (as returned by <code>usearch_getOffset</code>) is the match position if
* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
+* If a match is not found, <code>USEARCH_DONE</code> will be returned and
+* the iterator will be adjusted to the index <code>USEARCH_DONE</code>
* @param strsrch search iterator data struct
* @param status for errors if it occurs
* @return The index of the next match after the current position, or
-* <tt>USEARCH_DONE</tt> if there are no more matches.
+* <code>USEARCH_DONE</code> if there are no more matches.
* @see #usearch_first
* @see #usearch_getOffset
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
UErrorCode *status);
/**
* Returns the index of the previous point at which the string text matches
* the search pattern, starting at the current position.
* The iterator is adjusted so that its current
-* index (as returned by <tt>usearch_getOffset</tt>) is the match position if
+* index (as returned by <code>usearch_getOffset</code>) is the match position if
* one was found.
-* If a match is not found, <tt>USEARCH_DONE</tt> will be returned and
-* the iterator will be adjusted to the index <tt>USEARCH_DONE</tt>
+* If a match is not found, <code>USEARCH_DONE</code> will be returned and
+* the iterator will be adjusted to the index <code>USEARCH_DONE</code>
* @param strsrch search iterator data struct
* @param status for errors if it occurs
* @return The index of the previous match before the current position,
-* or <tt>USEARCH_DONE</tt> if there are no more matches.
+* or <code>USEARCH_DONE</code> if there are no more matches.
* @see #usearch_last
* @see #usearch_getOffset
* @see #USEARCH_DONE
* @stable ICU 2.4
*/
-U_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
+U_CAPI int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
UErrorCode *status);
/**
@@ -761,7 +781,7 @@ U_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
* @see #usearch_first
* @stable ICU 2.4
*/
-U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch);
+U_CAPI void U_EXPORT2 usearch_reset(UStringSearch *strsrch);
#ifndef U_HIDE_INTERNAL_API
/**
@@ -814,11 +834,11 @@ U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch);
* A value of -1 will be returned if no match was found.
*
* @param status Report any errors. Note that no match found is not an error.
- * @return TRUE if a match was found, FALSE otherwise.
+ * @return true if a match was found, false otherwise.
*
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
+U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
int32_t startIdx,
int32_t *matchStart,
int32_t *matchLimit,
@@ -874,11 +894,11 @@ U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
* A value of -1 will be returned if no match was found.
*
* @param status Report any errors. Note that no match found is not an error.
- * @return TRUE if a match was found, FALSE otherwise.
+ * @return true if a match was found, false otherwise.
*
* @internal
*/
-U_INTERNAL UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
+U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
int32_t startIdx,
int32_t *matchStart,
int32_t *matchLimit,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
index 63a13387b06..7680c687ce4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
@@ -22,12 +22,12 @@
#include "unicode/utypes.h"
#include "unicode/uset.h"
#include "unicode/parseerr.h"
-#include "unicode/localpointer.h"
#if !UCONFIG_NO_NORMALIZATION
#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
#include "unicode/unistr.h"
#include "unicode/uniset.h"
#endif
@@ -154,10 +154,10 @@
* UChar* skel = (UChar*) malloc(++len * sizeof(UChar));
* status = U_ZERO_ERROR;
* uspoof_getSkeleton(sc, 0, str, -1, skel, len, &status);
- * UBool result = FALSE;
+ * UBool result = false;
* for (size_t i=0; i<DICTIONARY_LENGTH; i++) {
* result = u_strcmp(skel, skeletons[i]) == 0;
- * if (result == TRUE) { break; }
+ * if (result == true) { break; }
* }
* // Has confusable in dictionary: 1 (status: U_ZERO_ERROR)
* printf("Has confusable in dictionary: %d (status: %s)\n", result, u_errorName(status));
@@ -601,7 +601,7 @@ typedef enum USpoofChecks {
* @return the newly created Spoof Checker
* @stable ICU 4.2
*/
-U_STABLE USpoofChecker * U_EXPORT2
+U_CAPI USpoofChecker * U_EXPORT2
uspoof_open(UErrorCode *status);
@@ -626,7 +626,7 @@ uspoof_open(UErrorCode *status);
* @see uspoof_serialize
* @stable ICU 4.2
*/
-U_STABLE USpoofChecker * U_EXPORT2
+U_CAPI USpoofChecker * U_EXPORT2
uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLength,
UErrorCode *pErrorCode);
@@ -660,7 +660,7 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng
* @return A spoof checker that uses the rules from the input files.
* @stable ICU 4.2
*/
-U_STABLE USpoofChecker * U_EXPORT2
+U_CAPI USpoofChecker * U_EXPORT2
uspoof_openFromSource(const char *confusables, int32_t confusablesLen,
const char *confusablesWholeScript, int32_t confusablesWholeScriptLen,
int32_t *errType, UParseError *pe, UErrorCode *status);
@@ -671,7 +671,7 @@ uspoof_openFromSource(const char *confusables, int32_t confusablesLen,
* its implementation.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_close(USpoofChecker *sc);
/**
@@ -683,7 +683,7 @@ uspoof_close(USpoofChecker *sc);
* @return
* @stable ICU 4.2
*/
-U_STABLE USpoofChecker * U_EXPORT2
+U_CAPI USpoofChecker * U_EXPORT2
uspoof_clone(const USpoofChecker *sc, UErrorCode *status);
@@ -691,8 +691,10 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status);
* Specify the bitmask of checks that will be performed by {@link uspoof_check}. Calling this method
* overwrites any checks that may have already been enabled. By default, all checks are enabled.
*
- * To enable specific checks and disable all others, the "whitelisted" checks should be ORed together. For
- * example, to fail strings containing characters outside of the set specified by {@link uspoof_setAllowedChars} and
+ * To enable specific checks and disable all others,
+ * OR together only the bit constants for the desired checks.
+ * For example, to fail strings containing characters outside of
+ * the set specified by {@link uspoof_setAllowedChars} and
* also strings that contain digits from mixed numbering systems:
*
* <pre>
@@ -701,8 +703,9 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status);
* }
* </pre>
*
- * To disable specific checks and enable all others, the "blacklisted" checks should be ANDed away from
- * ALL_CHECKS. For example, if you are not planning to use the {@link uspoof_areConfusable} functionality,
+ * To disable specific checks and enable all others,
+ * start with ALL_CHECKS and "AND away" the not-desired checks.
+ * For example, if you are not planning to use the {@link uspoof_areConfusable} functionality,
* it is good practice to disable the CONFUSABLE check:
*
* <pre>
@@ -724,7 +727,7 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status);
* @stable ICU 4.2
*
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status);
/**
@@ -738,7 +741,7 @@ uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status);
* @stable ICU 4.2
*
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status);
/**
@@ -752,7 +755,7 @@ uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status);
* @see URestrictionLevel
* @stable ICU 51
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel);
@@ -763,7 +766,7 @@ uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel
* @see URestrictionLevel
* @stable ICU 51
*/
-U_STABLE URestrictionLevel U_EXPORT2
+U_CAPI URestrictionLevel U_EXPORT2
uspoof_getRestrictionLevel(const USpoofChecker *sc);
/**
@@ -808,7 +811,7 @@ uspoof_getRestrictionLevel(const USpoofChecker *sc);
* @param status The error code, set if this function encounters a problem.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_setAllowedLocales(USpoofChecker *sc, const char *localesList, UErrorCode *status);
/**
@@ -832,7 +835,7 @@ uspoof_setAllowedLocales(USpoofChecker *sc, const char *localesList, UErrorCode
*
* @stable ICU 4.2
*/
-U_STABLE const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
uspoof_getAllowedLocales(USpoofChecker *sc, UErrorCode *status);
@@ -854,7 +857,7 @@ uspoof_getAllowedLocales(USpoofChecker *sc, UErrorCode *status);
* @param status The error code, set if this function encounters a problem.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_setAllowedChars(USpoofChecker *sc, const USet *chars, UErrorCode *status);
@@ -878,7 +881,7 @@ uspoof_setAllowedChars(USpoofChecker *sc, const USet *chars, UErrorCode *status)
* the USPOOF_CHAR_LIMIT test.
* @stable ICU 4.2
*/
-U_STABLE const USet * U_EXPORT2
+U_CAPI const USet * U_EXPORT2
uspoof_getAllowedChars(const USpoofChecker *sc, UErrorCode *status);
@@ -914,7 +917,7 @@ uspoof_getAllowedChars(const USpoofChecker *sc, UErrorCode *status);
* @see uspoof_check2
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_check(const USpoofChecker *sc,
const UChar *id, int32_t length,
int32_t *position,
@@ -953,7 +956,7 @@ uspoof_check(const USpoofChecker *sc,
* @see uspoof_check2UTF8
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_checkUTF8(const USpoofChecker *sc,
const char *id, int32_t length,
int32_t *position,
@@ -988,7 +991,7 @@ uspoof_checkUTF8(const USpoofChecker *sc,
* @see uspoof_check2UnicodeString
* @stable ICU 58
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_check2(const USpoofChecker *sc,
const UChar* id, int32_t length,
USpoofCheckResult* checkResult,
@@ -1025,7 +1028,7 @@ uspoof_check2(const USpoofChecker *sc,
* @see uspoof_check2UnicodeString
* @stable ICU 58
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_check2UTF8(const USpoofChecker *sc,
const char *id, int32_t length,
USpoofCheckResult* checkResult,
@@ -1049,7 +1052,7 @@ uspoof_check2UTF8(const USpoofChecker *sc,
* @see uspoof_check2UnicodeString
* @stable ICU 58
*/
-U_STABLE USpoofCheckResult* U_EXPORT2
+U_CAPI USpoofCheckResult* U_EXPORT2
uspoof_openCheckResult(UErrorCode *status);
/**
@@ -1059,7 +1062,7 @@ uspoof_openCheckResult(UErrorCode *status);
* @param checkResult The instance of USpoofCheckResult to close
* @stable ICU 58
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_closeCheckResult(USpoofCheckResult *checkResult);
/**
@@ -1076,7 +1079,7 @@ uspoof_closeCheckResult(USpoofCheckResult *checkResult);
* @see uspoof_setChecks
* @stable ICU 58
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *status);
/**
@@ -1089,7 +1092,7 @@ uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *st
* @see uspoof_setRestrictionLevel
* @stable ICU 58
*/
-U_STABLE URestrictionLevel U_EXPORT2
+U_CAPI URestrictionLevel U_EXPORT2
uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErrorCode *status);
/**
@@ -1103,7 +1106,7 @@ uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErr
* @param status The error code, set if an error occurred.
* @stable ICU 58
*/
-U_STABLE const USet* U_EXPORT2
+U_CAPI const USet* U_EXPORT2
uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *status);
@@ -1150,7 +1153,7 @@ uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *
*
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_areConfusable(const USpoofChecker *sc,
const UChar *id1, int32_t length1,
const UChar *id2, int32_t length2,
@@ -1183,7 +1186,7 @@ uspoof_areConfusable(const USpoofChecker *sc,
*
* @see uspoof_areConfusable
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_areConfusableUTF8(const USpoofChecker *sc,
const char *id1, int32_t length1,
const char *id2, int32_t length2,
@@ -1223,7 +1226,7 @@ uspoof_areConfusableUTF8(const USpoofChecker *sc,
* @stable ICU 4.2
* @see uspoof_areConfusable
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_getSkeleton(const USpoofChecker *sc,
uint32_t type,
const UChar *id, int32_t length,
@@ -1263,7 +1266,7 @@ uspoof_getSkeleton(const USpoofChecker *sc,
*
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_getSkeletonUTF8(const USpoofChecker *sc,
uint32_t type,
const char *id, int32_t length,
@@ -1282,7 +1285,7 @@ uspoof_getSkeletonUTF8(const USpoofChecker *sc,
*
* @stable ICU 51
*/
-U_STABLE const USet * U_EXPORT2
+U_CAPI const USet * U_EXPORT2
uspoof_getInclusionSet(UErrorCode *status);
/**
@@ -1297,7 +1300,7 @@ uspoof_getInclusionSet(UErrorCode *status);
*
* @stable ICU 51
*/
-U_STABLE const USet * U_EXPORT2
+U_CAPI const USet * U_EXPORT2
uspoof_getRecommendedSet(UErrorCode *status);
/**
@@ -1322,7 +1325,7 @@ uspoof_getRecommendedSet(UErrorCode *status);
* @see utrie2_openFromSerialized()
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_serialize(USpoofChecker *sc,
void *data, int32_t capacity,
UErrorCode *status);
@@ -1388,7 +1391,7 @@ U_NAMESPACE_END
* @param status The error code, set if this function encounters a problem.
* @stable ICU 4.2
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
uspoof_setAllowedUnicodeSet(USpoofChecker *sc, const icu::UnicodeSet *chars, UErrorCode *status);
@@ -1412,7 +1415,7 @@ uspoof_setAllowedUnicodeSet(USpoofChecker *sc, const icu::UnicodeSet *chars, UEr
* the USPOOF_CHAR_LIMIT test.
* @stable ICU 4.2
*/
-U_STABLE const icu::UnicodeSet * U_EXPORT2
+U_CAPI const icu::UnicodeSet * U_EXPORT2
uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status);
/**
@@ -1443,7 +1446,7 @@ uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status);
* @see uspoof_check2UnicodeString
* @stable ICU 4.2
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_checkUnicodeString(const USpoofChecker *sc,
const icu::UnicodeString &id,
int32_t *position,
@@ -1474,7 +1477,7 @@ uspoof_checkUnicodeString(const USpoofChecker *sc,
* @see uspoof_check2UTF8
* @stable ICU 58
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_check2UnicodeString(const USpoofChecker *sc,
const icu::UnicodeString &id,
USpoofCheckResult* checkResult,
@@ -1501,7 +1504,7 @@ uspoof_check2UnicodeString(const USpoofChecker *sc,
*
* @see uspoof_areConfusable
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
uspoof_areConfusableUnicodeString(const USpoofChecker *sc,
const icu::UnicodeString &s1,
const icu::UnicodeString &s2,
@@ -1549,7 +1552,7 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc,
*
* @stable ICU 51
*/
-U_STABLE const icu::UnicodeSet * U_EXPORT2
+U_CAPI const icu::UnicodeSet * U_EXPORT2
uspoof_getInclusionUnicodeSet(UErrorCode *status);
/**
@@ -1564,7 +1567,7 @@ uspoof_getInclusionUnicodeSet(UErrorCode *status);
*
* @stable ICU 51
*/
-U_STABLE const icu::UnicodeSet * U_EXPORT2
+U_CAPI const icu::UnicodeSet * U_EXPORT2
uspoof_getRecommendedUnicodeSet(UErrorCode *status);
#endif /* U_SHOW_CPLUSPLUS_API */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h
index d8b8a2e668a..5a0bdc68c66 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h
@@ -449,7 +449,7 @@ typedef enum UTimeScaleValue {
*
* @stable ICU 3.2
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status);
/* Conversion to 'universal time scale' */
@@ -465,7 +465,7 @@ U_STABLE int64_t U_EXPORT2
*
* @stable ICU 3.2
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status);
/* Conversion from 'universal time scale' */
@@ -481,7 +481,7 @@ U_STABLE int64_t U_EXPORT2
*
* @stable ICU 3.2
*/
-U_STABLE int64_t U_EXPORT2
+U_CAPI int64_t U_EXPORT2
utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status);
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h
index 021af498a83..1ad7dbda62f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h
@@ -17,12 +17,15 @@
#if !UCONFIG_NO_TRANSLITERATION
-#include "unicode/localpointer.h"
#include "unicode/urep.h"
#include "unicode/parseerr.h"
#include "unicode/uenum.h"
#include "unicode/uset.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
/********************************************************************
* General Notes
********************************************************************
@@ -188,7 +191,7 @@ typedef struct UTransPosition {
* utrans_xxx() functions, or NULL if the open call fails.
* @stable ICU 2.8
*/
-U_STABLE UTransliterator* U_EXPORT2
+U_CAPI UTransliterator* U_EXPORT2
utrans_openU(const UChar *id,
int32_t idLength,
UTransDirection dir,
@@ -212,7 +215,7 @@ utrans_openU(const UChar *id,
* inverse of trans, or NULL if the open call fails.
* @stable ICU 2.0
*/
-U_STABLE UTransliterator* U_EXPORT2
+U_CAPI UTransliterator* U_EXPORT2
utrans_openInverse(const UTransliterator* trans,
UErrorCode* status);
@@ -226,7 +229,7 @@ utrans_openInverse(const UTransliterator* trans,
* utrans_xxx() functions, or NULL if the clone call fails.
* @stable ICU 2.0
*/
-U_STABLE UTransliterator* U_EXPORT2
+U_CAPI UTransliterator* U_EXPORT2
utrans_clone(const UTransliterator* trans,
UErrorCode* status);
@@ -236,7 +239,7 @@ utrans_clone(const UTransliterator* trans,
* @param trans the transliterator to be closed.
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_close(UTransliterator* trans);
#if U_SHOW_CPLUSPLUS_API
@@ -272,7 +275,7 @@ U_NAMESPACE_END
*
* @stable ICU 2.8
*/
-U_STABLE const UChar * U_EXPORT2
+U_CAPI const UChar * U_EXPORT2
utrans_getUnicodeID(const UTransliterator *trans,
int32_t *resultLength);
@@ -290,7 +293,7 @@ utrans_getUnicodeID(const UTransliterator *trans,
* @param status a pointer to the UErrorCode
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_register(UTransliterator* adoptedTrans,
UErrorCode* status);
@@ -303,7 +306,7 @@ utrans_register(UTransliterator* adoptedTrans,
* @param idLength the length of id, or -1 if id is zero-terminated
* @stable ICU 2.8
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_unregisterID(const UChar* id, int32_t idLength);
/**
@@ -324,7 +327,7 @@ utrans_unregisterID(const UChar* id, int32_t idLength);
* @see UnicodeSet
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_setFilter(UTransliterator* trans,
const UChar* filterPattern,
int32_t filterPatternLen,
@@ -337,7 +340,7 @@ utrans_setFilter(UTransliterator* trans,
* @return the number of system transliterators.
* @stable ICU 2.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrans_countAvailableIDs(void);
/**
@@ -349,7 +352,7 @@ utrans_countAvailableIDs(void);
*
* @stable ICU 2.8
*/
-U_STABLE UEnumeration * U_EXPORT2
+U_CAPI UEnumeration * U_EXPORT2
utrans_openIDs(UErrorCode *pErrorCode);
/********************************************************************
@@ -379,7 +382,7 @@ utrans_openIDs(UErrorCode *pErrorCode);
* @param status a pointer to the UErrorCode
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_trans(const UTransliterator* trans,
UReplaceable* rep,
const UReplaceableCallbacks* repFunc,
@@ -430,7 +433,7 @@ utrans_trans(const UTransliterator* trans,
* @param status a pointer to the UErrorCode
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_transIncremental(const UTransliterator* trans,
UReplaceable* rep,
const UReplaceableCallbacks* repFunc,
@@ -467,7 +470,7 @@ utrans_transIncremental(const UTransliterator* trans,
* @param status a pointer to the UErrorCode
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_transUChars(const UTransliterator* trans,
UChar* text,
int32_t* textLength,
@@ -502,7 +505,7 @@ utrans_transUChars(const UTransliterator* trans,
* @see utrans_transIncremental
* @stable ICU 2.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
utrans_transIncrementalUChars(const UTransliterator* trans,
UChar* text,
int32_t* textLength,
@@ -515,7 +518,7 @@ utrans_transIncrementalUChars(const UTransliterator* trans,
* transliterator.
*
* @param trans The transliterator
- * @param escapeUnprintable if TRUE then convert unprintable characters to their
+ * @param escapeUnprintable if true then convert unprintable characters to their
* hex escape representations, \\uxxxx or \\Uxxxxxxxx.
* Unprintable characters are those other than
* U+000A, U+0020..U+007E.
@@ -527,7 +530,7 @@ utrans_transIncrementalUChars(const UTransliterator* trans,
* in which case an error is returned).
* @stable ICU 53
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
utrans_toRules( const UTransliterator* trans,
UBool escapeUnprintable,
UChar* result, int32_t resultLength,
@@ -537,9 +540,9 @@ utrans_toRules( const UTransliterator* trans,
* Returns the set of all characters that may be modified in the input text by
* this UTransliterator, optionally ignoring the transliterator's current filter.
* @param trans The transliterator.
- * @param ignoreFilter If FALSE, the returned set incorporates the
+ * @param ignoreFilter If false, the returned set incorporates the
* UTransliterator's current filter; if the filter is changed,
- * the return value of this function will change. If TRUE, the
+ * the return value of this function will change. If true, the
* returned set ignores the effect of the UTransliterator's
* current filter.
* @param fillIn Pointer to a USet object to receive the modifiable characters
@@ -552,7 +555,7 @@ utrans_toRules( const UTransliterator* trans,
* error, NULL is returned.
* @stable ICU 53
*/
-U_STABLE USet* U_EXPORT2
+U_CAPI USet* U_EXPORT2
utrans_getSourceSet(const UTransliterator* trans,
UBool ignoreFilter,
USet* fillIn,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
index 2743b6c474f..34b371b16bf 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
@@ -119,7 +119,7 @@ public:
* created from VTIMEZONE data, the initial value is set by the TZURL property value
* in the data. Otherwise, the initial value is not set.
* @param url Receives the RFC2445 TZURL property value.
- * @return TRUE if TZURL attribute is available and value is set.
+ * @return true if TZURL attribute is available and value is set.
* @stable ICU 3.8
*/
UBool getTZURL(UnicodeString& url) const;
@@ -136,7 +136,7 @@ public:
* was created from VTIMEZONE data, the initial value is set by the LAST-MODIFIED property
* value in the data. Otherwise, the initial value is not set.
* @param lastModified Receives the last modified date.
- * @return TRUE if lastModified attribute is available and value is set.
+ * @return true if lastModified attribute is available and value is set.
* @stable ICU 3.8
*/
UBool getLastModified(UDate& lastModified) const;
@@ -322,7 +322,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
@@ -332,7 +332,7 @@ public:
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
* @stable ICU 3.8
*/
virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp
new file mode 100644
index 00000000000..27f835e6dd4
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp
@@ -0,0 +1,253 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include <cmath>
+
+#include "cmemory.h"
+#include "number_decimalquantity.h"
+#include "number_roundingutils.h"
+#include "uarrsort.h"
+#include "uassert.h"
+#include "unicode/fmtable.h"
+#include "unicode/localpointer.h"
+#include "unicode/measunit.h"
+#include "unicode/measure.h"
+#include "units_complexconverter.h"
+#include "units_converter.h"
+
+U_NAMESPACE_BEGIN
+namespace units {
+
+ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnitImpl &inputUnit,
+ const MeasureUnitImpl &outputUnits,
+ const ConversionRates &ratesInfo, UErrorCode &status)
+ : units_(outputUnits.extractIndividualUnits(status)) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ U_ASSERT(units_.length() != 0);
+
+ // Save the desired order of output units before we sort units_
+ for (int32_t i = 0; i < units_.length(); i++) {
+ outputUnits_.emplaceBackAndCheckErrorCode(status, units_[i]->copy(status).build(status));
+ }
+
+ // NOTE:
+ // This comparator is used to sort the units in a descending order. Therefore, we return -1 if
+ // the left is bigger than right and so on.
+ auto descendingCompareUnits = [](const void *context, const void *left, const void *right) {
+ UErrorCode status = U_ZERO_ERROR;
+
+ const auto *leftPointer = static_cast<const MeasureUnitImpl *const *>(left);
+ const auto *rightPointer = static_cast<const MeasureUnitImpl *const *>(right);
+
+ UnitConverter fromLeftToRight(**leftPointer, //
+ **rightPointer, //
+ *static_cast<const ConversionRates *>(context), //
+ status);
+
+ double rightFromOneLeft = fromLeftToRight.convert(1.0);
+ if (std::abs(rightFromOneLeft - 1.0) < 0.0000000001) { // Equals To
+ return 0;
+ } else if (rightFromOneLeft > 1.0) { // Greater Than
+ return -1;
+ }
+
+ return 1; // Less Than
+ };
+
+ uprv_sortArray(units_.getAlias(), //
+ units_.length(), //
+ sizeof units_[0], /* NOTE: we have already asserted that the units_ is not empty.*/ //
+ descendingCompareUnits, //
+ &ratesInfo, //
+ false, //
+ &status //
+ );
+
+ // In case the `outputUnits` are `UMEASURE_UNIT_MIXED` such as `foot+inch`. In this case we need more
+ // converters to convert from the `inputUnit` to the first unit in the `outputUnits`. Then, a
+ // converter from the first unit in the `outputUnits` to the second unit and so on.
+ // For Example:
+ // - inputUnit is `meter`
+ // - outputUnits is `foot+inch`
+ // - Therefore, we need to have two converters:
+ // 1. a converter from `meter` to `foot`
+ // 2. a converter from `foot` to `inch`
+ // - Therefore, if the input is `2 meter`:
+ // 1. convert `meter` to `foot` --> 2 meter to 6.56168 feet
+ // 2. convert the residual of 6.56168 feet (0.56168) to inches, which will be (6.74016
+ // inches)
+ // 3. then, the final result will be (6 feet and 6.74016 inches)
+ for (int i = 0, n = units_.length(); i < n; i++) {
+ if (i == 0) { // first element
+ unitConverters_.emplaceBackAndCheckErrorCode(status, inputUnit, *units_[i], ratesInfo,
+ status);
+ } else {
+ unitConverters_.emplaceBackAndCheckErrorCode(status, *units_[i - 1], *units_[i], ratesInfo,
+ status);
+ }
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+}
+
+UBool ComplexUnitsConverter::greaterThanOrEqual(double quantity, double limit) const {
+ U_ASSERT(unitConverters_.length() > 0);
+
+ // First converter converts to the biggest quantity.
+ double newQuantity = unitConverters_[0]->convert(quantity);
+ return newQuantity >= limit;
+}
+
+MaybeStackVector<Measure> ComplexUnitsConverter::convert(double quantity,
+ icu::number::impl::RoundingImpl *rounder,
+ UErrorCode &status) const {
+ // TODO(hugovdm): return an error for "foot-and-foot"?
+ MaybeStackVector<Measure> result;
+ int sign = 1;
+ if (quantity < 0) {
+ quantity *= -1;
+ sign = -1;
+ }
+
+ // For N converters:
+ // - the first converter converts from the input unit to the largest unit,
+ // - N-1 converters convert to bigger units for which we want integers,
+ // - the Nth converter (index N-1) converts to the smallest unit, for which
+ // we keep a double.
+ MaybeStackArray<int64_t, 5> intValues(unitConverters_.length() - 1, status);
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ uprv_memset(intValues.getAlias(), 0, (unitConverters_.length() - 1) * sizeof(int64_t));
+
+ for (int i = 0, n = unitConverters_.length(); i < n; ++i) {
+ quantity = (*unitConverters_[i]).convert(quantity);
+ if (i < n - 1) {
+ // The double type has 15 decimal digits of precision. For choosing
+ // whether to use the current unit or the next smaller unit, we
+ // therefore nudge up the number with which the thresholding
+ // decision is made. However after the thresholding, we use the
+ // original values to ensure unbiased accuracy (to the extent of
+ // double's capabilities).
+ int64_t roundedQuantity = floor(quantity * (1 + DBL_EPSILON));
+ intValues[i] = roundedQuantity;
+
+ // Keep the residual of the quantity.
+ // For example: `3.6 feet`, keep only `0.6 feet`
+ //
+ // When the calculation is near enough +/- DBL_EPSILON, we round to
+ // zero. (We also ensure no negative values here.)
+ if ((quantity - roundedQuantity) / quantity < DBL_EPSILON) {
+ quantity = 0;
+ } else {
+ quantity -= roundedQuantity;
+ }
+ } else { // LAST ELEMENT
+ if (rounder == nullptr) {
+ // Nothing to do for the last element.
+ break;
+ }
+
+ // Round the last value
+ // TODO(ICU-21288): get smarter about precision for mixed units.
+ number::impl::DecimalQuantity quant;
+ quant.setToDouble(quantity);
+ rounder->apply(quant, status);
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ quantity = quant.toDouble();
+ if (i == 0) {
+ // Last element is also the first element, so we're done
+ break;
+ }
+
+ // Check if there's a carry, and bubble it back up the resulting intValues.
+ int64_t carry = floor(unitConverters_[i]->convertInverse(quantity) * (1 + DBL_EPSILON));
+ if (carry <= 0) {
+ break;
+ }
+ quantity -= unitConverters_[i]->convert(carry);
+ intValues[i - 1] += carry;
+
+ // We don't use the first converter: that one is for the input unit
+ for (int32_t j = i - 1; j > 0; j--) {
+ carry = floor(unitConverters_[j]->convertInverse(intValues[j]) * (1 + DBL_EPSILON));
+ if (carry <= 0) {
+ break;
+ }
+ intValues[j] -= round(unitConverters_[j]->convert(carry));
+ intValues[j - 1] += carry;
+ }
+ }
+ }
+
+ // Package values into Measure instances in result:
+ for (int i = 0, n = unitConverters_.length(); i < n; ++i) {
+ if (i < n - 1) {
+ Formattable formattableQuantity(intValues[i] * sign);
+ // Measure takes ownership of the MeasureUnit*
+ MeasureUnit *type = new MeasureUnit(units_[i]->copy(status).build(status));
+ if (result.emplaceBackAndCheckErrorCode(status, formattableQuantity, type, status) ==
+ nullptr) {
+ // Ownership wasn't taken
+ U_ASSERT(U_FAILURE(status));
+ delete type;
+ }
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ } else { // LAST ELEMENT
+ // Add the last element, not an integer:
+ Formattable formattableQuantity(quantity * sign);
+ // Measure takes ownership of the MeasureUnit*
+ MeasureUnit *type = new MeasureUnit(units_[i]->copy(status).build(status));
+ if (result.emplaceBackAndCheckErrorCode(status, formattableQuantity, type, status) ==
+ nullptr) {
+ // Ownership wasn't taken
+ U_ASSERT(U_FAILURE(status));
+ delete type;
+ }
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ U_ASSERT(result.length() == i + 1);
+ U_ASSERT(result[i] != nullptr);
+ }
+ }
+
+ MaybeStackVector<Measure> orderedResult;
+ int32_t unitsCount = outputUnits_.length();
+ U_ASSERT(unitsCount == units_.length());
+ Measure **arr = result.getAlias();
+ // O(N^2) is fine: mixed units' unitsCount is usually 2 or 3.
+ for (int32_t i = 0; i < unitsCount; i++) {
+ for (int32_t j = i; j < unitsCount; j++) {
+ // Find the next expected unit, and swap it into place.
+ U_ASSERT(result[j] != nullptr);
+ if (result[j]->getUnit() == *outputUnits_[i]) {
+ if (j != i) {
+ Measure *tmp = arr[j];
+ arr[j] = arr[i];
+ arr[i] = tmp;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h
new file mode 100644
index 00000000000..83c5b94342f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h
@@ -0,0 +1,93 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+#ifndef __UNITS_COMPLEXCONVERTER_H__
+#define __UNITS_COMPLEXCONVERTER_H__
+
+#include "cmemory.h"
+#include "measunit_impl.h"
+#include "number_roundingutils.h"
+#include "unicode/errorcode.h"
+#include "unicode/measure.h"
+#include "units_converter.h"
+#include "units_data.h"
+
+U_NAMESPACE_BEGIN
+
+// Export explicit template instantiations of MaybeStackArray, MemoryPool and
+// MaybeStackVector. This is required when building DLLs for Windows. (See
+// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
+//
+// Note: These need to be outside of the units namespace, or Clang will generate
+// a compile error.
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<units::UnitConverter*, 8>;
+template class U_I18N_API MemoryPool<units::UnitConverter, 8>;
+template class U_I18N_API MaybeStackVector<units::UnitConverter, 8>;
+template class U_I18N_API MaybeStackArray<MeasureUnitImpl*, 8>;
+template class U_I18N_API MemoryPool<MeasureUnitImpl, 8>;
+template class U_I18N_API MaybeStackVector<MeasureUnitImpl, 8>;
+template class U_I18N_API MaybeStackArray<MeasureUnit*, 8>;
+template class U_I18N_API MemoryPool<MeasureUnit, 8>;
+template class U_I18N_API MaybeStackVector<MeasureUnit, 8>;
+#endif
+
+namespace units {
+
+/**
+ * Converts from single or compound unit to single, compound or mixed units.
+ * For example, from `meter` to `foot+inch`.
+ *
+ * DESIGN:
+ * This class uses `UnitConverter` in order to perform the single converter (i.e. converters from a
+ * single unit to another single unit). Therefore, `ComplexUnitsConverter` class contains multiple
+ * instances of the `UnitConverter` to perform the conversion.
+ */
+class U_I18N_API ComplexUnitsConverter : public UMemory {
+ public:
+ /**
+ * Constructor of `ComplexUnitsConverter`.
+ * NOTE:
+ * - inputUnit and outputUnits must be under the same category
+ * - e.g. meter to feet and inches --> all of them are length units.
+ *
+ * @param inputUnit represents the source unit. (should be single or compound unit).
+ * @param outputUnits represents the output unit. could be any type. (single, compound or mixed).
+ * @param status
+ */
+ ComplexUnitsConverter(const MeasureUnitImpl &inputUnit, const MeasureUnitImpl &outputUnits,
+ const ConversionRates &ratesInfo, UErrorCode &status);
+
+ // Returns true if the specified `quantity` of the `inputUnit`, expressed in terms of the biggest
+ // unit in the MeasureUnit `outputUnit`, is greater than or equal to `limit`.
+ // For example, if the input unit is `meter` and the target unit is `foot+inch`. Therefore, this
+ // function will convert the `quantity` from `meter` to `foot`, then, it will compare the value in
+ // `foot` with the `limit`.
+ UBool greaterThanOrEqual(double quantity, double limit) const;
+
+ // Returns outputMeasures which is an array with the corresponding values.
+ // - E.g. converting meters to feet and inches.
+ // 1 meter --> 3 feet, 3.3701 inches
+ // NOTE:
+ // the smallest element is the only element that could have fractional values. And all
+ // other elements are floored to the nearest integer
+ MaybeStackVector<Measure>
+ convert(double quantity, icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const;
+
+ private:
+ MaybeStackVector<UnitConverter> unitConverters_;
+ // Individual units of mixed units, sorted big to small
+ MaybeStackVector<MeasureUnitImpl> units_;
+ // Individual units of mixed units, sorted in desired output order
+ MaybeStackVector<MeasureUnit> outputUnits_;
+};
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif //__UNITS_COMPLEXCONVERTER_H__
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp
new file mode 100644
index 00000000000..a777d026b98
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp
@@ -0,0 +1,546 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "charstr.h"
+#include "cmemory.h"
+#include "double-conversion-string-to-double.h"
+#include "measunit_impl.h"
+#include "uassert.h"
+#include "unicode/errorcode.h"
+#include "unicode/localpointer.h"
+#include "unicode/stringpiece.h"
+#include "units_converter.h"
+#include <algorithm>
+#include <cmath>
+#include <stdlib.h>
+#include <utility>
+
+U_NAMESPACE_BEGIN
+namespace units {
+
+void U_I18N_API Factor::multiplyBy(const Factor &rhs) {
+ factorNum *= rhs.factorNum;
+ factorDen *= rhs.factorDen;
+ for (int i = 0; i < CONSTANTS_COUNT; i++) {
+ constants[i] += rhs.constants[i];
+ }
+
+ // NOTE
+ // We need the offset when the source and the target are simple units. e.g. the source is
+ // celsius and the target is Fahrenheit. Therefore, we just keep the value using `std::max`.
+ offset = std::max(rhs.offset, offset);
+}
+
+void U_I18N_API Factor::divideBy(const Factor &rhs) {
+ factorNum *= rhs.factorDen;
+ factorDen *= rhs.factorNum;
+ for (int i = 0; i < CONSTANTS_COUNT; i++) {
+ constants[i] -= rhs.constants[i];
+ }
+
+ // NOTE
+ // We need the offset when the source and the target are simple units. e.g. the source is
+ // celsius and the target is Fahrenheit. Therefore, we just keep the value using `std::max`.
+ offset = std::max(rhs.offset, offset);
+}
+
+void U_I18N_API Factor::power(int32_t power) {
+ // multiply all the constant by the power.
+ for (int i = 0; i < CONSTANTS_COUNT; i++) {
+ constants[i] *= power;
+ }
+
+ bool shouldFlip = power < 0; // This means that after applying the absolute power, we should flip
+ // the Numerator and Denominator.
+
+ factorNum = std::pow(factorNum, std::abs(power));
+ factorDen = std::pow(factorDen, std::abs(power));
+
+ if (shouldFlip) {
+ // Flip Numerator and Denominator.
+ std::swap(factorNum, factorDen);
+ }
+}
+
+void U_I18N_API Factor::flip() {
+ std::swap(factorNum, factorDen);
+
+ for (int i = 0; i < CONSTANTS_COUNT; i++) {
+ constants[i] *= -1;
+ }
+}
+
+void U_I18N_API Factor::applySiPrefix(UMeasureSIPrefix siPrefix) {
+ if (siPrefix == UMeasureSIPrefix::UMEASURE_SI_PREFIX_ONE) return; // No need to do anything
+
+ double siApplied = std::pow(10.0, std::abs(siPrefix));
+
+ if (siPrefix < 0) {
+ factorDen *= siApplied;
+ return;
+ }
+
+ factorNum *= siApplied;
+}
+
+void U_I18N_API Factor::substituteConstants() {
+ for (int i = 0; i < CONSTANTS_COUNT; i++) {
+ if (this->constants[i] == 0) {
+ continue;
+ }
+
+ auto absPower = std::abs(this->constants[i]);
+ Signum powerSig = this->constants[i] < 0 ? Signum::NEGATIVE : Signum::POSITIVE;
+ double absConstantValue = std::pow(constantsValues[i], absPower);
+
+ if (powerSig == Signum::NEGATIVE) {
+ this->factorDen *= absConstantValue;
+ } else {
+ this->factorNum *= absConstantValue;
+ }
+
+ this->constants[i] = 0;
+ }
+}
+
+namespace {
+
+/* Helpers */
+
+using icu::double_conversion::StringToDoubleConverter;
+
+// TODO: Make this a shared-utility function.
+// Returns `double` from a scientific number(i.e. "1", "2.01" or "3.09E+4")
+double strToDouble(StringPiece strNum, UErrorCode &status) {
+ // We are processing well-formed input, so we don't need any special options to
+ // StringToDoubleConverter.
+ StringToDoubleConverter converter(0, 0, 0, "", "");
+ int32_t count;
+ double result = converter.StringToDouble(strNum.data(), strNum.length(), &count);
+ if (count != strNum.length()) {
+ status = U_INVALID_FORMAT_ERROR;
+ }
+
+ return result;
+}
+
+// Returns `double` from a scientific number that could has a division sign (i.e. "1", "2.01", "3.09E+4"
+// or "2E+2/3")
+double strHasDivideSignToDouble(StringPiece strWithDivide, UErrorCode &status) {
+ int divisionSignInd = -1;
+ for (int i = 0, n = strWithDivide.length(); i < n; ++i) {
+ if (strWithDivide.data()[i] == '/') {
+ divisionSignInd = i;
+ break;
+ }
+ }
+
+ if (divisionSignInd >= 0) {
+ return strToDouble(strWithDivide.substr(0, divisionSignInd), status) /
+ strToDouble(strWithDivide.substr(divisionSignInd + 1), status);
+ }
+
+ return strToDouble(strWithDivide, status);
+}
+
+/*
+ Adds single factor to a `Factor` object. Single factor means "23^2", "23.3333", "ft2m^3" ...etc.
+ However, complex factor are not included, such as "ft2m^3*200/3"
+*/
+void addFactorElement(Factor &factor, StringPiece elementStr, Signum signum, UErrorCode &status) {
+ StringPiece baseStr;
+ StringPiece powerStr;
+ int32_t power =
+ 1; // In case the power is not written, then, the power is equal 1 ==> `ft2m^1` == `ft2m`
+
+ // Search for the power part
+ int32_t powerInd = -1;
+ for (int32_t i = 0, n = elementStr.length(); i < n; ++i) {
+ if (elementStr.data()[i] == '^') {
+ powerInd = i;
+ break;
+ }
+ }
+
+ if (powerInd > -1) {
+ // There is power
+ baseStr = elementStr.substr(0, powerInd);
+ powerStr = elementStr.substr(powerInd + 1);
+
+ power = static_cast<int32_t>(strToDouble(powerStr, status));
+ } else {
+ baseStr = elementStr;
+ }
+
+ addSingleFactorConstant(baseStr, power, signum, factor, status);
+}
+
+/*
+ * Extracts `Factor` from a complete string factor. e.g. "ft2m^3*1007/cup2m3*3"
+ */
+Factor extractFactorConversions(StringPiece stringFactor, UErrorCode &status) {
+ Factor result;
+ Signum signum = Signum::POSITIVE;
+ auto factorData = stringFactor.data();
+ for (int32_t i = 0, start = 0, n = stringFactor.length(); i < n; i++) {
+ if (factorData[i] == '*' || factorData[i] == '/') {
+ StringPiece factorElement = stringFactor.substr(start, i - start);
+ addFactorElement(result, factorElement, signum, status);
+
+ start = i + 1; // Set `start` to point to the start of the new element.
+ } else if (i == n - 1) {
+ // Last element
+ addFactorElement(result, stringFactor.substr(start, i + 1), signum, status);
+ }
+
+ if (factorData[i] == '/') {
+ signum = Signum::NEGATIVE; // Change the signum because we reached the Denominator.
+ }
+ }
+
+ return result;
+}
+
+// Load factor for a single source
+Factor loadSingleFactor(StringPiece source, const ConversionRates &ratesInfo, UErrorCode &status) {
+ const auto conversionUnit = ratesInfo.extractConversionInfo(source, status);
+ if (U_FAILURE(status)) return Factor();
+ if (conversionUnit == nullptr) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return Factor();
+ }
+
+ Factor result = extractFactorConversions(conversionUnit->factor.toStringPiece(), status);
+ result.offset = strHasDivideSignToDouble(conversionUnit->offset.toStringPiece(), status);
+
+ return result;
+}
+
+// Load Factor of a compound source unit.
+Factor loadCompoundFactor(const MeasureUnitImpl &source, const ConversionRates &ratesInfo,
+ UErrorCode &status) {
+
+ Factor result;
+ for (int32_t i = 0, n = source.units.length(); i < n; i++) {
+ SingleUnitImpl singleUnit = *source.units[i];
+
+ Factor singleFactor = loadSingleFactor(singleUnit.getSimpleUnitID(), ratesInfo, status);
+ if (U_FAILURE(status)) return result;
+
+ // Apply SiPrefix before the power, because the power may be will flip the factor.
+ singleFactor.applySiPrefix(singleUnit.siPrefix);
+
+ // Apply the power of the `dimensionality`
+ singleFactor.power(singleUnit.dimensionality);
+
+ result.multiplyBy(singleFactor);
+ }
+
+ return result;
+}
+
+/**
+ * Checks if the source unit and the target unit are simple. For example celsius or fahrenheit. But not
+ * square-celsius or square-fahrenheit.
+ *
+ * NOTE:
+ * Empty unit means simple unit.
+ */
+UBool checkSimpleUnit(const MeasureUnitImpl &unit, UErrorCode &status) {
+ if (U_FAILURE(status)) return false;
+
+ if (unit.complexity != UMEASURE_UNIT_SINGLE) {
+ return false;
+ }
+ if (unit.units.length() == 0) {
+ // Empty units means simple unit.
+ return true;
+ }
+
+ auto singleUnit = *(unit.units[0]);
+
+ if (singleUnit.dimensionality != 1 || singleUnit.siPrefix != UMEASURE_SI_PREFIX_ONE) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Extract conversion rate from `source` to `target`
+ */
+void loadConversionRate(ConversionRate &conversionRate, const MeasureUnitImpl &source,
+ const MeasureUnitImpl &target, Convertibility unitsState,
+ const ConversionRates &ratesInfo, UErrorCode &status) {
+ // Represents the conversion factor from the source to the target.
+ Factor finalFactor;
+
+ // Represents the conversion factor from the source to the base unit that specified in the conversion
+ // data which is considered as the root of the source and the target.
+ Factor sourceToBase = loadCompoundFactor(source, ratesInfo, status);
+ Factor targetToBase = loadCompoundFactor(target, ratesInfo, status);
+
+ // Merger Factors
+ finalFactor.multiplyBy(sourceToBase);
+ if (unitsState == Convertibility::CONVERTIBLE) {
+ finalFactor.divideBy(targetToBase);
+ } else if (unitsState == Convertibility::RECIPROCAL) {
+ finalFactor.multiplyBy(targetToBase);
+ } else {
+ status = UErrorCode::U_ARGUMENT_TYPE_MISMATCH;
+ return;
+ }
+
+ finalFactor.substituteConstants();
+
+ conversionRate.factorNum = finalFactor.factorNum;
+ conversionRate.factorDen = finalFactor.factorDen;
+
+ // In case of simple units (such as: celsius or fahrenheit), offsets are considered.
+ if (checkSimpleUnit(source, status) && checkSimpleUnit(target, status)) {
+ conversionRate.sourceOffset =
+ sourceToBase.offset * sourceToBase.factorDen / sourceToBase.factorNum;
+ conversionRate.targetOffset =
+ targetToBase.offset * targetToBase.factorDen / targetToBase.factorNum;
+ }
+
+ conversionRate.reciprocal = unitsState == Convertibility::RECIPROCAL;
+}
+
+struct UnitIndexAndDimension : UMemory {
+ int32_t index = 0;
+ int32_t dimensionality = 0;
+
+ UnitIndexAndDimension(const SingleUnitImpl &singleUnit, int32_t multiplier) {
+ index = singleUnit.index;
+ dimensionality = singleUnit.dimensionality * multiplier;
+ }
+};
+
+void mergeSingleUnitWithDimension(MaybeStackVector<UnitIndexAndDimension> &unitIndicesWithDimension,
+ const SingleUnitImpl &shouldBeMerged, int32_t multiplier) {
+ for (int32_t i = 0; i < unitIndicesWithDimension.length(); i++) {
+ auto &unitWithIndex = *unitIndicesWithDimension[i];
+ if (unitWithIndex.index == shouldBeMerged.index) {
+ unitWithIndex.dimensionality += shouldBeMerged.dimensionality * multiplier;
+ return;
+ }
+ }
+
+ unitIndicesWithDimension.emplaceBack(shouldBeMerged, multiplier);
+}
+
+void mergeUnitsAndDimensions(MaybeStackVector<UnitIndexAndDimension> &unitIndicesWithDimension,
+ const MeasureUnitImpl &shouldBeMerged, int32_t multiplier) {
+ for (int32_t unit_i = 0; unit_i < shouldBeMerged.units.length(); unit_i++) {
+ auto singleUnit = *shouldBeMerged.units[unit_i];
+ mergeSingleUnitWithDimension(unitIndicesWithDimension, singleUnit, multiplier);
+ }
+}
+
+UBool checkAllDimensionsAreZeros(const MaybeStackVector<UnitIndexAndDimension> &dimensionVector) {
+ for (int32_t i = 0; i < dimensionVector.length(); i++) {
+ if (dimensionVector[i]->dimensionality != 0) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+} // namespace
+
+// Conceptually, this modifies factor: factor *= baseStr^(signum*power).
+//
+// baseStr must be a known constant or a value that strToDouble() is able to
+// parse.
+void U_I18N_API addSingleFactorConstant(StringPiece baseStr, int32_t power, Signum signum,
+ Factor &factor, UErrorCode &status) {
+ if (baseStr == "ft_to_m") {
+ factor.constants[CONSTANT_FT2M] += power * signum;
+ } else if (baseStr == "ft2_to_m2") {
+ factor.constants[CONSTANT_FT2M] += 2 * power * signum;
+ } else if (baseStr == "ft3_to_m3") {
+ factor.constants[CONSTANT_FT2M] += 3 * power * signum;
+ } else if (baseStr == "in3_to_m3") {
+ factor.constants[CONSTANT_FT2M] += 3 * power * signum;
+ factor.factorDen *= 12 * 12 * 12;
+ } else if (baseStr == "gal_to_m3") {
+ factor.factorNum *= 231;
+ factor.constants[CONSTANT_FT2M] += 3 * power * signum;
+ factor.factorDen *= 12 * 12 * 12;
+ } else if (baseStr == "gal_imp_to_m3") {
+ factor.constants[CONSTANT_GAL_IMP2M3] += power * signum;
+ } else if (baseStr == "G") {
+ factor.constants[CONSTANT_G] += power * signum;
+ } else if (baseStr == "gravity") {
+ factor.constants[CONSTANT_GRAVITY] += power * signum;
+ } else if (baseStr == "lb_to_kg") {
+ factor.constants[CONSTANT_LB2KG] += power * signum;
+ } else if (baseStr == "PI") {
+ factor.constants[CONSTANT_PI] += power * signum;
+ } else {
+ if (signum == Signum::NEGATIVE) {
+ factor.factorDen *= std::pow(strToDouble(baseStr, status), power);
+ } else {
+ factor.factorNum *= std::pow(strToDouble(baseStr, status), power);
+ }
+ }
+}
+
+/**
+ * Extracts the compound base unit of a compound unit (`source`). For example, if the source unit is
+ * `square-mile-per-hour`, the compound base unit will be `square-meter-per-second`
+ */
+MeasureUnitImpl U_I18N_API extractCompoundBaseUnit(const MeasureUnitImpl &source,
+ const ConversionRates &conversionRates,
+ UErrorCode &status) {
+
+ MeasureUnitImpl result;
+ if (U_FAILURE(status)) return result;
+
+ const auto &singleUnits = source.units;
+ for (int i = 0, count = singleUnits.length(); i < count; ++i) {
+ const auto &singleUnit = *singleUnits[i];
+ // Extract `ConversionRateInfo` using the absolute unit. For example: in case of `square-meter`,
+ // we will use `meter`
+ const auto rateInfo =
+ conversionRates.extractConversionInfo(singleUnit.getSimpleUnitID(), status);
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ if (rateInfo == nullptr) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return result;
+ }
+
+ // Multiply the power of the singleUnit by the power of the baseUnit. For example, square-hectare
+ // must be pow4-meter. (NOTE: hectare --> square-meter)
+ auto baseUnits =
+ MeasureUnitImpl::forIdentifier(rateInfo->baseUnit.toStringPiece(), status).units;
+ for (int32_t i = 0, baseUnitsCount = baseUnits.length(); i < baseUnitsCount; i++) {
+ baseUnits[i]->dimensionality *= singleUnit.dimensionality;
+ // TODO: Deal with SI-prefix
+ result.append(*baseUnits[i], status);
+
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ }
+ }
+
+ return result;
+}
+
+/**
+ * Determine the convertibility between `source` and `target`.
+ * For example:
+ * `meter` and `foot` are `CONVERTIBLE`.
+ * `meter-per-second` and `second-per-meter` are `RECIPROCAL`.
+ * `meter` and `pound` are `UNCONVERTIBLE`.
+ *
+ * NOTE:
+ * Only works with SINGLE and COMPOUND units. If one of the units is a
+ * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity.
+ */
+Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source,
+ const MeasureUnitImpl &target,
+ const ConversionRates &conversionRates,
+ UErrorCode &status) {
+
+ if (source.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED ||
+ target.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return UNCONVERTIBLE;
+ }
+
+ MeasureUnitImpl sourceBaseUnit = extractCompoundBaseUnit(source, conversionRates, status);
+ MeasureUnitImpl targetBaseUnit = extractCompoundBaseUnit(target, conversionRates, status);
+ if (U_FAILURE(status)) return UNCONVERTIBLE;
+
+ MaybeStackVector<UnitIndexAndDimension> convertible;
+ MaybeStackVector<UnitIndexAndDimension> reciprocal;
+
+ mergeUnitsAndDimensions(convertible, sourceBaseUnit, 1);
+ mergeUnitsAndDimensions(reciprocal, sourceBaseUnit, 1);
+
+ mergeUnitsAndDimensions(convertible, targetBaseUnit, -1);
+ mergeUnitsAndDimensions(reciprocal, targetBaseUnit, 1);
+
+ if (checkAllDimensionsAreZeros(convertible)) {
+ return CONVERTIBLE;
+ }
+
+ if (checkAllDimensionsAreZeros(reciprocal)) {
+ return RECIPROCAL;
+ }
+
+ return UNCONVERTIBLE;
+}
+
+UnitConverter::UnitConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
+ const ConversionRates &ratesInfo, UErrorCode &status)
+ : conversionRate_(source.copy(status), target.copy(status)) {
+ if (source.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED ||
+ target.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
+
+ Convertibility unitsState = extractConvertibility(source, target, ratesInfo, status);
+ if (U_FAILURE(status)) return;
+ if (unitsState == Convertibility::UNCONVERTIBLE) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
+
+ loadConversionRate(conversionRate_, conversionRate_.source, conversionRate_.target, unitsState,
+ ratesInfo, status);
+}
+
+double UnitConverter::convert(double inputValue) const {
+ double result =
+ inputValue + conversionRate_.sourceOffset; // Reset the input to the target zero index.
+ // Convert the quantity to from the source scale to the target scale.
+ result *= conversionRate_.factorNum / conversionRate_.factorDen;
+
+ result -= conversionRate_.targetOffset; // Set the result to its index.
+
+ if (conversionRate_.reciprocal) {
+ if (result == 0) {
+ // TODO: demonstrate the resulting behaviour in tests... and figure
+ // out desired behaviour. (Theoretical result should be infinity,
+ // not 0.)
+ return 0.0;
+ }
+ result = 1.0 / result;
+ }
+
+ return result;
+}
+
+double UnitConverter::convertInverse(double inputValue) const {
+ double result = inputValue;
+ if (conversionRate_.reciprocal) {
+ if (result == 0) {
+ // TODO: demonstrate the resulting behaviour in tests... and figure
+ // out desired behaviour. (Theoretical result should be infinity,
+ // not 0.)
+ return 0.0;
+ }
+ result = 1.0 / result;
+ }
+ result += conversionRate_.targetOffset;
+ result *= conversionRate_.factorDen / conversionRate_.factorNum;
+ result -= conversionRate_.sourceOffset;
+ return result;
+}
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_converter.h b/Build/source/libs/icu/icu-src/source/i18n/units_converter.h
new file mode 100644
index 00000000000..7650131b1f6
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_converter.h
@@ -0,0 +1,173 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+#ifndef __UNITS_CONVERTER_H__
+#define __UNITS_CONVERTER_H__
+
+#include "cmemory.h"
+#include "measunit_impl.h"
+#include "unicode/errorcode.h"
+#include "unicode/stringpiece.h"
+#include "unicode/uobject.h"
+#include "units_converter.h"
+#include "units_data.h"
+
+U_NAMESPACE_BEGIN
+namespace units {
+
+/* Internal Structure */
+
+enum Constants {
+ CONSTANT_FT2M, // ft2m stands for foot to meter.
+ CONSTANT_PI, // PI
+ CONSTANT_GRAVITY, // Gravity
+ CONSTANT_G,
+ CONSTANT_GAL_IMP2M3, // Gallon imp to m3
+ CONSTANT_LB2KG, // Pound to Kilogram
+
+ // Must be the last element.
+ CONSTANTS_COUNT
+};
+
+// These values are a hard-coded subset of unitConstants in the units
+// resources file. A unit test checks that all constants in the resource
+// file are at least recognised by the code. Derived constants' values or
+// hard-coded derivations are not checked.
+static const double constantsValues[CONSTANTS_COUNT] = {
+ 0.3048, // CONSTANT_FT2M
+ 411557987.0 / 131002976.0, // CONSTANT_PI
+ 9.80665, // CONSTANT_GRAVITY
+ 6.67408E-11, // CONSTANT_G
+ 0.00454609, // CONSTANT_GAL_IMP2M3
+ 0.45359237, // CONSTANT_LB2KG
+};
+
+typedef enum Signum {
+ NEGATIVE = -1,
+ POSITIVE = 1,
+} Signum;
+
+/* Represents a conversion factor */
+struct U_I18N_API Factor {
+ double factorNum = 1;
+ double factorDen = 1;
+ double offset = 0;
+ bool reciprocal = false;
+ int32_t constants[CONSTANTS_COUNT] = {};
+
+ void multiplyBy(const Factor &rhs);
+ void divideBy(const Factor &rhs);
+
+ // Apply the power to the factor.
+ void power(int32_t power);
+
+ // Flip the `Factor`, for example, factor= 2/3, flippedFactor = 3/2
+ void flip();
+
+ // Apply SI prefix to the `Factor`
+ void applySiPrefix(UMeasureSIPrefix siPrefix);
+ void substituteConstants();
+};
+
+/*
+ * Adds a single factor element to the `Factor`. e.g "ft3m", "2.333" or "cup2m3". But not "cup2m3^3".
+ */
+void U_I18N_API addSingleFactorConstant(StringPiece baseStr, int32_t power, Signum sigNum,
+ Factor &factor, UErrorCode &status);
+
+/**
+ * Represents the conversion rate between `source` and `target`.
+ */
+struct U_I18N_API ConversionRate : public UMemory {
+ const MeasureUnitImpl source;
+ const MeasureUnitImpl target;
+ double factorNum = 1;
+ double factorDen = 1;
+ double sourceOffset = 0;
+ double targetOffset = 0;
+ bool reciprocal = false;
+
+ ConversionRate(MeasureUnitImpl &&source, MeasureUnitImpl &&target)
+ : source(std::move(source)), target(std::move(target)) {}
+};
+
+enum Convertibility {
+ RECIPROCAL,
+ CONVERTIBLE,
+ UNCONVERTIBLE,
+};
+
+MeasureUnitImpl U_I18N_API extractCompoundBaseUnit(const MeasureUnitImpl &source,
+ const ConversionRates &conversionRates,
+ UErrorCode &status);
+
+/**
+ * Check if the convertibility between `source` and `target`.
+ * For example:
+ * `meter` and `foot` are `CONVERTIBLE`.
+ * `meter-per-second` and `second-per-meter` are `RECIPROCAL`.
+ * `meter` and `pound` are `UNCONVERTIBLE`.
+ *
+ * NOTE:
+ * Only works with SINGLE and COMPOUND units. If one of the units is a
+ * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity.
+ */
+Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source,
+ const MeasureUnitImpl &target,
+ const ConversionRates &conversionRates,
+ UErrorCode &status);
+
+/**
+ * Converts from a source `MeasureUnit` to a target `MeasureUnit`.
+ *
+ * NOTE:
+ * Only works with SINGLE and COMPOUND units. If one of the units is a
+ * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity.
+ */
+class U_I18N_API UnitConverter : public UMemory {
+ public:
+ /**
+ * Constructor of `UnitConverter`.
+ * NOTE:
+ * - source and target must be under the same category
+ * - e.g. meter to mile --> both of them are length units.
+ *
+ * @param source represents the source unit.
+ * @param target represents the target unit.
+ * @param ratesInfo Contains all the needed conversion rates.
+ * @param status
+ */
+ UnitConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
+ const ConversionRates &ratesInfo, UErrorCode &status);
+
+ /**
+ * Convert a measurement expressed in the source unit to a measurement
+ * expressed in the target unit.
+ *
+ * @param inputValue the value to be converted.
+ * @return the converted value.
+ */
+ double convert(double inputValue) const;
+
+ /**
+ * The inverse of convert(): convert a measurement expressed in the target
+ * unit to a measurement expressed in the source unit.
+ *
+ * @param inputValue the value to be converted.
+ * @return the converted value.
+ */
+ double convertInverse(double inputValue) const;
+
+ private:
+ ConversionRate conversionRate_;
+};
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif //__UNITS_CONVERTER_H__
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp
new file mode 100644
index 00000000000..42bd6248b0b
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp
@@ -0,0 +1,428 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "cstring.h"
+#include "number_decimalquantity.h"
+#include "resource.h"
+#include "uassert.h"
+#include "unicode/unistr.h"
+#include "unicode/ures.h"
+#include "units_data.h"
+#include "uresimp.h"
+#include "util.h"
+#include <utility>
+
+U_NAMESPACE_BEGIN
+namespace units {
+
+namespace {
+
+using icu::number::impl::DecimalQuantity;
+
+void trimSpaces(CharString& factor, UErrorCode& status){
+ CharString trimmed;
+ for (int i = 0 ; i < factor.length(); i++) {
+ if (factor[i] == ' ') continue;
+
+ trimmed.append(factor[i], status);
+ }
+
+ factor = std::move(trimmed);
+}
+
+/**
+ * A ResourceSink that collects conversion rate information.
+ *
+ * This class is for use by ures_getAllItemsWithFallback.
+ */
+class ConversionRateDataSink : public ResourceSink {
+ public:
+ /**
+ * Constructor.
+ * @param out The vector to which ConversionRateInfo instances are to be
+ * added. This vector must outlive the use of the ResourceSink.
+ */
+ explicit ConversionRateDataSink(MaybeStackVector<ConversionRateInfo> *out) : outVector(out) {}
+
+ /**
+ * Method for use by `ures_getAllItemsWithFallback`. Adds the unit
+ * conversion rates that are found in `value` to the output vector.
+ *
+ * @param source This string must be "convertUnits": the resource that this
+ * class supports reading.
+ * @param value The "convertUnits" resource, containing unit conversion rate
+ * information.
+ * @param noFallback Ignored.
+ * @param status The standard ICU error code output parameter.
+ */
+ void put(const char *source, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) {
+ if (U_FAILURE(status)) { return; }
+ if (uprv_strcmp(source, "convertUnits") != 0) {
+ // This is very strict, however it is the cheapest way to be sure
+ // that with `value`, we're looking at the convertUnits table.
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ ResourceTable conversionRateTable = value.getTable(status);
+ const char *srcUnit;
+ // We're reusing `value`, which seems to be a common pattern:
+ for (int32_t unit = 0; conversionRateTable.getKeyAndValue(unit, srcUnit, value); unit++) {
+ ResourceTable unitTable = value.getTable(status);
+ const char *key;
+ UnicodeString baseUnit = ICU_Utility::makeBogusString();
+ UnicodeString factor = ICU_Utility::makeBogusString();
+ UnicodeString offset = ICU_Utility::makeBogusString();
+ for (int32_t i = 0; unitTable.getKeyAndValue(i, key, value); i++) {
+ if (uprv_strcmp(key, "target") == 0) {
+ baseUnit = value.getUnicodeString(status);
+ } else if (uprv_strcmp(key, "factor") == 0) {
+ factor = value.getUnicodeString(status);
+ } else if (uprv_strcmp(key, "offset") == 0) {
+ offset = value.getUnicodeString(status);
+ }
+ }
+ if (U_FAILURE(status)) { return; }
+ if (baseUnit.isBogus() || factor.isBogus()) {
+ // We could not find a usable conversion rate: bad resource.
+ status = U_MISSING_RESOURCE_ERROR;
+ return;
+ }
+
+ // We don't have this ConversionRateInfo yet: add it.
+ ConversionRateInfo *cr = outVector->emplaceBack();
+ if (!cr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ } else {
+ cr->sourceUnit.append(srcUnit, status);
+ cr->baseUnit.appendInvariantChars(baseUnit, status);
+ cr->factor.appendInvariantChars(factor, status);
+ trimSpaces(cr->factor, status);
+ if (!offset.isBogus()) cr->offset.appendInvariantChars(offset, status);
+ }
+ }
+ return;
+ }
+
+ private:
+ MaybeStackVector<ConversionRateInfo> *outVector;
+};
+
+bool operator<(const UnitPreferenceMetadata &a, const UnitPreferenceMetadata &b) {
+ return a.compareTo(b) < 0;
+}
+
+/**
+ * A ResourceSink that collects unit preferences information.
+ *
+ * This class is for use by ures_getAllItemsWithFallback.
+ */
+class UnitPreferencesSink : public ResourceSink {
+ public:
+ /**
+ * Constructor.
+ * @param outPrefs The vector to which UnitPreference instances are to be
+ * added. This vector must outlive the use of the ResourceSink.
+ * @param outMetadata The vector to which UnitPreferenceMetadata instances
+ * are to be added. This vector must outlive the use of the ResourceSink.
+ */
+ explicit UnitPreferencesSink(MaybeStackVector<UnitPreference> *outPrefs,
+ MaybeStackVector<UnitPreferenceMetadata> *outMetadata)
+ : preferences(outPrefs), metadata(outMetadata) {}
+
+ /**
+ * Method for use by `ures_getAllItemsWithFallback`. Adds the unit
+ * preferences info that are found in `value` to the output vector.
+ *
+ * @param source This string must be "unitPreferenceData": the resource that
+ * this class supports reading.
+ * @param value The "unitPreferenceData" resource, containing unit
+ * preferences data.
+ * @param noFallback Ignored.
+ * @param status The standard ICU error code output parameter. Note: if an
+ * error is returned, outPrefs and outMetadata may be inconsistent.
+ */
+ void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) {
+ if (U_FAILURE(status)) { return; }
+ if (uprv_strcmp(key, "unitPreferenceData") != 0) {
+ // This is very strict, however it is the cheapest way to be sure
+ // that with `value`, we're looking at the convertUnits table.
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ // The unitPreferenceData structure (see data/misc/units.txt) contains a
+ // hierarchy of category/usage/region, within which are a set of
+ // preferences. Hence three for-loops and another loop for the
+ // preferences themselves:
+ ResourceTable unitPreferenceDataTable = value.getTable(status);
+ const char *category;
+ for (int32_t i = 0; unitPreferenceDataTable.getKeyAndValue(i, category, value); i++) {
+ ResourceTable categoryTable = value.getTable(status);
+ const char *usage;
+ for (int32_t j = 0; categoryTable.getKeyAndValue(j, usage, value); j++) {
+ ResourceTable regionTable = value.getTable(status);
+ const char *region;
+ for (int32_t k = 0; regionTable.getKeyAndValue(k, region, value); k++) {
+ // `value` now contains the set of preferences for
+ // category/usage/region.
+ ResourceArray unitPrefs = value.getArray(status);
+ if (U_FAILURE(status)) { return; }
+ int32_t prefLen = unitPrefs.getSize();
+
+ // Update metadata for this set of preferences.
+ UnitPreferenceMetadata *meta = metadata->emplaceBack(
+ category, usage, region, preferences->length(), prefLen, status);
+ if (!meta) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ if (U_FAILURE(status)) { return; }
+ if (metadata->length() > 1) {
+ // Verify that unit preferences are sorted and
+ // without duplicates.
+ if (!(*(*metadata)[metadata->length() - 2] <
+ *(*metadata)[metadata->length() - 1])) {
+ status = U_INVALID_FORMAT_ERROR;
+ return;
+ }
+ }
+
+ // Collect the individual preferences.
+ for (int32_t i = 0; unitPrefs.getValue(i, value); i++) {
+ UnitPreference *up = preferences->emplaceBack();
+ if (!up) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ ResourceTable unitPref = value.getTable(status);
+ if (U_FAILURE(status)) { return; }
+ for (int32_t i = 0; unitPref.getKeyAndValue(i, key, value); ++i) {
+ if (uprv_strcmp(key, "unit") == 0) {
+ int32_t length;
+ const UChar *u = value.getString(length, status);
+ up->unit.appendInvariantChars(u, length, status);
+ } else if (uprv_strcmp(key, "geq") == 0) {
+ int32_t length;
+ const UChar *g = value.getString(length, status);
+ CharString geq;
+ geq.appendInvariantChars(g, length, status);
+ DecimalQuantity dq;
+ dq.setToDecNumber(geq.data(), status);
+ up->geq = dq.toDouble();
+ } else if (uprv_strcmp(key, "skeleton") == 0) {
+ up->skeleton = value.getUnicodeString(status);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private:
+ MaybeStackVector<UnitPreference> *preferences;
+ MaybeStackVector<UnitPreferenceMetadata> *metadata;
+};
+
+int32_t binarySearch(const MaybeStackVector<UnitPreferenceMetadata> *metadata,
+ const UnitPreferenceMetadata &desired, bool *foundCategory, bool *foundUsage,
+ bool *foundRegion, UErrorCode &status) {
+ if (U_FAILURE(status)) { return -1; }
+ int32_t start = 0;
+ int32_t end = metadata->length();
+ *foundCategory = false;
+ *foundUsage = false;
+ *foundRegion = false;
+ while (start < end) {
+ int32_t mid = (start + end) / 2;
+ int32_t cmp = (*metadata)[mid]->compareTo(desired, foundCategory, foundUsage, foundRegion);
+ if (cmp < 0) {
+ start = mid + 1;
+ } else if (cmp > 0) {
+ end = mid;
+ } else {
+ return mid;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Finds the UnitPreferenceMetadata instance that matches the given category,
+ * usage and region: if missing, region falls back to "001", and usage
+ * repeatedly drops tailing components, eventually trying "default"
+ * ("land-agriculture-grain" -> "land-agriculture" -> "land" -> "default").
+ *
+ * @param metadata The full list of UnitPreferenceMetadata instances.
+ * @param category The category to search for. See getUnitCategory().
+ * @param usage The usage for which formatting preferences is needed. If the
+ * given usage is not known, automatic fallback occurs, see function description
+ * above.
+ * @param region The region for which preferences are needed. If there are no
+ * region-specific preferences, this function automatically falls back to the
+ * "001" region (global).
+ * @param status The standard ICU error code output parameter.
+ * * If an invalid category is given, status will be U_ILLEGAL_ARGUMENT_ERROR.
+ * * If fallback to "default" or "001" didn't resolve, status will be
+ * U_MISSING_RESOURCE.
+ * @return The index into the metadata vector which represents the appropriate
+ * preferences. If appropriate preferences are not found, -1 is returned.
+ */
+int32_t getPreferenceMetadataIndex(const MaybeStackVector<UnitPreferenceMetadata> *metadata,
+ StringPiece category, StringPiece usage, StringPiece region,
+ UErrorCode &status) {
+ if (U_FAILURE(status)) { return -1; }
+ bool foundCategory, foundUsage, foundRegion;
+ UnitPreferenceMetadata desired(category, usage, region, -1, -1, status);
+ int32_t idx = binarySearch(metadata, desired, &foundCategory, &foundUsage, &foundRegion, status);
+ if (U_FAILURE(status)) { return -1; }
+ if (idx >= 0) { return idx; }
+ if (!foundCategory) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return -1;
+ }
+ U_ASSERT(foundCategory);
+ while (!foundUsage) {
+ int32_t lastDashIdx = desired.usage.lastIndexOf('-');
+ if (lastDashIdx > 0) {
+ desired.usage.truncate(lastDashIdx);
+ } else if (uprv_strcmp(desired.usage.data(), "default") != 0) {
+ desired.usage.truncate(0).append("default", status);
+ } else {
+ // "default" is not supposed to be missing for any valid category.
+ status = U_MISSING_RESOURCE_ERROR;
+ return -1;
+ }
+ idx = binarySearch(metadata, desired, &foundCategory, &foundUsage, &foundRegion, status);
+ if (U_FAILURE(status)) { return -1; }
+ }
+ U_ASSERT(foundCategory);
+ U_ASSERT(foundUsage);
+ if (!foundRegion) {
+ if (uprv_strcmp(desired.region.data(), "001") != 0) {
+ desired.region.truncate(0).append("001", status);
+ idx = binarySearch(metadata, desired, &foundCategory, &foundUsage, &foundRegion, status);
+ }
+ if (!foundRegion) {
+ // "001" is not supposed to be missing for any valid usage.
+ status = U_MISSING_RESOURCE_ERROR;
+ return -1;
+ }
+ }
+ U_ASSERT(foundCategory);
+ U_ASSERT(foundUsage);
+ U_ASSERT(foundRegion);
+ U_ASSERT(idx >= 0);
+ return idx;
+}
+
+} // namespace
+
+UnitPreferenceMetadata::UnitPreferenceMetadata(StringPiece category, StringPiece usage,
+ StringPiece region, int32_t prefsOffset,
+ int32_t prefsCount, UErrorCode &status) {
+ this->category.append(category, status);
+ this->usage.append(usage, status);
+ this->region.append(region, status);
+ this->prefsOffset = prefsOffset;
+ this->prefsCount = prefsCount;
+}
+
+int32_t UnitPreferenceMetadata::compareTo(const UnitPreferenceMetadata &other) const {
+ int32_t cmp = uprv_strcmp(category.data(), other.category.data());
+ if (cmp == 0) {
+ cmp = uprv_strcmp(usage.data(), other.usage.data());
+ }
+ if (cmp == 0) {
+ cmp = uprv_strcmp(region.data(), other.region.data());
+ }
+ return cmp;
+}
+
+int32_t UnitPreferenceMetadata::compareTo(const UnitPreferenceMetadata &other, bool *foundCategory,
+ bool *foundUsage, bool *foundRegion) const {
+ int32_t cmp = uprv_strcmp(category.data(), other.category.data());
+ if (cmp == 0) {
+ *foundCategory = true;
+ cmp = uprv_strcmp(usage.data(), other.usage.data());
+ }
+ if (cmp == 0) {
+ *foundUsage = true;
+ cmp = uprv_strcmp(region.data(), other.region.data());
+ }
+ if (cmp == 0) {
+ *foundRegion = true;
+ }
+ return cmp;
+}
+
+CharString U_I18N_API getUnitCategory(const char *baseUnitIdentifier, UErrorCode &status) {
+ CharString result;
+ LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
+ LocalUResourceBundlePointer unitQuantities(
+ ures_getByKey(unitsBundle.getAlias(), "unitQuantities", NULL, &status));
+ int32_t categoryLength;
+ if (U_FAILURE(status)) { return result; }
+ const UChar *uCategory =
+ ures_getStringByKey(unitQuantities.getAlias(), baseUnitIdentifier, &categoryLength, &status);
+ if (U_FAILURE(status)) {
+ // TODO(CLDR-13787,hugovdm): special-casing the consumption-inverse
+ // case. Once CLDR-13787 is clarified, this should be generalised (or
+ // possibly removed):
+ if (uprv_strcmp(baseUnitIdentifier, "meter-per-cubic-meter") == 0) {
+ status = U_ZERO_ERROR;
+ result.append("consumption-inverse", status);
+ return result;
+ }
+ }
+ result.appendInvariantChars(uCategory, categoryLength, status);
+ return result;
+}
+
+// TODO: this may be unnecessary. Fold into ConversionRates class? Or move to anonymous namespace?
+void U_I18N_API getAllConversionRates(MaybeStackVector<ConversionRateInfo> &result, UErrorCode &status) {
+ LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
+ ConversionRateDataSink sink(&result);
+ ures_getAllItemsWithFallback(unitsBundle.getAlias(), "convertUnits", sink, status);
+}
+
+const ConversionRateInfo *ConversionRates::extractConversionInfo(StringPiece source,
+ UErrorCode &status) const {
+ for (size_t i = 0, n = conversionInfo_.length(); i < n; ++i) {
+ if (conversionInfo_[i]->sourceUnit.toStringPiece() == source) return conversionInfo_[i];
+ }
+
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return nullptr;
+}
+
+U_I18N_API UnitPreferences::UnitPreferences(UErrorCode &status) {
+ LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
+ UnitPreferencesSink sink(&unitPrefs_, &metadata_);
+ ures_getAllItemsWithFallback(unitsBundle.getAlias(), "unitPreferenceData", sink, status);
+}
+
+// TODO: make outPreferences const?
+//
+// TODO: consider replacing `UnitPreference **&outPreferences` with slice class
+// of some kind.
+void U_I18N_API UnitPreferences::getPreferencesFor(StringPiece category, StringPiece usage,
+ StringPiece region,
+ const UnitPreference *const *&outPreferences,
+ int32_t &preferenceCount, UErrorCode &status) const {
+ int32_t idx = getPreferenceMetadataIndex(&metadata_, category, usage, region, status);
+ if (U_FAILURE(status)) { return; }
+ U_ASSERT(idx >= 0); // Failures should have been taken care of by `status`.
+ const UnitPreferenceMetadata *m = metadata_[idx];
+ outPreferences = unitPrefs_.getAlias() + m->prefsOffset;
+ preferenceCount = m->prefsCount;
+}
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_data.h b/Build/source/libs/icu/icu-src/source/i18n/units_data.h
new file mode 100644
index 00000000000..b6fe8e88de3
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_data.h
@@ -0,0 +1,229 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+#ifndef __UNITS_DATA_H__
+#define __UNITS_DATA_H__
+
+#include <limits>
+
+#include "charstr.h"
+#include "cmemory.h"
+#include "unicode/stringpiece.h"
+#include "unicode/uobject.h"
+
+U_NAMESPACE_BEGIN
+namespace units {
+
+/**
+ * Looks up the unit category of a base unit identifier.
+ *
+ * Only supports base units, other units must be resolved to base units before
+ * passing to this function.
+ *
+ * Categories are found in `unitQuantities` in the `units` resource (see
+ * `units.txt`).
+ *
+ * TODO(hugovdm): if we give units_data.cpp access to the functionality of
+ * `extractCompoundBaseUnit` which is currently in units_converter.cpp, we could
+ * support all units for which there is a category. Does it make sense to move
+ * that function to units_data.cpp?
+ */
+CharString U_I18N_API getUnitCategory(const char *baseUnitIdentifier, UErrorCode &status);
+
+/**
+ * Encapsulates "convertUnits" information from units resources, specifying how
+ * to convert from one unit to another.
+ *
+ * Information in this class is still in the form of strings: symbolic constants
+ * need to be interpreted. Rationale: symbols can cancel out for higher
+ * precision conversion - going from feet to inches should cancel out the
+ * `ft_to_m` constant.
+ */
+class U_I18N_API ConversionRateInfo : public UMemory {
+ public:
+ ConversionRateInfo() {}
+ ConversionRateInfo(StringPiece sourceUnit, StringPiece baseUnit, StringPiece factor,
+ StringPiece offset, UErrorCode &status)
+ : sourceUnit(), baseUnit(), factor(), offset() {
+ this->sourceUnit.append(sourceUnit, status);
+ this->baseUnit.append(baseUnit, status);
+ this->factor.append(factor, status);
+ this->offset.append(offset, status);
+ }
+ CharString sourceUnit;
+ CharString baseUnit;
+ CharString factor;
+ CharString offset;
+};
+
+} // namespace units
+
+// Export explicit template instantiations of MaybeStackArray, MemoryPool and
+// MaybeStackVector. This is required when building DLLs for Windows. (See
+// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
+//
+// Note: These need to be outside of the units namespace, or Clang will generate
+// a compile error.
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<units::ConversionRateInfo*, 8>;
+template class U_I18N_API MemoryPool<units::ConversionRateInfo, 8>;
+template class U_I18N_API MaybeStackVector<units::ConversionRateInfo, 8>;
+#endif
+
+namespace units {
+
+/**
+ * Returns ConversionRateInfo for all supported conversions.
+ *
+ * @param result Receives the set of conversion rates.
+ * @param status Receives status.
+ */
+void U_I18N_API getAllConversionRates(MaybeStackVector<ConversionRateInfo> &result, UErrorCode &status);
+
+/**
+ * Contains all the supported conversion rates.
+ */
+class U_I18N_API ConversionRates {
+ public:
+ /**
+ * Constructor
+ *
+ * @param status Receives status.
+ */
+ ConversionRates(UErrorCode &status) { getAllConversionRates(conversionInfo_, status); }
+
+ /**
+ * Returns a pointer to the conversion rate info that match the `source`.
+ *
+ * @param source Contains the source.
+ * @param status Receives status.
+ */
+ const ConversionRateInfo *extractConversionInfo(StringPiece source, UErrorCode &status) const;
+
+ private:
+ MaybeStackVector<ConversionRateInfo> conversionInfo_;
+};
+
+// Encapsulates unitPreferenceData information from units resources, specifying
+// a sequence of output unit preferences.
+struct U_I18N_API UnitPreference : public UMemory {
+ // Set geq to 1.0 by default
+ UnitPreference() : geq(1.0) {}
+ CharString unit;
+ double geq;
+ UnicodeString skeleton;
+};
+
+/**
+ * Metadata about the preferences in UnitPreferences::unitPrefs_.
+ *
+ * This class owns all of its data.
+ *
+ * UnitPreferenceMetadata lives in the anonymous namespace, because it should
+ * only be useful to internal code and unit testing code.
+ */
+class U_I18N_API UnitPreferenceMetadata : public UMemory {
+ public:
+ UnitPreferenceMetadata() {}
+ // Constructor, makes copies of the parameters passed to it.
+ UnitPreferenceMetadata(StringPiece category, StringPiece usage, StringPiece region,
+ int32_t prefsOffset, int32_t prefsCount, UErrorCode &status);
+
+ // Unit category (e.g. "length", "mass", "electric-capacitance").
+ CharString category;
+ // Usage (e.g. "road", "vehicle-fuel", "blood-glucose"). Every category
+ // should have an entry for "default" usage. TODO(hugovdm): add a test for
+ // this.
+ CharString usage;
+ // Region code (e.g. "US", "CZ", "001"). Every usage should have an entry
+ // for the "001" region ("world"). TODO(hugovdm): add a test for this.
+ CharString region;
+ // Offset into the UnitPreferences::unitPrefs_ list where the relevant
+ // preferences are found.
+ int32_t prefsOffset;
+ // The number of preferences that form this set.
+ int32_t prefsCount;
+
+ int32_t compareTo(const UnitPreferenceMetadata &other) const;
+ int32_t compareTo(const UnitPreferenceMetadata &other, bool *foundCategory, bool *foundUsage,
+ bool *foundRegion) const;
+};
+
+} // namespace units
+
+// Export explicit template instantiations of MaybeStackArray, MemoryPool and
+// MaybeStackVector. This is required when building DLLs for Windows. (See
+// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
+//
+// Note: These need to be outside of the units namespace, or Clang will generate
+// a compile error.
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<units::UnitPreferenceMetadata*, 8>;
+template class U_I18N_API MemoryPool<units::UnitPreferenceMetadata, 8>;
+template class U_I18N_API MaybeStackVector<units::UnitPreferenceMetadata, 8>;
+template class U_I18N_API MaybeStackArray<units::UnitPreference*, 8>;
+template class U_I18N_API MemoryPool<units::UnitPreference, 8>;
+template class U_I18N_API MaybeStackVector<units::UnitPreference, 8>;
+#endif
+
+namespace units {
+
+/**
+ * Unit Preferences information for various locales and usages.
+ */
+class U_I18N_API UnitPreferences {
+ public:
+ /**
+ * Constructor, loads all the preference data.
+ *
+ * @param status Receives status.
+ */
+ UnitPreferences(UErrorCode &status);
+
+ /**
+ * Returns the set of unit preferences in the particular category that best
+ * matches the specified usage and region.
+ *
+ * If region can't be found, falls back to global (001). If usage can't be
+ * found, falls back to "default".
+ *
+ * @param category The category within which to look up usage and region.
+ * (TODO(hugovdm): improve docs on how to find the category, once the lookup
+ * function is added.)
+ * @param usage The usage parameter. (TODO(hugovdm): improve this
+ * documentation. Add reference to some list of usages we support.) If the
+ * given usage is not found, the method automatically falls back to
+ * "default".
+ * @param region The region whose preferences are desired. If there are no
+ * specific preferences for the requested region, the method automatically
+ * falls back to region "001" ("world").
+ * @param outPreferences A pointer into an array of preferences: essentially
+ * an array slice in combination with preferenceCount.
+ * @param preferenceCount The number of unit preferences that belong to the
+ * result set.
+ * @param status Receives status.
+ *
+ * TODO(hugovdm): maybe replace `UnitPreference **&outPreferences` with a slice class?
+ */
+ void getPreferencesFor(StringPiece category, StringPiece usage, StringPiece region,
+ const UnitPreference *const *&outPreferences, int32_t &preferenceCount,
+ UErrorCode &status) const;
+
+ protected:
+ // Metadata about the sets of preferences, this is the index for looking up
+ // preferences in the unitPrefs_ list.
+ MaybeStackVector<UnitPreferenceMetadata> metadata_;
+ // All the preferences as a flat list: which usage and region preferences
+ // are associated with is stored in `metadata_`.
+ MaybeStackVector<UnitPreference> unitPrefs_;
+};
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif //__UNITS_DATA_H__
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp
new file mode 100644
index 00000000000..3158718fd22
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp
@@ -0,0 +1,132 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "charstr.h"
+#include "cmemory.h"
+#include "cstring.h"
+#include "measunit_impl.h"
+#include "number_decimalquantity.h"
+#include "number_roundingutils.h"
+#include "resource.h"
+#include "unicode/measure.h"
+#include "units_data.h"
+#include "units_router.h"
+#include <cmath>
+
+U_NAMESPACE_BEGIN
+namespace units {
+
+using number::Precision;
+using number::impl::parseIncrementOption;
+
+Precision UnitsRouter::parseSkeletonToPrecision(icu::UnicodeString precisionSkeleton,
+ UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ // As a member of UsagePrefsHandler, which is a friend of Precision, we
+ // get access to the default constructor.
+ return {};
+ }
+ constexpr int32_t kSkelPrefixLen = 20;
+ if (!precisionSkeleton.startsWith(UNICODE_STRING_SIMPLE("precision-increment/"))) {
+ status = U_INVALID_FORMAT_ERROR;
+ return {};
+ }
+ U_ASSERT(precisionSkeleton[kSkelPrefixLen - 1] == u'/');
+ StringSegment segment(precisionSkeleton, false);
+ segment.adjustOffset(kSkelPrefixLen);
+ Precision result;
+ parseIncrementOption(segment, result, status);
+ return result;
+}
+
+UnitsRouter::UnitsRouter(MeasureUnit inputUnit, StringPiece region, StringPiece usage,
+ UErrorCode &status) {
+ // TODO: do we want to pass in ConversionRates and UnitPreferences instead
+ // of loading in each UnitsRouter instance? (Or make global?)
+ ConversionRates conversionRates(status);
+ UnitPreferences prefs(status);
+
+ MeasureUnitImpl inputUnitImpl = MeasureUnitImpl::forMeasureUnitMaybeCopy(inputUnit, status);
+ MeasureUnit baseUnit =
+ (extractCompoundBaseUnit(inputUnitImpl, conversionRates, status)).build(status);
+ CharString category = getUnitCategory(baseUnit.getIdentifier(), status);
+
+ const UnitPreference *const *unitPreferences;
+ int32_t preferencesCount;
+ prefs.getPreferencesFor(category.data(), usage, region, unitPreferences, preferencesCount, status);
+
+ for (int i = 0; i < preferencesCount; ++i) {
+ const auto &preference = *unitPreferences[i];
+
+ MeasureUnitImpl complexTargetUnitImpl =
+ MeasureUnitImpl::forIdentifier(preference.unit.data(), status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ UnicodeString precision = preference.skeleton;
+
+ // For now, we only have "precision-increment" in Units Preferences skeleton.
+ // Therefore, we check if the skeleton starts with "precision-increment" and force the program to
+ // fail otherwise.
+ // NOTE:
+ // It is allowed to have an empty precision.
+ if (!precision.isEmpty() && !precision.startsWith(u"precision-increment", 19)) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
+
+ outputUnits_.emplaceBackAndCheckErrorCode(status,
+ complexTargetUnitImpl.copy(status).build(status));
+ converterPreferences_.emplaceBackAndCheckErrorCode(status, inputUnitImpl, complexTargetUnitImpl,
+ preference.geq, std::move(precision),
+ conversionRates, status);
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+}
+
+RouteResult UnitsRouter::route(double quantity, icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const {
+ // Find the matching preference
+ const ConverterPreference *converterPreference = nullptr;
+ for (int32_t i = 0, n = converterPreferences_.length(); i < n; i++) {
+ converterPreference = converterPreferences_[i];
+ if (converterPreference->converter.greaterThanOrEqual(std::abs(quantity) * (1 + DBL_EPSILON),
+ converterPreference->limit)) {
+ break;
+ }
+ }
+ U_ASSERT(converterPreference != nullptr);
+
+ // Set up the rounder for this preference's precision
+ if (rounder != nullptr && rounder->fPrecision.isBogus()) {
+ if (converterPreference->precision.length() > 0) {
+ rounder->fPrecision = parseSkeletonToPrecision(converterPreference->precision, status);
+ } else {
+ // We use the same rounding mode as COMPACT notation: known to be a
+ // human-friendly rounding mode: integers, but add a decimal digit
+ // as needed to ensure we have at least 2 significant digits.
+ rounder->fPrecision = Precision::integer().withMinDigits(2);
+ }
+ }
+
+ return RouteResult(converterPreference->converter.convert(quantity, rounder, status),
+ converterPreference->targetUnit.copy(status));
+}
+
+const MaybeStackVector<MeasureUnit> *UnitsRouter::getOutputUnits() const {
+ // TODO: consider pulling this from converterPreferences_ and dropping
+ // outputUnits_?
+ return &outputUnits_;
+}
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_router.h b/Build/source/libs/icu/icu-src/source/i18n/units_router.h
new file mode 100644
index 00000000000..bd7a93d2d8c
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_router.h
@@ -0,0 +1,162 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+#ifndef __UNITS_ROUTER_H__
+#define __UNITS_ROUTER_H__
+
+#include <limits>
+
+#include "cmemory.h"
+#include "measunit_impl.h"
+#include "unicode/measunit.h"
+#include "unicode/stringpiece.h"
+#include "unicode/uobject.h"
+#include "units_complexconverter.h"
+#include "units_data.h"
+
+U_NAMESPACE_BEGIN
+
+// Forward declarations
+class Measure;
+namespace number {
+class Precision;
+}
+
+namespace units {
+
+struct RouteResult : UMemory {
+ // A list of measures: a single measure for single units, multiple measures
+ // for mixed units.
+ //
+ // TODO(icu-units/icu#21): figure out the right mixed unit API.
+ MaybeStackVector<Measure> measures;
+
+ // The output unit for this RouteResult. This may be a MIXED unit - for
+ // example: "yard-and-foot-and-inch", for which `measures` will have three
+ // elements.
+ MeasureUnitImpl outputUnit;
+
+ RouteResult(MaybeStackVector<Measure> measures, MeasureUnitImpl outputUnit)
+ : measures(std::move(measures)), outputUnit(std::move(outputUnit)) {}
+};
+
+/**
+ * Contains the complex unit converter and the limit which representing the smallest value that the
+ * converter should accept. For example, if the converter is converting to `foot+inch` and the limit
+ * equals 3.0, thus means the converter should not convert to a value less than `3.0 feet`.
+ *
+ * NOTE:
+ * if the limit doest not has a value `i.e. (std::numeric_limits<double>::lowest())`, this mean there
+ * is no limit for the converter.
+ */
+struct ConverterPreference : UMemory {
+ ComplexUnitsConverter converter;
+ double limit;
+ UnicodeString precision;
+
+ // The output unit for this ConverterPreference. This may be a MIXED unit -
+ // for example: "yard-and-foot-and-inch".
+ MeasureUnitImpl targetUnit;
+
+ // In case there is no limit, the limit will be -inf.
+ ConverterPreference(const MeasureUnitImpl &source, const MeasureUnitImpl &complexTarget,
+ UnicodeString precision, const ConversionRates &ratesInfo, UErrorCode &status)
+ : ConverterPreference(source, complexTarget, std::numeric_limits<double>::lowest(), precision,
+ ratesInfo, status) {}
+
+ ConverterPreference(const MeasureUnitImpl &source, const MeasureUnitImpl &complexTarget,
+ double limit, UnicodeString precision, const ConversionRates &ratesInfo,
+ UErrorCode &status)
+ : converter(source, complexTarget, ratesInfo, status), limit(limit),
+ precision(std::move(precision)), targetUnit(complexTarget.copy(status)) {}
+};
+
+} // namespace units
+
+// Export explicit template instantiations of MaybeStackArray, MemoryPool and
+// MaybeStackVector. This is required when building DLLs for Windows. (See
+// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
+//
+// Note: These need to be outside of the units namespace, or Clang will generate
+// a compile error.
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<units::ConverterPreference*, 8>;
+template class U_I18N_API MemoryPool<units::ConverterPreference, 8>;
+template class U_I18N_API MaybeStackVector<units::ConverterPreference, 8>;
+#endif
+
+namespace units {
+
+/**
+ * `UnitsRouter` responsible for converting from a single unit (such as `meter` or `meter-per-second`) to
+ * one of the complex units based on the limits.
+ * For example:
+ * if the input is `meter` and the output as following
+ * {`foot+inch`, limit: 3.0}
+ * {`inch` , limit: no value (-inf)}
+ * Thus means if the input in `meter` is greater than or equal to `3.0 feet`, the output will be in
+ * `foot+inch`, otherwise, the output will be in `inch`.
+ *
+ * NOTE:
+ * the output units and the their limits MUST BE in order, for example, if the output units, from the
+ * previous example, are the following:
+ * {`inch` , limit: no value (-inf)}
+ * {`foot+inch`, limit: 3.0}
+ * IN THIS CASE THE OUTPUT WILL BE ALWAYS IN `inch`.
+ *
+ * NOTE:
+ * the output units and their limits will be extracted from the units preferences database by knowing
+ * the followings:
+ * - input unit
+ * - locale
+ * - usage
+ *
+ * DESIGN:
+ * `UnitRouter` uses internally `ComplexUnitConverter` in order to convert the input units to the
+ * desired complex units and to check the limit too.
+ */
+class U_I18N_API UnitsRouter {
+ public:
+ UnitsRouter(MeasureUnit inputUnit, StringPiece locale, StringPiece usage, UErrorCode &status);
+
+ /**
+ * Performs locale and usage sensitive unit conversion.
+ * @param quantity The quantity to convert, expressed in terms of inputUnit.
+ * @param rounder If not null, this RoundingImpl will be used to do rounding
+ * on the converted value. If the rounder lacks an fPrecision, the
+ * rounder will be modified to use the preferred precision for the usage
+ * and locale preference, alternatively with the default precision.
+ * @param status Receives status.
+ */
+ RouteResult route(double quantity, icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const;
+
+ /**
+ * Returns the list of possible output units, i.e. the full set of
+ * preferences, for the localized, usage-specific unit preferences.
+ *
+ * The returned pointer should be valid for the lifetime of the
+ * UnitsRouter instance.
+ */
+ const MaybeStackVector<MeasureUnit> *getOutputUnits() const;
+
+ private:
+ // List of possible output units. TODO: converterPreferences_ now also has
+ // this data available. Maybe drop outputUnits_ and have getOutputUnits
+ // construct a the list from data in converterPreferences_ instead?
+ MaybeStackVector<MeasureUnit> outputUnits_;
+
+ MaybeStackVector<ConverterPreference> converterPreferences_;
+
+ static number::Precision parseSkeletonToPrecision(icu::UnicodeString precisionSkeleton,
+ UErrorCode &status);
+};
+
+} // namespace units
+U_NAMESPACE_END
+
+#endif //__UNITS_ROUTER_H__
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unum.cpp b/Build/source/libs/icu/icu-src/source/i18n/unum.cpp
index cce3db7d0bc..7043f7adc12 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unum.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/unum.cpp
@@ -898,7 +898,7 @@ unum_getContext(const UNumberFormat *fmt, UDisplayContextType type, UErrorCode*
return ((const NumberFormat*)fmt)->getContext(type, *status);
}
-U_INTERNAL UFormattable * U_EXPORT2
+U_CAPI UFormattable * U_EXPORT2
unum_parseToUFormattable(const UNumberFormat* fmt,
UFormattable *result,
const UChar* text,
@@ -922,7 +922,7 @@ unum_parseToUFormattable(const UNumberFormat* fmt,
return result;
}
-U_INTERNAL int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
unum_formatUFormattable(const UNumberFormat* fmt,
const UFormattable *number,
UChar *result,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp b/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp
index 5119257fd80..73e59a75c4d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp
@@ -20,6 +20,7 @@
#include "unicode/unumberformatter.h"
#include "number_decimalquantity.h"
#include "number_utypes.h"
+#include "numrange_impl.h"
U_NAMESPACE_USE
@@ -116,6 +117,25 @@ uplrules_selectFormatted(const UPluralRules *uplrules,
}
U_CAPI int32_t U_EXPORT2
+uplrules_selectForRange(const UPluralRules *uplrules,
+ const UFormattedNumberRange* urange,
+ UChar *keyword, int32_t capacity,
+ UErrorCode *status)
+{
+ if (U_FAILURE(*status)) {
+ return 0;
+ }
+ if (keyword == NULL ? capacity != 0 : capacity < 0) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+ const number::impl::UFormattedNumberRangeData* impl =
+ number::impl::validateUFormattedNumberRange(urange, *status);
+ UnicodeString result = ((PluralRules*)uplrules)->select(impl, *status);
+ return result.extract(keyword, capacity, *status);
+}
+
+U_CAPI int32_t U_EXPORT2
uplrules_selectWithFormat(const UPluralRules *uplrules,
double number,
const UNumberFormat *fmt,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp b/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
index 57c2febe9d0..7f41918cff9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
@@ -1508,7 +1508,8 @@ int32_t RegexCImpl::appendReplacement(RegularExpression *regexp,
(c32 >= 0x31 && c32 <= 0x39)) { // 0..9
groupName.append(c32);
} else if (c32 == RIGHTBRACKET) {
- groupNum = uhash_geti(regexp->fPat->fNamedCaptureMap, &groupName);
+ groupNum = regexp->fPat->fNamedCaptureMap ?
+ uhash_geti(regexp->fPat->fNamedCaptureMap, &groupName) : 0;
if (groupNum == 0) {
// Name not defined by pattern.
*status = U_REGEX_INVALID_CAPTURE_GROUP_NAME;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp b/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
index 5b7b326f1fd..33682389f5b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
@@ -79,65 +79,66 @@ void U_CALLCONV initializeStatics(UErrorCode &status) {
u"\\u030C\\u030F-\\u0311\\u0313\\u0314\\u031B\\u0323-\\u0328\\u032D\\u032E"
u"\\u0330\\u0331\\u0335\\u0338\\u0339\\u0342\\u0345\\u037B-\\u037D\\u0386"
u"\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03FC-\\u045F\\u048A-"
- u"\\u0529\\u052E\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0586\\u0588\\u05B4"
- u"\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u0655\\u0660-\\u0669"
- u"\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-\\u06D3\\u06D5\\u06E5\\u06E6"
- u"\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC\\u08B2\\u08B6-\\u08BD"
- u"\\u0901-\\u094D\\u094F\\u0950\\u0956\\u0957\\u0960-\\u0963\\u0966-\\u096F"
- u"\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990"
- u"\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7"
- u"\\u09C8\\u09CB-\\u09CE\\u09D7\\u09E0-\\u09E3\\u09E6-\\u09F1\\u09FC\\u09FE"
- u"\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30"
- u"\\u0A32\\u0A35\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-"
- u"\\u0A4D\\u0A5C\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91"
- u"\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5"
- u"\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AFA-"
- u"\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-"
- u"\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47\\u0B48\\u0B4B-"
- u"\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83"
- u"\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E"
- u"\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-"
- u"\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C0C\\u0C0E-"
- u"\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-"
- u"\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80"
- u"\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3"
- u"\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6"
- u"\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00\\u0D02\\u0D03\\u0D05-"
- u"\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-"
- u"\\u0D57\\u0D60\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-"
- u"\\u0D8E\\u0D91-\\u0D96\\u0D9A-\\u0DA5\\u0DA7-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD"
- u"\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDE\\u0DF2\\u0E01-"
- u"\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84"
- u"\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB2\\u0EB4-\\u0EBD\\u0EC0-"
- u"\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDE\\u0EDF\\u0F00\\u0F20-"
- u"\\u0F29\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-\\u0F47\\u0F49-\\u0F4C\\u0F4E-"
- u"\\u0F51\\u0F53-\\u0F56\\u0F58-\\u0F5B\\u0F5D-\\u0F68\\u0F6A-\\u0F6C\\u0F71"
- u"\\u0F72\\u0F74\\u0F7A-\\u0F80\\u0F82-\\u0F84\\u0F86-\\u0F92\\u0F94-\\u0F97"
- u"\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8"
- u"\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10C7\\u10CD\\u10D0-"
- u"\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-\\u1248\\u124A-\\u124D\\u1250-"
- u"\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0"
- u"\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-"
- u"\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u1780-"
- u"\\u17A2\\u17A5-\\u17A7\\u17A9-\\u17B3\\u17B6-\\u17CA\\u17D2\\u17D7\\u17DC"
- u"\\u17E0-\\u17E9\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00-\\u1E99"
- u"\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-"
- u"\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70\\u1F72\\u1F74"
- u"\\u1F76\\u1F78\\u1F7A\\u1F7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA\\u1FBC\\u1FC2-"
- u"\\u1FC4\\u1FC6-\\u1FC8\\u1FCA\\u1FCC\\u1FD0-\\u1FD2\\u1FD6-\\u1FDA\\u1FE0-"
- u"\\u1FE2\\u1FE4-\\u1FEA\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FF8\\u1FFA\\u1FFC"
- u"\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6"
- u"\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE"
- u"\\u3005-\\u3007\\u3041-\\u3096\\u3099\\u309A\\u309D\\u309E\\u30A1-\\u30FA"
- u"\\u30FC-\\u30FE\\u3105-\\u312F\\u31A0-\\u31BA\\u3400-\\u4DB5\\u4E00-\\u9FEF"
- u"\\uA660\\uA661\\uA674-\\uA67B\\uA67F\\uA69F\\uA717-\\uA71F\\uA788\\uA78D"
- u"\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7AE\\uA7AF\\uA7B8-\\uA7BF\\uA7C2-"
- u"\\uA7C6\\uA7FA\\uA9E7-\\uA9FE\\uAA60-\\uAA76\\uAA7A-\\uAA7F\\uAB01-\\uAB06"
- u"\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB66\\uAB67"
- u"\\uAC00-\\uD7A3\\uFA0E\\uFA0F\\uFA11\\uFA13\\uFA14\\uFA1F\\uFA21\\uFA23"
- u"\\uFA24\\uFA27-\\uFA29\\U0001133B\\U0001B150-\\U0001B152\\U0001B164-"
- u"\\U0001B167\\U00020000-\\U0002A6D6\\U0002A700-\\U0002B734\\U0002B740-"
- u"\\U0002B81D\\U0002B820-\\U0002CEA1\\U0002CEB0-\\U0002EBE0]";
+ u"\\u04FF\\u0510-\\u0529\\u052E\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0586"
+ u"\\u05B4\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u0655\\u0660-"
+ u"\\u0669\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-\\u06A0\\u06A2-\\u06D3"
+ u"\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC"
+ u"\\u08B2\\u08B6-\\u08C7\\u0901-\\u094D\\u094F\\u0950\\u0956\\u0957\\u0960-"
+ u"\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-"
+ u"\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9"
+ u"\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09E0-\\u09E3\\u09E6-"
+ u"\\u09F1\\u09FE\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28"
+ u"\\u0A2A-\\u0A30\\u0A32\\u0A35\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47"
+ u"\\u0A48\\u0A4B-\\u0A4D\\u0A5C\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D"
+ u"\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9"
+ u"\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-"
+ u"\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-"
+ u"\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47"
+ u"\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71"
+ u"\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A"
+ u"\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-"
+ u"\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-"
+ u"\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-"
+ u"\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C60\\u0C61\\u0C66-"
+ u"\\u0C6F\\u0C80\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8"
+ u"\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD"
+ u"\\u0CD5\\u0CD6\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00\\u0D02"
+ u"\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-"
+ u"\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D60\\u0D61\\u0D66-\\u0D6F\\u0D7A-"
+ u"\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D8E\\u0D91-\\u0D96\\u0D9A-\\u0DA5\\u0DA7-"
+ u"\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6"
+ u"\\u0DD8-\\u0DDE\\u0DF2\\u0E01-\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-"
+ u"\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-"
+ u"\\u0EB2\\u0EB4-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9"
+ u"\\u0EDE\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-"
+ u"\\u0F47\\u0F49-\\u0F4C\\u0F4E-\\u0F51\\u0F53-\\u0F56\\u0F58-\\u0F5B\\u0F5D-"
+ u"\\u0F68\\u0F6A-\\u0F6C\\u0F71\\u0F72\\u0F74\\u0F7A-\\u0F80\\u0F82-\\u0F84"
+ u"\\u0F86-\\u0F92\\u0F94-\\u0F97\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6"
+ u"\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-"
+ u"\\u109D\\u10C7\\u10CD\\u10D0-\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-"
+ u"\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288"
+ u"\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-"
+ u"\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-"
+ u"\\u135F\\u1380-\\u138F\\u1780-\\u17A2\\u17A5-\\u17A7\\u17A9-\\u17B3\\u17B6-"
+ u"\\u17CA\\u17D2\\u17D7\\u17DC\\u17E0-\\u17E9\\u1C90-\\u1CBA\\u1CBD-\\u1CBF"
+ u"\\u1E00-\\u1E99\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-"
+ u"\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70"
+ u"\\u1F72\\u1F74\\u1F76\\u1F78\\u1F7A\\u1F7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA"
+ u"\\u1FBC\\u1FC2-\\u1FC4\\u1FC6-\\u1FC8\\u1FCA\\u1FCC\\u1FD0-\\u1FD2\\u1FD6-"
+ u"\\u1FDA\\u1FE0-\\u1FE2\\u1FE4-\\u1FEA\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FF8"
+ u"\\u1FFA\\u1FFC\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE"
+ u"\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6"
+ u"\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3041-\\u3096\\u3099\\u309A\\u309D\\u309E"
+ u"\\u30A1-\\u30FA\\u30FC-\\u30FE\\u3105-\\u312D\\u312F\\u31A0-\\u31BF\\u3400-"
+ u"\\u4DBF\\u4E00-\\u9FFC\\uA67F\\uA717-\\uA71F\\uA788\\uA78D\\uA792\\uA793"
+ u"\\uA7AA\\uA7AE\\uA7B8\\uA7B9\\uA7C2-\\uA7CA\\uA9E7-\\uA9FE\\uAA60-\\uAA76"
+ u"\\uAA7A-\\uAA7F\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26"
+ u"\\uAB28-\\uAB2E\\uAB66\\uAB67\\uAC00-\\uD7A3\\uFA0E\\uFA0F\\uFA11\\uFA13"
+ u"\\uFA14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29\\U00011301\\U00011303"
+ u"\\U0001133B\\U0001133C\\U00016FF0\\U00016FF1\\U0001B150-\\U0001B152"
+ u"\\U0001B164-\\U0001B167\\U00020000-\\U0002A6DD\\U0002A700-\\U0002B734"
+ u"\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1\\U0002CEB0-\\U0002EBE0"
+ u"\\U00030000-\\U0003134A]";
gRecommendedSet = new UnicodeSet(UnicodeString(recommendedPat), status);
if (gRecommendedSet == NULL) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h b/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
index b111d4b16a9..43b23a8692c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
@@ -222,7 +222,7 @@ class SpoofData: public UMemory {
SpoofData(const void *serializedData, int32_t length, UErrorCode &status);
// Check raw Spoof Data Version compatibility.
- // Return TRUE it looks good.
+ // Return true it looks good.
UBool validateDataVersion(UErrorCode &status) const;
~SpoofData(); // Destructor not normally used.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h b/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
index 88b2e217db4..f11816785f6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
@@ -206,7 +206,7 @@ struct UStringSearch {
* the text "\u00e6"
* @param strsrch string search data
* @param status error status if any
-* @return TRUE if an exact match is found, FALSE otherwise
+* @return true if an exact match is found, false otherwise
*/
U_CFUNC
UBool usearch_handleNextExact(UStringSearch *strsrch, UErrorCode *status);
@@ -217,7 +217,7 @@ UBool usearch_handleNextExact(UStringSearch *strsrch, UErrorCode *status);
* of beginning and ending accents if it overlaps that region.
* @param strsrch string search data
* @param status error status if any
-* @return TRUE if a canonical match is found, FALSE otherwise
+* @return true if a canonical match is found, false otherwise
*/
U_CFUNC
UBool usearch_handleNextCanonical(UStringSearch *strsrch, UErrorCode *status);
@@ -227,7 +227,7 @@ UBool usearch_handleNextCanonical(UStringSearch *strsrch, UErrorCode *status);
* Comments follows from handleNextExact
* @param strsrch string search data
* @param status error status if any
-* @return True if a exact math is found, FALSE otherwise.
+* @return True if a exact math is found, false otherwise.
*/
U_CFUNC
UBool usearch_handlePreviousExact(UStringSearch *strsrch, UErrorCode *status);
@@ -238,7 +238,7 @@ UBool usearch_handlePreviousExact(UStringSearch *strsrch, UErrorCode *status);
* of beginning and ending accents if it overlaps that region.
* @param strsrch string search data
* @param status error status if any
-* @return TRUE if a canonical match is found, FALSE otherwise
+* @return true if a canonical match is found, false otherwise
*/
U_CFUNC
UBool usearch_handlePreviousCanonical(UStringSearch *strsrch,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
index fd3a05e9efa..6305d81c30c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
@@ -125,7 +125,7 @@ private:
/**
* Extend the FCD text segment forward or normalize around pos.
* To be called when checkDir > 0 && pos != limit.
- * @return TRUE if success, checkDir == 0 and pos != limit
+ * @return true if success, checkDir == 0 and pos != limit
*/
UBool nextSegment(UErrorCode &errorCode);
@@ -139,7 +139,7 @@ private:
/**
* Extend the FCD text segment backward or normalize around pos.
* To be called when checkDir < 0 && pos != start.
- * @return TRUE if success, checkDir == 0 and pos != start
+ * @return true if success, checkDir == 0 and pos != start
*/
UBool previousSegment(UErrorCode &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
index 9a3ec45aeb4..9059e72dcf9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
@@ -54,7 +54,7 @@ protected:
* together with a bogus code point. The caller will ignore that code point.
*
* Special values may be returned for surrogate code points, which are also illegal in UTF-8,
- * but the caller will treat them like U+FFFD because forbidSurrogateCodePoints() returns TRUE.
+ * but the caller will treat them like U+FFFD because forbidSurrogateCodePoints() returns true.
*
* Valid lead surrogates are returned from inside a normalized text segment,
* where handleGetTrailSurrogate() will return the matching trail surrogate.
@@ -117,7 +117,7 @@ private:
/**
* Extends the FCD text segment forward or normalizes around pos.
- * @return TRUE if success
+ * @return true if success
*/
UBool nextSegment(UErrorCode &errorCode);
@@ -128,7 +128,7 @@ private:
/**
* Extends the FCD text segment backward or normalizes around pos.
- * @return TRUE if success
+ * @return true if success
*/
UBool previousSegment(UErrorCode &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp b/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
index fa8c3390b81..81208ab96d7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
@@ -526,15 +526,15 @@ rruleParseError:
static TimeZoneRule* createRuleByRRULE(const UnicodeString& zonename, int rawOffset, int dstSavings, UDate start,
UVector* dates, int fromOffset, UErrorCode& status) {
if (U_FAILURE(status)) {
- return NULL;
+ return nullptr;
}
- if (dates == NULL || dates->size() == 0) {
+ if (dates == nullptr || dates->size() == 0) {
status = U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
+ return nullptr;
}
int32_t i, j;
- DateTimeRule *adtr = NULL;
+ DateTimeRule *adtr = nullptr;
// Parse the first rule
UnicodeString rrule = *((UnicodeString*)dates->elementAt(0));
@@ -545,7 +545,7 @@ static TimeZoneRule* createRuleByRRULE(const UnicodeString& zonename, int rawOff
parseRRULE(rrule, month, dayOfWeek, nthDayOfWeek, days, daysCount, until, status);
if (U_FAILURE(status)) {
- return NULL;
+ return nullptr;
}
if (dates->size() == 1) {
@@ -620,7 +620,7 @@ static TimeZoneRule* createRuleByRRULE(const UnicodeString& zonename, int rawOff
int32_t tmp_daysCount = UPRV_LENGTHOF(tmp_days);
parseRRULE(rrule, tmp_month, tmp_dayOfWeek, tmp_nthDayOfWeek, tmp_days, tmp_daysCount, tmp_until, status);
if (U_FAILURE(status)) {
- return NULL;
+ return nullptr;
}
// If UNTIL is newer than previous one, use the one
if (tmp_until > until) {
@@ -713,14 +713,14 @@ static TimeZoneRule* createRuleByRRULE(const UnicodeString& zonename, int rawOff
// first Sunday after 15th day in the month
adtr = new DateTimeRule(month, dayOfMonth, dayOfWeek, TRUE, startMID, DateTimeRule::WALL_TIME);
}
- if (adtr == NULL) {
+ if (adtr == nullptr) {
goto unsupportedRRule;
}
return new AnnualTimeZoneRule(zonename, rawOffset, dstSavings, adtr, startYear, endYear);
unsupportedRRule:
status = U_INVALID_STATE_ERROR;
- return NULL;
+ return nullptr;
}
/*
@@ -729,34 +729,35 @@ unsupportedRRule:
static TimeZoneRule* createRuleByRDATE(const UnicodeString& zonename, int32_t rawOffset, int32_t dstSavings,
UDate start, UVector* dates, int32_t fromOffset, UErrorCode& status) {
if (U_FAILURE(status)) {
- return NULL;
+ return nullptr;
}
- TimeArrayTimeZoneRule *retVal = NULL;
- if (dates == NULL || dates->size() == 0) {
+ TimeArrayTimeZoneRule *retVal = nullptr;
+ if (dates == nullptr || dates->size() == 0) {
// When no RDATE line is provided, use start (DTSTART)
// as the transition time
- retVal = new TimeArrayTimeZoneRule(zonename, rawOffset, dstSavings,
- &start, 1, DateTimeRule::UTC_TIME);
+ retVal = new TimeArrayTimeZoneRule(zonename, rawOffset, dstSavings, &start, 1, DateTimeRule::UTC_TIME);
} else {
// Create an array of transition times
int32_t size = dates->size();
UDate* times = (UDate*)uprv_malloc(sizeof(UDate) * size);
- if (times == NULL) {
+ if (times == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
+ return nullptr;
}
for (int32_t i = 0; i < size; i++) {
UnicodeString *datestr = (UnicodeString*)dates->elementAt(i);
times[i] = parseDateTimeString(*datestr, fromOffset, status);
if (U_FAILURE(status)) {
uprv_free(times);
- return NULL;
+ return nullptr;
}
}
- retVal = new TimeArrayTimeZoneRule(zonename, rawOffset, dstSavings,
- times, size, DateTimeRule::UTC_TIME);
+ retVal = new TimeArrayTimeZoneRule(zonename, rawOffset, dstSavings, times, size, DateTimeRule::UTC_TIME);
uprv_free(times);
}
+ if (retVal == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
return retVal;
}
@@ -800,12 +801,15 @@ static UBool isEquivalentDateRule(int32_t month, int32_t weekInMonth, int32_t da
/*
* Convert the rule to its equivalent rule using WALL_TIME mode.
- * This function returns NULL when the specified DateTimeRule is already
+ * This function returns nullptr when the specified DateTimeRule is already
* using WALL_TIME mode.
*/
-static DateTimeRule* toWallTimeRule(const DateTimeRule* rule, int32_t rawOffset, int32_t dstSavings) {
+static DateTimeRule *toWallTimeRule(const DateTimeRule *rule, int32_t rawOffset, int32_t dstSavings, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
if (rule->getTimeRuleType() == DateTimeRule::WALL_TIME) {
- return NULL;
+ return nullptr;
}
int32_t wallt = rule->getRuleMillisInDay();
if (rule->getTimeRuleType() == DateTimeRule::UTC_TIME) {
@@ -864,12 +868,14 @@ static DateTimeRule* toWallTimeRule(const DateTimeRule* rule, int32_t rawOffset,
}
}
// Create a new rule
- DateTimeRule *modifiedRule;
+ DateTimeRule *modifiedRule = nullptr;
if (dtype == DateTimeRule::DOM) {
modifiedRule = new DateTimeRule(month, dom, wallt, DateTimeRule::WALL_TIME);
} else {
- modifiedRule = new DateTimeRule(month, dom, dow,
- (dtype == DateTimeRule::DOW_GEQ_DOM), wallt, DateTimeRule::WALL_TIME);
+ modifiedRule = new DateTimeRule(month, dom, dow, (dtype == DateTimeRule::DOW_GEQ_DOM), wallt, DateTimeRule::WALL_TIME);
+ }
+ if (modifiedRule == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
}
return modifiedRule;
}
@@ -956,21 +962,24 @@ VTZReader::read(void) {
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(VTimeZone)
VTimeZone::VTimeZone()
-: BasicTimeZone(), tz(NULL), vtzlines(NULL),
+: BasicTimeZone(), tz(nullptr), vtzlines(nullptr),
lastmod(MAX_MILLIS) {
}
VTimeZone::VTimeZone(const VTimeZone& source)
-: BasicTimeZone(source), tz(NULL), vtzlines(NULL),
+: BasicTimeZone(source), tz(nullptr), vtzlines(nullptr),
tzurl(source.tzurl), lastmod(source.lastmod),
olsonzid(source.olsonzid), icutzver(source.icutzver) {
- if (source.tz != NULL) {
+ if (source.tz != nullptr) {
tz = source.tz->clone();
}
- if (source.vtzlines != NULL) {
+ if (source.vtzlines != nullptr) {
UErrorCode status = U_ZERO_ERROR;
int32_t size = source.vtzlines->size();
vtzlines = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, size, status);
+ if (vtzlines == nullptr) {
+ return;
+ }
if (U_SUCCESS(status)) {
for (int32_t i = 0; i < size; i++) {
UnicodeString *line = (UnicodeString*)source.vtzlines->elementAt(i);
@@ -980,17 +989,17 @@ VTimeZone::VTimeZone(const VTimeZone& source)
}
}
}
- if (U_FAILURE(status) && vtzlines != NULL) {
+ if (U_FAILURE(status) && vtzlines != nullptr) {
delete vtzlines;
}
}
}
VTimeZone::~VTimeZone() {
- if (tz != NULL) {
+ if (tz != nullptr) {
delete tz;
}
- if (vtzlines != NULL) {
+ if (vtzlines != nullptr) {
delete vtzlines;
}
}
@@ -1002,21 +1011,21 @@ VTimeZone::operator=(const VTimeZone& right) {
}
if (*this != right) {
BasicTimeZone::operator=(right);
- if (tz != NULL) {
+ if (tz != nullptr) {
delete tz;
- tz = NULL;
+ tz = nullptr;
}
- if (right.tz != NULL) {
+ if (right.tz != nullptr) {
tz = right.tz->clone();
}
- if (vtzlines != NULL) {
+ if (vtzlines != nullptr) {
delete vtzlines;
}
- if (right.vtzlines != NULL) {
+ if (right.vtzlines != nullptr) {
UErrorCode status = U_ZERO_ERROR;
int32_t size = right.vtzlines->size();
vtzlines = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, size, status);
- if (U_SUCCESS(status)) {
+ if (vtzlines != nullptr && U_SUCCESS(status)) {
for (int32_t i = 0; i < size; i++) {
UnicodeString *line = (UnicodeString*)right.vtzlines->elementAt(i);
vtzlines->addElement(line->clone(), status);
@@ -1025,9 +1034,9 @@ VTimeZone::operator=(const VTimeZone& right) {
}
}
}
- if (U_FAILURE(status) && vtzlines != NULL) {
+ if (U_FAILURE(status) && vtzlines != nullptr) {
delete vtzlines;
- vtzlines = NULL;
+ vtzlines = nullptr;
}
}
tzurl = right.tzurl;
@@ -1065,15 +1074,18 @@ VTimeZone::operator!=(const TimeZone& that) const {
VTimeZone*
VTimeZone::createVTimeZoneByID(const UnicodeString& ID) {
VTimeZone *vtz = new VTimeZone();
+ if (vtz == nullptr) {
+ return nullptr;
+ }
vtz->tz = (BasicTimeZone*)TimeZone::createTimeZone(ID);
vtz->tz->getID(vtz->olsonzid);
// Set ICU tzdata version
UErrorCode status = U_ZERO_ERROR;
- UResourceBundle *bundle = NULL;
- const UChar* versionStr = NULL;
+ UResourceBundle *bundle = nullptr;
+ const UChar* versionStr = nullptr;
int32_t len = 0;
- bundle = ures_openDirect(NULL, "zoneinfo64", &status);
+ bundle = ures_openDirect(nullptr, "zoneinfo64", &status);
versionStr = ures_getStringByKey(bundle, "TZVersion", &len, &status);
if (U_SUCCESS(status)) {
vtz->icutzver.setTo(versionStr, len);
@@ -1085,26 +1097,26 @@ VTimeZone::createVTimeZoneByID(const UnicodeString& ID) {
VTimeZone*
VTimeZone::createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basic_time_zone, UErrorCode &status) {
if (U_FAILURE(status)) {
- return NULL;
+ return nullptr;
}
VTimeZone *vtz = new VTimeZone();
- if (vtz == NULL) {
+ if (vtz == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
+ return nullptr;
}
vtz->tz = basic_time_zone.clone();
- if (vtz->tz == NULL) {
+ if (vtz->tz == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
delete vtz;
- return NULL;
+ return nullptr;
}
vtz->tz->getID(vtz->olsonzid);
// Set ICU tzdata version
- UResourceBundle *bundle = NULL;
- const UChar* versionStr = NULL;
+ UResourceBundle *bundle = nullptr;
+ const UChar* versionStr = nullptr;
int32_t len = 0;
- bundle = ures_openDirect(NULL, "zoneinfo64", &status);
+ bundle = ures_openDirect(nullptr, "zoneinfo64", &status);
versionStr = ures_getStringByKey(bundle, "TZVersion", &len, &status);
if (U_SUCCESS(status)) {
vtz->icutzver.setTo(versionStr, len);
@@ -1116,14 +1128,18 @@ VTimeZone::createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basic_time_zone
VTimeZone*
VTimeZone::createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status) {
if (U_FAILURE(status)) {
- return NULL;
+ return nullptr;
}
VTZReader reader(vtzdata);
VTimeZone *vtz = new VTimeZone();
+ if (vtz == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return nullptr;
+ }
vtz->load(reader, status);
if (U_FAILURE(status)) {
delete vtz;
- return NULL;
+ return nullptr;
}
return vtz;
}
@@ -1251,6 +1267,9 @@ VTimeZone::getTimeZoneRules(const InitialTimeZoneRule*& initial,
void
VTimeZone::load(VTZReader& reader, UErrorCode& status) {
vtzlines = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, DEFAULT_VTIMEZONE_LINES, status);
+ if (vtzlines == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
if (U_FAILURE(status)) {
return;
}
@@ -1264,10 +1283,15 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
if (ch == 0xFFFF) {
// end of file
if (start && line.startsWith(ICAL_END_VTIMEZONE, -1)) {
- vtzlines->addElement(new UnicodeString(line), status);
+ LocalPointer<UnicodeString> element(new UnicodeString(line), status);
+ if (U_FAILURE(status)) {
+ goto cleanupVtzlines;
+ }
+ vtzlines->addElement(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
+ element.orphan(); // on success, vtzlines owns the object.
success = TRUE;
}
break;
@@ -1281,10 +1305,15 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
// NOT followed by TAB/SP -> new line
if (start) {
if (line.length() > 0) {
- vtzlines->addElement(new UnicodeString(line), status);
+ LocalPointer<UnicodeString> element(new UnicodeString(line), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
+ vtzlines->addElement(element.getAlias(), status);
+ if (U_FAILURE(status)) {
+ goto cleanupVtzlines;
+ }
+ element.orphan(); // on success, vtzlines owns the object.
}
}
line.remove();
@@ -1299,19 +1328,29 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
eol = TRUE;
if (start) {
if (line.startsWith(ICAL_END_VTIMEZONE, -1)) {
- vtzlines->addElement(new UnicodeString(line), status);
+ LocalPointer<UnicodeString> element(new UnicodeString(line), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
+ vtzlines->addElement(element.getAlias(), status);
+ if (U_FAILURE(status)) {
+ goto cleanupVtzlines;
+ }
+ element.orphan(); // on success, vtzlines owns the object.
success = TRUE;
break;
}
} else {
if (line.startsWith(ICAL_BEGIN_VTIMEZONE, -1)) {
- vtzlines->addElement(new UnicodeString(line), status);
+ LocalPointer<UnicodeString> element(new UnicodeString(line), status);
+ if (U_FAILURE(status)) {
+ goto cleanupVtzlines;
+ }
+ vtzlines->addElement(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
+ element.orphan(); // on success, vtzlines owns the object.
line.remove();
start = TRUE;
eol = FALSE;
@@ -1333,7 +1372,7 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
cleanupVtzlines:
delete vtzlines;
- vtzlines = NULL;
+ vtzlines = nullptr;
}
// parser state
@@ -1349,12 +1388,12 @@ VTimeZone::parse(UErrorCode& status) {
if (U_FAILURE(status)) {
return;
}
- if (vtzlines == NULL || vtzlines->size() == 0) {
+ if (vtzlines == nullptr || vtzlines->size() == 0) {
status = U_INVALID_STATE_ERROR;
return;
}
- InitialTimeZoneRule *initialRule = NULL;
- RuleBasedTimeZone *rbtz = NULL;
+ InitialTimeZoneRule *initialRule = nullptr;
+ RuleBasedTimeZone *rbtz = nullptr;
// timezone ID
UnicodeString tzid;
@@ -1373,13 +1412,16 @@ VTimeZone::parse(UErrorCode& status) {
UnicodeString name; // RFC2445 prop name
UnicodeString value; // RFC2445 prop value
- UVector *dates = NULL; // list of RDATE or RRULE strings
- UVector *rules = NULL; // list of TimeZoneRule instances
+ UVector *dates = nullptr; // list of RDATE or RRULE strings
+ UVector *rules = nullptr; // list of TimeZoneRule instances
int32_t finalRuleIdx = -1;
int32_t finalRuleCount = 0;
rules = new UVector(status);
+ if (rules == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
if (U_FAILURE(status)) {
goto cleanupParse;
}
@@ -1387,14 +1429,13 @@ VTimeZone::parse(UErrorCode& status) {
rules->setDeleter(deleteTimeZoneRule);
dates = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status);
- if (U_FAILURE(status)) {
- goto cleanupParse;
- }
- if (rules == NULL || dates == NULL) {
+ if (dates == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ if (U_FAILURE(status)) {
goto cleanupParse;
}
-
+
for (n = 0; n < vtzlines->size(); n++) {
UnicodeString *line = (UnicodeString*)vtzlines->elementAt(n);
int32_t valueSep = line->indexOf(COLON);
@@ -1468,7 +1509,7 @@ VTimeZone::parse(UErrorCode& status) {
// by comma
UBool nextDate = TRUE;
int32_t dstart = 0;
- UnicodeString *dstr;
+ UnicodeString *dstr = nullptr;
while (nextDate) {
int32_t dend = value.indexOf(COMMA, dstart);
if (dend == -1) {
@@ -1477,7 +1518,11 @@ VTimeZone::parse(UErrorCode& status) {
} else {
dstr = new UnicodeString(value, dstart, dend - dstart);
}
- dates->addElement(dstr, status);
+ if (dstr == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ dates->addElement(dstr, status);
+ }
if (U_FAILURE(status)) {
goto cleanupParse;
}
@@ -1489,10 +1534,15 @@ VTimeZone::parse(UErrorCode& status) {
goto cleanupParse;
}
isRRULE = true;
- dates->addElement(new UnicodeString(value), status);
+ LocalPointer<UnicodeString> element(new UnicodeString(value), status);
+ if (U_FAILURE(status)) {
+ goto cleanupParse;
+ }
+ dates->addElement(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupParse;
}
+ element.orphan(); // on success, dates owns the object.
} else if (name.compare(ICAL_END, -1) == 0) {
// Mandatory properties
if (dtstart.length() == 0 || from.length() == 0 || to.length() == 0) {
@@ -1504,7 +1554,7 @@ VTimeZone::parse(UErrorCode& status) {
}
// create a time zone rule
- TimeZoneRule *rule = NULL;
+ TimeZoneRule *rule = nullptr;
int32_t fromOffset = 0;
int32_t toOffset = 0;
int32_t rawOffset = 0;
@@ -1546,7 +1596,7 @@ VTimeZone::parse(UErrorCode& status) {
} else {
rule = createRuleByRDATE(zonename, rawOffset, dstSavings, start, dates, fromOffset, status);
}
- if (U_FAILURE(status) || rule == NULL) {
+ if (U_FAILURE(status) || rule == nullptr) {
goto cleanupParse;
} else {
UBool startAvail = rule->getFirstStart(fromOffset, 0, actualStart);
@@ -1586,25 +1636,24 @@ VTimeZone::parse(UErrorCode& status) {
// Create a initial rule
getDefaultTZName(tzid, FALSE, zonename);
- initialRule = new InitialTimeZoneRule(zonename,
- initialRawOffset, initialDSTSavings);
- if (initialRule == NULL) {
+ initialRule = new InitialTimeZoneRule(zonename, initialRawOffset, initialDSTSavings);
+ if (initialRule == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
goto cleanupParse;
}
// Finally, create the RuleBasedTimeZone
rbtz = new RuleBasedTimeZone(tzid, initialRule);
- if (rbtz == NULL) {
+ if (rbtz == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
goto cleanupParse;
}
- initialRule = NULL; // already adopted by RBTZ, no need to delete
+ initialRule = nullptr; // already adopted by RBTZ, no need to delete
for (n = 0; n < rules->size(); n++) {
TimeZoneRule *r = (TimeZoneRule*)rules->elementAt(n);
AnnualTimeZoneRule *atzrule = dynamic_cast<AnnualTimeZoneRule *>(r);
- if (atzrule != NULL) {
+ if (atzrule != nullptr) {
if (atzrule->getEndYear() == AnnualTimeZoneRule::MAX_YEAR) {
finalRuleCount++;
finalRuleIdx = n;
@@ -1649,7 +1698,7 @@ VTimeZone::parse(UErrorCode& status) {
}
}
- TimeZoneRule *newRule;
+ TimeZoneRule *newRule = nullptr;
UnicodeString tznam;
if (start == finalStart) {
// Transform this into a single transition
@@ -1672,7 +1721,7 @@ VTimeZone::parse(UErrorCode& status) {
finalRule->getStartYear(),
y);
}
- if (newRule == NULL) {
+ if (newRule == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
goto cleanupParse;
}
@@ -1704,20 +1753,20 @@ VTimeZone::parse(UErrorCode& status) {
return;
cleanupParse:
- if (rules != NULL) {
+ if (rules != nullptr) {
while (!rules->isEmpty()) {
TimeZoneRule *r = (TimeZoneRule*)rules->orphanElementAt(0);
delete r;
}
delete rules;
}
- if (dates != NULL) {
+ if (dates != nullptr) {
delete dates;
}
- if (initialRule != NULL) {
+ if (initialRule != nullptr) {
delete initialRule;
}
- if (rbtz != NULL) {
+ if (rbtz != nullptr) {
delete rbtz;
}
return;
@@ -1725,7 +1774,7 @@ cleanupParse:
void
VTimeZone::write(VTZWriter& writer, UErrorCode& status) const {
- if (vtzlines != NULL) {
+ if (vtzlines != nullptr) {
for (int32_t i = 0; i < vtzlines->size(); i++) {
UnicodeString *line = (UnicodeString*)vtzlines->elementAt(i);
if (line->startsWith(ICAL_TZURL, -1)
@@ -1765,8 +1814,8 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const {
if (U_FAILURE(status)) {
return;
}
- InitialTimeZoneRule *initial = NULL;
- UVector *transitionRules = NULL;
+ InitialTimeZoneRule *initial = nullptr;
+ UVector *transitionRules = nullptr;
UVector customProps(uprv_deleteUObject, uhash_compareUnicodeString, status);
UnicodeString tzid;
@@ -1779,7 +1828,7 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const {
// Create a RuleBasedTimeZone with the subset rule
getID(tzid);
RuleBasedTimeZone rbtz(tzid, initial);
- if (transitionRules != NULL) {
+ if (transitionRules != nullptr) {
while (!transitionRules->isEmpty()) {
TimeZoneRule *tr = (TimeZoneRule*)transitionRules->orphanElementAt(0);
rbtz.addTransitionRule(tr, status);
@@ -1788,7 +1837,7 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const {
}
}
delete transitionRules;
- transitionRules = NULL;
+ transitionRules = nullptr;
}
rbtz.complete(status);
if (U_FAILURE(status)) {
@@ -1797,6 +1846,10 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const {
if (olsonzid.length() > 0 && icutzver.length() > 0) {
UnicodeString *icutzprop = new UnicodeString(ICU_TZINFO_PROP);
+ if (icutzprop == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ goto cleanupWritePartial;
+ }
icutzprop->append(olsonzid);
icutzprop->append((UChar)0x005B/*'['*/);
icutzprop->append(icutzver);
@@ -1813,10 +1866,10 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const {
return;
cleanupWritePartial:
- if (initial != NULL) {
+ if (initial != nullptr) {
delete initial;
}
- if (transitionRules != NULL) {
+ if (transitionRules != nullptr) {
while (!transitionRules->isEmpty()) {
TimeZoneRule *tr = (TimeZoneRule*)transitionRules->orphanElementAt(0);
delete tr;
@@ -1835,14 +1888,14 @@ VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const
UnicodeString tzid;
// Extract simple rules
- InitialTimeZoneRule *initial = NULL;
- AnnualTimeZoneRule *std = NULL, *dst = NULL;
+ InitialTimeZoneRule *initial = nullptr;
+ AnnualTimeZoneRule *std = nullptr, *dst = nullptr;
getSimpleRulesNear(time, initial, std, dst, status);
if (U_SUCCESS(status)) {
// Create a RuleBasedTimeZone with the subset rule
getID(tzid);
RuleBasedTimeZone rbtz(tzid, initial);
- if (std != NULL && dst != NULL) {
+ if (std != nullptr && dst != nullptr) {
rbtz.addTransitionRule(std, status);
rbtz.addTransitionRule(dst, status);
}
@@ -1852,6 +1905,10 @@ VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const
if (olsonzid.length() > 0 && icutzver.length() > 0) {
UnicodeString *icutzprop = new UnicodeString(ICU_TZINFO_PROP);
+ if (icutzprop == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ goto cleanupWriteSimple;
+ }
icutzprop->append(olsonzid);
icutzprop->append((UChar)0x005B/*'['*/);
icutzprop->append(icutzver);
@@ -1869,13 +1926,13 @@ VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const
return;
cleanupWriteSimple:
- if (initial != NULL) {
+ if (initial != nullptr) {
delete initial;
}
- if (std != NULL) {
+ if (std != nullptr) {
delete std;
}
- if (dst != NULL) {
+ if (dst != nullptr) {
delete dst;
}
}
@@ -1891,7 +1948,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
return;
}
- if (customProps != NULL) {
+ if (customProps != nullptr) {
for (int32_t i = 0; i < customProps->size(); i++) {
UnicodeString *custprop = (UnicodeString*)customProps->elementAt(i);
w.write(*custprop);
@@ -1912,7 +1969,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
UDate dstStartTime = 0.0;
UDate dstUntilTime = 0.0;
int32_t dstCount = 0;
- AnnualTimeZoneRule *finalDstRule = NULL;
+ AnnualTimeZoneRule *finalDstRule = nullptr;
UnicodeString stdName;
int32_t stdFromOffset = 0;
@@ -1926,7 +1983,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
UDate stdStartTime = 0.0;
UDate stdUntilTime = 0.0;
int32_t stdCount = 0;
- AnnualTimeZoneRule *finalStdRule = NULL;
+ AnnualTimeZoneRule *finalStdRule = nullptr;
int32_t year, month, dom, dow, doy, mid;
UBool hasTransitions = FALSE;
@@ -1953,8 +2010,8 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
UBool sameRule = FALSE;
const AnnualTimeZoneRule *atzrule;
if (isDst) {
- if (finalDstRule == NULL
- && (atzrule = dynamic_cast<const AnnualTimeZoneRule *>(tzt.getTo())) != NULL
+ if (finalDstRule == nullptr
+ && (atzrule = dynamic_cast<const AnnualTimeZoneRule *>(tzt.getTo())) != nullptr
&& atzrule->getEndYear() == AnnualTimeZoneRule::MAX_YEAR
) {
finalDstRule = atzrule->clone();
@@ -2000,12 +2057,12 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
dstStartTime = dstUntilTime = t;
dstCount = 1;
}
- if (finalStdRule != NULL && finalDstRule != NULL) {
+ if (finalStdRule != nullptr && finalDstRule != nullptr) {
break;
}
} else {
- if (finalStdRule == NULL
- && (atzrule = dynamic_cast<const AnnualTimeZoneRule *>(tzt.getTo())) != NULL
+ if (finalStdRule == nullptr
+ && (atzrule = dynamic_cast<const AnnualTimeZoneRule *>(tzt.getTo())) != nullptr
&& atzrule->getEndYear() == AnnualTimeZoneRule::MAX_YEAR
) {
finalStdRule = atzrule->clone();
@@ -2051,7 +2108,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
stdStartTime = stdUntilTime = t;
stdCount = 1;
}
- if (finalStdRule != NULL && finalDstRule != NULL) {
+ if (finalStdRule != nullptr && finalDstRule != nullptr) {
break;
}
}
@@ -2075,7 +2132,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
}
} else {
if (dstCount > 0) {
- if (finalDstRule == NULL) {
+ if (finalDstRule == nullptr) {
if (dstCount == 1) {
writeZonePropsByTime(w, TRUE, dstName, dstFromOffset, dstToOffset, dstStartTime,
TRUE, status);
@@ -2117,7 +2174,7 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
}
}
if (stdCount > 0) {
- if (finalStdRule == NULL) {
+ if (finalStdRule == nullptr) {
if (stdCount == 1) {
writeZonePropsByTime(w, FALSE, stdName, stdFromOffset, stdToOffset, stdStartTime,
TRUE, status);
@@ -2163,10 +2220,10 @@ VTimeZone::writeZone(VTZWriter& w, BasicTimeZone& basictz,
cleanupWriteZone:
- if (finalStdRule != NULL) {
+ if (finalStdRule != nullptr) {
delete finalStdRule;
}
- if (finalDstRule != NULL) {
+ if (finalDstRule != nullptr) {
delete finalDstRule;
}
}
@@ -2479,8 +2536,11 @@ VTimeZone::writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRu
return;
}
UBool modifiedRule = TRUE;
- const DateTimeRule *dtrule = toWallTimeRule(rule->getRule(), fromRawOffset, fromDSTSavings);
- if (dtrule == NULL) {
+ const DateTimeRule *dtrule = toWallTimeRule(rule->getRule(), fromRawOffset, fromDSTSavings, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (dtrule == nullptr) {
modifiedRule = FALSE;
dtrule = rule->getRule();
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/vzone.h b/Build/source/libs/icu/icu-src/source/i18n/vzone.h
index 17df92e17b5..96f5e858912 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/vzone.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/vzone.h
@@ -91,7 +91,7 @@ vzone_equals(const VZone* zone1, const VZone* zone2);
* @param zone, the vzone to use
* @param url Receives the RFC2445 TZURL property value.
* @param urlLength, length of the url
- * @return TRUE if TZURL attribute is available and value is set.
+ * @return true if TZURL attribute is available and value is set.
*/
U_CAPI UBool U_EXPORT2
vzone_getTZURL(VZone* zone, UChar* & url, int32_t & urlLength);
@@ -112,7 +112,7 @@ vzone_setTZURL(VZone* zone, UChar* url, int32_t urlLength);
* is not set.
* @param zone, the vzone to use
* @param lastModified Receives the last modified date.
- * @return TRUE if lastModified attribute is available and value is set.
+ * @return true if lastModified attribute is available and value is set.
*/
U_CAPI UBool U_EXPORT2
vzone_getLastModified(VZone* zone, UDate& lastModified);
@@ -283,7 +283,7 @@ vzone_useDaylightTime(VZone* zone);
* @return true if the given date is in daylight savings time,
* false, otherwise.
*/
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
vzone_inDaylightTime(VZone* zone, UDate date, UErrorCode& status);
/**
@@ -303,7 +303,7 @@ vzone_hasSameRules(VZone* zone, const VZone* other);
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the first transition after the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
*/
U_CAPI UBool U_EXPORT2
vzone_getNextTransition(VZone* zone, UDate base, UBool inclusive, ZTrans* result);
@@ -314,7 +314,7 @@ vzone_getNextTransition(VZone* zone, UDate base, UBool inclusive, ZTrans* result
* @param base The base time.
* @param inclusive Whether the base time is inclusive or not.
* @param result Receives the most recent transition before the base time.
- * @return TRUE if the transition is found.
+ * @return true if the transition is found.
*/
U_CAPI UBool U_EXPORT2
vzone_getPreviousTransition(VZone* zone, UDate base, UBool inclusive, ZTrans* result);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h b/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
index 9dbcc878a22..58724ea3b7d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
@@ -59,7 +59,7 @@ public:
* is not associated with a country, return bogus string.
* @param tzid Zone ID
* @param country [output] Country code
- * @param isPrimary [output] TRUE if the zone is the primary zone for the country
+ * @param isPrimary [output] true if the zone is the primary zone for the country
* @return A reference to the result country
*/
static UnicodeString& U_EXPORT2 getCanonicalCountry(const UnicodeString &tzid, UnicodeString &country, UBool *isPrimary = NULL);
diff --git a/Build/source/libs/icu/icu-src/source/icudefs.mk.in b/Build/source/libs/icu/icu-src/source/icudefs.mk.in
index f41dac515c9..1b40995ed5e 100644
--- a/Build/source/libs/icu/icu-src/source/icudefs.mk.in
+++ b/Build/source/libs/icu/icu-src/source/icudefs.mk.in
@@ -240,6 +240,10 @@ LIBDIR=$(top_builddir)/lib
# Location of the executables before "make install" is used
BINDIR=$(top_builddir)/bin
+# Defined here so that it can be overriden by mh-mingw*.
+# For MinGW/MSYS2 we want the DLLs to go into the bin location.
+MINGW_MOVEDLLSTOBINDIR = NO
+
# overridden by icucross.mk
TOOLBINDIR=$(BINDIR)
TOOLLIBDIR=$(LIBDIR)
diff --git a/Build/source/libs/icu/icu-src/source/io/Makefile.in b/Build/source/libs/icu/icu-src/source/io/Makefile.in
index 45dbe870fb3..9bf9359eadd 100644
--- a/Build/source/libs/icu/icu-src/source/io/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/io/Makefile.in
@@ -60,9 +60,8 @@ DEFS += -DU_IO_IMPLEMENTATION
LDFLAGS += $(LDFLAGSICUIO)
LIBS = $(LIBICUUC) $(LIBICUI18N) $(DEFAULT_LIBS)
-OBJECTS = locbund.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o \
-uscanf.o uscanf_p.o ustdio.o sprintf.o sscanf.o \
-ustream.o ucln_io.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
## Header files to install
HEADERS = $(srcdir)/unicode/*.h
@@ -101,6 +100,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -108,6 +112,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/io/io.vcxproj b/Build/source/libs/icu/icu-src/source/io/io.vcxproj
index 3fca55fb0fd..c324236abee 100644
--- a/Build/source/libs/icu/icu-src/source/io/io.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/io/io.vcxproj
@@ -16,22 +16,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -76,7 +60,7 @@
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuio65d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuio68d.dll</OutputFile>
<ProgramDatabaseFile>..\..\$(IcuLibOutputDir)\icuiod.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuiod.lib</ImportLibrary>
<AdditionalDependencies>icuucd.lib;icuind.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -89,7 +73,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile>
<Link>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuio65.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuio68.dll</OutputFile>
<ProgramDatabaseFile>..\..\$(IcuLibOutputDir)\icuio.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuio.lib</ImportLibrary>
<AdditionalDependencies>icuuc.lib;icuin.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/Build/source/libs/icu/icu-src/source/io/sources.txt b/Build/source/libs/icu/icu-src/source/io/sources.txt
new file mode 100644
index 00000000000..733104399f3
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/io/sources.txt
@@ -0,0 +1,12 @@
+locbund.cpp
+sprintf.cpp
+sscanf.cpp
+ucln_io.cpp
+ufile.cpp
+ufmt_cmn.cpp
+uprintf.cpp
+uprntf_p.cpp
+uscanf.cpp
+uscanf_p.cpp
+ustdio.cpp
+ustream.cpp
diff --git a/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp b/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp
index 5cd367cfadb..c1307b5d97f 100644
--- a/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp
+++ b/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp
@@ -23,7 +23,7 @@
#include "uassert.h"
#ifndef U_IO_IMPLEMENTATION
-#error U_IO_IMPLEMENTATION not set - must be set for all ICU source files in io/ - see http://userguide.icu-project.org/howtouseicu
+#error U_IO_IMPLEMENTATION not set - must be set for all ICU source files in io/ - see https://unicode-org.github.io/icu/userguide/howtouseicu
#endif
@@ -69,4 +69,3 @@ void ucln_io_registerCleanup(ECleanupIOType type,
ucln_registerAutomaticCleanup();
#endif
}
-
diff --git a/Build/source/libs/icu/icu-src/source/io/ufile.cpp b/Build/source/libs/icu/icu-src/source/io/ufile.cpp
index 1d8c221cdcb..607601935cf 100644
--- a/Build/source/libs/icu/icu-src/source/io/ufile.cpp
+++ b/Build/source/libs/icu/icu-src/source/io/ufile.cpp
@@ -40,6 +40,7 @@
#include "unicode/ures.h"
#include "unicode/ucnv.h"
#include "unicode/ustring.h"
+#include "unicode/unistr.h"
#include "cstring.h"
#include "cmemory.h"
@@ -142,18 +143,42 @@ u_fopen(const char *filename,
return result; /* not a file leak */
}
+// FILENAME_BUF_MAX represents the largest size that we are willing to use for a
+// stack-allocated buffer to contain a file name or path. If PATH_MAX (POSIX) or MAX_PATH
+// (Windows) are defined and are smaller than this we will use their defined value;
+// otherwise, we will use FILENAME_BUF_MAX for the stack-allocated buffer, and dynamically
+// allocate a buffer for any file name or path that is that length or longer.
+#define FILENAME_BUF_MAX 296
+#if defined PATH_MAX && PATH_MAX < FILENAME_BUF_MAX
+#define FILENAME_BUF_CAPACITY PATH_MAX
+#elif defined MAX_PATH && MAX_PATH < FILENAME_BUF_MAX
+#define FILENAME_BUF_CAPACITY MAX_PATH
+#else
+#define FILENAME_BUF_CAPACITY FILENAME_BUF_MAX
+#endif
+
U_CAPI UFILE* U_EXPORT2
u_fopen_u(const UChar *filename,
const char *perm,
const char *locale,
const char *codepage)
{
- UFILE *result;
- char buffer[256];
-
- u_austrcpy(buffer, filename);
+ UFILE *result;
+ char buffer[FILENAME_BUF_CAPACITY];
+ char *filenameBuffer = buffer;
+
+ icu::UnicodeString filenameString(true, filename, -1); // readonly aliasing, does not allocate memory
+ // extract with conversion to platform default codepage, return full length (not including 0 termination)
+ int32_t filenameLength = filenameString.extract(0, filenameString.length(), filenameBuffer, FILENAME_BUF_CAPACITY);
+ if (filenameLength >= FILENAME_BUF_CAPACITY) { // could not fit (with zero termination) in buffer
+ filenameBuffer = static_cast<char *>(uprv_malloc(++filenameLength)); // add one for zero termination
+ if (!filenameBuffer) {
+ return nullptr;
+ }
+ filenameString.extract(0, filenameString.length(), filenameBuffer, filenameLength);
+ }
- result = u_fopen(buffer, perm, locale, codepage);
+ result = u_fopen(filenameBuffer, perm, locale, codepage);
#if U_PLATFORM_USES_ONLY_WIN32_API
/* Try Windows API _wfopen if the above fails. */
if (!result) {
@@ -161,20 +186,25 @@ u_fopen_u(const UChar *filename,
wchar_t wperm[40] = {};
size_t retVal;
mbstowcs_s(&retVal, wperm, UPRV_LENGTHOF(wperm), perm, _TRUNCATE);
- FILE *systemFile = _wfopen((const wchar_t *)filename, wperm);
+ FILE *systemFile = _wfopen(reinterpret_cast<const wchar_t *>(filename), wperm); // may return NULL for long filename
if (systemFile) {
result = finit_owner(systemFile, locale, codepage, TRUE);
}
- if (!result) {
+ if (!result && systemFile) {
/* Something bad happened.
- Maybe the converter couldn't be opened. */
+ Maybe the converter couldn't be opened.
+ Bu do not fclose(systemFile) if systemFile is NULL. */
fclose(systemFile);
}
}
#endif
+ if (filenameBuffer != buffer) {
+ uprv_free(filenameBuffer);
+ }
return result; /* not a file leak */
}
+
U_CAPI UFILE* U_EXPORT2
u_fstropen(UChar *stringBuf,
int32_t capacity,
diff --git a/Build/source/libs/icu/icu-src/source/io/ufile.h b/Build/source/libs/icu/icu-src/source/io/ufile.h
index e85208fcd35..88fa40911e4 100644
--- a/Build/source/libs/icu/icu-src/source/io/ufile.h
+++ b/Build/source/libs/icu/icu-src/source/io/ufile.h
@@ -74,7 +74,7 @@ struct UFILE {
UChar fUCBuffer[UFILE_UCHARBUFFER_SIZE];/* buffer used for toUnicode */
- UBool fOwnFile; /* TRUE if fFile should be closed */
+ UBool fOwnFile; /* true if fFile should be closed */
int32_t fFileno; /* File number. Useful to determine if it's stdin. */
};
@@ -100,7 +100,7 @@ ufile_fill_uchar_buffer(UFILE *f);
* Get one code unit and detect whether the end of file has been reached.
* @param f The UFILE containing the characters.
* @param ch The read in character
- * @return TRUE if the character is valid, or FALSE when EOF has been detected
+ * @return true if the character is valid, or false when EOF has been detected
*/
U_CFUNC UBool U_EXPORT2
ufile_getch(UFILE *f, UChar *ch);
@@ -109,7 +109,7 @@ ufile_getch(UFILE *f, UChar *ch);
* Get one character and detect whether the end of file has been reached.
* @param f The UFILE containing the characters.
* @param ch The read in character
- * @return TRUE if the character is valid, or FALSE when EOF has been detected
+ * @return true if the character is valid, or false when EOF has been detected
*/
U_CFUNC UBool U_EXPORT2
ufile_getch32(UFILE *f, UChar32 *ch);
diff --git a/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h b/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h
index 33b56a0175c..d040fdce5a9 100644
--- a/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h
+++ b/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h
@@ -82,7 +82,7 @@ ufmt_digitvalue(UChar c);
* Determine if a UChar is a digit for a specified radix.
* @param c The UChar to check.
* @param radix The desired radix.
- * @return TRUE if <TT>c</TT> is a digit in <TT>radix</TT>, FALSE otherwise.
+ * @return true if <TT>c</TT> is a digit in <TT>radix</TT>, false otherwise.
*/
UBool
ufmt_isdigit(UChar c,
@@ -95,7 +95,7 @@ ufmt_isdigit(UChar c,
* the number of UChars written to <TT>buffer</TT>.
* @param value The value to be converted
* @param radix The desired radix
- * @param uselower TRUE means lower case will be used, FALSE means upper case
+ * @param uselower true means lower case will be used, false means upper case
* @param minDigits The minimum number of digits for for the formatted number,
* which will be padded with zeroes. -1 means do not pad.
*/
diff --git a/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h b/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
index 342c2b46045..50a8815e3a7 100644
--- a/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
+++ b/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
@@ -30,9 +30,12 @@
#include "unicode/utypes.h"
#include "unicode/ucnv.h"
#include "unicode/utrans.h"
-#include "unicode/localpointer.h"
#include "unicode/unum.h"
+#if U_SHOW_CPLUSPLUS_API
+#include "unicode/localpointer.h"
+#endif // U_SHOW_CPLUSPLUS_API
+
#if !UCONFIG_NO_CONVERSION
/*
@@ -228,7 +231,7 @@ typedef enum {
* That is, data written to a UFILE will be formatted using the conventions
* specified by that UFILE's Locale; this data will be in the character set
* specified by that UFILE's codepage.
- * @param filename The name of the file to open.
+ * @param filename The name of the file to open. Must be 0-terminated.
* @param perm The read/write permission for the UFILE; one of "r", "w", "rw"
* @param locale The locale whose conventions will be used to format
* and parse output. If this parameter is NULL, the default locale will
@@ -239,7 +242,7 @@ typedef enum {
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE UFILE* U_EXPORT2
+U_CAPI UFILE* U_EXPORT2
u_fopen(const char *filename,
const char *perm,
const char *locale,
@@ -251,7 +254,7 @@ u_fopen(const char *filename,
* That is, data written to a UFILE will be formatted using the conventions
* specified by that UFILE's Locale; this data will be in the character set
* specified by that UFILE's codepage.
- * @param filename The name of the file to open.
+ * @param filename The name of the file to open. Must be 0-terminated.
* @param perm The read/write permission for the UFILE; one of "r", "w", "rw"
* @param locale The locale whose conventions will be used to format
* and parse output. If this parameter is NULL, the default locale will
@@ -262,7 +265,7 @@ u_fopen(const char *filename,
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 54
*/
-U_STABLE UFILE* U_EXPORT2
+U_CAPI UFILE* U_EXPORT2
u_fopen_u(const UChar *filename,
const char *perm,
const char *locale,
@@ -284,7 +287,7 @@ u_fopen_u(const UChar *filename,
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE UFILE* U_EXPORT2
+U_CAPI UFILE* U_EXPORT2
u_finit(FILE *f,
const char *locale,
const char *codepage);
@@ -305,7 +308,7 @@ u_finit(FILE *f,
* the ownership of the FILE* stream remains with the caller.
* @stable ICU 4.4
*/
-U_STABLE UFILE* U_EXPORT2
+U_CAPI UFILE* U_EXPORT2
u_fadopt(FILE *f,
const char *locale,
const char *codepage);
@@ -324,7 +327,7 @@ u_fadopt(FILE *f,
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE UFILE* U_EXPORT2
+U_CAPI UFILE* U_EXPORT2
u_fstropen(UChar *stringBuf,
int32_t capacity,
const char *locale);
@@ -335,7 +338,7 @@ u_fstropen(UChar *stringBuf,
* @stable ICU 3.0
* @see u_fflush
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_fclose(UFILE *file);
#if U_SHOW_CPLUSPLUS_API
@@ -360,12 +363,12 @@ U_NAMESPACE_END
/**
* Tests if the UFILE is at the end of the file stream.
* @param f The UFILE from which to read.
- * @return Returns TRUE after the first read operation that attempts to
- * read past the end of the file. It returns FALSE if the current position is
+ * @return Returns true after the first read operation that attempts to
+ * read past the end of the file. It returns false if the current position is
* not end of file.
* @stable ICU 3.0
*/
-U_STABLE UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
u_feof(UFILE *f);
/**
@@ -378,7 +381,7 @@ u_feof(UFILE *f);
* @param file The UFILE to flush.
* @stable ICU 3.0
*/
-U_STABLE void U_EXPORT2
+U_CAPI void U_EXPORT2
u_fflush(UFILE *file);
/**
@@ -386,7 +389,7 @@ u_fflush(UFILE *file);
* @param file The UFILE to rewind.
* @stable ICU 3.0
*/
-U_STABLE void
+U_CAPI void
u_frewind(UFILE *file);
/**
@@ -395,7 +398,7 @@ u_frewind(UFILE *file);
* @return A FILE*, owned by the UFILE. (The FILE <EM>must not</EM> be modified or closed)
* @stable ICU 3.0
*/
-U_STABLE FILE* U_EXPORT2
+U_CAPI FILE* U_EXPORT2
u_fgetfile(UFILE *f);
#if !UCONFIG_NO_FORMATTING
@@ -408,7 +411,7 @@ u_fgetfile(UFILE *f);
* @return The locale whose conventions are used to format and parse output.
* @stable ICU 3.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
u_fgetlocale(UFILE *file);
/**
@@ -419,7 +422,7 @@ u_fgetlocale(UFILE *file);
* @return NULL if successful, otherwise a negative number.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fsetlocale(UFILE *file,
const char *locale);
@@ -434,7 +437,7 @@ u_fsetlocale(UFILE *file,
* or NULL if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE const char* U_EXPORT2
+U_CAPI const char* U_EXPORT2
u_fgetcodepage(UFILE *file);
/**
@@ -452,7 +455,7 @@ u_fgetcodepage(UFILE *file);
* @see u_frewind
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fsetcodepage(const char *codepage,
UFILE *file);
@@ -463,7 +466,7 @@ u_fsetcodepage(const char *codepage,
* @return alias to the converter (The converter <EM>must not</EM> be modified or closed)
* @stable ICU 3.0
*/
-U_STABLE UConverter* U_EXPORT2 u_fgetConverter(UFILE *f);
+U_CAPI UConverter* U_EXPORT2 u_fgetConverter(UFILE *f);
#if !UCONFIG_NO_FORMATTING
/**
@@ -472,7 +475,7 @@ U_STABLE UConverter* U_EXPORT2 u_fgetConverter(UFILE *f);
* @return alias to the number formatter (The formatter <EM>must not</EM> be modified or closed)
* @stable ICU 51
*/
- U_STABLE const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *f);
+ U_CAPI const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *f);
/* Output functions */
@@ -483,7 +486,7 @@ U_STABLE UConverter* U_EXPORT2 u_fgetConverter(UFILE *f);
* @return The number of Unicode characters written to <TT>stdout</TT>
* @stable ICU 49
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_printf(const char *patternSpecification,
... );
@@ -495,7 +498,7 @@ u_printf(const char *patternSpecification,
* @return The number of Unicode characters written to <TT>f</TT>.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fprintf(UFILE *f,
const char *patternSpecification,
... );
@@ -512,7 +515,7 @@ u_fprintf(UFILE *f,
* @see u_fprintf
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vfprintf(UFILE *f,
const char *patternSpecification,
va_list ap);
@@ -524,7 +527,7 @@ u_vfprintf(UFILE *f,
* @return The number of Unicode characters written to <TT>stdout</TT>
* @stable ICU 49
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_printf_u(const UChar *patternSpecification,
... );
@@ -533,7 +536,7 @@ u_printf_u(const UChar *patternSpecification,
* @return UFILE that writes to <TT>stdout</TT>
* @stable ICU 49
*/
-U_STABLE UFILE * U_EXPORT2
+U_CAPI UFILE * U_EXPORT2
u_get_stdout(void);
/**
@@ -544,7 +547,7 @@ u_get_stdout(void);
* @return The number of Unicode characters written to <TT>f</TT>.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fprintf_u(UFILE *f,
const UChar *patternSpecification,
... );
@@ -561,7 +564,7 @@ u_fprintf_u(UFILE *f,
* @see u_fprintf_u
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vfprintf_u(UFILE *f,
const UChar *patternSpecification,
va_list ap);
@@ -576,7 +579,7 @@ u_vfprintf_u(UFILE *f,
* @see u_file_write
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fputs(const UChar *s,
UFILE *f);
@@ -587,7 +590,7 @@ u_fputs(const UChar *s,
* @return The character written if successful, EOF otherwise.
* @stable ICU 3.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_fputc(UChar32 uc,
UFILE *f);
@@ -602,7 +605,7 @@ u_fputc(UChar32 uc,
* @see u_fputs
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_file_write(const UChar *ustring,
int32_t count,
UFILE *f);
@@ -620,7 +623,7 @@ u_file_write(const UChar *ustring,
* if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fscanf(UFILE *f,
const char *patternSpecification,
... );
@@ -638,7 +641,7 @@ u_fscanf(UFILE *f,
* @see u_fscanf
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vfscanf(UFILE *f,
const char *patternSpecification,
va_list ap);
@@ -652,7 +655,7 @@ u_vfscanf(UFILE *f,
* if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_fscanf_u(UFILE *f,
const UChar *patternSpecification,
... );
@@ -670,7 +673,7 @@ u_fscanf_u(UFILE *f,
* @see u_fscanf_u
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vfscanf_u(UFILE *f,
const UChar *patternSpecification,
va_list ap);
@@ -688,7 +691,7 @@ u_vfscanf_u(UFILE *f,
* @return A pointer to <TT>s</TT>, or NULL if no characters were available.
* @stable ICU 3.0
*/
-U_STABLE UChar* U_EXPORT2
+U_CAPI UChar* U_EXPORT2
u_fgets(UChar *s,
int32_t n,
UFILE *f);
@@ -702,7 +705,7 @@ u_fgets(UChar *s,
* @return The UChar value read, or U+FFFF if no character was available.
* @stable ICU 3.0
*/
-U_STABLE UChar U_EXPORT2
+U_CAPI UChar U_EXPORT2
u_fgetc(UFILE *f);
/**
@@ -715,7 +718,7 @@ u_fgetc(UFILE *f);
* @see u_unescape()
* @stable ICU 3.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_fgetcx(UFILE *f);
/**
@@ -729,7 +732,7 @@ u_fgetcx(UFILE *f);
* @return The UChar32 value put back if successful, U_EOF otherwise.
* @stable ICU 3.0
*/
-U_STABLE UChar32 U_EXPORT2
+U_CAPI UChar32 U_EXPORT2
u_fungetc(UChar32 c,
UFILE *f);
@@ -743,7 +746,7 @@ u_fungetc(UChar32 c,
* @return The number of Unicode characters read.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_file_read(UChar *chars,
int32_t count,
UFILE *f);
@@ -767,7 +770,7 @@ u_file_read(UChar *chars,
* on the result of this function.
* @stable ICU 3.0
*/
-U_STABLE UTransliterator* U_EXPORT2
+U_CAPI UTransliterator* U_EXPORT2
u_fsettransliterator(UFILE *file, UFileDirection direction,
UTransliterator *adopt, UErrorCode *status);
@@ -788,7 +791,7 @@ u_fsettransliterator(UFILE *file, UFileDirection direction,
* does not include the terminating null character.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_sprintf(UChar *buffer,
const char *patternSpecification,
... );
@@ -810,7 +813,7 @@ u_sprintf(UChar *buffer,
* the terminating null character.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_snprintf(UChar *buffer,
int32_t count,
const char *patternSpecification,
@@ -829,7 +832,7 @@ u_snprintf(UChar *buffer,
* @see u_sprintf
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vsprintf(UChar *buffer,
const char *patternSpecification,
va_list ap);
@@ -854,7 +857,7 @@ u_vsprintf(UChar *buffer,
* @see u_sprintf
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vsnprintf(UChar *buffer,
int32_t count,
const char *patternSpecification,
@@ -869,7 +872,7 @@ u_vsnprintf(UChar *buffer,
* @return The number of Unicode characters written to <TT>buffer</TT>.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_sprintf_u(UChar *buffer,
const UChar *patternSpecification,
... );
@@ -890,7 +893,7 @@ u_sprintf_u(UChar *buffer,
* <TT>buffer</TT> had count been sufficiently large.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_snprintf_u(UChar *buffer,
int32_t count,
const UChar *patternSpecification,
@@ -909,7 +912,7 @@ u_snprintf_u(UChar *buffer,
* @see u_sprintf_u
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vsprintf_u(UChar *buffer,
const UChar *patternSpecification,
va_list ap);
@@ -934,7 +937,7 @@ u_vsprintf_u(UChar *buffer,
* @see u_sprintf_u
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vsnprintf_u(UChar *buffer,
int32_t count,
const UChar *patternSpecification,
@@ -952,7 +955,7 @@ u_vsnprintf_u(UChar *buffer,
* if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_sscanf(const UChar *buffer,
const char *patternSpecification,
... );
@@ -971,7 +974,7 @@ u_sscanf(const UChar *buffer,
* @see u_sscanf
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vsscanf(const UChar *buffer,
const char *patternSpecification,
va_list ap);
@@ -986,7 +989,7 @@ u_vsscanf(const UChar *buffer,
* if an error occurred.
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_sscanf_u(const UChar *buffer,
const UChar *patternSpecification,
... );
@@ -1005,7 +1008,7 @@ u_sscanf_u(const UChar *buffer,
* @see u_sscanf_u
* @stable ICU 3.0
*/
-U_STABLE int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
u_vsscanf_u(const UChar *buffer,
const UChar *patternSpecification,
va_list ap);
diff --git a/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp b/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp
index 6dc1c09dee7..5bf3e5b7a84 100644
--- a/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp
+++ b/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp
@@ -695,9 +695,10 @@ u_scanf_integer_handler(UFILE *input,
int32_t len;
void *num = (void*) (args[0].ptrValue);
- UNumberFormat *format;
+ UNumberFormat *format, *localFormat;
int32_t parsePos = 0;
int32_t skipped;
+ int32_t parseIntOnly = 0;
UErrorCode status = U_ZERO_ERROR;
int64_t result;
@@ -722,11 +723,20 @@ u_scanf_integer_handler(UFILE *input,
if(format == 0)
return 0;
+ /* for integer types, do not attempt to parse fractions */
+ localFormat = unum_clone(format, &status);
+ if(U_FAILURE(status))
+ return 0;
+
+ if(info->fSpec == 'd' || info->fSpec == 'i' || info->fSpec == 'u')
+ parseIntOnly = 1;
+ unum_setAttribute(localFormat, UNUM_PARSE_INT_ONLY, parseIntOnly);
+
/* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */
- skipped += u_scanf_skip_leading_positive_sign(input, format, &status);
+ skipped += u_scanf_skip_leading_positive_sign(input, localFormat, &status);
/* parse the number */
- result = unum_parseInt64(format, input->str.fPos, len, &parsePos, &status);
+ result = unum_parseInt64(localFormat, input->str.fPos, len, &parsePos, &status);
/* mask off any necessary bits */
if (!info->fSkipArg) {
@@ -741,6 +751,9 @@ u_scanf_integer_handler(UFILE *input,
/* update the input's position to reflect consumed data */
input->str.fPos += parsePos;
+ /* cleanup cloned formatter */
+ unum_close(localFormat);
+
/* we converted 1 arg */
*argConverted = !info->fSkipArg;
return parsePos + skipped;
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/Makefile.in b/Build/source/libs/icu/icu-src/source/layoutex/Makefile.in
index b9cabac256d..d735099582a 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/layoutex/Makefile.in
@@ -67,11 +67,8 @@ DEFS += -DU_LAYOUTEX_IMPLEMENTATION
LDFLAGS += $(LDFLAGSICULX)
LIBS = $(LIBICUUC) $(LIBICULE) $(DEFAULT_LIBS)
-OBJECTS = ParagraphLayout.o \
-RunArrays.o \
-LXUtilities.o \
-playout.o \
-plruns.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
## Header files to install
HEADERS= $(srcdir)/layout/ParagraphLayout.h $(srcdir)/layout/RunArrays.h $(srcdir)/layout/playout.h $(srcdir)/layout/plruns.h
@@ -114,6 +111,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -121,6 +123,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp b/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp
index 9e525cf1c52..0a765a34c9e 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp
+++ b/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp
@@ -137,7 +137,7 @@ le_int32 StyleRuns::getRuns(le_int32 runLimits[], le_int32 styleIndices[])
* process, rather for all scripts which require
* complex processing for correct rendering.
*/
-static const le_bool complexTable[scriptCodeCount] = {
+static const le_bool complexTable[] = {
FALSE , /* Zyyy */
FALSE, /* Qaai */
TRUE, /* Arab */
@@ -974,7 +974,7 @@ le_int32 ParagraphLayout::getLanguageCode(const Locale *locale)
le_bool ParagraphLayout::isComplex(UScriptCode script)
{
- if (script < 0 || script >= (UScriptCode) scriptCodeCount) {
+ if (script < 0 || script >= ARRAY_SIZE(complexTable)) {
return FALSE;
}
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
index 60972dc9386..ce3f7e54114 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
@@ -46,7 +46,7 @@ U_NAMESPACE_BEGIN
* You may use this class with the HarfBuzz icu-le-hb wrapper,
* see http://www.freedesktop.org/wiki/Software/HarfBuzz/
*
- * See http://userguide.icu-project.org/layoutengine for special build instructions.
+ * See https://unicode-org.github.io/icu/userguide/layoutengine for special build instructions.
*/
class U_LAYOUTEX_API ParagraphLayout : public UObject
{
@@ -382,7 +382,7 @@ public:
*
* @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object.
*
- * @param vertical is <code>TRUE</code> if the paragraph should be set vertically.
+ * @param vertical is <code>true</code> if the paragraph should be set vertically.
*
* @param status will be set to any error code encountered during construction.
*
@@ -424,7 +424,7 @@ public:
*
* @param fontRuns is a pointer to a <code>FontRuns</code> object representing the font runs.
*
- * @return <code>TRUE</code> if the paragraph contains complex text.
+ * @return <code>true</code> if the paragraph contains complex text.
*
* @stable ICU 3.2
*/
@@ -438,7 +438,7 @@ public:
*
* @param count is the number of characters in the paragraph.
*
- * @return <code>TRUE</code> if any of the text requires complex processing.
+ * @return <code>true</code> if any of the text requires complex processing.
*
* @stable ICU 3.2
*/
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
index 5cf6c60b3f3..aa8b4ac5079 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
@@ -222,19 +222,19 @@ private:
};
inline RunArray::RunArray()
- : UObject(), fClientArrays(FALSE), fLimits(NULL), fCount(0), fCapacity(0)
+ : UObject(), fClientArrays(false), fLimits(NULL), fCount(0), fCapacity(0)
{
// nothing else to do...
}
inline RunArray::RunArray(const RunArray & /*other*/)
- : UObject(), fClientArrays(FALSE), fLimits(NULL), fCount(0), fCapacity(0)
+ : UObject(), fClientArrays(false), fLimits(NULL), fCount(0), fCapacity(0)
{
// nothing else to do...
}
inline RunArray::RunArray(const le_int32 *limits, le_int32 count)
- : UObject(), fClientArrays(TRUE), fLimits(limits), fCount(count), fCapacity(count)
+ : UObject(), fClientArrays(true), fLimits(limits), fCount(count), fCapacity(count)
{
// nothing else to do...
}
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
index 317b4389136..98fc2127cb8 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
@@ -82,7 +82,7 @@ typedef void pl_visualRun;
*
* @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object.
*
- * @param vertical is <code>TRUE</code> if the paragraph should be set vertically.
+ * @param vertical is <code>true</code> if the paragraph should be set vertically.
*
* @param status will be set to any error code encountered during construction.
*
@@ -95,7 +95,7 @@ typedef void pl_visualRun;
*
* @internal
*/
-U_INTERNAL pl_paragraph * U_EXPORT2
+U_CAPI pl_paragraph * U_EXPORT2
pl_create(const LEUnicode chars[],
le_int32 count,
const pl_fontRuns *fontRuns,
@@ -115,7 +115,7 @@ pl_create(const LEUnicode chars[],
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_close(pl_paragraph *paragraph);
/**
@@ -126,12 +126,12 @@ pl_close(pl_paragraph *paragraph);
*
* @param count is the number of characters in the paragraph.
*
- * @return <code>TRUE</code> if any of the text requires complex processing.
+ * @return <code>true</code> if any of the text requires complex processing.
*
* @internal
*/
-U_INTERNAL le_bool U_EXPORT2
+U_CAPI le_bool U_EXPORT2
pl_isComplex(const LEUnicode chars[],
le_int32 count);
@@ -146,7 +146,7 @@ pl_isComplex(const LEUnicode chars[],
*
* @internal
*/
-U_INTERNAL UBiDiLevel U_EXPORT2
+U_CAPI UBiDiLevel U_EXPORT2
pl_getParagraphLevel(pl_paragraph *paragraph);
/**
@@ -160,7 +160,7 @@ pl_getParagraphLevel(pl_paragraph *paragraph);
*
* @internal
*/
-U_INTERNAL UBiDiDirection U_EXPORT2
+U_CAPI UBiDiDirection U_EXPORT2
pl_getTextDirection(pl_paragraph *paragraph);
/**
@@ -178,7 +178,7 @@ pl_getTextDirection(pl_paragraph *paragraph);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getAscent(const pl_paragraph *paragraph);
/**
@@ -191,7 +191,7 @@ pl_getAscent(const pl_paragraph *paragraph);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getDescent(const pl_paragraph *paragraph);
/**
@@ -204,7 +204,7 @@ pl_getDescent(const pl_paragraph *paragraph);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLeading(const pl_paragraph *paragraph);
/**
@@ -214,7 +214,7 @@ pl_getLeading(const pl_paragraph *paragraph);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_reflow(pl_paragraph *paragraph);
/**
@@ -235,7 +235,7 @@ pl_reflow(pl_paragraph *paragraph);
*
* @internal
*/
-U_INTERNAL pl_line * U_EXPORT2
+U_CAPI pl_line * U_EXPORT2
pl_nextLine(pl_paragraph *paragraph, float width);
/**
@@ -247,7 +247,7 @@ pl_nextLine(pl_paragraph *paragraph, float width);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_closeLine(pl_line *line);
/**
@@ -259,7 +259,7 @@ pl_closeLine(pl_line *line);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_countLineRuns(const pl_line *line);
/**
@@ -272,7 +272,7 @@ pl_countLineRuns(const pl_line *line);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLineAscent(const pl_line *line);
/**
@@ -285,7 +285,7 @@ pl_getLineAscent(const pl_line *line);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLineDescent(const pl_line *line);
/**
@@ -298,7 +298,7 @@ pl_getLineDescent(const pl_line *line);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLineLeading(const pl_line *line);
/**
@@ -312,7 +312,7 @@ pl_getLineLeading(const pl_line *line);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLineWidth(const pl_line *line);
/**
@@ -331,7 +331,7 @@ pl_getLineWidth(const pl_line *line);
*
* @internal
*/
-U_INTERNAL const pl_visualRun * U_EXPORT2
+U_CAPI const pl_visualRun * U_EXPORT2
pl_getLineVisualRun(const pl_line *line, le_int32 runIndex);
/**
@@ -348,7 +348,7 @@ pl_getLineVisualRun(const pl_line *line, le_int32 runIndex);
*
* @internal
*/
-U_INTERNAL const le_font * U_EXPORT2
+U_CAPI const le_font * U_EXPORT2
pl_getVisualRunFont(const pl_visualRun *run);
/**
@@ -361,7 +361,7 @@ pl_getVisualRunFont(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL UBiDiDirection U_EXPORT2
+U_CAPI UBiDiDirection U_EXPORT2
pl_getVisualRunDirection(const pl_visualRun *run);
/**
@@ -373,7 +373,7 @@ pl_getVisualRunDirection(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getVisualRunGlyphCount(const pl_visualRun *run);
/**
@@ -388,7 +388,7 @@ pl_getVisualRunGlyphCount(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL const LEGlyphID * U_EXPORT2
+U_CAPI const LEGlyphID * U_EXPORT2
pl_getVisualRunGlyphs(const pl_visualRun *run);
/**
@@ -406,7 +406,7 @@ pl_getVisualRunGlyphs(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL const float * U_EXPORT2
+U_CAPI const float * U_EXPORT2
pl_getVisualRunPositions(const pl_visualRun *run);
/**
@@ -421,7 +421,7 @@ pl_getVisualRunPositions(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL const le_int32 * U_EXPORT2
+U_CAPI const le_int32 * U_EXPORT2
pl_getVisualRunGlyphToCharMap(const pl_visualRun *run);
/**
@@ -434,7 +434,7 @@ pl_getVisualRunGlyphToCharMap(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getVisualRunAscent(const pl_visualRun *run);
/**
@@ -447,7 +447,7 @@ pl_getVisualRunAscent(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getVisualRunDescent(const pl_visualRun *run);
/**
@@ -460,7 +460,7 @@ pl_getVisualRunDescent(const pl_visualRun *run);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getVisualRunLeading(const pl_visualRun *run);
#endif /* U_HIDE_INTERNAL_API */
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
index 6cbece8040e..48888fdc1fb 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
@@ -58,7 +58,7 @@ typedef void pl_localeRuns;
*
* @internal
*/
-U_INTERNAL pl_fontRuns * U_EXPORT2
+U_CAPI pl_fontRuns * U_EXPORT2
pl_openFontRuns(const le_font **fonts,
const le_int32 *limits,
le_int32 count);
@@ -74,7 +74,7 @@ pl_openFontRuns(const le_font **fonts,
*
* @internal
*/
-U_INTERNAL pl_fontRuns * U_EXPORT2
+U_CAPI pl_fontRuns * U_EXPORT2
pl_openEmptyFontRuns(le_int32 initialCapacity);
/**
@@ -85,7 +85,7 @@ pl_openEmptyFontRuns(le_int32 initialCapacity);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_closeFontRuns(pl_fontRuns *fontRuns);
/**
@@ -97,7 +97,7 @@ pl_closeFontRuns(pl_fontRuns *fontRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getFontRunCount(const pl_fontRuns *fontRuns);
/**
@@ -107,7 +107,7 @@ pl_getFontRunCount(const pl_fontRuns *fontRuns);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_resetFontRuns(pl_fontRuns *fontRuns);
/**
@@ -120,7 +120,7 @@ pl_resetFontRuns(pl_fontRuns *fontRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getFontRunLastLimit(const pl_fontRuns *fontRuns);
/**
@@ -133,7 +133,7 @@ pl_getFontRunLastLimit(const pl_fontRuns *fontRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getFontRunLimit(const pl_fontRuns *fontRuns,
le_int32 run);
@@ -149,7 +149,7 @@ pl_getFontRunLimit(const pl_fontRuns *fontRuns,
*
* @internal
*/
-U_INTERNAL const le_font * U_EXPORT2
+U_CAPI const le_font * U_EXPORT2
pl_getFontRunFont(const pl_fontRuns *fontRuns,
le_int32 run);
@@ -172,7 +172,7 @@ pl_getFontRunFont(const pl_fontRuns *fontRuns,
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_addFontRun(pl_fontRuns *fontRuns,
const le_font *font,
le_int32 limit);
@@ -191,7 +191,7 @@ pl_addFontRun(pl_fontRuns *fontRuns,
*
* @internal
*/
-U_INTERNAL pl_valueRuns * U_EXPORT2
+U_CAPI pl_valueRuns * U_EXPORT2
pl_openValueRuns(const le_int32 *values,
const le_int32 *limits,
le_int32 count);
@@ -207,7 +207,7 @@ pl_openValueRuns(const le_int32 *values,
*
* @internal
*/
-U_INTERNAL pl_valueRuns * U_EXPORT2
+U_CAPI pl_valueRuns * U_EXPORT2
pl_openEmptyValueRuns(le_int32 initialCapacity);
/**
@@ -218,7 +218,7 @@ pl_openEmptyValueRuns(le_int32 initialCapacity);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_closeValueRuns(pl_valueRuns *valueRuns);
/**
@@ -230,7 +230,7 @@ pl_closeValueRuns(pl_valueRuns *valueRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getValueRunCount(const pl_valueRuns *valueRuns);
/**
@@ -240,7 +240,7 @@ pl_getValueRunCount(const pl_valueRuns *valueRuns);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_resetValueRuns(pl_valueRuns *valueRuns);
/**
@@ -253,7 +253,7 @@ pl_resetValueRuns(pl_valueRuns *valueRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getValueRunLastLimit(const pl_valueRuns *valueRuns);
/**
@@ -266,7 +266,7 @@ pl_getValueRunLastLimit(const pl_valueRuns *valueRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getValueRunLimit(const pl_valueRuns *valueRuns,
le_int32 run);
@@ -282,7 +282,7 @@ pl_getValueRunLimit(const pl_valueRuns *valueRuns,
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getValueRunValue(const pl_valueRuns *valueRuns,
le_int32 run);
@@ -304,7 +304,7 @@ pl_getValueRunValue(const pl_valueRuns *valueRuns,
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_addValueRun(pl_valueRuns *valueRuns,
le_int32 value,
le_int32 limit);
@@ -323,7 +323,7 @@ pl_addValueRun(pl_valueRuns *valueRuns,
*
* @internal
*/
-U_INTERNAL pl_localeRuns * U_EXPORT2
+U_CAPI pl_localeRuns * U_EXPORT2
pl_openLocaleRuns(const char **locales,
const le_int32 *limits,
le_int32 count);
@@ -339,7 +339,7 @@ pl_openLocaleRuns(const char **locales,
*
* @internal
*/
-U_INTERNAL pl_localeRuns * U_EXPORT2
+U_CAPI pl_localeRuns * U_EXPORT2
pl_openEmptyLocaleRuns(le_int32 initialCapacity);
/**
@@ -350,7 +350,7 @@ pl_openEmptyLocaleRuns(le_int32 initialCapacity);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_closeLocaleRuns(pl_localeRuns *localeRuns);
/**
@@ -362,7 +362,7 @@ pl_closeLocaleRuns(pl_localeRuns *localeRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLocaleRunCount(const pl_localeRuns *localeRuns);
/**
@@ -372,7 +372,7 @@ pl_getLocaleRunCount(const pl_localeRuns *localeRuns);
*
* @internal
*/
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
pl_resetLocaleRuns(pl_localeRuns *localeRuns);
/**
@@ -385,7 +385,7 @@ pl_resetLocaleRuns(pl_localeRuns *localeRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLocaleRunLastLimit(const pl_localeRuns *localeRuns);
/**
@@ -398,7 +398,7 @@ pl_getLocaleRunLastLimit(const pl_localeRuns *localeRuns);
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_getLocaleRunLimit(const pl_localeRuns *localeRuns,
le_int32 run);
@@ -414,7 +414,7 @@ pl_getLocaleRunLimit(const pl_localeRuns *localeRuns,
*
* @internal
*/
-U_INTERNAL const char * U_EXPORT2
+U_CAPI const char * U_EXPORT2
pl_getLocaleRunLocale(const pl_localeRuns *localeRuns,
le_int32 run);
@@ -437,7 +437,7 @@ pl_getLocaleRunLocale(const pl_localeRuns *localeRuns,
*
* @internal
*/
-U_INTERNAL le_int32 U_EXPORT2
+U_CAPI le_int32 U_EXPORT2
pl_addLocaleRun(pl_localeRuns *localeRuns,
const char *locale,
le_int32 limit);
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj b/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
index efa1a33d6f5..0a1556ed5dd 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
@@ -15,22 +15,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -70,7 +54,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin\iculx65.dll</OutputFile>
+ <OutputFile>..\..\bin\iculx68.dll</OutputFile>
<AdditionalDependencies>icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ProgramDatabaseFile>.\..\..\lib\iculx.pdb</ProgramDatabaseFile>
@@ -95,7 +79,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin\iculx65d.dll</OutputFile>
+ <OutputFile>..\..\bin\iculx68d.dll</OutputFile>
<AdditionalDependencies>icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -120,7 +104,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64\iculx65.dll</OutputFile>
+ <OutputFile>..\..\bin64\iculx68.dll</OutputFile>
<AdditionalDependencies>icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ProgramDatabaseFile>.\..\..\lib64\iculx.pdb</ProgramDatabaseFile>
@@ -143,7 +127,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64\iculx65d.dll</OutputFile>
+ <OutputFile>..\..\bin64\iculx68d.dll</OutputFile>
<AdditionalDependencies>icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/sources.txt b/Build/source/libs/icu/icu-src/source/layoutex/sources.txt
new file mode 100644
index 00000000000..ef92e54daf8
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/layoutex/sources.txt
@@ -0,0 +1,5 @@
+LXUtilities.cpp
+ParagraphLayout.cpp
+RunArrays.cpp
+playout.cpp
+plruns.cpp
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/__main__.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/__main__.py
index 5d843d9c081..a6a387d9ad2 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/__main__.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/__main__.py
@@ -7,6 +7,7 @@ from __future__ import print_function
import argparse
import glob as pyglob
+import io as pyio
import json
import os
import sys
@@ -237,6 +238,29 @@ def add_copy_input_requests(requests, config, common_vars):
return result
+class IO(object):
+ """I/O operations required when computing the build actions"""
+
+ def __init__(self, src_dir):
+ self.src_dir = src_dir
+
+ def glob(self, pattern):
+ absolute_paths = pyglob.glob(os.path.join(self.src_dir, pattern))
+ # Strip off the absolute path suffix so we are left with a relative path.
+ relative_paths = [v[len(self.src_dir)+1:] for v in sorted(absolute_paths)]
+ # For the purposes of icutools.databuilder, force Unix-style directory separators.
+ # Within the Python code, including BUILDRULES.py and user-provided config files,
+ # directory separators are normalized to '/', including on Windows platforms.
+ return [v.replace("\\", "/") for v in relative_paths]
+
+ def read_locale_deps(self, tree):
+ return self._read_json("%s/LOCALE_DEPS.json" % tree)
+
+ def _read_json(self, filename):
+ with pyio.open(os.path.join(self.src_dir, filename), "r", encoding="utf-8-sig") as f:
+ return json.load(CommentStripper(f))
+
+
def main(argv):
args = flag_parser.parse_args(argv)
config = Config(args)
@@ -252,15 +276,11 @@ def main(argv):
key: "$(%s)" % key
for key in list(makefile_vars.keys()) + makefile_env
}
- common["GLOB_DIR"] = args.src_dir
common["FILTERS_DIR"] = config.filter_dir
common["CWD_DIR"] = os.getcwd()
else:
makefile_vars = None
common = {
- # GLOB_DIR is used now, whereas IN_DIR is used during execution phase.
- # There is no useful distinction in unix-exec or windows-exec mode.
- "GLOB_DIR": args.src_dir,
"SRC_DIR": args.src_dir,
"IN_DIR": args.src_dir,
"OUT_DIR": args.out_dir,
@@ -272,14 +292,6 @@ def main(argv):
"ICUDATA_CHAR": "l"
}
- def glob(pattern):
- result_paths = pyglob.glob("{GLOB_DIR}/{PATTERN}".format(
- GLOB_DIR = args.src_dir,
- PATTERN = pattern
- ))
- # For the purposes of icutools.databuilder, force Unix-style directory separators.
- return [v.replace("\\", "/")[len(args.src_dir)+1:] for v in sorted(result_paths)]
-
# Automatically load BUILDRULES from the src_dir
sys.path.append(args.src_dir)
try:
@@ -288,7 +300,8 @@ def main(argv):
print("Cannot find BUILDRULES! Did you set your --src_dir?", file=sys.stderr)
sys.exit(1)
- requests = BUILDRULES.generate(config, glob, common)
+ io = IO(args.src_dir)
+ requests = BUILDRULES.generate(config, io, common)
if "fileReplacements" in config.filters_json_data:
tmp_in_dir = "{TMP_DIR}/in".format(**common)
@@ -298,7 +311,7 @@ def main(argv):
common["IN_DIR"] = tmp_in_dir
requests = add_copy_input_requests(requests, config, common)
- requests = filtration.apply_filters(requests, config)
+ requests = filtration.apply_filters(requests, config, io)
requests = utils.flatten_requests(requests, config, common)
build_dirs = utils.compute_directories(requests)
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
index 0eff5b9c57c..5ad5f50e22b 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
@@ -12,7 +12,6 @@ import sys
from . import *
from . import utils
-from .locale_dependencies import data as DEPENDENCY_DATA
from .request_types import *
@@ -21,7 +20,8 @@ from .request_types import *
# TODO(ICU-20301): Make this inherit from abc.ABC.
class Filter(object):
@staticmethod
- def create_from_json(json_data):
+ def create_from_json(json_data, io):
+ assert io != None
if "filterType" in json_data:
filter_type = json_data["filterType"]
else:
@@ -36,9 +36,9 @@ class Filter(object):
elif filter_type == "exclude":
return ExclusionFilter()
elif filter_type == "union":
- return UnionFilter(json_data)
+ return UnionFilter(json_data, io)
elif filter_type == "locale":
- return LocaleFilter(json_data)
+ return LocaleFilter(json_data, io)
else:
print("Error: Unknown filterType option: %s" % filter_type, file=sys.stderr)
return None
@@ -50,12 +50,19 @@ class Filter(object):
assert self.match(file)
return [request]
- @classmethod
- def _file_to_file_stem(cls, file):
+ @staticmethod
+ def _file_to_file_stem(file):
start = file.filename.rfind("/")
limit = file.filename.rfind(".")
return file.filename[start+1:limit]
+ @staticmethod
+ def _file_to_subdir(file):
+ limit = file.filename.rfind("/")
+ if limit == -1:
+ return None
+ return file.filename[:limit]
+
@abstractmethod
def match(self, file):
pass
@@ -71,15 +78,22 @@ class ExclusionFilter(Filter):
return False
-class WhitelistBlacklistFilter(Filter):
+class IncludeExcludeFilter(Filter):
def __init__(self, json_data):
if "whitelist" in json_data:
- self.is_whitelist = True
- self.whitelist = json_data["whitelist"]
+ self.is_includelist = True
+ self.includelist = json_data["whitelist"]
+ elif "includelist" in json_data:
+ self.is_includelist = True
+ self.includelist = json_data["includelist"]
+ elif "blacklist" in json_data:
+ self.is_includelist = False
+ self.excludelist = json_data["blacklist"]
+ elif "excludelist" in json_data:
+ self.is_includelist = False
+ self.excludelist = json_data["excludelist"]
else:
- assert "blacklist" in json_data, "Need either whitelist or blacklist: %s" % str(json_data)
- self.is_whitelist = False
- self.blacklist = json_data["blacklist"]
+ raise AssertionError("Need either includelist or excludelist: %s" % str(json_data))
def match(self, file):
file_stem = self._file_to_file_stem(file)
@@ -90,54 +104,54 @@ class WhitelistBlacklistFilter(Filter):
pass
-class FileStemFilter(WhitelistBlacklistFilter):
+class FileStemFilter(IncludeExcludeFilter):
def _should_include(self, file_stem):
- if self.is_whitelist:
- return file_stem in self.whitelist
+ if self.is_includelist:
+ return file_stem in self.includelist
else:
- return file_stem not in self.blacklist
+ return file_stem not in self.excludelist
-class LanguageFilter(WhitelistBlacklistFilter):
+class LanguageFilter(IncludeExcludeFilter):
def _should_include(self, file_stem):
language = file_stem.split("_")[0]
if language == "root":
# Always include root.txt
return True
- if self.is_whitelist:
- return language in self.whitelist
+ if self.is_includelist:
+ return language in self.includelist
else:
- return language not in self.blacklist
+ return language not in self.excludelist
-class RegexFilter(WhitelistBlacklistFilter):
+class RegexFilter(IncludeExcludeFilter):
def __init__(self, *args):
# TODO(ICU-20301): Change this to: super().__init__(*args)
super(RegexFilter, self).__init__(*args)
- if self.is_whitelist:
- self.whitelist = [re.compile(pat) for pat in self.whitelist]
+ if self.is_includelist:
+ self.includelist = [re.compile(pat) for pat in self.includelist]
else:
- self.blacklist = [re.compile(pat) for pat in self.blacklist]
+ self.excludelist = [re.compile(pat) for pat in self.excludelist]
def _should_include(self, file_stem):
- if self.is_whitelist:
- for pattern in self.whitelist:
+ if self.is_includelist:
+ for pattern in self.includelist:
if pattern.match(file_stem):
return True
return False
else:
- for pattern in self.blacklist:
+ for pattern in self.excludelist:
if pattern.match(file_stem):
return False
return True
class UnionFilter(Filter):
- def __init__(self, json_data):
+ def __init__(self, json_data, io):
# Collect the sub-filters.
self.sub_filters = []
for filter_json in json_data["unionOf"]:
- self.sub_filters.append(Filter.create_from_json(filter_json))
+ self.sub_filters.append(Filter.create_from_json(filter_json, io))
def match(self, file):
"""Match iff any of the sub-filters match."""
@@ -151,36 +165,36 @@ LANGUAGE_SCRIPT_REGEX = re.compile(r"^([a-z]{2,3})_[A-Z][a-z]{3}$")
LANGUAGE_ONLY_REGEX = re.compile(r"^[a-z]{2,3}$")
class LocaleFilter(Filter):
- def __init__(self, json_data):
- self.locales_requested = set()
- self.locales_required = set()
+ def __init__(self, json_data, io):
+ if "whitelist" in json_data:
+ self.locales_requested = list(json_data["whitelist"])
+ elif "includelist" in json_data:
+ self.locales_requested = list(json_data["includelist"])
+ else:
+ raise AssertionError("You must have an includelist in a locale filter")
self.include_children = json_data.get("includeChildren", True)
self.include_scripts = json_data.get("includeScripts", False)
- # Compute the requested and required locales.
- for locale in json_data["whitelist"]:
- self._add_locale_and_parents(locale)
-
- def _add_locale_and_parents(self, locale):
- # Store the locale as *requested*
- self.locales_requested.add(locale)
- # Store the locale and its dependencies as *required*
- while locale is not None:
- self.locales_required.add(locale)
- locale = self._get_parent_locale(locale)
+ # Load the dependency graph from disk
+ self.dependency_data_by_tree = {
+ tree: io.read_locale_deps(tree)
+ for tree in utils.ALL_TREES
+ }
def match(self, file):
+ tree = self._file_to_subdir(file)
+ assert tree is not None
locale = self._file_to_file_stem(file)
# A locale is *required* if it is *requested* or an ancestor of a
# *requested* locale.
- if locale in self.locales_required:
+ if locale in self._locales_required(tree):
return True
# Resolve include_scripts and include_children.
- return self._match_recursive(locale)
+ return self._match_recursive(locale, tree)
- def _match_recursive(self, locale):
+ def _match_recursive(self, locale, tree):
# Base case: return True if we reached a *requested* locale,
# or False if we ascend out of the locale tree.
if locale is None:
@@ -192,42 +206,51 @@ class LocaleFilter(Filter):
# This causes sr_Latn to check sr instead of going directly to root.
if self.include_scripts:
match = LANGUAGE_SCRIPT_REGEX.match(locale)
- if match and self._match_recursive(match.group(1)):
+ if match and self._match_recursive(match.group(1), tree):
return True
# Check if we are a descendant of a *requested* locale.
if self.include_children:
- parent = self._get_parent_locale(locale)
- if self._match_recursive(parent):
+ parent = self._get_parent_locale(locale, tree)
+ if self._match_recursive(parent, tree):
return True
# No matches.
return False
- @classmethod
- def _get_parent_locale(cls, locale):
- if locale in DEPENDENCY_DATA["parents"]:
- return DEPENDENCY_DATA["parents"][locale]
- if locale in DEPENDENCY_DATA["aliases"]:
- return DEPENDENCY_DATA["aliases"][locale]
+ def _get_parent_locale(self, locale, tree):
+ """Gets the parent locale in the given tree, according to dependency data."""
+ dependency_data = self.dependency_data_by_tree[tree]
+ if "parents" in dependency_data and locale in dependency_data["parents"]:
+ return dependency_data["parents"][locale]
+ if "aliases" in dependency_data and locale in dependency_data["aliases"]:
+ return dependency_data["aliases"][locale]
if LANGUAGE_ONLY_REGEX.match(locale):
return "root"
i = locale.rfind("_")
if i < 0:
+ assert locale == "root", "Invalid locale: %s/%s" % (tree, locale)
return None
return locale[:i]
+ def _locales_required(self, tree):
+ """Returns a generator of all required locales in the given tree."""
+ for locale in self.locales_requested:
+ while locale is not None:
+ yield locale
+ locale = self._get_parent_locale(locale, tree)
-def apply_filters(requests, config):
+
+def apply_filters(requests, config, io):
"""Runs the filters and returns a new list of requests."""
- requests = _apply_file_filters(requests, config)
- requests = _apply_resource_filters(requests, config)
+ requests = _apply_file_filters(requests, config, io)
+ requests = _apply_resource_filters(requests, config, io)
return requests
-def _apply_file_filters(old_requests, config):
+def _apply_file_filters(old_requests, config, io):
"""Filters out entire files."""
- filters = _preprocess_file_filters(old_requests, config)
+ filters = _preprocess_file_filters(old_requests, config, io)
new_requests = []
for request in old_requests:
category = request.category
@@ -238,7 +261,7 @@ def _apply_file_filters(old_requests, config):
return new_requests
-def _preprocess_file_filters(requests, config):
+def _preprocess_file_filters(requests, config, io):
all_categories = set(
request.category
for request in requests
@@ -261,7 +284,7 @@ def _preprocess_file_filters(requests, config):
elif filter_json == "include":
pass # no-op
else:
- filters[category] = Filter.create_from_json(filter_json)
+ filters[category] = Filter.create_from_json(filter_json, io)
if "featureFilters" in json_data:
for category in json_data["featureFilters"]:
if category not in all_categories:
@@ -363,14 +386,14 @@ class ResourceFilterInfo(object):
i += 1
return new_requests
- @classmethod
- def _generate_resource_filter_txt(cls, rules):
+ @staticmethod
+ def _generate_resource_filter_txt(rules):
result = "# Caution: This file is automatically generated\n\n"
result += "\n".join(rules)
return result
-def _apply_resource_filters(all_requests, config):
+def _apply_resource_filters(all_requests, config, io):
"""Creates filters for looking within resource bundle files."""
json_data = config.filters_json_data
if "resourceFilters" not in json_data:
@@ -379,7 +402,7 @@ def _apply_resource_filters(all_requests, config):
collected = {}
for entry in json_data["resourceFilters"]:
if "files" in entry:
- file_filter = Filter.create_from_json(entry["files"])
+ file_filter = Filter.create_from_json(entry["files"], io)
else:
file_filter = InclusionFilter()
for category in entry["categories"]:
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration_schema.json b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration_schema.json
index 2b7ff998999..3aed41a3341 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration_schema.json
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration_schema.json
@@ -90,7 +90,7 @@
{
"properties": {
"filterType": {
- "$ref": "#/definitions/blacklistWhitelistFilterTypes"
+ "$ref": "#/definitions/includeExcludeFilterTypes"
},
"whitelist": { "$ref": "#/definitions/stringList" }
},
@@ -100,7 +100,7 @@
{
"properties": {
"filterType": {
- "$ref": "#/definitions/blacklistWhitelistFilterTypes"
+ "$ref": "#/definitions/includeExcludeFilterTypes"
},
"blacklist": { "$ref": "#/definitions/stringList" }
},
@@ -110,6 +110,26 @@
{
"properties": {
"filterType": {
+ "$ref": "#/definitions/includeExcludeFilterTypes"
+ },
+ "includelist": { "$ref": "#/definitions/stringList" }
+ },
+ "required": ["includelist"],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "filterType": {
+ "$ref": "#/definitions/includeExcludeFilterTypes"
+ },
+ "excludelist": { "$ref": "#/definitions/stringList" }
+ },
+ "required": ["excludelist"],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "filterType": {
"type": "string",
"enum": ["exclude"]
}
@@ -138,6 +158,23 @@
"properties": {
"filterType": {
"type": "string",
+ "enum": ["locale"]
+ },
+ "includeChildren": {
+ "type": "boolean"
+ },
+ "includeScripts": {
+ "type": "boolean"
+ },
+ "includelist": { "$ref": "#/definitions/stringList" }
+ },
+ "required": ["filterType", "includelist"],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "filterType": {
+ "type": "string",
"enum": ["union"]
},
"unionOf": {
@@ -150,7 +187,7 @@
}
]
},
- "blacklistWhitelistFilterTypes": {
+ "includeExcludeFilterTypes": {
"type": "string",
"enum": [
"language",
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/renderers/common_exec.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/renderers/common_exec.py
index 838b121afe5..91c12fdcf62 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/renderers/common_exec.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/renderers/common_exec.py
@@ -1,6 +1,10 @@
# Copyright (C) 2018 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
+# Python 2/3 Compatibility (ICU-20299)
+# TODO(ICU-20301): Remove this.
+from __future__ import print_function
+
from . import *
from .. import *
from .. import utils
@@ -120,12 +124,15 @@ def run_shell_command(command_line, platform, verbose):
# If the command line length on Windows exceeds the absolute maximum that CMD supports (8191), then
# we temporarily switch over to use PowerShell for the command, and then switch back to CMD.
# We don't want to use PowerShell for everything though, as it tends to be slower.
- if (platform == "windows") and (len(command_line) > 8190):
- if verbose:
- print("Command length exceeds the max length for CMD on Windows, using PowerShell instead.")
+ if (platform == "windows"):
previous_comspec = os.environ["COMSPEC"]
- os.environ["COMSPEC"] = 'powershell'
- changed_windows_comspec = True
+ # Add 7 to the length for the argument /c with quotes.
+ # For example: C:\WINDOWS\system32\cmd.exe /c "<command_line>"
+ if ((len(previous_comspec) + len(command_line) + 7) > 8190):
+ if verbose:
+ print("Command length exceeds the max length for CMD on Windows, using PowerShell instead.")
+ os.environ["COMSPEC"] = 'powershell'
+ changed_windows_comspec = True
if verbose:
print("Running: %s" % command_line)
returncode = subprocess.call(
@@ -143,4 +150,6 @@ def run_shell_command(command_line, platform, verbose):
)
if changed_windows_comspec:
os.environ["COMSPEC"] = previous_comspec
+ if returncode != 0:
+ print("Command failed: %s" % command_line, file=sys.stderr)
return returncode
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/filtration_test.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/filtration_test.py
index 5687006c42d..416223bd7e3 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/filtration_test.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/filtration_test.py
@@ -1,13 +1,19 @@
# Copyright (C) 2018 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
+import io as pyio
+import json
+import os
import unittest
from .. import InFile
+from ..comment_stripper import CommentStripper
from ..filtration import Filter
EXAMPLE_FILE_STEMS = [
"af_NA",
+ "af_VARIANT",
+ "af_ZA_VARIANT",
"af_ZA",
"af",
"ar",
@@ -33,6 +39,7 @@ EXAMPLE_FILE_STEMS = [
"sr_Cyrl",
"sr_Latn_BA",
"sr_Latn_CS",
+ "sr_Latn_ME_VARIANT",
"sr_Latn_ME",
"sr_Latn",
"sr_ME",
@@ -43,6 +50,7 @@ EXAMPLE_FILE_STEMS = [
"vai_Vaii_LR",
"vai_Vaii",
"vai",
+ "yue",
"zh_CN",
"zh_Hans_CN",
"zh_Hans_HK",
@@ -60,12 +68,29 @@ EXAMPLE_FILE_STEMS = [
"zh"
]
+
+class TestIO(object):
+ def __init__(self):
+ pass
+
+ def read_locale_deps(self, tree):
+ if tree not in ("brkitr", "locales", "rbnf"):
+ return None
+ with pyio.open(os.path.join(
+ os.path.dirname(__file__),
+ "sample_data",
+ tree,
+ "LOCALE_DEPS.json"
+ ), "r", encoding="utf-8-sig") as f:
+ return json.load(CommentStripper(f))
+
+
class FiltrationTest(unittest.TestCase):
def test_exclude(self):
self._check_filter(Filter.create_from_json({
"filterType": "exclude"
- }), [
+ }, TestIO()), [
])
def test_default_whitelist(self):
@@ -74,7 +99,7 @@ class FiltrationTest(unittest.TestCase):
"ars",
"zh_Hans"
]
- }), [
+ }, TestIO()), [
"ars",
"zh_Hans"
])
@@ -88,7 +113,7 @@ class FiltrationTest(unittest.TestCase):
"ars",
"zh_Hans"
]
- }), expected_matches)
+ }, TestIO()), expected_matches)
def test_language_whitelist(self):
self._check_filter(Filter.create_from_json({
@@ -97,9 +122,11 @@ class FiltrationTest(unittest.TestCase):
"af",
"bs"
]
- }), [
+ }, TestIO()), [
"root",
"af_NA",
+ "af_VARIANT",
+ "af_ZA_VARIANT",
"af_ZA",
"af",
"bs_BA",
@@ -113,6 +140,8 @@ class FiltrationTest(unittest.TestCase):
def test_language_blacklist(self):
expected_matches = set(EXAMPLE_FILE_STEMS)
expected_matches.remove("af_NA")
+ expected_matches.remove("af_VARIANT")
+ expected_matches.remove("af_ZA_VARIANT")
expected_matches.remove("af_ZA")
expected_matches.remove("af")
self._check_filter(Filter.create_from_json({
@@ -120,7 +149,7 @@ class FiltrationTest(unittest.TestCase):
"blacklist": [
"af"
]
- }), expected_matches)
+ }, TestIO()), expected_matches)
def test_regex_whitelist(self):
self._check_filter(Filter.create_from_json({
@@ -129,7 +158,7 @@ class FiltrationTest(unittest.TestCase):
r"^ar.*$",
r"^zh$"
]
- }), [
+ }, TestIO()), [
"ar",
"ar_SA",
"ars",
@@ -148,7 +177,7 @@ class FiltrationTest(unittest.TestCase):
r"^ar.*$",
r"^zh$"
]
- }), expected_matches)
+ }, TestIO()), expected_matches)
def test_locale_basic(self):
self._check_filter(Filter.create_from_json({
@@ -164,7 +193,7 @@ class FiltrationTest(unittest.TestCase):
"vai_Latn", # Language with non-default script
"zh_Hans" # Language with default script
]
- }), [
+ }, TestIO()), [
"root",
# bs: should include the full dependency tree of bs_BA
"bs_BA",
@@ -210,7 +239,7 @@ class FiltrationTest(unittest.TestCase):
"vai_Latn",
"zh_Hans"
]
- }), [
+ }, TestIO()), [
"root",
"bs_BA",
"bs_Latn_BA",
@@ -238,7 +267,7 @@ class FiltrationTest(unittest.TestCase):
"vai_Latn",
"zh_Hans"
]
- }), [
+ }, TestIO()), [
"root",
# bs: includeScripts only works for language-only (without region)
"bs_BA",
@@ -259,6 +288,7 @@ class FiltrationTest(unittest.TestCase):
"sr_Cyrl",
"sr_Latn_BA",
"sr_Latn_CS",
+ "sr_Latn_ME_VARIANT",
"sr_Latn_ME",
"sr_Latn",
"sr_ME",
@@ -290,7 +320,7 @@ class FiltrationTest(unittest.TestCase):
"vai_Latn",
"zh_Hans"
]
- }), [
+ }, TestIO()), [
"root",
# bs: includeScripts only works for language-only (without region)
"bs_BA",
@@ -331,7 +361,7 @@ class FiltrationTest(unittest.TestCase):
]
}
]
- }), [
+ }, TestIO()), [
"ars",
"zh_Hans",
"bs_BA",
@@ -343,9 +373,47 @@ class FiltrationTest(unittest.TestCase):
"zh"
])
- def _check_filter(self, filter, expected_matches):
+ def test_hk_deps_normal(self):
+ self._check_filter(Filter.create_from_json({
+ "filterType": "locale",
+ "whitelist": [
+ "zh_HK"
+ ]
+ }, TestIO()), [
+ "root",
+ "zh_Hant",
+ "zh_Hant_HK",
+ "zh_HK",
+ ])
+
+ def test_hk_deps_rbnf(self):
+ self._check_filter(Filter.create_from_json({
+ "filterType": "locale",
+ "whitelist": [
+ "zh_HK"
+ ]
+ }, TestIO()), [
+ "root",
+ "yue",
+ "zh_Hant_HK",
+ "zh_HK",
+ ], "rbnf")
+
+ def test_no_alias_parent_structure(self):
+ self._check_filter(Filter.create_from_json({
+ "filterType": "locale",
+ "whitelist": [
+ "zh_HK"
+ ]
+ }, TestIO()), [
+ "root",
+ "zh_HK",
+ "zh",
+ ], "brkitr")
+
+ def _check_filter(self, filter, expected_matches, tree="locales"):
for file_stem in EXAMPLE_FILE_STEMS:
- is_match = filter.match(InFile("locales/%s.txt" % file_stem))
+ is_match = filter.match(InFile("%s/%s.txt" % (tree, file_stem)))
expected_match = file_stem in expected_matches
self.assertEqual(is_match, expected_match, file_stem)
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/brkitr/LOCALE_DEPS.json b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/brkitr/LOCALE_DEPS.json
new file mode 100644
index 00000000000..674db09278f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/brkitr/LOCALE_DEPS.json
@@ -0,0 +1,10 @@
+// © 2019 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+//////////////////////////////////////////////////////////////
+// This is a sample LOCALE_DEPS.json file for testing only. //
+//////////////////////////////////////////////////////////////
+
+{
+ "cldrVersion": "36.1"
+}
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/locale_dependencies.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/locales/LOCALE_DEPS.json
index 1f8670d6bea..1456ea0d9ac 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/locale_dependencies.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/locales/LOCALE_DEPS.json
@@ -1,9 +1,12 @@
-# -*- coding: utf-8 -*-
-# © 2019 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+// © 2019 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
-data = {
- "cldrVersion": "36",
+//////////////////////////////////////////////////////////////
+// This is a sample LOCALE_DEPS.json file for testing only. //
+//////////////////////////////////////////////////////////////
+
+{
+ "cldrVersion": "36.1",
"aliases": {
"ars": "ar_SA",
"az_AZ": "az_Latn_AZ",
@@ -19,9 +22,9 @@ data = {
"iw": "he",
"iw_IL": "he_IL",
"mo": "ro",
+ "no": "nb",
"no_NO": "nb_NO",
"no_NO_NY": "nn_NO",
- "no": "nb",
"pa_IN": "pa_Guru_IN",
"pa_PK": "pa_Arab_PK",
"sh": "sr_Latn",
@@ -31,14 +34,14 @@ data = {
"shi_MA": "shi_Tfng_MA",
"sr_BA": "sr_Cyrl_BA",
"sr_CS": "sr_Cyrl_RS",
+ "sr_Cyrl_CS": "sr_Cyrl_RS",
+ "sr_Cyrl_YU": "sr_Cyrl_RS",
+ "sr_Latn_CS": "sr_Latn_RS",
+ "sr_Latn_YU": "sr_Latn_RS",
"sr_ME": "sr_Latn_ME",
"sr_RS": "sr_Cyrl_RS",
"sr_XK": "sr_Cyrl_XK",
"sr_YU": "sr_Cyrl_RS",
- "sr_Cyrl_YU": "sr_Cyrl_RS",
- "sr_Cyrl_CS": "sr_Cyrl_RS",
- "sr_Latn_YU": "sr_Latn_RS",
- "sr_Latn_CS": "sr_Latn_RS",
"tl": "fil",
"tl_PH": "fil_PH",
"uz_AF": "uz_Arab_AF",
@@ -53,172 +56,142 @@ data = {
"zh_TW": "zh_Hant_TW"
},
"parents": {
- "ff_Adlm": "root",
+ "az_Cyrl": "root",
+ "bs_Cyrl": "root",
+ "en_150": "en_001",
+ "en_AG": "en_001",
+ "en_AI": "en_001",
+ "en_AT": "en_150",
+ "en_AU": "en_001",
+ "en_BB": "en_001",
+ "en_BE": "en_150",
+ "en_BM": "en_001",
+ "en_BS": "en_001",
+ "en_BW": "en_001",
+ "en_BZ": "en_001",
+ "en_CA": "en_001",
+ "en_CC": "en_001",
+ "en_CH": "en_150",
+ "en_CK": "en_001",
"en_CM": "en_001",
- "so_Arab": "root",
- "en_KY": "en_001",
- "en_TC": "en_001",
- "yue_Hans": "root",
"en_CX": "en_001",
- "es_EC": "es_419",
- "es_US": "es_419",
- "byn_Latn": "root",
"en_CY": "en_001",
- "en_LC": "en_001",
- "en_TK": "en_001",
- "tg_Arab": "root",
- "es_UY": "es_419",
- "ky_Latn": "root",
- "en_TO": "en_001",
- "en_TT": "en_001",
"en_DE": "en_150",
- "es_MX": "es_419",
- "en_TV": "en_001",
"en_DG": "en_001",
- "pt_ST": "pt_PT",
+ "en_DK": "en_150",
"en_DM": "en_001",
+ "en_ER": "en_001",
+ "en_FI": "en_150",
+ "en_FJ": "en_001",
+ "en_FK": "en_001",
+ "en_FM": "en_001",
+ "en_GB": "en_001",
+ "en_GD": "en_001",
+ "en_GG": "en_001",
+ "en_GH": "en_001",
+ "en_GI": "en_001",
+ "en_GM": "en_001",
+ "en_GY": "en_001",
+ "en_HK": "en_001",
+ "en_IE": "en_001",
+ "en_IL": "en_001",
+ "en_IM": "en_001",
+ "en_IN": "en_001",
+ "en_IO": "en_001",
+ "en_JE": "en_001",
+ "en_JM": "en_001",
+ "en_KE": "en_001",
+ "en_KI": "en_001",
+ "en_KN": "en_001",
+ "en_KY": "en_001",
+ "en_LC": "en_001",
"en_LR": "en_001",
- "en_TZ": "en_001",
"en_LS": "en_001",
- "en_DK": "en_150",
- "blt_Latn": "root",
- "es_VE": "es_419",
- "es_NI": "es_419",
- "sd_Khoj": "root",
- "pt_AO": "pt_PT",
- "en_UG": "en_001",
- "yo_Arab": "root",
- "dje_Arab": "root",
"en_MG": "en_001",
"en_MO": "en_001",
- "en_MU": "en_001",
"en_MS": "en_001",
"en_MT": "en_001",
- "shi_Latn": "root",
- "es_BR": "es_419",
- "en_AU": "en_001",
- "en_ZM": "en_001",
- "en_AT": "en_150",
- "es_BZ": "es_419",
- "uz_Arab": "root",
- "az_Cyrl": "root",
- "es_SV": "es_419",
- "en_ZW": "en_001",
- "en_JE": "en_001",
- "en_BB": "en_001",
- "sd_Deva": "root",
- "pa_Arab": "root",
+ "en_MU": "en_001",
+ "en_MW": "en_001",
+ "en_MY": "en_001",
+ "en_NA": "en_001",
+ "en_NF": "en_001",
+ "en_NG": "en_001",
+ "en_NL": "en_150",
+ "en_NR": "en_001",
+ "en_NU": "en_001",
+ "en_NZ": "en_001",
+ "en_PG": "en_001",
+ "en_PH": "en_001",
+ "en_PK": "en_001",
+ "en_PN": "en_001",
+ "en_PW": "en_001",
"en_RW": "en_001",
- "es_CO": "es_419",
- "en_JM": "en_001",
- "en_BE": "en_150",
- "dyo_Arab": "root",
- "es_CL": "es_419",
- "en_BM": "en_001",
+ "en_SB": "en_001",
"en_SC": "en_001",
- "es_CR": "es_419",
- "en_150": "en_001",
- "en_BS": "en_001",
"en_SD": "en_001",
- "pt_GQ": "pt_PT",
- "en_SB": "en_001",
- "es_CU": "es_419",
+ "en_SE": "en_150",
"en_SG": "en_001",
- "uz_Cyrl": "root",
- "en_BW": "en_001",
"en_SH": "en_001",
- "en_SE": "en_150",
- "pt_GW": "pt_PT",
- "ky_Arab": "root",
- "en_BZ": "en_001",
- "en_SL": "en_001",
"en_SI": "en_150",
- "ff_Arab": "root",
- "en_KE": "en_001",
- "bm_Nkoo": "root",
- "en_CC": "en_001",
+ "en_SL": "en_001",
"en_SS": "en_001",
- "iu_Latn": "root",
- "en_CA": "en_001",
- "en_KI": "en_001",
- "es_DO": "es_419",
"en_SX": "en_001",
- "en_CH": "en_150",
- "en_KN": "en_001",
- "en_CK": "en_001",
- "ml_Arab": "root",
"en_SZ": "en_001",
- "pt_FR": "pt_PT",
- "ug_Cyrl": "root",
- "en_GY": "en_001",
- "en_PH": "en_001",
- "en_PG": "en_001",
- "en_PK": "en_001",
- "cu_Glag": "root",
- "en_PN": "en_001",
- "kk_Arab": "root",
- "en_HK": "en_001",
- "zh_Hant": "root",
- "en_PW": "en_001",
- "es_AR": "es_419",
- "pt_MZ": "pt_PT",
- "sd_Sind": "root",
- "en_Shaw": "root",
- "en_IE": "en_001",
- "ms_Arab": "root",
- "en_IM": "en_001",
- "en_IN": "en_001",
- "es_BO": "es_419",
- "en_IL": "en_001",
- "en_AI": "en_001",
- "az_Arab": "root",
- "en_AG": "en_001",
- "en_IO": "en_001",
- "en_ZA": "en_001",
- "en_MY": "en_001",
- "en_ER": "en_001",
+ "en_TC": "en_001",
+ "en_TK": "en_001",
+ "en_TO": "en_001",
+ "en_TT": "en_001",
+ "en_TV": "en_001",
+ "en_TZ": "en_001",
+ "en_UG": "en_001",
"en_VC": "en_001",
- "mn_Mong": "root",
- "vai_Latn": "root",
- "en_MW": "en_001",
- "pt_LU": "pt_PT",
- "bs_Cyrl": "root",
"en_VG": "en_001",
- "en_NA": "en_001",
- "en_NF": "en_001",
- "en_NG": "en_001",
- "ha_Arab": "root",
- "en_NL": "en_150",
- "zh_Hant_MO": "zh_Hant_HK",
"en_VU": "en_001",
- "en_FJ": "en_001",
- "en_NR": "en_001",
- "en_FK": "en_001",
+ "en_WS": "en_001",
+ "en_ZA": "en_001",
+ "en_ZM": "en_001",
+ "en_ZW": "en_001",
+ "es_AR": "es_419",
+ "es_BO": "es_419",
+ "es_BR": "es_419",
+ "es_BZ": "es_419",
+ "es_CL": "es_419",
+ "es_CO": "es_419",
+ "es_CR": "es_419",
+ "es_CU": "es_419",
+ "es_DO": "es_419",
+ "es_EC": "es_419",
"es_GT": "es_419",
- "en_FI": "en_150",
- "ku_Arab": "root",
- "pt_MO": "pt_PT",
- "en_FM": "en_001",
- "en_NU": "en_001",
- "en_NZ": "en_001",
- "pt_CH": "pt_PT",
- "en_Dsrt": "root",
- "es_PE": "es_419",
+ "es_HN": "es_419",
+ "es_MX": "es_419",
+ "es_NI": "es_419",
"es_PA": "es_419",
+ "es_PE": "es_419",
+ "es_PR": "es_419",
+ "es_PY": "es_419",
+ "es_SV": "es_419",
+ "es_US": "es_419",
+ "es_UY": "es_419",
+ "es_VE": "es_419",
+ "pa_Arab": "root",
+ "pt_AO": "pt_PT",
+ "pt_CH": "pt_PT",
"pt_CV": "pt_PT",
- "wo_Arab": "root",
- "en_WS": "en_001",
- "en_GD": "en_001",
- "en_GB": "en_001",
- "es_HN": "es_419",
+ "pt_GQ": "pt_PT",
+ "pt_GW": "pt_PT",
+ "pt_LU": "pt_PT",
+ "pt_MO": "pt_PT",
+ "pt_MZ": "pt_PT",
+ "pt_ST": "pt_PT",
"pt_TL": "pt_PT",
- "en_GG": "en_001",
- "en_GH": "en_001",
- "es_PR": "es_419",
- "sw_Arab": "root",
- "en_GI": "en_001",
+ "shi_Latn": "root",
"sr_Latn": "root",
- "en_GM": "en_001",
- "es_PY": "es_419"
+ "uz_Arab": "root",
+ "uz_Cyrl": "root",
+ "vai_Latn": "root",
+ "yue_Hans": "root",
+ "zh_Hant": "root",
+ "zh_Hant_MO": "zh_Hant_HK"
}
}
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/rbnf/LOCALE_DEPS.json b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/rbnf/LOCALE_DEPS.json
new file mode 100644
index 00000000000..c6ec208add2
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/test/sample_data/rbnf/LOCALE_DEPS.json
@@ -0,0 +1,36 @@
+// © 2019 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+//////////////////////////////////////////////////////////////
+// This is a sample LOCALE_DEPS.json file for testing only. //
+//////////////////////////////////////////////////////////////
+
+{
+ "cldrVersion": "36.1",
+ "aliases": {
+ "ars": "ar_SA",
+ "in": "id",
+ "iw": "he",
+ "no": "nb",
+ "sh": "sr_Latn",
+ "zh_HK": "zh_Hant_HK",
+ "zh_Hant_HK": "yue",
+ "zh_MO": "zh_Hant_MO",
+ "zh_TW": "zh_Hant_TW"
+ },
+ "parents": {
+ "en_IN": "en_001",
+ "es_DO": "es_419",
+ "es_GT": "es_419",
+ "es_HN": "es_419",
+ "es_MX": "es_419",
+ "es_NI": "es_419",
+ "es_PA": "es_419",
+ "es_PR": "es_419",
+ "es_SV": "es_419",
+ "es_US": "es_419",
+ "sr_Latn": "root",
+ "yue_Hans": "root",
+ "zh_Hant": "root"
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/utils.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/utils.py
index c5965906c6b..3d53d18faeb 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/utils.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/utils.py
@@ -52,6 +52,19 @@ def get_local_dirname(dirname):
exit(1)
+ALL_TREES = [
+ "locales",
+ "curr",
+ "lang",
+ "region",
+ "zone",
+ "unit",
+ "coll",
+ "brkitr",
+ "rbnf",
+]
+
+
def concat_dicts(*dicts):
# There is not a super great way to do this in Python:
new_dict = {}
diff --git a/Build/source/libs/icu/icu-src/source/runConfigureICU b/Build/source/libs/icu/icu-src/source/runConfigureICU
index 77df3a06862..4b3d24a3826 100755
--- a/Build/source/libs/icu/icu-src/source/runConfigureICU
+++ b/Build/source/libs/icu/icu-src/source/runConfigureICU
@@ -36,7 +36,7 @@ the runConfigureICU command:
The following names can be supplied as the argument for platform:
- AIX Use the IBM Visual Age xlc_r/xlC_r compilers on AIX
+ AIX Use the IBM XL xlclang/xlclang compilers on AIX
AIX/GCC Use the GNU gcc/g++ compilers on AIX
Cygwin Use the GNU gcc/g++ compilers on Cygwin
Cygwin/MSVC Use the Microsoft Visual C++ compiler on Cygwin
@@ -49,7 +49,7 @@ The following names can be supplied as the argument for platform:
Linux/gcc Use the GNU gcc/g++ compilers on Linux
Linux/ECC Use the Intel ECC compiler on Linux
Linux/ICC Use the Intel ICC compiler on Linux
- Linux/VA Use the IBM Visual Age compiler on Power PC Linux
+ Linux/VA Use the IBM XL compiler on Power PC Linux
MacOSX Use the default compilers on MacOS X (Darwin)
MacOSX/GCC Use the GNU gcc/g++ compilers on MacOSX (Darwin)
MinGW Use the GNU gcc/g++ compilers on MinGW
@@ -134,17 +134,17 @@ fi
case $platform in
AIX)
THE_OS=AIX
- THE_COMP="xlC_r"
- CC=`which xlc_r`; export CC
+ THE_COMP="xlclang"
+ CC=`which xlclang`; export CC
if [ ! -x $CC ]; then
- echo "ERROR: xlc_r was not found, please check the PATH to make sure it is correct."; exit 1
+ echo "ERROR: xlclang was not found, please check the PATH to make sure it is correct."; exit 1
fi
- CXX=`which xlC_r`; export CXX
+ CXX=`which xlclang++`; export CXX
if [ ! -x $CXX ]; then
- echo "ERROR: xlC_r was not found, please check the PATH to make sure it is correct."; exit 1
+ echo "ERROR: xlclang++ was not found, please check the PATH to make sure it is correct."; exit 1
fi
- RELEASE_CFLAGS="-O2 -qmaxmem=-1"
- RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
+ RELEASE_CFLAGS="-O3"
+ RELEASE_CXXFLAGS="-O3"
;;
AIX/GCC)
THE_OS=AIX
@@ -228,11 +228,11 @@ case $platform in
;;
Linux/VA)
THE_OS="Linux"
- THE_COMP="IBM Visual Age C++ Compiler"
- CC=`which xlc_r`; export CC
- CXX=`which xlC_r`; export CXX
- RELEASE_CFLAGS="-O2 -qmaxmem=-1"
- RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
+ THE_COMP="IBM XL C++ Compiler"
+ CC=`which xlclang`; export CC
+ CXX=`which xlclang++`; export CXX
+ RELEASE_CFLAGS="-O3"
+ RELEASE_CXXFLAGS="-O3"
;;
Linux/gcc)
THE_OS="Linux"
diff --git a/Build/source/libs/icu/icu-src/source/samples/Makefile.in b/Build/source/libs/icu/icu-src/source/samples/Makefile.in
index 211b2a5d5ae..374a70f3525 100644
--- a/Build/source/libs/icu/icu-src/source/samples/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/samples/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU samples
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 1999-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/all/samplecheck.bat b/Build/source/libs/icu/icu-src/source/samples/all/samplecheck.bat
index c85a6c655dd..ab69cb22639 100755
--- a/Build/source/libs/icu/icu-src/source/samples/all/samplecheck.bat
+++ b/Build/source/libs/icu/icu-src/source/samples/all/samplecheck.bat
@@ -34,6 +34,10 @@ if not exist "%ICU_BINDIR%" (
goto :eof
)
+REM Change the codepage to UTF-8 in order to better handle non-ASCII characters from the samples.
+echo Setting codepage to UTF-8
+chcp 65001
+
echo Testing ICU samples in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL%
set PATH=%ICU_BINDIR%;%PATH%
pushd %ICU_BINDIR%
diff --git a/Build/source/libs/icu/icu-src/source/samples/break/Makefile b/Build/source/libs/icu/icu-src/source/samples/break/Makefile
index 4cb9c2ef2b8..4fda8820bc9 100644
--- a/Build/source/libs/icu/icu-src/source/samples/break/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/break/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/break/break.cpp b/Build/source/libs/icu/icu-src/source/samples/break/break.cpp
index 8b4ad613859..8678441220d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/break/break.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/break/break.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj b/Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj
index 5cf80d76184..d9a51001d2a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/break/readme.txt b/Build/source/libs/icu/icu-src/source/samples/break/readme.txt
index 4751ae52b67..debedd1e7ca 100644
--- a/Build/source/libs/icu/icu-src/source/samples/break/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/break/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
break: Boundary Analysis
diff --git a/Build/source/libs/icu/icu-src/source/samples/break/ubreak.c b/Build/source/libs/icu/icu-src/source/samples/break/ubreak.c
index 593ea82c632..10d7d0b4902 100644
--- a/Build/source/libs/icu/icu-src/source/samples/break/ubreak.c
+++ b/Build/source/libs/icu/icu-src/source/samples/break/ubreak.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/cal/Makefile.in b/Build/source/libs/icu/icu-src/source/samples/cal/Makefile.in
index 2fa058dd54b..f696350693e 100644
--- a/Build/source/libs/icu/icu-src/source/samples/cal/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/samples/cal/Makefile.in
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Makefile.in for ICU - samples/cal
## Copyright (c) 1999-2011, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/samples/cal/cal.c b/Build/source/libs/icu/icu-src/source/samples/cal/cal.c
index bb096bf16d9..95fe48ff837 100644
--- a/Build/source/libs/icu/icu-src/source/samples/cal/cal.c
+++ b/Build/source/libs/icu/icu-src/source/samples/cal/cal.c
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
**********************************************************************
* Copyright (C) 1998-2012, International Business Machines Corporation
diff --git a/Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj b/Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj
index 00c8ef65292..51f721b6080 100644
--- a/Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/cal/readme.txt b/Build/source/libs/icu/icu-src/source/samples/cal/readme.txt
index f32eeb0f60a..c9a73aa71bc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/cal/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/cal/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
icucal: a sample program which displays the calendar.
diff --git a/Build/source/libs/icu/icu-src/source/samples/cal/uprint.c b/Build/source/libs/icu/icu-src/source/samples/cal/uprint.c
index 8fce8834317..59c5d3b830c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/cal/uprint.c
+++ b/Build/source/libs/icu/icu-src/source/samples/cal/uprint.c
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
**********************************************************************
* Copyright (C) 1998-2001, International Business Machines Corporation
@@ -18,6 +18,7 @@
*/
#include "uprint.h"
+#include <stdbool.h>
#include "unicode/ucnv.h"
#include "unicode/ustring.h"
@@ -61,7 +62,7 @@ uprint(const UChar *s,
/* perform the conversion */
ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize,
&mySource, mySourceEnd, NULL,
- TRUE, status);
+ true, status);
/* Write the converted data to the FILE* */
fwrite(buf, sizeof(char), myTarget - buf, f);
diff --git a/Build/source/libs/icu/icu-src/source/samples/cal/uprint.h b/Build/source/libs/icu/icu-src/source/samples/cal/uprint.h
index cbbcefb1238..49db38b724a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/cal/uprint.h
+++ b/Build/source/libs/icu/icu-src/source/samples/cal/uprint.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
**********************************************************************
* Copyright (C) 1998-2004, International Business Machines Corporation
diff --git a/Build/source/libs/icu/icu-src/source/samples/case/Makefile b/Build/source/libs/icu/icu-src/source/samples/case/Makefile
index 3fa0a5b6014..171c922ec9b 100644
--- a/Build/source/libs/icu/icu-src/source/samples/case/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/case/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2003 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/case/case.cpp b/Build/source/libs/icu/icu-src/source/samples/case/case.cpp
index c0f72166402..0f8baff2f16 100644
--- a/Build/source/libs/icu/icu-src/source/samples/case/case.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/case/case.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj b/Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj
index 7620fa5affc..38be307d661 100644
--- a/Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/case/readme.txt b/Build/source/libs/icu/icu-src/source/samples/case/readme.txt
index b39949c4149..df3cb5f973c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/case/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/case/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2003-2005, International Business Machines Corporation and others. All Rights Reserved.
case: case mapping
diff --git a/Build/source/libs/icu/icu-src/source/samples/case/ucase.c b/Build/source/libs/icu/icu-src/source/samples/case/ucase.c
index 2dd272aea25..439c3c5b684 100644
--- a/Build/source/libs/icu/icu-src/source/samples/case/ucase.c
+++ b/Build/source/libs/icu/icu-src/source/samples/case/ucase.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/citer/Makefile b/Build/source/libs/icu/icu-src/source/samples/citer/Makefile
index 638d8147dba..14b87e08000 100644
--- a/Build/source/libs/icu/icu-src/source/samples/citer/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/citer/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2003-2005 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp b/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp
index 4d5a3bbe837..958fe42587e 100644
--- a/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj b/Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj
index c6bf105cd85..c9211442449 100644
--- a/Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/citer/readme.txt b/Build/source/libs/icu/icu-src/source/samples/citer/readme.txt
index c805c1e0992..59ef8b5826d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/citer/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/citer/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2003-2010, International Business Machines Corporation and others. All Rights Reserved.
citer: Character Iteration
diff --git a/Build/source/libs/icu/icu-src/source/samples/coll/Makefile b/Build/source/libs/icu/icu-src/source/samples/coll/Makefile
index 7a43cfc075d..84b5ff2264c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/coll/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/coll/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp b/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp
index afa57d0cbc1..d8d067a8520 100644
--- a/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp
@@ -1,7 +1,7 @@
/*************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*************************************************************************
*************************************************************************
@@ -47,13 +47,13 @@ const char gHelpString[] =
*/
char * opt_locale = "en_US";
char * opt_rules = 0;
-UBool opt_help = FALSE;
-UBool opt_norm = FALSE;
-UBool opt_french = FALSE;
-UBool opt_shifted = FALSE;
-UBool opt_lower = FALSE;
-UBool opt_upper = FALSE;
-UBool opt_case = FALSE;
+UBool opt_help = false;
+UBool opt_norm = false;
+UBool opt_french = false;
+UBool opt_shifted = false;
+UBool opt_lower = false;
+UBool opt_upper = false;
+UBool opt_case = false;
int opt_level = 0;
char * opt_source = "abc";
char * opt_target = "abd";
@@ -97,14 +97,14 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
if (strcmp(pOpt->name, pArgName) == 0) {
switch (pOpt->type) {
case OptSpec::FLAG:
- *(UBool *)(pOpt->pVar) = TRUE;
+ *(UBool *)(pOpt->pVar) = true;
break;
case OptSpec::STRING:
argNum ++;
if (argNum >= argc) {
fprintf(stderr, "value expected for \"%s\" option.\n",
pOpt->name);
- return FALSE;
+ return false;
}
*(const char **)(pOpt->pVar) = argv[argNum];
break;
@@ -113,7 +113,7 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
if (argNum >= argc) {
fprintf(stderr, "value expected for \"%s\" option.\n",
pOpt->name);
- return FALSE;
+ return false;
}
char *endp;
int i = strtol(argv[argNum], &endp, 0);
@@ -121,7 +121,7 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
fprintf(stderr,
"integer value expected for \"%s\" option.\n",
pOpt->name);
- return FALSE;
+ return false;
}
*(int *)(pOpt->pVar) = i;
}
@@ -131,10 +131,10 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
if (pOpt->name == 0)
{
fprintf(stderr, "Unrecognized option \"%s\"\n", pArgName);
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
/**
@@ -175,7 +175,7 @@ UBool processCollator()
}
if (U_FAILURE(status)) {
fprintf(stderr, "Collator creation failed.: %d\n", status);
- return FALSE;
+ return false;
}
if (status == U_USING_DEFAULT_WARNING) {
fprintf(stderr, "Warning, U_USING_DEFAULT_WARNING for %s\n",
@@ -228,14 +228,14 @@ UBool processCollator()
break;
default:
fprintf(stderr, "-level param must be between 1 and 5\n");
- return FALSE;
+ return false;
}
}
if (U_FAILURE(status)) {
fprintf(stderr, "Collator attribute setting failed.: %d\n", status);
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
/**
@@ -244,12 +244,12 @@ UBool processCollator()
*/
int main(int argc, const char** argv)
{
- if (processOptions(argc, argv, opts) != TRUE || opt_help) {
+ if (!static_cast<bool>(processOptions(argc, argv, opts)) || static_cast<bool>(opt_help)) {
printf(gHelpString);
return -1;
}
- if (processCollator() != TRUE) {
+ if (!static_cast<bool>(processCollator())) {
fprintf(stderr, "Error creating collator for comparison\n");
return -1;
}
diff --git a/Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj b/Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj
index a486491899a..fd49d1b8915 100644
--- a/Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/coll/readme.txt b/Build/source/libs/icu/icu-src/source/samples/coll/readme.txt
index 135632a6e5d..f98139a4cb7 100644
--- a/Build/source/libs/icu/icu-src/source/samples/coll/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/coll/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
coll: a sample program which compares 2 strings with a user-defined collator.
diff --git a/Build/source/libs/icu/icu-src/source/samples/csdet/Makefile b/Build/source/libs/icu/icu-src/source/samples/csdet/Makefile
index 045b8afef26..3b70a3a861c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/csdet/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/csdet/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2007 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c b/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c
index c8df79186a3..5b20dbfe3e9 100644
--- a/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c
+++ b/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c
@@ -1,7 +1,7 @@
/*
********************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
********************************************************************************
********************************************************************************
* Copyright (C) 2005-2006, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj b/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj
index 803a514f202..234a7b84e68 100644
--- a/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj
@@ -15,22 +15,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/csdet/readme.txt b/Build/source/libs/icu/icu-src/source/samples/csdet/readme.txt
index 61e7e6fdfa1..550dfe90460 100644
--- a/Build/source/libs/icu/icu-src/source/samples/csdet/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/csdet/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2001-2010 International Business Machines
Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/date/Makefile.in b/Build/source/libs/icu/icu-src/source/samples/date/Makefile.in
index 18264699b60..cbc020e76b4 100644
--- a/Build/source/libs/icu/icu-src/source/samples/date/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/samples/date/Makefile.in
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Makefile.in for ICU - samples/date
## Copyright (c) 1999-2012, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/samples/date/date.c b/Build/source/libs/icu/icu-src/source/samples/date/date.c
index 400fe2c9055..a8abb369b76 100644
--- a/Build/source/libs/icu/icu-src/source/samples/date/date.c
+++ b/Build/source/libs/icu/icu-src/source/samples/date/date.c
@@ -1,7 +1,7 @@
/*
*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
***********************************************************************
* Copyright (C) 1998-2012, International Business Machines
@@ -19,6 +19,7 @@
*******************************************************************************
*/
+#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -276,7 +277,7 @@ date(UDate when,
fmt = udat_open(style, style, locale, tz, -1,NULL,0, status);
if ( format != NULL ) {
charsToUCharsDefault(uFormat,sizeof(uFormat)/sizeof(uFormat[0]),format,-1,status);
- udat_applyPattern(fmt,FALSE,uFormat,-1);
+ udat_applyPattern(fmt,false,uFormat,-1);
}
len = udat_format(fmt, when, 0, len, 0, status);
if(*status == U_BUFFER_OVERFLOW_ERROR) {
@@ -331,7 +332,7 @@ static UDate getWhen(const char *millis, const char *seconds, const char *format
fmt = udat_open(style, style, locale, tz, -1,NULL,0, status);
if ( format != NULL ) {
charsToUCharsDefault(uFormat,sizeof(uFormat)/sizeof(uFormat[0]), format,-1,status);
- udat_applyPattern(fmt,FALSE,uFormat,-1);
+ udat_applyPattern(fmt,false,uFormat,-1);
}
charsToUCharsDefault(uParse,sizeof(uParse)/sizeof(uParse[0]), parse,-1,status);
diff --git a/Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj b/Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj
index d0308a301b4..3d20f9576ed 100644
--- a/Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/date/readme.txt b/Build/source/libs/icu/icu-src/source/samples/date/readme.txt
index d02a224f88f..72c46615e52 100644
--- a/Build/source/libs/icu/icu-src/source/samples/date/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/date/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
icudate: a sample program which displays the current date
diff --git a/Build/source/libs/icu/icu-src/source/samples/date/uprint.c b/Build/source/libs/icu/icu-src/source/samples/date/uprint.c
index b0ef9389fbb..f9015805ca5 100644
--- a/Build/source/libs/icu/icu-src/source/samples/date/uprint.c
+++ b/Build/source/libs/icu/icu-src/source/samples/date/uprint.c
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
**********************************************************************
* Copyright (C) 1998-2001, International Business Machines Corporation
@@ -19,6 +19,7 @@
#include "uprint.h"
+#include <stdbool.h>
#include "unicode/ucnv.h"
#include "unicode/ustring.h"
@@ -62,7 +63,7 @@ uprint(const UChar *s,
/* perform the conversion */
ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize,
&mySource, mySourceEnd, NULL,
- TRUE, status);
+ true, status);
/* Write the converted data to the FILE* */
fwrite(buf, sizeof(char), myTarget - buf, f);
diff --git a/Build/source/libs/icu/icu-src/source/samples/date/uprint.h b/Build/source/libs/icu/icu-src/source/samples/date/uprint.h
index 5f2fba61749..2f60ecbc090 100644
--- a/Build/source/libs/icu/icu-src/source/samples/date/uprint.h
+++ b/Build/source/libs/icu/icu-src/source/samples/date/uprint.h
@@ -1,7 +1,7 @@
/*
********************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
********************************************************************************
**********************************************************************
* Copyright (C) 1998-2004, International Business Machines Corporation
diff --git a/Build/source/libs/icu/icu-src/source/samples/datecal/Makefile b/Build/source/libs/icu/icu-src/source/samples/datecal/Makefile
index 796eb5ea749..013992b6642 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datecal/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/datecal/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2006 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp b/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp
index 1af3a699dd2..ba581b88d80 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c b/Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c
index 4a80bebacc4..b9ce3dece01 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c
+++ b/Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/Makefile b/Build/source/libs/icu/icu-src/source/samples/datefmt/Makefile
index 9556ed6ea4c..c9032a782f0 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/README.TXT b/Build/source/libs/icu/icu-src/source/samples/datefmt/README.TXT
index 3be6db204fb..2ec4782f783 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/README.TXT
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/README.TXT
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp
index 0c587868656..9bea9b2791f 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp
index 1afcfd62eaf..41253df06bd 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp
index ccce51603ea..775cecf4adc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp
index 39c095a605c..4aba5600d74 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj b/Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj
index e22dde62538..00dcd6d6700 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp b/Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp
index 9fb22e50530..b7c8a13aa60 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp
@@ -1,6 +1,6 @@
/*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp b/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp
index 240b405faec..f7c2ade95ee 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/datefmt/util.h b/Build/source/libs/icu/icu-src/source/samples/datefmt/util.h
index 2fd538b9ed7..27d6c806c1e 100644
--- a/Build/source/libs/icu/icu-src/source/samples/datefmt/util.h
+++ b/Build/source/libs/icu/icu-src/source/samples/datefmt/util.h
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/defs.mk b/Build/source/libs/icu/icu-src/source/samples/defs.mk
index 316f1d74e99..bda76fb66ff 100644
--- a/Build/source/libs/icu/icu-src/source/samples/defs.mk
+++ b/Build/source/libs/icu/icu-src/source/samples/defs.mk
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2002-2012 IBM, Inc. and others
# Sample code makefile definitions
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.GDI b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.GDI
index 29c8d6129d6..59c59989812 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.GDI
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.GDI
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (C) 2001-2010, International Business Machines
# Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.Gnome b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.Gnome
index cec06252c8c..ece82d74e54 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.Gnome
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.Gnome
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (C) 2001-2005, International Business Machines
# Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
index 1ca98df28eb..acfee82360c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2006, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h
index c3f518b6334..cdc8fd579cd 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2003, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp
index 7ca68b761cd..fcf9fe892fb 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp
@@ -1,7 +1,7 @@
/*
*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* Copyright (C) 2003 - 2008, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h b/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h
index f949c5a009f..e928b91512c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h
@@ -1,7 +1,7 @@
/*
*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
**********************************************************************
* Copyright (C) 2003-2008, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp
index 59448f05965..8bd688d1296 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h
index 36211d4bfd5..e0ab1e0e4a3 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h
@@ -3,7 +3,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp
index bdbfe30b6da..19213b22b5b 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2003, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h
index 0a66334b29e..2c07c230c11 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2003, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp
index a3289e45731..e314b8ae7fa 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h b/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h
index e3ae9570b07..c77d40bafa8 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h b/Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h
index 1b092a3eb65..a88bf5f8761 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp
index c330b6144c7..068f6f675c3 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h
index 7cabcb5ac1f..9d48bc39f88 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h
@@ -3,7 +3,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp
index 7895dd82d2f..d85f28b9742 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2006, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h
index 2a38a64af61..7fc166bb302 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h
@@ -1,7 +1,7 @@
/*
*******************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*******************************************************************************
******************************************************************************
* Copyright (C) 1998-2006, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp
index 35a416632bb..21eb6fb6d2f 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h
index 2f56e2a14a8..b11f5be69cb 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/LayoutSample.rc b/Build/source/libs/icu/icu-src/source/samples/layout/LayoutSample.rc
index dd50c58d096..9b4447134cc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/LayoutSample.rc
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/LayoutSample.rc
@@ -1,7 +1,7 @@
//Microsoft Developer Studio generated resource script.
//
// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
@@ -13,7 +13,7 @@
*******************************************************************************
*
* Copyright (C) 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/Makefile.in b/Build/source/libs/icu/icu-src/source/samples/layout/Makefile.in
index b242df29226..a8c4a244764 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/Makefile.in
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Makefile.in for ICU - samples/layout
## Copyright (c) 2001-2011, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h b/Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h
index 0399e71aa7b..42b7e602664 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp
index a87c65010d6..004b31b6edb 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h b/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
index 151d68230c4..06f2c1af013 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
@@ -2,7 +2,7 @@
* %W% %E%
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp
index 268145a8618..5b0686a07ec 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp
@@ -1,6 +1,6 @@
/*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* Copyright (C) 2003, International Business Machines
* Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/Surface.h b/Build/source/libs/icu/icu-src/source/samples/layout/Surface.h
index 9e255165d48..40a0c5d4bf2 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/Surface.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/Surface.h
@@ -1,6 +1,6 @@
/*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* Copyright (C) 2003, International Business Machines
* Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp
index 47a4386e165..a7caa01fec6 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2005, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h b/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h
index 4429f1c62bb..2d7c9cc2fe5 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h
@@ -1,7 +1,7 @@
/*
******************************************************************************
* © 2016 and later: Unicode, Inc. and others. *
- * License & terms of use: http://www.unicode.org/copyright.html#License *
+ * License & terms of use: http://www.unicode.org/copyright.html *
******************************************************************************
******************************************************************************
* Copyright (C) 1998-2001, International Business Machines Corporation and *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h b/Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h
index 2580410aea4..8939984afc3 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c b/Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c
index ff3d563e5a0..b591412bb66 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c
@@ -3,7 +3,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
****************************************************************************** *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/clayout.c b/Build/source/libs/icu/icu-src/source/samples/layout/clayout.c
index e129966b002..de8f118c108 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/clayout.c
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/clayout.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp
index 36d6335f095..d6f71ed7085 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
****************************************************************************** *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h b/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h
index 0abda50e5af..35fc2e0804c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h
@@ -2,7 +2,7 @@
******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
******************************************************************************
****************************************************************************** *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp
index b79f6ee8069..49ca8837f49 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h b/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h
index 8018d088ed6..7efe947a445 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp
index 906b143282c..2ee545706b4 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h b/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h
index 3413bae020e..13e434e1ace 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp
index 8f7c37d7f49..b5347377c29 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp
@@ -3,7 +3,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
****************************************************************************** *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h b/Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h
index 582bcc1a9a9..4bb6e6c0300 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp
index 009a055d480..7ad9ac29f81 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj b/Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj
index f6114bb57fa..31ac1d942ef 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp
index 190106f30a6..f3023011b10 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h b/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h
index 0f307fde037..822c1cfb924 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/pflow.c b/Build/source/libs/icu/icu-src/source/samples/layout/pflow.c
index 92d521ca6ee..c7fd290ade4 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/pflow.c
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/pflow.c
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/pflow.h b/Build/source/libs/icu/icu-src/source/samples/layout/pflow.h
index ec87131e0ee..d759a8f4247 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/pflow.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/pflow.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/readme.html b/Build/source/libs/icu/icu-src/source/samples/layout/readme.html
index 548cac4f6f4..32c89d8c07a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/readme.html
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/readme.html
@@ -6,7 +6,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
<meta name="COPYRIGHT" content=
"Copyright (C) 2016 and later: Unicode, Inc. and others.
- License &amp; terms of use: http://www.unicode.org/copyright.html#License
+ License &amp; terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2001-2010 IBM Corporation and others. All Rights Reserved." />
<meta name="Author" content="Eric Mader" />
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/resource.h b/Build/source/libs/icu/icu-src/source/samples/layout/resource.h
index 77374baa4da..f4fdeed67ba 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/resource.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/resource.h
@@ -1,7 +1,7 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// Corporation and others. All Rights Reserved.
// Copyright (c) 2001-2003 International Business Machines
// Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp
index a64ba9adb96..b48357e0d97 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h b/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h
index ae2098bfc52..3292d79fc35 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h b/Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h
index 32173bae57e..1073744412e 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h
@@ -2,7 +2,7 @@
******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
******************************************************************************
****************************************************************************** *
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp
index 232ee86ba24..3e38b5a28a3 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h b/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h
index bf2dd704747..b377eacdc8d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/legacy/Makefile b/Build/source/libs/icu/icu-src/source/samples/legacy/Makefile
index 58d345c8091..f3dfda63dd7 100644
--- a/Build/source/libs/icu/icu-src/source/samples/legacy/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/legacy/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2001-2004 IBM, Inc. and others
# conversion sample code
diff --git a/Build/source/libs/icu/icu-src/source/samples/legacy/README b/Build/source/libs/icu/icu-src/source/samples/legacy/README
index 3461de1429f..cecf961e350 100644
--- a/Build/source/libs/icu/icu-src/source/samples/legacy/README
+++ b/Build/source/libs/icu/icu-src/source/samples/legacy/README
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved.
This example demonstrates running an instance of ICU 1.8.1. together with a current version of ICU. It only tests u_getVersion and several collation APIs.
diff --git a/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp b/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp
index 559fbcb7974..679a18390dc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj b/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj
index e96fa911396..655a7cab41e 100644
--- a/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj
@@ -50,22 +50,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp b/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp
index b5430d74a07..221348fd1cc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp b/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp
index 8c9c6968b30..cd3f731510e 100644
--- a/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/Makefile b/Build/source/libs/icu/icu-src/source/samples/msgfmt/Makefile
index 0e114d9e4fc..1dfae070586 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT b/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT
index bce1fd3c855..5fc50b43a0a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp
index 5dafe098722..c0b36d7e2db 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp
index 66add568275..bbe7fc70b5b 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp
index d252ac70e1e..e8891aa01fc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp
index aa42dee37dd..d335a7e8307 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp b/Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp
index 0a7de73e451..cdcdbbfd1ad 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj b/Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj
index 8b7a9518e10..b1a90405b6c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp b/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp
index 7966e7abe4b..8d5fdf3d960 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h b/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h
index 590e545eae7..4b64f5a60c2 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/Makefile b/Build/source/libs/icu/icu-src/source/samples/numfmt/Makefile
index 2c67d1769d3..5affb922490 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c b/Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c
index bf96f0113c3..5f833c6c144 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp b/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp
index 172202e46f3..2534a9c0388 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
@@ -35,8 +35,8 @@ int main(int argc, char **argv) {
printf("C API\n");
capi();
- showCurrencyFormatting(FALSE);
- showCurrencyFormatting(TRUE);
+ showCurrencyFormatting(false);
+ showCurrencyFormatting(true);
u_cleanup(); // Release any additional storage held by ICU.
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj b/Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj
index e345627f8b5..4ea39eb54a7 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/readme.txt b/Build/source/libs/icu/icu-src/source/samples/numfmt/readme.txt
index 749c2bbf848..e332f567875 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
numfmt: a sample program which displays number formatting in C and C++
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp b/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp
index f6e405bdd73..e67b6d20c41 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/numfmt/util.h b/Build/source/libs/icu/icu-src/source/samples/numfmt/util.h
index 8c048fc81fb..86a698cddda 100644
--- a/Build/source/libs/icu/icu-src/source/samples/numfmt/util.h
+++ b/Build/source/libs/icu/icu-src/source/samples/numfmt/util.h
@@ -1,6 +1,6 @@
/********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp b/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp
index c4c2879cee3..f910c4f56e1 100644
--- a/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp
@@ -1,6 +1,6 @@
/********************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
********************************************************************************
********************************************************************************
* Copyright (C) 2008-2013, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/samples/props/Makefile b/Build/source/libs/icu/icu-src/source/samples/props/Makefile
index 821dc1e28f2..e4ed2520e6a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/props/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/props/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/props/props.cpp b/Build/source/libs/icu/icu-src/source/samples/props/props.cpp
index f1a148651cd..0f5c4ea390a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/props/props.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/props/props.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj b/Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj
index 5225c4aa7a5..17869e17632 100644
--- a/Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/props/readme.txt b/Build/source/libs/icu/icu-src/source/samples/props/readme.txt
index 9ee682786a3..3a4b32232c1 100644
--- a/Build/source/libs/icu/icu-src/source/samples/props/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/props/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
props: Unicode Character Properties
diff --git a/Build/source/libs/icu/icu-src/source/samples/readme.txt b/Build/source/libs/icu/icu-src/source/samples/readme.txt
index ce062e644a5..0ef21771da8 100644
--- a/Build/source/libs/icu/icu-src/source/samples/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/readme.txt
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2002-2010, International Business Machines Corporation
## and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/rules.mk b/Build/source/libs/icu/icu-src/source/samples/rules.mk
index d16f3731cc7..6bacaef6eac 100644
--- a/Build/source/libs/icu/icu-src/source/samples/rules.mk
+++ b/Build/source/libs/icu/icu-src/source/samples/rules.mk
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2002-2012 IBM, Inc. and others
# sample code rules for a single-target simple sample
diff --git a/Build/source/libs/icu/icu-src/source/samples/strsrch/Makefile b/Build/source/libs/icu/icu-src/source/samples/strsrch/Makefile
index d23eed9a634..3e24aba513d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/strsrch/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/strsrch/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/strsrch/readme.txt b/Build/source/libs/icu/icu-src/source/samples/strsrch/readme.txt
index e140d9a1ffd..ce2f5ac8961 100644
--- a/Build/source/libs/icu/icu-src/source/samples/strsrch/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/strsrch/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
strsrch: a sample program which finds the occurrences of a pattern string in a source string, using user-defined collation rules.
diff --git a/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp b/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp
index 2478712bc7c..c5fff0c40ba 100644
--- a/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp
@@ -1,6 +1,6 @@
/*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*************************************************************************
*************************************************************************
@@ -49,15 +49,15 @@ const char gHelpString[] =
*/
char * opt_locale = "en_US";
char * opt_rules = 0;
-UBool opt_help = FALSE;
-UBool opt_norm = FALSE;
-UBool opt_french = FALSE;
-UBool opt_shifted = FALSE;
-UBool opt_lower = FALSE;
-UBool opt_upper = FALSE;
-UBool opt_case = FALSE;
-UBool opt_overlap = FALSE;
-UBool opt_canonical = FALSE;
+UBool opt_help = false;
+UBool opt_norm = false;
+UBool opt_french = false;
+UBool opt_shifted = false;
+UBool opt_lower = false;
+UBool opt_upper = false;
+UBool opt_case = false;
+UBool opt_overlap = false;
+UBool opt_canonical = false;
int opt_level = 0;
char * opt_source = "International Components for Unicode";
char * opt_pattern = "Unicode";
@@ -107,14 +107,14 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
if (strcmp(pOpt->name, pArgName) == 0) {
switch (pOpt->type) {
case OptSpec::FLAG:
- *(UBool *)(pOpt->pVar) = TRUE;
+ *(UBool *)(pOpt->pVar) = true;
break;
case OptSpec::STRING:
argNum ++;
if (argNum >= argc) {
fprintf(stderr, "value expected for \"%s\" option.\n",
pOpt->name);
- return FALSE;
+ return false;
}
*(const char **)(pOpt->pVar) = argv[argNum];
break;
@@ -123,7 +123,7 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
if (argNum >= argc) {
fprintf(stderr, "value expected for \"%s\" option.\n",
pOpt->name);
- return FALSE;
+ return false;
}
char *endp;
int i = strtol(argv[argNum], &endp, 0);
@@ -131,7 +131,7 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
fprintf(stderr,
"integer value expected for \"%s\" option.\n",
pOpt->name);
- return FALSE;
+ return false;
}
*(int *)(pOpt->pVar) = i;
}
@@ -141,10 +141,10 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[])
if (pOpt->name == 0)
{
fprintf(stderr, "Unrecognized option \"%s\"\n", pArgName);
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
/**
@@ -165,7 +165,7 @@ UBool processCollator()
}
if (U_FAILURE(status)) {
fprintf(stderr, "Collator creation failed.: %d\n", status);
- return FALSE;
+ return false;
}
if (status == U_USING_DEFAULT_WARNING) {
fprintf(stderr, "Warning, U_USING_DEFAULT_WARNING for %s\n",
@@ -218,14 +218,14 @@ UBool processCollator()
break;
default:
fprintf(stderr, "-level param must be between 1 and 5\n");
- return FALSE;
+ return false;
}
}
if (U_FAILURE(status)) {
fprintf(stderr, "Collator attribute setting failed.: %d\n", status);
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
/**
@@ -239,20 +239,20 @@ UBool processStringSearch()
search = usearch_openFromCollator(pattern, -1, source, -1, collator, NULL,
&status);
if (U_FAILURE(status)) {
- return FALSE;
+ return false;
}
- if (opt_overlap == TRUE) {
+ if (static_cast<bool>(opt_overlap)) {
usearch_setAttribute(search, USEARCH_OVERLAP, USEARCH_ON, &status);
}
- if (opt_canonical == TRUE) {
+ if (static_cast<bool>(opt_canonical)) {
usearch_setAttribute(search, USEARCH_CANONICAL_MATCH, USEARCH_ON,
&status);
}
if (U_FAILURE(status)) {
fprintf(stderr, "Error setting search attributes\n");
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
UBool findPattern()
@@ -269,10 +269,10 @@ UBool findPattern()
}
if (U_FAILURE(status)) {
fprintf(stderr, "Error in searching for pattern %d\n", status);
- return FALSE;
+ return false;
}
fprintf(stdout, "End of search\n");
- return TRUE;
+ return true;
}
/**
@@ -281,17 +281,17 @@ UBool findPattern()
*/
int main(int argc, const char** argv)
{
- if (processOptions(argc, argv, opts) != TRUE || opt_help) {
+ if (!static_cast<bool>(processOptions(argc, argv, opts)) || static_cast<bool>(opt_help)) {
printf(gHelpString);
return -1;
}
- if (processCollator() != TRUE) {
+ if (!static_cast<bool>(processCollator())) {
fprintf(stderr, "Error creating collator\n");
return -1;
}
- if (processStringSearch() != TRUE) {
+ if (!static_cast<bool>(processStringSearch())) {
fprintf(stderr, "Error creating string search\n");
return -1;
}
diff --git a/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj b/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj
index 021bf2267a3..8ebc131172a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/Makefile b/Build/source/libs/icu/icu-src/source/samples/translit/Makefile
index bc683eb2fae..46a5d3bcdfe 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2003 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT b/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT
index 1240012d9d7..3e8c2742b91 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp
index 04c48866a62..d8227df8a1b 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp
index 2110990145c..8603bad98d1 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp
index d18b1ce38d6..a240200e43b 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp
index ec2306d213c..59d0b58166f 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp
index c726071cd53..de5dd47ff6c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
* COPYRIGHT:
* Copyright (c) 1999-2002, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h b/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h
index 5399312da23..12fc36866f7 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/main.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/main.cpp
index ca7f090e4cb..e10ab953aba 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/main.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/main.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj b/Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj
index fe91ee7f6e0..eae6965fc8f 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp
index b16a5a40cab..0a1ff273c5a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
**********************************************************************
**********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h b/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h
index 568cc67100e..bb780394c99 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp b/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp
index 6f387292fce..9fa11b2f9ff 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/util.h b/Build/source/libs/icu/icu-src/source/samples/translit/util.h
index 5ff6c02aa84..ce753643886 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/util.h
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/util.h
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/samples/uciter8/Makefile b/Build/source/libs/icu/icu-src/source/samples/uciter8/Makefile
index 7d09606c521..6aeb11a0b69 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uciter8/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/uciter8/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2003 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/uciter8/readme.txt b/Build/source/libs/icu/icu-src/source/samples/uciter8/readme.txt
index 4f01b2befed..46e5a6f8264 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uciter8/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/uciter8/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2003-2005, International Business Machines Corporation and others. All Rights Reserved.
uciter8: Lenient reading of 8-bit Unicode with a UCharIterator
diff --git a/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c b/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c
index dcd9aa0bb21..aa828dbbb54 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c
+++ b/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
@@ -113,7 +113,7 @@ compareIterators(UCharIterator *iter1, const char *n1,
return;
}
if(!iter1->hasNext(iter1)) {
- log_err("%s->hasNext() at the start returns FALSE\n", n1);
+ log_err("%s->hasNext() at the start returns false\n", n1);
return;
}
@@ -123,7 +123,7 @@ compareIterators(UCharIterator *iter1, const char *n1,
return;
}
if(!iter2->hasNext(iter2)) {
- log_err("%s->hasNext() at the start returns FALSE\n", n2);
+ log_err("%s->hasNext() at the start returns false\n", n2);
return;
}
@@ -137,11 +137,11 @@ compareIterators(UCharIterator *iter1, const char *n1,
} while(c1>=0);
if(iter1->hasNext(iter1)) {
- log_err("%s->hasNext() at the end returns TRUE\n", n1);
+ log_err("%s->hasNext() at the end returns true\n", n1);
return;
}
if(iter2->hasNext(iter2)) {
- log_err("%s->hasNext() at the end returns TRUE\n", n2);
+ log_err("%s->hasNext() at the end returns true\n", n2);
return;
}
@@ -178,7 +178,7 @@ compareIterators(UCharIterator *iter1, const char *n1,
return;
}
if(!iter1->hasPrevious(iter1)) {
- log_err("%s->hasPrevious() at the end returns FALSE\n", n1);
+ log_err("%s->hasPrevious() at the end returns false\n", n1);
return;
}
@@ -188,7 +188,7 @@ compareIterators(UCharIterator *iter1, const char *n1,
return;
}
if(!iter2->hasPrevious(iter2)) {
- log_err("%s->hasPrevious() at the end returns FALSE\n", n2);
+ log_err("%s->hasPrevious() at the end returns false\n", n2);
return;
}
@@ -202,11 +202,11 @@ compareIterators(UCharIterator *iter1, const char *n1,
} while(c1>=0);
if(iter1->hasPrevious(iter1)) {
- log_err("%s->hasPrevious() at the start returns TRUE\n", n1);
+ log_err("%s->hasPrevious() at the start returns true\n", n1);
return;
}
if(iter2->hasPrevious(iter2)) {
- log_err("%s->hasPrevious() at the start returns TRUE\n", n2);
+ log_err("%s->hasPrevious() at the start returns true\n", n2);
return;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj b/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj
index b417be32aaf..fdbfa44d380 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c b/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c
index 5f8778b0078..d2d3c54af37 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c
+++ b/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
@@ -217,24 +217,24 @@ lenient8IteratorMove(UCharIterator *iter, int32_t delta, UCharIteratorOrigin ori
case UITER_ZERO:
case UITER_START:
pos=delta;
- havePos=TRUE;
+ havePos=true;
/* iter->index<0 (unknown) is possible */
break;
case UITER_CURRENT:
if(iter->index>=0) {
pos=iter->index+delta;
- havePos=TRUE;
+ havePos=true;
} else {
/* the current UTF-16 index is unknown after setState(), use only delta */
pos=0;
- havePos=FALSE;
+ havePos=false;
}
break;
case UITER_LIMIT:
case UITER_LENGTH:
if(iter->length>=0) {
pos=iter->length+delta;
- havePos=TRUE;
+ havePos=true;
} else {
/* pin to the end, avoid counting the length */
iter->index=-1;
@@ -245,7 +245,7 @@ lenient8IteratorMove(UCharIterator *iter, int32_t delta, UCharIteratorOrigin ori
} else {
/* the current UTF-16 index is unknown, use only delta */
pos=0;
- havePos=FALSE;
+ havePos=false;
}
}
break;
diff --git a/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h b/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h
index 2aef2ad5d2e..bda4265e6a1 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h
+++ b/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/Makefile b/Build/source/libs/icu/icu-src/source/samples/ucnv/Makefile
index 3bc676d80c2..b97363ff4a3 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp b/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
index a692b77b4bd..2d6d0c14908 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
@@ -1,7 +1,7 @@
/*************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
**************************************************************************
**************************************************************************
@@ -342,7 +342,7 @@ UErrorCode convsample_05()
ucnv_toUnicode(conv, &target, targetLimit,
&source, sourceLimit, NULL,
- feof(f)?TRUE:FALSE, /* pass 'flush' when eof */
+ feof(f)?true:false, /* pass 'flush' when eof */
/* is true (when no more data will come) */
&status);
@@ -719,7 +719,7 @@ UBool convsample_21_didSubstitute(const char *source)
UConverter *conv = NULL, *cloneCnv = NULL;
UErrorCode status = U_ZERO_ERROR;
uint32_t len, len2;
- UBool flagVal = FALSE;
+ UBool flagVal = false;
UConverterFromUCallback junkCB;
FromUFLAGContext *flagCtx = NULL,
@@ -930,7 +930,7 @@ UErrorCode convsample_40()
ucnv_toUnicode( conv, &target, targetLimit,
&source, sourceLimit, NULL,
- feof(f)?TRUE:FALSE, /* pass 'flush' when eof */
+ feof(f)?true:false, /* pass 'flush' when eof */
/* is true (when no more data will come) */
&status);
@@ -1035,7 +1035,7 @@ UErrorCode convsample_46()
ucnv_fromUnicode( conv, &target, targetLimit,
&source, sourceLimit, NULL,
- feof(f)?TRUE:FALSE, /* pass 'flush' when eof */
+ feof(f)?true:false, /* pass 'flush' when eof */
/* is true (when no more data will come) */
&status);
@@ -1079,7 +1079,7 @@ void convsample_50() {
//! [ucnv_detectUnicodeSignature]
UErrorCode err = U_ZERO_ERROR;
- UBool discardSignature = TRUE; /* set to TRUE to throw away the initial U+FEFF */
+ UBool discardSignature = true; /* set to true to throw away the initial U+FEFF */
char input[] = { '\xEF','\xBB', '\xBF','\x41','\x42','\x43' };
int32_t signatureLength = 0;
const char *encoding = ucnv_detectUnicodeSignature(input,sizeof(input),&signatureLength,&err);
@@ -1094,7 +1094,7 @@ void convsample_50() {
ucnv_toUnicode(conv,
&target, output + UPRV_LENGTHOF(output),
&source, input + sizeof(input),
- NULL, TRUE, &err);
+ NULL, true, &err);
out = output;
if (discardSignature){
++out; // ignore initial U+FEFF
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/data06.txt b/Build/source/libs/icu/icu-src/source/samples/ucnv/data06.txt
index 8e842fb23e0..98b97c9c680 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/data06.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/data06.txt
@@ -1,7 +1,7 @@
// *******************************************************************************
// *
// * Copyright (C) 2016 and later: Unicode, Inc. and others.
-// * License & terms of use: http://www.unicode.org/copyright.html#License
+// * License & terms of use: http://www.unicode.org/copyright.html
// *
// *******************************************************************************
// *******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c b/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c
index 7830109585f..da275a1701d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c
@@ -1,6 +1,6 @@
/**************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
**************************************************************************
**************************************************************************
* COPYRIGHT:
@@ -25,7 +25,7 @@ U_CAPI FromUFLAGContext* U_EXPORT2 flagCB_fromU_openContext()
ctx->subCallback = NULL;
ctx->subContext = NULL;
- ctx->flag = FALSE;
+ ctx->flag = false;
return ctx;
}
@@ -42,7 +42,7 @@ U_CAPI void U_EXPORT2 flagCB_fromU(
/* First step - based on the reason code, take action */
if(reason == UCNV_UNASSIGNED) { /* whatever set should be trapped here */
- ((FromUFLAGContext*)context)->flag = TRUE;
+ ((FromUFLAGContext*)context)->flag = true;
}
if(reason == UCNV_CLONE) {
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h b/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h
index f6af5bd785e..2058903b5e8 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h
@@ -1,5 +1,5 @@
/* © 2016 and later: Unicode, Inc. and others.
- License & terms of use: http://www.unicode.org/copyright.html#License
+ License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2000 IBM, Inc. and Others.
FLAGCB.H - interface to 'flagging' callback which
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/readme.txt b/Build/source/libs/icu/icu-src/source/samples/ucnv/readme.txt
index 8708b225282..10987656dbd 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (C) 2002-2010, International Business Machines
Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj b/Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj
index 65d4dbe0099..b131e4881bc 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/Makefile b/Build/source/libs/icu/icu-src/source/samples/udata/Makefile
index 9467631395d..138a95c4712 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2012 IBM, Inc. and others
# udata sample code
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/reader.c b/Build/source/libs/icu/icu-src/source/samples/udata/reader.c
index 00817b89008..cc32417613a 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/reader.c
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/reader.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
@@ -69,9 +69,9 @@ isAcceptable(void *context,
pInfo->dataFormat[3]==0x74 &&
pInfo->formatVersion[0]==1 &&
pInfo->dataVersion[0]==1 ) {
- return TRUE;
+ return true;
} else {
- return FALSE;
+ return false;
}
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj b/Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj
index 32c11f90533..ab97c1b4ea8 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>.\x86\Debug\</OutDir>
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/readme.txt b/Build/source/libs/icu/icu-src/source/samples/udata/readme.txt
index 1f87b9a494e..746748420ad 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
udata: Low level ICU data
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/writer.c b/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
index ba81e462957..05dd2fca395 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj b/Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj
index 0bb83204d81..a0abdb379c8 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>.\x86\Debug\</OutDir>
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/Makefile b/Build/source/libs/icu/icu-src/source/samples/ufortune/Makefile
index de56b4058a7..77302f46ec0 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2001-2003 IBM, Inc. and others
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/fortunedefs.mk b/Build/source/libs/icu/icu-src/source/samples/ufortune/fortunedefs.mk
index a07eb119372..d2bcb59fd7d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/fortunedefs.mk
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/fortunedefs.mk
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2001-2011 IBM, Inc. and others
# common makefile between ufortune and ufortune/resources
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/readme.txt b/Build/source/libs/icu/icu-src/source/samples/ufortune/readme.txt
index 22a23555ac5..ead27a74294 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
ufortune: a sample program demonstrating the use of ICU resource files by an application.
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/Makefile b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/Makefile
index 8a3c1696da2..d10169a4abe 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2001-2011 IBM, Inc. and others
#
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/es.txt b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/es.txt
index f8257bc5337..c2849f62d32 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/es.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/es.txt
@@ -1,5 +1,5 @@
// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
//
// Copyright (C) 2001-2006, International Business Machines
// Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/fortune_resources.mak b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/fortune_resources.mak
index 707ae6b6ab6..1643222cac2 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/fortune_resources.mak
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/fortune_resources.mak
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2001-2009 IBM, Inc. and others
#
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/root.txt b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/root.txt
index 3b5d2fdb480..fc95f38f949 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/root.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/resources/root.txt
@@ -1,5 +1,5 @@
// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
//
// Copyright (C) 2001-2003, International Business Machines
// Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c b/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c
index c1c203a983d..edc4c337262 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c
@@ -1,7 +1,7 @@
/*************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
**************************************************************************
**************************************************************************
@@ -58,9 +58,9 @@ void u_write(const UChar *what, int len);
*/
int main(int argc, char **argv)
{
- UBool displayUsage = FALSE; /* Set true if command line err or help */
+ UBool displayUsage = false; /* Set true if command line err or help */
/* option was requested. */
- UBool verbose = FALSE; /* Set true if -v command line option. */
+ UBool verbose = false; /* Set true if -v command line option. */
char *optionError = NULL; /* If command line contains an unrecognized */
/* option, this will point to it. */
char *locale=NULL; /* Locale name. Null for system default, */
@@ -95,14 +95,14 @@ int main(int argc, char **argv)
continue;
}
if (strcmp(argv[i], "-v") == 0) {
- verbose = TRUE;
+ verbose = true;
continue;}
if (strcmp(argv[i], "-?") == 0 ||
strcmp(argv[i], "--help") == 0) {
- displayUsage = TRUE;
+ displayUsage = true;
continue;}
optionError = argv[i];
- displayUsage = TRUE;
+ displayUsage = true;
break;
}
@@ -193,7 +193,7 @@ int main(int argc, char **argv)
exit(-1);
}
- i = (int)time(NULL) % numFortunes; /* Use time to pick a somewhat-random fortune. */
+ i = time(NULL) % numFortunes; /* Use time to pick a somewhat-random fortune. */
resString = ures_getStringByIndex(fortunes_r, i, &len, &err);
if (U_FAILURE(err)) {
fprintf(stderr, "%s: ures_getStringByIndex(%d) failed, %s\n", programName, i, u_errorName(err));
diff --git a/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj b/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj
index 8e049351cb7..cdb926b4a1c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj
@@ -1,107 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{25F534DF-93C9-4853-A88E-DB7D8CF74042}</ProjectGuid>
- <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <!-- The following import will include the 'default' configuration options for VS projects. -->
+ <Import Project="..\..\allinone\Build.Windows.ProjectConfiguration.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>.\x86\Debug\</OutDir>
- <IntDir>.\x86\Debug\</IntDir>
- <TargetName>$(ProjectName)</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>.\x86\Release\</OutDir>
- <IntDir>.\x86\Release\</IntDir>
- <TargetName>$(ProjectName)</TargetName>
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir>.\$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>.\$(Platform)\$(Configuration)\</IntDir>
+ <!-- The ICU projects use "Win32" to mean "x86", so we need to special case it. -->
+ <OutDir Condition="'$(Platform)'=='Win32'">.\x86\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Platform)'=='Win32'">.\x86\$(Configuration)\</IntDir>
+ <!-- Disable Incremental Linking for Release builds as it prevents Link-time Code Generation -->
+ <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)'=='Release'">false</LinkIncremental>
</PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <!-- Options that are common to *all* project configurations -->
+ <ItemDefinitionGroup>
<Midl>
- <TypeLibraryName>.\x86\Debug/ufortune.tlb</TypeLibraryName>
+ <TypeLibraryName>$(OutDir)\ufortune.tlb</TypeLibraryName>
</Midl>
<ClCompile>
- <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WINVER=0x0601;_WIN32_WINNT=0x0601;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>Default</CompileAs>
- <PrecompiledHeaderFile />
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <PrecompiledHeaderOutputFile>$(OutDir)/ufortune.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(OutDir)/</AssemblerListingLocation>
+ <ObjectFileName>$(OutDir)/</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)/ufortune.pdb</ProgramDataBaseFileName>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
+ <AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
- <AdditionalDependencies>icuucd.lib;resources\fortune_resources.lib;icuiod.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <AdditionalLibraryDirectories>../../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>..\..\..\$(IcuLibOutputDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <!-- Options that are common to all 'Debug' project configurations -->
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+ <ClCompile>
+ <BrowseInformation>true</BrowseInformation>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
+ <AdditionalDependencies>icuucd.lib;resources\fortune_resources.lib;icuiod.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Midl>
- <TypeLibraryName>.\x86\Release/ufortune.tlb</TypeLibraryName>
- </Midl>
+ <!-- Options that are common to all 'Release' project configurations -->
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WINVER=0x0601;_WIN32_WINNT=0x0601;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
- <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
- <WarningLevel>Level3</WarningLevel>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <CompileAs>Default</CompileAs>
- <PrecompiledHeaderFile />
</ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
<Link>
<AdditionalDependencies>icuuc.lib;resources\fortune_resources.lib;icuio.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <AdditionalLibraryDirectories>../../../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/Build/source/libs/icu/icu-src/source/samples/ugrep/Makefile b/Build/source/libs/icu/icu-src/source/samples/ugrep/Makefile
index 366eb2b6bef..8a0f44fb33c 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ugrep/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/ugrep/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2010 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/ugrep/readme.txt b/Build/source/libs/icu/icu-src/source/samples/ugrep/readme.txt
index cb4042e240a..8c6b2d5c5c9 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ugrep/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ugrep/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
ugrep: a sample program demonstrating the use of ICU regular expression API.
diff --git a/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp b/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp
index 9c2f0bdd21c..6d7fce04924 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp
@@ -1,7 +1,7 @@
/*************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
**************************************************************************
**************************************************************************
@@ -42,8 +42,8 @@ using namespace icu;
//
const char *pattern = NULL; // The regular expression
int firstFileNum; // argv index of the first file name
-UBool displayFileName = FALSE;
-UBool displayLineNum = FALSE;
+UBool displayFileName = false;
+UBool displayLineNum = false;
//
@@ -93,7 +93,7 @@ void readFile(const char *name);
//
//------------------------------------------------------------------------------------------
int main(int argc, const char** argv) {
- UBool matchFound = FALSE;
+ UBool matchFound = false;
//
// Process the command line options.
@@ -141,10 +141,10 @@ int main(int argc, const char** argv) {
// Loop through the lines of a file, trying to match the regex pattern on each.
//
for (nextLine(0); lineStart<fileLen; nextLine(lineEnd)) {
- UnicodeString s(FALSE, ucharBuf+lineStart, lineEnd-lineStart);
+ UnicodeString s(false, ucharBuf+lineStart, lineEnd-lineStart);
matcher->reset(s);
if (matcher->find()) {
- matchFound = TRUE;
+ matchFound = true;
printMatch();
}
}
@@ -177,8 +177,8 @@ int main(int argc, const char** argv) {
//------------------------------------------------------------------------------------------
void processOptions(int argc, const char **argv) {
int optInd;
- UBool doUsage = FALSE;
- UBool doVersion = FALSE;
+ UBool doUsage = false;
+ UBool doVersion = false;
const char *arg;
@@ -187,14 +187,14 @@ void processOptions(int argc, const char **argv) {
/* version info */
if(strcmp(arg, "-V") == 0 || strcmp(arg, "--version") == 0) {
- doVersion = TRUE;
+ doVersion = true;
}
/* usage info */
else if(strcmp(arg, "--help") == 0) {
- doUsage = TRUE;
+ doUsage = true;
}
else if(strcmp(arg, "-n") == 0 || strcmp(arg, "--line-number") == 0) {
- displayLineNum = TRUE;
+ displayLineNum = true;
}
/* POSIX.1 says all arguments after -- are not options */
else if(strcmp(arg, "--") == 0) {
@@ -205,7 +205,7 @@ void processOptions(int argc, const char **argv) {
/* unrecognized option */
else if(strncmp(arg, "-", strlen("-")) == 0) {
printf("ugrep: invalid option -- %s\n", arg+1);
- doUsage = TRUE;
+ doUsage = true;
}
/* done with options */
else {
@@ -234,7 +234,7 @@ void processOptions(int argc, const char **argv) {
if (remainingArgs > 2) {
// More than one file to be processed. Display file names with match output.
- displayFileName = TRUE;
+ displayFileName = true;
}
pattern = argv[optInd];
diff --git a/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj b/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj
index 39ab564bc93..5c2c559f1c1 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj
@@ -14,35 +14,17 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</IntDir>
+ <OutDir>.\$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>.\$(Platform)\$(Configuration)\</IntDir>
+ <!-- The ICU projects use "Win32" to mean "x86", so we need to special case it. -->
+ <OutDir Condition="'$(Platform)'=='Win32'">.\x86\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Platform)'=='Win32'">.\x86\$(Configuration)\</IntDir>
+ <!-- Disable Incremental Linking for Release builds as it prevents Link-time Code Generation -->
+ <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)'=='Release'">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl>
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/Makefile b/Build/source/libs/icu/icu-src/source/samples/uresb/Makefile
index c05110b0a82..c5ab9e82b51 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2005 IBM, Inc. and others
# conversion sample code
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/en.txt b/Build/source/libs/icu/icu-src/source/samples/uresb/en.txt
index 391a3499663..edecd81864d 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/en.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/en.txt
@@ -1,5 +1,5 @@
// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
//
// Copyright (C) 2000-2003, International Business Machines
// Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/readme.txt b/Build/source/libs/icu/icu-src/source/samples/uresb/readme.txt
index e75eae7875a..a33c3653015 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2001-2010 International Business Machines
Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/resources.mak b/Build/source/libs/icu/icu-src/source/samples/uresb/resources.mak
index 9d3b6e180cd..df399b54d06 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/resources.mak
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/resources.mak
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2009 International Business Machines
## Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/resources.vcxproj b/Build/source/libs/icu/icu-src/source/samples/uresb/resources.vcxproj
index 44755ac1f62..4b98a128822 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/resources.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/resources.vcxproj
@@ -13,22 +13,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/root.txt b/Build/source/libs/icu/icu-src/source/samples/uresb/root.txt
index 0a5b965c623..9624d31c5fd 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/root.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/root.txt
@@ -1,5 +1,5 @@
// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
//
// Copyright (c) 2001-2003 International Business Machines
// Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/sr.txt b/Build/source/libs/icu/icu-src/source/samples/uresb/sr.txt
index 09c2fdf8ba2..922f5054481 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/sr.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/sr.txt
@@ -1,5 +1,5 @@
// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
//
// Copyright (c) 2001-2003 International Business Machines
// Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c b/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c
index f8d7cd66c2c..dc859308ae6 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
@@ -55,7 +55,7 @@ static const char *resPath = NULL;
static const int32_t indentsize = 4;
static UFILE *outerr = NULL;
static int32_t truncsize = URESB_DEFAULTTRUNC;
-static UBool trunc = FALSE;
+static UBool trunc = false;
const UChar baderror[] = { 0x0042, 0x0041, 0x0044, 0x0000 };
@@ -76,7 +76,7 @@ static UOption options[]={
UOPTION_VERBOSE
};
-static UBool VERBOSE = FALSE;
+static UBool VERBOSE = false;
extern int
main(int argc, char* argv[]) {
@@ -134,18 +134,18 @@ main(int argc, char* argv[]) {
}
if(options[5].doesOccur) {
- trunc = TRUE;
+ trunc = true;
if(options[5].value != NULL) {
truncsize = atoi(options[5].value); /* user defined printable size */
} else {
truncsize = URESB_DEFAULTTRUNC; /* we'll use default omitting size */
}
} else {
- trunc = FALSE;
+ trunc = false;
}
if(options[6].doesOccur) {
- VERBOSE = TRUE;
+ VERBOSE = true;
}
outerr = u_finit(stderr, locale, encoding);
diff --git a/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj b/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj
index 6e6e96b18f8..52ab5d05dbb 100644
--- a/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/samples/ustring/Makefile b/Build/source/libs/icu/icu-src/source/samples/ustring/Makefile
index 84e68d5091f..f83464eb880 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ustring/Makefile
+++ b/Build/source/libs/icu/icu-src/source/samples/ustring/Makefile
@@ -1,5 +1,5 @@
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2002 IBM, Inc. and others
# sample code makefile
diff --git a/Build/source/libs/icu/icu-src/source/samples/ustring/readme.txt b/Build/source/libs/icu/icu-src/source/samples/ustring/readme.txt
index 9097f7f61d2..513ea183cf7 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ustring/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/samples/ustring/readme.txt
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved.
ustring: Unicode String Manipulation
diff --git a/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp b/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp
index a123c832a54..35a8ec1bec6 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
@@ -135,7 +135,7 @@ demo_utf_h_macros() {
puts("");
- isError=FALSE;
+ isError=false;
i=1; /* write position, gets post-incremented so needs to be in an l-value */
U16_APPEND(input, i, UPRV_LENGTHOF(input), 0x0062, isError);
@@ -226,7 +226,7 @@ static void demoCaseMapInC() {
printUString("input string: ", input, -1);
/* uppercase */
- isError=FALSE;
+ isError=false;
for(i=j=0; j<UPRV_LENGTHOF(buffer) && !isError; /* U16_NEXT post-increments */) {
U16_NEXT(input, i, INT32_MAX, c); /* without length because NUL-terminated */
if(c==0) {
@@ -237,7 +237,7 @@ static void demoCaseMapInC() {
}
printUString("simple-uppercased: ", buffer, j);
/* lowercase */
- isError=FALSE;
+ isError=false;
for(i=j=0; j<UPRV_LENGTHOF(buffer) && !isError; /* U16_NEXT post-increments */) {
U16_NEXT(input, i, INT32_MAX, c); /* without length because NUL-terminated */
if(c==0) {
@@ -248,7 +248,7 @@ static void demoCaseMapInC() {
}
printUString("simple-lowercased: ", buffer, j);
/* titlecase */
- isError=FALSE;
+ isError=false;
for(i=j=0; j<UPRV_LENGTHOF(buffer) && !isError; /* U16_NEXT post-increments */) {
U16_NEXT(input, i, INT32_MAX, c); /* without length because NUL-terminated */
if(c==0) {
@@ -259,7 +259,7 @@ static void demoCaseMapInC() {
}
printUString("simple-titlecased: ", buffer, j);
/* case-fold/default */
- isError=FALSE;
+ isError=false;
for(i=j=0; j<UPRV_LENGTHOF(buffer) && !isError; /* U16_NEXT post-increments */) {
U16_NEXT(input, i, INT32_MAX, c); /* without length because NUL-terminated */
if(c==0) {
@@ -270,7 +270,7 @@ static void demoCaseMapInC() {
}
printUString("simple-case-folded/default: ", buffer, j);
/* case-fold/Turkic */
- isError=FALSE;
+ isError=false;
for(i=j=0; j<UPRV_LENGTHOF(buffer) && !isError; /* U16_NEXT post-increments */) {
U16_NEXT(input, i, INT32_MAX, c); /* without length because NUL-terminated */
if(c==0) {
@@ -456,7 +456,7 @@ demoUnicodeStringStorage() {
// * UnicodeString using readonly-alias to a const UChar array
// construct a string that aliases a readonly buffer
- UnicodeString three(FALSE, readonly, UPRV_LENGTHOF(readonly));
+ UnicodeString three(false, readonly, UPRV_LENGTHOF(readonly));
printUnicodeString("readonly-alias string: ", three);
// copy-on-write: any modification to the string results in
// a copy to either the internal buffer or to a newly allocated one
@@ -468,7 +468,7 @@ demoUnicodeStringStorage() {
i, readonly[i]);
}
// setTo() readonly alias
- one.setTo(FALSE, writeable, UPRV_LENGTHOF(writeable));
+ one.setTo(false, writeable, UPRV_LENGTHOF(writeable));
// copying the readonly-alias object with fastCopyFrom() (new in ICU 2.4)
// will readonly-alias the same buffer
two.fastCopyFrom(one);
@@ -549,7 +549,7 @@ demoUnicodeStringInit() {
U_STRING_INIT(invString, "such characters are safe 123 %-.", 32);
// compare the C and C++ strings
- printf("C and C++ Unicode strings are equal: %d\n", invariantOnly==UnicodeString(TRUE, invString, 32));
+ printf("C and C++ Unicode strings are equal: %d\n", invariantOnly==UnicodeString(true, invString, 32));
/*
* convert between char * and UChar * strings that
diff --git a/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj b/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj
index 7e2882d65f3..644dc95d6c1 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/stubdata/Makefile.in b/Build/source/libs/icu/icu-src/source/stubdata/Makefile.in
index 4e2f03fad6c..cf205103040 100644
--- a/Build/source/libs/icu/icu-src/source/stubdata/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/stubdata/Makefile.in
@@ -48,7 +48,8 @@ DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)
CPPFLAGS += -I$(top_srcdir)/common $(LIBCPPFLAGS)
LDFLAGS += $(LDFLAGSICUDT)
-OBJECTS = stubdata.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
## Header files to install
HEADERS =
@@ -87,6 +88,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -94,6 +100,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/stubdata/sources.txt b/Build/source/libs/icu/icu-src/source/stubdata/sources.txt
new file mode 100644
index 00000000000..1bbb2677ef5
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/stubdata/sources.txt
@@ -0,0 +1 @@
+stubdata.cpp
diff --git a/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj b/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
index 751bba0ed68..7c58b7ea274 100644
--- a/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
@@ -16,22 +16,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -72,7 +56,7 @@
<SetChecksum>true</SetChecksum>
<TurnOffAssemblyGeneration>true</TurnOffAssemblyGeneration>
<!-- Note: stubdata is somewhat odd in that it doesn't suffix the Debug output DLL/LIB with a "d" like common/i18n/etc. -->
- <OutputFile>..\..\$(IcuBinOutputDir)\icudt65.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icudt68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icudt.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icudt.lib</ImportLibrary>
</Link>
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/Makefile.in b/Build/source/libs/icu/icu-src/source/test/cintltst/Makefile.in
index a8038378409..34f8ea2acdd 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/Makefile.in
@@ -55,7 +55,7 @@ hpmufn.o tracetst.o reapits.o uregiontest.o ulistfmttest.o\
utexttst.o ucsdetst.o spooftest.o \
cbiditransformtst.o \
cgendtst.o \
-unumberformattertst.o uformattedvaluetst.o
+unumberformattertst.o uformattedvaluetst.o unumberrangeformattertst.o
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
index 44cf712e0fe..c15d2771e5f 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
@@ -37,10 +37,10 @@ void TestGregorianChange(void);
void TestFieldDifference(void);
void TestAddRollEra0AndEraBounds(void);
void TestGetTZTransition(void);
-
void TestGetWindowsTimeZoneID(void);
void TestGetTimeZoneIDByWindowsID(void);
void TestJpnCalAddSetNextEra(void);
+void TestUcalOpenBufferRead(void);
void addCalTest(TestNode** root);
@@ -64,6 +64,7 @@ void addCalTest(TestNode** root)
addTest(root, &TestGetWindowsTimeZoneID, "tsformat/ccaltst/TestGetWindowsTimeZoneID");
addTest(root, &TestGetTimeZoneIDByWindowsID, "tsformat/ccaltst/TestGetTimeZoneIDByWindowsID");
addTest(root, &TestJpnCalAddSetNextEra, "tsformat/ccaltst/TestJpnCalAddSetNextEra");
+ addTest(root, &TestUcalOpenBufferRead, "tsformat/ccaltst/TestUcalOpenBufferRead");
}
/* "GMT" */
@@ -2543,4 +2544,13 @@ void TestJpnCalAddSetNextEra() {
}
}
+void TestUcalOpenBufferRead() {
+ // ICU-21004: The issue shows under valgrind or as an Address Sanitizer failure.
+ UErrorCode status = U_ZERO_ERROR;
+ // string length: 157 + 1 + 100 = 258
+ const char *localeID = "x-privatebutreallylongtagfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar-foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoorbarfoobarfoo";
+ UCalendar *cal = ucal_open(NULL, 0, localeID, UCAL_GREGORIAN, &status);
+ ucal_close(cal);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
index 73663f12459..aae16f98f44 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
@@ -3035,7 +3035,7 @@ static void TestJ1968(void) {
err = U_ZERO_ERROR;
myConvName[UCNV_MAX_CONVERTER_NAME_LENGTH-1] = ',';
- strncpy(myConvName + UCNV_MAX_CONVERTER_NAME_LENGTH, "locale=", 7);
+ memcpy(myConvName + UCNV_MAX_CONVERTER_NAME_LENGTH, "locale=", 7);
cnv = ucnv_open(myConvName, &err);
if (cnv || err != U_ILLEGAL_ARGUMENT_ERROR) {
log_err("4) Didn't get U_ILLEGAL_ARGUMENT_ERROR as expected %s\n", u_errorName(err));
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c
index d8a8066824a..513989ac6bb 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c
@@ -14,6 +14,7 @@
#include "unicode/udat.h"
#include "unicode/ucal.h"
#include "unicode/ustring.h"
+#include "unicode/udisplaycontext.h"
#include "cintltst.h"
#include "cmemory.h"
#include "cformtst.h"
@@ -21,6 +22,7 @@
static void TestDateIntervalFormat(void);
static void TestFPos_SkelWithSeconds(void);
static void TestFormatToResult(void);
+static void TestFormatCalendarToResult(void);
void addDateIntervalFormatTest(TestNode** root);
@@ -31,12 +33,15 @@ void addDateIntervalFormatTest(TestNode** root)
TESTCASE(TestDateIntervalFormat);
TESTCASE(TestFPos_SkelWithSeconds);
TESTCASE(TestFormatToResult);
+ TESTCASE(TestFormatCalendarToResult);
}
static const char tzUSPacific[] = "US/Pacific";
static const char tzAsiaTokyo[] = "Asia/Tokyo";
#define Date201103021030 1299090600000.0 /* 2011-Mar-02 1030 in US/Pacific, 2011-Mar-03 0330 in Asia/Tokyo */
#define Date201009270800 1285599629000.0 /* 2010-Sep-27 0800 in US/Pacific */
+#define Date158210140000 -12219379142000.0
+#define Date158210160000 -12219206342000.0
#define _MINUTE (60.0*1000.0)
#define _HOUR (60.0*60.0*1000.0)
#define _DAY (24.0*60.0*60.0*1000.0)
@@ -44,23 +49,43 @@ static const char tzAsiaTokyo[] = "Asia/Tokyo";
typedef struct {
const char * locale;
const char * skeleton;
+ UDisplayContext context;
const char * tzid;
const UDate from;
const UDate to;
const char * resultExpected;
} DateIntervalFormatTestItem;
+#define CAP_NONE UDISPCTX_CAPITALIZATION_NONE
+#define CAP_BEGIN UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE
+#define CAP_LIST UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU
+#define CAP_ALONE UDISPCTX_CAPITALIZATION_FOR_STANDALONE
+
/* Just a small set of tests for now, the real functionality is tested in the C++ tests */
static const DateIntervalFormatTestItem testItems[] = {
- { "en", "MMMdHHmm", tzUSPacific, Date201103021030, Date201103021030 + 7.0*_HOUR, "Mar 2, 10:30 \\u2013 17:30" },
- { "en", "MMMdHHmm", tzAsiaTokyo, Date201103021030, Date201103021030 + 7.0*_HOUR, "Mar 3, 03:30 \\u2013 10:30" },
- { "en", "yMMMEd", tzUSPacific, Date201009270800, Date201009270800 + 12.0*_HOUR, "Mon, Sep 27, 2010" },
- { "en", "yMMMEd", tzUSPacific, Date201009270800, Date201009270800 + 31.0*_DAY, "Mon, Sep 27 \\u2013 Thu, Oct 28, 2010" },
- { "en", "yMMMEd", tzUSPacific, Date201009270800, Date201009270800 + 410.0*_DAY, "Mon, Sep 27, 2010 \\u2013 Fri, Nov 11, 2011" },
- { "de", "Hm", tzUSPacific, Date201009270800, Date201009270800 + 12.0*_HOUR, "08:00\\u201320:00 Uhr" },
- { "de", "Hm", tzUSPacific, Date201009270800, Date201009270800 + 31.0*_DAY, "27.9.2010, 08:00 \\u2013 28.10.2010, 08:00" },
- { "ja", "MMMd", tzUSPacific, Date201009270800, Date201009270800 + 1.0*_DAY, "9\\u670827\\u65E5\\uFF5E28\\u65E5" },
- { NULL, NULL, NULL, 0, 0, NULL }
+ { "en", "MMMdHHmm", CAP_NONE, tzUSPacific, Date201103021030, Date201103021030 + 7.0*_HOUR, "Mar 2, 10:30 \\u2013 17:30" },
+ { "en", "MMMdHHmm", CAP_NONE, tzAsiaTokyo, Date201103021030, Date201103021030 + 7.0*_HOUR, "Mar 3, 03:30 \\u2013 10:30" },
+ { "en", "yMMMEd", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 12.0*_HOUR, "Mon, Sep 27, 2010" },
+ { "en", "yMMMEd", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 31.0*_DAY, "Mon, Sep 27 \\u2013 Thu, Oct 28, 2010" },
+ { "en", "yMMMEd", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 410.0*_DAY, "Mon, Sep 27, 2010 \\u2013 Fri, Nov 11, 2011" },
+ { "de", "Hm", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 12.0*_HOUR, "08:00\\u201320:00 Uhr" },
+ { "de", "Hm", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 31.0*_DAY, "27.9.2010, 08:00 \\u2013 28.10.2010, 08:00" },
+ { "ja", "MMMd", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 1.0*_DAY, "9\\u670827\\u65E5\\uFF5E28\\u65E5" },
+ { "cs", "MMMEd", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "po 27. 9. \\u2013 p\\u00E1 26. 11." },
+ { "cs", "yMMMM", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "z\\u00E1\\u0159\\u00ED\\u2013listopad 2010" },
+ { "cs", "yMMMM", CAP_NONE, tzUSPacific, Date201009270800, Date201009270800 + 1.0*_DAY, "z\\u00E1\\u0159\\u00ED 2010" },
+#if !UCONFIG_NO_BREAK_ITERATION
+ { "cs", "MMMEd", CAP_BEGIN, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "Po 27. 9. \\u2013 p\\u00E1 26. 11." },
+ { "cs", "yMMMM", CAP_BEGIN, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "Z\\u00E1\\u0159\\u00ED\\u2013listopad 2010" },
+ { "cs", "yMMMM", CAP_BEGIN, tzUSPacific, Date201009270800, Date201009270800 + 1.0*_DAY, "Z\\u00E1\\u0159\\u00ED 2010" },
+ { "cs", "MMMEd", CAP_LIST, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "Po 27. 9. \\u2013 p\\u00E1 26. 11." },
+ { "cs", "yMMMM", CAP_LIST, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "Z\\u00E1\\u0159\\u00ED\\u2013listopad 2010" },
+ { "cs", "yMMMM", CAP_LIST, tzUSPacific, Date201009270800, Date201009270800 + 1.0*_DAY, "Z\\u00E1\\u0159\\u00ED 2010" },
+ { "cs", "MMMEd", CAP_ALONE, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "po 27. 9. \\u2013 p\\u00E1 26. 11." },
+#endif
+ { "cs", "yMMMM", CAP_ALONE, tzUSPacific, Date201009270800, Date201009270800 + 60.0*_DAY, "z\\u00E1\\u0159\\u00ED\\u2013listopad 2010" },
+ { "cs", "yMMMM", CAP_ALONE, tzUSPacific, Date201009270800, Date201009270800 + 1.0*_DAY, "z\\u00E1\\u0159\\u00ED 2010" },
+ { NULL, NULL, CAP_NONE, NULL, 0, 0, NULL }
};
enum {
@@ -94,6 +119,22 @@ static void TestDateIntervalFormat()
if ( U_SUCCESS(status) ) {
UChar result[kFormatBufLen];
UChar resultExpected[kFormatBufLen];
+
+ udtitvfmt_setContext(udtitvfmt, testItemPtr->context, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("FAIL: udtitvfmt_setContext for locale %s, skeleton %s, context %04X - %s\n",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, myErrorName(status) );
+ } else {
+ UDisplayContext getContext = udtitvfmt_getContext(udtitvfmt, UDISPCTX_TYPE_CAPITALIZATION, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("FAIL: udtitvfmt_getContext for locale %s, skeleton %s, context %04X - %s\n",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, myErrorName(status) );
+ } else if (getContext != testItemPtr->context) {
+ log_err("FAIL: udtitvfmt_getContext for locale %s, skeleton %s, context %04X - got context %04X\n",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, (unsigned)getContext );
+ }
+ }
+ status = U_ZERO_ERROR;
int32_t fmtLen = udtitvfmt_format(udtitvfmt, testItemPtr->from, testItemPtr->to, result, kFormatBufLen, NULL, &status);
if (fmtLen >= kFormatBufLen) {
result[kFormatBufLen-1] = 0;
@@ -328,7 +369,7 @@ static void TestFormatToResult() {
{
const char* message = "Field position test 1";
const UChar* expectedString = u"27. September 2010, 15:00 – 2. März 2011, 18:30";
- udtitvfmt_formatToResult(fmt, fdi, Date201009270800, Date201103021030, &ec);
+ udtitvfmt_formatToResult(fmt, Date201009270800, Date201103021030, fdi, &ec);
assertSuccess("Formatting", &ec);
static const UFieldPositionWithCategory expectedFieldPositions[] = {
// category, field, begin index, end index
@@ -352,9 +393,79 @@ static void TestFormatToResult() {
UPRV_LENGTHOF(expectedFieldPositions));
}
{
+ const char* message = "Field position test 2";
+ const UChar* expectedString = u"27. September 2010, 15:00–22:00 Uhr";
+ udtitvfmt_formatToResult(fmt, Date201009270800, Date201009270800 + 7*_HOUR, fdi, &ec);
+ assertSuccess("Formatting", &ec);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 0, 2},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 4, 13},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 14, 18},
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 0, 20, 25},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 20, 22},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 23, 25},
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 1, 26, 31},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 26, 28},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 29, 31},
+ {UFIELD_CATEGORY_DATE, UDAT_AM_PM_FIELD, 32, 35}};
+ checkMixedFormattedValue(
+ message,
+ udtitvfmt_resultAsValue(fdi, &ec),
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+
+ udtitvfmt_close(fmt);
+ udtitvfmt_closeResult(fdi);
+}
+
+static void TestFormatCalendarToResult() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UCalendar* ucal1 = ucal_open(zoneGMT, -1, "de", UCAL_DEFAULT, &ec);
+ ucal_setMillis(ucal1, Date201009270800, &ec);
+ UCalendar* ucal2 = ucal_open(zoneGMT, -1, "de", UCAL_DEFAULT, &ec);
+ ucal_setMillis(ucal2, Date201103021030, &ec);
+ UCalendar* ucal3 = ucal_open(zoneGMT, -1, "de", UCAL_DEFAULT, &ec);
+ ucal_setMillis(ucal3, Date201009270800 + 7*_HOUR, &ec);
+ UCalendar* ucal4 = ucal_open(zoneGMT, -1, "de", UCAL_DEFAULT, &ec);
+ UCalendar* ucal5 = ucal_open(zoneGMT, -1, "de", UCAL_DEFAULT, &ec);
+
+ UDateIntervalFormat* fmt = udtitvfmt_open("de", u"dMMMMyHHmm", -1, zoneGMT, -1, &ec);
+ UFormattedDateInterval* fdi = udtitvfmt_openResult(&ec);
+ assertSuccess("Opening", &ec);
+
+ {
const char* message = "Field position test 1";
+ const UChar* expectedString = u"27. September 2010, 15:00 – 2. März 2011, 18:30";
+ udtitvfmt_formatCalendarToResult(fmt, ucal1, ucal2, fdi, &ec);
+ assertSuccess("Formatting", &ec);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 0, 0, 25},
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 0, 2},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 4, 13},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 14, 18},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 20, 22},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 23, 25},
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 1, 28, 47},
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 28, 29},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 31, 35},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 36, 40},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 42, 44},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 45, 47}};
+ checkMixedFormattedValue(
+ message,
+ udtitvfmt_resultAsValue(fdi, &ec),
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ {
+ const char* message = "Field position test 2";
const UChar* expectedString = u"27. September 2010, 15:00–22:00 Uhr";
- udtitvfmt_formatToResult(fmt, fdi, Date201009270800, Date201009270800 + 7*_HOUR, &ec);
+ udtitvfmt_formatCalendarToResult(fmt, ucal1, ucal3, fdi, &ec);
assertSuccess("Formatting", &ec);
static const UFieldPositionWithCategory expectedFieldPositions[] = {
// category, field, begin index, end index
@@ -375,7 +486,77 @@ static void TestFormatToResult() {
expectedFieldPositions,
UPRV_LENGTHOF(expectedFieldPositions));
}
+ {
+ const char* message = "Field position test 3";
+ // Date across Julian Gregorian change date.
+ ucal_setMillis(ucal4, Date158210140000, &ec);
+ ucal_setMillis(ucal5, Date158210160000, &ec);
+ // 1 2 3 4
+ // 012345678901234567890123456789012345678901234567890
+ const UChar* expectedString = u"4. Oktober 1582, 00:00 – 16. Oktober 1582, 00:00";
+ udtitvfmt_formatCalendarToResult(fmt, ucal4, ucal5, fdi, &ec);
+ assertSuccess("Formatting", &ec);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 0, 0, 22},
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 0, 1},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 3, 10},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 11, 15},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 17, 19},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 20, 22},
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 1, 25, 48},
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 25, 27},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 29, 36},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 37, 41},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 43, 45},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 46, 48}};
+ checkMixedFormattedValue(
+ message,
+ udtitvfmt_resultAsValue(fdi, &ec),
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ {
+ // Date across Julian Gregorian change date.
+ // We set the Gregorian Change way back.
+ ucal_setGregorianChange(ucal5, (UDate)(-8.64e15), &ec);
+ ucal_setGregorianChange(ucal4, (UDate)(-8.64e15), &ec);
+ ucal_setMillis(ucal4, Date158210140000, &ec);
+ ucal_setMillis(ucal5, Date158210160000, &ec);
+ const char* message = "Field position test 4";
+ // 1 2 3 4
+ // 012345678901234567890123456789012345678901234567890
+ const UChar* expectedString = u"14. Oktober 1582, 00:00 – 16. Oktober 1582, 00:00";
+ udtitvfmt_formatCalendarToResult(fmt, ucal4, ucal5, fdi, &ec);
+ assertSuccess("Formatting", &ec);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 0, 0, 23},
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 0, 2},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 4, 11},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 12, 16},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 18, 20},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 21, 23},
+ {UFIELD_CATEGORY_DATE_INTERVAL_SPAN, 1, 26, 49},
+ {UFIELD_CATEGORY_DATE, UDAT_DATE_FIELD, 26, 28},
+ {UFIELD_CATEGORY_DATE, UDAT_MONTH_FIELD, 30, 37},
+ {UFIELD_CATEGORY_DATE, UDAT_YEAR_FIELD, 38, 42},
+ {UFIELD_CATEGORY_DATE, UDAT_HOUR_OF_DAY0_FIELD, 44, 46},
+ {UFIELD_CATEGORY_DATE, UDAT_MINUTE_FIELD, 47, 49}};
+ checkMixedFormattedValue(
+ message,
+ udtitvfmt_resultAsValue(fdi, &ec),
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ ucal_close(ucal1);
+ ucal_close(ucal2);
+ ucal_close(ucal3);
+ ucal_close(ucal4);
+ ucal_close(ucal5);
udtitvfmt_close(fmt);
udtitvfmt_closeResult(fdi);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
index d5e3ba2ccd9..cded31edd5b 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
@@ -43,6 +43,7 @@ static void TestCalendarDateParse(void);
static void TestParseErrorReturnValue(void);
static void TestFormatForFields(void);
static void TestForceGannenNumbering(void);
+static void TestMapDateToCalFields(void);
void addDateForTest(TestNode** root);
@@ -63,6 +64,7 @@ void addDateForTest(TestNode** root)
TESTCASE(TestParseErrorReturnValue);
TESTCASE(TestFormatForFields);
TESTCASE(TestForceGannenNumbering);
+ TESTCASE(TestMapDateToCalFields);
}
/* Testing the DateFormat API */
static void TestDateFormat()
@@ -194,16 +196,21 @@ static void TestDateFormat()
}
/*format using fr */
- u_unescape("10 juil. 1996 \\u00E0 16:05:28 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", temp, 50);
+ u_unescape("10 juil. 1996, 16:05:28 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", temp, 50);
if(result != NULL) {
free(result);
result = NULL;
}
result=myDateFormat(fr, d);
- if(u_strcmp(result, temp)==0)
+ if(u_strcmp(result, temp)==0) {
log_verbose("PASS: Date Format for french locale successful using udat_format()\n");
- else
- log_data_err("FAIL: Date Format for french locale failed using udat_format().\n" );
+ } else {
+ char xbuf[2048];
+ char gbuf[2048];
+ u_austrcpy(xbuf, temp);
+ u_austrcpy(gbuf, result);
+ log_data_err("FAIL: Date Format for french locale failed using udat_format() - expected %s got %s\n", xbuf, gbuf);
+ }
/*format using it */
u_uastrcpy(temp, "10 lug 1996, 16:05:28");
@@ -1905,4 +1912,35 @@ static void TestForceGannenNumbering(void) {
udatpg_close(dtpgen);
}
}
+
+typedef struct {
+ UChar patternChar; // for future use
+ UDateFormatField dateField;
+ UCalendarDateFields calField;
+} PatternCharToFieldsItem;
+
+static const PatternCharToFieldsItem patCharToFieldsItems[] = {
+ { u'G', UDAT_ERA_FIELD, UCAL_ERA },
+ { u'y', UDAT_YEAR_FIELD, UCAL_YEAR },
+ { u'Y', UDAT_YEAR_WOY_FIELD, UCAL_YEAR_WOY },
+ { u'Q', UDAT_QUARTER_FIELD, UCAL_MONTH },
+ { u'H', UDAT_HOUR_OF_DAY0_FIELD, UCAL_HOUR_OF_DAY },
+ { u'r', UDAT_RELATED_YEAR_FIELD, UCAL_EXTENDED_YEAR },
+ { u'B', UDAT_FLEXIBLE_DAY_PERIOD_FIELD, UCAL_FIELD_COUNT },
+ { u'$', UDAT_FIELD_COUNT, UCAL_FIELD_COUNT },
+ { 0xFFFF, (UDateFormatField)-1, UCAL_FIELD_COUNT }, // patternChar ignored here
+ { (UChar)0, (UDateFormatField)0, (UCalendarDateFields)0 } // terminator
+};
+
+static void TestMapDateToCalFields(void){
+ const PatternCharToFieldsItem* itemPtr;
+ for ( itemPtr=patCharToFieldsItems; itemPtr->patternChar!=(UChar)0; itemPtr++) {
+ UCalendarDateFields calField = udat_toCalendarDateField(itemPtr->dateField);
+ if (calField != itemPtr->calField) {
+ log_err("for pattern char 0x%04X, dateField %d, expect calField %d and got %d\n",
+ itemPtr->patternChar, itemPtr->dateField, itemPtr->calField, calField);
+ }
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c
index f4e62b73906..f9c3ac38892 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c
@@ -41,6 +41,7 @@ void addURegionTest(TestNode** root);
void addUListFmtTest(TestNode** root);
void addUNumberFormatterTest(TestNode** root);
void addUFormattedValueTest(TestNode** root);
+void addUNumberRangeFormatterTest(TestNode** root);
void addFormatTest(TestNode** root);
@@ -65,6 +66,7 @@ void addFormatTest(TestNode** root)
addUListFmtTest(root);
addUNumberFormatterTest(root);
addUFormattedValueTest(root);
+ addUNumberRangeFormatterTest(root);
}
/*Internal functions used*/
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
index 498361392e1..b4364a69096 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
@@ -696,6 +696,12 @@ U_CFUNC UBool assertTrue(const char* msg, int /*not UBool*/ condition) {
U_CFUNC UBool assertEquals(const char* message, const char* expected,
const char* actual) {
+ if (expected == NULL) {
+ expected = "(null)";
+ }
+ if (actual == NULL) {
+ actual = "(null)";
+ }
if (uprv_strcmp(expected, actual) != 0) {
log_err("FAIL: %s; got \"%s\"; expected \"%s\"\n",
message, actual, expected);
@@ -711,6 +717,12 @@ U_CFUNC UBool assertEquals(const char* message, const char* expected,
U_CFUNC UBool assertUEquals(const char* message, const UChar* expected,
const UChar* actual) {
+ if (expected == NULL) {
+ expected = u"(null)";
+ }
+ if (actual == NULL) {
+ actual = u"(null)";
+ }
for (int32_t i=0;; i++) {
if (expected[i] != actual[i]) {
log_err("FAIL: %s; got \"%s\"; expected \"%s\"\n",
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj
index 9444d3a634d..251d4fde6bb 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -175,6 +159,7 @@
<ClCompile Include="ulistfmttest.c" />
<ClCompile Include="unumberformattertst.c" />
<ClCompile Include="uformattedvaluetst.c" />
+ <ClCompile Include="unumberrangeformattertst.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="cbiditst.h" />
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj.filters b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj.filters
index b541163663e..d39436d4451 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj.filters
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj.filters
@@ -225,6 +225,9 @@
<ClInclude Include="uformattedvaluetst.c">
<Filter>formatting</Filter>
</ClInclude>
+ <ClInclude Include="unumberrangeformattertst.c">
+ <Filter>formatting</Filter>
+ </ClInclude>
<ClCompile Include="cldrtest.c">
<Filter>locales &amp; resources</Filter>
</ClCompile>
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
index 87ae093c29c..e50ccb3cd1f 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
@@ -555,19 +555,18 @@ TestLocaleStructure(void) {
ures_close(currentLocale);
continue;
}
- ures_getStringByKey(currentLocale, "Version", NULL, &errorCode);
- if(errorCode != U_ZERO_ERROR) {
+ const UChar *version = ures_getStringByKey(currentLocale, "Version", NULL, &errorCode);
+ if(U_FAILURE(errorCode)) {
log_err("No version information is available for locale %s, and it should be!\n",
currLoc);
}
- else if (ures_getStringByKey(currentLocale, "Version", NULL, &errorCode)[0] == (UChar)(0x78)) {
- log_verbose("WARNING: The locale %s is experimental! It shouldn't be listed as an installed locale.\n",
- currLoc);
+ else if (version[0] == u'x') {
+ log_verbose("WARNING: The locale %s is experimental! "
+ "It shouldn't be listed as an installed locale.\n",
+ currLoc);
}
resolvedLoc = ures_getLocaleByType(currentLocale, ULOC_ACTUAL_LOCALE, &errorCode);
if (strcmp(resolvedLoc, currLoc) != 0) {
- /* All locales have at least a Version resource.
- If it's absolutely empty, then the previous test will fail too.*/
log_err("Locale resolves to different locale. Is %s an alias of %s?\n",
currLoc, resolvedLoc);
}
@@ -1092,11 +1091,11 @@ static void VerifyTranslation(void) {
if (U_FAILURE(errorCode)) {
log_err("ulocdata_getMeasurementSystem failed for locale %s with error: %s \n", currLoc, u_errorName(errorCode));
} else {
- if ( strstr(fullLoc, "_US")!=NULL || strstr(fullLoc, "_MM")!=NULL || strstr(fullLoc, "_LR")!=NULL ) {
+ if ( strstr(fullLoc, "_US")!=NULL || strstr(fullLoc, "_LR")!=NULL ) {
if(measurementSystem != UMS_US){
log_err("ulocdata_getMeasurementSystem did not return expected data for locale %s \n", currLoc);
}
- } else if ( strstr(fullLoc, "_GB")!=NULL ) {
+ } else if ( strstr(fullLoc, "_GB")!=NULL || strstr(fullLoc, "_MM")!=NULL ) {
if(measurementSystem != UMS_UK){
log_err("ulocdata_getMeasurementSystem did not return expected data for locale %s \n", currLoc);
}
@@ -1334,7 +1333,7 @@ static void TestCoverage(void){
status = U_ZERO_ERROR;
ulocdata_getDelimiter(uld, types[i], result, 32, &status);
if (U_FAILURE(status)){
- log_err("ulocdata_getgetDelimiter error with type %d", types[i]);
+ log_err("ulocdata_getDelimiter error with type %d", types[i]);
}
}
@@ -1343,6 +1342,49 @@ static void TestCoverage(void){
ulocdata_close(uld);
}
+typedef struct {
+ const char* locale;
+ const UChar* quoteStart;
+ const UChar* quoteEnd;
+} TestDelimitersItem;
+
+static const TestDelimitersItem testDelimsItems[] = {
+ { "fr_CA", u"«", u"»" }, // inherited from fr
+ { "de_CH", u"„", u"“" }, // inherited from de
+ { "es_MX", u"“", u"â€" }, // inherited from es_419
+ { "ja", u"「", u"ã€" },
+ { NULL, NULL, NULL }
+};
+
+enum { kUDelimMax = 8, kBDelimMax = 16 };
+static void TestDelimiters(void){
+ const TestDelimitersItem* itemPtr = testDelimsItems;
+ for (; itemPtr->locale != NULL; itemPtr++) {
+ UErrorCode status = U_ZERO_ERROR;
+ ULocaleData *uld = ulocdata_open(itemPtr->locale, &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ulocdata_open for locale %s fails: %s\n", itemPtr->locale, u_errorName(status));
+ } else {
+ UChar quoteStart[kUDelimMax], quoteEnd[kUDelimMax];
+ (void)ulocdata_getDelimiter(uld, ULOCDATA_QUOTATION_START, quoteStart, kUDelimMax, &status);
+ (void)ulocdata_getDelimiter(uld, ULOCDATA_QUOTATION_END, quoteEnd, kUDelimMax, &status);
+ if (U_FAILURE(status)) {
+ log_err("ulocdata_getDelimiter ULOCDATA_QUOTATION_START/END for locale %s fails: %s\n", itemPtr->locale, u_errorName(status));
+ } else if (u_strcmp(quoteStart,itemPtr->quoteStart)!=0 || u_strcmp(quoteEnd,itemPtr->quoteEnd)!=0) {
+ char expStart[kBDelimMax], expEnd[kBDelimMax], getStart[kBDelimMax], getEnd[kBDelimMax];
+ u_austrcpy(expStart, itemPtr->quoteStart);
+ u_austrcpy(expEnd, itemPtr->quoteEnd);
+ u_austrcpy(getStart, quoteStart);
+ u_austrcpy(getEnd, quoteEnd);
+ log_err("ulocdata_getDelimiter ULOCDATA_QUOTATION_START/END for locale %s, expect %s..%s, get %s..%s\n",
+ itemPtr->locale, expStart, expEnd, getStart, getEnd);
+ }
+ ulocdata_close(uld);
+ }
+ }
+}
+
+
static void TestIndexChars(void) {
/* Very basic test of ULOCDATA_ES_INDEX.
* No comprehensive test of data, just basic check that the code path is alive.
@@ -1532,6 +1574,7 @@ void addCLDRTest(TestNode** root)
TESTCASE(TestExemplarSet);
TESTCASE(TestLocaleDisplayPattern);
TESTCASE(TestCoverage);
+ TESTCASE(TestDelimiters);
TESTCASE(TestIndexChars);
TESTCASE(TestAvailableIsoCodes);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
index 0a1a0ae9f0c..61cfd4cb7cf 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
@@ -47,6 +47,8 @@ static void TestLocDataErrorCodeChaining(void);
static void TestLocDataWithRgTag(void);
static void TestLanguageExemplarsFallbacks(void);
static void TestDisplayNameBrackets(void);
+static void TestIllegalArgumentWhenNoDataWithNoSubstitute(void);
+static void Test21157CorrectTerminating(void);
static void TestUnicodeDefines(void);
@@ -55,6 +57,8 @@ static void TestBadLocaleIDs(void);
static void TestBug20370(void);
static void TestBug20321UnicodeLocaleKey(void);
+static void TestUsingDefaultWarning(void);
+
void PrintDataTable();
/*---------------------------------------------------
@@ -217,6 +221,7 @@ void addLocaleTest(TestNode** root)
TESTCASE(TestPrefixes);
TESTCASE(TestSimpleResourceInfo);
TESTCASE(TestDisplayNames);
+ TESTCASE(TestGetDisplayScriptPreFlighting21160);
TESTCASE(TestGetAvailableLocales);
TESTCASE(TestGetAvailableLocalesByType);
TESTCASE(TestDataDirectory);
@@ -240,6 +245,7 @@ void addLocaleTest(TestNode** root)
TESTCASE(TestGetLocale);
#endif
TESTCASE(TestDisplayNameWarning);
+ TESTCASE(Test21157CorrectTerminating);
TESTCASE(TestNonexistentLanguageExemplars);
TESTCASE(TestLocDataErrorCodeChaining);
TESTCASE(TestLocDataWithRgTag);
@@ -257,12 +263,14 @@ void addLocaleTest(TestNode** root)
TESTCASE(TestToLanguageTag);
TESTCASE(TestBug20132);
TESTCASE(TestBug20149);
+ TESTCASE(TestCDefaultLocale);
TESTCASE(TestForLanguageTag);
TESTCASE(TestLangAndRegionCanonicalize);
TESTCASE(TestTrailingNull);
TESTCASE(TestUnicodeDefines);
TESTCASE(TestEnglishExemplarCharacters);
TESTCASE(TestDisplayNameBrackets);
+ TESTCASE(TestIllegalArgumentWhenNoDataWithNoSubstitute);
TESTCASE(TestIsRightToLeft);
TESTCASE(TestToUnicodeLocaleKey);
TESTCASE(TestToLegacyKey);
@@ -271,6 +279,7 @@ void addLocaleTest(TestNode** root)
TESTCASE(TestBadLocaleIDs);
TESTCASE(TestBug20370);
TESTCASE(TestBug20321UnicodeLocaleKey);
+ TESTCASE(TestUsingDefaultWarning);
}
@@ -403,6 +412,10 @@ static void TestNullDefault() {
}
}
+ uloc_setDefault(original, &status);
+ if (U_FAILURE(status)) {
+ log_err("Failed to change the default locale back to %s\n", original);
+ }
}
/* Test the i- and x- and @ and . functionality
@@ -691,9 +704,19 @@ static void TestDisplayNames()
/* test that the default locale has a display name for its own language */
errorCode=U_ZERO_ERROR;
length=uloc_getDisplayLanguage(NULL, NULL, buffer, UPRV_LENGTHOF(buffer), &errorCode);
+ /* check <=3 to reject getting the language code as a display name */
if(U_FAILURE(errorCode) || (length<=3 && buffer[0]<=0x7f)) {
- /* check <=3 to reject getting the language code as a display name */
- log_data_err("unable to get a display string for the language of the default locale - %s (Are you missing data?)\n", u_errorName(errorCode));
+ const char* defaultLocale = uloc_getDefault();
+ for (int32_t i = 0, count = uloc_countAvailable(); i < count; i++) {
+ /* Only report error if the default locale is in the available list */
+ if (uprv_strcmp(defaultLocale, uloc_getAvailable(i)) == 0) {
+ log_data_err(
+ "unable to get a display string for the language of the "
+ "default locale - %s (Are you missing data?)\n",
+ u_errorName(errorCode));
+ break;
+ }
+ }
}
/* test that we get the language code itself for an unknown language, and a default warning */
@@ -808,6 +831,26 @@ static void TestDisplayNames()
}
}
+/**
+ * ICU-21160 test the pre-flighting call to uloc_getDisplayScript returns the actual length needed
+ * for the result buffer.
+ */
+static void TestGetDisplayScriptPreFlighting21160()
+{
+ const char* locale = "und-Latn";
+ const char* inlocale = "de";
+
+ UErrorCode ec = U_ZERO_ERROR;
+ UChar* result = NULL;
+ int32_t length = uloc_getDisplayScript(locale, inlocale, NULL, 0, &ec) + 1;
+ ec = U_ZERO_ERROR;
+ result=(UChar*)malloc(sizeof(UChar) * length);
+ length = uloc_getDisplayScript(locale, inlocale, result, length, &ec);
+ if (U_FAILURE(ec)) {
+ log_err("uloc_getDisplayScript length %d returned error %s", length, u_errorName(ec));
+ }
+ free(result);
+}
/* test for uloc_getAvialable() and uloc_countAvilable()*/
static void TestGetAvailableLocales()
@@ -1195,6 +1238,72 @@ static void TestDisplayNameBrackets()
}
/*------------------------------
+ * TestIllegalArgumentWhenNoDataWithNoSubstitute
+ */
+
+static void TestIllegalArgumentWhenNoDataWithNoSubstitute()
+{
+#if !UCONFIG_NO_FORMATTING
+ UErrorCode status = U_ZERO_ERROR;
+ UChar getName[kDisplayNameBracketsMax];
+ UDisplayContext contexts[] = {
+ UDISPCTX_NO_SUBSTITUTE,
+ };
+ ULocaleDisplayNames* ldn = uldn_openForContext("en", contexts, 1, &status);
+
+ uldn_localeDisplayName(ldn, "efg", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_localeDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ status = U_ZERO_ERROR;
+ uldn_languageDisplayName(ldn, "zz", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_languageDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ status = U_ZERO_ERROR;
+ uldn_scriptDisplayName(ldn, "Aaaa", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_scriptDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ status = U_ZERO_ERROR;
+ uldn_regionDisplayName(ldn, "KK", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_regionDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ status = U_ZERO_ERROR;
+ uldn_variantDisplayName(ldn, "ZZ", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_variantDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ status = U_ZERO_ERROR;
+ uldn_keyDisplayName(ldn, "zz", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_keyDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ status = U_ZERO_ERROR;
+ uldn_keyValueDisplayName(ldn, "ca", "zz", getName, kDisplayNameBracketsMax, &status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("FAIL uldn_keyValueDisplayName should return U_ILLEGAL_ARGUMENT_ERROR "
+ "while no resource under UDISPCTX_NO_SUBSTITUTE");
+ }
+
+ uldn_close(ldn);
+#endif
+}
+
+/*------------------------------
* TestISOFunctions
*/
@@ -2988,30 +3097,33 @@ static void TestAcceptLanguage(void) {
} tests[] = {
/*0*/{ 0, NULL, "mt_MT", ULOC_ACCEPT_VALID, U_ZERO_ERROR},
/*1*/{ 1, NULL, "en", ULOC_ACCEPT_VALID, U_ZERO_ERROR},
- /*2*/{ 2, NULL, "en", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR},
+ /*2*/{ 2, NULL, "en_GB", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR},
/*3*/{ 3, NULL, "", ULOC_ACCEPT_FAILED, U_ZERO_ERROR},
/*4*/{ 4, NULL, "es", ULOC_ACCEPT_VALID, U_ZERO_ERROR},
- /*5*/{ 5, NULL, "en", ULOC_ACCEPT_VALID, U_ZERO_ERROR}, /* XF */
+ /*5*/{ 5, NULL, "zh", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR}, /* XF */
/*6*/{ 6, NULL, "ja", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR}, /* XF */
/*7*/{ 7, NULL, "zh", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR}, /* XF */
- /*8*/{ 8, NULL, "", ULOC_ACCEPT_FAILED, U_ZERO_ERROR }, /* */
- /*9*/{ 9, NULL, "", ULOC_ACCEPT_FAILED, U_ZERO_ERROR }, /* */
- /*10*/{10, NULL, "", ULOC_ACCEPT_FAILED, U_BUFFER_OVERFLOW_ERROR }, /* */
- /*11*/{11, NULL, "", ULOC_ACCEPT_FAILED, U_BUFFER_OVERFLOW_ERROR }, /* */
+ /*8*/{ 8, NULL, "", ULOC_ACCEPT_FAILED, U_ILLEGAL_ARGUMENT_ERROR }, /* */
+ /*9*/{ 9, NULL, "", ULOC_ACCEPT_FAILED, U_ILLEGAL_ARGUMENT_ERROR }, /* */
+ /*10*/{10, NULL, "", ULOC_ACCEPT_FAILED, U_ILLEGAL_ARGUMENT_ERROR }, /* */
+ /*11*/{11, NULL, "", ULOC_ACCEPT_FAILED, U_ILLEGAL_ARGUMENT_ERROR }, /* */
};
const int32_t numTests = UPRV_LENGTHOF(tests);
static const char *http[] = {
- /*0*/ "mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53, th-th-traditional;q=.01",
+ /*0*/ "mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, "
+ "iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, "
+ "es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, "
+ "nl-nl;q=0.55, nl;q=0.53, th-th-traditional;q=0.01",
/*1*/ "ja;q=0.5, en;q=0.8, tlh",
/*2*/ "en-wf, de-lx;q=0.8",
- /*3*/ "mga-ie;q=0.9, tlh",
- /*4*/ "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
- "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
- "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
- "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
- "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
- "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "
- "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xx-yy;q=.1, "
+ /*3*/ "mga-ie;q=0.9, sux",
+ /*4*/ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, "
+ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, "
+ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, "
+ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, "
+ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, "
+ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, "
+ "xxx-yyy;q=0.01, xxx-yyy;q=0.01, xxx-yyy;q=0.01, xx-yy;q=0.1, "
"es",
/*5*/ "zh-xx;q=0.9, en;q=0.6",
/*6*/ "ja-JA",
@@ -3042,12 +3154,17 @@ static void TestAcceptLanguage(void) {
available = ures_openAvailableLocales(tests[i].icuSet, &status);
tmp[0]=0;
- rc = uloc_acceptLanguageFromHTTP(tmp, 199, &outResult, http[tests[i].httpSet], available, &status);
+ rc = uloc_acceptLanguageFromHTTP(tmp, 199, &outResult,
+ http[tests[i].httpSet], available, &status);
(void)rc; /* Suppress set but not used warning. */
uenum_close(available);
- log_verbose(" got %s, %s [%s]\n", tmp[0]?tmp:"(EMPTY)", acceptResult(outResult), u_errorName(status));
+ log_verbose(" got %s, %s [%s]\n",
+ tmp[0]?tmp:"(EMPTY)", acceptResult(outResult), u_errorName(status));
if(status != tests[i].expectStatus) {
- log_err_status(status, "FAIL: expected status %s but got %s\n", u_errorName(tests[i].expectStatus), u_errorName(status));
+ log_err_status(status,
+ "FAIL: expected status %s but got %s\n",
+ u_errorName(tests[i].expectStatus),
+ u_errorName(status));
} else if(U_SUCCESS(tests[i].expectStatus)) {
/* don't check content if expected failure */
if(outResult != tests[i].res) {
@@ -3055,10 +3172,13 @@ static void TestAcceptLanguage(void) {
acceptResult( tests[i].res),
acceptResult( outResult));
log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n",
- i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect,acceptResult(tests[i].res));
+ i, http[tests[i].httpSet], tests[i].icuSet,
+ tests[i].expect,acceptResult(tests[i].res));
}
if((outResult>0)&&uprv_strcmp(tmp, tests[i].expect)) {
- log_err_status(status, "FAIL: #%d: expected %s but got %s\n", i, tests[i].expect, tmp);
+ log_err_status(status,
+ "FAIL: #%d: expected %s but got %s\n",
+ i, tests[i].expect, tmp);
log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n",
i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res));
}
@@ -3642,7 +3762,7 @@ const char* const basic_minimize_data[][2] = {
"de_Latn_DE_POSIX_1901",
"de__POSIX_1901"
}, {
- "",
+ "zzz",
""
}, {
"en_Latn_US@calendar=gregorian",
@@ -6029,7 +6149,10 @@ const char* const locale_to_langtag[][3] = {
{"aa_BB_CYRL", "aa-BB-x-lvariant-cyrl", NULL},
{"en_US_1234", "en-US-1234", "en-US-1234"},
{"en_US_VARIANTA_VARIANTB", "en-US-varianta-variantb", "en-US-varianta-variantb"},
- {"ja__9876_5432", "ja-9876-5432", "ja-9876-5432"},
+ {"en_US_VARIANTB_VARIANTA", "en-US-varianta-variantb", "en-US-varianta-variantb"}, /* ICU-20478 */
+ {"ja__9876_5432", "ja-5432-9876", "ja-5432-9876"}, /* ICU-20478 */
+ {"sl__ROZAJ_BISKE_1994", "sl-1994-biske-rozaj", "sl-1994-biske-rozaj"}, /* ICU-20478 */
+ {"en__SCOUSE_FONIPA", "en-fonipa-scouse", "en-fonipa-scouse"}, /* ICU-20478 */
{"zh_Hant__VAR", "zh-Hant-x-lvariant-var", NULL},
{"es__BADVARIANT_GOODVAR", "es-goodvar", NULL},
{"en@calendar=gregorian", "en-u-ca-gregory", "en-u-ca-gregory"},
@@ -6059,6 +6182,14 @@ const char* const locale_to_langtag[][3] = {
// The following now uses standard canonicalization.
{"az_AZ_CYRL", "az-AZ-x-lvariant-cyrl", NULL},
+
+ /* ICU-20310 */
+ {"en-u-kn-true", "en-u-kn", "en-u-kn"},
+ {"en-u-kn", "en-u-kn", "en-u-kn"},
+ {"de-u-co-yes", "de-u-co", "de-u-co"},
+ {"de-u-co", "de-u-co", "de-u-co"},
+ {"de@collation=yes", "de-u-co", "de-u-co"},
+ {"cmn-hans-cn-u-ca-t-ca-x-t-u", "cmn-Hans-CN-t-ca-u-ca-x-t-u", "cmn-Hans-CN-t-ca-u-ca-x-t-u"},
{NULL, NULL, NULL}
};
@@ -6187,7 +6318,16 @@ static const struct {
{"bogus", "bogus", FULL_LENGTH},
{"boguslang", "", 0},
{"EN-lATN-us", "en_Latn_US", FULL_LENGTH},
- {"und-variant-1234", "__VARIANT_1234", FULL_LENGTH},
+ {"und-variant-1234", "__1234_VARIANT", FULL_LENGTH}, /* ICU-20478 */
+ {"ja-9876-5432", "ja__5432_9876", FULL_LENGTH}, /* ICU-20478 */
+ {"en-US-varianta-variantb", "en_US_VARIANTA_VARIANTB", FULL_LENGTH}, /* ICU-20478 */
+ {"en-US-variantb-varianta", "en_US_VARIANTA_VARIANTB", FULL_LENGTH}, /* ICU-20478 */
+ {"sl-rozaj-1994-biske", "sl__1994_BISKE_ROZAJ", FULL_LENGTH}, /* ICU-20478 */
+ {"sl-biske-1994-rozaj", "sl__1994_BISKE_ROZAJ", FULL_LENGTH}, /* ICU-20478 */
+ {"sl-1994-rozaj-biske", "sl__1994_BISKE_ROZAJ", FULL_LENGTH}, /* ICU-20478 */
+ {"sl-rozaj-biske-1994", "sl__1994_BISKE_ROZAJ", FULL_LENGTH}, /* ICU-20478 */
+ {"en-fonipa-scouse", "en__FONIPA_SCOUSE", FULL_LENGTH}, /* ICU-20478 */
+ {"en-scouse-fonipa", "en__FONIPA_SCOUSE", FULL_LENGTH}, /* ICU-20478 */
{"und-varzero-var1-vartwo", "__VARZERO", 11},
{"en-u-ca-gregory", "en@calendar=gregorian", FULL_LENGTH},
{"en-U-cu-USD", "en@currency=usd", FULL_LENGTH},
@@ -6534,17 +6674,163 @@ static void TestToLegacyType(void)
-static void test_unicode_define(const char *namech, char ch, const char *nameu, UChar uch)
+static void test_unicode_define(const char *namech, char ch,
+ const char *nameu, UChar uch)
{
- UChar asUch[1];
- asUch[0]=0;
- log_verbose("Testing whether %s[\\x%02x,'%c'] == %s[U+%04X]\n", namech, ch,(int)ch, nameu, (int) uch);
- u_charsToUChars(&ch, asUch, 1);
- if(asUch[0] != uch) {
- log_err("FAIL: %s[\\x%02x,'%c'] maps to U+%04X, but %s = U+%04X\n", namech, ch, (int)ch, (int)asUch[0], nameu, (int)uch);
- } else {
- log_verbose(" .. OK, == U+%04X\n", (int)asUch[0]);
- }
+ UChar asUch[1];
+ asUch[0]=0;
+ log_verbose("Testing whether %s[\\x%02x,'%c'] == %s[U+%04X]\n",
+ namech, ch,(int)ch, nameu, (int) uch);
+ u_charsToUChars(&ch, asUch, 1);
+ if(asUch[0] != uch) {
+ log_err("FAIL: %s[\\x%02x,'%c'] maps to U+%04X, but %s = U+%04X\n",
+ namech, ch, (int)ch, (int)asUch[0], nameu, (int)uch);
+ } else {
+ log_verbose(" .. OK, == U+%04X\n", (int)asUch[0]);
+ }
+}
+
+static void checkTerminating(const char* locale, const char* inLocale)
+{
+ UErrorCode status = U_ZERO_ERROR;
+ int32_t preflight_length = uloc_getDisplayName(
+ locale, inLocale, NULL, 0, &status);
+ if (status != U_BUFFER_OVERFLOW_ERROR) {
+ log_err("uloc_getDisplayName(%s, %s) preflight failed",
+ locale, inLocale);
+ }
+ UChar buff[256];
+ const UChar sentinel1 = 0x6C38; // æ°¸- a Han unicode as sentinel.
+ const UChar sentinel2 = 0x92D2; // é‹’- a Han unicode as sentinel.
+
+ // 1. Test when we set the maxResultSize to preflight_length + 1.
+ // Set sentinel1 in the buff[preflight_length-1] to check it will be
+ // replaced with display name.
+ buff[preflight_length-1] = sentinel1;
+ // Set sentinel2 in the buff[preflight_length] to check it will be
+ // replaced by null.
+ buff[preflight_length] = sentinel2;
+ // It should be properly null terminated at buff[preflight_length].
+ status = U_ZERO_ERROR;
+ int32_t length = uloc_getDisplayName(
+ locale, inLocale, buff, preflight_length + 1, &status);
+ const char* result = U_SUCCESS(status) ?
+ aescstrdup(buff, length) : "(undefined when failure)";
+ if (length != preflight_length) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length+1 returns "
+ "length %d different from preflight length %d. Returns '%s'\n",
+ locale, inLocale, length, preflight_length, result);
+ }
+ if (U_ZERO_ERROR != status) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length+1 should "
+ "set status to U_ZERO_ERROR but got %d %s. Returns %s\n",
+ locale, inLocale, status, myErrorName(status), result);
+ }
+ if (buff[length-1] == sentinel1) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length+1 does "
+ "not change memory in the end of buffer while it should. "
+ "Returns %s\n",
+ locale, inLocale, result);
+ }
+ if (buff[length] != 0x0000) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length+1 should "
+ "null terminate at buff[length] but does not %x. Returns %s\n",
+ locale, inLocale, buff[length], result);
+ }
+
+ // 2. Test when we only set the maxResultSize to preflight_length.
+
+ // Set sentinel1 in the buff[preflight_length-1] to check it will be
+ // replaced with display name.
+ buff[preflight_length-1] = sentinel1;
+ // Set sentinel2 in the buff[preflight_length] to check it won't be replaced
+ // by null.
+ buff[preflight_length] = sentinel2;
+ status = U_ZERO_ERROR;
+ length = uloc_getDisplayName(
+ locale, inLocale, buff, preflight_length, &status);
+ result = U_SUCCESS(status) ?
+ aescstrdup(buff, length) : "(undefined when failure)";
+
+ if (length != preflight_length) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length return "
+ "length %d different from preflight length %d. Returns '%s'\n",
+ locale, inLocale, length, preflight_length, result);
+ }
+ if (U_STRING_NOT_TERMINATED_WARNING != status) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length should "
+ "set status to U_STRING_NOT_TERMINATED_WARNING but got %d %s. "
+ "Returns %s\n",
+ locale, inLocale, status, myErrorName(status), result);
+ }
+ if (buff[length-1] == sentinel1) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length does not "
+ "change memory in the end of buffer while it should. Returns "
+ "'%s'\n",
+ locale, inLocale, result);
+ }
+ if (buff[length] != sentinel2) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length change "
+ "memory beyond maxResultSize to %x. Returns '%s'\n",
+ locale, inLocale, buff[length], result);
+ }
+ if (buff[preflight_length - 1] == 0x0000) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length null "
+ "terminated while it should not. Return '%s'\n",
+ locale, inLocale, result);
+ }
+
+ // 3. Test when we only set the maxResultSize to preflight_length-1.
+ // Set sentinel1 in the buff[preflight_length-1] to check it will not be
+ // replaced with display name.
+ buff[preflight_length-1] = sentinel1;
+ // Set sentinel2 in the buff[preflight_length] to check it won't be replaced
+ // by null.
+ buff[preflight_length] = sentinel2;
+ status = U_ZERO_ERROR;
+ length = uloc_getDisplayName(
+ locale, inLocale, buff, preflight_length - 1, &status);
+ result = U_SUCCESS(status) ?
+ aescstrdup(buff, length) : "(undefined when failure)";
+
+ if (length != preflight_length) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length-1 return "
+ "length %d different from preflight length %d. Returns '%s'\n",
+ locale, inLocale, length, preflight_length, result);
+ }
+ if (U_BUFFER_OVERFLOW_ERROR != status) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length-1 should "
+ "set status to U_BUFFER_OVERFLOW_ERROR but got %d %s. "
+ "Returns %s\n",
+ locale, inLocale, status, myErrorName(status), result);
+ }
+ if (buff[length-1] != sentinel1) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length-1 should "
+ "not change memory in beyond the maxResultSize. Returns '%s'\n",
+ locale, inLocale, result);
+ }
+ if (buff[length] != sentinel2) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length-1 change "
+ "memory beyond maxResultSize to %x. Returns '%s'\n",
+ locale, inLocale, buff[length], result);
+ }
+ if (buff[preflight_length - 2] == 0x0000) {
+ log_err("uloc_getDisplayName(%s, %s) w/ maxResultSize=length-1 null "
+ "terminated while it should not. Return '%s'\n",
+ locale, inLocale, result);
+ }
+}
+
+static void Test21157CorrectTerminating(void) {
+ checkTerminating("fr", "fr");
+ checkTerminating("fr_BE", "fr");
+ checkTerminating("fr_Latn_BE", "fr");
+ checkTerminating("fr_Latn", "fr");
+ checkTerminating("fr", "fr");
+ checkTerminating("fr-CN", "fr");
+ checkTerminating("fr-Hant-CN", "fr");
+ checkTerminating("fr-Hant", "fr");
+ checkTerminating("zh-u-co-pinyin", "fr");
}
#define TEST_UNICODE_DEFINE(x,y) test_unicode_define(#x, (char)(x), #y, (UChar)(y))
@@ -6623,3 +6909,87 @@ static void TestBug20149() {
log_err("ERROR: in uloc_forLanguageTag %s return %s\n", myErrorName(status), locale);
}
}
+
+static void TestUsingDefaultWarning() {
+ UChar buff[256];
+ char errorOutputBuff[256];
+ UErrorCode status = U_ZERO_ERROR;
+ const char* language = "jJj";
+ int32_t length = uloc_getDisplayLanguage(language, "de", buff, 256, &status);
+ if (status != U_USING_DEFAULT_WARNING ||
+ u_strcmp(buff, u"jjj") != 0 ||
+ length != 3) {
+ u_UCharsToChars(buff, errorOutputBuff, length+1);
+ log_err("ERROR: in uloc_getDisplayLanguage %s return len:%d %s with status %d %s\n",
+ language, length, errorOutputBuff, status, myErrorName(status));
+ }
+
+ status = U_ZERO_ERROR;
+ const char* script = "und-lALA";
+ length = uloc_getDisplayScript(script, "de", buff, 256, &status);
+ if (status != U_USING_DEFAULT_WARNING ||
+ u_strcmp(buff, u"Lala") != 0 ||
+ length != 4) {
+ u_UCharsToChars(buff, errorOutputBuff, length+1);
+ log_err("ERROR: in uloc_getDisplayScript %s return len:%d %s with status %d %s\n",
+ script, length, errorOutputBuff, status, myErrorName(status));
+ }
+
+ status = U_ZERO_ERROR;
+ const char* region = "und-wt";
+ length = uloc_getDisplayCountry(region, "de", buff, 256, &status);
+ if (status != U_USING_DEFAULT_WARNING ||
+ u_strcmp(buff, u"WT") != 0 ||
+ length != 2) {
+ u_UCharsToChars(buff, errorOutputBuff, length+1);
+ log_err("ERROR: in uloc_getDisplayCountry %s return len:%d %s with status %d %s\n",
+ region, length, errorOutputBuff, status, myErrorName(status));
+ }
+
+ status = U_ZERO_ERROR;
+ const char* variant = "und-abcde";
+ length = uloc_getDisplayVariant(variant, "de", buff, 256, &status);
+ if (status != U_USING_DEFAULT_WARNING ||
+ u_strcmp(buff, u"ABCDE") != 0 ||
+ length != 5) {
+ u_UCharsToChars(buff, errorOutputBuff, length+1);
+ log_err("ERROR: in uloc_getDisplayVariant %s return len:%d %s with status %d %s\n",
+ variant, length, errorOutputBuff, status, myErrorName(status));
+ }
+
+ status = U_ZERO_ERROR;
+ const char* keyword = "postCODE";
+ length = uloc_getDisplayKeyword(keyword, "de", buff, 256, &status);
+ if (status != U_USING_DEFAULT_WARNING ||
+ u_strcmp(buff, u"postCODE") != 0 ||
+ length != 8) {
+ u_UCharsToChars(buff, errorOutputBuff, length+1);
+ log_err("ERROR: in uloc_getDisplayKeyword %s return len:%d %s with status %d %s\n",
+ keyword, length, errorOutputBuff, status, myErrorName(status));
+ }
+
+ status = U_ZERO_ERROR;
+ const char* keyword_value = "de_DE@postCode=fOObAR";
+ length = uloc_getDisplayKeywordValue(keyword_value, keyword, "de", buff, 256, &status);
+ if (status != U_USING_DEFAULT_WARNING ||
+ u_strcmp(buff, u"fOObAR") != 0 ||
+ length != 6) {
+ u_UCharsToChars(buff, errorOutputBuff, length+1);
+ log_err("ERROR: in uloc_getDisplayKeywordValue %s %s return len:%d %s with status %d %s\n",
+ keyword_value, keyword, length, errorOutputBuff, status, myErrorName(status));
+ }
+}
+// Test case for ICU-20575
+// This test checks if the environment variable LANG is set,
+// and if so ensures that both C and C.UTF-8 cause ICU's default locale to be en_US_POSIX.
+static void TestCDefaultLocale(){
+ const char *defaultLocale = uloc_getDefault();
+ char *env_var = getenv("LANG");
+ if (env_var == NULL) {
+ log_verbose("Skipping TestCDefaultLocale test, as the LANG variable is not set.");
+ return;
+ }
+ if ((strcmp(env_var, "C") == 0 || strcmp(env_var, "C.UTF-8") == 0) && strcmp(defaultLocale, "en_US_POSIX") != 0) {
+ log_err("The default locale for LANG=%s should be en_US_POSIX, not %s\n", env_var, defaultLocale);
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
index be61de10ba8..af7fa5d06a3 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
@@ -33,6 +33,8 @@ static void TestSimpleResourceInfo(void);
* Use Locale to access Resource file display names and compare against expected values
**/
static void TestDisplayNames(void);
+static void TestGetDisplayScriptPreFlighting21160(void);
+
/**
* Test getAvailableLocales
**/
@@ -122,6 +124,11 @@ static void TestOrientation(void);
static void TestLikelySubtags(void);
/**
+ * test terminate correctly.
+ */
+static void Test21157CorrectTerminating(void);
+
+/**
* language tag
*/
static void TestForLanguageTag(void);
@@ -134,6 +141,13 @@ static void TestToLegacyKey(void);
static void TestToUnicodeLocaleType(void);
static void TestToLegacyType(void);
static void TestBug20149(void);
+static void TestCDefaultLocale(void);
+
+
+/**
+ * U_USING_DEFAULT_WARNING
+ */
+static void TestUsingDefaultWarning(void);
/**
* locale data
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
index bc7a7664c49..9f4dae438e2 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
@@ -3212,7 +3212,7 @@ static void TestSeparateTrees(void) {
}
/*
-U_DRAFT int32_t U_EXPORT2
+U_CAPI int32_t U_EXPORT2
ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity,
const char* locale, UBool* isAvailable,
UErrorCode* status);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
index a40db7c49db..99a9ce23be7 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
@@ -419,7 +419,7 @@ static void TestCurrency(void)
UChar res[100];
UErrorCode status = U_ZERO_ERROR;
const char* locale[]={"fr_CA", "de_DE@currency=DEM", "fr_FR@currency=FRF"};
- const char* result[]={"1,50\\u00a0$", "1,50\\u00a0DM", "1,50\\u00a0F"};
+ const char* result[]={"1,50\\u00a0$\\u00a0CA", "1,50\\u00a0DM", "1,50\\u00a0F"};
log_verbose("\nTesting the number format with different currency patterns\n");
for(i=0; i < 3; i++)
{
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
index dbbac083b93..daeff15b20a 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
@@ -74,6 +74,7 @@ static void TestParseCases(void);
static void TestSetMaxFracAndRoundIncr(void);
static void TestIgnorePadding(void);
static void TestSciNotationMaxFracCap(void);
+static void TestMinIntMinFracZero(void);
#define TESTCASE(x) addTest(root, &x, "tsformat/cnumtst/" #x)
@@ -114,6 +115,7 @@ void addNumForTest(TestNode** root)
TESTCASE(TestSetMaxFracAndRoundIncr);
TESTCASE(TestIgnorePadding);
TESTCASE(TestSciNotationMaxFracCap);
+ TESTCASE(TestMinIntMinFracZero);
}
/* test Parse int 64 */
@@ -3475,4 +3477,103 @@ static void TestSciNotationMaxFracCap(void) {
}
}
+static void TestMinIntMinFracZero(void) {
+ UErrorCode status = U_ZERO_ERROR;
+ UNumberFormat* unum = unum_open(UNUM_DECIMAL, NULL, 0, "en_US", NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_data_err("unum_open UNUM_DECIMAL for en_US fails with %s\n", u_errorName(status));
+ } else {
+ UChar ubuf[kUBufMax];
+ char bbuf[kBBufMax];
+ int minInt, minFrac, ulen;
+
+ unum_setAttribute(unum, UNUM_MIN_INTEGER_DIGITS, 0);
+ unum_setAttribute(unum, UNUM_MIN_FRACTION_DIGITS, 0);
+ minInt = unum_getAttribute(unum, UNUM_MIN_INTEGER_DIGITS);
+ minFrac = unum_getAttribute(unum, UNUM_MIN_FRACTION_DIGITS);
+ if (minInt != 0 || minFrac != 0) {
+ log_err("after setting minInt=minFrac=0, get minInt %d, minFrac %d\n", minInt, minFrac);
+ }
+
+ ulen = unum_toPattern(unum, FALSE, ubuf, kUBufMax, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_toPattern fails with %s\n", u_errorName(status));
+ } else if (ulen < 3 || u_strstr(ubuf, u"#.#")==NULL) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_info("after setting minInt=minFrac=0, expect pattern to contain \"#.#\", but get (%d): \"%s\"\n", ulen, bbuf);
+ }
+
+ status = U_ZERO_ERROR;
+ ulen = unum_formatDouble(unum, 10.0, ubuf, kUBufMax, NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_formatDouble 10.0 ulen %d fails with %s\n", ulen, u_errorName(status));
+ } else if (u_strcmp(ubuf, u"10") != 0) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_err("unum_formatDouble 10.0 expected \"10\", got \"%s\"\n", bbuf);
+ }
+
+ status = U_ZERO_ERROR;
+ ulen = unum_formatDouble(unum, 0.9, ubuf, kUBufMax, NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_formatDouble 0.9 ulen %d fails with %s\n", ulen, u_errorName(status));
+ } else if (u_strcmp(ubuf, u".9") != 0) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_err("unum_formatDouble 0.9 expected \".9\", got \"%s\"\n", bbuf);
+ }
+
+ status = U_ZERO_ERROR;
+ ulen = unum_formatDouble(unum, 0.0, ubuf, kUBufMax, NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_formatDouble 0.0 ulen %d fails with %s\n", ulen, u_errorName(status));
+ } else if (u_strcmp(ubuf, u"0") != 0) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_err("unum_formatDouble 0.0 expected \"0\", got \"%s\"\n", bbuf);
+ }
+
+ unum_close(unum);
+ status = U_ZERO_ERROR;
+ unum = unum_open(UNUM_CURRENCY, NULL, 0, "en_US", NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_data_err("unum_open UNUM_CURRENCY for en_US fails with %s\n", u_errorName(status));
+ } else {
+ unum_setAttribute(unum, UNUM_MIN_INTEGER_DIGITS, 0);
+ unum_setAttribute(unum, UNUM_MIN_FRACTION_DIGITS, 0);
+ minInt = unum_getAttribute(unum, UNUM_MIN_INTEGER_DIGITS);
+ minFrac = unum_getAttribute(unum, UNUM_MIN_FRACTION_DIGITS);
+ if (minInt != 0 || minFrac != 0) {
+ log_err("after setting CURRENCY minInt=minFrac=0, get minInt %d, minFrac %d\n", minInt, minFrac);
+ }
+
+ status = U_ZERO_ERROR;
+ ulen = unum_formatDouble(unum, 10.0, ubuf, kUBufMax, NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_formatDouble (CURRRENCY) 10.0 ulen %d fails with %s\n", ulen, u_errorName(status));
+ } else if (u_strcmp(ubuf, u"$10") != 0) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_err("unum_formatDouble (CURRRENCY) 10.0 expected \"$10\", got \"%s\"\n", bbuf);
+ }
+
+ status = U_ZERO_ERROR;
+ ulen = unum_formatDouble(unum, 0.9, ubuf, kUBufMax, NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_formatDouble (CURRRENCY) 0.9 ulen %d fails with %s\n", ulen, u_errorName(status));
+ } else if (u_strcmp(ubuf, u"$.9") != 0) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_err("unum_formatDouble (CURRRENCY) 0.9 expected \"$.9\", got \"%s\"\n", bbuf);
+ }
+
+ status = U_ZERO_ERROR;
+ ulen = unum_formatDouble(unum, 0.0, ubuf, kUBufMax, NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("unum_formatDouble (CURRRENCY) 0.0 ulen %d fails with %s\n", ulen, u_errorName(status));
+ } else if (u_strcmp(ubuf, u"$0") != 0) {
+ u_austrncpy(bbuf, ubuf, kUBufMax);
+ log_err("unum_formatDouble (CURRRENCY) 0.0 expected \"$0\", got \"%s\"\n", bbuf);
+ }
+
+ unum_close(unum);
+ }
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c
index 8db9d1fb889..e695154eee6 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c
@@ -14,6 +14,7 @@
#include "unicode/ustring.h"
#include "unicode/uenum.h"
#include "unicode/unumberformatter.h"
+#include "unicode/unumberrangeformatter.h"
#include "cintltst.h"
#include "cmemory.h"
#include "cstring.h"
@@ -22,6 +23,7 @@ static void TestPluralRules(void);
static void TestOrdinalRules(void);
static void TestGetKeywords(void);
static void TestFormatted(void);
+static void TestSelectRange(void);
void addPluralRulesTest(TestNode** root);
@@ -33,6 +35,7 @@ void addPluralRulesTest(TestNode** root)
TESTCASE(TestOrdinalRules);
TESTCASE(TestGetKeywords);
TESTCASE(TestFormatted);
+ TESTCASE(TestSelectRange);
}
typedef struct {
@@ -180,7 +183,7 @@ typedef struct {
static const KeywordsForLang getKeywordsItems[] = {
{ "zh", { "other" } },
{ "en", { "one", "other" } },
- { "fr", { "one", "other" } },
+ { "fr", { "one", "many", "other" } },
{ "lv", { "zero", "one", "other" } },
{ "hr", { "one", "few", "other" } },
{ "sl", { "one", "two", "few", "other" } },
@@ -295,4 +298,56 @@ cleanup:
unumf_closeResult(uresult);
}
+static void TestSelectRange() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UNumberRangeFormatter* unumrf = NULL;
+ UFormattedNumberRange* uresult = NULL;
+ UPluralRules* uplrules = NULL;
+
+ int32_t d1 = 102;
+ int32_t d2 = 201;
+
+ // Locale sl has interesting data: one + two => few
+ uplrules = uplrules_open("sl", &ec);
+ if (!assertSuccess("open plural rules", &ec)) {
+ goto cleanup;
+ }
+
+ unumrf = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u"",
+ 0,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "sl",
+ NULL,
+ &ec);
+ if (!assertSuccess("open unumrf", &ec)) {
+ goto cleanup;
+ }
+
+ uresult = unumrf_openResult(&ec);
+ if (!assertSuccess("open result", &ec)) {
+ goto cleanup;
+ }
+
+ unumrf_formatDoubleRange(unumrf, d1, d2, uresult, &ec);
+ if (!assertSuccess("format", &ec)) {
+ goto cleanup;
+ }
+
+ UChar buffer[40];
+ int32_t len = uplrules_selectForRange(uplrules, uresult, buffer, 40, &ec);
+ if (!assertSuccess("select", &ec)) {
+ goto cleanup;
+ }
+
+ assertUEquals("102-201 is plural category 'few' in sl", u"few", buffer);
+ assertIntEquals("Length should be as expected", u_strlen(buffer), len);
+
+cleanup:
+ uplrules_close(uplrules);
+ unumrf_close(unumrf);
+ unumrf_closeResult(uresult);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
index b7af6eacd7f..080301090d1 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
@@ -149,6 +149,15 @@ void TestAliasConflict(void) {
void TestResourceBundles()
{
+ // The test expectation only works if the default locale is not one of the
+ // locale bundle in the testdata which have those info. Therefore, we skip
+ // the test if the default locale is te, sh, mc, or them with subtags.
+ if ( uprv_strncmp(uloc_getDefault(), "te", 2) == 0 ||
+ uprv_strncmp(uloc_getDefault(), "sh", 2) == 0 ||
+ uprv_strncmp(uloc_getDefault(), "mc", 2) == 0) {
+ return;
+ }
+
UErrorCode status = U_ZERO_ERROR;
loadTestData(&status);
if(U_FAILURE(status)) {
@@ -595,16 +604,19 @@ TestOpenDirect(void) {
ures_close(casing);
/*
- * verify that ures_open("ne") finds the root bundle but
- * ures_openDirect("ne") does not
+ * verify that ures_open("ne") finds the root bundle or default locale
+ * bundle but ures_openDirect("ne") does not.
*/
errorCode=U_ZERO_ERROR;
ne=ures_open("testdata", "ne", &errorCode);
if(U_FAILURE(errorCode)) {
log_data_err("ures_open(\"ne\") failed (expected to get root): %s\n", u_errorName(errorCode));
}
- if(errorCode!=U_USING_DEFAULT_WARNING || 0!=uprv_strcmp("root", ures_getLocale(ne, &errorCode))) {
- log_err("ures_open(\"ne\") found something other than \"root\" - %s\n", u_errorName(errorCode));
+ if( errorCode!=U_USING_DEFAULT_WARNING ||
+ (0!=uprv_strcmp("root", ures_getLocale(ne, &errorCode)) &&
+ 0!=uprv_strcmp(uloc_getDefault(), ures_getLocale(ne, &errorCode)))) {
+ log_err("ures_open(\"ne\") found something other than \"root\" "
+ "or default locale \"%s\" - %s\n", uloc_getDefault(), u_errorName(errorCode));
}
ures_close(ne);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c b/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
index 4f25a69d929..79b14a8c656 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
@@ -1509,6 +1509,15 @@ static void TestGetVersionColl(){
static void TestResourceBundles()
{
+ // The test expectation only works if the default locale is not one of the
+ // locale bundle in the testdata which have those info. Therefore, we skip
+ // the test if the default locale is te, sh, mc, or them with subtags.
+ if ( uprv_strncmp(uloc_getDefault(), "te", 2) == 0 ||
+ uprv_strncmp(uloc_getDefault(), "sh", 2) == 0 ||
+ uprv_strncmp(uloc_getDefault(), "mc", 2) == 0) {
+ return;
+ }
+
UErrorCode status = U_ZERO_ERROR;
loadTestData(&status);
if(U_FAILURE(status)) {
@@ -1532,6 +1541,15 @@ static void TestResourceBundles()
static void TestConstruction1()
{
+ // The test expectation only works if the default locale is not one of the
+ // locale bundle in the testdata which have those info. Therefore, we skip
+ // the test if the default locale is te, sh, mc, or them with subtags.
+ if ( uprv_strncmp(uloc_getDefault(), "te", 2) == 0 ||
+ uprv_strncmp(uloc_getDefault(), "sh", 2) == 0 ||
+ uprv_strncmp(uloc_getDefault(), "mc", 2) == 0) {
+ return;
+ }
+
UResourceBundle *test1 = 0, *test2 = 0,*empty = 0;
const UChar *result1, *result2;
UErrorCode status= U_ZERO_ERROR;
@@ -2162,13 +2180,13 @@ static void TestFallback()
UErrorCode err =U_ZERO_ERROR;
UResourceBundle* myResB = ures_open(NULL,"no_NO_NY",&err);
UResourceBundle* resLocID = ures_getByKey(myResB, "Version", NULL, &err);
- UResourceBundle* tResB;
- UResourceBundle* zoneResource;
const UChar* version = NULL;
- static const UChar versionStr[] = u"36"; // 36 in nn_NO
+ static const UChar versionStr[] = u"38.1"; // 38.1 in nn_NO or in a parent bundle/root
- if(err != U_ZERO_ERROR){
- log_data_err("Expected U_ZERO_ERROR when trying to test no_NO_NY aliased to nn_NO for Version err=%s\n",u_errorName(err));
+ if(U_FAILURE(err)) {
+ log_data_err("Expected success when trying to test no_NO_NY aliased to nn_NO for Version "
+ "err=%s\n",
+ u_errorName(err));
return;
}
version = tres_getString(resLocID, -1, NULL, &resultLen, &err);
@@ -2177,11 +2195,12 @@ static void TestFallback()
char g[100];
u_austrcpy(x, versionStr);
u_austrcpy(g, version);
- log_data_err("ures_getString(resLocID, &resultLen, &err) returned an unexpected version value. Expected '%s', but got '%s'\n",
- x, g);
+ log_data_err("ures_getString(resLocID, &resultLen, &err) returned an unexpected "
+ "version value. Expected '%s', but got '%s'\n",
+ x, g);
}
- zoneResource = ures_open(U_ICUDATA_ZONE, "no_NO_NY", &err);
- tResB = ures_getByKey(zoneResource, "zoneStrings", NULL, &err);
+ UResourceBundle* zoneResource = ures_open(U_ICUDATA_ZONE, "no_NO_NY", &err);
+ UResourceBundle* tResB = ures_getByKey(zoneResource, "zoneStrings", NULL, &err);
if(err != U_USING_FALLBACK_WARNING){
log_err("Expected U_USING_FALLBACK_ERROR when trying to test no_NO_NY aliased with nn_NO_NY for zoneStrings err=%s\n",u_errorName(err));
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c
index cfc3a3df123..985b8ff6de6 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c
@@ -387,7 +387,7 @@ static void
TestInvCharToAscii() {
for (int32_t i = 0;; ++i) {
char ic = nativeInvChars[i];
- uint8_t ac = asciiInvChars[i];
+ uint8_t ac = (uint8_t)asciiInvChars[i];
uint8_t actual = uprv_invCharToAscii(ic);
if (actual != ac) {
log_err("uprv_invCharToAscii('%c') did not convert to ASCII 0x%02x\n", ic, (int)ac);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
index 9b359c7a922..cacb203a27e 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
@@ -419,6 +419,8 @@ void TestUScriptCodeAPI(){
"Hanifi_Rohingya", "Sogdian", "Old_Sogdian",
// new in ICU 64
"Elymaic", "Nyiakeng_Puachue_Hmong", "Nandinagari", "Wancho",
+ // new in ICU 66
+ "Chorasmian", "Dives_Akuru", "Khitan_Small_Script", "Yezidi",
};
static const char* expectedShort[] = {
"Bali", "Batk", "Blis", "Brah", "Cham", "Cirt", "Cyrs", "Egyd", "Egyh", "Egyp",
@@ -453,6 +455,8 @@ void TestUScriptCodeAPI(){
"Dogr", "Gong", "Maka", "Medf", "Rohg", "Sogd", "Sogo",
// new in ICU 64
"Elym", "Hmnp", "Nand", "Wcho",
+ // new in ICU 66
+ "Chrs", "Diak", "Kits", "Yezi",
};
int32_t j = 0;
if(UPRV_LENGTHOF(expectedLong)!=(USCRIPT_CODE_LIMIT-USCRIPT_BALINESE)) {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
index 6d9b067ee15..a1fc7b9c815 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
@@ -22,6 +22,7 @@
#include "unicode/ucnv.h"
#include "unicode/uiter.h"
#include "cintltst.h"
+#include "cstring.h"
#include "cmemory.h"
#include <string.h>
@@ -36,6 +37,7 @@ static void TestStringFunctions(void);
static void TestStringSearching(void);
static void TestSurrogateSearching(void);
static void TestUnescape(void);
+static void TestUnescapeRepeatedSurrogateLead20725(void);
static void TestCountChar32(void);
static void TestUCharIterator(void);
@@ -48,6 +50,8 @@ void addUStringTest(TestNode** root)
addTest(root, &TestStringSearching, "tsutil/custrtst/TestStringSearching");
addTest(root, &TestSurrogateSearching, "tsutil/custrtst/TestSurrogateSearching");
addTest(root, &TestUnescape, "tsutil/custrtst/TestUnescape");
+ addTest(root, &TestUnescapeRepeatedSurrogateLead20725,
+ "tsutil/custrtst/TestUnescapeRepeatedSurrogateLead20725");
addTest(root, &TestCountChar32, "tsutil/custrtst/TestCountChar32");
addTest(root, &TestUCharIterator, "tsutil/custrtst/TestUCharIterator");
}
@@ -962,6 +966,16 @@ TestSurrogateSearching() {
) {
log_err("error: one of the u_str[str etc](\"aba\") incorrectly finds something\n");
}
+ /* Regression test for ICU-20684 Use-of-uninitialized-value in isMatchAtCPBoundary
+ * Condition: search the same string while the first char is not an
+ * surrogate and the last char is the leading surragte.
+ */
+ {
+ static const UChar s[]={ 0x0020, 0xD9C1 };
+ if (u_strFindFirst(s, 2, s, 2) != s) {
+ log_err("error: ending with a partial supplementary code point should match\n");
+ }
+ }
}
static void TestStringCopy()
@@ -1114,6 +1128,55 @@ TestUnescape() {
/* ### TODO: test u_unescapeAt() */
}
+static void
+TestUnescapeRepeatedSurrogateLead20725() {
+ const int32_t repeat = 20000;
+ const int32_t srclen = repeat * 6 + 1;
+ char *src = (char*)malloc(srclen);
+ UChar *dest = (UChar*) malloc(sizeof(UChar) * (repeat + 1));
+ if (src == NULL || dest == NULL) {
+ log_err("memory allocation error");
+ }
+ for (int32_t i = 0; i < repeat; i++) {
+ uprv_strcpy(src + (i * 6), "\\ud841");
+ }
+ int32_t len = u_unescape(src, dest, repeat);
+ if (len != repeat) {
+ log_err("failure in u_unescape()");
+ }
+ for (int32_t i = 0; i < repeat; i++) {
+ if (dest[i] != 0xd841) {
+ log_err("failure in u_unescape() return value");
+ }
+ }
+ free(src);
+
+ // A few simple test cases to make sure that the code recovers properly
+ u_unescape("\\ud841\\x5A", dest, repeat);
+ const UChar expected1[] = {0xd841, 'Z', 0};
+ if (u_strcmp(dest, expected1)!=0) {
+ log_err("u_unescape() should return u\"\\ud841Z\" but got %s", dest);
+ }
+
+ u_unescape("\\ud841\\U00050005", dest, repeat);
+ const UChar expected2[] = {0xd841, 0xd900, 0xdc05, 0};
+ if (u_strcmp(dest, expected2)!=0) {
+ log_err("u_unescape() should return u\"\\ud841\\ud900\\udc05\" "
+ "but got %s", dest);
+ }
+
+ // \\xXX is ill-formed. The documentation states:
+ // If an escape sequence is ill-formed, this method returns an empty string.
+ u_unescape("\\ud841\\xXX", dest, repeat);
+ const UChar expected3[] = { 0 };
+ if (u_strcmp(dest, expected3)!=0) {
+ log_err("u_unescape() should return empty string");
+ }
+
+ free(dest);
+
+}
+
/* test code point counting functions --------------------------------------- */
/* reference implementation of u_strHasMoreChar32Than() */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
index 9d2e489f97f..cbeb43d6419 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
@@ -1145,6 +1145,9 @@ TrieTestSet3Initial9(void) {
testTrieRanges("set3-initial-9", FALSE,
setRanges3, UPRV_LENGTHOF(setRanges3),
checkRanges3, UPRV_LENGTHOF(checkRanges3));
+ testTrieRanges("set3-initial-9-clone", TRUE,
+ setRanges3, UPRV_LENGTHOF(setRanges3),
+ checkRanges3, UPRV_LENGTHOF(checkRanges3));
}
static void
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c b/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
index 2338a2f687f..3dc145d15d2 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
@@ -43,6 +43,8 @@ static void TestUsage(void);
static void TestBuilder(void);
static void TestOptions(void);
static void TestGetFieldDisplayNames(void);
+static void TestGetDefaultHourCycle(void);
+static void TestGetDefaultHourCycleOnEmptyInstance(void);
void addDateTimePatternGeneratorTest(TestNode** root) {
TESTCASE(TestOpenClose);
@@ -50,6 +52,8 @@ void addDateTimePatternGeneratorTest(TestNode** root) {
TESTCASE(TestBuilder);
TESTCASE(TestOptions);
TESTCASE(TestGetFieldDisplayNames);
+ TESTCASE(TestGetDefaultHourCycle);
+ TESTCASE(TestGetDefaultHourCycleOnEmptyInstance);
}
/*
@@ -510,4 +514,70 @@ static void TestGetFieldDisplayNames() {
}
}
+typedef struct HourCycleData {
+ const char * locale;
+ UDateFormatHourCycle expected;
+} HourCycleData;
+
+static void TestGetDefaultHourCycle() {
+ const HourCycleData testData[] = {
+ /*loc expected */
+ { "ar_EG", UDAT_HOUR_CYCLE_12 },
+ { "de_DE", UDAT_HOUR_CYCLE_23 },
+ { "en_AU", UDAT_HOUR_CYCLE_12 },
+ { "en_CA", UDAT_HOUR_CYCLE_12 },
+ { "en_US", UDAT_HOUR_CYCLE_12 },
+ { "es_ES", UDAT_HOUR_CYCLE_23 },
+ { "fi", UDAT_HOUR_CYCLE_23 },
+ { "fr", UDAT_HOUR_CYCLE_23 },
+ { "ja_JP", UDAT_HOUR_CYCLE_23 },
+ { "zh_CN", UDAT_HOUR_CYCLE_12 },
+ { "zh_HK", UDAT_HOUR_CYCLE_12 },
+ { "zh_TW", UDAT_HOUR_CYCLE_12 },
+ { "ko_KR", UDAT_HOUR_CYCLE_12 },
+ };
+ int count = UPRV_LENGTHOF(testData);
+ const HourCycleData * testDataPtr = testData;
+ for (; count-- > 0; ++testDataPtr) {
+ UErrorCode status = U_ZERO_ERROR;
+ UDateTimePatternGenerator * dtpgen =
+ udatpg_open(testDataPtr->locale, &status);
+ if ( U_FAILURE(status) ) {
+ log_data_err( "ERROR udatpg_open failed for locale %s : %s - (Are you missing data?)\n",
+ testDataPtr->locale, myErrorName(status));
+ } else {
+ UDateFormatHourCycle actual = udatpg_getDefaultHourCycle(dtpgen, &status);
+ if (U_FAILURE(status) || testDataPtr->expected != actual) {
+ log_err("ERROR dtpgen locale %s udatpg_getDefaultHourCycle expecte to get %d but get %d\n",
+ testDataPtr->locale, testDataPtr->expected, actual);
+ }
+ udatpg_close(dtpgen);
+ }
+ }
+}
+
+// Ensure that calling udatpg_getDefaultHourCycle on an empty instance doesn't call UPRV_UNREACHABLE/abort.
+static void TestGetDefaultHourCycleOnEmptyInstance() {
+ UErrorCode status = U_ZERO_ERROR;
+ UDateTimePatternGenerator * dtpgen = udatpg_openEmpty(&status);
+
+ if (U_FAILURE(status)) {
+ log_data_err("ERROR udatpg_openEmpty failed, status: %s \n", myErrorName(status));
+ return;
+ }
+
+ (void)udatpg_getDefaultHourCycle(dtpgen, &status);
+ if (!U_FAILURE(status)) {
+ log_data_err("ERROR expected udatpg_getDefaultHourCycle on an empty instance to fail, status: %s", myErrorName(status));
+ }
+
+ status = U_USELESS_COLLATOR_ERROR;
+ (void)udatpg_getDefaultHourCycle(dtpgen, &status);
+ if (status != U_USELESS_COLLATOR_ERROR) {
+ log_data_err("ERROR udatpg_getDefaultHourCycle shouldn't modify status if it is already failed, status: %s", myErrorName(status));
+ }
+
+ udatpg_close(dtpgen);
+}
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c
index 5eb5a1eaa4b..7fe549f43ba 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c
@@ -19,6 +19,7 @@
static void TestUListFmt(void);
static void TestUListFmtToValue(void);
+static void TestUListOpenStyled(void);
void addUListFmtTest(TestNode** root);
@@ -28,6 +29,7 @@ void addUListFmtTest(TestNode** root)
{
TESTCASE(TestUListFmt);
TESTCASE(TestUListFmtToValue);
+ TESTCASE(TestUListOpenStyled);
}
static const UChar str0[] = { 0x41,0 }; /* "A" */
@@ -210,5 +212,43 @@ static void TestUListFmtToValue() {
ulistfmt_closeResult(fl);
}
+static void TestUListOpenStyled() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UListFormatter* fmt = ulistfmt_openForType("en", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_SHORT, &ec);
+ UFormattedList* fl = ulistfmt_openResult(&ec);
+ assertSuccess("Opening", &ec);
+
+ {
+ const char* message = "openStyled test 1";
+ const UChar* expectedString = u"A, B, or C";
+ const UChar* inputs[] = {
+ u"A",
+ u"B",
+ u"C",
+ };
+ ulistfmt_formatStringsToResult(fmt, inputs, NULL, UPRV_LENGTHOF(inputs), fl, &ec);
+ assertSuccess("Formatting", &ec);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // field, begin index, end index
+ {UFIELD_CATEGORY_LIST_SPAN, 0, 0, 1},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 0, 1},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 1, 3},
+ {UFIELD_CATEGORY_LIST_SPAN, 1, 3, 4},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 3, 4},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 4, 9},
+ {UFIELD_CATEGORY_LIST_SPAN, 2, 9, 10},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 9, 10}};
+ checkMixedFormattedValue(
+ message,
+ ulistfmt_resultAsValue(fl, &ec),
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+
+ ulistfmt_close(fmt);
+ ulistfmt_closeResult(fl);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
index 2e296f033f9..75f1cca4c44 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
@@ -9,9 +9,11 @@
// Helpful in toString methods and elsewhere.
#define UNISTR_FROM_STRING_EXPLICIT
+#include <stdio.h>
#include "unicode/unumberformatter.h"
#include "unicode/umisc.h"
#include "unicode/unum.h"
+#include "unicode/ustring.h"
#include "cformtst.h"
#include "cintltst.h"
#include "cmemory.h"
@@ -26,6 +28,10 @@ static void TestFormattedValue(void);
static void TestSkeletonParseError(void);
+static void TestToDecimalNumber(void);
+
+static void TestPerUnitInArabic(void);
+
void addUNumberFormatterTest(TestNode** root);
#define TESTCASE(x) addTest(root, &x, "tsformat/unumberformatter/" #x)
@@ -36,6 +42,8 @@ void addUNumberFormatterTest(TestNode** root) {
TESTCASE(TestExampleCode);
TESTCASE(TestFormattedValue);
TESTCASE(TestSkeletonParseError);
+ TESTCASE(TestToDecimalNumber);
+ TESTCASE(TestPerUnitInArabic);
}
@@ -255,4 +263,116 @@ static void TestSkeletonParseError() {
}
+static void TestToDecimalNumber() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UNumberFormatter* uformatter = unumf_openForSkeletonAndLocale(
+ u"currency/USD",
+ -1,
+ "en-US",
+ &ec);
+ assertSuccessCheck("Should create without error", &ec, TRUE);
+ UFormattedNumber* uresult = unumf_openResult(&ec);
+ assertSuccess("Should create result without error", &ec);
+
+ unumf_formatDouble(uformatter, 3.0, uresult, &ec);
+ const UChar* str = ufmtval_getString(unumf_resultAsValue(uresult, &ec), NULL, &ec);
+ assertSuccessCheck("Formatting should succeed", &ec, TRUE);
+ assertUEquals("Should produce expected string result", u"$3.00", str);
+
+ char buffer[CAPACITY];
+
+ int32_t len = unumf_resultToDecimalNumber(uresult, buffer, CAPACITY, &ec);
+ assertIntEquals("Length should be as expected", strlen(buffer), len);
+ assertEquals("Decimal should be as expected", "3", buffer);
+
+ // cleanup:
+ unumf_closeResult(uresult);
+ unumf_close(uformatter);
+}
+
+
+static void TestPerUnitInArabic() {
+ const char* simpleMeasureUnits[] = {
+ "area-acre",
+ "digital-bit",
+ "digital-byte",
+ "temperature-celsius",
+ "length-centimeter",
+ "duration-day",
+ "angle-degree",
+ "temperature-fahrenheit",
+ "volume-fluid-ounce",
+ "length-foot",
+ "volume-gallon",
+ "digital-gigabit",
+ "digital-gigabyte",
+ "mass-gram",
+ "area-hectare",
+ "duration-hour",
+ "length-inch",
+ "digital-kilobit",
+ "digital-kilobyte",
+ "mass-kilogram",
+ "length-kilometer",
+ "volume-liter",
+ "digital-megabit",
+ "digital-megabyte",
+ "length-meter",
+ "length-mile",
+ "length-mile-scandinavian",
+ "volume-milliliter",
+ "length-millimeter",
+ "duration-millisecond",
+ "duration-minute",
+ "duration-month",
+ "mass-ounce",
+ "concentr-percent",
+ "digital-petabyte",
+ "mass-pound",
+ "duration-second",
+ "mass-stone",
+ "digital-terabit",
+ "digital-terabyte",
+ "duration-week",
+ "length-yard",
+ "duration-year"
+ };
+#define BUFFER_LEN 256
+ char buffer[BUFFER_LEN];
+ UChar ubuffer[BUFFER_LEN];
+ const char* locale = "ar";
+ UErrorCode status = U_ZERO_ERROR;
+ UFormattedNumber* formatted = unumf_openResult(&status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL: unumf_openResult failed");
+ return;
+ }
+ for(int32_t i=0; i < UPRV_LENGTHOF(simpleMeasureUnits); ++i) {
+ for(int32_t j=0; j < UPRV_LENGTHOF(simpleMeasureUnits); ++j) {
+ status = U_ZERO_ERROR;
+ sprintf(buffer, "measure-unit/%s per-measure-unit/%s",
+ simpleMeasureUnits[i], simpleMeasureUnits[j]);
+ int32_t outputlen = 0;
+ u_strFromUTF8(ubuffer, BUFFER_LEN, &outputlen, buffer, (int32_t)strlen(buffer), &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL u_strFromUTF8: %s = %s ( %s )\n", locale, buffer,
+ u_errorName(status));
+ }
+ UNumberFormatter* nf = unumf_openForSkeletonAndLocale(
+ ubuffer, outputlen, locale, &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL unumf_openForSkeletonAndLocale: %s = %s ( %s )\n",
+ locale, buffer, u_errorName(status));
+ } else {
+ unumf_formatDouble(nf, 1, formatted, &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL unumf_formatDouble: %s = %s ( %s )\n",
+ locale, buffer, u_errorName(status));
+ }
+ }
+ unumf_close(nf);
+ }
+ }
+ unumf_closeResult(formatted);
+}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c
new file mode 100644
index 00000000000..35c21a2a510
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c
@@ -0,0 +1,195 @@
+// © 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+// Allow implicit conversion from char16_t* to UnicodeString for this file:
+// Helpful in toString methods and elsewhere.
+#define UNISTR_FROM_STRING_EXPLICIT
+
+#include <stdio.h>
+#include "unicode/unumberformatter.h"
+#include "unicode/unumberrangeformatter.h"
+#include "unicode/umisc.h"
+#include "unicode/unum.h"
+#include "unicode/ustring.h"
+#include "cformtst.h"
+#include "cintltst.h"
+#include "cmemory.h"
+
+static void TestExampleCode(void);
+
+static void TestFormattedValue(void);
+
+static void TestSkeletonParseError(void);
+
+static void TestGetDecimalNumbers(void);
+
+void addUNumberRangeFormatterTest(TestNode** root);
+
+#define TESTCASE(x) addTest(root, &x, "tsformat/unumberrangeformatter/" #x)
+
+void addUNumberRangeFormatterTest(TestNode** root) {
+ TESTCASE(TestExampleCode);
+ TESTCASE(TestFormattedValue);
+ TESTCASE(TestSkeletonParseError);
+ TESTCASE(TestGetDecimalNumbers);
+}
+
+
+#define CAPACITY 30
+
+
+static void TestExampleCode() {
+ // This is the example code given in unumberrangeformatter.h.
+
+ // Setup:
+ UErrorCode ec = U_ZERO_ERROR;
+ UNumberRangeFormatter* uformatter = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u"currency/USD precision-integer",
+ -1,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "en-US",
+ NULL,
+ &ec);
+ UFormattedNumberRange* uresult = unumrf_openResult(&ec);
+ assertSuccessCheck("There should not be a failure in the example code", &ec, TRUE);
+
+ // Format a double range:
+ unumrf_formatDoubleRange(uformatter, 3.0, 5.0, uresult, &ec);
+ assertSuccessCheck("There should not be a failure in the example code", &ec, TRUE);
+
+ // Get the result string:
+ int32_t len;
+ const UChar* str = ufmtval_getString(unumrf_resultAsValue(uresult, &ec), &len, &ec);
+ assertSuccessCheck("There should not be a failure in the example code", &ec, TRUE);
+ assertUEquals("Should produce expected string result", u"$3 – $5", str);
+ int32_t resultLength = str != NULL ? u_strlen(str) : 0;
+ assertIntEquals("Length should be as expected", resultLength, len);
+
+ // Cleanup:
+ unumrf_close(uformatter);
+ unumrf_closeResult(uresult);
+}
+
+
+static void TestFormattedValue() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UNumberRangeFormatter* uformatter = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u"K",
+ -1,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "en-US",
+ NULL,
+ &ec);
+ assertSuccessCheck("Should create without error", &ec, TRUE);
+ UFormattedNumberRange* uresult = unumrf_openResult(&ec);
+ assertSuccess("Should create result without error", &ec);
+
+ // Test the decimal number code path, too
+ unumrf_formatDecimalRange(uformatter, "5.5e4", -1, "1.5e5", -1, uresult, &ec);
+
+ if (assertSuccessCheck("Should format without error", &ec, TRUE)) {
+ const UFormattedValue* fv = unumrf_resultAsValue(uresult, &ec);
+ assertSuccess("Should convert without error", &ec);
+ static const UFieldPosition expectedFieldPositions[] = {
+ // field, begin index, end index
+ {UNUM_INTEGER_FIELD, 0, 2},
+ {UNUM_COMPACT_FIELD, 2, 3},
+ {UNUM_INTEGER_FIELD, 6, 9},
+ {UNUM_COMPACT_FIELD, 9, 10}};
+ checkFormattedValue(
+ "FormattedNumber as FormattedValue",
+ fv,
+ u"55K – 150K",
+ UFIELD_CATEGORY_NUMBER,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+
+ assertIntEquals("Identity result should match",
+ UNUM_IDENTITY_RESULT_NOT_EQUAL,
+ unumrf_resultGetIdentityResult(uresult, &ec));
+
+ // cleanup:
+ unumrf_closeResult(uresult);
+ unumrf_close(uformatter);
+}
+
+
+static void TestSkeletonParseError() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UNumberRangeFormatter* uformatter;
+ UParseError perror;
+
+ // The UParseError can be null. The following should not segfault.
+ uformatter = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u".00 measure-unit/typo",
+ -1,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "en",
+ NULL,
+ &ec);
+ unumrf_close(uformatter);
+
+ // Now test the behavior.
+ ec = U_ZERO_ERROR;
+ uformatter = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u".00 measure-unit/typo",
+ -1,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "en",
+ &perror,
+ &ec);
+
+ assertIntEquals("Should have set error code", U_NUMBER_SKELETON_SYNTAX_ERROR, ec);
+ assertIntEquals("Should have correct skeleton error offset", 17, perror.offset);
+ assertUEquals("Should have correct pre context", u"0 measure-unit/", perror.preContext);
+ assertUEquals("Should have correct post context", u"typo", perror.postContext);
+
+ // cleanup:
+ unumrf_close(uformatter);
+}
+
+
+static void TestGetDecimalNumbers() {
+ UErrorCode ec = U_ZERO_ERROR;
+ UNumberRangeFormatter* uformatter = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u"currency/USD",
+ -1,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "en-US",
+ NULL,
+ &ec);
+ assertSuccessCheck("Should create without error", &ec, TRUE);
+ UFormattedNumberRange* uresult = unumrf_openResult(&ec);
+ assertSuccess("Should create result without error", &ec);
+
+ unumrf_formatDoubleRange(uformatter, 3.0, 5.0, uresult, &ec);
+ const UChar* str = ufmtval_getString(unumrf_resultAsValue(uresult, &ec), NULL, &ec);
+ assertSuccessCheck("Formatting should succeed", &ec, TRUE);
+ assertUEquals("Should produce expected string result", u"$3.00 \u2013 $5.00", str);
+
+ char buffer[CAPACITY];
+
+ int32_t len = unumrf_resultGetFirstDecimalNumber(uresult, buffer, CAPACITY, &ec);
+ assertIntEquals("First len should be as expected", strlen(buffer), len);
+ assertEquals("First decimal should be as expected", "3", buffer);
+
+ len = unumrf_resultGetSecondDecimalNumber(uresult, buffer, CAPACITY, &ec);
+ assertIntEquals("Second len should be as expected", strlen(buffer), len);
+ assertEquals("Second decimal should be as expected", "5", buffer);
+
+ // cleanup:
+ unumrf_closeResult(uresult);
+ unumrf_close(uformatter);
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c
index 4884be44c3a..de366153ccd 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c
@@ -758,10 +758,12 @@ static void TestFwdBack() {
}
/**
-* Ticket #13636 - Visual Studio 2017 has problems optimizing this function.
-* As a workaround, we will turn off optimization just for this function on VS2017 and above.
-*/
-#if defined(_MSC_VER) && (_MSC_VER > 1900)
+ * Ticket #13636 - The optimizer in Visual Studio 2017 has problems optimizing this function.
+ * As a work-around, optimization is disabled for this function on VS2017.
+ * This work-around should be removed once the following versions of Visual Studio are no
+ * longer supported: All versions of VS2017, and versions of VS2019 below 16.4.
+ */
+#if defined(_MSC_VER) && (_MSC_VER > 1900) && (_MSC_VER < 1924)
#pragma optimize( "", off )
#endif
@@ -850,10 +852,8 @@ static void TestFwdBackUnsafe() {
}
}
-/**
-* Ticket #13636 - Turn optimization back on.
-*/
-#if defined(_MSC_VER) && (_MSC_VER > 1900)
+// Ticket #13636 - Turn optimization back on.
+#if defined(_MSC_VER) && (_MSC_VER > 1900) && (_MSC_VER < 1924)
#pragma optimize( "", on )
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt b/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
index 1d726b6ea32..9367f1630dc 100644
--- a/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
+++ b/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
@@ -184,7 +184,7 @@ library: common
uinit utypes errorcode
icuplug
platform
- localebuilder localematcher
+ localematcher
group: pluralmap
# TODO: Move to i18n library, ticket #11926.
@@ -634,6 +634,7 @@ group: resourcebundle
# Do we need class LocaleBased? https://unicode-org.atlassian.net/browse/ICU-8608
locbased.o
loclikely.o
+ localebuilder.o
deps
udata ucol_swp
sort stringenumeration uhash uvector
@@ -641,15 +642,10 @@ group: resourcebundle
bytesinkutil
errorcode
-group: localebuilder
- localebuilder.o
- deps
- resourcebundle
-
group: localematcher
localematcher.o
deps
- localebuilder localeprioritylist loclikelysubtags locdistance lsr
+ resourcebundle localeprioritylist loclikelysubtags locdistance lsr
group: localeprioritylist
localeprioritylist.o
@@ -869,7 +865,9 @@ library: i18n
dayperiodrules
listformatter
formatting formattable_cnv regex regex_cnv translit
- double_conversion number_representation number_output numberformatter numberparser
+ double_conversion number_representation number_output numberformatter
+ number_skeletons number_usageprefs numberparser
+ units_extra unitsformatter
universal_time_scale
uclean_i18n
@@ -945,7 +943,7 @@ group: dayperiodrules
group: listformatter
listformatter.o ulistformatter.o
deps
- resourcebundle simpleformatter format uclean_i18n formatted_value_iterimpl
+ uchar resourcebundle simpleformatter format uclean_i18n formatted_value_sbimpl
group: double_conversion
double-conversion-bignum.o double-conversion-double-to-string.o
@@ -957,7 +955,7 @@ group: double_conversion
group: number_representation
number_decimalquantity.o string_segment.o number_utils.o
- # TODO(ICU-20429) Move formatted_string_builder to its own unit.
+ # TODO(ICU-21058) Move formatted_string_builder to its own unit.
formatted_string_builder.o
deps
decnumber double_conversion
@@ -972,31 +970,70 @@ group: number_representation
group: number_output
# PluralRules and FormattedNumber
number_output.o
- standardplural.o plurrule.o
+ standardplural.o plurrule.o pluralranges.o
deps
# FormattedNumber internals:
- number_representation format formatted_value_sbimpl
+ number_representation format formatted_value_sbimpl units
# PluralRules internals:
unifiedcache
group: numberformatter
# ICU 60+ NumberFormatter API
- number_affixutils.o number_asformat.o
- number_capi.o number_compact.o number_currencysymbols.o
+ number_affixutils.o
+ number_compact.o number_currencysymbols.o
number_decimfmtprops.o
number_fluent.o number_formatimpl.o
number_grouping.o number_integerwidth.o number_longnames.o
- number_mapper.o number_modifiers.o number_multiplier.o
+ number_mapper.o number_modifiers.o
number_notation.o number_padding.o
- number_patternmodifier.o number_patternstring.o number_rounding.o
- number_scientific.o number_skeletons.o
- currpinf.o dcfmtsym.o numsys.o
+ number_patternmodifier.o number_patternstring.o
+ number_scientific.o
+ currpinf.o
numrange_fluent.o numrange_impl.o
deps
- decnumber double_conversion formattable units
- number_representation number_output
+ decnumber double_conversion formattable units unitsformatter
+ listformatter number_representation number_output
+ numsys
+ number_usageprefs
+ number_rounding
+ number_symbolswrapper
uclean_i18n common
+group: numsys
+ dcfmtsym.o
+ numsys.o
+ deps
+ currency
+ resourcebundle
+ uclean_i18n
+
+group: number_usageprefs
+ number_multiplier.o
+ number_usageprefs.o
+ deps
+ number_rounding
+ number_symbolswrapper
+ unitsformatter
+
+group: number_rounding
+ number_rounding.o
+ deps
+ currency
+ number_representation
+
+group: number_skeletons
+ # Number skeleton support; separated from numberformatter
+ number_skeletons.o number_capi.o number_asformat.o numrange_capi.o
+ deps
+ numberformatter
+ units_extra
+
+group: number_symbolswrapper
+ number_symbolswrapper.o
+ deps
+ platform
+ numsys
+
group: numberparser
numparse_affixes.o numparse_compositions.o numparse_currency.o
numparse_decimal.o numparse_impl.o numparse_parsednumber.o
@@ -1037,7 +1074,8 @@ group: formatting
# messageformat
choicfmt.o msgfmt.o plurfmt.o selfmt.o umsg.o
deps
- decnumber formattable format units numberformatter numberparser formatted_value_sbimpl
+ decnumber formattable format units numberformatter number_skeletons numberparser
+ formatted_value_sbimpl
listformatter
dayperiodrules
collation collation_builder # for rbnf
@@ -1047,16 +1085,28 @@ group: formatting
sharedbreakiterator # for reldatefmt.o
uclean_i18n
region
+ formatted_value_iterimpl # NOTE (2020-08-27): Not currently used.
group: sharedbreakiterator
sharedbreakiterator.o
deps
breakiterator
+group: units_extra
+ measunit_extra.o
+ deps
+ units bytestriebuilder bytestrie resourcebundle uclean_i18n
+
group: units
- measunit.o currunit.o nounit.o
+ measunit.o currunit.o
deps
- stringenumeration
+ stringenumeration errorcode
+
+group: unitsformatter
+ units_data.o units_converter.o units_complexconverter.o units_router.o
+ deps
+ resourcebundle units_extra double_conversion number_representation formattable sort
+ number_rounding
group: decnumber
decContext.o decNumber.o
diff --git a/Build/source/libs/icu/icu-src/source/test/fuzzer/Makefile.in b/Build/source/libs/icu/icu-src/source/test/fuzzer/Makefile.in
index 37c609dfc89..259e6b0a7a1 100644
--- a/Build/source/libs/icu/icu-src/source/test/fuzzer/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/fuzzer/Makefile.in
@@ -73,7 +73,9 @@ distclean-local: clean-local
$(RMV) Makefile
check-local: all-local
- $(foreach trgt,$(FUZZER_TARGETS), echo $(trgt); $(INVOKE) ./$(trgt) \
+ # Create a dummy test case file with content "abc123"
+ echo "abc123" > dummytestcase
+ $(foreach trgt,$(FUZZER_TARGETS), echo $(trgt); $(INVOKE) ./$(trgt) dummytestcase -q \
$(TEST_OUTPUT_OPTS) || exit \
$(IOTEST_OPTS);)
diff --git a/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp b/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp
index 820ed85a52c..9bffb93649b 100644
--- a/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp
@@ -1,8 +1,12 @@
// © 2019 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
+#include <fstream>
+#include <iostream>
+#include <sstream>
#include <stddef.h>
#include <stdint.h>
+#include <string>
#include "cmemory.h"
@@ -10,11 +14,45 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);
int main(int argc, char* argv[])
{
- (void) argc;
- (void) argv;
- const char *fuzzer_data = "abc123";
-
- LLVMFuzzerTestOneInput((const uint8_t *) fuzzer_data, strlen(fuzzer_data));
+ bool show_warning = true;
+ bool show_error = true;
+#if UPRV_HAS_FEATURE(address_sanitizer)
+ show_warning = false;
+#endif
+#if UPRV_HAS_FEATURE(memory_sanitizer)
+ show_warning = false;
+#endif
+ if (argc > 2 && strcmp(argv[2], "-q") == 0) {
+ show_warning = false;
+ show_error = false;
+ }
+ if (show_warning) {
+ std::cerr << "WARNING: This binary work only under build configure with" << std::endl
+ << " CFLAGS=\"-fsanitize=$SANITIZE\""
+ << " CXXFLAGS=\"-fsanitize=$SANITIZE\""
+ << " ./runConfigureICU ... " << std::endl
+ << " where $SANITIZE is 'address' or 'memory'" << std::endl
+ << "Plesae run the above step and make tests to rebuild" << std::endl;
+ // Do not return -1 here so we will pass the unit test.
+ }
+ if (argc < 2) {
+ if (show_error) {
+ std::cerr << "Usage: " << argv[0] << " testcasefile [-q]" << std::endl
+ << " -q : quiet while error" << std::endl;
+ }
+ return -1;
+ }
+ const char *path = argv[1];
+ std::ifstream file(path, std::ios::binary);
+ if (!file.is_open()) {
+ if (show_error) {
+ std::cerr << "Cannot open testcase file " << path << std::endl;
+ }
+ return -1;
+ }
+ std::ostringstream ostrm;
+ ostrm << file.rdbuf();
+ LLVMFuzzerTestOneInput((const uint8_t *) ostrm.str().c_str(), ostrm.str().size());
- return 0;
+ return 0;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in b/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
index 60a8e72a677..af0e8485843 100644
--- a/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
@@ -16,9 +16,12 @@
## unicode/ucnv.h - 0
##
## .. etc. Anything other than zero is an error. (except for the deprecation tests, where '1' is the correct value)
-##
+##
## If a header fails the C compile test it is likely because the header is a
-## C++ header and isn't properly guarded by the U_SHOW_CPLUSPLUS_API macro.
+## C++ header and it isn't properly guarded by the U_SHOW_CPLUSPLUS_API macro.
+##
+## If a header fails the cppguardtest test it is likely because the header doesn't
+## include the utypes.h header first *before* using the macro U_SHOW_CPLUSPLUS_API.
##
## If a header fails because it is deprecated, add it to the 'dfiles.txt'
##
@@ -37,7 +40,7 @@ all:
@echo Please read this Makefile for more information.
@echo run \'$(MAKE) check\' to run the test "(use -k if you don't want to stop on errs)"
-check: dtest ctest cpptest drafttest deprtest internaltest obsoletetest
+check: dtest ctest cpptest drafttest deprtest internaltest obsoletetest cppguardtest
headertest:
@FAIL=0;stub=ht_stub_$(NAME.headers).$(SUFFIX.headers); for file in "$(prefix)/include/unicode"/*.h ; do \
@@ -108,6 +111,24 @@ dtest:
echo "$@: $$NONE - exit status $$FAIL" ; \
exit $$FAIL
+cppguardtest:
+ @FAIL=0;stub=ht_stub_cppguardtest.cpp; for file in "$(prefix)/include/unicode"/*.h ; do \
+ incfile=`basename $$file` ; \
+ if grep -q "U_SHOW_CPLUSPLUS_API" $$file ; then \
+ echo "$@ unicode/$$incfile" ; \
+ echo "#include <unicode/$$incfile>" > $$stub ; \
+ echo 'void junk(){}' >> $$stub ; \
+ echo '#if !defined(U_SHOW_CPLUSPLUS_API)' >> $$stub ; \
+ echo "#error The header '$$incfile' refers to the macro U_SHOW_CPLUSPLUS_API (defined in utypes.h) but either does not include utypes.h or does so incorrectly." >> $$stub ; \
+ echo '#endif' >> $$stub ; \
+ $(COMPILE.cc) $(cppflags) $$stub || FAIL=1 ; \
+ rm -f $$stub; \
+ else \
+ echo "$@ skipping unicode/$$incfile" ; \
+ fi ; \
+ done ; \
+ exit $$FAIL
+
clean:
-@rm -f ht_*
@@ -118,4 +139,4 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-.PHONY: doclean check all headertest cpptest dtest ctest clean distclean
+.PHONY: doclean check all headertest cpptest dtest cppguardtest ctest clean distclean
diff --git a/Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh b/Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh
index 5f70bcfb60d..eaad8b10d55 100644
--- a/Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh
+++ b/Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh
@@ -9,27 +9,38 @@
CC=clang
CXX=clang++
+ERROR_EXIT=0
+
# Runtime libraries
for file in `ls common/*.h`; do
echo $file
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
- $CXX -c -std=c++11 -I common -O0 ht_temp.cpp ;
+ $CXX -c -std=c++11 -I common -DU_COMMON_IMPLEMENTATION -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
for file in `ls i18n/*.h`; do
echo $file
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
- $CXX -c -std=c++11 -I common -I i18n -O0 ht_temp.cpp ;
+ $CXX -c -std=c++11 -I common -I i18n -DU_I18N_IMPLEMENTATION -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
for file in `ls io/*.h`; do
echo $file
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
- $CXX -c -std=c++11 -I common -I i18n -I io -O0 ht_temp.cpp ;
+ $CXX -c -std=c++11 -I common -I i18n -I io -DU_IO_IMPLEMENTATION -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
# layout is removed.
@@ -51,6 +62,9 @@ for file in `ls tools/toolutil/*.h`; do
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
$CXX -c -std=c++11 -I common -I i18n -I io -I tools/toolutil -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
# Exclude tzcode: tools/tzcode/private.h uses an argument "new" in a function declaration.
@@ -65,6 +79,9 @@ for tool in escapesrc genccode gencmn gencolusb gennorm2 genren gentest icupkg i
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
$CXX -c -std=c++11 -I common -I i18n -I io -I tools/toolutil -I tools/$tool -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
done ;
@@ -75,6 +92,9 @@ for file in `ls tools/ctestfw/unicode/*.h`; do
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
$CXX -c -std=c++11 -I common -I i18n -I io -I tools/toolutil -I tools/ctestfw -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
# C not C++ for cintltst
@@ -83,6 +103,9 @@ for file in `ls test/cintltst/*.h`; do
echo '#include "'$file'"' > ht_temp.c ;
echo 'void noop() {}' >> ht_temp.c ;
$CC -c -std=c11 -I common -I i18n -I io -I tools/toolutil -I tools/ctestfw -I test/cintltst -O0 ht_temp.c ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
for test in intltest iotest testmap thaitest fuzzer; do
@@ -91,6 +114,9 @@ for test in intltest iotest testmap thaitest fuzzer; do
echo '#include "'$file'"' > ht_temp.cpp ;
echo 'void noop() {}' >> ht_temp.cpp ;
$CXX -c -std=c++11 -I common -I i18n -I io -I tools/toolutil -I tools/ctestfw -I test/$test -O0 ht_temp.cpp ;
+ if [ $? != 0 ] ; then
+ ERROR_EXIT=1
+ fi
done ;
done ;
@@ -106,3 +132,6 @@ done ;
# TODO: perf/*/*.h
rm ht_temp.cpp ht_temp.c ht_temp.o
+
+echo $ERROR_EXIT
+exit $ERROR_EXIT
diff --git a/Build/source/libs/icu/icu-src/source/test/hdrtst/testtagsguards.sh b/Build/source/libs/icu/icu-src/source/test/hdrtst/testtagsguards.sh
index 928707c8e3d..a432538a058 100755
--- a/Build/source/libs/icu/icu-src/source/test/hdrtst/testtagsguards.sh
+++ b/Build/source/libs/icu/icu-src/source/test/hdrtst/testtagsguards.sh
@@ -1,15 +1,17 @@
+#/usr/bin/env bash
# Copyright © 2019 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Run this script from $ICU_ROOT/icu4c.
-# ~/icu/mine/src/icu4c$ source/test/hdrtest/testtagsguards.sh
+# ~/icu/mine/src/icu4c$ source/test/hdrtst/testtagsguards.sh
# set -x # echo on
-DEF=-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1
-INCL="-Isource/common -Isource/i18n -Isource/io"
-TMPDIR=`mktemp -d`
-DIFF="diff -u --minimal"
+: ${DEF:=-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1}
+: ${INCL:="-Isource/common -Isource/i18n -Isource/io"}
+: ${TMPDIR:=`mktemp -d`}
+: ${DIFF:="diff -u --minimal"}
+: ${CXX:="clang++"}
echo "*** testtagsguards.sh TMPDIR=$TMPDIR"
@@ -18,13 +20,13 @@ for file in source/common/unicode/*.h source/i18n/unicode/*.h source/io/unicode/
echo $file
echo '#include "unicode/'$base'"' > $TMPDIR/ht-$base.cpp
# Preprocess only.
- clang++ $INCL -C -E $DEF -o $TMPDIR/ht-$base-normal.i $TMPDIR/ht-$base.cpp
+ $CXX $INCL -C -E $DEF -o $TMPDIR/ht-$base-normal.i $TMPDIR/ht-$base.cpp
# When hiding @draft, none should be in the output.
TAG=draft
GUARD=DRAFT
echo " @$TAG"
- clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
+ $CXX $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
exit 1
@@ -42,7 +44,7 @@ for file in source/common/unicode/*.h source/i18n/unicode/*.h source/io/unicode/
TAG=deprecated
GUARD=DEPRECATED
echo " @$TAG"
- clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
+ $CXX $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
exit 1
@@ -63,7 +65,7 @@ for file in source/common/unicode/*.h source/i18n/unicode/*.h source/io/unicode/
TAG=system
GUARD=SYSTEM
echo " @$TAG"
- clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
+ $CXX $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
exit 1
@@ -75,7 +77,7 @@ for file in source/common/unicode/*.h source/i18n/unicode/*.h source/io/unicode/
TAG=obsolete
GUARD=OBSOLETE
echo " @$TAG"
- clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
+ $CXX $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
exit 1
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in b/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
index bcab2c98ba2..13d3ea86dc9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
@@ -68,7 +68,8 @@ numbertest_modifiers.o numbertest_patternmodifier.o numbertest_patternstring.o \
string_segment_test.o \
numbertest_parse.o numbertest_doubleconversion.o numbertest_skeletons.o \
static_unisets_test.o numfmtdatadriventest.o numbertest_range.o erarulestest.o \
-formattedvaluetest.o formatted_string_builder_test.o numbertest_permutation.o
+formattedvaluetest.o formatted_string_builder_test.o numbertest_permutation.o \
+units_data_test.o units_router_test.o units_test.o
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp
index f1b9b13878e..a2bea639732 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp
@@ -518,7 +518,7 @@ static const char *localeAndIndexCharactersLists[][2] = {
/* Latvian*/ {"lv", "A:B:C:\\u010C:D:E:F:G:\\u0122:H:I:J:K:\\u0136:L:\\u013B:M:N:\\u0145:O:P:Q:R:S:\\u0160:T:U:V:W:X:Z:\\u017D"},
/* Norwegian Bokm\\u00E5l*/ {"nb", "A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:\\u00C6:\\u00D8:\\u00C5"},
/* Dutch*/ {"nl", "A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z"},
- /* Polish*/ {"pl", "A:\\u0104:B:C:\\u0106:D:E:\\u0118:F:G:H:I:J:K:L:\\u0141:M:N:\\u0143:O:\\u00D3:P:Q:R:S:\\u015A:T:U:V:W:X:Y:Z:\\u0179:\\u017B"},
+ /* Polish*/ {"pl", "A:B:C:\\u0106:D:E:F:G:H:I:J:K:L:\\u0141:M:N:O:\\u00D3:P:Q:R:S:\\u015A:T:U:V:W:X:Y:Z:\\u0179:\\u017B"},
/* Portuguese*/ {"pt", "A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z"},
/* Romanian*/ {"ro", "A:\\u0102:\\u00C2:B:C:D:E:F:G:H:I:\\u00CE:J:K:L:M:N:O:P:Q:R:S:\\u0218:T:\\u021A:U:V:W:X:Y:Z"},
/* Russian*/ {"ru", "\\u0410:\\u0411:\\u0412:\\u0413:\\u0414:\\u0415:\\u0416:\\u0417:\\u0418:\\u0419:\\u041A:\\u041B:\\u041C:\\u041D:\\u041E:\\u041F:\\u0420:\\u0421:\\u0422:\\u0423:\\u0424:\\u0425:\\u0426:\\u0427:\\u0428:\\u0429:\\u042B:\\u042D:\\u042E:\\u042F"},
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
index 744ca69baf8..b3ac46e25eb 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
@@ -2913,7 +2913,7 @@ void CalendarRegressionTest::TestT8596(void) {
gc->setFirstDayOfWeek(UCAL_MONDAY);
gc->setMinimalDaysInFirstWeek(4);
- // Force the calender to resolve the fields once.
+ // Force the calendar to resolve the fields once.
// The maximum week number in 2011 is 52.
gc->set(UCAL_YEAR, 2011);
gc->get(UCAL_YEAR, status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
index 677c98a1219..25f5f72ce2b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
@@ -346,6 +346,13 @@ void CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
TestChineseCalendarMapping();
}
break;
+ case 37:
+ name = "TestTimeZoneInLocale";
+ if(exec) {
+ logln("TestTimeZoneInLocale---"); logln("");
+ TestTimeZoneInLocale();
+ }
+ break;
default: name = ""; break;
}
}
@@ -354,7 +361,7 @@ void CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
UnicodeString CalendarTest::fieldName(UCalendarDateFields f) {
switch (f) {
-#define FIELD_NAME_STR(x) case x: return (#x+5)
+#define FIELD_NAME_STR(x) case x: return (#x)+5
FIELD_NAME_STR( UCAL_ERA );
FIELD_NAME_STR( UCAL_YEAR );
FIELD_NAME_STR( UCAL_MONTH );
@@ -2327,7 +2334,7 @@ void CalendarTest::TestTimeStamp() {
Calendar *cal;
// Create a new Gregorian Calendar.
- cal = Calendar::createInstance("en_US@calender=gregorian", status);
+ cal = Calendar::createInstance("en_US@calendar=gregorian", status);
if (U_FAILURE(status)) {
dataerrln("Error creating Gregorian calendar.");
return;
@@ -2807,6 +2814,51 @@ void CalendarTest::TestCloneLocale(void) {
TEST_CHECK_STATUS;
}
+void CalendarTest::TestTimeZoneInLocale(void) {
+ const char *tests[][3] = {
+ { "en-u-tz-usden", "America/Denver", "gregorian" },
+ { "es-u-tz-usden", "America/Denver", "gregorian" },
+ { "ms-u-tz-mykul", "Asia/Kuala_Lumpur", "gregorian" },
+ { "zh-u-tz-mykul", "Asia/Kuala_Lumpur", "gregorian" },
+ { "fr-u-ca-buddhist-tz-phmnl", "Asia/Manila", "buddhist" },
+ { "th-u-ca-chinese-tz-gblon", "Europe/London", "chinese" },
+ { "de-u-ca-coptic-tz-ciabj", "Africa/Abidjan", "coptic" },
+ { "ja-u-ca-dangi-tz-hkhkg", "Asia/Hong_Kong", "dangi" },
+ { "da-u-ca-ethioaa-tz-ruunera", "Asia/Ust-Nera", "ethiopic-amete-alem" },
+ { "ko-u-ca-ethiopic-tz-cvrai", "Atlantic/Cape_Verde", "ethiopic" },
+ { "fil-u-ca-gregory-tz-aubne", "Australia/Brisbane", "gregorian" },
+ { "fa-u-ca-hebrew-tz-brrbr", "America/Rio_Branco", "hebrew" },
+ { "gr-u-ca-indian-tz-lccas", "America/St_Lucia", "indian" },
+ { "or-u-ca-islamic-tz-cayyn", "America/Swift_Current", "islamic" },
+ { "my-u-ca-islamic-umalqura-tz-kzala", "Asia/Almaty", "islamic-umalqura" },
+ { "lo-u-ca-islamic-tbla-tz-bmbda", "Atlantic/Bermuda", "islamic-tbla" },
+ { "km-u-ca-islamic-civil-tz-aqplm", "Antarctica/Palmer", "islamic-civil" },
+ { "kk-u-ca-islamic-rgsa-tz-usanc", "America/Anchorage", "islamic" },
+ { "ar-u-ca-iso8601-tz-bjptn", "Africa/Porto-Novo", "gregorian" },
+ { "he-u-ca-japanese-tz-tzdar", "Africa/Dar_es_Salaam", "japanese" },
+ { "bs-u-ca-persian-tz-etadd", "Africa/Addis_Ababa", "persian" },
+ { "it-u-ca-roc-tz-aruaq", "America/Argentina/San_Juan", "roc" },
+ };
+
+ for (int32_t i = 0; i < UPRV_LENGTHOF(tests); ++i) {
+ UErrorCode status = U_ZERO_ERROR;
+ const char **testLine = tests[i];
+ Locale locale(testLine[0]);
+ UnicodeString expected(testLine[1], -1, US_INV);
+ UnicodeString actual;
+
+ LocalPointer<Calendar> calendar(
+ Calendar::createInstance(locale, status));
+ if (failure(status, "Calendar::createInstance", TRUE)) continue;
+
+ assertEquals("TimeZone from Calendar::createInstance",
+ expected, calendar->getTimeZone().getID(actual));
+
+ assertEquals("Calendar Type from Calendar::createInstance",
+ testLine[2], calendar->getType());
+ }
+}
+
void CalendarTest::setAndTestCalendar(Calendar* cal, int32_t initMonth, int32_t initDay, int32_t initYear, UErrorCode& status) {
cal->clear();
cal->setLenient(FALSE);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
index f85abf9d886..a3d9e1330c7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
@@ -242,6 +242,8 @@ public: // package
void TestCloneLocale(void);
+ void TestTimeZoneInLocale(void);
+
void TestHebrewMonthValidation(void);
/*
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
index 4185494a7f5..de51eece5c4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
@@ -22,6 +22,7 @@
#include "unicode/sortkey.h"
#include "unicode/std_string.h"
#include "unicode/strenum.h"
+#include "unicode/stringpiece.h"
#include "unicode/tblcoll.h"
#include "unicode/uiter.h"
#include "unicode/uniset.h"
@@ -293,13 +294,13 @@ void CollationTest::TestIllegalUTF8() {
}
coll->setAttribute(UCOL_STRENGTH, UCOL_IDENTICAL, errorCode);
- static const char *strings[] = {
+ static const StringPiece strings[] = {
// string with U+FFFD == illegal byte sequence
- u8"a\uFFFDz", "a\x80z", // trail byte
- u8"a\uFFFD\uFFFDz", "a\xc1\x81z", // non-shortest form
- u8"a\uFFFD\uFFFD\uFFFDz", "a\xe0\x82\x83z", // non-shortest form
- u8"a\uFFFD\uFFFD\uFFFDz", "a\xed\xa0\x80z", // lead surrogate: would be U+D800
- u8"a\uFFFD\uFFFD\uFFFDz", "a\xed\xbf\xbfz", // trail surrogate: would be U+DFFF
+ u8"a\uFFFDz", "a\x80z", // trail byte
+ u8"a\uFFFD\uFFFDz", "a\xc1\x81z", // non-shortest form
+ u8"a\uFFFD\uFFFD\uFFFDz", "a\xe0\x82\x83z", // non-shortest form
+ u8"a\uFFFD\uFFFD\uFFFDz", "a\xed\xa0\x80z", // lead surrogate: would be U+D800
+ u8"a\uFFFD\uFFFD\uFFFDz", "a\xed\xbf\xbfz", // trail surrogate: would be U+DFFF
u8"a\uFFFD\uFFFD\uFFFD\uFFFDz", "a\xf0\x8f\xbf\xbfz", // non-shortest form
u8"a\uFFFD\uFFFD\uFFFD\uFFFDz", "a\xf4\x90\x80\x80z" // out of range: would be U+110000
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
index 1e37c475ba1..c3a6d8a7f8d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
@@ -22,6 +22,7 @@
#include "unicode/regex.h" // TODO: make conditional on regexp being built.
+#include "unicode/testlog.h"
#include "unicode/uniset.h"
#include "unicode/uset.h"
#include "unicode/usetiter.h"
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
index 5f25cedb891..1f51f70d010 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
@@ -23,6 +23,7 @@
typedef struct ExpectedResult {
double value;
+ // Invariant characters, will be converted to UTF-16 and then unescaped.
const char *expected;
} ExpectedResult;
@@ -185,38 +186,38 @@ static ExpectedResult kChineseCurrencyTestData[] = {
{123456789012345.0, "\\u00A5120\\u4E07\\u4EBF"},
};
static ExpectedResult kGermanCurrencyTestData[] = {
- {1.0, u8"1\\u00A0\\u20AC"},
- {12.0, u8"12\\u00A0\\u20AC"},
- {123.0, u8"120\\u00A0\\u20AC"},
- {1234.0, u8"1200\\u00A0\\u20AC"},
- {12345.0, u8"12.000\\u00A0\\u20AC"},
- {123456.0, u8"120.000\\u00A0\\u20AC"},
- {1234567.0, u8"1,2\\u00A0Mio.\\u00A0\\u20AC"},
- {12345678.0, u8"12\\u00A0Mio.\\u00A0\\u20AC"},
- {123456789.0, u8"120\\u00A0Mio.\\u00A0\\u20AC"},
- {1234567890.0, u8"1,2\\u00A0Mrd.\\u00A0\\u20AC"},
- {12345678901.0, u8"12\\u00A0Mrd.\\u00A0\\u20AC"},
- {123456789012.0, u8"120\\u00A0Mrd.\\u00A0\\u20AC"},
- {1234567890123.0, u8"1,2\\u00A0Bio.\\u00A0\\u20AC"},
- {12345678901234.0, u8"12\\u00A0Bio.\\u00A0\\u20AC"},
- {123456789012345.0, u8"120\\u00A0Bio.\\u00A0\\u20AC"},
+ {1.0, "1\\u00A0\\u20AC"},
+ {12.0, "12\\u00A0\\u20AC"},
+ {123.0, "120\\u00A0\\u20AC"},
+ {1234.0, "1200\\u00A0\\u20AC"},
+ {12345.0, "12.000\\u00A0\\u20AC"},
+ {123456.0, "120.000\\u00A0\\u20AC"},
+ {1234567.0, "1,2\\u00A0Mio.\\u00A0\\u20AC"},
+ {12345678.0, "12\\u00A0Mio.\\u00A0\\u20AC"},
+ {123456789.0, "120\\u00A0Mio.\\u00A0\\u20AC"},
+ {1234567890.0, "1,2\\u00A0Mrd.\\u00A0\\u20AC"},
+ {12345678901.0, "12\\u00A0Mrd.\\u00A0\\u20AC"},
+ {123456789012.0, "120\\u00A0Mrd.\\u00A0\\u20AC"},
+ {1234567890123.0, "1,2\\u00A0Bio.\\u00A0\\u20AC"},
+ {12345678901234.0, "12\\u00A0Bio.\\u00A0\\u20AC"},
+ {123456789012345.0, "120\\u00A0Bio.\\u00A0\\u20AC"},
};
static ExpectedResult kEnglishCurrencyTestData[] = {
- {1.0, u8"$1"},
- {12.0, u8"$12"},
- {123.0, u8"$120"},
- {1234.0, u8"$1.2K"},
- {12345.0, u8"$12K"},
- {123456.0, u8"$120K"},
- {1234567.0, u8"$1.2M"},
- {12345678.0, u8"$12M"},
- {123456789.0, u8"$120M"},
- {1234567890.0, u8"$1.2B"},
- {12345678901.0, u8"$12B"},
- {123456789012.0, u8"$120B"},
- {1234567890123.0, u8"$1.2T"},
- {12345678901234.0, u8"$12T"},
- {123456789012345.0, u8"$120T"},
+ {1.0, "$1"},
+ {12.0, "$12"},
+ {123.0, "$120"},
+ {1234.0, "$1.2K"},
+ {12345.0, "$12K"},
+ {123456.0, "$120K"},
+ {1234567.0, "$1.2M"},
+ {12345678.0, "$12M"},
+ {123456789.0, "$120M"},
+ {1234567890.0, "$1.2B"},
+ {12345678901.0, "$12B"},
+ {123456789012.0, "$120B"},
+ {1234567890123.0, "$1.2T"},
+ {12345678901234.0, "$12T"},
+ {123456789012345.0, "$120T"},
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
index 53d8cfdbd12..a25a04be901 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
@@ -77,6 +77,7 @@ ConversionTest::runIndexedTest(int32_t index, UBool exec, const char *&name, cha
TESTCASE_AUTO(TestGetUnicodeSet2);
TESTCASE_AUTO(TestDefaultIgnorableCallback);
TESTCASE_AUTO(TestUTF8ToUTF8Overflow);
+ TESTCASE_AUTO(TestUTF8ToUTF8Streaming);
TESTCASE_AUTO_END;
}
@@ -830,6 +831,65 @@ ConversionTest::TestUTF8ToUTF8Overflow() {
}
}
+void
+ConversionTest::TestUTF8ToUTF8Streaming() {
+ IcuTestErrorCode errorCode(*this, "TestUTF8ToUTF8Streaming");
+ LocalUConverterPointer cnv1(ucnv_open("UTF-8", errorCode));
+ LocalUConverterPointer cnv2(ucnv_open("UTF-8", errorCode));
+
+ // UTF8 encoded cyrillic part of 'Lorem ipsum'
+ static const char* text =
+ "\xd0\xb5\xd1\x82\x20\xd1\x81\xd1\x86\xd0\xb0\xd0\xb5\xd0\xb2\xd0"
+ "\xbe\xd0\xbb\xd0\xb0\x20\xd1\x81\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbf"
+ "\xd1\x81\xd1\x86\xd0\xb8\xd0\xbd\xd0\xb3\x20\xd0\xb0\xd1\x86\xd1"
+ "\x86\xd0\xbe\xd0\xbc\xd0\xbc\xd0\xbe\xd0\xb4\xd0\xb0\xd1\x80\xd0"
+ "\xb5\x20\xd1\x85\xd0\xb0\xd1\x81";
+
+ int32_t chunk1 = 25; // partial lead at the end: 0xd0
+ int32_t chunk2 = 47; // partial tail at the beginning: 0xb0
+
+ char result[128];
+
+ int32_t sourceLen = (int32_t)strlen(text);
+ const char* source = text;
+ const char* sourceLimit = text + chunk1;
+
+ int32_t targetLen = sizeof(result);
+ char* target = result;
+ const char* targetLimit = result + targetLen;
+
+ UChar buffer16[20];
+ UChar* pivotSource = buffer16;
+ UChar* pivotTarget = buffer16;
+ const UChar* pivotLimit = buffer16 + UPRV_LENGTHOF(buffer16);
+
+ int32_t length;
+ ucnv_convertEx(cnv2.getAlias(), cnv1.getAlias(),
+ &target, result + targetLen, &source, sourceLimit,
+ buffer16, &pivotSource, &pivotTarget, pivotLimit,
+ FALSE, FALSE, errorCode);
+
+ length = (int32_t)(target - result);
+ targetLen -= length;
+ assertEquals("First chunk -1 doesn't match converted length", chunk1 - 1, length);
+
+ source = text + chunk1;
+ sourceLimit = source + chunk2;
+
+ // Convert the rest and flush.
+ ucnv_convertEx(cnv2.getAlias(), cnv1.getAlias(),
+ &target, targetLimit, &source, sourceLimit,
+ buffer16, &pivotSource, &pivotTarget, pivotLimit,
+ FALSE, TRUE, errorCode);
+
+ length = (int32_t)(target - result - length);
+ targetLen -= length;
+ assertEquals("Second chunk + 2 doesn't match converted length", chunk2 + 1, length);
+
+ assertEquals("Full text length match", sourceLen, sizeof(result) - targetLen);
+ assertSuccess("UTF-8->UTF-8", errorCode);
+}
+
// open testdata or ICU data converter ------------------------------------- ***
UConverter *
@@ -1185,9 +1245,13 @@ ConversionTest::ToUnicodeCase(ConversionCase &cc, UConverterToUCallback callback
cc.offsets=NULL;
}
else {
- memset(resultOffsets, -1, UPRV_LENGTHOF(resultOffsets));
+ for (int32_t i = 0; i < UPRV_LENGTHOF(resultOffsets); i++) {
+ resultOffsets[i] = -1;
+ }
+ }
+ for (int32_t i = 0; i < UPRV_LENGTHOF(result); i++) {
+ result[i] = -1;
}
- memset(result, -1, UPRV_LENGTHOF(result));
errorCode.reset();
resultLength=stepToUnicode(cc, cnv.getAlias(),
result, UPRV_LENGTHOF(result),
@@ -1615,8 +1679,12 @@ ConversionTest::FromUnicodeCase(ConversionCase &cc, UConverterFromUCallback call
ok=TRUE;
for(i=0; i<UPRV_LENGTHOF(steps) && ok; ++i) {
step=steps[i].step;
- memset(resultOffsets, -1, UPRV_LENGTHOF(resultOffsets));
- memset(result, -1, UPRV_LENGTHOF(result));
+ for (int32_t i = 0; i < UPRV_LENGTHOF(resultOffsets); i++) {
+ resultOffsets[i] = -1;
+ }
+ for (int32_t i = 0; i < UPRV_LENGTHOF(result); i++) {
+ result[i] = -1;
+ }
errorCode=U_ZERO_ERROR;
resultLength=stepFromUnicode(cc, cnv,
result, UPRV_LENGTHOF(result),
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
index 84a3a89a503..dda10cb5d27 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
@@ -77,6 +77,7 @@ public:
void TestGetUnicodeSet2();
void TestDefaultIgnorableCallback();
void TestUTF8ToUTF8Overflow();
+ void TestUTF8ToUTF8Streaming();
private:
UBool
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp
index 08c9cec95c3..c74f387714d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp
@@ -448,7 +448,7 @@ void DataDrivenCalendarTest::processTest(TestData *testData) {
//Calendar *cal= NULL;
//const UChar *arguments= NULL;
//int32_t argLen = 0;
- char testType[256];
+ char testType[256] = "";
const DataMap *settings= NULL;
//const UChar *type= NULL;
UErrorCode status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp
index a382bd5ec36..bff134a2662 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp
@@ -330,7 +330,7 @@ void DataDrivenFormatTest::processTest(TestData *testData) {
//Format *cal= NULL;
//const UChar *arguments= NULL;
//int32_t argLen = 0;
- char testType[256];
+ char testType[256] = "";
const DataMap *settings= NULL;
//const UChar *type= NULL;
UErrorCode status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp
index 7b772f13219..b72f0df106d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp
@@ -63,8 +63,9 @@ DateFormatRegressionTest::runIndexedTest( int32_t index, UBool exec, const char*
CASE(30,TestT10334)
CASE(31,TestT10619)
CASE(32,TestT10855)
- CASE(33,TestT10906)
- CASE(34,TestT13380)
+ CASE(33,TestT10858)
+ CASE(34,TestT10906)
+ CASE(35,TestT13380)
default: name = ""; break;
}
}
@@ -1762,6 +1763,45 @@ void DateFormatRegressionTest::TestT13380(void) {
}
}
+void DateFormatRegressionTest::TestT10858(void) {
+ // test for assignment operator on instances with the same locale but different TimeZoneFormat
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString pattern("VVVV");
+ Locale loc("en_US");
+
+ // Make two identical Formats
+ SimpleDateFormat fmt_rhs(pattern, loc, status);
+ SimpleDateFormat fmt_lhs(pattern, loc, status);
+
+ // Setup a custom TimeZoneFormat
+ TimeZoneFormat* tzFmt = TimeZoneFormat::createInstance(Locale("de_DE"), status);
+ tzFmt->setGMTPattern(UnicodeString("UTC{0}"), status);
+ tzFmt->setGMTZeroFormat(UnicodeString("UTC"), status);
+
+ // Set custom TimeZoneFormat in fmt1 before assignment. Use
+ // adoptTimeZoneFormat instead of setTimeZoneFormat to delegate
+ // cleanup of tzFmt to SimpleDateFormat
+ fmt_rhs.adoptTimeZoneFormat(tzFmt);
+
+ // Make sure TimeZoneFormat is DIFFERENT between fmt_lhs & fmt_rhs at this point.
+ // Direct comparison with TimeZoneFormat::operator== does not suffice as it only
+ // checks for 'semantically equal' rather than 'identical' -- compare results of
+ // SimpleDateFormat::format() instead
+ UnicodeString res_rhs; fmt_rhs.format(0.0, res_rhs);
+ UnicodeString res_lhs_pre_assign; fmt_lhs.format(0.0, res_lhs_pre_assign);
+ if (res_lhs_pre_assign == res_rhs) {
+ errln(UnicodeString("Error: adoptTimeZoneFormat failed to set custom TimeZoneFormat into 'fmt_rhs'"));
+ }
+
+ // Invoke assignment operator and make sure formatted outputs from both objects are
+ // now identical (i.e. TimeZoneFormat, among other members, is correctly copied to LHS)
+ fmt_lhs = fmt_rhs;
+ UnicodeString res_lhs_post_assign; fmt_lhs.format(0.0, res_lhs_post_assign);
+ if (res_lhs_post_assign != res_rhs) {
+ errln(UnicodeString("Error: assigned instance did not take up TimeZoneFormat from original"));
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
//eof
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
index 305487db17c..ecad4312c9a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
@@ -59,6 +59,7 @@ public:
void TestT10334(void);
void TestT10619(void);
void TestT10855(void);
+ void TestT10858(void);
void TestT10906(void);
void TestT13380(void);
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp
index 01b7c8087ca..5fb5e5c6d97 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp
@@ -470,7 +470,14 @@ void DateFormatRoundTripTest::test(DateFormat *fmt, const Locale &origLocale, UB
} else if(!strcmp(type,"hebrew")) {
maxSmatch = 3;
maxDmatch = 3;
- }
+ } else if (timeOnly && uprv_strcmp(origLocale.getName(),"ar_JO@calendar=islamic-civil")==0 &&
+ logKnownIssue("21049", "ar_JO@calendar=islamic-civil timeOnly roundtrip converges too slowly")) {
+ // For some reason, for time-only tests, ar_JO@calendar=islamic-civil is no
+ // longer converging to a match as fast as expected above. Investigate with
+ // ICU-21022, but meanwhile allow more cycles for convergence.
+ maxSmatch = 2;
+ maxDmatch = 3;
+ }
}
// Use @v to see verbose results on successful cases
@@ -478,7 +485,9 @@ void DateFormatRoundTripTest::test(DateFormat *fmt, const Locale &origLocale, UB
if (optionv || fail) {
if (fail) {
errln(UnicodeString("\nFAIL: Pattern: ") + pat +
- " in Locale: " + origLocale.getName());
+ " in Locale: " + origLocale.getName() +
+ "\nget dmatch: " + dmatch + " (expected max " + maxDmatch +
+ "), smatch: " + smatch + " (expected max " + maxSmatch + ")");
} else {
errln(UnicodeString("\nOk: Pattern: ") + pat +
" in Locale: " + origLocale.getName());
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
index 9684e882b0f..3bd51368569 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
@@ -88,6 +88,7 @@ void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &nam
TESTCASE_AUTO(TestHebrewClone);
TESTCASE_AUTO(TestDateFormatSymbolsClone);
TESTCASE_AUTO(TestTimeZoneDisplayName);
+ TESTCASE_AUTO(TestTimeZoneInLocale);
TESTCASE_AUTO(TestRoundtripWithCalendar);
TESTCASE_AUTO(Test6338);
TESTCASE_AUTO(Test6726);
@@ -128,6 +129,7 @@ void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &nam
TESTCASE_AUTO(TestDayPeriodParsing);
TESTCASE_AUTO(TestParseRegression13744);
TESTCASE_AUTO(TestAdoptCalendarLeak);
+ TESTCASE_AUTO(Test20741_ABFields);
TESTCASE_AUTO_END;
}
@@ -2856,13 +2858,13 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
{ "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
{ "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
- { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
+ { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "Indische Normalzeit", "+5:30" },
{ "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
{ "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
{ "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
- { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
+ { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "Indische Normalzeit", "+5:30" },
{ "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "Indien Zeit", "Asia/Calcutta" },
- { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indische Zeit", "Asia/Calcutta" },
+ { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indische Normalzeit", "Asia/Calcutta" },
// ==========
@@ -3358,7 +3360,7 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
- { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
+ { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "+1:00" },
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u12A5\\u1295\\u130D\\u120A\\u12DD", "Europe/London" },
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u12A5\\u1295\\u130D\\u120A\\u12DD", "Europe/London" },
@@ -3441,6 +3443,82 @@ void DateFormatTest::TestTimeZoneDisplayName()
}
}
+void DateFormatTest::TestTimeZoneInLocale()
+{
+ const char *tests[][3] = {
+ { "en-u-tz-usden", "America/Denver", "gregorian" },
+ { "es-u-tz-usden", "America/Denver", "gregorian" },
+ { "ms-u-tz-mykul", "Asia/Kuala_Lumpur", "gregorian" },
+ { "zh-u-tz-mykul", "Asia/Kuala_Lumpur", "gregorian" },
+ { "fr-u-ca-buddhist-tz-phmnl", "Asia/Manila", "buddhist" },
+ { "th-u-ca-chinese-tz-gblon", "Europe/London", "chinese" },
+ { "de-u-ca-coptic-tz-ciabj", "Africa/Abidjan", "coptic" },
+ { "ja-u-ca-dangi-tz-hkhkg", "Asia/Hong_Kong", "dangi" },
+ { "da-u-ca-ethioaa-tz-ruunera", "Asia/Ust-Nera", "ethiopic-amete-alem" },
+ { "ko-u-ca-ethiopic-tz-cvrai", "Atlantic/Cape_Verde", "ethiopic" },
+ { "fil-u-ca-gregory-tz-aubne", "Australia/Brisbane", "gregorian" },
+ { "fa-u-ca-hebrew-tz-brrbr", "America/Rio_Branco", "hebrew" },
+ { "gr-u-ca-indian-tz-lccas", "America/St_Lucia", "indian" },
+ { "or-u-ca-islamic-tz-cayyn", "America/Swift_Current", "islamic" },
+ { "my-u-ca-islamic-umalqura-tz-kzala", "Asia/Almaty", "islamic-umalqura" },
+ { "lo-u-ca-islamic-tbla-tz-bmbda", "Atlantic/Bermuda", "islamic-tbla" },
+ { "km-u-ca-islamic-civil-tz-aqplm", "Antarctica/Palmer", "islamic-civil" },
+ { "kk-u-ca-islamic-rgsa-tz-usanc", "America/Anchorage", "islamic" },
+ { "ar-u-ca-iso8601-tz-bjptn", "Africa/Porto-Novo", "gregorian" },
+ { "he-u-ca-japanese-tz-tzdar", "Africa/Dar_es_Salaam", "japanese" },
+ { "bs-u-ca-persian-tz-etadd", "Africa/Addis_Ababa", "persian" },
+ { "it-u-ca-roc-tz-aruaq", "America/Argentina/San_Juan", "roc" },
+ };
+
+ for (int32_t i = 0; i < UPRV_LENGTHOF(tests); ++i) {
+ UErrorCode status = U_ZERO_ERROR;
+ const char **testLine = tests[i];
+ Locale locale(testLine[0]);
+ UnicodeString expectedTimezone(testLine[1], -1, US_INV);
+ UnicodeString actual;
+
+ SimpleDateFormat smptfmt("Z", locale, status);
+ ASSERT_OK(status);
+ assertEquals("TimeZone from SimpleDateFormat constructor",
+ expectedTimezone, smptfmt.getTimeZone().getID(actual));
+ assertEquals("Calendar from SimpleDateFormat constructor",
+ testLine[2], smptfmt.getCalendar()->getType());
+
+ LocalPointer<DateFormat> datefmt(
+ DateFormat::createDateInstance(DateFormat::kDefault, locale));
+ if (datefmt == nullptr) {
+ dataerrln("Error calling DateFormat::createDateInstance()");
+ return;
+ }
+ assertEquals("TimeZone from DateFormat::createDateInstance",
+ expectedTimezone, datefmt->getTimeZone().getID(actual));
+ assertEquals("Calendar from DateFormat::createDateInstance",
+ testLine[2], datefmt->getCalendar()->getType());
+ LocalPointer<DateFormat> timefmt(
+ DateFormat::createTimeInstance(DateFormat::kDefault, locale));
+ if (timefmt == nullptr) {
+ dataerrln("Error calling DateFormat::createTimeInstance()");
+ return;
+ }
+ assertEquals("TimeZone from TimeFormat::createTimeInstance",
+ expectedTimezone, timefmt->getTimeZone().getID(actual));
+ assertEquals("Calendar from DateFormat::createTimeInstance",
+ testLine[2], timefmt->getCalendar()->getType());
+
+ LocalPointer<DateFormat> datetimefmt(
+ DateFormat::createDateTimeInstance(
+ DateFormat::kDefault, DateFormat::kDefault, locale));
+ if (datetimefmt == nullptr) {
+ dataerrln("Error calling DateFormat::createDateTimeInstance()");
+ return;
+ }
+ assertEquals("TimeZone from DateTimeFormat::createDateTimeInstance",
+ expectedTimezone, datetimefmt->getTimeZone().getID(actual));
+ assertEquals("Calendar from DateFormat::createDateTimeInstance",
+ testLine[2], datetimefmt->getCalendar()->getType());
+ }
+}
+
void DateFormatTest::TestRoundtripWithCalendar(void) {
UErrorCode status = U_ZERO_ERROR;
@@ -4912,7 +4990,37 @@ void DateFormatTest::TestPatternFromSkeleton() {
{Locale::getEnglish(), "jjmm", "h:mm a"},
{Locale::getEnglish(), "JJmm", "hh:mm"},
{Locale::getGerman(), "jjmm", "HH:mm"},
- {Locale::getGerman(), "JJmm", "HH:mm"}
+ {Locale::getGerman(), "JJmm", "HH:mm"},
+ // Ticket #20739
+ // minutes+milliseconds, seconds missing, should be repaired
+ {Locale::getEnglish(), "SSSSm", "mm:ss.SSSS"},
+ {Locale::getEnglish(), "mSSSS", "mm:ss.SSSS"},
+ {Locale::getEnglish(), "SSSm", "mm:ss.SSS"},
+ {Locale::getEnglish(), "mSSS", "mm:ss.SSS"},
+ {Locale::getEnglish(), "SSm", "mm:ss.SS"},
+ {Locale::getEnglish(), "mSS", "mm:ss.SS"},
+ {Locale::getEnglish(), "Sm", "mm:ss.S"},
+ {Locale::getEnglish(), "mS", "mm:ss.S"},
+ // only milliseconds, untouched, no repairs
+ {Locale::getEnglish(), "S", "S"},
+ {Locale::getEnglish(), "SS", "SS"},
+ {Locale::getEnglish(), "SSS", "SSS"},
+ {Locale::getEnglish(), "SSSS", "SSSS"},
+ // hour:minute+seconds+milliseconds, correct, no repairs, proper pattern
+ {Locale::getEnglish(), "jmsSSS", "h:mm:ss.SSS a"},
+ {Locale::getEnglish(), "jmSSS", "h:mm:ss.SSS a"},
+ // Ticket #20738
+ // seconds+milliseconds, correct, no repairs, proper pattern
+ {Locale::getEnglish(), "sS", "s.S"},
+ {Locale::getEnglish(), "sSS", "s.SS"},
+ {Locale::getEnglish(), "sSSS", "s.SSS"},
+ {Locale::getEnglish(), "sSSSS", "s.SSSS"},
+ {Locale::getEnglish(), "sS", "s.S"},
+ // minutes+seconds+milliseconds, correct, no repairs, proper pattern
+ {Locale::getEnglish(), "msS", "mm:ss.S"},
+ {Locale::getEnglish(), "msSS", "mm:ss.SS"},
+ {Locale::getEnglish(), "msSSS", "mm:ss.SSS"},
+ {Locale::getEnglish(), "msSSSS", "mm:ss.SSSS"}
};
for (size_t i = 0; i < UPRV_LENGTHOF(TESTDATA); i++) {
@@ -5545,14 +5653,64 @@ void DateFormatTest::TestAdoptCalendarLeak() {
UErrorCode status = U_ZERO_ERROR;
// This test relies on the locale fullName exceeding ULOC_FULLNAME_CAPACITY
// in order for setKeywordValue to fail.
+ Calendar* cal = Calendar::createInstance(status);
+ ASSERT_OK(status);
SimpleDateFormat sdf(
"d.M.y",
Locale("de__POSIX@colstrength=primary;currency=eur;em=default;"
"hours=h23;lb=strict;lw=normal;measure=metric;numbers=latn;"
"rg=atzzzz;sd=atat1;ss=none;timezone=Europe/Vienna"),
status);
- ASSERT_OK(status);
- sdf.adoptCalendar(Calendar::createInstance(status));
+ // ASSERT_OK(status); Please do NOT add ASSERT_OK here. The point of this
+ // test is to ensure sdf.adoptCalendar won't leak AFTER the above FAILED.
+ // If the following caused crash we should fix the implementation not change
+ // this test.
+ sdf.adoptCalendar(cal);
+}
+
+/**
+ * Test that 'a' and 'B' fields are not duplicated in the field position iterator.
+ */
+void DateFormatTest::Test20741_ABFields() {
+ IcuTestErrorCode status(*this, "Test20741_ABFields");
+
+ const char16_t timeZone[] = u"PST8PDT";
+
+ UnicodeString skeletons[] = {u"EEEEEBBBBB", u"EEEEEbbbbb"};
+
+ for (int32_t j = 0; j < 2; j++) {
+ UnicodeString skeleton = skeletons[j];
+
+ int32_t count = 0;
+ const Locale* locales = Locale::getAvailableLocales(count);
+ for (int32_t i = 0; i < count; i++) {
+ if (quick && (i % 17) != 0) { continue; }
+
+ const Locale locale = locales[i];
+ LocalPointer<DateTimePatternGenerator> gen(DateTimePatternGenerator::createInstance(locale, status));
+ UnicodeString pattern = gen->getBestPattern(skeleton, status);
+
+ SimpleDateFormat dateFormat(pattern, locale, status);
+ FieldPositionIterator fpositer;
+ UnicodeString result;
+ LocalPointer<Calendar> calendar(Calendar::createInstance(TimeZone::createTimeZone(timeZone), status));
+ calendar->setTime(UDate(0), status);
+ dateFormat.format(*calendar, result, &fpositer, status);
+
+ FieldPosition curFieldPosition;
+ FieldPosition lastFieldPosition;
+ lastFieldPosition.setBeginIndex(-1);
+ lastFieldPosition.setEndIndex(-1);
+ while(fpositer.next(curFieldPosition)) {
+ assertFalse("Field missing on pattern", pattern.indexOf(PATTERN_CHARS[curFieldPosition.getField()]) == -1);
+ if (curFieldPosition.getBeginIndex() == lastFieldPosition.getBeginIndex() && curFieldPosition.getEndIndex() == lastFieldPosition.getEndIndex()) {
+ assertEquals("Different fields at same position", PATTERN_CHARS[curFieldPosition.getField()], PATTERN_CHARS[lastFieldPosition.getField()]);
+ }
+
+ lastFieldPosition = curFieldPosition;
+ }
+ }
+ }
}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
index fd07b5ae0e3..eef0d224931 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
@@ -226,6 +226,8 @@ public:
void TestTimeZoneDisplayName(void);
+ void TestTimeZoneInLocale(void);
+
void TestRoundtripWithCalendar(void);
public:
@@ -263,6 +265,7 @@ public:
void TestDayPeriodParsing();
void TestParseRegression13744();
void TestAdoptCalendarLeak();
+ void Test20741_ABFields();
private:
UBool showParse(DateFormat &format, const UnicodeString &formattedString);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
index e2a9faa25a0..22a1cb3bcac 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
@@ -57,6 +57,11 @@ void DateIntervalFormatTest::runIndexedTest( int32_t index, UBool exec, const ch
TESTCASE(8, testTicket11669);
TESTCASE(9, testTicket12065);
TESTCASE(10, testFormattedDateInterval);
+ TESTCASE(11, testCreateInstanceForAllLocales);
+ TESTCASE(12, testTicket20707);
+ TESTCASE(13, testFormatMillisecond);
+ TESTCASE(14, testHourMetacharacters);
+ TESTCASE(15, testContext);
default: name = ""; break;
}
}
@@ -830,7 +835,7 @@ void DateIntervalFormatTest::testFormat() {
"zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMMy", "2007\\u5e7410\\u6708\\u81f311\\u6708",
- "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmv", "2007/10/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10 \\u2013 2007/11/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10",
+ "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmv", "2007/10/10\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10 \\u2013 2007/11/10\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10",
"zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMMy", "2007\\u5e7411\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c",
@@ -859,24 +864,24 @@ void DateIntervalFormatTest::testFormat() {
"zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMM", "11\\u6708", // (fixed expected result per ticket:6626: and others)
- "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmz", "2007/11/10 GMT-8 \\u4e0a\\u534810:10 \\u2013 2007/11/20 GMT-8 \\u4e0a\\u534810:10",
+ "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmz", "2007/11/10GMT-8 \\u4e0a\\u534810:10 \\u2013 2007/11/20GMT-8 \\u4e0a\\u534810:10",
- "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "h", "2007/11/10 \\u4e0a\\u534810\\u65f6 \\u2013 2007/11/20 \\u4e0a\\u534810\\u65f6",
+ "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "h", "2007/11/10\\u4e0a\\u534810\\u65f6 \\u2013 2007/11/20\\u4e0a\\u534810\\u65f6",
"zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMMMy", "2007\\u5e741\\u670810\\u65e5\\u661f\\u671f\\u4e09", // (fixed expected result per ticket:6626:)
"zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hm", "\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10",
- "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hmz", "GMT-8\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10",
+ "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hmz", "GMT-8 \\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10",
"zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "h", "\\u4e0a\\u534810\\u65F6\\u81f3\\u4e0b\\u53482\\u65f6",
- "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810\\u65F6\\u81F3\\u4E0B\\u53482\\u65F6",
+ "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "hv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810\\u65F6\\u81F3\\u4E0B\\u53482\\u65F6",
"zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hm", "\\u4e0a\\u534810:00\\u81f310:20",
- "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hmv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810:00\\u81F310:20",
+ "zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hmv", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:00\\u81F310:20",
"zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 10:20:10", "hz", "GMT-8\\u4e0a\\u534810\\u65f6",
@@ -1073,6 +1078,102 @@ void DateIntervalFormatTest::testFormat() {
}
+/**
+ * Test handling of hour and day period metacharacters
+ */
+void DateIntervalFormatTest::testHourMetacharacters() {
+ // first item is date pattern
+ // followed by a group of locale/from_data/to_data/skeleton/interval_data
+ // Note that from_data/to_data are specified using era names from root, for the calendar specified by locale.
+ const char* DATA[] = {
+ "GGGGG y MM dd HH:mm:ss", // pattern for from_data/to_data
+
+ // This test is for tickets ICU-21154, ICU-21155, and ICU-21156 and is intended to verify
+ // that all of the special skeleton characters for hours and day periods work as expected
+ // with date intervals:
+ // - If a, b, or B is included in the skeleton, it correctly sets the length of the day-period field
+ // - If k or K is included, it behaves the same as H or h, except for the difference in the actual
+ // number used for the hour.
+ // - If j is included, it behaves the same as either h or H as appropriate, and multiple j's have the
+ // intended effect on the length of the day period field (if there is one)
+ // - If J is included, it correctly suppresses the day period field if j would include it
+ // - If C is included, it behaves the same as j and brings up the correct day period field
+ // - In all cases, if the day period of both ends of the range is the same, you only see it once
+
+ // baseline (h and H)
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hh", "12 \\u2013 1 AM",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "HH", "00\\u201301 Uhr",
+
+ // k and K (ICU-21154 and ICU-21156)
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "KK", "0 \\u2013 1 AM",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "kk", "24\\u201301 Uhr",
+
+ // different lengths of the 'a' field
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "ha", "10 AM \\u2013 1 PM",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "ha", "12 \\u2013 1 AM",
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "haaaaa", "10 a \\u2013 12 p",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "haaaaa", "12 \\u2013 1 a",
+
+ // j (ICU-21155)
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jj", "10 AM \\u2013 1 PM",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "12 \\u2013 1 AM",
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jjjjj", "10 a \\u2013 1 p",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jjjjj", "12 \\u2013 1 a",
+ "de", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jj", "10\\u201313 Uhr",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "00\\u201301 Uhr",
+ "de", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jjjjj", "10\\u201313 Uhr",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jjjjj", "00\\u201301 Uhr",
+
+ // b and B
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "hb", "10 AM \\u2013 12 noon",
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 12:00:00", "hbbbbb", "10 a \\u2013 12 n",
+ "en", "CE 2010 09 27 13:00:00", "CE 2010 09 27 14:00:00", "hb", "1 \\u2013 2 PM",
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "10 in the morning \\u2013 1 in the afternoon",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "12 \\u2013 1 at night",
+
+ // J
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "J", "10 \\u2013 1",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "J", "12 \\u2013 1",
+ "de", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "J", "10\\u201313 Uhr",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "J", "00\\u201301 Uhr",
+
+ // C
+ // (for English and German, C should do the same thing as j)
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "10 AM \\u2013 1 PM",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "12 \\u2013 1 AM",
+ "en", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CCCCC", "10 a \\u2013 1 p",
+ "en", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CCCCC", "12 \\u2013 1 a",
+ "de", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "10\\u201313 Uhr",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "00\\u201301 Uhr",
+ "de", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CCCCC", "10\\u201313 Uhr",
+ "de", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CCCCC", "00\\u201301 Uhr",
+ // (for zh_HK and hi_IN, j maps to ha, but C maps to hB)
+ "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jj", "\\u4E0A\\u534810\\u6642\\u81F3\\u4E0B\\u53481\\u6642",
+ "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "\\u4E0A\\u534812\\u6642\\u81F31\\u6642",
+ "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "\\u4E0A\\u534810\\u6642 \\u2013 \\u4E0B\\u53481\\u6642",
+ "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "\\u51CC\\u666812\\u20131\\u6642",
+ "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "\\u4E0A\\u534810\\u6642 \\u2013 \\u4E0B\\u53481\\u6642",
+ "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "\\u51CC\\u666812\\u20131\\u6642",
+ "hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jj", "10 am \\u2013 1 pm",
+ "hi_IN", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "12\\u20131 am",
+ "hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "\\u0938\\u0941\\u092C\\u0939 10 \\u2013 \\u0926\\u094B\\u092A\\u0939\\u0930 1",
+ "hi_IN", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "\\u0930\\u093E\\u0924 12\\u20131",
+ "hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "\\u0938\\u0941\\u092C\\u0939 10 \\u2013 \\u0926\\u094B\\u092A\\u0939\\u0930 1",
+ "hi_IN", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "\\u0930\\u093E\\u0924 12\\u20131",
+
+ // regression test for ICU-21342
+ "en_GB", "CE 2010 09 27 00:00:00", "CE 2010 09 27 10:00:00", "kk", "24\\u201310",
+ "en_GB", "CE 2010 09 27 00:00:00", "CE 2010 09 27 11:00:00", "kk", "24\\u201311",
+ "en_GB", "CE 2010 09 27 00:00:00", "CE 2010 09 27 12:00:00", "kk", "24\\u201312",
+ "en_GB", "CE 2010 09 27 00:00:00", "CE 2010 09 27 13:00:00", "kk", "24\\u201313",
+
+ // regression test for ICU-21343
+ "de", "CE 2010 09 27 01:00:00", "CE 2010 09 27 10:00:00", "KK", "1 \\u2013 10 Uhr AM",
+ };
+ expect(DATA, UPRV_LENGTHOF(DATA));
+}
+
+
void DateIntervalFormatTest::expect(const char** data, int32_t data_length) {
int32_t i = 0;
UErrorCode ec = U_ZERO_ERROR;
@@ -1169,21 +1270,100 @@ void DateIntervalFormatTest::testFormatUserDII() {
"de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10. Jan. 2007",
- "es", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "10 oct. 2007 --- 10 oct. 2008",
+ "es", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "10 oct 2007 --- 10 oct 2008",
- "es", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 oct. 10 - nov. 2007",
+ "es", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 oct 10 - nov 2007",
- "es", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "10 nov. 2007 --- 20 nov. 2007",
+ "es", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "10 nov 2007 --- 20 nov 2007",
- "es", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "10 ene. 2007",
+ "es", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "10 ene 2007",
- "es", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10 ene. 2007",
+ "es", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10 ene 2007",
- "es", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "10 ene. 2007",
+ "es", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "10 ene 2007",
};
expectUserDII(DATA, UPRV_LENGTHOF(DATA));
}
+/*
+ * Test format using UDisplayContext
+ */
+#define CAP_NONE UDISPCTX_CAPITALIZATION_NONE
+#define CAP_BEGIN UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE
+#define CAP_LIST UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU
+#define CAP_ALONE UDISPCTX_CAPITALIZATION_FOR_STANDALONE
+#define _DAY (24.0*60.0*60.0*1000.0)
+
+void DateIntervalFormatTest::testContext() {
+ static const UDate startDate = 1285599629000.0; // 2010-Sep-27 0800 in America/Los_Angeles
+ typedef struct {
+ const char * locale;
+ const char * skeleton;
+ UDisplayContext context;
+ const UDate deltaDate;
+ const UChar* expectResult;
+ } DateIntervalContextItem;
+ static const DateIntervalContextItem testItems[] = {
+ { "cs", "MMMEd", CAP_NONE, 60.0*_DAY, u"po 27. 9. – pá 26. 11." },
+ { "cs", "yMMMM", CAP_NONE, 60.0*_DAY, u"září–listopad 2010" },
+ { "cs", "yMMMM", CAP_NONE, 1.0*_DAY, u"září 2010" },
+#if !UCONFIG_NO_BREAK_ITERATION
+ { "cs", "MMMEd", CAP_BEGIN, 60.0*_DAY, u"Po 27. 9. – pá 26. 11." },
+ { "cs", "yMMMM", CAP_BEGIN, 60.0*_DAY, u"Září–listopad 2010" },
+ { "cs", "yMMMM", CAP_BEGIN, 1.0*_DAY, u"Září 2010" },
+ { "cs", "MMMEd", CAP_LIST, 60.0*_DAY, u"Po 27. 9. – pá 26. 11." },
+ { "cs", "yMMMM", CAP_LIST, 60.0*_DAY, u"Září–listopad 2010" },
+ { "cs", "yMMMM", CAP_LIST, 1.0*_DAY, u"Září 2010" },
+#endif
+ { "cs", "MMMEd", CAP_ALONE, 60.0*_DAY, u"po 27. 9. – pá 26. 11." },
+ { "cs", "yMMMM", CAP_ALONE, 60.0*_DAY, u"září–listopad 2010" },
+ { "cs", "yMMMM", CAP_ALONE, 1.0*_DAY, u"září 2010" },
+ { nullptr, nullptr, CAP_NONE, 0, nullptr }
+ };
+ const DateIntervalContextItem* testItemPtr;
+ for ( testItemPtr = testItems; testItemPtr->locale != nullptr; ++testItemPtr ) {
+ UErrorCode status = U_ZERO_ERROR;
+ Locale locale(testItemPtr->locale);
+ UnicodeString skeleton(testItemPtr->skeleton, -1, US_INV);
+ LocalPointer<DateIntervalFormat> fmt(DateIntervalFormat::createInstance(skeleton, locale, status));
+ if (U_FAILURE(status)) {
+ errln("createInstance failed for locale %s skeleton %s: %s",
+ testItemPtr->locale, testItemPtr->skeleton, u_errorName(status));
+ continue;
+ }
+ fmt->adoptTimeZone(TimeZone::createTimeZone("America/Los_Angeles"));
+
+ fmt->setContext(testItemPtr->context, status);
+ if (U_FAILURE(status)) {
+ errln("setContext failed for locale %s skeleton %s context %04X: %s",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, u_errorName(status));
+ } else {
+ UDisplayContext getContext = fmt->getContext(UDISPCTX_TYPE_CAPITALIZATION, status);
+ if (U_FAILURE(status)) {
+ errln("getContext failed for locale %s skeleton %s context %04X: %s",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, u_errorName(status));
+ } else if (getContext != testItemPtr->context) {
+ errln("getContext failed for locale %s skeleton %s context %04X: got context %04X",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, (unsigned)getContext);
+ }
+ }
+
+ status = U_ZERO_ERROR;
+ DateInterval interval(startDate, startDate + testItemPtr->deltaDate);
+ UnicodeString getResult;
+ FieldPosition pos(FieldPosition::DONT_CARE);
+ fmt->format(&interval, getResult, pos, status);
+ if (U_FAILURE(status)) {
+ errln("format failed for locale %s skeleton %s context %04X: %s",
+ testItemPtr->locale, testItemPtr->skeleton, (unsigned)testItemPtr->context, u_errorName(status));
+ continue;
+ }
+ UnicodeString expectResult(true, testItemPtr->expectResult, -1);
+ if (getResult != expectResult) {
+ errln(UnicodeString("format expected ") + expectResult + UnicodeString(" but got ") + getResult);
+ }
+ }
+}
void DateIntervalFormatTest::testSetIntervalPatternNoSideEffect() {
UErrorCode ec = U_ZERO_ERROR;
@@ -1768,5 +1948,191 @@ void DateIntervalFormatTest::testFormattedDateInterval() {
}
}
+void DateIntervalFormatTest::testCreateInstanceForAllLocales() {
+ IcuTestErrorCode status(*this, "testCreateInstanceForAllLocales");
+ int32_t locale_count = 0;
+ const Locale* locales = icu::Locale::getAvailableLocales(locale_count);
+ // Iterate through all locales
+ for (int32_t i = 0; i < locale_count; i++) {
+ std::unique_ptr<icu::StringEnumeration> calendars(
+ icu::Calendar::getKeywordValuesForLocale(
+ "calendar", locales[i], FALSE, status));
+ int32_t calendar_count = calendars->count(status);
+ if (status.errIfFailureAndReset()) { break; }
+ // In quick mode, only run 1/5 of locale combination
+ // to make the test run faster.
+ if (quick && (i % 5 != 0)) continue;
+ LocalPointer<DateIntervalFormat> fmt(
+ DateIntervalFormat::createInstance(u"dMMMMy", locales[i], status),
+ status);
+ if (status.errIfFailureAndReset(locales[i].getName())) {
+ continue;
+ }
+ // Iterate through all calendars in this locale
+ for (int32_t j = 0; j < calendar_count; j++) {
+ // In quick mode, only run 1/7 of locale/calendar combination
+ // to make the test run faster.
+ if (quick && ((i * j) % 7 != 0)) continue;
+ const char* calendar = calendars->next(nullptr, status);
+ Locale locale(locales[i]);
+ locale.setKeywordValue("calendar", calendar, status);
+ fmt.adoptInsteadAndCheckErrorCode(
+ DateIntervalFormat::createInstance(u"dMMMMy", locale, status),
+ status);
+ status.errIfFailureAndReset(locales[i].getName());
+ }
+ }
+}
+
+void DateIntervalFormatTest::testFormatMillisecond() {
+ struct
+ {
+ int year;
+ int month;
+ int day;
+ int from_hour;
+ int from_miniute;
+ int from_second;
+ int from_millisecond;
+ int to_hour;
+ int to_miniute;
+ int to_second;
+ int to_millisecond;
+ const char* skeleton;
+ const char16_t* expected;
+ }
+ kTestCases [] =
+ {
+ // From To
+ // y m d h m s ms h m s ms skeleton expected
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "ms", u"23:45"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "msS", u"23:45.3"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "msSS", u"23:45.32"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "msSSS", u"23:45.321"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "ms", u"23:45"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "msS", u"23:45.3 \u2013 23:45.9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "msSS", u"23:45.32 \u2013 23:45.98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "msSSS", u"23:45.321 \u2013 23:45.987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "ms", u"23:45 \u2013 23:46"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "msS", u"23:45.3 \u2013 23:46.9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "msSS", u"23:45.32 \u2013 23:46.98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "msSSS", u"23:45.321 \u2013 23:46.987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "ms", u"23:45 \u2013 24:45"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "msS", u"23:45.3 \u2013 24:45.9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "msSS", u"23:45.32 \u2013 24:45.98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "msSSS", u"23:45.321 \u2013 24:45.987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "s", u"45"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "sS", u"45.3"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "sSS", u"45.32"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "sSSS", u"45.321"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "s", u"45"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "sS", u"45.3 \u2013 45.9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "sSS", u"45.32 \u2013 45.98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "sSSS", u"45.321 \u2013 45.987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "s", u"45 \u2013 46"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "sS", u"45.3 \u2013 46.9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "sSS", u"45.32 \u2013 46.98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "sSSS", u"45.321 \u2013 46.987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "s", u"45 \u2013 45"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "sS", u"45.3 \u2013 45.9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "sSS", u"45.32 \u2013 45.98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "sSSS", u"45.321 \u2013 45.987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "S", u"3"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "SS", u"32"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 321, "SSS", u"321"},
+
+ // Same millisecond but in different second.
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 321, "S", u"3 \u2013 3"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 321, "SS", u"32 \u2013 32"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 321, "SSS", u"321 \u2013 321"},
+
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "S", u"3 \u2013 9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "SS", u"32 \u2013 98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 45, 987, "SSS", u"321 \u2013 987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "S", u"3 \u2013 9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "SS", u"32 \u2013 98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 1, 23, 46, 987, "SSS", u"321 \u2013 987"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "S", u"3 \u2013 9"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "SS", u"32 \u2013 98"},
+ { 2019, 2, 10, 1, 23, 45, 321, 2, 24, 45, 987, "SSS", u"321 \u2013 987"},
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nullptr, nullptr},
+ };
+
+ const Locale &enLocale = Locale::getEnglish();
+ IcuTestErrorCode status(*this, "testFormatMillisecond");
+ LocalPointer<Calendar> calendar(Calendar::createInstance(enLocale, status));
+ if (status.errIfFailureAndReset()) { return; }
+
+ for (int32_t i = 0; kTestCases[i].year > 0; i++) {
+ LocalPointer<DateIntervalFormat> fmt(DateIntervalFormat::createInstance(
+ kTestCases[i].skeleton, enLocale, status));
+ if (status.errIfFailureAndReset()) { continue; }
+
+ calendar->clear();
+ calendar->set(kTestCases[i].year, kTestCases[i].month, kTestCases[i].day,
+ kTestCases[i].from_hour, kTestCases[i].from_miniute, kTestCases[i].from_second);
+ UDate from = calendar->getTime(status) + kTestCases[i].from_millisecond;
+ if (status.errIfFailureAndReset()) { continue; }
+
+ calendar->clear();
+ calendar->set(kTestCases[i].year, kTestCases[i].month, kTestCases[i].day,
+ kTestCases[i].to_hour, kTestCases[i].to_miniute, kTestCases[i].to_second);
+ UDate to = calendar->getTime(status) + kTestCases[i].to_millisecond;
+ FormattedDateInterval res = fmt->formatToValue(DateInterval(from, to), status);
+ if (status.errIfFailureAndReset()) { continue; }
+
+ UnicodeString formatted = res.toString(status);
+ if (status.errIfFailureAndReset()) { continue; }
+ if (formatted != kTestCases[i].expected) {
+ std::string tmp1;
+ std::string tmp2;
+ errln("Case %d for skeleton %s : Got %s but expect %s",
+ i, kTestCases[i].skeleton, formatted.toUTF8String<std::string>(tmp1).c_str(),
+ UnicodeString(kTestCases[i].expected).toUTF8String<std::string>(tmp2).c_str());
+ }
+ }
+}
+
+void DateIntervalFormatTest::testTicket20707() {
+ IcuTestErrorCode status(*this, "testTicket20707");
+
+ const char16_t timeZone[] = u"UTC";
+ Locale locales[] = {"en-u-hc-h24", "en-u-hc-h23", "en-u-hc-h12", "en-u-hc-h11", "en", "en-u-hc-h25", "hi-IN-u-hc-h11"};
+
+ // Clomuns: hh, HH, kk, KK, jj, JJs, CC
+ UnicodeString expected[][7] = {
+ // Hour-cycle: k
+ {u"12 AM", u"24", u"24", u"12 AM", u"24", u"0 (hour: 24)", u"12 AM"},
+ // Hour-cycle: H
+ {u"12 AM", u"00", u"00", u"12 AM", u"00", u"0 (hour: 00)", u"12 AM"},
+ // Hour-cycle: h
+ {u"12 AM", u"00", u"00", u"12 AM", u"12 AM", u"0 (hour: 12)", u"12 AM"},
+ // Hour-cycle: K
+ {u"0 AM", u"00", u"00", u"0 AM", u"0 AM", u"0 (hour: 00)", u"0 AM"},
+ {u"12 AM", u"00", u"00", u"12 AM", u"12 AM", u"0 (hour: 12)", u"12 AM"},
+ {u"12 AM", u"00", u"00", u"12 AM", u"12 AM", u"0 (hour: 12)", u"12 AM"},
+ // Hour-cycle: K
+ {u"0 am", u"00", u"00", u"0 am", u"0 am", u"0 (\u0918\u0902\u091F\u093E: 00)", u"\u0930\u093E\u0924 0"}
+ };
+
+ int32_t i = 0;
+ for (Locale locale : locales) {
+ int32_t j = 0;
+ for (const UnicodeString skeleton : {u"hh", u"HH", u"kk", u"KK", u"jj", u"JJs", u"CC"}) {
+ LocalPointer<DateIntervalFormat> dtifmt(DateIntervalFormat::createInstance(skeleton, locale, status));
+ if (status.errDataIfFailureAndReset()) {
+ continue;
+ }
+ FieldPosition fposition;
+ UnicodeString result;
+ LocalPointer<Calendar> calendar(Calendar::createInstance(TimeZone::createTimeZone(timeZone), status));
+ calendar->setTime(UDate(1563235200000), status);
+ dtifmt->format(*calendar, *calendar, result, fposition, status);
+
+ assertEquals("Formatted result", expected[i][j++], result);
+ }
+ i++;
+ }
+}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
index 9a72d6ebd1e..700eb4fb9e1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
@@ -34,11 +34,24 @@ public:
*/
void testFormat();
+
+ /**
+ * Test handling of hour and day period metacharacters
+ */
+ void testHourMetacharacters();
+
+ void testFormatMillisecond();
+
/**
* Test formatting using user defined DateIntervalInfo
*/
void testFormatUserDII();
+ /*
+ * Test format using UDisplayContext
+ */
+ void testContext();
+
/**
* Test for no unwanted side effects when setting
* interval patterns.
@@ -65,6 +78,9 @@ public:
void testTicket12065();
void testFormattedDateInterval();
+ void testCreateInstanceForAllLocales();
+
+ void testTicket20707();
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
index 02745c12a2f..faa850aa838 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
@@ -43,6 +43,8 @@ void IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool e
TESTCASE(7, testJjMapping);
TESTCASE(8, test20640_HourCyclArsEnNH);
TESTCASE(9, testFallbackWithDefaultRootLocale);
+ TESTCASE(10, testGetDefaultHourCycle_OnEmptyInstance);
+ TESTCASE(11, test_jConsistencyOddLocales);
default: name = ""; break;
}
}
@@ -178,11 +180,11 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
UnicodeString patternResults_es[] = {
// es // 4 es
UnicodeString("1/1999"), // 00: yM -> "M/y"
- UnicodeString("ene. 1999"), // 01: yMMM -> "MMM y"
+ UnicodeString("ene 1999"), // 01: yMMM -> "MMM y"
UnicodeString("13/1/1999"), // 02: yMd -> "d/M/y"
- UnicodeString("13 ene. 1999"), // 03: yMMMd -> "d MMM y"
+ UnicodeString("13 ene 1999"), // 03: yMMMd -> "d MMM y"
UnicodeString("13/1"), // 04: Md -> "d/M"
- UnicodeString("13 ene."), // 05: MMMd -> "d 'de' MMM"
+ UnicodeString("13 ene"), // 05: MMMd -> "d 'de' MMM"
UnicodeString("13 de enero"), // 06: MMMMd -> "d 'de' MMMM"
UnicodeString("T1 1999"), // 07: yQQQ -> "QQQ y"
CharsToUnicodeString("11:58 p.\\u00A0m."), // 08: hhmm -> "hh:mm a"
@@ -190,8 +192,8 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
UnicodeString("23:58"), // 10: jjmm -> "HH:mm"
UnicodeString("58:59"), // 11: mmss -> "mm:ss"
UnicodeString("enero de 1999"), // 12: yyyyMMMM -> "MMMM 'de' yyyy"
- CharsToUnicodeString("mi\\u00E9., 13 ene."), // 13: MMMEd -> "E, d MMM"
- CharsToUnicodeString("mi\\u00E9. 13"), // 14: Ed -> "EEE d"
+ CharsToUnicodeString("mi\\u00E9, 13 ene"), // 13: MMMEd -> "E, d MMM"
+ CharsToUnicodeString("mi\\u00E9 13"), // 14: Ed -> "EEE d"
UnicodeString("23:58:59,123"), // 15: jmmssSSS -> "H:mm:ss,SSS"
UnicodeString("23:58"), // 16: JJmm
};
@@ -1395,7 +1397,9 @@ void IntlTestDateTimePatternGeneratorAPI::testJjMapping() {
shortPattern.extract(0, shortPattern.length(), spBuf, 32);
jPattern.extract(0, jPattern.length(), jpBuf, 32);
const char* dfmtCalType = (dfmt->getCalendar())->getType();
- errln("ERROR: locale %s, expected j resolved char %s to occur in short time pattern '%s' for %s (best pattern: '%s')", localeID, jcBuf, spBuf, dfmtCalType, jpBuf);
+ const char* validLoc = dfmt->getLocaleID(ULOC_VALID_LOCALE, status);
+ errln("ERROR: locale %s (valid %s), expected j resolved char %s to occur in short time pattern '%s' for %s (best pattern: '%s')",
+ localeID, validLoc, jcBuf, spBuf, dfmtCalType, jpBuf);
}
break;
}
@@ -1410,18 +1414,18 @@ void IntlTestDateTimePatternGeneratorAPI::test20640_HourCyclArsEnNH() {
const char* localeName;
const char16_t* expectedDtpgPattern;
const char16_t* expectedTimePattern;
+ UDateFormatHourCycle expectedDefaultHourCycle;
} cases[] = {
// ars is interesting because it does not have a region, but it aliases
// to ar_SA, which has a region.
- {"ars", u"h a", u"h:mm a"},
+ {"ars", u"h a", u"h:mm a", UDAT_HOUR_CYCLE_12},
// en_NH is interesting because NH is a deprecated region code;
// formerly New Hebrides, now Vanuatu => VU => h.
- {"en_NH", u"h a", u"h:mm a"},
+ {"en_NH", u"h a", u"h:mm a", UDAT_HOUR_CYCLE_12},
// ch_ZH is a typo (should be zh_CN), but we should fail gracefully.
- // {"cn_ZH", u"HH", u"H:mm"}, // TODO(ICU-20653): Desired behavior
- {"cn_ZH", u"HH", u"h:mm a"}, // Actual behavior
+ {"cn_ZH", u"HH", u"HH:mm", UDAT_HOUR_CYCLE_23 }, // Desired & now actual behavior (does this fix ICU-20653?)
// a non-BCP47 locale without a country code should not fail
- {"ja_TRADITIONAL", u"H時", u"H:mm"},
+ {"ja_TRADITIONAL", u"H時", u"H:mm", UDAT_HOUR_CYCLE_23},
};
for (auto& cas : cases) {
@@ -1440,11 +1444,17 @@ void IntlTestDateTimePatternGeneratorAPI::test20640_HourCyclArsEnNH() {
if (status.errIfFailureAndReset()) {
return;
}
+ UDateFormatHourCycle defaultHourCycle = dtpg->getDefaultHourCycle(status);
+ if (status.errIfFailureAndReset()) {
+ return;
+ }
assertEquals(UnicodeString("dtpgPattern ") + cas.localeName,
cas.expectedDtpgPattern, dtpgPattern);
assertEquals(UnicodeString("timePattern ") + cas.localeName,
cas.expectedTimePattern, timePattern);
+ assertEquals(UnicodeString("defaultHour ") + cas.localeName,
+ cas.expectedDefaultHourCycle, defaultHourCycle);
}
}
@@ -1476,4 +1486,75 @@ void IntlTestDateTimePatternGeneratorAPI::testFallbackWithDefaultRootLocale() {
}
}
+// ICU-21000 Ensure that calling getDefaultHourCycle on an empty instance doesn't call UPRV_UNREACHABLE/abort.
+void IntlTestDateTimePatternGeneratorAPI::testGetDefaultHourCycle_OnEmptyInstance() {
+ UErrorCode status = U_ZERO_ERROR;
+
+ LocalPointer<DateTimePatternGenerator> dtpg(DateTimePatternGenerator::createEmptyInstance(status), status);
+ if (U_FAILURE(status)) {
+ errln("ERROR: createEmptyInstance failed, status: %s", u_errorName(status));
+ return;
+ }
+ (void)dtpg->getDefaultHourCycle(status);
+ if (!U_FAILURE(status)) {
+ errln("ERROR: expected getDefaultHourCycle on an empty instance to fail, status: %s", u_errorName(status));
+ return;
+ }
+
+ status = U_USELESS_COLLATOR_ERROR;
+ (void)dtpg->getDefaultHourCycle(status);
+ if (status != U_USELESS_COLLATOR_ERROR) {
+ errln("ERROR: getDefaultHourCycle shouldn't modify status if it is already failed, status: %s", u_errorName(status));
+ return;
+ }
+}
+
+void IntlTestDateTimePatternGeneratorAPI::test_jConsistencyOddLocales() { // ICU-20590
+ static const char* localeIDs[] = {
+ "en", "ro", // known languages 12h / 24h
+ "en-RO", "ro-US", // known languages with known regions, hour conflict language vs region
+ "en-XZ", "ro-XZ", // known languages 12h / 24h, unknown region
+ "xz-RO", "xz-US", // unknown language with known regions
+ "xz", // unknown language
+ "xz-ZX", // unknown language with unknown country
+ "ars", "wuu" // aliased locales
+ };
+ static const UChar* skeleton = u"jm";
+ for (const char* localeID: localeIDs) {
+ UErrorCode status = U_ZERO_ERROR;
+ Locale locale(localeID);
+ LocalPointer<DateFormat> dtfShort(DateFormat::createTimeInstance(DateFormat::kShort, locale), status);
+ if (U_FAILURE(status)) {
+ errln("DateFormat::createTimeInstance failed for locale %s: %s", localeID, u_errorName(status));
+ continue;
+ }
+ LocalPointer<DateFormat> dtfSkel(DateFormat::createInstanceForSkeleton(skeleton, locale, status));
+ if (U_FAILURE(status)) {
+ errln("DateFormat::createInstanceForSkeleton failed for locale %s: %s", localeID, u_errorName(status));
+ continue;
+ }
+ LocalPointer<DateTimePatternGenerator> dtpg(DateTimePatternGenerator::createInstance(locale, status));
+ if (U_FAILURE(status)) {
+ errln("DateTimePatternGenerator::createInstance failed for locale %s: %s", localeID, u_errorName(status));
+ continue;
+ }
+ UnicodeString dtfShortPattern, dtfSkelPattern;
+ dynamic_cast<SimpleDateFormat*>(dtfShort.getAlias())->toPattern(dtfShortPattern);
+ dynamic_cast<SimpleDateFormat*>(dtfSkel.getAlias())->toPattern(dtfSkelPattern);
+ UnicodeString dtpgPattern = (dtpg.getAlias())->getBestPattern(skeleton, status);
+ if (U_FAILURE(status)) {
+ errln("DateTimePatternGenerator::getBestPattern failed for locale %s: %s", localeID, u_errorName(status));
+ continue;
+ }
+ if (dtfShortPattern != dtfSkelPattern || dtfSkelPattern != dtpgPattern) {
+ const char* dtfShortValidLoc = dtfShort->getLocaleID(ULOC_VALID_LOCALE, status);
+ const char* dtfShortActualLoc = dtfShort->getLocaleID(ULOC_ACTUAL_LOCALE, status);
+ errln(UnicodeString("For locale ") + localeID +
+ " expected same pattern from DateTimePatGen: " + dtpgPattern +
+ ", DateFmt-forSkel: " + dtfSkelPattern + ", DateFmt-short: " + dtfShortPattern +
+ "; latter has validLoc " + dtfShortValidLoc + ", actualLoc " + dtfShortActualLoc);
+ }
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
index c0bebccd3e3..b3fb02e2bd2 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
@@ -35,6 +35,8 @@ private:
void testJjMapping();
void test20640_HourCyclArsEnNH();
void testFallbackWithDefaultRootLocale();
+ void testGetDefaultHourCycle_OnEmptyInstance();
+ void test_jConsistencyOddLocales();
};
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp
index 4ce63daec56..18f56d392dc 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp
@@ -10,6 +10,7 @@
#include "intltest.h"
#include "formatted_string_builder.h"
#include "formattedval_impl.h"
+#include "unicode/unum.h"
class FormattedStringBuilderTest : public IntlTest {
@@ -61,10 +62,9 @@ void FormattedStringBuilderTest::testInsertAppendUnicodeString() {
FormattedStringBuilder sb3;
sb1.append(str);
- // Note: UNUM_FIELD_COUNT is like passing null in Java
- sb2.append(str, UNUM_FIELD_COUNT, status);
+ sb2.append(str, kUndefinedField, status);
assertSuccess("Appending to sb2", status);
- sb3.append(str, UNUM_FIELD_COUNT, status);
+ sb3.append(str, kUndefinedField, status);
assertSuccess("Appending to sb3", status);
assertEqualsImpl(sb1, sb2);
assertEqualsImpl(str, sb3);
@@ -74,16 +74,16 @@ void FormattedStringBuilderTest::testInsertAppendUnicodeString() {
sb4.append(u"😇");
sb4.append(str);
sb4.append(u"xx");
- sb5.append(u"😇xx", UNUM_FIELD_COUNT, status);
+ sb5.append(u"😇xx", kUndefinedField, status);
assertSuccess("Appending to sb5", status);
- sb5.insert(2, str, UNUM_FIELD_COUNT, status);
+ sb5.insert(2, str, kUndefinedField, status);
assertSuccess("Inserting into sb5", status);
assertEqualsImpl(sb4, sb5);
int start = uprv_min(1, str.length());
int end = uprv_min(10, str.length());
sb4.insert(3, str, start, end - start); // UnicodeString uses length instead of end index
- sb5.insert(3, str, start, end, UNUM_FIELD_COUNT, status);
+ sb5.insert(3, str, start, end, kUndefinedField, status);
assertSuccess("Inserting into sb5 again", status);
assertEqualsImpl(sb4, sb5);
@@ -124,8 +124,8 @@ void FormattedStringBuilderTest::testSplice() {
sb1.append(cas.input);
sb1.replace(cas.startThis, cas.endThis - cas.startThis, replacement);
sb2.clear();
- sb2.append(cas.input, UNUM_FIELD_COUNT, status);
- sb2.splice(cas.startThis, cas.endThis, replacement, 0, replacement.length(), UNUM_FIELD_COUNT, status);
+ sb2.append(cas.input, kUndefinedField, status);
+ sb2.splice(cas.startThis, cas.endThis, replacement, 0, replacement.length(), kUndefinedField, status);
assertSuccess("Splicing into sb2 first time", status);
assertEqualsImpl(sb1, sb2);
@@ -137,8 +137,8 @@ void FormattedStringBuilderTest::testSplice() {
sb1.append(cas.input);
sb1.replace(cas.startThis, cas.endThis - cas.startThis, UnicodeString(replacement, 1, 2));
sb2.clear();
- sb2.append(cas.input, UNUM_FIELD_COUNT, status);
- sb2.splice(cas.startThis, cas.endThis, replacement, 1, 3, UNUM_FIELD_COUNT, status);
+ sb2.append(cas.input, kUndefinedField, status);
+ sb2.splice(cas.startThis, cas.endThis, replacement, 1, 3, kUndefinedField, status);
assertSuccess("Splicing into sb2 second time", status);
assertEqualsImpl(sb1, sb2);
}
@@ -154,9 +154,9 @@ void FormattedStringBuilderTest::testInsertAppendCodePoint() {
for (UChar32 cas : cases) {
FormattedStringBuilder sb3;
sb1.append(cas);
- sb2.appendCodePoint(cas, UNUM_FIELD_COUNT, status);
+ sb2.appendCodePoint(cas, kUndefinedField, status);
assertSuccess("Appending to sb2", status);
- sb3.appendCodePoint(cas, UNUM_FIELD_COUNT, status);
+ sb3.appendCodePoint(cas, kUndefinedField, status);
assertSuccess("Appending to sb3", status);
assertEqualsImpl(sb1, sb2);
assertEquals("Length of sb3", U16_LENGTH(cas), sb3.length());
@@ -170,9 +170,9 @@ void FormattedStringBuilderTest::testInsertAppendCodePoint() {
FormattedStringBuilder sb5;
sb4.append(u"😇xx");
sb4.insert(2, cas);
- sb5.append(u"😇xx", UNUM_FIELD_COUNT, status);
+ sb5.append(u"😇xx", kUndefinedField, status);
assertSuccess("Appending to sb5", status);
- sb5.insertCodePoint(2, cas, UNUM_FIELD_COUNT, status);
+ sb5.insertCodePoint(2, cas, kUndefinedField, status);
assertSuccess("Inserting into sb5", status);
assertEqualsImpl(sb4, sb5);
@@ -180,10 +180,10 @@ void FormattedStringBuilderTest::testInsertAppendCodePoint() {
FormattedStringBuilder sb7;
sb6.append(cas);
if (U_IS_SUPPLEMENTARY(cas)) {
- sb7.appendChar16(U16_TRAIL(cas), UNUM_FIELD_COUNT, status);
- sb7.insertChar16(0, U16_LEAD(cas), UNUM_FIELD_COUNT, status);
+ sb7.appendChar16(U16_TRAIL(cas), kUndefinedField, status);
+ sb7.insertChar16(0, U16_LEAD(cas), kUndefinedField, status);
} else {
- sb7.insertChar16(0, cas, UNUM_FIELD_COUNT, status);
+ sb7.insertChar16(0, cas, kUndefinedField, status);
}
assertSuccess("Insert/append into sb7", status);
assertEqualsImpl(sb6, sb7);
@@ -194,33 +194,35 @@ void FormattedStringBuilderTest::testCopy() {
UErrorCode status = U_ZERO_ERROR;
for (UnicodeString str : EXAMPLE_STRINGS) {
FormattedStringBuilder sb1;
- sb1.append(str, UNUM_FIELD_COUNT, status);
+ sb1.append(str, kUndefinedField, status);
assertSuccess("Appending to sb1 first time", status);
FormattedStringBuilder sb2(sb1);
assertTrue("Content should equal itself", sb1.contentEquals(sb2));
- sb1.append("12345", UNUM_FIELD_COUNT, status);
+ sb1.append("12345", kUndefinedField, status);
assertSuccess("Appending to sb1 second time", status);
assertFalse("Content should no longer equal itself", sb1.contentEquals(sb2));
}
}
void FormattedStringBuilderTest::testFields() {
+ typedef FormattedStringBuilder::Field Field;
UErrorCode status = U_ZERO_ERROR;
// Note: This is a C++11 for loop that calls the UnicodeString constructor on each iteration.
for (UnicodeString str : EXAMPLE_STRINGS) {
- FormattedValueStringBuilderImpl sbi(0);
+ FormattedValueStringBuilderImpl sbi(kUndefinedField);
FormattedStringBuilder& sb = sbi.getStringRef();
- sb.append(str, UNUM_FIELD_COUNT, status);
+ sb.append(str, kUndefinedField, status);
assertSuccess("Appending to sb", status);
- sb.append(str, UNUM_CURRENCY_FIELD, status);
+ sb.append(str, {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
assertSuccess("Appending to sb", status);
assertEquals("Reference string copied twice", str.length() * 2, sb.length());
for (int32_t i = 0; i < str.length(); i++) {
assertEquals("Null field first",
- (FormattedStringBuilder::Field) UNUM_FIELD_COUNT, sb.fieldAt(i));
+ kUndefinedField.bits, sb.fieldAt(i).bits);
assertEquals("Currency field second",
- (FormattedStringBuilder::Field) UNUM_CURRENCY_FIELD, sb.fieldAt(i + str.length()));
+ Field(UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD).bits,
+ sb.fieldAt(i + str.length()).bits);
}
// Very basic FieldPosition test. More robust tests happen in NumberFormatTest.
@@ -232,10 +234,12 @@ void FormattedStringBuilderTest::testFields() {
assertEquals("Currency end position", str.length() * 2, fp.getEndIndex());
if (str.length() > 0) {
- sb.insertCodePoint(2, 100, UNUM_INTEGER_FIELD, status);
+ sb.insertCodePoint(2, 100, {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD}, status);
assertSuccess("Inserting code point into sb", status);
assertEquals("New length", str.length() * 2 + 1, sb.length());
- assertEquals("Integer field", (FormattedStringBuilder::Field) UNUM_INTEGER_FIELD, sb.fieldAt(2));
+ assertEquals("Integer field",
+ Field(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD).bits,
+ sb.fieldAt(2).bits);
}
FormattedStringBuilder old(sb);
@@ -245,13 +249,14 @@ void FormattedStringBuilderTest::testFields() {
int32_t numCurr = 0;
int32_t numInt = 0;
for (int32_t i = 0; i < sb.length(); i++) {
- FormattedStringBuilder::Field field = sb.fieldAt(i);
- assertEquals("Field should equal location in old", old.fieldAt(i % old.length()), field);
- if (field == UNUM_FIELD_COUNT) {
+ auto field = sb.fieldAt(i);
+ assertEquals("Field should equal location in old",
+ old.fieldAt(i % old.length()).bits, field.bits);
+ if (field == kUndefinedField) {
numNull++;
- } else if (field == UNUM_CURRENCY_FIELD) {
+ } else if (field == Field(UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD)) {
numCurr++;
- } else if (field == UNUM_INTEGER_FIELD) {
+ } else if (field == Field(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD)) {
numInt++;
} else {
errln("Encountered unknown field");
@@ -271,7 +276,7 @@ void FormattedStringBuilderTest::testUnlimitedCapacity() {
UnicodeString message("Iteration #");
message += Int64ToUnicodeString(i);
assertEquals(message, builder.length(), i);
- builder.appendCodePoint(u'x', UNUM_FIELD_COUNT, status);
+ builder.appendCodePoint(u'x', kUndefinedField, status);
assertSuccess(message, status);
assertEquals(message, builder.length(), i + 1);
}
@@ -284,7 +289,7 @@ void FormattedStringBuilderTest::testCodePoints() {
assertEquals("Last is -1 on empty string", -1, nsb.getLastCodePoint());
assertEquals("Length is 0 on empty string", 0, nsb.codePointCount());
- nsb.append(u"q", UNUM_FIELD_COUNT, status);
+ nsb.append(u"q", kUndefinedField, status);
assertSuccess("Spot 1", status);
assertEquals("First is q", u'q', nsb.getFirstCodePoint());
assertEquals("Last is q", u'q', nsb.getLastCodePoint());
@@ -293,7 +298,7 @@ void FormattedStringBuilderTest::testCodePoints() {
assertEquals("Code point count is 1", 1, nsb.codePointCount());
// 🚀 is two char16s
- nsb.append(u"🚀", UNUM_FIELD_COUNT, status);
+ nsb.append(u"🚀", kUndefinedField, status);
assertSuccess("Spot 2" ,status);
assertEquals("First is still q", u'q', nsb.getFirstCodePoint());
assertEquals("Last is space ship", 128640, nsb.getLastCodePoint());
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp
index 976a90ba38e..0edf4208673 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp
@@ -237,9 +237,14 @@ void IntlTestWithFieldPosition::checkMixedFormattedValue(
}
UBool afterLoopResult = fv.nextPosition(cfpos, status);
assertFalse(baseMessage + u"A after loop: " + CFPosToUnicodeString(cfpos), afterLoopResult);
+ afterLoopResult = fv.nextPosition(cfpos, status);
+ assertFalse(baseMessage + u"A after loop again: " + CFPosToUnicodeString(cfpos), afterLoopResult);
// Check nextPosition constrained over each category one at a time
- for (int32_t category=0; category<UFIELD_CATEGORY_COUNT; category++) {
+ for (int32_t category=0; category<UFIELD_CATEGORY_COUNT+1; category++) {
+ if (category == UFIELD_CATEGORY_COUNT+1) {
+ category = UFIELD_CATEGORY_LIST_SPAN;
+ }
cfpos.reset();
cfpos.constrainCategory(static_cast<UFieldCategory>(category));
for (int32_t i = 0; i < length; i++) {
@@ -263,6 +268,8 @@ void IntlTestWithFieldPosition::checkMixedFormattedValue(
}
UBool afterLoopResult = fv.nextPosition(cfpos, status);
assertFalse(baseMessage + u"B after loop @ " + CFPosToUnicodeString(cfpos), afterLoopResult);
+ afterLoopResult = fv.nextPosition(cfpos, status);
+ assertFalse(baseMessage + u"B after loop again @ " + CFPosToUnicodeString(cfpos), afterLoopResult);
}
// Check nextPosition constrained over each field one at a time
@@ -297,6 +304,8 @@ void IntlTestWithFieldPosition::checkMixedFormattedValue(
}
UBool afterLoopResult = fv.nextPosition(cfpos, status);
assertFalse(baseMessage + u"C after loop: " + CFPosToUnicodeString(cfpos), afterLoopResult);
+ afterLoopResult = fv.nextPosition(cfpos, status);
+ assertFalse(baseMessage + u"C after loop again: " + CFPosToUnicodeString(cfpos), afterLoopResult);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
index 4c58644c6e8..ebc22cf128d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
@@ -9,6 +9,7 @@
/* Test Internationalized Calendars for C++ */
#include "unicode/utypes.h"
+#include "cmemory.h"
#include "string.h"
#include "unicode/locid.h"
#include "japancal.h"
@@ -71,20 +72,40 @@ static UnicodeString escape( const UnicodeString&src)
void IntlCalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
{
if (exec) logln("TestSuite IntlCalendarTest");
- switch (index) {
- CASE(0,TestTypes);
- CASE(1,TestGregorian);
- CASE(2,TestBuddhist);
- CASE(3,TestJapanese);
- CASE(4,TestBuddhistFormat);
- CASE(5,TestJapaneseFormat);
- CASE(6,TestJapanese3860);
- CASE(7,TestForceGannenNumbering);
- CASE(8,TestPersian);
- CASE(9,TestPersianFormat);
- CASE(10,TestTaiwan);
- default: name = ""; break;
- }
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(TestTypes);
+ TESTCASE_AUTO(TestGregorian);
+ TESTCASE_AUTO(TestBuddhist);
+ TESTCASE_AUTO(TestBug21043Indian);
+ TESTCASE_AUTO(TestBug21044Hebrew);
+ TESTCASE_AUTO(TestBug21045Islamic);
+ TESTCASE_AUTO(TestBug21046IslamicUmalqura);
+ TESTCASE_AUTO(TestJapanese);
+ TESTCASE_AUTO(TestBuddhistFormat);
+ TESTCASE_AUTO(TestJapaneseFormat);
+ TESTCASE_AUTO(TestJapanese3860);
+ TESTCASE_AUTO(TestForceGannenNumbering);
+ TESTCASE_AUTO(TestPersian);
+ TESTCASE_AUTO(TestPersianFormat);
+ TESTCASE_AUTO(TestTaiwan);
+ TESTCASE_AUTO(TestConsistencyGregorian);
+ TESTCASE_AUTO(TestConsistencyCoptic);
+ TESTCASE_AUTO(TestConsistencyEthiopic);
+ TESTCASE_AUTO(TestConsistencyROC);
+ TESTCASE_AUTO(TestConsistencyChinese);
+ TESTCASE_AUTO(TestConsistencyDangi);
+ TESTCASE_AUTO(TestConsistencyBuddhist);
+ TESTCASE_AUTO(TestConsistencyEthiopicAmeteAlem);
+ TESTCASE_AUTO(TestConsistencyHebrew);
+ TESTCASE_AUTO(TestConsistencyIndian);
+ TESTCASE_AUTO(TestConsistencyIslamic);
+ TESTCASE_AUTO(TestConsistencyIslamicCivil);
+ TESTCASE_AUTO(TestConsistencyIslamicRGSA);
+ TESTCASE_AUTO(TestConsistencyIslamicTBLA);
+ TESTCASE_AUTO(TestConsistencyIslamicUmalqura);
+ TESTCASE_AUTO(TestConsistencyPersian);
+ TESTCASE_AUTO(TestConsistencyJapanese);
+ TESTCASE_AUTO_END;
}
#undef CASE
@@ -914,6 +935,169 @@ void IntlCalendarTest::TestPersianFormat() {
CHECK(status, "Error occured testing Persian Calendar in English ");
}
+void IntlCalendarTest::TestConsistencyGregorian() {
+ checkConsistency("en@calendar=gregorian");
+}
+void IntlCalendarTest::TestConsistencyIndian() {
+ checkConsistency("en@calendar=indian");
+}
+void IntlCalendarTest::TestConsistencyHebrew() {
+ checkConsistency("en@calendar=hebrew");
+}
+void IntlCalendarTest::TestConsistencyIslamic() {
+ checkConsistency("en@calendar=islamic");
+}
+void IntlCalendarTest::TestConsistencyIslamicRGSA() {
+ checkConsistency("en@calendar=islamic-rgsa");
+}
+void IntlCalendarTest::TestConsistencyIslamicTBLA() {
+ checkConsistency("en@calendar=islamic-tbla");
+}
+void IntlCalendarTest::TestConsistencyIslamicUmalqura() {
+ checkConsistency("en@calendar=islamic-umalqura");
+}
+void IntlCalendarTest::TestConsistencyIslamicCivil() {
+ checkConsistency("en@calendar=islamic-civil");
+}
+void IntlCalendarTest::TestConsistencyCoptic() {
+ checkConsistency("en@calendar=coptic");
+}
+void IntlCalendarTest::TestConsistencyEthiopic() {
+ checkConsistency("en@calendar=ethiopic");
+}
+void IntlCalendarTest::TestConsistencyROC() {
+ checkConsistency("en@calendar=roc");
+}
+void IntlCalendarTest::TestConsistencyChinese() {
+ checkConsistency("en@calendar=chinese");
+}
+void IntlCalendarTest::TestConsistencyDangi() {
+ checkConsistency("en@calendar=dangi");
+}
+void IntlCalendarTest::TestConsistencyPersian() {
+ checkConsistency("en@calendar=persian");
+}
+void IntlCalendarTest::TestConsistencyBuddhist() {
+ checkConsistency("en@calendar=buddhist");
+}
+void IntlCalendarTest::TestConsistencyJapanese() {
+ checkConsistency("en@calendar=japanese");
+}
+void IntlCalendarTest::TestConsistencyEthiopicAmeteAlem() {
+ checkConsistency("en@calendar=ethiopic-amete-alem");
+}
+void IntlCalendarTest::checkConsistency(const char* locale) {
+ // Check 2.5 years in quick mode and 8000 years in exhaustive mode.
+ int32_t numOfDaysToTest = (quick ? 2.5 : 8000) * 365;
+ constexpr int32_t msInADay = 1000*60*60*24;
+ std::string msg("TestConsistency");
+ IcuTestErrorCode status(*this, (msg + locale).c_str());
+ // g is just for debugging messages.
+ std::unique_ptr<Calendar> g(Calendar::createInstance("en", status));
+ g->setTimeZone(*(TimeZone::getGMT()));
+ std::unique_ptr<Calendar> base(Calendar::createInstance(locale, status));
+ if (status.errIfFailureAndReset("Cannot create calendar %s", locale)) {
+ return;
+ }
+ UDate test = Calendar::getNow();
+ base->setTimeZone(*(TimeZone::getGMT()));
+ int32_t j;
+ int lastDay = 1;
+ std::unique_ptr<Calendar> r(base->clone());
+ for (j = 0; j < numOfDaysToTest; j++, test -= msInADay) {
+ status.errIfFailureAndReset();
+ g->setTime(test, status);
+ if (status.errIfFailureAndReset("Cannot set time")) {
+ return;
+ }
+ base->clear();
+ base->setTime(test, status);
+ if (status.errIfFailureAndReset("Cannot set time")) {
+ return;
+ }
+ // First, we verify the date from base is decrease one day from the
+ // last day unless the last day is 1.
+ int32_t cday = base->get(UCAL_DATE, status);
+ if (U_FAILURE(status)) {
+ UErrorCode localStatus = U_ZERO_ERROR;
+ if (status.errIfFailureAndReset(
+ "Cannot get the %dth date for %f %d %d/%d/%d\n",
+ j,
+ test,
+ g->get(UCAL_ERA, localStatus),
+ g->get(UCAL_YEAR, localStatus),
+ (g->get(UCAL_MONTH, localStatus) + 1),
+ g->get(UCAL_DATE, localStatus))) {
+ return;
+ }
+ }
+ if (lastDay == 1) {
+ lastDay = cday;
+ } else {
+ if (cday != lastDay-1) {
+ // Ignore if it is the last day before Gregorian Calendar switch on
+ // 1582 Oct 4
+ if (g->get(UCAL_YEAR, status) == 1582 &&
+ (g->get(UCAL_MONTH, status) + 1) == 10 &&
+ g->get(UCAL_DATE, status) == 4) {
+ lastDay = 5;
+ } else {
+ errln((UnicodeString)
+ "Day is not one less from previous date for "
+ "Gregorian(e=" + g->get(UCAL_ERA, status) + " " +
+ g->get(UCAL_YEAR, status) + "/" +
+ (g->get(UCAL_MONTH, status) + 1) + "/" +
+ g->get(UCAL_DATE, status) + ") " + locale + "(" +
+ base->get(UCAL_ERA, status) + " " +
+ base->get(UCAL_YEAR, status) + "/" +
+ (base->get(UCAL_MONTH, status) + 1 ) + "/" +
+ base->get(UCAL_DATE, status) + ")");
+ status.errIfFailureAndReset();
+ return;
+ }
+ }
+ lastDay--;
+ }
+ // Second, we verify the month is in reasonale range.
+ int32_t cmonth = base->get(UCAL_MONTH, status);
+ if (cmonth < 0 || cmonth > 13) {
+ errln((UnicodeString)
+ "Month is out of range Gregorian(e=" +
+ g->get(UCAL_ERA, status) + " " +
+ g->get(UCAL_YEAR, status) + "/" +
+ (g->get(UCAL_MONTH, status) + 1) + "/" +
+ g->get(UCAL_DATE, status) + ") " + locale + "(" +
+ base->get(UCAL_ERA, status) + " " +
+ base->get(UCAL_YEAR, status) + "/" +
+ (base->get(UCAL_MONTH, status) + 1 ) + "/" +
+ base->get(UCAL_DATE, status) + ")");
+ status.errIfFailureAndReset();
+ return;
+ }
+ // Third, we verify the set function can round trip the time back.
+ r->clear();
+ for (int32_t f = 0; f < UCAL_FIELD_COUNT; f++) {
+ UCalendarDateFields ut = (UCalendarDateFields)f;
+ r->set(ut, base->get(ut, status));
+ }
+ UDate result = r->getTime(status);
+ if (status.errIfFailureAndReset("Cannot get time %s", locale)) {
+ return;
+ }
+ if (test != result) {
+ errln((UnicodeString)"Round trip conversion produces different "
+ "time from " + test + " to " + result + " delta: " +
+ (result - test) +
+ " Gregorian(e=" + g->get(UCAL_ERA, status) + " " +
+ g->get(UCAL_YEAR, status) + "/" +
+ (g->get(UCAL_MONTH, status) + 1) + "/" +
+ g->get(UCAL_DATE, status) + ") ");
+ status.errIfFailureAndReset();
+ return;
+ }
+ }
+ status.errIfFailureAndReset();
+}
void IntlCalendarTest::simpleTest(const Locale& loc, const UnicodeString& expect, UDate expectDate, UErrorCode& status)
{
@@ -944,6 +1128,97 @@ void IntlCalendarTest::simpleTest(const Locale& loc, const UnicodeString& expect
delete fmt0;
}
+void IntlCalendarTest::TestBug21043Indian() {
+ IcuTestErrorCode status(*this, "TestBug21043Indian");
+ std::unique_ptr<Calendar> cal(
+ Calendar::createInstance("en@calendar=indian", status));
+ std::unique_ptr<Calendar> g(
+ Calendar::createInstance("en@calendar=gregorian", status));
+ // set to 10 BC
+ g->set(UCAL_ERA, 0);
+ g->set(UCAL_YEAR, 10);
+ g->set(UCAL_MONTH, 1);
+ g->set(UCAL_DATE, 1);
+ cal->setTime(g->getTime(status), status);
+ int32_t m = cal->get(UCAL_MONTH, status);
+ if (m < 0 || m > 11) {
+ errln(
+ u"Month should be between 0 and 11 in India calendar");
+ }
+}
+
+void IntlCalendarTest::TestBug21044Hebrew() {
+ IcuTestErrorCode status(*this, "TestBug21044Hebrew");
+ std::unique_ptr<Calendar> cal(
+ Calendar::createInstance("en@calendar=hebrew", status));
+ std::unique_ptr<Calendar> g(
+ Calendar::createInstance("en@calendar=gregorian", status));
+ // set to 3771/10/27 BC which is before 3760 BC.
+ g->set(UCAL_ERA, 0);
+ g->set(UCAL_YEAR, 3771);
+ g->set(UCAL_MONTH, 9);
+ g->set(UCAL_DATE, 27);
+ cal->setTime(g->getTime(status), status);
+
+ if (status.errIfFailureAndReset(
+ "Cannot set date. Got error %s", u_errorName(status))) {
+ return;
+ }
+ int32_t y = cal->get(UCAL_YEAR, status);
+ int32_t m = cal->get(UCAL_MONTH, status);
+ int32_t d = cal->get(UCAL_DATE, status);
+ if (status.errIfFailureAndReset(
+ "Cannot get date. Got error %s", u_errorName(status))) {
+ return;
+ }
+ if (y > 0 || m < 0 || m > 12 || d < 0 || d > 32) {
+ errln((UnicodeString)"Out of rage!\nYear " + y + " should be " +
+ "negative number before 1AD.\nMonth " + m + " should " +
+ "be between 0 and 12 in Hebrew calendar.\nDate " + d +
+ " should be between 0 and 32 in Islamic calendar.");
+ }
+}
+
+void IntlCalendarTest::TestBug21045Islamic() {
+ IcuTestErrorCode status(*this, "TestBug21045Islamic");
+ std::unique_ptr<Calendar> cal(
+ Calendar::createInstance("en@calendar=islamic", status));
+ std::unique_ptr<Calendar> g(
+ Calendar::createInstance("en@calendar=gregorian", status));
+ // set to 500 AD before 622 AD.
+ g->set(UCAL_ERA, 1);
+ g->set(UCAL_YEAR, 500);
+ g->set(UCAL_MONTH, 1);
+ g->set(UCAL_DATE, 1);
+ cal->setTime(g->getTime(status), status);
+ int32_t m = cal->get(UCAL_MONTH, status);
+ if (m < 0 || m > 11) {
+ errln(u"Month should be between 1 and 12 in Islamic calendar");
+ }
+}
+
+void IntlCalendarTest::TestBug21046IslamicUmalqura() {
+ IcuTestErrorCode status(*this, "TestBug21046IslamicUmalqura");
+ std::unique_ptr<Calendar> cal(
+ Calendar::createInstance("en@calendar=islamic-umalqura", status));
+ std::unique_ptr<Calendar> g(
+ Calendar::createInstance("en@calendar=gregorian", status));
+ // set to 195366 BC
+ g->set(UCAL_ERA, 0);
+ g->set(UCAL_YEAR, 195366);
+ g->set(UCAL_MONTH, 1);
+ g->set(UCAL_DATE, 1);
+ cal->setTime(g->getTime(status), status);
+ int32_t y = cal->get(UCAL_YEAR, status);
+ int32_t m = cal->get(UCAL_MONTH, status);
+ int32_t d = cal->get(UCAL_DATE, status);
+ if (y > 0 || m < 0 || m > 11 || d < 0 || d > 32) {
+ errln((UnicodeString)"Out of rage!\nYear " + y + " should be " +
+ "negative number before 1AD.\nMonth " + m + " should " +
+ "be between 0 and 11 in Islamic calendar.\nDate " + d +
+ " should be between 0 and 32 in Islamic calendar.");
+ }
+}
#undef CHECK
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
index 2d42bcc817f..fd3ab2ef741 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
@@ -28,6 +28,10 @@ public:
void TestBuddhist(void);
void TestBuddhistFormat(void);
+ void TestBug21043Indian(void);
+ void TestBug21044Hebrew(void);
+ void TestBug21045Islamic(void);
+ void TestBug21046IslamicUmalqura(void);
void TestTaiwan(void);
@@ -39,10 +43,31 @@ public:
void TestPersian(void);
void TestPersianFormat(void);
+ void TestConsistencyGregorian(void);
+ void TestConsistencyCoptic(void);
+ void TestConsistencyEthiopic(void);
+ void TestConsistencyROC(void);
+ void TestConsistencyChinese(void);
+ void TestConsistencyDangi(void);
+ void TestConsistencyBuddhist(void);
+ void TestConsistencyEthiopicAmeteAlem(void);
+ void TestConsistencyHebrew(void);
+ void TestConsistencyIndian(void);
+ void TestConsistencyIslamic(void);
+ void TestConsistencyIslamicCivil(void);
+ void TestConsistencyIslamicRGSA(void);
+ void TestConsistencyIslamicTBLA(void);
+ void TestConsistencyIslamicUmalqura(void);
+ void TestConsistencyPersian(void);
+ void TestConsistencyJapanese(void);
+
protected:
// Test a Gregorian-Like calendar
void quasiGregorianTest(Calendar& cal, const Locale& gregoLocale, const int32_t *data);
void simpleTest(const Locale& loc, const UnicodeString& expect, UDate expectDate, UErrorCode& status);
+ void checkConsistency(const char* locale);
+
+ int32_t daysToCheckInConsistency;
public: // package
// internal routine for checking date
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
index 15cd2d30776..59d2c460bbd 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
@@ -19,6 +19,7 @@
#include <stdlib.h>
#include <string.h>
#include <cmath>
+#include <math.h>
#include "unicode/ctest.h" // for str_timeDelta
#include "unicode/curramt.h"
@@ -44,6 +45,7 @@
#include "udbgutil.h"
#include "umutex.h"
#include "uoptions.h"
+#include "number_decnum.h"
#ifdef XP_MAC_CONSOLE
#include <console.h>
@@ -1016,7 +1018,7 @@ UBool IntlTest::logKnownIssue(const char *ticket, const UnicodeString &msg) {
UBool firstForTicket = TRUE, firstForWhere = TRUE;
knownList = udbg_knownIssue_openU(knownList, ticket, fullpath, msg2.getTerminatedBuffer(), &firstForTicket, &firstForWhere);
- msg2 = UNICODE_STRING_SIMPLE("(Known issue #") +
+ msg2 = UNICODE_STRING_SIMPLE("(Known issue ") +
UnicodeString(ticket, -1, US_INV) + UNICODE_STRING_SIMPLE(") ") + msg;
if(firstForTicket || firstForWhere) {
infoln(msg2);
@@ -2038,7 +2040,6 @@ UBool IntlTest::assertEquals(const char* message,
return TRUE;
}
-
UBool IntlTest::assertEquals(const char* message,
UBool expected,
UBool actual) {
@@ -2155,6 +2156,47 @@ UBool IntlTest::assertEquals(const char* message,
return TRUE;
}
+UBool IntlTest::assertNotEquals(const char* message,
+ int32_t expectedNot,
+ int32_t actual) {
+ if (expectedNot == actual) {
+ errln((UnicodeString)("FAIL: ") + message + "; got " + actual + "=0x" + toHex(actual) +
+ "; expected != " + expectedNot);
+ return FALSE;
+ }
+#ifdef VERBOSE_ASSERTIONS
+ else {
+ logln((UnicodeString)("Ok: ") + message + "; got " + actual + "=0x" + toHex(actual) +
+ " != " + expectedNot);
+ }
+#endif
+ return TRUE;
+}
+
+UBool IntlTest::assertEqualsNear(const char* message,
+ double expected,
+ double actual,
+ double delta) {
+ if (std::isnan(delta) || std::isinf(delta)) {
+ errln((UnicodeString)("FAIL: ") + message + "; nonsensical delta " + delta +
+ " - delta may not be NaN or Inf");
+ return FALSE;
+ }
+ bool bothNaN = std::isnan(expected) && std::isnan(actual);
+ double difference = std::abs(expected - actual);
+ if (expected != actual && (difference > delta || std::isnan(difference)) && !bothNaN) {
+ errln((UnicodeString)("FAIL: ") + message + "; got " + actual + "; expected " + expected +
+ "; acceptable delta " + delta);
+ return FALSE;
+ }
+#ifdef VERBOSE_ASSERTIONS
+ else {
+ logln((UnicodeString)("Ok: ") + message + "; got " + actual);
+ }
+#endif
+ return TRUE;
+}
+
static char ASSERT_BUF[256];
static const char* extractToAssertBuf(const UnicodeString& message) {
@@ -2224,6 +2266,17 @@ UBool IntlTest::assertEquals(const UnicodeString& message,
const std::vector<std::string>& actual) {
return assertEquals(extractToAssertBuf(message), expected, actual);
}
+UBool IntlTest::assertNotEquals(const UnicodeString &message,
+ int32_t expectedNot,
+ int32_t actual) {
+ return assertNotEquals(extractToAssertBuf(message), expectedNot, actual);
+}
+UBool IntlTest::assertEqualsNear(const UnicodeString& message,
+ double expected,
+ double actual,
+ double delta) {
+ return assertEqualsNear(extractToAssertBuf(message), expected, actual, delta);
+}
#if !UCONFIG_NO_FORMATTING
UBool IntlTest::assertEquals(const UnicodeString& message,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
index 027ebaa45e3..1d8146bb4a8 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
@@ -166,30 +166,27 @@ public:
virtual void logln( void );
/**
- * Replaces isICUVersionAtLeast and isICUVersionBefore
- * log that an issue is known.
+ * Logs that an issue is known. Can be called multiple times.
* Usually used this way:
- * <code>if( ... && logKnownIssue("12345", "some bug")) continue; </code>
- * @param ticket ticket string, "12345" or "cldrbug:1234"
+ * <code>if( ... && logKnownIssue("ICU-12345", "some bug")) continue; </code>
+ * @param ticket ticket string, "ICU-12345" or "CLDR-1234"
* @param message optional message string
* @return true if test should be skipped
*/
UBool logKnownIssue( const char *ticket, const UnicodeString &message );
/**
- * Replaces isICUVersionAtLeast and isICUVersionBefore
- * log that an issue is known.
+ * Logs that an issue is known. Can be called multiple times.
* Usually used this way:
- * <code>if( ... && logKnownIssue("12345", "some bug")) continue; </code>
- * @param ticket ticket string, "12345" or "cldrbug:1234"
+ * <code>if( ... && logKnownIssue("ICU-12345", "some bug")) continue; </code>
+ * @param ticket ticket string, "ICU-12345" or "CLDR-1234"
* @return true if test should be skipped
*/
UBool logKnownIssue( const char *ticket );
/**
- * Replaces isICUVersionAtLeast and isICUVersionBefore
- * log that an issue is known.
+ * Log that an issue is known. Can be called multiple times.
* Usually used this way:
- * <code>if( ... && logKnownIssue("12345", "some bug")) continue; </code>
- * @param ticket ticket string, "12345" or "cldrbug:1234"
+ * <code>if( ... && logKnownIssue("ICU-12345", "some bug")) continue; </code>
+ * @param ticket ticket string, "ICU-12345" or "CLDR-1234"
* @param message optional message string
* @return true if test should be skipped
*/
@@ -299,16 +296,32 @@ public:
UBool assertEquals(const char* message, int32_t expected, int32_t actual);
UBool assertEquals(const char* message, int64_t expected, int64_t actual);
UBool assertEquals(const char* message, double expected, double actual);
+ /**
+ * Asserts that two doubles are equal to within a positive delta. Returns
+ * false if they are not.
+ *
+ * NaNs are considered equal: assertEquals(msg, NaN, NaN, *) passes.
+ * Infs are considered equal: assertEquals(msg, inf, inf, *) passes.
+ *
+ * @param message - the identifying message for the AssertionError.
+ * @param expected - expected value.
+ * @param actual - the value to check against expected.
+ * @param delta - the maximum delta for the absolute difference between
+ * expected and actual for which both numbers are still considered equal.
+ */
+ UBool assertEqualsNear(const char* message, double expected, double actual, double delta);
UBool assertEquals(const char* message, UErrorCode expected, UErrorCode actual);
UBool assertEquals(const char* message, const UnicodeSet& expected, const UnicodeSet& actual);
UBool assertEquals(const char* message,
const std::vector<std::string>& expected, const std::vector<std::string>& actual);
+
#if !UCONFIG_NO_FORMATTING
UBool assertEquals(const char* message, const Formattable& expected,
const Formattable& actual, UBool possibleDataError=FALSE);
UBool assertEquals(const UnicodeString& message, const Formattable& expected,
const Formattable& actual);
#endif
+ UBool assertNotEquals(const char* message, int32_t expectedNot, int32_t actual);
UBool assertTrue(const UnicodeString& message, UBool condition, UBool quiet=FALSE, UBool possibleDataError=FALSE);
UBool assertFalse(const UnicodeString& message, UBool condition, UBool quiet=FALSE, UBool possibleDataError=FALSE);
UBool assertSuccess(const UnicodeString& message, UErrorCode ec);
@@ -319,10 +332,25 @@ public:
UBool assertEquals(const UnicodeString& message, int32_t expected, int32_t actual);
UBool assertEquals(const UnicodeString& message, int64_t expected, int64_t actual);
UBool assertEquals(const UnicodeString& message, double expected, double actual);
+ /**
+ * Asserts that two doubles are equal to within a positive delta. Returns
+ * false if they are not.
+ *
+ * NaNs are considered equal: assertEquals(msg, NaN, NaN, *) passes.
+ * Infs are considered equal: assertEquals(msg, inf, inf, *) passes.
+ *
+ * @param message - the identifying message for the AssertionError.
+ * @param expected - expected value.
+ * @param actual - the value to check against expected.
+ * @param delta - the maximum delta between expected and actual for which
+ * both numbers are still considered equal.
+ */
+ UBool assertEqualsNear(const UnicodeString& message, double expected, double actual, double delta);
UBool assertEquals(const UnicodeString& message, UErrorCode expected, UErrorCode actual);
UBool assertEquals(const UnicodeString& message, const UnicodeSet& expected, const UnicodeSet& actual);
UBool assertEquals(const UnicodeString& message,
const std::vector<std::string>& expected, const std::vector<std::string>& actual);
+ UBool assertNotEquals(const UnicodeString& message, int32_t expectedNot, int32_t actual);
virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); // overide !
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
index dbdb3e0f06c..319c3ab58f6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
@@ -15,22 +15,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -301,6 +285,9 @@
<ClCompile Include="formattedvaluetest.cpp" />
<ClCompile Include="localebuildertest.cpp" />
<ClCompile Include="localematchertest.cpp" />
+ <ClCompile Include="units_data_test.cpp" />
+ <ClCompile Include="units_router_test.cpp" />
+ <ClCompile Include="units_test.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="colldata.h" />
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
index 0bf336b01ab..b7069801c5b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
@@ -550,6 +550,15 @@
<ClCompile Include="localematchertest.cpp">
<Filter>locales &amp; resources</Filter>
</ClCompile>
+ <ClCompile Include="units_data_test.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
+ <ClCompile Include="units_router_test.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
+ <ClCompile Include="units_test.cpp">
+ <Filter>formatting</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="itrbbi.h">
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp
index 870728a9a0a..a2b5ffec67a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp
@@ -74,6 +74,9 @@ extern IntlTest *createScientificNumberFormatterTest();
extern IntlTest *createFormattedValueTest();
extern IntlTest *createFormattedStringBuilderTest();
extern IntlTest *createStringSegmentTest();
+extern IntlTest *createUnitsDataTest();
+extern IntlTest *createUnitsTest();
+extern IntlTest *createUnitsRouterTest();
#define TESTCLASS(id, TestClass) \
@@ -247,6 +250,33 @@ void IntlTestFormat::runIndexedTest( int32_t index, UBool exec, const char* &nam
callTest(*test, par);
}
break;
+ case 56:
+ name = "UnitsTest";
+ if (exec) {
+ logln("UnitsTest test---");
+ logln((UnicodeString)"");
+ LocalPointer<IntlTest> test(createUnitsTest());
+ callTest(*test, par);
+ }
+ break;
+ case 57:
+ name = "UnitsDataTest";
+ if (exec) {
+ logln("UnitsDataTest test---");
+ logln((UnicodeString)"");
+ LocalPointer<IntlTest> test(createUnitsDataTest());
+ callTest(*test, par);
+ }
+ break;
+ case 58:
+ name = "UnitsRouterTest";
+ if (exec) {
+ logln("UnitsRouterTest test---");
+ logln((UnicodeString)"");
+ LocalPointer<IntlTest> test(createUnitsRouterTest());
+ callTest(*test, par);
+ }
+ break;
default: name = ""; break; //needed to end loop
}
if (exec) {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h b/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
index d8b17993c30..feb55e2b3c3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
@@ -35,6 +35,10 @@ typedef struct UFieldPositionWithCategory {
class IntlTestWithFieldPosition : public IntlTest {
public:
+ // Tests FormattedValue's toString, toTempString, and nextPosition methods.
+ //
+ // expectedCategory gets combined with expectedFieldPositions to call
+ // checkMixedFormattedValue.
void checkFormattedValue(
const char16_t* message,
const FormattedValue& fv,
@@ -43,6 +47,7 @@ public:
const UFieldPosition* expectedFieldPositions,
int32_t length);
+ // Tests FormattedValue's toString, toTempString, and nextPosition methods.
void checkMixedFormattedValue(
const char16_t* message,
const FormattedValue& fv,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
index ed4e865aaa3..efddaa76606 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
@@ -1889,16 +1889,19 @@ IntlTestRBNF::TestAllLocales()
UErrorCode status = U_ZERO_ERROR;
RuleBasedNumberFormat* f = new RuleBasedNumberFormat((URBNFRuleSetTag)j, *loc, status);
- if (status == U_USING_DEFAULT_WARNING || status == U_USING_FALLBACK_WARNING) {
- // Skip it.
- delete f;
- break;
- }
if (U_FAILURE(status)) {
errln(UnicodeString(loc->getName()) + names[j]
+ "ERROR could not instantiate -> " + u_errorName(status));
continue;
}
+
+ Locale actualLocale = f->getLocale(ULOC_ACTUAL_LOCALE, status);
+ if (actualLocale != *loc) {
+ // Skip the redundancy
+ delete f;
+ break;
+ }
+
#if !UCONFIG_NO_COLLATION
for (unsigned int numidx = 0; numidx < UPRV_LENGTHOF(numbers); numidx++) {
double n = numbers[numidx];
@@ -1936,28 +1939,26 @@ IntlTestRBNF::TestAllLocales()
+ UnicodeString(" -> ") + str + UnicodeString(" -> ") + num.getDouble());
}
}
- if (!quick && !logKnownIssue("9503") ) {
- // lenient parse
- status = U_ZERO_ERROR;
- f->setLenient(TRUE);
- f->parse(str, num, status);
- if (U_FAILURE(status)) {
+ // lenient parse
+ status = U_ZERO_ERROR;
+ f->setLenient(TRUE);
+ f->parse(str, num, status);
+ if (U_FAILURE(status)) {
+ errln(UnicodeString(loc->getName()) + names[j]
+ + "ERROR could not parse(lenient) '" + str + "' -> " + u_errorName(status));
+ }
+ // We only check the spellout. The behavior is undefined for numbers < 1 and fractional numbers.
+ if (j == 0) {
+ if (num.getType() == Formattable::kLong && num.getLong() != n) {
errln(UnicodeString(loc->getName()) + names[j]
- + "ERROR could not parse(lenient) '" + str + "' -> " + u_errorName(status));
+ + UnicodeString("ERROR could not roundtrip ") + n
+ + UnicodeString(" -> ") + str + UnicodeString(" -> ") + num.getLong());
}
- // We only check the spellout. The behavior is undefined for numbers < 1 and fractional numbers.
- if (j == 0) {
- if (num.getType() == Formattable::kLong && num.getLong() != n) {
- errln(UnicodeString(loc->getName()) + names[j]
- + UnicodeString("ERROR could not roundtrip ") + n
- + UnicodeString(" -> ") + str + UnicodeString(" -> ") + num.getLong());
- }
- else if (num.getType() == Formattable::kDouble && (int64_t)(num.getDouble() * 1000) != (int64_t)(n*1000)) {
- // The epsilon difference is too high.
- errln(UnicodeString(loc->getName()) + names[j]
- + UnicodeString("ERROR could not roundtrip ") + n
- + UnicodeString(" -> ") + str + UnicodeString(" -> ") + num.getDouble());
- }
+ else if (num.getType() == Formattable::kDouble && (int64_t)(num.getDouble() * 1000) != (int64_t)(n*1000)) {
+ // The epsilon difference is too high.
+ errln(UnicodeString(loc->getName()) + names[j]
+ + UnicodeString("ERROR could not roundtrip ") + n
+ + UnicodeString(" -> ") + str + UnicodeString(" -> ") + num.getDouble());
}
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp
index 13861cc126d..41e00c90268 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp
@@ -424,6 +424,13 @@ void IntlTestSpoof::testConfData() {
void IntlTestSpoof::testScriptSet() {
+ // ScriptSet::SCRIPT_LIMIT is hardcoded.
+ // Increase it by multiples of 32 if there are too many script codes.
+ TEST_ASSERT(USCRIPT_CODE_LIMIT <= ScriptSet::SCRIPT_LIMIT);
+ // USCRIPT_CODE_LIMIT should include all script codes,
+ // but theoretically the data may define more.
+ TEST_ASSERT(u_getIntPropertyMaxValue(UCHAR_SCRIPT) < ScriptSet::SCRIPT_LIMIT);
+
ScriptSet s1;
ScriptSet s2;
UErrorCode status = U_ZERO_ERROR;
@@ -439,15 +446,16 @@ void IntlTestSpoof::testScriptSet() {
s1.reset(USCRIPT_ARABIC, status);
TEST_ASSERT(s1 == s2);
+ static constexpr UScriptCode LAST_SCRIPT_CODE = (UScriptCode)(USCRIPT_CODE_LIMIT - 1);
status = U_ZERO_ERROR;
s1.setAll();
TEST_ASSERT(s1.test(USCRIPT_COMMON, status));
TEST_ASSERT(s1.test(USCRIPT_ETHIOPIC, status));
- TEST_ASSERT(s1.test(USCRIPT_CODE_LIMIT, status));
+ TEST_ASSERT(s1.test(LAST_SCRIPT_CODE, status));
s1.resetAll();
TEST_ASSERT(!s1.test(USCRIPT_COMMON, status));
TEST_ASSERT(!s1.test(USCRIPT_ETHIOPIC, status));
- TEST_ASSERT(!s1.test(USCRIPT_CODE_LIMIT, status));
+ TEST_ASSERT(!s1.test(LAST_SCRIPT_CODE, status));
status = U_ZERO_ERROR;
s1.set(USCRIPT_TAKRI, status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
index 763f933095e..34536e6e7cb 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
@@ -23,6 +23,36 @@
#if !UCONFIG_NO_FORMATTING
+void ListFormatterTest::runIndexedTest(int32_t index, UBool exec,
+ const char* &name, char* /*par */) {
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(TestRoot);
+ TESTCASE_AUTO(TestBogus);
+ TESTCASE_AUTO(TestEnglish);
+ TESTCASE_AUTO(TestEnglishUS);
+ TESTCASE_AUTO(TestRussian);
+ TESTCASE_AUTO(TestMalayalam);
+ TESTCASE_AUTO(TestZulu);
+ TESTCASE_AUTO(TestOutOfOrderPatterns);
+ TESTCASE_AUTO(Test9946);
+ TESTCASE_AUTO(TestEnglishGB);
+ TESTCASE_AUTO(TestNynorsk);
+ TESTCASE_AUTO(TestChineseTradHK);
+ TESTCASE_AUTO(TestFieldPositionIteratorWith1Item);
+ TESTCASE_AUTO(TestFieldPositionIteratorWith2Items);
+ TESTCASE_AUTO(TestFieldPositionIteratorWith2ItemsPatternShift);
+ TESTCASE_AUTO(TestFieldPositionIteratorWith3Items);
+ TESTCASE_AUTO(TestFieldPositionIteratorWith3ItemsPatternShift);
+ TESTCASE_AUTO(TestFormattedValue);
+ TESTCASE_AUTO(TestDifferentStyles);
+ TESTCASE_AUTO(TestBadStylesFail);
+ TESTCASE_AUTO(TestCreateStyled);
+ TESTCASE_AUTO(TestContextual);
+ TESTCASE_AUTO(TestNextPosition);
+ TESTCASE_AUTO(TestInt32Overflow);
+ TESTCASE_AUTO_END;
+}
+
namespace {
const char* attrString(int32_t attrId) {
switch (attrId) {
@@ -33,10 +63,14 @@ const char* attrString(int32_t attrId) {
}
} // namespace
-void ListFormatterTest::ExpectPositions(FieldPositionIterator& iter,
- int32_t *values, int32_t tupleCount) {
+void ListFormatterTest::ExpectPositions(
+ const FormattedList& iter,
+ int32_t *values,
+ int32_t tupleCount,
+ UErrorCode& status) {
UBool found[10];
- FieldPosition fp;
+ ConstrainedFieldPosition cfp;
+ cfp.constrainCategory(UFIELD_CATEGORY_LIST);
if (tupleCount > 10) {
assertTrue("internal error, tupleCount too large", FALSE);
} else {
@@ -44,11 +78,11 @@ void ListFormatterTest::ExpectPositions(FieldPositionIterator& iter,
found[i] = FALSE;
}
}
- while (iter.next(fp)) {
+ while (iter.nextPosition(cfp, status)) {
UBool ok = FALSE;
- int32_t id = fp.getField();
- int32_t start = fp.getBeginIndex();
- int32_t limit = fp.getEndIndex();
+ int32_t id = cfp.getField();
+ int32_t start = cfp.getStart();
+ int32_t limit = cfp.getLimit();
char buf[128];
sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit);
logln(buf);
@@ -217,53 +251,29 @@ void ListFormatterTest::TestEnglishGB() {
CheckFourCases("en_GB", one, two, three, four, results, "TestEnglishGB()");
}
-void ListFormatterTest::TestFieldPositionIteratorWontCrash() {
- IcuTestErrorCode errorCode(*this, "TestFieldPositionIteratorWontCrash()");
- LocalPointer<ListFormatter> formatter(
- ListFormatter::createInstance(Locale("en"), errorCode));
- if (U_FAILURE(errorCode)) {
- dataerrln(
- "ListFormatter::createInstance(Locale(\"en\"), errorCode) failed in "
- "TestFieldPositionIteratorWontCrash: %s",
- u_errorName(errorCode));
- return;
- }
- UnicodeString data[3] = {"a", "bbb", "cc"};
- UnicodeString actualResult;
- // make sure NULL as FieldPositionIterator won't caused crash.
- formatter->format(data, 3, actualResult, nullptr, errorCode);
- if (U_FAILURE(errorCode)) {
- dataerrln(
- "ListFormatter::format(data, 3, nullptr, errorCode) "
- "failed in TestFieldPositionIteratorWontCrash: %s",
- u_errorName(errorCode));
- return;
- }
-}
-
void ListFormatterTest::RunTestFieldPositionIteratorWithFormatter(
ListFormatter* formatter,
UnicodeString data[], int32_t n, int32_t expected[], int32_t tupleCount,
- UnicodeString& appendTo, const char16_t *expectedFormatted,
+ const char16_t *expectedFormatted,
const char* testName) {
IcuTestErrorCode errorCode(*this, testName);
- FieldPositionIterator iter;
- formatter->format(data, n, appendTo, &iter, errorCode);
+ FormattedList fl = formatter->formatStringsToValue(data, n, errorCode);
+ UnicodeString actual = fl.toString(errorCode);
if (U_FAILURE(errorCode)) {
dataerrln(
"ListFormatter::format(data, %d, &iter, errorCode) "
"failed in %s: %s", n, testName, u_errorName(errorCode));
return;
}
- if (appendTo != expectedFormatted) {
- errln(UnicodeString("Expected: |") + expectedFormatted + "|, Actual: |" + appendTo + "|");
+ if (actual != expectedFormatted) {
+ errln(UnicodeString("Expected: |") + expectedFormatted + "|, Actual: |" + actual + "|");
}
- ExpectPositions(iter, expected, tupleCount);
+ ExpectPositions(fl, expected, tupleCount, errorCode);
}
void ListFormatterTest::RunTestFieldPositionIteratorWithNItemsPatternShift(
UnicodeString data[], int32_t n, int32_t expected[], int32_t tupleCount,
- UnicodeString& appendTo, const char16_t *expectedFormatted,
+ const char16_t *expectedFormatted,
const char* testName) {
IcuTestErrorCode errorCode(*this, testName);
LocalPointer<ListFormatter> formatter(
@@ -276,12 +286,12 @@ void ListFormatterTest::RunTestFieldPositionIteratorWithNItemsPatternShift(
}
RunTestFieldPositionIteratorWithFormatter(
formatter.getAlias(),
- data, n, expected, tupleCount, appendTo, expectedFormatted, testName);
+ data, n, expected, tupleCount, expectedFormatted, testName);
}
void ListFormatterTest::RunTestFieldPositionIteratorWithNItems(
UnicodeString data[], int32_t n, int32_t expected[], int32_t tupleCount,
- UnicodeString& appendTo, const char16_t *expectedFormatted,
+ const char16_t *expectedFormatted,
const char* testName) {
IcuTestErrorCode errorCode(*this, testName);
LocalPointer<ListFormatter> formatter(
@@ -294,27 +304,7 @@ void ListFormatterTest::RunTestFieldPositionIteratorWithNItems(
}
RunTestFieldPositionIteratorWithFormatter(
formatter.getAlias(),
- data, n, expected, tupleCount, appendTo, expectedFormatted, testName);
-}
-
-void ListFormatterTest::TestFieldPositionIteratorWith3ItemsAndDataBefore() {
- // 0 1 2
- // 0123456789012345678901234567
- // "Hello World: a, bbb, and cc"
- UnicodeString data[3] = {"a", "bbb", "cc"};
- int32_t expected[] = {
- ULISTFMT_ELEMENT_FIELD, 13, 14,
- ULISTFMT_LITERAL_FIELD, 14, 16,
- ULISTFMT_ELEMENT_FIELD, 16, 19,
- ULISTFMT_LITERAL_FIELD, 19, 25,
- ULISTFMT_ELEMENT_FIELD, 25, 27
- };
- int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo(u"Hello World: ");
- RunTestFieldPositionIteratorWithNItems(
- data, 3, expected, tupleCount, appendTo,
- u"Hello World: a, bbb, and cc",
- "TestFieldPositionIteratorWith3ItemsAndDataBefore");
+ data, n, expected, tupleCount, expectedFormatted, testName);
}
void ListFormatterTest::TestFieldPositionIteratorWith3Items() {
@@ -330,9 +320,8 @@ void ListFormatterTest::TestFieldPositionIteratorWith3Items() {
ULISTFMT_ELEMENT_FIELD, 12, 14
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo;
RunTestFieldPositionIteratorWithNItems(
- data, 3, expected, tupleCount, appendTo,
+ data, 3, expected, tupleCount,
u"a, bbb, and cc",
"TestFieldPositionIteratorWith3Items");
}
@@ -350,31 +339,12 @@ void ListFormatterTest::TestFieldPositionIteratorWith3ItemsPatternShift() {
ULISTFMT_ELEMENT_FIELD, 0, 2
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo;
RunTestFieldPositionIteratorWithNItemsPatternShift(
- data, 3, expected, tupleCount, appendTo,
+ data, 3, expected, tupleCount,
u"cc bbb a",
"TestFieldPositionIteratorWith3ItemsPatternShift");
}
-void ListFormatterTest::TestFieldPositionIteratorWith2ItemsAndDataBefore() {
- // 0 1
- // 0123456789012345
- // "Foo: bbb and cc"
- UnicodeString data[2] = {"bbb", "cc"};
- int32_t expected[] = {
- ULISTFMT_ELEMENT_FIELD, 5, 8,
- ULISTFMT_LITERAL_FIELD, 8, 13,
- ULISTFMT_ELEMENT_FIELD, 13, 15
- };
- int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo("Foo: ");
- RunTestFieldPositionIteratorWithNItems(
- data, 2, expected, tupleCount, appendTo,
- u"Foo: bbb and cc",
- "TestFieldPositionIteratorWith2ItemsAndDataBefore");
-}
-
void ListFormatterTest::TestFieldPositionIteratorWith2Items() {
// 0 1
// 01234567890
@@ -386,9 +356,8 @@ void ListFormatterTest::TestFieldPositionIteratorWith2Items() {
ULISTFMT_ELEMENT_FIELD, 8, 10
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo;
RunTestFieldPositionIteratorWithNItems(
- data, 2, expected, tupleCount, appendTo,
+ data, 2, expected, tupleCount,
u"bbb and cc",
"TestFieldPositionIteratorWith2Items");
}
@@ -404,28 +373,12 @@ void ListFormatterTest::TestFieldPositionIteratorWith2ItemsPatternShift() {
ULISTFMT_ELEMENT_FIELD, 0, 2
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo;
RunTestFieldPositionIteratorWithNItemsPatternShift(
- data, 2, expected, tupleCount, appendTo,
+ data, 2, expected, tupleCount,
u"cc bbb",
"TestFieldPositionIteratorWith2ItemsPatternShift");
}
-void ListFormatterTest::TestFieldPositionIteratorWith1ItemAndDataBefore() {
- // 012345678
- // "Hello cc"
- UnicodeString data[1] = {"cc"};
- int32_t expected[] = {
- ULISTFMT_ELEMENT_FIELD, 6, 8
- };
- int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo("Hello ");
- RunTestFieldPositionIteratorWithNItems(
- data, 1, expected, tupleCount, appendTo,
- u"Hello cc",
- "TestFieldPositionIteratorWith1ItemAndDataBefore");
-}
-
void ListFormatterTest::TestFieldPositionIteratorWith1Item() {
// 012
// "cc"
@@ -434,9 +387,8 @@ void ListFormatterTest::TestFieldPositionIteratorWith1Item() {
ULISTFMT_ELEMENT_FIELD, 0, 2
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
- UnicodeString appendTo;
RunTestFieldPositionIteratorWithNItems(
- data, 1, expected, tupleCount, appendTo,
+ data, 1, expected, tupleCount,
u"cc",
"TestFieldPositionIteratorWith1Item");
}
@@ -524,8 +476,9 @@ void ListFormatterTest::TestOutOfOrderPatterns() {
};
IcuTestErrorCode errorCode(*this, "TestOutOfOrderPatterns()");
+ Locale locale("en");
ListFormatData data("{1} after {0}", "{1} after the first {0}",
- "{1} after {0}", "{1} in the last after {0}");
+ "{1} after {0}", "{1} in the last after {0}", locale);
ListFormatter formatter(data, errorCode);
UnicodeString input1[] = {one};
@@ -543,10 +496,10 @@ void ListFormatterTest::TestOutOfOrderPatterns() {
void ListFormatterTest::TestFormattedValue() {
IcuTestErrorCode status(*this, "TestFormattedValue");
- LocalPointer<ListFormatter> fmt(ListFormatter::createInstance("en", status));
- if (status.errIfFailureAndReset()) { return; }
{
+ LocalPointer<ListFormatter> fmt(ListFormatter::createInstance("en", status));
+ if (status.errIfFailureAndReset()) { return; }
const char16_t* message = u"Field position test 1";
const char16_t* expectedString = u"hello, wonderful, and world";
const UnicodeString inputs[] = {
@@ -572,6 +525,87 @@ void ListFormatterTest::TestFormattedValue() {
expectedFieldPositions,
UPRV_LENGTHOF(expectedFieldPositions));
}
+
+ {
+ LocalPointer<ListFormatter> fmt(ListFormatter::createInstance("zh", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_SHORT, status));
+ if (status.errIfFailureAndReset()) { return; }
+ const char16_t* message = u"Field position test 2 (ICU-21340)";
+ const char16_t* expectedString = u"aabbbbbbbccc";
+ const UnicodeString inputs[] = {
+ u"aa",
+ u"bbbbbbb",
+ u"ccc"
+ };
+ FormattedList result = fmt->formatStringsToValue(inputs, UPRV_LENGTHOF(inputs), status);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // field, begin index, end index
+ {UFIELD_CATEGORY_LIST_SPAN, 0, 0, 2},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 0, 2},
+ {UFIELD_CATEGORY_LIST_SPAN, 1, 2, 9},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 2, 9},
+ {UFIELD_CATEGORY_LIST_SPAN, 2, 9, 12},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 9, 12}};
+ checkMixedFormattedValue(
+ message,
+ result,
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+
+ {
+ LocalPointer<ListFormatter> fmt(ListFormatter::createInstance("en", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_SHORT, status));
+ if (status.errIfFailureAndReset()) { return; }
+ const char16_t* message = u"ICU-21383 Long list";
+ const char16_t* expectedString = u"a, b, c, d, e, f, g, h, i";
+ const UnicodeString inputs[] = {
+ u"a",
+ u"b",
+ u"c",
+ u"d",
+ u"e",
+ u"f",
+ u"g",
+ u"h",
+ u"i",
+ };
+ FormattedList result = fmt->formatStringsToValue(inputs, UPRV_LENGTHOF(inputs), status);
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // field, begin index, end index
+ {UFIELD_CATEGORY_LIST_SPAN, 0, 0, 1},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 0, 1},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 1, 3},
+ {UFIELD_CATEGORY_LIST_SPAN, 1, 3, 4},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 3, 4},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 4, 6},
+ {UFIELD_CATEGORY_LIST_SPAN, 2, 6, 7},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 6, 7},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 7, 9},
+ {UFIELD_CATEGORY_LIST_SPAN, 3, 9, 10},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 9, 10},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 10, 12},
+ {UFIELD_CATEGORY_LIST_SPAN, 4, 12, 13},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 12, 13},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 13, 15},
+ {UFIELD_CATEGORY_LIST_SPAN, 5, 15, 16},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 15, 16},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 16, 18},
+ {UFIELD_CATEGORY_LIST_SPAN, 6, 18, 19},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 18, 19},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 19, 21},
+ {UFIELD_CATEGORY_LIST_SPAN, 7, 21, 22},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 21, 22},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD, 22, 24},
+ {UFIELD_CATEGORY_LIST_SPAN, 8, 24, 25},
+ {UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD, 24, 25},
+ };
+ checkMixedFormattedValue(
+ message,
+ result,
+ expectedString,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
}
void ListFormatterTest::DoTheRealListStyleTesting(Locale locale,
@@ -611,59 +645,204 @@ void ListFormatterTest::TestBadStylesFail() {
}
}
-void ListFormatterTest::runIndexedTest(int32_t index, UBool exec,
- const char* &name, char* /*par */) {
- switch(index) {
- case 0: name = "TestRoot"; if (exec) TestRoot(); break;
- case 1: name = "TestBogus"; if (exec) TestBogus(); break;
- case 2: name = "TestEnglish"; if (exec) TestEnglish(); break;
- case 3: name = "TestEnglishUS"; if (exec) TestEnglishUS(); break;
- case 4: name = "TestRussian"; if (exec) TestRussian(); break;
- case 5: name = "TestMalayalam"; if (exec) TestMalayalam(); break;
- case 6: name = "TestZulu"; if (exec) TestZulu(); break;
- case 7: name = "TestOutOfOrderPatterns"; if (exec) TestOutOfOrderPatterns(); break;
- case 8: name = "Test9946"; if (exec) Test9946(); break;
- case 9: name = "TestEnglishGB"; if (exec) TestEnglishGB(); break;
- case 10: name = "TestNynorsk"; if (exec) TestNynorsk(); break;
- case 11: name = "TestChineseTradHK"; if (exec) TestChineseTradHK(); break;
- case 12: name = "TestFieldPositionIteratorWontCrash";
- if (exec) TestFieldPositionIteratorWontCrash();
- break;
- case 13: name = "TestFieldPositionIteratorWith1Item";
- if (exec) TestFieldPositionIteratorWith1Item();
- break;
- case 14: name = "TestFieldPositionIteratorWith1ItemAndDataBefore";
- if (exec) TestFieldPositionIteratorWith1ItemAndDataBefore();
- break;
- case 15: name = "TestFieldPositionIteratorWith2Items";
- if (exec) TestFieldPositionIteratorWith2Items();
- break;
- case 16: name = "TestFieldPositionIteratorWith2ItemsAndDataBefore";
- if (exec) TestFieldPositionIteratorWith2ItemsAndDataBefore();
- break;
- case 17: name = "TestFieldPositionIteratorWith2ItemsPatternShift";
- if (exec) TestFieldPositionIteratorWith2ItemsPatternShift();
- break;
- case 18: name = "TestFieldPositionIteratorWith3Items";
- if (exec) TestFieldPositionIteratorWith3Items();
- break;
- case 19: name = "TestFieldPositionIteratorWith3ItemsAndDataBefore";
- if (exec) TestFieldPositionIteratorWith3ItemsAndDataBefore();
- break;
- case 20: name = "TestFieldPositionIteratorWith3ItemsPatternShift";
- if (exec) TestFieldPositionIteratorWith3ItemsPatternShift();
- break;
- case 21: name = "TestFormattedValue";
- if (exec) TestFormattedValue();
- break;
- case 22: name = "TestDifferentStyles";
- if (exec) TestDifferentStyles();
- break;
- case 23: name = "TestBadStylesFail";
- if (exec) TestBadStylesFail();
- break;
- default: name = ""; break;
+void ListFormatterTest::TestCreateStyled() {
+ IcuTestErrorCode status(*this, "TestCreateStyled");
+ // Locale en has interesting data
+ struct TestCase {
+ const char* locale;
+ UListFormatterType type;
+ UListFormatterWidth width;
+ const char16_t* expected3;
+ const char16_t* expected2;
+ const char16_t* expected1;
+ } cases[] = {
+ { "pt", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_WIDE, u"A, B e C", u"A e B", u"A" },
+ { "pt", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_SHORT, u"A, B e C", u"A e B", u"A" },
+ { "pt", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_NARROW, u"A, B, C", u"A, B", u"A" },
+ { "pt", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_WIDE, u"A, B ou C", u"A ou B", u"A" },
+ { "pt", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_SHORT, u"A, B ou C", u"A ou B", u"A" },
+ { "pt", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_NARROW, u"A, B ou C", u"A ou B", u"A" },
+ { "pt", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_WIDE, u"A, B e C", u"A e B", u"A" },
+ { "pt", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_SHORT, u"A, B e C", u"A e B", u"A" },
+ { "pt", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_NARROW, u"A B C", u"A B", u"A" },
+ { "en", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_WIDE, u"A, B, and C", u"A and B", u"A" },
+ { "en", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_SHORT, u"A, B, & C", u"A & B", u"A" },
+ { "en", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_NARROW, u"A, B, C", u"A, B", u"A" },
+ { "en", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_WIDE, u"A, B, or C", u"A or B", u"A" },
+ { "en", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_SHORT, u"A, B, or C", u"A or B", u"A" },
+ { "en", ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_NARROW, u"A, B, or C", u"A or B", u"A" },
+ { "en", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_WIDE, u"A, B, C", u"A, B", u"A" },
+ { "en", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_SHORT, u"A, B, C", u"A, B", u"A" },
+ { "en", ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_NARROW, u"A B C", u"A B", u"A" },
+ };
+ for (auto cas : cases) {
+ LocalPointer<ListFormatter> fmt(
+ ListFormatter::createInstance(cas.locale, cas.type, cas.width, status),
+ status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ UnicodeString message = UnicodeString(u"TestCreateStyled loc=")
+ + cas.locale + u" type="
+ + Int64ToUnicodeString(cas.type) + u" width="
+ + Int64ToUnicodeString(cas.width);
+ const UnicodeString inputs3[] = {
+ u"A",
+ u"B",
+ u"C"
+ };
+ FormattedList result = fmt->formatStringsToValue(inputs3, UPRV_LENGTHOF(inputs3), status);
+ assertEquals(message, cas.expected3, result.toTempString(status));
+ const UnicodeString inputs2[] = {
+ u"A",
+ u"B"
+ };
+ result = fmt->formatStringsToValue(inputs2, UPRV_LENGTHOF(inputs2), status);
+ assertEquals(message, cas.expected2, result.toTempString(status));
+ const UnicodeString inputs1[] = {
+ u"A"
+ };
+ result = fmt->formatStringsToValue(inputs1, UPRV_LENGTHOF(inputs1), status);
+ assertEquals(message, cas.expected1, result.toTempString(status));
+ }
+}
+
+void ListFormatterTest::TestContextual() {
+ IcuTestErrorCode status(*this, "TestContextual");
+ std::vector<std::string> es = { "es", "es_419" , "es_PY", "es_DO" };
+ std::vector<std::string> he = { "he", "he_IL", "iw", "iw_IL" };
+ UListFormatterWidth widths [] = {
+ ULISTFMT_WIDTH_WIDE, ULISTFMT_WIDTH_SHORT, ULISTFMT_WIDTH_NARROW
+ };
+ struct TestCase {
+ std::vector<std::string> locales;
+ UListFormatterType type;
+ const char16_t* expected;
+ const char16_t* data1;
+ const char16_t* data2;
+ const char16_t* data3;
+ } cases[] = {
+ { es, ULISTFMT_TYPE_AND, u"fascinante e increíblemente",
+ u"fascinante", u"increíblemente", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"Comunicaciones Industriales e IIoT",
+ u"Comunicaciones Industriales", u"IIoT", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"España e Italia", u"España", u"Italia", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"hijas intrépidas e hijos solidarios",
+ u"hijas intrépidas", u"hijos solidarios", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"a un hombre e hirieron a otro",
+ u"a un hombre", u"hirieron a otro", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"hija e hijo", u"hija", u"hijo", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"esposa, hija e hijo", u"esposa", u"hija", u"hijo" },
+ // For 'y' exception
+ { es, ULISTFMT_TYPE_AND, u"oro y hierro", u"oro", u"hierro", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"agua y hielo", u"agua", u"hielo", nullptr },
+ { es, ULISTFMT_TYPE_AND, u"colágeno y hialurónico", u"colágeno", u"hialurónico", nullptr },
+
+ { es, ULISTFMT_TYPE_OR, u"desierto u oasis", u"desierto", u"oasis", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"oasis, desierto u océano", u"oasis", u"desierto", u"océano" },
+ { es, ULISTFMT_TYPE_OR, u"7 u 8", u"7", u"8", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"7 u 80", u"7", u"80", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"7 u 800", u"7", u"800", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"6, 7 u 8", u"6", u"7", u"8" },
+ { es, ULISTFMT_TYPE_OR, u"10 u 11", u"10", u"11", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"10 o 111", u"10", u"111", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"10 o 11.2", u"10", u"11.2", nullptr },
+ { es, ULISTFMT_TYPE_OR, u"9, 10 u 11", u"9", u"10", u"11" },
+
+ { he, ULISTFMT_TYPE_AND, u"a, b ו-c", u"a", u"b", u"c" },
+ { he, ULISTFMT_TYPE_AND, u"a ו-b", u"a", u"b", nullptr },
+ { he, ULISTFMT_TYPE_AND, u"1, 2 ו-3", u"1", u"2", u"3" },
+ { he, ULISTFMT_TYPE_AND, u"1 ו-2", u"1", u"2", nullptr },
+ { he, ULISTFMT_TYPE_AND, u"×הבה ומקווה", u"×הבה", u"מקווה", nullptr },
+ { he, ULISTFMT_TYPE_AND, u"×הבה, מקווה ו×מונה", u"×הבה", u"מקווה", u"×מונה" },
+ };
+ for (auto width : widths) {
+ for (auto cas : cases) {
+ for (auto locale : cas.locales) {
+ LocalPointer<ListFormatter> fmt(
+ ListFormatter::createInstance(locale.c_str(), cas.type, width, status),
+ status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ UnicodeString message = UnicodeString(u"TestContextual loc=")
+ + locale.c_str() + u" type="
+ + Int64ToUnicodeString(cas.type) + u" width="
+ + Int64ToUnicodeString(width);
+ if (cas.data3 == nullptr) {
+ const UnicodeString inputs2[] = { cas.data1, cas.data2 };
+ FormattedList result = fmt->formatStringsToValue(inputs2, UPRV_LENGTHOF(inputs2), status);
+ assertEquals(message, cas.expected, result.toTempString(status));
+ } else {
+ const UnicodeString inputs3[] = { cas.data1, cas.data2, cas.data3 };
+ FormattedList result = fmt->formatStringsToValue(inputs3, UPRV_LENGTHOF(inputs3), status);
+ assertEquals(message, cas.expected, result.toTempString(status));
+ }
+ }
+ }
+ }
+}
+
+void ListFormatterTest::TestNextPosition() {
+ IcuTestErrorCode status(*this, "TestNextPosition");
+ std::vector<std::string> locales = { "en", "es", "zh", "ja" };
+ UListFormatterWidth widths [] = {
+ ULISTFMT_WIDTH_WIDE, ULISTFMT_WIDTH_SHORT, ULISTFMT_WIDTH_NARROW
+ };
+ const char* widthStr [] = {"wide", "short", "narrow"};
+ UListFormatterType types [] = {
+ ULISTFMT_TYPE_AND, ULISTFMT_TYPE_OR, ULISTFMT_TYPE_UNITS
+ };
+ const char* typeStr [] = {"and", "or", "units"};
+ const UnicodeString inputs[] = { u"A1", u"B2", u"C3", u"D4" };
+ for (auto width : widths) {
+ for (auto type : types) {
+ for (auto locale : locales) {
+ LocalPointer<ListFormatter> fmt(
+ ListFormatter::createInstance(locale.c_str(), type, width, status),
+ status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ for (int32_t n = 1; n <= UPRV_LENGTHOF(inputs); n++) {
+ FormattedList result = fmt->formatStringsToValue(
+ inputs, n, status);
+ int32_t elements = 0;
+ icu::ConstrainedFieldPosition cfpos;
+ cfpos.constrainCategory(UFIELD_CATEGORY_LIST);
+ while (result.nextPosition(cfpos, status) && U_SUCCESS(status)) {
+ if (cfpos.getField() == ULISTFMT_ELEMENT_FIELD) {
+ elements++;
+ }
+ }
+ std::string msg = locale;
+ // Test that if there are n elements (n=1..4) in the input, then the
+ // nextPosition() should iterate through exactly n times
+ // with field == ULISTFMT_ELEMENT_FIELD.
+ assertEquals((msg
+ .append(" w=").append(widthStr[width])
+ .append(" t=").append(typeStr[type])).c_str(),
+ n, elements);
+ }
+ }
+ }
+ }
+}
+
+void ListFormatterTest::TestInt32Overflow() {
+ if (quick) {
+ return;
+ }
+ IcuTestErrorCode status(*this, "TestInt32Overflow");
+ LocalPointer<ListFormatter> fmt(ListFormatter::createInstance("en", status), status);
+ std::vector<UnicodeString> inputs;
+ UnicodeString input(0xAAAFF00, 0x00000042, 0xAAAFF00);
+ for (int32_t i = 0; i < 16; i++) {
+ inputs.push_back(input);
}
+ FormattedList result = fmt->formatStringsToValue(
+ inputs.data(), static_cast<int32_t>(inputs.size()), status);
+ status.expectErrorAndReset(U_INPUT_TOO_LONG_ERROR);
}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
index decd13bcf6a..aeba483285a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
@@ -45,18 +45,18 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
void TestZulu();
void TestOutOfOrderPatterns();
void Test9946();
- void TestFieldPositionIteratorWontCrash();
void TestFieldPositionIteratorWith1Item();
void TestFieldPositionIteratorWith2Items();
void TestFieldPositionIteratorWith3Items();
- void TestFieldPositionIteratorWith1ItemAndDataBefore();
- void TestFieldPositionIteratorWith2ItemsAndDataBefore();
- void TestFieldPositionIteratorWith3ItemsAndDataBefore();
void TestFieldPositionIteratorWith2ItemsPatternShift();
void TestFieldPositionIteratorWith3ItemsPatternShift();
void TestFormattedValue();
void TestDifferentStyles();
void TestBadStylesFail();
+ void TestCreateStyled();
+ void TestContextual();
+ void TestNextPosition();
+ void TestInt32Overflow();
private:
void CheckFormatting(
@@ -66,15 +66,15 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
const UnicodeString& expected_result,
const char* testName);
void ExpectPositions(
- FieldPositionIterator& iter,
+ const FormattedList& iter,
int32_t *values,
- int32_t tupleCount);
+ int32_t tupleCount,
+ UErrorCode& status);
void RunTestFieldPositionIteratorWithNItems(
UnicodeString *data,
int32_t n,
int32_t *values,
int32_t tupleCount,
- UnicodeString& appendTo,
const char16_t *expectedFormatted,
const char* testName);
void RunTestFieldPositionIteratorWithNItemsPatternShift(
@@ -82,7 +82,6 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
int32_t n,
int32_t *values,
int32_t tupleCount,
- UnicodeString& appendTo,
const char16_t *expectedFormatted,
const char* testName);
void RunTestFieldPositionIteratorWithFormatter(
@@ -91,7 +90,6 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
int32_t n,
int32_t *values,
int32_t tupleCount,
- UnicodeString& appendTo,
const char16_t *expectedFormatted,
const char* testName);
void CheckFourCases(
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
index b551bf8e6e9..13f6ecf4120 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
@@ -136,7 +136,7 @@ void LocaleBuilderTest::TestLocaleBuilder() {
{"U", "ja_JP@calendar=japanese;currency=JPY", "E", "u",
"attr1-ca-gregory", "T", "ja-JP-u-attr1-ca-gregory",
"ja_JP@attribute=attr1;calendar=gregorian"},
- {"U", "en@colnumeric=yes", "K", "kn", "true", "T", "en-u-kn-true",
+ {"U", "en@colnumeric=yes", "K", "kn", "true", "T", "en-u-kn",
"en@colnumeric=yes"},
{"L", "th", "R", "th", "K", "nu", "thai", "T", "th-TH-u-nu-thai",
"th_TH@numbers=thai"},
@@ -152,7 +152,7 @@ void LocaleBuilderTest::TestLocaleBuilder() {
// However, once the legacy keyword is translated back to BCP 47 u extension, key "0a" is unknown,
// so "yes" is preserved - not mapped to "true". We could change the code to automatically transform
// key = alphanum alpha
- {"L", "en", "E", "u", "bbb-aaa-0a", "T", "en-u-aaa-bbb-0a-yes",
+ {"L", "en", "E", "u", "bbb-aaa-0a", "T", "en-u-aaa-bbb-0a",
"en@0a=yes;attribute=aaa-bbb"},
{"L", "fr", "R", "FR", "P", "Yoshito-ICU", "T", "fr-FR-x-yoshito-icu",
"fr_FR@x=yoshito-icu"},
@@ -166,13 +166,13 @@ void LocaleBuilderTest::TestLocaleBuilder() {
{"L", "en", "K", "tz", "usnyc", "R", "US", "T", "en-US-u-tz-usnyc",
"en_US@timezone=America/New_York"},
{"L", "de", "K", "co", "phonebk", "K", "ks", "level1", "K", "kk",
- "true", "T", "de-u-co-phonebk-kk-true-ks-level1",
+ "true", "T", "de-u-co-phonebk-kk-ks-level1",
"de@collation=phonebook;colnormalization=yes;colstrength=primary"},
{"L", "en", "R", "US", "K", "ca", "gregory", "T", "en-US-u-ca-gregory",
"en_US@calendar=gregorian"},
{"L", "en", "R", "US", "K", "cal", "gregory", "X"},
{"L", "en", "R", "US", "K", "ca", "gregorian", "X"},
- {"L", "en", "R", "US", "K", "kn", "true", "T", "en-US-u-kn-true",
+ {"L", "en", "R", "US", "K", "kn", "true", "T", "en-US-u-kn",
"en_US@colnumeric=yes"},
{"B", "de-DE-u-co-phonebk", "C", "L", "pt", "T", "pt", "pt"},
{"B", "ja-jp-u-ca-japanese", "N", "T", "ja-JP", "ja_JP"},
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
index f8cb7a311d5..664f300e013 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
@@ -1,11 +1,12 @@
// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
+// License & terms of use: http://www.unicode.org/copyright.html
// localematchertest.cpp
// created: 2019jul04 Markus W. Scherer
#include <string>
#include <vector>
+#include <utility>
#include "unicode/utypes.h"
#include "unicode/localematcher.h"
@@ -57,7 +58,10 @@ public:
void testBasics();
void testSupportedDefault();
void testUnsupportedDefault();
+ void testNoDefault();
void testDemotion();
+ void testDirection();
+ void testMaxDistanceAndIsMatch();
void testMatch();
void testResolvedLocale();
void testDataDriven();
@@ -80,7 +84,10 @@ void LocaleMatcherTest::runIndexedTest(int32_t index, UBool exec, const char *&n
TESTCASE_AUTO(testBasics);
TESTCASE_AUTO(testSupportedDefault);
TESTCASE_AUTO(testUnsupportedDefault);
+ TESTCASE_AUTO(testNoDefault);
TESTCASE_AUTO(testDemotion);
+ TESTCASE_AUTO(testDirection);
+ TESTCASE_AUTO(testMaxDistanceAndIsMatch);
TESTCASE_AUTO(testMatch);
TESTCASE_AUTO(testResolvedLocale);
TESTCASE_AUTO(testDataDriven);
@@ -272,7 +279,7 @@ void LocaleMatcherTest::testSupportedDefault() {
assertEquals("getBestMatchResult(ja_JP).supp",
"en_GB", locString(result.getSupportedLocale()));
assertEquals("getBestMatchResult(ja_JP).suppIndex",
- 1, result.getSupportedIndex());
+ -1, result.getSupportedIndex());
}
void LocaleMatcherTest::testUnsupportedDefault() {
@@ -299,6 +306,29 @@ void LocaleMatcherTest::testUnsupportedDefault() {
-1, result.getSupportedIndex());
}
+void LocaleMatcherTest::testNoDefault() {
+ // We want nullptr instead of any default locale.
+ IcuTestErrorCode errorCode(*this, "testNoDefault");
+ Locale locales[] = { "fr", "en_GB", "en" };
+ LocaleMatcher matcher = LocaleMatcher::Builder().
+ setSupportedLocales(ARRAY_RANGE(locales)).
+ setNoDefaultLocale().
+ build(errorCode);
+ const Locale *best = matcher.getBestMatch("en_GB", errorCode);
+ assertEquals("getBestMatch(en_GB)", "en_GB", locString(best));
+ best = matcher.getBestMatch("en_US", errorCode);
+ assertEquals("getBestMatch(en_US)", "en", locString(best));
+ best = matcher.getBestMatch("fr_FR", errorCode);
+ assertEquals("getBestMatch(fr_FR)", "fr", locString(best));
+ best = matcher.getBestMatch("ja_JP", errorCode);
+ assertEquals("getBestMatch(ja_JP)", "(null)", locString(best));
+ LocaleMatcher::Result result = matcher.getBestMatchResult("ja_JP", errorCode);
+ assertEquals("getBestMatchResult(ja_JP).supp",
+ "(null)", locString(result.getSupportedLocale()));
+ assertEquals("getBestMatchResult(ja_JP).suppIndex",
+ -1, result.getSupportedIndex());
+}
+
void LocaleMatcherTest::testDemotion() {
IcuTestErrorCode errorCode(*this, "testDemotion");
Locale supported[] = { "fr", "de-CH", "it" };
@@ -322,6 +352,66 @@ void LocaleMatcherTest::testDemotion() {
}
}
+void LocaleMatcherTest::testDirection() {
+ IcuTestErrorCode errorCode(*this, "testDirection");
+ Locale supported[] = { "ar", "nn" };
+ Locale desired[] = { "arz-EG", "nb-DK" };
+ LocaleMatcher::Builder builder;
+ builder.setSupportedLocales(ARRAY_RANGE(supported));
+ {
+ // arz is a close one-way match to ar, and the region matches.
+ // (Egyptian Arabic vs. Arabic)
+ // Also explicitly exercise the move copy constructor.
+ LocaleMatcher built = builder.build(errorCode);
+ LocaleMatcher withOneWay(std::move(built));
+ Locale::RangeIterator<Locale *> desiredIter(ARRAY_RANGE(desired));
+ assertEquals("with one-way", "ar",
+ locString(withOneWay.getBestMatch(desiredIter, errorCode)));
+ }
+ {
+ // nb is a less close two-way match to nn, and the regions differ.
+ // (Norwegian Bokmal vs. Nynorsk)
+ // Also explicitly exercise the move assignment operator.
+ LocaleMatcher onlyTwoWay = builder.build(errorCode);
+ LocaleMatcher built =
+ builder.setDirection(ULOCMATCH_DIRECTION_ONLY_TWO_WAY).build(errorCode);
+ onlyTwoWay = std::move(built);
+ Locale::RangeIterator<Locale *> desiredIter(ARRAY_RANGE(desired));
+ assertEquals("only two-way", "nn",
+ locString(onlyTwoWay.getBestMatch(desiredIter, errorCode)));
+ }
+}
+
+void LocaleMatcherTest::testMaxDistanceAndIsMatch() {
+ IcuTestErrorCode errorCode(*this, "testMaxDistanceAndIsMatch");
+ LocaleMatcher::Builder builder;
+ LocaleMatcher standard = builder.build(errorCode);
+ Locale germanLux("de-LU");
+ Locale germanPhoenician("de-Phnx-AT");
+ Locale greek("el");
+ assertTrue("standard de-LU / de", standard.isMatch(germanLux, Locale::getGerman(), errorCode));
+ assertFalse("standard de-Phnx-AT / de",
+ standard.isMatch(germanPhoenician, Locale::getGerman(), errorCode));
+
+ // Allow a script difference to still match.
+ LocaleMatcher loose =
+ builder.setMaxDistance(germanPhoenician, Locale::getGerman()).build(errorCode);
+ assertTrue("loose de-LU / de", loose.isMatch(germanLux, Locale::getGerman(), errorCode));
+ assertTrue("loose de-Phnx-AT / de",
+ loose.isMatch(germanPhoenician, Locale::getGerman(), errorCode));
+ assertFalse("loose el / de", loose.isMatch(greek, Locale::getGerman(), errorCode));
+
+ // Allow at most a regional difference.
+ LocaleMatcher regional =
+ builder.setMaxDistance(Locale("de-AT"), Locale::getGerman()).build(errorCode);
+ assertTrue("regional de-LU / de",
+ regional.isMatch(Locale("de-LU"), Locale::getGerman(), errorCode));
+ assertFalse("regional da / no", regional.isMatch(Locale("da"), Locale("no"), errorCode));
+ assertFalse("regional zh-Hant / zh",
+ regional.isMatch(Locale::getChinese(), Locale::getTraditionalChinese(), errorCode));
+}
+
+
void LocaleMatcherTest::testMatch() {
IcuTestErrorCode errorCode(*this, "testMatch");
LocaleMatcher matcher = LocaleMatcher::Builder().build(errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
index 26f730d4bb2..61baca2e463 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
@@ -82,6 +82,7 @@ void LocaleDisplayNamesTest::runIndexedTest(int32_t index, UBool exec, const cha
TESTCASE(12, TestUldnDisplayContext);
TESTCASE(13, TestUldnWithGarbage);
TESTCASE(14, TestSubstituteHandling);
+ TESTCASE(15, TestNumericRegionID);
#endif
default:
name = "";
@@ -298,7 +299,6 @@ static UChar daFor_en[] = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"engel
static UChar daFor_en_cabud[] = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x62,0x75,0x64,0x64,0x68,0x69,0x73,0x74,0x69,0x73,0x6B,0x20,
0x6B,0x61,0x6C,0x65,0x6E,0x64,0x65,0x72,0x29,0}; //"engelsk (buddhistisk kalender)"
static UChar daFor_en_GB[] = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x53,0x74,0x6F,0x72,0x62,0x72,0x69,0x74,0x61,0x6E,0x6E,0x69,0x65,0x6E,0x29,0}; //"engelsk (Storbritannien)"
-static UChar daFor_en_GB_S[] = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x55,0x4B,0x29,0}; //"engelsk (UK)"
static UChar daFor_en_GB_D[] = {0x62,0x72,0x69,0x74,0x69,0x73,0x6B,0x20,0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"britisk engelsk"
static UChar esFor_en[] = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0}; //"ingles" with acute on the e
static UChar esFor_en_GB[] = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x52,0x65,0x69,0x6E,0x6F,0x20,0x55,0x6E,0x69,0x64,0x6F,0x29,0}; //"ingles (Reino Unido)" ...
@@ -310,7 +310,6 @@ static UChar daFor_en_T[] = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"Engel
static UChar daFor_en_cabudT[]= {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x62,0x75,0x64,0x64,0x68,0x69,0x73,0x74,0x69,0x73,0x6B,0x20,
0x6B,0x61,0x6C,0x65,0x6E,0x64,0x65,0x72,0x29,0}; //"Engelsk (buddhistisk kalender)"
static UChar daFor_en_GB_T[] = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x53,0x74,0x6F,0x72,0x62,0x72,0x69,0x74,0x61,0x6E,0x6E,0x69,0x65,0x6E,0x29,0}; //"Engelsk (Storbritannien)"
-static UChar daFor_en_GB_ST[] = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x55,0x4B,0x29,0}; //"Engelsk (UK)"
static UChar daFor_en_GB_DT[] = {0x42,0x72,0x69,0x74,0x69,0x73,0x6B,0x20,0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"Britisk engelsk"
static UChar esFor_en_T[] = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0}; //"Ingles" with acute on the e
static UChar esFor_en_GB_T[] = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x52,0x65,0x69,0x6E,0x6F,0x20,0x55,0x6E,0x69,0x64,0x6F,0x29,0}; //"Ingles (Reino Unido)" ...
@@ -323,7 +322,7 @@ static const LocNameDispContextItem ctxtItems[] = {
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en, daFor_en },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_cabud, daFor_en_cabud },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB },
- { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB_S },
+ { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB },
{ "da", UDISPCTX_DIALECT_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB_D },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en, esFor_en },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_GB, esFor_en_GB },
@@ -334,7 +333,7 @@ static const LocNameDispContextItem ctxtItems[] = {
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en, daFor_en_T },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_cabud, daFor_en_cabudT },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB_T },
- { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB_ST },
+ { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB_T },
{ "da", UDISPCTX_DIALECT_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB_DT },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en, esFor_en_T },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL, en_GB, esFor_en_GB_T },
@@ -345,7 +344,7 @@ static const LocNameDispContextItem ctxtItems[] = {
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_FULL, en, daFor_en_T },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_FULL, en_cabud, daFor_en_cabudT },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB_T },
- { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB_ST },
+ { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB_T },
{ "da", UDISPCTX_DIALECT_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB_DT },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_FULL, en, esFor_en_T },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UDISPCTX_LENGTH_FULL, en_GB, esFor_en_GB_T },
@@ -356,7 +355,7 @@ static const LocNameDispContextItem ctxtItems[] = {
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_FULL, en, daFor_en },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_FULL, en_cabud, daFor_en_cabud },
{ "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB },
- { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB_S },
+ { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_SHORT, en_GB, daFor_en_GB },
{ "da", UDISPCTX_DIALECT_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_FULL, en_GB, daFor_en_GB_D },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_FULL, en, esFor_en_T },
{ "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UDISPCTX_LENGTH_FULL, en_GB, esFor_en_GB_T },
@@ -422,6 +421,23 @@ void LocaleDisplayNamesTest::TestRootEtc() {
delete ldn;
}
+void LocaleDisplayNamesTest::TestNumericRegionID() {
+ UErrorCode err = U_ZERO_ERROR;
+ ULocaleDisplayNames* ldn = uldn_open("es_MX", ULDN_STANDARD_NAMES, &err);
+ UChar displayName[200];
+ int32_t displayNameLength = uldn_regionDisplayName(ldn, "019", displayName, 200, &err);
+ test_assert(U_SUCCESS(err));
+ test_assert_equal(UnicodeString(u"América"), UnicodeString(displayName));
+ uldn_close(ldn);
+
+ err = U_ZERO_ERROR; // reset in case the test above returned an error code
+ ldn = uldn_open("en_AU", ULDN_STANDARD_NAMES, &err);
+ displayNameLength = uldn_regionDisplayName(ldn, "002", displayName, 200, &err);
+ test_assert(U_SUCCESS(err));
+ test_assert_equal(UnicodeString(u"Africa"), UnicodeString(displayName));
+ uldn_close(ldn);
+}
+
static const char unknown_region[] = "wx";
static const char unknown_lang[] = "xy";
static const char unknown_script[] = "wxyz";
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
index ad0af463a16..e09a7d392cb 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
@@ -38,6 +38,7 @@ public:
void TestUldnDisplayContext(void);
void TestUldnWithGarbage(void);
void TestSubstituteHandling(void);
+ void TestNumericRegionID(void);
void VerifySubstitute(LocaleDisplayNames* ldn);
void VerifyNoSubstitute(LocaleDisplayNames* ldn);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
index 98612a1a37c..5f1075f5461 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
@@ -6,6 +6,7 @@
* others. All Rights Reserved.
********************************************************************/
+#include <algorithm>
#include <functional>
#include <iterator>
#include <set>
@@ -31,6 +32,8 @@
#include "putilimp.h"
#include "hash.h"
#include "locmap.h"
+#include "uparse.h"
+#include "ulocimp.h"
static const char* const rawData[33][8] = {
@@ -255,9 +258,13 @@ void LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, c
TESTCASE_AUTO(TestBug13277);
TESTCASE_AUTO(TestBug13554);
TESTCASE_AUTO(TestBug20410);
+ TESTCASE_AUTO(TestBug20900);
+ TESTCASE_AUTO(TestLocaleCanonicalizationFromFile);
+ TESTCASE_AUTO(TestKnownCanonicalizedListCorrect);
TESTCASE_AUTO(TestConstructorAcceptsBCP47);
TESTCASE_AUTO(TestForLanguageTag);
TESTCASE_AUTO(TestToLanguageTag);
+ TESTCASE_AUTO(TestToLanguageTagOmitTrue);
TESTCASE_AUTO(TestMoveAssign);
TESTCASE_AUTO(TestMoveCtor);
TESTCASE_AUTO(TestBug20407iVariantPreferredValue);
@@ -271,6 +278,10 @@ void LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, c
TESTCASE_AUTO(TestPointerConvertingIterator);
TESTCASE_AUTO(TestTagConvertingIterator);
TESTCASE_AUTO(TestCapturingTagConvertingIterator);
+ TESTCASE_AUTO(TestSetUnicodeKeywordValueInLongLocale);
+ TESTCASE_AUTO(TestSetUnicodeKeywordValueNullInLongLocale);
+ TESTCASE_AUTO(TestCanonicalize);
+ TESTCASE_AUTO(TestLeak21419);
TESTCASE_AUTO_END;
}
@@ -907,8 +918,8 @@ LocaleTest::TestGetLangsAndCountries()
;
/* TODO: Change this test to be more like the cloctst version? */
- if (testCount != 596)
- errln("Expected getISOLanguages() to return 596 languages; it returned %d", testCount);
+ if (testCount != 597)
+ errln("Expected getISOLanguages() to return 597 languages; it returned %d", testCount);
else {
for (i = 0; i < 15; i++) {
int32_t j;
@@ -1705,7 +1716,2111 @@ LocaleTest::TestAddLikelyAndMinimizeSubtags() {
"und_Moon_AQ",
"_Moon_AQ",
"_Moon_AQ"
- },
+ }, {
+ "aa",
+ "aa_Latn_ET",
+ "aa"
+ }, {
+ "af",
+ "af_Latn_ZA",
+ "af"
+ }, {
+ "ak",
+ "ak_Latn_GH",
+ "ak"
+ }, {
+ "am",
+ "am_Ethi_ET",
+ "am"
+ }, {
+ "ar",
+ "ar_Arab_EG",
+ "ar"
+ }, {
+ "as",
+ "as_Beng_IN",
+ "as"
+ }, {
+ "az",
+ "az_Latn_AZ",
+ "az"
+ }, {
+ "be",
+ "be_Cyrl_BY",
+ "be"
+ }, {
+ "bg",
+ "bg_Cyrl_BG",
+ "bg"
+ }, {
+ "bn",
+ "bn_Beng_BD",
+ "bn"
+ }, {
+ "bo",
+ "bo_Tibt_CN",
+ "bo"
+ }, {
+ "bs",
+ "bs_Latn_BA",
+ "bs"
+ }, {
+ "ca",
+ "ca_Latn_ES",
+ "ca"
+ }, {
+ "ch",
+ "ch_Latn_GU",
+ "ch"
+ }, {
+ "chk",
+ "chk_Latn_FM",
+ "chk"
+ }, {
+ "cs",
+ "cs_Latn_CZ",
+ "cs"
+ }, {
+ "cy",
+ "cy_Latn_GB",
+ "cy"
+ }, {
+ "da",
+ "da_Latn_DK",
+ "da"
+ }, {
+ "de",
+ "de_Latn_DE",
+ "de"
+ }, {
+ "dv",
+ "dv_Thaa_MV",
+ "dv"
+ }, {
+ "dz",
+ "dz_Tibt_BT",
+ "dz"
+ }, {
+ "ee",
+ "ee_Latn_GH",
+ "ee"
+ }, {
+ "el",
+ "el_Grek_GR",
+ "el"
+ }, {
+ "en",
+ "en_Latn_US",
+ "en"
+ }, {
+ "es",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "et",
+ "et_Latn_EE",
+ "et"
+ }, {
+ "eu",
+ "eu_Latn_ES",
+ "eu"
+ }, {
+ "fa",
+ "fa_Arab_IR",
+ "fa"
+ }, {
+ "fi",
+ "fi_Latn_FI",
+ "fi"
+ }, {
+ "fil",
+ "fil_Latn_PH",
+ "fil"
+ }, {
+ "fj",
+ "fj_Latn_FJ",
+ "fj"
+ }, {
+ "fo",
+ "fo_Latn_FO",
+ "fo"
+ }, {
+ "fr",
+ "fr_Latn_FR",
+ "fr"
+ }, {
+ "fur",
+ "fur_Latn_IT",
+ "fur"
+ }, {
+ "ga",
+ "ga_Latn_IE",
+ "ga"
+ }, {
+ "gaa",
+ "gaa_Latn_GH",
+ "gaa"
+ }, {
+ "gl",
+ "gl_Latn_ES",
+ "gl"
+ }, {
+ "gn",
+ "gn_Latn_PY",
+ "gn"
+ }, {
+ "gu",
+ "gu_Gujr_IN",
+ "gu"
+ }, {
+ "ha",
+ "ha_Latn_NG",
+ "ha"
+ }, {
+ "haw",
+ "haw_Latn_US",
+ "haw"
+ }, {
+ "he",
+ "he_Hebr_IL",
+ "he"
+ }, {
+ "hi",
+ "hi_Deva_IN",
+ "hi"
+ }, {
+ "hr",
+ "hr_Latn_HR",
+ "hr"
+ }, {
+ "ht",
+ "ht_Latn_HT",
+ "ht"
+ }, {
+ "hu",
+ "hu_Latn_HU",
+ "hu"
+ }, {
+ "hy",
+ "hy_Armn_AM",
+ "hy"
+ }, {
+ "id",
+ "id_Latn_ID",
+ "id"
+ }, {
+ "ig",
+ "ig_Latn_NG",
+ "ig"
+ }, {
+ "ii",
+ "ii_Yiii_CN",
+ "ii"
+ }, {
+ "is",
+ "is_Latn_IS",
+ "is"
+ }, {
+ "it",
+ "it_Latn_IT",
+ "it"
+ }, {
+ "ja",
+ "ja_Jpan_JP",
+ "ja"
+ }, {
+ "ka",
+ "ka_Geor_GE",
+ "ka"
+ }, {
+ "kaj",
+ "kaj_Latn_NG",
+ "kaj"
+ }, {
+ "kam",
+ "kam_Latn_KE",
+ "kam"
+ }, {
+ "kk",
+ "kk_Cyrl_KZ",
+ "kk"
+ }, {
+ "kl",
+ "kl_Latn_GL",
+ "kl"
+ }, {
+ "km",
+ "km_Khmr_KH",
+ "km"
+ }, {
+ "kn",
+ "kn_Knda_IN",
+ "kn"
+ }, {
+ "ko",
+ "ko_Kore_KR",
+ "ko"
+ }, {
+ "kok",
+ "kok_Deva_IN",
+ "kok"
+ }, {
+ "kpe",
+ "kpe_Latn_LR",
+ "kpe"
+ }, {
+ "ku",
+ "ku_Latn_TR",
+ "ku"
+ }, {
+ "ky",
+ "ky_Cyrl_KG",
+ "ky"
+ }, {
+ "la",
+ "la_Latn_VA",
+ "la"
+ }, {
+ "ln",
+ "ln_Latn_CD",
+ "ln"
+ }, {
+ "lo",
+ "lo_Laoo_LA",
+ "lo"
+ }, {
+ "lt",
+ "lt_Latn_LT",
+ "lt"
+ }, {
+ "lv",
+ "lv_Latn_LV",
+ "lv"
+ }, {
+ "mg",
+ "mg_Latn_MG",
+ "mg"
+ }, {
+ "mh",
+ "mh_Latn_MH",
+ "mh"
+ }, {
+ "mk",
+ "mk_Cyrl_MK",
+ "mk"
+ }, {
+ "ml",
+ "ml_Mlym_IN",
+ "ml"
+ }, {
+ "mn",
+ "mn_Cyrl_MN",
+ "mn"
+ }, {
+ "mr",
+ "mr_Deva_IN",
+ "mr"
+ }, {
+ "ms",
+ "ms_Latn_MY",
+ "ms"
+ }, {
+ "mt",
+ "mt_Latn_MT",
+ "mt"
+ }, {
+ "my",
+ "my_Mymr_MM",
+ "my"
+ }, {
+ "na",
+ "na_Latn_NR",
+ "na"
+ }, {
+ "ne",
+ "ne_Deva_NP",
+ "ne"
+ }, {
+ "niu",
+ "niu_Latn_NU",
+ "niu"
+ }, {
+ "nl",
+ "nl_Latn_NL",
+ "nl"
+ }, {
+ "nn",
+ "nn_Latn_NO",
+ "nn"
+ }, {
+ "nr",
+ "nr_Latn_ZA",
+ "nr"
+ }, {
+ "nso",
+ "nso_Latn_ZA",
+ "nso"
+ }, {
+ "om",
+ "om_Latn_ET",
+ "om"
+ }, {
+ "or",
+ "or_Orya_IN",
+ "or"
+ }, {
+ "pa",
+ "pa_Guru_IN",
+ "pa"
+ }, {
+ "pa_Arab",
+ "pa_Arab_PK",
+ "pa_PK"
+ }, {
+ "pa_PK",
+ "pa_Arab_PK",
+ "pa_PK"
+ }, {
+ "pap",
+ "pap_Latn_AW",
+ "pap"
+ }, {
+ "pau",
+ "pau_Latn_PW",
+ "pau"
+ }, {
+ "pl",
+ "pl_Latn_PL",
+ "pl"
+ }, {
+ "ps",
+ "ps_Arab_AF",
+ "ps"
+ }, {
+ "pt",
+ "pt_Latn_BR",
+ "pt"
+ }, {
+ "rn",
+ "rn_Latn_BI",
+ "rn"
+ }, {
+ "ro",
+ "ro_Latn_RO",
+ "ro"
+ }, {
+ "ru",
+ "ru_Cyrl_RU",
+ "ru"
+ }, {
+ "rw",
+ "rw_Latn_RW",
+ "rw"
+ }, {
+ "sa",
+ "sa_Deva_IN",
+ "sa"
+ }, {
+ "se",
+ "se_Latn_NO",
+ "se"
+ }, {
+ "sg",
+ "sg_Latn_CF",
+ "sg"
+ }, {
+ "si",
+ "si_Sinh_LK",
+ "si"
+ }, {
+ "sid",
+ "sid_Latn_ET",
+ "sid"
+ }, {
+ "sk",
+ "sk_Latn_SK",
+ "sk"
+ }, {
+ "sl",
+ "sl_Latn_SI",
+ "sl"
+ }, {
+ "sm",
+ "sm_Latn_WS",
+ "sm"
+ }, {
+ "so",
+ "so_Latn_SO",
+ "so"
+ }, {
+ "sq",
+ "sq_Latn_AL",
+ "sq"
+ }, {
+ "sr",
+ "sr_Cyrl_RS",
+ "sr"
+ }, {
+ "ss",
+ "ss_Latn_ZA",
+ "ss"
+ }, {
+ "st",
+ "st_Latn_ZA",
+ "st"
+ }, {
+ "sv",
+ "sv_Latn_SE",
+ "sv"
+ }, {
+ "sw",
+ "sw_Latn_TZ",
+ "sw"
+ }, {
+ "ta",
+ "ta_Taml_IN",
+ "ta"
+ }, {
+ "te",
+ "te_Telu_IN",
+ "te"
+ }, {
+ "tet",
+ "tet_Latn_TL",
+ "tet"
+ }, {
+ "tg",
+ "tg_Cyrl_TJ",
+ "tg"
+ }, {
+ "th",
+ "th_Thai_TH",
+ "th"
+ }, {
+ "ti",
+ "ti_Ethi_ET",
+ "ti"
+ }, {
+ "tig",
+ "tig_Ethi_ER",
+ "tig"
+ }, {
+ "tk",
+ "tk_Latn_TM",
+ "tk"
+ }, {
+ "tkl",
+ "tkl_Latn_TK",
+ "tkl"
+ }, {
+ "tn",
+ "tn_Latn_ZA",
+ "tn"
+ }, {
+ "to",
+ "to_Latn_TO",
+ "to"
+ }, {
+ "tpi",
+ "tpi_Latn_PG",
+ "tpi"
+ }, {
+ "tr",
+ "tr_Latn_TR",
+ "tr"
+ }, {
+ "ts",
+ "ts_Latn_ZA",
+ "ts"
+ }, {
+ "tt",
+ "tt_Cyrl_RU",
+ "tt"
+ }, {
+ "tvl",
+ "tvl_Latn_TV",
+ "tvl"
+ }, {
+ "ty",
+ "ty_Latn_PF",
+ "ty"
+ }, {
+ "uk",
+ "uk_Cyrl_UA",
+ "uk"
+ }, {
+ "und",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_AD",
+ "ca_Latn_AD",
+ "ca_AD"
+ }, {
+ "und_AE",
+ "ar_Arab_AE",
+ "ar_AE"
+ }, {
+ "und_AF",
+ "fa_Arab_AF",
+ "fa_AF"
+ }, {
+ "und_AL",
+ "sq_Latn_AL",
+ "sq"
+ }, {
+ "und_AM",
+ "hy_Armn_AM",
+ "hy"
+ }, {
+ "und_AO",
+ "pt_Latn_AO",
+ "pt_AO"
+ }, {
+ "und_AR",
+ "es_Latn_AR",
+ "es_AR"
+ }, {
+ "und_AS",
+ "sm_Latn_AS",
+ "sm_AS"
+ }, {
+ "und_AT",
+ "de_Latn_AT",
+ "de_AT"
+ }, {
+ "und_AW",
+ "nl_Latn_AW",
+ "nl_AW"
+ }, {
+ "und_AX",
+ "sv_Latn_AX",
+ "sv_AX"
+ }, {
+ "und_AZ",
+ "az_Latn_AZ",
+ "az"
+ }, {
+ "und_Arab",
+ "ar_Arab_EG",
+ "ar"
+ }, {
+ "und_Arab_IN",
+ "ur_Arab_IN",
+ "ur_IN"
+ }, {
+ "und_Arab_PK",
+ "ur_Arab_PK",
+ "ur"
+ }, {
+ "und_Arab_SN",
+ "ar_Arab_SN",
+ "ar_SN"
+ }, {
+ "und_Armn",
+ "hy_Armn_AM",
+ "hy"
+ }, {
+ "und_BA",
+ "bs_Latn_BA",
+ "bs"
+ }, {
+ "und_BD",
+ "bn_Beng_BD",
+ "bn"
+ }, {
+ "und_BE",
+ "nl_Latn_BE",
+ "nl_BE"
+ }, {
+ "und_BF",
+ "fr_Latn_BF",
+ "fr_BF"
+ }, {
+ "und_BG",
+ "bg_Cyrl_BG",
+ "bg"
+ }, {
+ "und_BH",
+ "ar_Arab_BH",
+ "ar_BH"
+ }, {
+ "und_BI",
+ "rn_Latn_BI",
+ "rn"
+ }, {
+ "und_BJ",
+ "fr_Latn_BJ",
+ "fr_BJ"
+ }, {
+ "und_BN",
+ "ms_Latn_BN",
+ "ms_BN"
+ }, {
+ "und_BO",
+ "es_Latn_BO",
+ "es_BO"
+ }, {
+ "und_BR",
+ "pt_Latn_BR",
+ "pt"
+ }, {
+ "und_BT",
+ "dz_Tibt_BT",
+ "dz"
+ }, {
+ "und_BY",
+ "be_Cyrl_BY",
+ "be"
+ }, {
+ "und_Beng",
+ "bn_Beng_BD",
+ "bn"
+ }, {
+ "und_Beng_IN",
+ "bn_Beng_IN",
+ "bn_IN"
+ }, {
+ "und_CD",
+ "sw_Latn_CD",
+ "sw_CD"
+ }, {
+ "und_CF",
+ "fr_Latn_CF",
+ "fr_CF"
+ }, {
+ "und_CG",
+ "fr_Latn_CG",
+ "fr_CG"
+ }, {
+ "und_CH",
+ "de_Latn_CH",
+ "de_CH"
+ }, {
+ "und_CI",
+ "fr_Latn_CI",
+ "fr_CI"
+ }, {
+ "und_CL",
+ "es_Latn_CL",
+ "es_CL"
+ }, {
+ "und_CM",
+ "fr_Latn_CM",
+ "fr_CM"
+ }, {
+ "und_CN",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_CO",
+ "es_Latn_CO",
+ "es_CO"
+ }, {
+ "und_CR",
+ "es_Latn_CR",
+ "es_CR"
+ }, {
+ "und_CU",
+ "es_Latn_CU",
+ "es_CU"
+ }, {
+ "und_CV",
+ "pt_Latn_CV",
+ "pt_CV"
+ }, {
+ "und_CY",
+ "el_Grek_CY",
+ "el_CY"
+ }, {
+ "und_CZ",
+ "cs_Latn_CZ",
+ "cs"
+ }, {
+ "und_Cyrl",
+ "ru_Cyrl_RU",
+ "ru"
+ }, {
+ "und_Cyrl_KZ",
+ "ru_Cyrl_KZ",
+ "ru_KZ"
+ }, {
+ "und_DE",
+ "de_Latn_DE",
+ "de"
+ }, {
+ "und_DJ",
+ "aa_Latn_DJ",
+ "aa_DJ"
+ }, {
+ "und_DK",
+ "da_Latn_DK",
+ "da"
+ }, {
+ "und_DO",
+ "es_Latn_DO",
+ "es_DO"
+ }, {
+ "und_DZ",
+ "ar_Arab_DZ",
+ "ar_DZ"
+ }, {
+ "und_Deva",
+ "hi_Deva_IN",
+ "hi"
+ }, {
+ "und_EC",
+ "es_Latn_EC",
+ "es_EC"
+ }, {
+ "und_EE",
+ "et_Latn_EE",
+ "et"
+ }, {
+ "und_EG",
+ "ar_Arab_EG",
+ "ar"
+ }, {
+ "und_EH",
+ "ar_Arab_EH",
+ "ar_EH"
+ }, {
+ "und_ER",
+ "ti_Ethi_ER",
+ "ti_ER"
+ }, {
+ "und_ES",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "und_ET",
+ "am_Ethi_ET",
+ "am"
+ }, {
+ "und_Ethi",
+ "am_Ethi_ET",
+ "am"
+ }, {
+ "und_Ethi_ER",
+ "am_Ethi_ER",
+ "am_ER"
+ }, {
+ "und_FI",
+ "fi_Latn_FI",
+ "fi"
+ }, {
+ "und_FM",
+ "en_Latn_FM",
+ "en_FM"
+ }, {
+ "und_FO",
+ "fo_Latn_FO",
+ "fo"
+ }, {
+ "und_FR",
+ "fr_Latn_FR",
+ "fr"
+ }, {
+ "und_GA",
+ "fr_Latn_GA",
+ "fr_GA"
+ }, {
+ "und_GE",
+ "ka_Geor_GE",
+ "ka"
+ }, {
+ "und_GF",
+ "fr_Latn_GF",
+ "fr_GF"
+ }, {
+ "und_GL",
+ "kl_Latn_GL",
+ "kl"
+ }, {
+ "und_GN",
+ "fr_Latn_GN",
+ "fr_GN"
+ }, {
+ "und_GP",
+ "fr_Latn_GP",
+ "fr_GP"
+ }, {
+ "und_GQ",
+ "es_Latn_GQ",
+ "es_GQ"
+ }, {
+ "und_GR",
+ "el_Grek_GR",
+ "el"
+ }, {
+ "und_GT",
+ "es_Latn_GT",
+ "es_GT"
+ }, {
+ "und_GU",
+ "en_Latn_GU",
+ "en_GU"
+ }, {
+ "und_GW",
+ "pt_Latn_GW",
+ "pt_GW"
+ }, {
+ "und_Geor",
+ "ka_Geor_GE",
+ "ka"
+ }, {
+ "und_Grek",
+ "el_Grek_GR",
+ "el"
+ }, {
+ "und_Gujr",
+ "gu_Gujr_IN",
+ "gu"
+ }, {
+ "und_Guru",
+ "pa_Guru_IN",
+ "pa"
+ }, {
+ "und_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "und_HN",
+ "es_Latn_HN",
+ "es_HN"
+ }, {
+ "und_HR",
+ "hr_Latn_HR",
+ "hr"
+ }, {
+ "und_HT",
+ "ht_Latn_HT",
+ "ht"
+ }, {
+ "und_HU",
+ "hu_Latn_HU",
+ "hu"
+ }, {
+ "und_Hani",
+ "zh_Hani_CN",
+ "zh_Hani"
+ }, {
+ "und_Hans",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_Hant",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_Hebr",
+ "he_Hebr_IL",
+ "he"
+ }, {
+ "und_ID",
+ "id_Latn_ID",
+ "id"
+ }, {
+ "und_IL",
+ "he_Hebr_IL",
+ "he"
+ }, {
+ "und_IN",
+ "hi_Deva_IN",
+ "hi"
+ }, {
+ "und_IQ",
+ "ar_Arab_IQ",
+ "ar_IQ"
+ }, {
+ "und_IR",
+ "fa_Arab_IR",
+ "fa"
+ }, {
+ "und_IS",
+ "is_Latn_IS",
+ "is"
+ }, {
+ "und_IT",
+ "it_Latn_IT",
+ "it"
+ }, {
+ "und_JO",
+ "ar_Arab_JO",
+ "ar_JO"
+ }, {
+ "und_JP",
+ "ja_Jpan_JP",
+ "ja"
+ }, {
+ "und_Jpan",
+ "ja_Jpan_JP",
+ "ja"
+ }, {
+ "und_KG",
+ "ky_Cyrl_KG",
+ "ky"
+ }, {
+ "und_KH",
+ "km_Khmr_KH",
+ "km"
+ }, {
+ "und_KM",
+ "ar_Arab_KM",
+ "ar_KM"
+ }, {
+ "und_KP",
+ "ko_Kore_KP",
+ "ko_KP"
+ }, {
+ "und_KR",
+ "ko_Kore_KR",
+ "ko"
+ }, {
+ "und_KW",
+ "ar_Arab_KW",
+ "ar_KW"
+ }, {
+ "und_KZ",
+ "ru_Cyrl_KZ",
+ "ru_KZ"
+ }, {
+ "und_Khmr",
+ "km_Khmr_KH",
+ "km"
+ }, {
+ "und_Knda",
+ "kn_Knda_IN",
+ "kn"
+ }, {
+ "und_Kore",
+ "ko_Kore_KR",
+ "ko"
+ }, {
+ "und_LA",
+ "lo_Laoo_LA",
+ "lo"
+ }, {
+ "und_LB",
+ "ar_Arab_LB",
+ "ar_LB"
+ }, {
+ "und_LI",
+ "de_Latn_LI",
+ "de_LI"
+ }, {
+ "und_LK",
+ "si_Sinh_LK",
+ "si"
+ }, {
+ "und_LS",
+ "st_Latn_LS",
+ "st_LS"
+ }, {
+ "und_LT",
+ "lt_Latn_LT",
+ "lt"
+ }, {
+ "und_LU",
+ "fr_Latn_LU",
+ "fr_LU"
+ }, {
+ "und_LV",
+ "lv_Latn_LV",
+ "lv"
+ }, {
+ "und_LY",
+ "ar_Arab_LY",
+ "ar_LY"
+ }, {
+ "und_Laoo",
+ "lo_Laoo_LA",
+ "lo"
+ }, {
+ "und_Latn_ES",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "und_Latn_ET",
+ "en_Latn_ET",
+ "en_ET"
+ }, {
+ "und_Latn_GB",
+ "en_Latn_GB",
+ "en_GB"
+ }, {
+ "und_Latn_GH",
+ "ak_Latn_GH",
+ "ak"
+ }, {
+ "und_Latn_ID",
+ "id_Latn_ID",
+ "id"
+ }, {
+ "und_Latn_IT",
+ "it_Latn_IT",
+ "it"
+ }, {
+ "und_Latn_NG",
+ "en_Latn_NG",
+ "en_NG"
+ }, {
+ "und_Latn_TR",
+ "tr_Latn_TR",
+ "tr"
+ }, {
+ "und_Latn_ZA",
+ "en_Latn_ZA",
+ "en_ZA"
+ }, {
+ "und_MA",
+ "ar_Arab_MA",
+ "ar_MA"
+ }, {
+ "und_MC",
+ "fr_Latn_MC",
+ "fr_MC"
+ }, {
+ "und_MD",
+ "ro_Latn_MD",
+ "ro_MD"
+ }, {
+ "und_ME",
+ "sr_Latn_ME",
+ "sr_ME"
+ }, {
+ "und_MG",
+ "mg_Latn_MG",
+ "mg"
+ }, {
+ "und_MK",
+ "mk_Cyrl_MK",
+ "mk"
+ }, {
+ "und_ML",
+ "bm_Latn_ML",
+ "bm"
+ }, {
+ "und_MM",
+ "my_Mymr_MM",
+ "my"
+ }, {
+ "und_MN",
+ "mn_Cyrl_MN",
+ "mn"
+ }, {
+ "und_MO",
+ "zh_Hant_MO",
+ "zh_MO"
+ }, {
+ "und_MQ",
+ "fr_Latn_MQ",
+ "fr_MQ"
+ }, {
+ "und_MR",
+ "ar_Arab_MR",
+ "ar_MR"
+ }, {
+ "und_MT",
+ "mt_Latn_MT",
+ "mt"
+ }, {
+ "und_MV",
+ "dv_Thaa_MV",
+ "dv"
+ }, {
+ "und_MX",
+ "es_Latn_MX",
+ "es_MX"
+ }, {
+ "und_MY",
+ "ms_Latn_MY",
+ "ms"
+ }, {
+ "und_MZ",
+ "pt_Latn_MZ",
+ "pt_MZ"
+ }, {
+ "und_Mlym",
+ "ml_Mlym_IN",
+ "ml"
+ }, {
+ "und_Mymr",
+ "my_Mymr_MM",
+ "my"
+ }, {
+ "und_NC",
+ "fr_Latn_NC",
+ "fr_NC"
+ }, {
+ "und_NE",
+ "ha_Latn_NE",
+ "ha_NE"
+ }, {
+ "und_NG",
+ "en_Latn_NG",
+ "en_NG"
+ }, {
+ "und_NI",
+ "es_Latn_NI",
+ "es_NI"
+ }, {
+ "und_NL",
+ "nl_Latn_NL",
+ "nl"
+ }, {
+ "und_NO",
+ "nb_Latn_NO",
+ "nb"
+ }, {
+ "und_NP",
+ "ne_Deva_NP",
+ "ne"
+ }, {
+ "und_NR",
+ "en_Latn_NR",
+ "en_NR"
+ }, {
+ "und_OM",
+ "ar_Arab_OM",
+ "ar_OM"
+ }, {
+ "und_Orya",
+ "or_Orya_IN",
+ "or"
+ }, {
+ "und_PA",
+ "es_Latn_PA",
+ "es_PA"
+ }, {
+ "und_PE",
+ "es_Latn_PE",
+ "es_PE"
+ }, {
+ "und_PF",
+ "fr_Latn_PF",
+ "fr_PF"
+ }, {
+ "und_PG",
+ "tpi_Latn_PG",
+ "tpi"
+ }, {
+ "und_PH",
+ "fil_Latn_PH",
+ "fil"
+ }, {
+ "und_PL",
+ "pl_Latn_PL",
+ "pl"
+ }, {
+ "und_PM",
+ "fr_Latn_PM",
+ "fr_PM"
+ }, {
+ "und_PR",
+ "es_Latn_PR",
+ "es_PR"
+ }, {
+ "und_PS",
+ "ar_Arab_PS",
+ "ar_PS"
+ }, {
+ "und_PT",
+ "pt_Latn_PT",
+ "pt_PT"
+ }, {
+ "und_PW",
+ "pau_Latn_PW",
+ "pau"
+ }, {
+ "und_PY",
+ "gn_Latn_PY",
+ "gn"
+ }, {
+ "und_QA",
+ "ar_Arab_QA",
+ "ar_QA"
+ }, {
+ "und_RE",
+ "fr_Latn_RE",
+ "fr_RE"
+ }, {
+ "und_RO",
+ "ro_Latn_RO",
+ "ro"
+ }, {
+ "und_RS",
+ "sr_Cyrl_RS",
+ "sr"
+ }, {
+ "und_RU",
+ "ru_Cyrl_RU",
+ "ru"
+ }, {
+ "und_RW",
+ "rw_Latn_RW",
+ "rw"
+ }, {
+ "und_SA",
+ "ar_Arab_SA",
+ "ar_SA"
+ }, {
+ "und_SD",
+ "ar_Arab_SD",
+ "ar_SD"
+ }, {
+ "und_SE",
+ "sv_Latn_SE",
+ "sv"
+ }, {
+ "und_SG",
+ "en_Latn_SG",
+ "en_SG"
+ }, {
+ "und_SI",
+ "sl_Latn_SI",
+ "sl"
+ }, {
+ "und_SJ",
+ "nb_Latn_SJ",
+ "nb_SJ"
+ }, {
+ "und_SK",
+ "sk_Latn_SK",
+ "sk"
+ }, {
+ "und_SM",
+ "it_Latn_SM",
+ "it_SM"
+ }, {
+ "und_SN",
+ "fr_Latn_SN",
+ "fr_SN"
+ }, {
+ "und_SO",
+ "so_Latn_SO",
+ "so"
+ }, {
+ "und_SR",
+ "nl_Latn_SR",
+ "nl_SR"
+ }, {
+ "und_ST",
+ "pt_Latn_ST",
+ "pt_ST"
+ }, {
+ "und_SV",
+ "es_Latn_SV",
+ "es_SV"
+ }, {
+ "und_SY",
+ "ar_Arab_SY",
+ "ar_SY"
+ }, {
+ "und_Sinh",
+ "si_Sinh_LK",
+ "si"
+ }, {
+ "und_Syrc",
+ "syr_Syrc_IQ",
+ "syr"
+ }, {
+ "und_TD",
+ "fr_Latn_TD",
+ "fr_TD"
+ }, {
+ "und_TG",
+ "fr_Latn_TG",
+ "fr_TG"
+ }, {
+ "und_TH",
+ "th_Thai_TH",
+ "th"
+ }, {
+ "und_TJ",
+ "tg_Cyrl_TJ",
+ "tg"
+ }, {
+ "und_TK",
+ "tkl_Latn_TK",
+ "tkl"
+ }, {
+ "und_TL",
+ "pt_Latn_TL",
+ "pt_TL"
+ }, {
+ "und_TM",
+ "tk_Latn_TM",
+ "tk"
+ }, {
+ "und_TN",
+ "ar_Arab_TN",
+ "ar_TN"
+ }, {
+ "und_TO",
+ "to_Latn_TO",
+ "to"
+ }, {
+ "und_TR",
+ "tr_Latn_TR",
+ "tr"
+ }, {
+ "und_TV",
+ "tvl_Latn_TV",
+ "tvl"
+ }, {
+ "und_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_Taml",
+ "ta_Taml_IN",
+ "ta"
+ }, {
+ "und_Telu",
+ "te_Telu_IN",
+ "te"
+ }, {
+ "und_Thaa",
+ "dv_Thaa_MV",
+ "dv"
+ }, {
+ "und_Thai",
+ "th_Thai_TH",
+ "th"
+ }, {
+ "und_Tibt",
+ "bo_Tibt_CN",
+ "bo"
+ }, {
+ "und_UA",
+ "uk_Cyrl_UA",
+ "uk"
+ }, {
+ "und_UY",
+ "es_Latn_UY",
+ "es_UY"
+ }, {
+ "und_UZ",
+ "uz_Latn_UZ",
+ "uz"
+ }, {
+ "und_VA",
+ "it_Latn_VA",
+ "it_VA"
+ }, {
+ "und_VE",
+ "es_Latn_VE",
+ "es_VE"
+ }, {
+ "und_VN",
+ "vi_Latn_VN",
+ "vi"
+ }, {
+ "und_VU",
+ "bi_Latn_VU",
+ "bi"
+ }, {
+ "und_WF",
+ "fr_Latn_WF",
+ "fr_WF"
+ }, {
+ "und_WS",
+ "sm_Latn_WS",
+ "sm"
+ }, {
+ "und_YE",
+ "ar_Arab_YE",
+ "ar_YE"
+ }, {
+ "und_YT",
+ "fr_Latn_YT",
+ "fr_YT"
+ }, {
+ "und_Yiii",
+ "ii_Yiii_CN",
+ "ii"
+ }, {
+ "ur",
+ "ur_Arab_PK",
+ "ur"
+ }, {
+ "uz",
+ "uz_Latn_UZ",
+ "uz"
+ }, {
+ "uz_AF",
+ "uz_Arab_AF",
+ "uz_AF"
+ }, {
+ "uz_Arab",
+ "uz_Arab_AF",
+ "uz_AF"
+ }, {
+ "ve",
+ "ve_Latn_ZA",
+ "ve"
+ }, {
+ "vi",
+ "vi_Latn_VN",
+ "vi"
+ }, {
+ "wal",
+ "wal_Ethi_ET",
+ "wal"
+ }, {
+ "wo",
+ "wo_Latn_SN",
+ "wo"
+ }, {
+ "wo_SN",
+ "wo_Latn_SN",
+ "wo"
+ }, {
+ "xh",
+ "xh_Latn_ZA",
+ "xh"
+ }, {
+ "yo",
+ "yo_Latn_NG",
+ "yo"
+ }, {
+ "zh",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "zh_Hani",
+ "zh_Hani_CN",
+ "zh_Hani"
+ }, {
+ "zh_Hant",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zh_MO",
+ "zh_Hant_MO",
+ "zh_MO"
+ }, {
+ "zh_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zu",
+ "zu_Latn_ZA",
+ "zu"
+ }, {
+ "und",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_ZZ",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_CN",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "und_AQ",
+ "_Latn_AQ",
+ "_AQ"
+ }, {
+ "und_Zzzz",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_Zzzz_ZZ",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_Zzzz_CN",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_Zzzz_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_Zzzz_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "und_Zzzz_AQ",
+ "_Latn_AQ",
+ "_AQ"
+ }, {
+ "und_Latn",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_Latn_ZZ",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_Latn_CN",
+ "za_Latn_CN",
+ "za"
+ }, {
+ "und_Latn_TW",
+ "trv_Latn_TW",
+ "trv"
+ }, {
+ "und_Latn_HK",
+ "zh_Latn_HK",
+ "zh_Latn_HK"
+ }, {
+ "und_Latn_AQ",
+ "_Latn_AQ",
+ "_AQ"
+ }, {
+ "und_Hans",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_Hans_ZZ",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_Hans_CN",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "und_Hans_TW",
+ "zh_Hans_TW",
+ "zh_Hans_TW"
+ }, {
+ "und_Hans_HK",
+ "zh_Hans_HK",
+ "zh_Hans_HK"
+ }, {
+ "und_Hans_AQ",
+ "zh_Hans_AQ",
+ "zh_AQ"
+ }, {
+ "und_Hant",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_Hant_ZZ",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_Hant_CN",
+ "zh_Hant_CN",
+ "zh_Hant_CN"
+ }, {
+ "und_Hant_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "und_Hant_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "und_Hant_AQ",
+ "zh_Hant_AQ",
+ "zh_Hant_AQ"
+ }, {
+ "und_Moon",
+ "en_Moon_US",
+ "en_Moon"
+ }, {
+ "und_Moon_ZZ",
+ "en_Moon_US",
+ "en_Moon"
+ }, {
+ "und_Moon_CN",
+ "zh_Moon_CN",
+ "zh_Moon"
+ }, {
+ "und_Moon_TW",
+ "zh_Moon_TW",
+ "zh_Moon_TW"
+ }, {
+ "und_Moon_HK",
+ "zh_Moon_HK",
+ "zh_Moon_HK"
+ }, {
+ "und_Moon_AQ",
+ "_Moon_AQ",
+ "_Moon_AQ"
+ }, {
+ "es",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "es_ZZ",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "es_CN",
+ "es_Latn_CN",
+ "es_CN"
+ }, {
+ "es_TW",
+ "es_Latn_TW",
+ "es_TW"
+ }, {
+ "es_HK",
+ "es_Latn_HK",
+ "es_HK"
+ }, {
+ "es_AQ",
+ "es_Latn_AQ",
+ "es_AQ"
+ }, {
+ "es_Zzzz",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "es_Zzzz_ZZ",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "es_Zzzz_CN",
+ "es_Latn_CN",
+ "es_CN"
+ }, {
+ "es_Zzzz_TW",
+ "es_Latn_TW",
+ "es_TW"
+ }, {
+ "es_Zzzz_HK",
+ "es_Latn_HK",
+ "es_HK"
+ }, {
+ "es_Zzzz_AQ",
+ "es_Latn_AQ",
+ "es_AQ"
+ }, {
+ "es_Latn",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "es_Latn_ZZ",
+ "es_Latn_ES",
+ "es"
+ }, {
+ "es_Latn_CN",
+ "es_Latn_CN",
+ "es_CN"
+ }, {
+ "es_Latn_TW",
+ "es_Latn_TW",
+ "es_TW"
+ }, {
+ "es_Latn_HK",
+ "es_Latn_HK",
+ "es_HK"
+ }, {
+ "es_Latn_AQ",
+ "es_Latn_AQ",
+ "es_AQ"
+ }, {
+ "es_Hans",
+ "es_Hans_ES",
+ "es_Hans"
+ }, {
+ "es_Hans_ZZ",
+ "es_Hans_ES",
+ "es_Hans"
+ }, {
+ "es_Hans_CN",
+ "es_Hans_CN",
+ "es_Hans_CN"
+ }, {
+ "es_Hans_TW",
+ "es_Hans_TW",
+ "es_Hans_TW"
+ }, {
+ "es_Hans_HK",
+ "es_Hans_HK",
+ "es_Hans_HK"
+ }, {
+ "es_Hans_AQ",
+ "es_Hans_AQ",
+ "es_Hans_AQ"
+ }, {
+ "es_Hant",
+ "es_Hant_ES",
+ "es_Hant"
+ }, {
+ "es_Hant_ZZ",
+ "es_Hant_ES",
+ "es_Hant"
+ }, {
+ "es_Hant_CN",
+ "es_Hant_CN",
+ "es_Hant_CN"
+ }, {
+ "es_Hant_TW",
+ "es_Hant_TW",
+ "es_Hant_TW"
+ }, {
+ "es_Hant_HK",
+ "es_Hant_HK",
+ "es_Hant_HK"
+ }, {
+ "es_Hant_AQ",
+ "es_Hant_AQ",
+ "es_Hant_AQ"
+ }, {
+ "es_Moon",
+ "es_Moon_ES",
+ "es_Moon"
+ }, {
+ "es_Moon_ZZ",
+ "es_Moon_ES",
+ "es_Moon"
+ }, {
+ "es_Moon_CN",
+ "es_Moon_CN",
+ "es_Moon_CN"
+ }, {
+ "es_Moon_TW",
+ "es_Moon_TW",
+ "es_Moon_TW"
+ }, {
+ "es_Moon_HK",
+ "es_Moon_HK",
+ "es_Moon_HK"
+ }, {
+ "es_Moon_AQ",
+ "es_Moon_AQ",
+ "es_Moon_AQ"
+ }, {
+ "zh",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_ZZ",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_CN",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zh_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "zh_AQ",
+ "zh_Hans_AQ",
+ "zh_AQ"
+ }, {
+ "zh_Zzzz",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_Zzzz_ZZ",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_Zzzz_CN",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_Zzzz_TW",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zh_Zzzz_HK",
+ "zh_Hant_HK",
+ "zh_HK"
+ }, {
+ "zh_Zzzz_AQ",
+ "zh_Hans_AQ",
+ "zh_AQ"
+ }, {
+ "zh_Latn",
+ "zh_Latn_CN",
+ "zh_Latn"
+ }, {
+ "zh_Latn_ZZ",
+ "zh_Latn_CN",
+ "zh_Latn"
+ }, {
+ "zh_Latn_CN",
+ "zh_Latn_CN",
+ "zh_Latn"
+ }, {
+ "zh_Latn_TW",
+ "zh_Latn_TW",
+ "zh_Latn_TW"
+ }, {
+ "zh_Latn_HK",
+ "zh_Latn_HK",
+ "zh_Latn_HK"
+ }, {
+ "zh_Latn_AQ",
+ "zh_Latn_AQ",
+ "zh_Latn_AQ"
+ }, {
+ "zh_Hans",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_Hans_ZZ",
+ "zh_Hans_CN",
+ "zh"
+ }, {
+ "zh_Hans_TW",
+ "zh_Hans_TW",
+ "zh_Hans_TW"
+ }, {
+ "zh_Hans_HK",
+ "zh_Hans_HK",
+ "zh_Hans_HK"
+ }, {
+ "zh_Hans_AQ",
+ "zh_Hans_AQ",
+ "zh_AQ"
+ }, {
+ "zh_Hant",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zh_Hant_ZZ",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zh_Hant_CN",
+ "zh_Hant_CN",
+ "zh_Hant_CN"
+ }, {
+ "zh_Hant_AQ",
+ "zh_Hant_AQ",
+ "zh_Hant_AQ"
+ }, {
+ "zh_Moon",
+ "zh_Moon_CN",
+ "zh_Moon"
+ }, {
+ "zh_Moon_ZZ",
+ "zh_Moon_CN",
+ "zh_Moon"
+ }, {
+ "zh_Moon_CN",
+ "zh_Moon_CN",
+ "zh_Moon"
+ }, {
+ "zh_Moon_TW",
+ "zh_Moon_TW",
+ "zh_Moon_TW"
+ }, {
+ "zh_Moon_HK",
+ "zh_Moon_HK",
+ "zh_Moon_HK"
+ }, {
+ "zh_Moon_AQ",
+ "zh_Moon_AQ",
+ "zh_Moon_AQ"
+ }, {
+ "art",
+ "",
+ ""
+ }, {
+ "art_ZZ",
+ "",
+ ""
+ }, {
+ "art_CN",
+ "",
+ ""
+ }, {
+ "art_TW",
+ "",
+ ""
+ }, {
+ "art_HK",
+ "",
+ ""
+ }, {
+ "art_AQ",
+ "",
+ ""
+ }, {
+ "art_Zzzz",
+ "",
+ ""
+ }, {
+ "art_Zzzz_ZZ",
+ "",
+ ""
+ }, {
+ "art_Zzzz_CN",
+ "",
+ ""
+ }, {
+ "art_Zzzz_TW",
+ "",
+ ""
+ }, {
+ "art_Zzzz_HK",
+ "",
+ ""
+ }, {
+ "art_Zzzz_AQ",
+ "",
+ ""
+ }, {
+ "art_Latn",
+ "",
+ ""
+ }, {
+ "art_Latn_ZZ",
+ "",
+ ""
+ }, {
+ "art_Latn_CN",
+ "",
+ ""
+ }, {
+ "art_Latn_TW",
+ "",
+ ""
+ }, {
+ "art_Latn_HK",
+ "",
+ ""
+ }, {
+ "art_Latn_AQ",
+ "",
+ ""
+ }, {
+ "art_Hans",
+ "",
+ ""
+ }, {
+ "art_Hans_ZZ",
+ "",
+ ""
+ }, {
+ "art_Hans_CN",
+ "",
+ ""
+ }, {
+ "art_Hans_TW",
+ "",
+ ""
+ }, {
+ "art_Hans_HK",
+ "",
+ ""
+ }, {
+ "art_Hans_AQ",
+ "",
+ ""
+ }, {
+ "art_Hant",
+ "",
+ ""
+ }, {
+ "art_Hant_ZZ",
+ "",
+ ""
+ }, {
+ "art_Hant_CN",
+ "",
+ ""
+ }, {
+ "art_Hant_TW",
+ "",
+ ""
+ }, {
+ "art_Hant_HK",
+ "",
+ ""
+ }, {
+ "art_Hant_AQ",
+ "",
+ ""
+ }, {
+ "art_Moon",
+ "",
+ ""
+ }, {
+ "art_Moon_ZZ",
+ "",
+ ""
+ }, {
+ "art_Moon_CN",
+ "",
+ ""
+ }, {
+ "art_Moon_TW",
+ "",
+ ""
+ }, {
+ "art_Moon_HK",
+ "",
+ ""
+ }, {
+ "art_Moon_AQ",
+ "",
+ ""
+ }, {
+ "aae_Latn_IT",
+ "aae_Latn_IT",
+ "aae_Latn_IT"
+ }, {
+ "aae_Thai_CO",
+ "aae_Thai_CO",
+ "aae_Thai_CO"
+ }, {
+ "und_CW",
+ "pap_Latn_CW",
+ "pap_CW"
+ }, {
+ "zh_Hant",
+ "zh_Hant_TW",
+ "zh_TW"
+ }, {
+ "zh_Hani",
+ "zh_Hani_CN",
+ "zh_Hani"
+ }, {
+ "und",
+ "en_Latn_US",
+ "en"
+ }, {
+ "und_Thai",
+ "th_Thai_TH",
+ "th"
+ }, {
+ "und_419",
+ "es_Latn_419",
+ "es_419"
+ }, {
+ "und_150",
+ "ru_Cyrl_RU",
+ "ru"
+ }, {
+ "und_AT",
+ "de_Latn_AT",
+ "de_AT"
+ }, {
+ "und_US",
+ "en_Latn_US",
+ "en"
+ }
};
for (const auto& item : full_data) {
@@ -1714,7 +3829,11 @@ LocaleTest::TestAddLikelyAndMinimizeSubtags() {
Locale res(org);
res.addLikelySubtags(status);
status.errIfFailureAndReset("\"%s\"", org);
- assertEquals("addLikelySubtags", exp, res.getName());
+ if (exp[0]) {
+ assertEquals("addLikelySubtags", exp, res.getName());
+ } else {
+ assertEquals("addLikelySubtags", org, res.getName());
+ }
}
for (const auto& item : full_data) {
@@ -1723,7 +3842,11 @@ LocaleTest::TestAddLikelyAndMinimizeSubtags() {
Locale res(org);
res.minimizeSubtags(status);
status.errIfFailureAndReset("\"%s\"", org);
- assertEquals("minimizeSubtags", exp, res.getName());
+ if (exp[0]) {
+ assertEquals("minimizeSubtags", exp, res.getName());
+ } else {
+ assertEquals("minimizeSubtags", org, res.getName());
+ }
}
}
@@ -2032,7 +4155,7 @@ LocaleTest::TestSetKeywordValue(void) {
{ "calendar", "buddhist" }
};
- UErrorCode status = U_ZERO_ERROR;
+ IcuTestErrorCode status(*this, "TestSetKeywordValue()");
int32_t i = 0;
int32_t resultLen = 0;
@@ -2054,6 +4177,24 @@ LocaleTest::TestSetKeywordValue(void) {
testCases[i].value, testCases[i].keyword, buffer);
}
}
+
+ // Test long locale
+ {
+ status.errIfFailureAndReset();
+ const char* input =
+ "de__POSIX@colnormalization=no;colstrength=primary;currency=eur;"
+ "em=default;kv=space;lb=strict;lw=normal;measure=metric;"
+ "numbers=latn;rg=atzzzz;sd=atat1";
+ const char* expected =
+ "de__POSIX@colnormalization=no;colstrength=primary;currency=eur;"
+ "em=default;kv=space;lb=strict;lw=normal;measure=metric;"
+ "numbers=latn;rg=atzzzz;sd=atat1;ss=none";
+ // Bug ICU-21385
+ Locale l2(input);
+ l2.setKeywordValue("ss", "none", status);
+ assertEquals("", expected, l2.getName());
+ status.errIfFailureAndReset();
+ }
}
void
@@ -2589,15 +4730,15 @@ void LocaleTest::TestCanonicalization(void)
} testCases[] = {
{ "ca_ES-with-extra-stuff-that really doesn't make any sense-unless-you're trying to increase code coverage",
"ca_ES_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE",
- "ca_ES_WITH_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_YOU'RE TRYING TO INCREASE CODE COVERAGE"},
+ "ca_ES_EXTRA_STUFF_THAT REALLY DOESN'T MAKE ANY SENSE_UNLESS_WITH_YOU'RE TRYING TO INCREASE CODE COVERAGE"},
{ "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" },
{ "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" },
{ "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" },
{ "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" },
{ "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" },
- { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ },
- { "no@ny", "no@ny", "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */
- { "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */
+ { "no_NO_NY", "no_NO_NY", "nb_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ },
+ { "no@ny", "no@ny", "nb__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */
+ { "no-no.utf32@B", "no_NO.utf32@B", "nb_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */
{ "qz-qz@Euro", "qz_QZ@Euro", "qz_QZ_EURO" }, /* qz-qz uses private use iso codes */
// NOTE: uloc_getName() works on en-BOONT, but Locale() parser considers it BOGUS
// TODO: unify this behavior
@@ -2611,15 +4752,19 @@ void LocaleTest::TestCanonicalization(void)
{ "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML" },
{ "i-cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US" },
{ "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA" },
- { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "no_NO_NY_B" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */
+ { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "nb_NO_B_NY" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */
/* fleshing out canonicalization */
/* trim space and sort keywords, ';' is separator so not present at end in canonical form */
- { "en_Hant_IL_VALLEY_GIRL@ currency = EUR; calendar = Japanese ;", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" },
+ { "en_Hant_IL_VALLEY_GIRL@ currency = EUR; calendar = Japanese ;",
+ "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR",
+ "en_Hant_IL_GIRL_VALLEY@calendar=Japanese;currency=EUR" },
/* already-canonical ids are not changed */
- { "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" },
+ { "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR",
+ "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR",
+ "en_Hant_IL_GIRL_VALLEY@calendar=Japanese;currency=EUR" },
/* norwegian is just too weird, if we handle things in their full generality */
- { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ },
+ { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "nb_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ },
/* test cases reflecting internal resource bundle usage */
{ "root@kw=foo", "root@kw=foo", "root@kw=foo" },
@@ -2662,7 +4807,7 @@ void LocaleTest::TestCanonicalization(void)
{ "zh__PINYIN", "zh__PINYIN", "zh__PINYIN" },
{ "sr-SP-Cyrl", "sr_SP_CYRL", "sr_SP_CYRL" }, /* .NET name */
{ "sr-SP-Latn", "sr_SP_LATN", "sr_SP_LATN" }, /* .NET name */
- { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_YU_CYRILLIC" }, /* Linux name */
+ { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_RS_CYRILLIC" }, /* Linux name */
{ "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_UZ_CYRL" }, /* .NET name */
{ "uz-UZ-Latn", "uz_UZ_LATN", "uz_UZ_LATN" }, /* .NET name */
{ "zh-CHS", "zh_CHS", "zh_CHS" }, /* .NET name */
@@ -2695,6 +4840,100 @@ void LocaleTest::TestCanonicalization(void)
}
}
+void LocaleTest::TestCanonicalize(void)
+{
+ static const struct {
+ const char *localeID; /* input */
+ const char *canonicalID; /* expected canonicalize() result */
+ } testCases[] = {
+ // language _ variant -> language
+ { "no-BOKMAL", "nb" },
+ // also test with script, country and extensions
+ { "no-Cyrl-ID-BOKMAL-u-ca-japanese", "nb-Cyrl-ID-u-ca-japanese" },
+ { "no-Cyrl-ID-1901-BOKMAL-xsistemo-u-ca-japanese", "nb-Cyrl-ID-1901-xsistemo-u-ca-japanese" },
+ { "no-Cyrl-ID-1901-BOKMAL-u-ca-japanese", "nb-Cyrl-ID-1901-u-ca-japanese" },
+ { "no-Cyrl-ID-BOKMAL-xsistemo-u-ca-japanese", "nb-Cyrl-ID-xsistemo-u-ca-japanese" },
+ { "no-NYNORSK", "nn" },
+ { "no-Cyrl-ID-NYNORSK-u-ca-japanese", "nn-Cyrl-ID-u-ca-japanese" },
+ { "aa-SAAHO", "ssy" },
+ // also test with script, country and extensions
+ { "aa-Deva-IN-SAAHO-u-ca-japanese", "ssy-Deva-IN-u-ca-japanese" },
+
+ // language -> language
+ { "aam", "aas" },
+ // also test with script, country, variants and extensions
+ { "aam-Cyrl-ID-3456-u-ca-japanese", "aas-Cyrl-ID-3456-u-ca-japanese" },
+
+ // language -> language _ Script
+ { "sh", "sr-Latn" },
+ // also test with script
+ { "sh-Cyrl", "sr-Cyrl" },
+ // also test with country, variants and extensions
+ { "sh-ID-3456-u-ca-roc", "sr-Latn-ID-3456-u-ca-roc" },
+
+ // language -> language _ country
+ { "prs", "fa-AF" },
+ // also test with country
+ { "prs-RU", "fa-RU" },
+ // also test with script, variants and extensions
+ { "prs-Cyrl-1009-u-ca-roc", "fa-Cyrl-AF-1009-u-ca-roc" },
+
+ { "pa-IN", "pa-IN" },
+ // also test with script
+ { "pa-Latn-IN", "pa-Latn-IN" },
+ // also test with variants and extensions
+ { "pa-IN-5678-u-ca-hindi", "pa-IN-5678-u-ca-hindi" },
+
+ { "ky-Cyrl-KG", "ky-Cyrl-KG" },
+ // also test with variants and extensions
+ { "ky-Cyrl-KG-3456-u-ca-roc", "ky-Cyrl-KG-3456-u-ca-roc" },
+
+ // Test replacement of scriptAlias
+ { "en-Qaai", "en-Zinh" },
+
+ // Test replacement of territoryAlias
+ // 554 has one replacement
+ { "en-554", "en-NZ" },
+ { "en-554-u-nu-arab", "en-NZ-u-nu-arab" },
+ // 172 has multiple replacements
+ // also test with variants
+ { "ru-172-1234", "ru-RU-1234" },
+ // also test with extensions
+ { "ru-172-1234-u-nu-latn", "ru-RU-1234-u-nu-latn" },
+ // also test with scripts
+ { "uz-172", "uz-UZ" },
+ { "uz-Cyrl-172", "uz-Cyrl-UZ" },
+ { "uz-Bopo-172", "uz-Bopo-UZ" },
+ // also test with variants and scripts
+ { "uz-Cyrl-172-5678-u-nu-latn", "uz-Cyrl-UZ-5678-u-nu-latn" },
+ // a language not used in this region
+ { "fr-172", "fr-RU" },
+
+ // variant
+ { "ja-Latn-hepburn-heploc", "ja-Latn-alalc97"},
+
+ { "aaa-Fooo-SU", "aaa-Fooo-RU"},
+
+ // ICU-21344
+ { "ku-Arab-NT", "ku-Arab-IQ"},
+ };
+ int32_t i;
+ for (i=0; i < UPRV_LENGTHOF(testCases); i++) {
+ UErrorCode status = U_ZERO_ERROR;
+ std::string otag = testCases[i].localeID;
+ Locale loc = Locale::forLanguageTag(otag.c_str(), status);
+ loc.canonicalize(status);
+ std::string tag = loc.toLanguageTag<std::string>(status);
+ if (tag != testCases[i].canonicalID) {
+ errcheckln(status, "FAIL: %s should be canonicalized to %s but got %s - %s",
+ otag.c_str(),
+ testCases[i].canonicalID,
+ tag.c_str(),
+ u_errorName(status));
+ }
+ }
+}
+
void LocaleTest::TestCurrencyByDate(void)
{
#if !UCONFIG_NO_FORMATTING
@@ -3097,7 +5336,7 @@ void LocaleTest::TestBug20410() {
static const char locid3[] = "art__lojban@x=0";
Locale result3 = Locale::createCanonical(locid3);
- static const Locale expected3("art__LOJBAN@x=0");
+ static const Locale expected3("jbo@x=0");
assertEquals(locid3, expected3.getName(), result3.getName());
static const char locid4[] = "art-lojban-x-0";
@@ -3106,6 +5345,99 @@ void LocaleTest::TestBug20410() {
assertEquals(locid4, expected4.getName(), result4.getName());
}
+void LocaleTest::TestBug20900() {
+ static const struct {
+ const char *localeID; /* input */
+ const char *canonicalID; /* expected canonicalize() result */
+ } testCases[] = {
+ { "art-lojban", "jbo" },
+ { "zh-guoyu", "zh" },
+ { "zh-hakka", "hak" },
+ { "zh-xiang", "hsn" },
+ { "zh-min-nan", "nan" },
+ { "zh-gan", "gan" },
+ { "zh-wuu", "wuu" },
+ { "zh-yue", "yue" },
+ };
+
+ IcuTestErrorCode status(*this, "TestBug20900");
+ for (int32_t i=0; i < UPRV_LENGTHOF(testCases); i++) {
+ Locale loc = Locale::createCanonical(testCases[i].localeID);
+ std::string result = loc.toLanguageTag<std::string>(status);
+ const char* tag = loc.isBogus() ? "BOGUS" : result.c_str();
+ status.errIfFailureAndReset("FAIL: createCanonical(%s).toLanguageTag() expected \"%s\"",
+ testCases[i].localeID, tag);
+ assertEquals("createCanonical", testCases[i].canonicalID, tag);
+ }
+}
+
+U_DEFINE_LOCAL_OPEN_POINTER(LocalStdioFilePointer, FILE, fclose);
+void LocaleTest::TestLocaleCanonicalizationFromFile()
+{
+ IcuTestErrorCode status(*this, "TestLocaleCanonicalizationFromFile");
+ const char *sourceTestDataPath=getSourceTestData(status);
+ if(status.errIfFailureAndReset("unable to find the source/test/testdata "
+ "folder (getSourceTestData())")) {
+ return;
+ }
+ char testPath[400];
+ char line[256];
+ strcpy(testPath, sourceTestDataPath);
+ strcat(testPath, "localeCanonicalization.txt");
+ LocalStdioFilePointer testFile(fopen(testPath, "r"));
+ if(testFile.isNull()) {
+ errln("unable to open %s", testPath);
+ return;
+ }
+ // Format:
+ // <source locale identifier> ; <expected canonicalized locale identifier>
+ while (fgets(line, (int)sizeof(line), testFile.getAlias())!=NULL) {
+ if (line[0] == '#') {
+ // ignore any lines start with #
+ continue;
+ }
+ char *semi = strchr(line, ';');
+ if (semi == nullptr) {
+ // ignore any lines without ;
+ continue;
+ }
+ *semi = '\0'; // null terminiate on the spot of semi
+ const char* from = u_skipWhitespace((const char*)line);
+ u_rtrim((char*)from);
+ const char* to = u_skipWhitespace((const char*)semi + 1);
+ u_rtrim((char*)to);
+ std::string expect(to);
+ // Change the _ to -
+ std::transform(expect.begin(), expect.end(), expect.begin(),
+ [](unsigned char c){ return c == '_' ? '-' : c; });
+
+ Locale loc = Locale::createCanonical(from);
+ std::string result = loc.toLanguageTag<std::string>(status);
+ const char* tag = loc.isBogus() ? "BOGUS" : result.c_str();
+ status.errIfFailureAndReset(
+ "FAIL: createCanonical(%s).toLanguageTag() expected \"%s\" locale is %s",
+ from, tag, loc.getName());
+ std::string msg("createCanonical(");
+ msg += from;
+ msg += ") locale = ";
+ msg += loc.getName();
+ assertEquals(msg.c_str(), expect.c_str(), tag);
+ }
+}
+
+void LocaleTest::TestKnownCanonicalizedListCorrect()
+{
+ IcuTestErrorCode status(*this, "TestKnownCanonicalizedListCorrect");
+ int32_t numOfKnownCanonicalized;
+ const char* const* knownCanonicalized =
+ ulocimp_getKnownCanonicalizedLocaleForTest(&numOfKnownCanonicalized);
+ for (int32_t i = 0; i < numOfKnownCanonicalized; i++) {
+ std::string msg("Known Canonicalized Locale is not canonicalized: ");
+ assertTrue((msg + knownCanonicalized[i]).c_str(),
+ ulocimp_isCanonicalizedLocaleForTest(knownCanonicalized[i]));
+ }
+}
+
void LocaleTest::TestConstructorAcceptsBCP47() {
IcuTestErrorCode status(*this, "TestConstructorAcceptsBCP47");
@@ -3154,6 +5486,7 @@ void LocaleTest::TestForLanguageTag() {
static const char tag_ill[] = "!";
static const char tag_no_nul[] = { 'e', 'n', '-', 'G', 'B' };
static const char tag_ext[] = "en-GB-1-abc-efg-a-xyz";
+ static const char tag_var[] = "sl-rozaj-biske-1994";
static const Locale loc_en("en_US");
static const Locale loc_oed("en_GB_OXENDICT");
@@ -3161,6 +5494,7 @@ void LocaleTest::TestForLanguageTag() {
static const Locale loc_null("");
static const Locale loc_gb("en_GB");
static const Locale loc_ext("en_GB@1=abc-efg;a=xyz");
+ static const Locale loc_var("sl__1994_BISKE_ROZAJ");
Locale result_en = Locale::forLanguageTag(tag_en, status);
status.errIfFailureAndReset("\"%s\"", tag_en);
@@ -3174,6 +5508,10 @@ void LocaleTest::TestForLanguageTag() {
status.errIfFailureAndReset("\"%s\"", tag_af);
assertEquals(tag_af, loc_af.getName(), result_af.getName());
+ Locale result_var = Locale::forLanguageTag(tag_var, status);
+ status.errIfFailureAndReset("\"%s\"", tag_var);
+ assertEquals(tag_var, loc_var.getName(), result_var.getName());
+
Locale result_ill = Locale::forLanguageTag(tag_ill, status);
assertEquals(tag_ill, U_ILLEGAL_ARGUMENT_ERROR, status.reset());
assertTrue(result_ill.getName(), result_ill.isBogus());
@@ -3208,12 +5546,14 @@ void LocaleTest::TestToLanguageTag() {
static const Locale loc_ext("en@0=abc;a=xyz");
static const Locale loc_empty("");
static const Locale loc_ill("!");
+ static const Locale loc_variant("sl__ROZAJ_BISKE_1994");
static const char tag_c[] = "en-US-u-va-posix";
static const char tag_en[] = "en-US";
static const char tag_af[] = "af-t-ar-i0-handwrit-u-ca-coptic-x-foo";
static const char tag_ext[] = "en-0-abc-a-xyz";
static const char tag_und[] = "und";
+ static const char tag_variant[] = "sl-1994-biske-rozaj";
std::string result;
StringByteSink<std::string> sink(&result);
@@ -3245,6 +5585,10 @@ void LocaleTest::TestToLanguageTag() {
status.errIfFailureAndReset("\"%s\"", loc_ill.getName());
assertEquals(loc_ill.getName(), tag_und, result_ill.c_str());
+ std::string result_variant = loc_variant.toLanguageTag<std::string>(status);
+ status.errIfFailureAndReset("\"%s\"", loc_variant.getName());
+ assertEquals(loc_variant.getName(), tag_variant, result_variant.c_str());
+
Locale loc_bogus;
loc_bogus.setToBogus();
std::string result_bogus = loc_bogus.toLanguageTag<std::string>(status);
@@ -3252,6 +5596,32 @@ void LocaleTest::TestToLanguageTag() {
assertTrue(result_bogus.c_str(), result_bogus.empty());
}
+/* ICU-20310 */
+void LocaleTest::TestToLanguageTagOmitTrue() {
+ IcuTestErrorCode status(*this, "TestToLanguageTagOmitTrue()");
+ assertEquals("en-u-kn should drop true",
+ "en-u-kn", Locale("en-u-kn-true").toLanguageTag<std::string>(status).c_str());
+ status.errIfFailureAndReset();
+ assertEquals("en-u-kn should drop true",
+ "en-u-kn", Locale("en-u-kn").toLanguageTag<std::string>(status).c_str());
+ status.errIfFailureAndReset();
+
+ assertEquals("de-u-co should drop true",
+ "de-u-co", Locale("de-u-co").toLanguageTag<std::string>(status).c_str());
+ status.errIfFailureAndReset();
+ assertEquals("de-u-co should drop true",
+ "de-u-co", Locale("de-u-co-yes").toLanguageTag<std::string>(status).c_str());
+ status.errIfFailureAndReset();
+ assertEquals("de@collation=yes should drop true",
+ "de-u-co", Locale("de@collation=yes").toLanguageTag<std::string>(status).c_str());
+ status.errIfFailureAndReset();
+
+ assertEquals("cmn-Hans-CN-t-ca-u-ca-x-t-u should drop true",
+ "cmn-Hans-CN-t-ca-u-ca-x-t-u",
+ Locale("cmn-hans-cn-u-ca-t-ca-x-t-u").toLanguageTag<std::string>(status).c_str());
+ status.errIfFailureAndReset();
+}
+
void LocaleTest::TestMoveAssign() {
// ULOC_FULLNAME_CAPACITY == 157 (uloc.h)
Locale l1("de@collation=phonebook;x="
@@ -3952,3 +6322,76 @@ void LocaleTest::TestCapturingTagConvertingIterator() {
assertFalse("3.hasNext()", iter.hasNext());
}
+
+void LocaleTest::TestSetUnicodeKeywordValueInLongLocale() {
+ IcuTestErrorCode status(*this, "TestSetUnicodeKeywordValueInLongLocale");
+ const char* value = "efghijkl";
+ icu::Locale l("de");
+ char keyword[3];
+ CharString expected("de-u", status);
+ keyword[2] = '\0';
+ for (char i = 'a'; i < 's'; i++) {
+ keyword[0] = keyword[1] = i;
+ expected.append("-", status);
+ expected.append(keyword, status);
+ expected.append("-", status);
+ expected.append(value, status);
+ l.setUnicodeKeywordValue(keyword, value, status);
+ if (status.errIfFailureAndReset(
+ "setUnicodeKeywordValue(\"%s\", \"%s\") fail while locale is \"%s\"",
+ keyword, value, l.getName())) {
+ return;
+ }
+ std::string tag = l.toLanguageTag<std::string>(status);
+ if (status.errIfFailureAndReset(
+ "toLanguageTag fail on \"%s\"", l.getName())) {
+ return;
+ }
+ if (tag != expected.data()) {
+ errln("Expected to get \"%s\" bug got \"%s\"", tag.c_str(),
+ expected.data());
+ return;
+ }
+ }
+}
+
+void LocaleTest::TestSetUnicodeKeywordValueNullInLongLocale() {
+ IcuTestErrorCode status(*this, "TestSetUnicodeKeywordValueNullInLongLocale");
+ const char *exts[] = {"cf", "cu", "em", "kk", "kr", "ks", "kv", "lb", "lw",
+ "ms", "nu", "rg", "sd", "ss", "tz"};
+ for (int32_t i = 0; i < UPRV_LENGTHOF(exts); i++) {
+ CharString tag("de-u", status);
+ for (int32_t j = 0; j <= i; j++) {
+ tag.append("-", status).append(exts[j], status);
+ }
+ if (status.errIfFailureAndReset(
+ "Cannot create tag \"%s\"", tag.data())) {
+ continue;
+ }
+ Locale l = Locale::forLanguageTag(tag.data(), status);
+ if (status.errIfFailureAndReset(
+ "Locale::forLanguageTag(\"%s\") failed", tag.data())) {
+ continue;
+ }
+ for (int32_t j = 0; j <= i; j++) {
+ l.setUnicodeKeywordValue(exts[j], nullptr, status);
+ if (status.errIfFailureAndReset(
+ "Locale(\"%s\").setUnicodeKeywordValue(\"%s\", nullptr) failed",
+ tag.data(), exts[j])) {
+ continue;
+ }
+ }
+ if (strcmp("de", l.getName()) != 0) {
+ errln("setUnicodeKeywordValue should remove all extensions from "
+ "\"%s\" and only have \"de\", but is \"%s\" instead.",
+ tag.data(), l.getName());
+ }
+ }
+}
+
+void LocaleTest::TestLeak21419() {
+ IcuTestErrorCode status(*this, "TestLeak21419");
+ Locale l = Locale("s-yU");
+ l.canonicalize(status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
index 065213e9227..1fba6d94f56 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
@@ -107,6 +107,8 @@ public:
void TestCanonicalization(void);
+ void TestCanonicalize(void);
+
#if !UCONFIG_NO_FORMATTING
static UDate date(int32_t y, int32_t m, int32_t d, int32_t hr = 0, int32_t min = 0, int32_t sec = 0);
#endif
@@ -119,6 +121,9 @@ public:
void TestBug13277();
void TestBug13554();
void TestBug20410();
+ void TestBug20900();
+ void TestLocaleCanonicalizationFromFile();
+ void TestKnownCanonicalizedListCorrect();
void TestConstructorAcceptsBCP47();
void TestAddLikelySubtags();
@@ -127,6 +132,7 @@ public:
void TestForLanguageTag();
void TestToLanguageTag();
+ void TestToLanguageTagOmitTrue();
void TestMoveAssign();
void TestMoveCtor();
@@ -145,6 +151,9 @@ public:
void TestPointerConvertingIterator();
void TestTagConvertingIterator();
void TestCapturingTagConvertingIterator();
+ void TestSetUnicodeKeywordValueInLongLocale();
+ void TestSetUnicodeKeywordValueNullInLongLocale();
+ void TestLeak21419();
private:
void _checklocs(const char* label,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
index 2b53f8bc024..7d5330f6657 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
@@ -17,6 +17,9 @@
#if !UCONFIG_NO_FORMATTING
+#include "charstr.h"
+#include "cstr.h"
+#include "measunit_impl.h"
#include "unicode/decimfmt.h"
#include "unicode/measfmt.h"
#include "unicode/measure.h"
@@ -25,8 +28,6 @@
#include "unicode/tmunit.h"
#include "unicode/plurrule.h"
#include "unicode/ustring.h"
-#include "charstr.h"
-#include "cstr.h"
#include "unicode/reldatefmt.h"
#include "unicode/rbnf.h"
@@ -54,6 +55,7 @@ private:
void TestCompatible63();
void TestCompatible64();
void TestCompatible65();
+ void TestCompatible68();
void TestGetAvailable();
void TestExamplesInDocs();
void TestFormatPeriodEn();
@@ -79,6 +81,16 @@ private:
void Test20332_PersonUnits();
void TestNumericTime();
void TestNumericTimeSomeSpecialFormats();
+ void TestIdentifiers();
+ void TestInvalidIdentifiers();
+ void TestParseToBuiltIn();
+ void TestKilogramIdentifier();
+ void TestCompoundUnitOperations();
+ void TestDimensionlessBehaviour();
+ void Test21060_AddressSanitizerProblem();
+ void Test21223_FrenchDuration();
+ void TestInternalMeasureUnitImpl();
+
void verifyFormat(
const char *description,
const MeasureFormat &fmt,
@@ -138,6 +150,21 @@ private:
NumberFormat::EAlignmentFields field,
int32_t start,
int32_t end);
+ void verifySingleUnit(
+ const MeasureUnit& unit,
+ UMeasureSIPrefix siPrefix,
+ int8_t power,
+ const char* identifier);
+ void verifyCompoundUnit(
+ const MeasureUnit& unit,
+ const char* identifier,
+ const char** subIdentifiers,
+ int32_t subIdentifierCount);
+ void verifyMixedUnit(
+ const MeasureUnit& unit,
+ const char* identifier,
+ const char** subIdentifiers,
+ int32_t subIdentifierCount);
};
void MeasureFormatTest::runIndexedTest(
@@ -157,6 +184,7 @@ void MeasureFormatTest::runIndexedTest(
TESTCASE_AUTO(TestCompatible63);
TESTCASE_AUTO(TestCompatible64);
TESTCASE_AUTO(TestCompatible65);
+ TESTCASE_AUTO(TestCompatible68);
TESTCASE_AUTO(TestGetAvailable);
TESTCASE_AUTO(TestExamplesInDocs);
TESTCASE_AUTO(TestFormatPeriodEn);
@@ -182,6 +210,15 @@ void MeasureFormatTest::runIndexedTest(
TESTCASE_AUTO(Test20332_PersonUnits);
TESTCASE_AUTO(TestNumericTime);
TESTCASE_AUTO(TestNumericTimeSomeSpecialFormats);
+ TESTCASE_AUTO(TestIdentifiers);
+ TESTCASE_AUTO(TestInvalidIdentifiers);
+ TESTCASE_AUTO(TestParseToBuiltIn);
+ TESTCASE_AUTO(TestKilogramIdentifier);
+ TESTCASE_AUTO(TestCompoundUnitOperations);
+ TESTCASE_AUTO(TestDimensionlessBehaviour);
+ TESTCASE_AUTO(Test21060_AddressSanitizerProblem);
+ TESTCASE_AUTO(Test21223_FrenchDuration);
+ TESTCASE_AUTO(TestInternalMeasureUnitImpl);
TESTCASE_AUTO_END;
}
@@ -1880,6 +1917,384 @@ void MeasureFormatTest::TestCompatible65() {
assertSuccess("", status);
}
+// Note that TestCompatible66(), TestCompatible67()
+// would be the same as TestCompatible65(), no need to add them.
+
+void MeasureFormatTest::TestCompatible68() {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<MeasureUnit> measureUnit;
+ MeasureUnit measureUnitValue;
+ measureUnit.adoptInstead(MeasureUnit::createGForce(status));
+ measureUnitValue = MeasureUnit::getGForce();
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
+ measureUnitValue = MeasureUnit::getMeterPerSecondSquared();
+ measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
+ measureUnitValue = MeasureUnit::getArcMinute();
+ measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
+ measureUnitValue = MeasureUnit::getArcSecond();
+ measureUnit.adoptInstead(MeasureUnit::createDegree(status));
+ measureUnitValue = MeasureUnit::getDegree();
+ measureUnit.adoptInstead(MeasureUnit::createRadian(status));
+ measureUnitValue = MeasureUnit::getRadian();
+ measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
+ measureUnitValue = MeasureUnit::getRevolutionAngle();
+ measureUnit.adoptInstead(MeasureUnit::createAcre(status));
+ measureUnitValue = MeasureUnit::getAcre();
+ measureUnit.adoptInstead(MeasureUnit::createDunam(status));
+ measureUnitValue = MeasureUnit::getDunam();
+ measureUnit.adoptInstead(MeasureUnit::createHectare(status));
+ measureUnitValue = MeasureUnit::getHectare();
+ measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
+ measureUnitValue = MeasureUnit::getSquareCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
+ measureUnitValue = MeasureUnit::getSquareFoot();
+ measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
+ measureUnitValue = MeasureUnit::getSquareInch();
+ measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
+ measureUnitValue = MeasureUnit::getSquareKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
+ measureUnitValue = MeasureUnit::getSquareMeter();
+ measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
+ measureUnitValue = MeasureUnit::getSquareMile();
+ measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
+ measureUnitValue = MeasureUnit::getSquareYard();
+ measureUnit.adoptInstead(MeasureUnit::createKarat(status));
+ measureUnitValue = MeasureUnit::getKarat();
+ measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
+ measureUnitValue = MeasureUnit::getMilligramPerDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
+ measureUnitValue = MeasureUnit::getMillimolePerLiter();
+ measureUnit.adoptInstead(MeasureUnit::createMole(status));
+ measureUnitValue = MeasureUnit::getMole();
+ measureUnit.adoptInstead(MeasureUnit::createPercent(status));
+ measureUnitValue = MeasureUnit::getPercent();
+ measureUnit.adoptInstead(MeasureUnit::createPermille(status));
+ measureUnitValue = MeasureUnit::getPermille();
+ measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
+ measureUnitValue = MeasureUnit::getPartPerMillion();
+ measureUnit.adoptInstead(MeasureUnit::createPermyriad(status));
+ measureUnitValue = MeasureUnit::getPermyriad();
+ measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
+ measureUnitValue = MeasureUnit::getLiterPer100Kilometers();
+ measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
+ measureUnitValue = MeasureUnit::getLiterPerKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
+ measureUnitValue = MeasureUnit::getMilePerGallon();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
+ measureUnitValue = MeasureUnit::getMilePerGallonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createBit(status));
+ measureUnitValue = MeasureUnit::getBit();
+ measureUnit.adoptInstead(MeasureUnit::createByte(status));
+ measureUnitValue = MeasureUnit::getByte();
+ measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
+ measureUnitValue = MeasureUnit::getGigabit();
+ measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
+ measureUnitValue = MeasureUnit::getGigabyte();
+ measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
+ measureUnitValue = MeasureUnit::getKilobit();
+ measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
+ measureUnitValue = MeasureUnit::getKilobyte();
+ measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
+ measureUnitValue = MeasureUnit::getMegabit();
+ measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
+ measureUnitValue = MeasureUnit::getMegabyte();
+ measureUnit.adoptInstead(MeasureUnit::createPetabyte(status));
+ measureUnitValue = MeasureUnit::getPetabyte();
+ measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
+ measureUnitValue = MeasureUnit::getTerabit();
+ measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
+ measureUnitValue = MeasureUnit::getTerabyte();
+ measureUnit.adoptInstead(MeasureUnit::createCentury(status));
+ measureUnitValue = MeasureUnit::getCentury();
+ measureUnit.adoptInstead(MeasureUnit::createDay(status));
+ measureUnitValue = MeasureUnit::getDay();
+ measureUnit.adoptInstead(MeasureUnit::createDayPerson(status));
+ measureUnitValue = MeasureUnit::getDayPerson();
+ measureUnit.adoptInstead(MeasureUnit::createDecade(status));
+ measureUnitValue = MeasureUnit::getDecade();
+ measureUnit.adoptInstead(MeasureUnit::createHour(status));
+ measureUnitValue = MeasureUnit::getHour();
+ measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
+ measureUnitValue = MeasureUnit::getMicrosecond();
+ measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
+ measureUnitValue = MeasureUnit::getMillisecond();
+ measureUnit.adoptInstead(MeasureUnit::createMinute(status));
+ measureUnitValue = MeasureUnit::getMinute();
+ measureUnit.adoptInstead(MeasureUnit::createMonth(status));
+ measureUnitValue = MeasureUnit::getMonth();
+ measureUnit.adoptInstead(MeasureUnit::createMonthPerson(status));
+ measureUnitValue = MeasureUnit::getMonthPerson();
+ measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
+ measureUnitValue = MeasureUnit::getNanosecond();
+ measureUnit.adoptInstead(MeasureUnit::createSecond(status));
+ measureUnitValue = MeasureUnit::getSecond();
+ measureUnit.adoptInstead(MeasureUnit::createWeek(status));
+ measureUnitValue = MeasureUnit::getWeek();
+ measureUnit.adoptInstead(MeasureUnit::createWeekPerson(status));
+ measureUnitValue = MeasureUnit::getWeekPerson();
+ measureUnit.adoptInstead(MeasureUnit::createYear(status));
+ measureUnitValue = MeasureUnit::getYear();
+ measureUnit.adoptInstead(MeasureUnit::createYearPerson(status));
+ measureUnitValue = MeasureUnit::getYearPerson();
+ measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
+ measureUnitValue = MeasureUnit::getAmpere();
+ measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
+ measureUnitValue = MeasureUnit::getMilliampere();
+ measureUnit.adoptInstead(MeasureUnit::createOhm(status));
+ measureUnitValue = MeasureUnit::getOhm();
+ measureUnit.adoptInstead(MeasureUnit::createVolt(status));
+ measureUnitValue = MeasureUnit::getVolt();
+ measureUnit.adoptInstead(MeasureUnit::createBritishThermalUnit(status));
+ measureUnitValue = MeasureUnit::getBritishThermalUnit();
+ measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
+ measureUnitValue = MeasureUnit::getCalorie();
+ measureUnit.adoptInstead(MeasureUnit::createElectronvolt(status));
+ measureUnitValue = MeasureUnit::getElectronvolt();
+ measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
+ measureUnitValue = MeasureUnit::getFoodcalorie();
+ measureUnit.adoptInstead(MeasureUnit::createJoule(status));
+ measureUnitValue = MeasureUnit::getJoule();
+ measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
+ measureUnitValue = MeasureUnit::getKilocalorie();
+ measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
+ measureUnitValue = MeasureUnit::getKilojoule();
+ measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
+ measureUnitValue = MeasureUnit::getKilowattHour();
+ measureUnit.adoptInstead(MeasureUnit::createThermUs(status));
+ measureUnitValue = MeasureUnit::getThermUs();
+ measureUnit.adoptInstead(MeasureUnit::createNewton(status));
+ measureUnitValue = MeasureUnit::getNewton();
+ measureUnit.adoptInstead(MeasureUnit::createPoundForce(status));
+ measureUnitValue = MeasureUnit::getPoundForce();
+ measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
+ measureUnitValue = MeasureUnit::getGigahertz();
+ measureUnit.adoptInstead(MeasureUnit::createHertz(status));
+ measureUnitValue = MeasureUnit::getHertz();
+ measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
+ measureUnitValue = MeasureUnit::getKilohertz();
+ measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
+ measureUnitValue = MeasureUnit::getMegahertz();
+ measureUnit.adoptInstead(MeasureUnit::createDot(status));
+ measureUnitValue = MeasureUnit::getDot();
+ measureUnit.adoptInstead(MeasureUnit::createDotPerCentimeter(status));
+ measureUnitValue = MeasureUnit::getDotPerCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createDotPerInch(status));
+ measureUnitValue = MeasureUnit::getDotPerInch();
+ measureUnit.adoptInstead(MeasureUnit::createEm(status));
+ measureUnitValue = MeasureUnit::getEm();
+ measureUnit.adoptInstead(MeasureUnit::createMegapixel(status));
+ measureUnitValue = MeasureUnit::getMegapixel();
+ measureUnit.adoptInstead(MeasureUnit::createPixel(status));
+ measureUnitValue = MeasureUnit::getPixel();
+ measureUnit.adoptInstead(MeasureUnit::createPixelPerCentimeter(status));
+ measureUnitValue = MeasureUnit::getPixelPerCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createPixelPerInch(status));
+ measureUnitValue = MeasureUnit::getPixelPerInch();
+ measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
+ measureUnitValue = MeasureUnit::getAstronomicalUnit();
+ measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
+ measureUnitValue = MeasureUnit::getCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
+ measureUnitValue = MeasureUnit::getDecimeter();
+ measureUnit.adoptInstead(MeasureUnit::createEarthRadius(status));
+ measureUnitValue = MeasureUnit::getEarthRadius();
+ measureUnit.adoptInstead(MeasureUnit::createFathom(status));
+ measureUnitValue = MeasureUnit::getFathom();
+ measureUnit.adoptInstead(MeasureUnit::createFoot(status));
+ measureUnitValue = MeasureUnit::getFoot();
+ measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
+ measureUnitValue = MeasureUnit::getFurlong();
+ measureUnit.adoptInstead(MeasureUnit::createInch(status));
+ measureUnitValue = MeasureUnit::getInch();
+ measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
+ measureUnitValue = MeasureUnit::getKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
+ measureUnitValue = MeasureUnit::getLightYear();
+ measureUnit.adoptInstead(MeasureUnit::createMeter(status));
+ measureUnitValue = MeasureUnit::getMeter();
+ measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
+ measureUnitValue = MeasureUnit::getMicrometer();
+ measureUnit.adoptInstead(MeasureUnit::createMile(status));
+ measureUnitValue = MeasureUnit::getMile();
+ measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
+ measureUnitValue = MeasureUnit::getMileScandinavian();
+ measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
+ measureUnitValue = MeasureUnit::getMillimeter();
+ measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
+ measureUnitValue = MeasureUnit::getNanometer();
+ measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
+ measureUnitValue = MeasureUnit::getNauticalMile();
+ measureUnit.adoptInstead(MeasureUnit::createParsec(status));
+ measureUnitValue = MeasureUnit::getParsec();
+ measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
+ measureUnitValue = MeasureUnit::getPicometer();
+ measureUnit.adoptInstead(MeasureUnit::createPoint(status));
+ measureUnitValue = MeasureUnit::getPoint();
+ measureUnit.adoptInstead(MeasureUnit::createSolarRadius(status));
+ measureUnitValue = MeasureUnit::getSolarRadius();
+ measureUnit.adoptInstead(MeasureUnit::createYard(status));
+ measureUnitValue = MeasureUnit::getYard();
+ measureUnit.adoptInstead(MeasureUnit::createCandela(status));
+ measureUnitValue = MeasureUnit::getCandela();
+ measureUnit.adoptInstead(MeasureUnit::createLumen(status));
+ measureUnitValue = MeasureUnit::getLumen();
+ measureUnit.adoptInstead(MeasureUnit::createLux(status));
+ measureUnitValue = MeasureUnit::getLux();
+ measureUnit.adoptInstead(MeasureUnit::createSolarLuminosity(status));
+ measureUnitValue = MeasureUnit::getSolarLuminosity();
+ measureUnit.adoptInstead(MeasureUnit::createCarat(status));
+ measureUnitValue = MeasureUnit::getCarat();
+ measureUnit.adoptInstead(MeasureUnit::createDalton(status));
+ measureUnitValue = MeasureUnit::getDalton();
+ measureUnit.adoptInstead(MeasureUnit::createEarthMass(status));
+ measureUnitValue = MeasureUnit::getEarthMass();
+ measureUnit.adoptInstead(MeasureUnit::createGrain(status));
+ measureUnitValue = MeasureUnit::getGrain();
+ measureUnit.adoptInstead(MeasureUnit::createGram(status));
+ measureUnitValue = MeasureUnit::getGram();
+ measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
+ measureUnitValue = MeasureUnit::getKilogram();
+ measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
+ measureUnitValue = MeasureUnit::getMetricTon();
+ measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
+ measureUnitValue = MeasureUnit::getMicrogram();
+ measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
+ measureUnitValue = MeasureUnit::getMilligram();
+ measureUnit.adoptInstead(MeasureUnit::createOunce(status));
+ measureUnitValue = MeasureUnit::getOunce();
+ measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
+ measureUnitValue = MeasureUnit::getOunceTroy();
+ measureUnit.adoptInstead(MeasureUnit::createPound(status));
+ measureUnitValue = MeasureUnit::getPound();
+ measureUnit.adoptInstead(MeasureUnit::createSolarMass(status));
+ measureUnitValue = MeasureUnit::getSolarMass();
+ measureUnit.adoptInstead(MeasureUnit::createStone(status));
+ measureUnitValue = MeasureUnit::getStone();
+ measureUnit.adoptInstead(MeasureUnit::createTon(status));
+ measureUnitValue = MeasureUnit::getTon();
+ measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
+ measureUnitValue = MeasureUnit::getGigawatt();
+ measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
+ measureUnitValue = MeasureUnit::getHorsepower();
+ measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
+ measureUnitValue = MeasureUnit::getKilowatt();
+ measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
+ measureUnitValue = MeasureUnit::getMegawatt();
+ measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
+ measureUnitValue = MeasureUnit::getMilliwatt();
+ measureUnit.adoptInstead(MeasureUnit::createWatt(status));
+ measureUnitValue = MeasureUnit::getWatt();
+ measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status));
+ measureUnitValue = MeasureUnit::getAtmosphere();
+ measureUnit.adoptInstead(MeasureUnit::createBar(status));
+ measureUnitValue = MeasureUnit::getBar();
+ measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
+ measureUnitValue = MeasureUnit::getHectopascal();
+ measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
+ measureUnitValue = MeasureUnit::getInchHg();
+ measureUnit.adoptInstead(MeasureUnit::createKilopascal(status));
+ measureUnitValue = MeasureUnit::getKilopascal();
+ measureUnit.adoptInstead(MeasureUnit::createMegapascal(status));
+ measureUnitValue = MeasureUnit::getMegapascal();
+ measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
+ measureUnitValue = MeasureUnit::getMillibar();
+ measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
+ measureUnitValue = MeasureUnit::getMillimeterOfMercury();
+ measureUnit.adoptInstead(MeasureUnit::createPascal(status));
+ measureUnitValue = MeasureUnit::getPascal();
+ measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
+ measureUnitValue = MeasureUnit::getPoundPerSquareInch();
+ measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
+ measureUnitValue = MeasureUnit::getKilometerPerHour();
+ measureUnit.adoptInstead(MeasureUnit::createKnot(status));
+ measureUnitValue = MeasureUnit::getKnot();
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
+ measureUnitValue = MeasureUnit::getMeterPerSecond();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
+ measureUnitValue = MeasureUnit::getMilePerHour();
+ measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
+ measureUnitValue = MeasureUnit::getCelsius();
+ measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
+ measureUnitValue = MeasureUnit::getFahrenheit();
+ measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
+ measureUnitValue = MeasureUnit::getGenericTemperature();
+ measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
+ measureUnitValue = MeasureUnit::getKelvin();
+ measureUnit.adoptInstead(MeasureUnit::createNewtonMeter(status));
+ measureUnitValue = MeasureUnit::getNewtonMeter();
+ measureUnit.adoptInstead(MeasureUnit::createPoundFoot(status));
+ measureUnitValue = MeasureUnit::getPoundFoot();
+ measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
+ measureUnitValue = MeasureUnit::getAcreFoot();
+ measureUnit.adoptInstead(MeasureUnit::createBarrel(status));
+ measureUnitValue = MeasureUnit::getBarrel();
+ measureUnit.adoptInstead(MeasureUnit::createBushel(status));
+ measureUnitValue = MeasureUnit::getBushel();
+ measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
+ measureUnitValue = MeasureUnit::getCentiliter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
+ measureUnitValue = MeasureUnit::getCubicCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
+ measureUnitValue = MeasureUnit::getCubicFoot();
+ measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
+ measureUnitValue = MeasureUnit::getCubicInch();
+ measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
+ measureUnitValue = MeasureUnit::getCubicKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
+ measureUnitValue = MeasureUnit::getCubicMeter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
+ measureUnitValue = MeasureUnit::getCubicMile();
+ measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
+ measureUnitValue = MeasureUnit::getCubicYard();
+ measureUnit.adoptInstead(MeasureUnit::createCup(status));
+ measureUnitValue = MeasureUnit::getCup();
+ measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
+ measureUnitValue = MeasureUnit::getCupMetric();
+ measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
+ measureUnitValue = MeasureUnit::getDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createDessertSpoon(status));
+ measureUnitValue = MeasureUnit::getDessertSpoon();
+ measureUnit.adoptInstead(MeasureUnit::createDessertSpoonImperial(status));
+ measureUnitValue = MeasureUnit::getDessertSpoonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createDram(status));
+ measureUnitValue = MeasureUnit::getDram();
+ measureUnit.adoptInstead(MeasureUnit::createDrop(status));
+ measureUnitValue = MeasureUnit::getDrop();
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
+ measureUnitValue = MeasureUnit::getFluidOunce();
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunceImperial(status));
+ measureUnitValue = MeasureUnit::getFluidOunceImperial();
+ measureUnit.adoptInstead(MeasureUnit::createGallon(status));
+ measureUnitValue = MeasureUnit::getGallon();
+ measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
+ measureUnitValue = MeasureUnit::getGallonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
+ measureUnitValue = MeasureUnit::getHectoliter();
+ measureUnit.adoptInstead(MeasureUnit::createJigger(status));
+ measureUnitValue = MeasureUnit::getJigger();
+ measureUnit.adoptInstead(MeasureUnit::createLiter(status));
+ measureUnitValue = MeasureUnit::getLiter();
+ measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
+ measureUnitValue = MeasureUnit::getMegaliter();
+ measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
+ measureUnitValue = MeasureUnit::getMilliliter();
+ measureUnit.adoptInstead(MeasureUnit::createPinch(status));
+ measureUnitValue = MeasureUnit::getPinch();
+ measureUnit.adoptInstead(MeasureUnit::createPint(status));
+ measureUnitValue = MeasureUnit::getPint();
+ measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
+ measureUnitValue = MeasureUnit::getPintMetric();
+ measureUnit.adoptInstead(MeasureUnit::createQuart(status));
+ measureUnitValue = MeasureUnit::getQuart();
+ measureUnit.adoptInstead(MeasureUnit::createQuartImperial(status));
+ measureUnitValue = MeasureUnit::getQuartImperial();
+ measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
+ measureUnitValue = MeasureUnit::getTablespoon();
+ measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
+ measureUnitValue = MeasureUnit::getTeaspoon();
+ assertSuccess("", status);
+}
+
void MeasureFormatTest::TestBasic() {
UErrorCode status = U_ZERO_ERROR;
MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status);
@@ -2680,7 +3095,7 @@ void MeasureFormatTest::TestMultiples() {
helperTestMultiples(en, UMEASFMT_WIDTH_SHORT, "2 mi, 1 ft, 2.3 in");
helperTestMultiples(en, UMEASFMT_WIDTH_NARROW, "2mi 1\\u2032 2.3\\u2033");
helperTestMultiples(ru, UMEASFMT_WIDTH_WIDE, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0443\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
- helperTestMultiples(ru, UMEASFMT_WIDTH_SHORT, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C.");
+ helperTestMultiples(ru, UMEASFMT_WIDTH_SHORT, "2 \\u043C\\u0438 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C.");
helperTestMultiples(ru, UMEASFMT_WIDTH_NARROW, "2 \\u043C\\u0438\\u043B\\u044C 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
}
@@ -2725,7 +3140,7 @@ void MeasureFormatTest::TestManyLocaleDurations() {
helperTestManyLocaleDurations("en", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("en_GB", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m");
helperTestManyLocaleDurations("en_GB", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
- helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 h 37 min");
+ helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37min");
helperTestManyLocaleDurations("es", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("fi", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t 37min");
helperTestManyLocaleDurations("fi", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37");
@@ -2739,7 +3154,7 @@ void MeasureFormatTest::TestManyLocaleDurations() {
helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 u, 37 m");
helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
- helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t og 37m");
+ helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t 37m");
helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m");
helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
@@ -3082,7 +3497,7 @@ void MeasureFormatTest::TestUnitPerUnitResolution() {
UErrorCode status = U_ZERO_ERROR;
Locale en("en");
MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
- Measure measure(50.0, MeasureUnit::createPound(status), status);
+ Measure measure(50.0, MeasureUnit::createPoundForce(status), status);
LocalPointer<MeasureUnit> sqInch(MeasureUnit::createSquareInch(status));
if (!assertSuccess("Create of format unit and per unit", status)) {
return;
@@ -3104,11 +3519,23 @@ void MeasureFormatTest::TestIndividualPluralFallback() {
// and falls back to fr for the "other" form.
IcuTestErrorCode errorCode(*this, "TestIndividualPluralFallback");
MeasureFormat mf("fr_CA", UMEASFMT_WIDTH_SHORT, errorCode);
+ if (errorCode.errIfFailureAndReset("MeasureFormat mf(...) failed.")) {
+ return;
+ }
LocalPointer<Measure> twoDeg(
new Measure(2.0, MeasureUnit::createGenericTemperature(errorCode), errorCode), errorCode);
+ if (errorCode.errIfFailureAndReset("Creating twoDeg failed.")) {
+ return;
+ }
UnicodeString expected = UNICODE_STRING_SIMPLE("2\\u00B0").unescape();
UnicodeString actual;
- assertEquals("2 deg temp in fr_CA", expected, mf.format(twoDeg.orphan(), actual, errorCode), TRUE);
+ // Formattable adopts the pointer
+ mf.format(Formattable(twoDeg.orphan()), actual, errorCode);
+ if (errorCode.errIfFailureAndReset("mf.format(...) failed.")) {
+ return;
+ }
+ assertEquals("2 deg temp in fr_CA", expected, actual, TRUE);
+ errorCode.errIfFailureAndReset("mf.format failed");
}
void MeasureFormatTest::Test20332_PersonUnits() {
@@ -3215,6 +3642,454 @@ void MeasureFormatTest::TestNumericTimeSomeSpecialFormats() {
verifyFormat("Danish fhoursFminutes", fmtDa, fhoursFminutes, 2, "2.03,877");
}
+void MeasureFormatTest::TestIdentifiers() {
+ IcuTestErrorCode status(*this, "TestIdentifiers");
+ struct TestCase {
+ const char* id;
+ const char* normalized;
+ } cases[] = {
+ // Correctly normalized identifiers should not change
+ {"", ""},
+ {"square-meter-per-square-meter", "square-meter-per-square-meter"},
+ {"kilogram-meter-per-square-meter-square-second",
+ "kilogram-meter-per-square-meter-square-second"},
+ {"square-mile-and-square-foot", "square-mile-and-square-foot"},
+ {"square-foot-and-square-mile", "square-foot-and-square-mile"},
+ {"per-cubic-centimeter", "per-cubic-centimeter"},
+ {"per-kilometer", "per-kilometer"},
+
+ // Normalization of power and per
+ {"pow2-foot-and-pow2-mile", "square-foot-and-square-mile"},
+ {"gram-square-gram-per-dekagram", "cubic-gram-per-dekagram"},
+ {"kilogram-per-meter-per-second", "kilogram-per-meter-second"},
+
+ // TODO(ICU-21284): Add more test cases once the proper ranking is available.
+ };
+ for (const auto &cas : cases) {
+ status.setScope(cas.id);
+ MeasureUnit unit = MeasureUnit::forIdentifier(cas.id, status);
+ status.errIfFailureAndReset();
+ const char* actual = unit.getIdentifier();
+ assertEquals(cas.id, cas.normalized, actual);
+ status.errIfFailureAndReset();
+ }
+}
+
+void MeasureFormatTest::TestInvalidIdentifiers() {
+ IcuTestErrorCode status(*this, "TestInvalidIdentifiers");
+
+ const char *const inputs[] = {
+ "kilo",
+ "kilokilo",
+ "onekilo",
+ "meterkilo",
+ "meter-kilo",
+ "k",
+ "meter-",
+ "meter+",
+ "-meter",
+ "+meter",
+ "-kilometer",
+ "+kilometer",
+ "-pow2-meter",
+ "+pow2-meter",
+ "p2-meter",
+ "p4-meter",
+ "+",
+ "-",
+ "-mile",
+ "-and-mile",
+ "-per-mile",
+ "one",
+ "one-one",
+ "one-per-mile",
+ "one-per-cubic-centimeter",
+ "square--per-meter",
+ "metersecond", // Must have compound part in between single units
+
+ // Negative powers not supported in mixed units yet. TODO(CLDR-13701).
+ "per-hour-and-hertz",
+ "hertz-and-per-hour",
+
+ // Compound units not supported in mixed units yet. TODO(CLDR-13700).
+ "kilonewton-meter-and-newton-meter",
+ };
+
+ for (const auto& input : inputs) {
+ status.setScope(input);
+ MeasureUnit::forIdentifier(input, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ }
+}
+
+void MeasureFormatTest::TestParseToBuiltIn() {
+ IcuTestErrorCode status(*this, "TestParseToBuiltIn()");
+ const struct TestCase {
+ const char *identifier;
+ MeasureUnit expectedBuiltIn;
+ } cases[] = {
+ {"meter-per-second-per-second", MeasureUnit::getMeterPerSecondSquared()},
+ {"meter-per-second-second", MeasureUnit::getMeterPerSecondSquared()},
+ {"centimeter-centimeter", MeasureUnit::getSquareCentimeter()},
+ {"square-foot", MeasureUnit::getSquareFoot()},
+ {"pow2-inch", MeasureUnit::getSquareInch()},
+ {"milligram-per-deciliter", MeasureUnit::getMilligramPerDeciliter()},
+ {"pound-force-per-pow2-inch", MeasureUnit::getPoundPerSquareInch()},
+ {"yard-pow2-yard", MeasureUnit::getCubicYard()},
+ {"square-yard-yard", MeasureUnit::getCubicYard()},
+ };
+
+ for (auto &cas : cases) {
+ MeasureUnit fromIdent = MeasureUnit::forIdentifier(cas.identifier, status);
+ status.assertSuccess();
+ assertEquals("forIdentifier returns a normal built-in unit when it exists",
+ cas.expectedBuiltIn.getOffset(), fromIdent.getOffset());
+ assertEquals("type", cas.expectedBuiltIn.getType(), fromIdent.getType());
+ assertEquals("subType", cas.expectedBuiltIn.getSubtype(), fromIdent.getSubtype());
+ }
+}
+
+// Kilogram is a "base unit", although it's also "gram" with a kilo- prefix.
+// This tests that it is handled in the preferred manner.
+void MeasureFormatTest::TestKilogramIdentifier() {
+ IcuTestErrorCode status(*this, "TestKilogramIdentifier");
+
+ // SI unit of mass
+ MeasureUnit kilogram = MeasureUnit::forIdentifier("kilogram", status);
+ // Metric mass unit
+ MeasureUnit gram = MeasureUnit::forIdentifier("gram", status);
+ // Microgram: still a built-in type
+ MeasureUnit microgram = MeasureUnit::forIdentifier("microgram", status);
+ // Nanogram: not a built-in type at this time
+ MeasureUnit nanogram = MeasureUnit::forIdentifier("nanogram", status);
+ status.assertSuccess();
+
+ assertEquals("parsed kilogram equals built-in kilogram", MeasureUnit::getKilogram().getType(),
+ kilogram.getType());
+ assertEquals("parsed kilogram equals built-in kilogram", MeasureUnit::getKilogram().getSubtype(),
+ kilogram.getSubtype());
+ assertEquals("parsed gram equals built-in gram", MeasureUnit::getGram().getType(), gram.getType());
+ assertEquals("parsed gram equals built-in gram", MeasureUnit::getGram().getSubtype(),
+ gram.getSubtype());
+ assertEquals("parsed microgram equals built-in microgram", MeasureUnit::getMicrogram().getType(),
+ microgram.getType());
+ assertEquals("parsed microgram equals built-in microgram", MeasureUnit::getMicrogram().getSubtype(),
+ microgram.getSubtype());
+ assertEquals("nanogram", "", nanogram.getType());
+ assertEquals("nanogram", "nanogram", nanogram.getIdentifier());
+
+ assertEquals("prefix of kilogram", UMEASURE_SI_PREFIX_KILO, kilogram.getSIPrefix(status));
+ assertEquals("prefix of gram", UMEASURE_SI_PREFIX_ONE, gram.getSIPrefix(status));
+ assertEquals("prefix of microgram", UMEASURE_SI_PREFIX_MICRO, microgram.getSIPrefix(status));
+ assertEquals("prefix of nanogram", UMEASURE_SI_PREFIX_NANO, nanogram.getSIPrefix(status));
+
+ MeasureUnit tmp = kilogram.withSIPrefix(UMEASURE_SI_PREFIX_MILLI, status);
+ assertEquals(UnicodeString("Kilogram + milli should be milligram, got: ") + tmp.getIdentifier(),
+ MeasureUnit::getMilligram().getIdentifier(), tmp.getIdentifier());
+}
+
+void MeasureFormatTest::TestCompoundUnitOperations() {
+ IcuTestErrorCode status(*this, "TestCompoundUnitOperations");
+
+ MeasureUnit::forIdentifier("kilometer-per-second-joule", status);
+
+ MeasureUnit kilometer = MeasureUnit::getKilometer();
+ MeasureUnit cubicMeter = MeasureUnit::getCubicMeter();
+ MeasureUnit meter = kilometer.withSIPrefix(UMEASURE_SI_PREFIX_ONE, status);
+ MeasureUnit centimeter1 = kilometer.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
+ MeasureUnit centimeter2 = meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
+ MeasureUnit cubicDecimeter = cubicMeter.withSIPrefix(UMEASURE_SI_PREFIX_DECI, status);
+
+ verifySingleUnit(kilometer, UMEASURE_SI_PREFIX_KILO, 1, "kilometer");
+ verifySingleUnit(meter, UMEASURE_SI_PREFIX_ONE, 1, "meter");
+ verifySingleUnit(centimeter1, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
+ verifySingleUnit(centimeter2, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
+ verifySingleUnit(cubicDecimeter, UMEASURE_SI_PREFIX_DECI, 3, "cubic-decimeter");
+
+ assertTrue("centimeter equality", centimeter1 == centimeter2);
+ assertTrue("kilometer inequality", centimeter1 != kilometer);
+
+ MeasureUnit squareMeter = meter.withDimensionality(2, status);
+ MeasureUnit overCubicCentimeter = centimeter1.withDimensionality(-3, status);
+ MeasureUnit quarticKilometer = kilometer.withDimensionality(4, status);
+ MeasureUnit overQuarticKilometer1 = kilometer.withDimensionality(-4, status);
+
+ verifySingleUnit(squareMeter, UMEASURE_SI_PREFIX_ONE, 2, "square-meter");
+ verifySingleUnit(overCubicCentimeter, UMEASURE_SI_PREFIX_CENTI, -3, "per-cubic-centimeter");
+ verifySingleUnit(quarticKilometer, UMEASURE_SI_PREFIX_KILO, 4, "pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer1, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
+
+ assertTrue("power inequality", quarticKilometer != overQuarticKilometer1);
+
+ MeasureUnit overQuarticKilometer2 = quarticKilometer.reciprocal(status);
+ MeasureUnit overQuarticKilometer3 = kilometer.product(kilometer, status)
+ .product(kilometer, status)
+ .product(kilometer, status)
+ .reciprocal(status);
+ MeasureUnit overQuarticKilometer4 = meter.withDimensionality(4, status)
+ .reciprocal(status)
+ .withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
+
+ verifySingleUnit(overQuarticKilometer2, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer3, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer4, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
+
+ assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer2);
+ assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer3);
+ assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer4);
+
+ MeasureUnit kiloSquareSecond = MeasureUnit::getSecond()
+ .withDimensionality(2, status).withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
+ MeasureUnit meterSecond = meter.product(kiloSquareSecond, status);
+ MeasureUnit cubicMeterSecond1 = meter.withDimensionality(3, status).product(kiloSquareSecond, status);
+ MeasureUnit centimeterSecond1 = meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status).product(kiloSquareSecond, status);
+ MeasureUnit secondCubicMeter = kiloSquareSecond.product(meter.withDimensionality(3, status), status);
+ MeasureUnit secondCentimeter = kiloSquareSecond.product(meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status), status);
+ MeasureUnit secondCentimeterPerKilometer = secondCentimeter.product(kilometer.reciprocal(status), status);
+
+ verifySingleUnit(kiloSquareSecond, UMEASURE_SI_PREFIX_KILO, 2, "square-kilosecond");
+ const char* meterSecondSub[] = {"meter", "square-kilosecond"};
+ verifyCompoundUnit(meterSecond, "meter-square-kilosecond",
+ meterSecondSub, UPRV_LENGTHOF(meterSecondSub));
+ const char* cubicMeterSecond1Sub[] = {"cubic-meter", "square-kilosecond"};
+ verifyCompoundUnit(cubicMeterSecond1, "cubic-meter-square-kilosecond",
+ cubicMeterSecond1Sub, UPRV_LENGTHOF(cubicMeterSecond1Sub));
+ const char* centimeterSecond1Sub[] = {"centimeter", "square-kilosecond"};
+ verifyCompoundUnit(centimeterSecond1, "centimeter-square-kilosecond",
+ centimeterSecond1Sub, UPRV_LENGTHOF(centimeterSecond1Sub));
+ const char* secondCubicMeterSub[] = {"cubic-meter", "square-kilosecond"};
+ verifyCompoundUnit(secondCubicMeter, "cubic-meter-square-kilosecond",
+ secondCubicMeterSub, UPRV_LENGTHOF(secondCubicMeterSub));
+ const char* secondCentimeterSub[] = {"centimeter", "square-kilosecond"};
+ verifyCompoundUnit(secondCentimeter, "centimeter-square-kilosecond",
+ secondCentimeterSub, UPRV_LENGTHOF(secondCentimeterSub));
+ const char* secondCentimeterPerKilometerSub[] = {"centimeter", "square-kilosecond", "per-kilometer"};
+ verifyCompoundUnit(secondCentimeterPerKilometer, "centimeter-square-kilosecond-per-kilometer",
+ secondCentimeterPerKilometerSub, UPRV_LENGTHOF(secondCentimeterPerKilometerSub));
+
+ assertTrue("reordering equality", cubicMeterSecond1 == secondCubicMeter);
+ assertTrue("additional simple units inequality", secondCubicMeter != secondCentimeter);
+
+ // Don't allow get/set power or SI prefix on compound units
+ status.errIfFailureAndReset();
+ meterSecond.getDimensionality(status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ meterSecond.withDimensionality(3, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ meterSecond.getSIPrefix(status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ meterSecond.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+
+ // Test that StringPiece does not overflow
+ MeasureUnit centimeter3 = MeasureUnit::forIdentifier({secondCentimeter.getIdentifier(), 10}, status);
+ verifySingleUnit(centimeter3, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
+ assertTrue("string piece equality", centimeter1 == centimeter3);
+
+ MeasureUnit footInch = MeasureUnit::forIdentifier("foot-and-inch", status);
+ MeasureUnit inchFoot = MeasureUnit::forIdentifier("inch-and-foot", status);
+
+ const char* footInchSub[] = {"foot", "inch"};
+ verifyMixedUnit(footInch, "foot-and-inch",
+ footInchSub, UPRV_LENGTHOF(footInchSub));
+ const char* inchFootSub[] = {"inch", "foot"};
+ verifyMixedUnit(inchFoot, "inch-and-foot",
+ inchFootSub, UPRV_LENGTHOF(inchFootSub));
+
+ assertTrue("order matters inequality", footInch != inchFoot);
+
+ MeasureUnit dimensionless;
+ MeasureUnit dimensionless2 = MeasureUnit::forIdentifier("", status);
+ status.errIfFailureAndReset("Dimensionless MeasureUnit.");
+ assertTrue("dimensionless equality", dimensionless == dimensionless2);
+
+ // We support starting from an "identity" MeasureUnit and then combining it
+ // with others via product:
+ MeasureUnit kilometer2 = dimensionless.product(kilometer, status);
+ status.errIfFailureAndReset("dimensionless.product(kilometer, status)");
+ verifySingleUnit(kilometer2, UMEASURE_SI_PREFIX_KILO, 1, "kilometer");
+ assertTrue("kilometer equality", kilometer == kilometer2);
+
+ // Test out-of-range powers
+ MeasureUnit power15 = MeasureUnit::forIdentifier("pow15-kilometer", status);
+ verifySingleUnit(power15, UMEASURE_SI_PREFIX_KILO, 15, "pow15-kilometer");
+ status.errIfFailureAndReset();
+ MeasureUnit power16a = MeasureUnit::forIdentifier("pow16-kilometer", status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ MeasureUnit power16b = power15.product(kilometer, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ MeasureUnit powerN15 = MeasureUnit::forIdentifier("per-pow15-kilometer", status);
+ verifySingleUnit(powerN15, UMEASURE_SI_PREFIX_KILO, -15, "per-pow15-kilometer");
+ status.errIfFailureAndReset();
+ MeasureUnit powerN16a = MeasureUnit::forIdentifier("per-pow16-kilometer", status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ MeasureUnit powerN16b = powerN15.product(overQuarticKilometer1, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+}
+
+void MeasureFormatTest::TestDimensionlessBehaviour() {
+ IcuTestErrorCode status(*this, "TestDimensionlessBehaviour");
+ MeasureUnit dimensionless;
+ MeasureUnit modified;
+
+ // At the time of writing, each of the seven groups below caused
+ // Parser::from("") to be called:
+
+ // splitToSingleUnits
+ auto pair = dimensionless.splitToSingleUnits(status);
+ int32_t count = pair.second;
+ status.errIfFailureAndReset("dimensionless.splitToSingleUnits(...)");
+ assertEquals("no singles in dimensionless", 0, count);
+
+ // product(dimensionless)
+ MeasureUnit mile = MeasureUnit::getMile();
+ mile = mile.product(dimensionless, status);
+ status.errIfFailureAndReset("mile.product(dimensionless, ...)");
+ verifySingleUnit(mile, UMEASURE_SI_PREFIX_ONE, 1, "mile");
+
+ // dimensionless.getSIPrefix()
+ UMeasureSIPrefix siPrefix = dimensionless.getSIPrefix(status);
+ status.errIfFailureAndReset("dimensionless.getSIPrefix(...)");
+ assertEquals("dimensionless SIPrefix", UMEASURE_SI_PREFIX_ONE, siPrefix);
+
+ // dimensionless.withSIPrefix()
+ modified = dimensionless.withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
+ status.errIfFailureAndReset("dimensionless.withSIPrefix(...)");
+ pair = dimensionless.splitToSingleUnits(status);
+ count = pair.second;
+ assertEquals("no singles in modified", 0, count);
+ siPrefix = modified.getSIPrefix(status);
+ status.errIfFailureAndReset("modified.getSIPrefix(...)");
+ assertEquals("modified SIPrefix", UMEASURE_SI_PREFIX_ONE, siPrefix);
+
+ // dimensionless.getComplexity()
+ UMeasureUnitComplexity complexity = dimensionless.getComplexity(status);
+ status.errIfFailureAndReset("dimensionless.getComplexity(...)");
+ assertEquals("dimensionless complexity", UMEASURE_UNIT_SINGLE, complexity);
+
+ // Dimensionality is mostly meaningless for dimensionless units, but it's
+ // still considered a SINGLE unit, so this code doesn't throw errors:
+
+ // dimensionless.getDimensionality()
+ int32_t dimensionality = dimensionless.getDimensionality(status);
+ status.errIfFailureAndReset("dimensionless.getDimensionality(...)");
+ assertEquals("dimensionless dimensionality", 0, dimensionality);
+
+ // dimensionless.withDimensionality()
+ dimensionless.withDimensionality(-1, status);
+ status.errIfFailureAndReset("dimensionless.withDimensionality(...)");
+ dimensionality = dimensionless.getDimensionality(status);
+ status.errIfFailureAndReset("dimensionless.getDimensionality(...)");
+ assertEquals("dimensionless dimensionality", 0, dimensionality);
+}
+
+// ICU-21060
+void MeasureFormatTest::Test21060_AddressSanitizerProblem() {
+ IcuTestErrorCode status(*this, "Test21060_AddressSanitizerProblem");
+
+ MeasureUnit first = MeasureUnit::forIdentifier("", status);
+ status.errIfFailureAndReset();
+
+ // Experimentally, a compound unit like "kilogram-meter" failed. A single
+ // unit like "kilogram" or "meter" did not fail, did not trigger the
+ // problem.
+ MeasureUnit crux = MeasureUnit::forIdentifier("per-meter", status);
+
+ // Heap allocation of a new CharString for first.identifier happens here:
+ first = first.product(crux, status);
+
+ // Constructing second from first's identifier resulted in a failure later,
+ // as second held a reference to a substring of first's identifier:
+ MeasureUnit second = MeasureUnit::forIdentifier(first.getIdentifier(), status);
+
+ // Heap is freed here, as an old first.identifier CharString is deallocated
+ // and a new CharString is allocated:
+ first = first.product(crux, status);
+
+ // Proving we've had no failure yet:
+ status.errIfFailureAndReset();
+
+ // heap-use-after-free failure happened here, since a SingleUnitImpl had
+ // held onto a StringPiece pointing at a substring of an identifier that was
+ // freed above:
+ second = second.product(crux, status);
+
+ status.errIfFailureAndReset();
+}
+
+void MeasureFormatTest::Test21223_FrenchDuration() {
+ IcuTestErrorCode status(*this, "Test21223_FrenchDuration");
+ MeasureFormat mf("fr-FR", UMEASFMT_WIDTH_NARROW, status);
+ Measure H5M10[] = {
+ {5, MeasureUnit::createHour(status), status},
+ {10, MeasureUnit::createMinute(status), status}
+ };
+ UnicodeString result;
+ FieldPosition pos;
+ mf.formatMeasures(H5M10, UPRV_LENGTHOF(H5M10), result, pos, status);
+ assertEquals("Should have consistent spacing", u"5h 10min", result);
+
+ // Test additional locales:
+ // int32_t localeCount;
+ // const Locale* locales = Locale::getAvailableLocales(localeCount);
+ // for (int32_t i=0; i<localeCount; i++) {
+ // auto& loc = locales[i];
+ // MeasureFormat mf1(loc, UMEASFMT_WIDTH_NARROW, status);
+ // mf1.formatMeasures(H5M10, UPRV_LENGTHOF(H5M10), result.remove(), pos, status);
+ // assertFalse(result + u" " + loc.getName(), TRUE);
+ // }
+}
+
+void MeasureFormatTest::TestInternalMeasureUnitImpl() {
+ IcuTestErrorCode status(*this, "TestInternalMeasureUnitImpl");
+ MeasureUnitImpl mu1 = MeasureUnitImpl::forIdentifier("meter", status);
+ status.assertSuccess();
+ assertEquals("mu1 initial identifier", "", mu1.identifier.data());
+ assertEquals("mu1 initial complexity", UMEASURE_UNIT_SINGLE, mu1.complexity);
+ assertEquals("mu1 initial units length", 1, mu1.units.length());
+ assertEquals("mu1 initial units[0]", "meter", mu1.units[0]->getSimpleUnitID());
+
+ // Producing identifier via build(): the std::move() means mu1 gets modified
+ // while it also gets assigned to tmp's internal fImpl.
+ MeasureUnit tmp = std::move(mu1).build(status);
+ status.assertSuccess();
+ assertEquals("mu1 post-move-build identifier", "meter", mu1.identifier.data());
+ assertEquals("mu1 post-move-build complexity", UMEASURE_UNIT_SINGLE, mu1.complexity);
+ assertEquals("mu1 post-move-build units length", 1, mu1.units.length());
+ assertEquals("mu1 post-move-build units[0]", "meter", mu1.units[0]->getSimpleUnitID());
+ assertEquals("MeasureUnit tmp identifier", "meter", tmp.getIdentifier());
+
+ // This temporary variable is used when forMeasureUnit's first parameter
+ // lacks an fImpl instance:
+ MeasureUnitImpl tmpMemory;
+ const MeasureUnitImpl &tmpImplRef = MeasureUnitImpl::forMeasureUnit(tmp, tmpMemory, status);
+ status.assertSuccess();
+ assertEquals("tmpMemory identifier", "", tmpMemory.identifier.data());
+ assertEquals("tmpMemory complexity", UMEASURE_UNIT_SINGLE, tmpMemory.complexity);
+ assertEquals("tmpMemory units length", 1, tmpMemory.units.length());
+ assertEquals("tmpMemory units[0]", "meter", tmpMemory.units[0]->getSimpleUnitID());
+ assertEquals("tmpImplRef identifier", "", tmpImplRef.identifier.data());
+ assertEquals("tmpImplRef complexity", UMEASURE_UNIT_SINGLE, tmpImplRef.complexity);
+
+ MeasureUnitImpl mu2 = MeasureUnitImpl::forIdentifier("newton-meter", status);
+ status.assertSuccess();
+ mu1 = std::move(mu2);
+ assertEquals("mu1 = move(mu2): identifier", "", mu1.identifier.data());
+ assertEquals("mu1 = move(mu2): complexity", UMEASURE_UNIT_COMPOUND, mu1.complexity);
+ assertEquals("mu1 = move(mu2): units length", 2, mu1.units.length());
+ assertEquals("mu1 = move(mu2): units[0]", "newton", mu1.units[0]->getSimpleUnitID());
+ assertEquals("mu1 = move(mu2): units[1]", "meter", mu1.units[1]->getSimpleUnitID());
+
+ mu1 = MeasureUnitImpl::forIdentifier("hour-and-minute-and-second", status);
+ status.assertSuccess();
+ assertEquals("mu1 = HMS: identifier", "", mu1.identifier.data());
+ assertEquals("mu1 = HMS: complexity", UMEASURE_UNIT_MIXED, mu1.complexity);
+ assertEquals("mu1 = HMS: units length", 3, mu1.units.length());
+ assertEquals("mu1 = HMS: units[0]", "hour", mu1.units[0]->getSimpleUnitID());
+ assertEquals("mu1 = HMS: units[1]", "minute", mu1.units[1]->getSimpleUnitID());
+ assertEquals("mu1 = HMS: units[2]", "second", mu1.units[2]->getSimpleUnitID());
+}
+
void MeasureFormatTest::verifyFieldPosition(
const char *description,
@@ -3286,6 +4161,99 @@ void MeasureFormatTest::verifyFormat(
}
}
+void MeasureFormatTest::verifySingleUnit(
+ const MeasureUnit& unit,
+ UMeasureSIPrefix siPrefix,
+ int8_t power,
+ const char* identifier) {
+ IcuTestErrorCode status(*this, "verifySingleUnit");
+ UnicodeString uid(identifier, -1, US_INV);
+ assertEquals(uid + ": SI prefix",
+ siPrefix,
+ unit.getSIPrefix(status));
+ status.errIfFailureAndReset("%s: SI prefix", identifier);
+ assertEquals(uid + ": Power",
+ static_cast<int32_t>(power),
+ static_cast<int32_t>(unit.getDimensionality(status)));
+ status.errIfFailureAndReset("%s: Power", identifier);
+ assertEquals(uid + ": Identifier",
+ identifier,
+ unit.getIdentifier());
+ status.errIfFailureAndReset("%s: Identifier", identifier);
+ assertTrue(uid + ": Constructor",
+ unit == MeasureUnit::forIdentifier(identifier, status));
+ status.errIfFailureAndReset("%s: Constructor", identifier);
+ assertEquals(uid + ": Complexity",
+ UMEASURE_UNIT_SINGLE,
+ unit.getComplexity(status));
+ status.errIfFailureAndReset("%s: Complexity", identifier);
+}
+
+void MeasureFormatTest::verifyCompoundUnit(
+ const MeasureUnit& unit,
+ const char* identifier,
+ const char** subIdentifiers,
+ int32_t subIdentifierCount) {
+ IcuTestErrorCode status(*this, "verifyCompoundUnit");
+ UnicodeString uid(identifier, -1, US_INV);
+ assertEquals(uid + ": Identifier",
+ identifier,
+ unit.getIdentifier());
+ status.errIfFailureAndReset("%s: Identifier", identifier);
+ assertTrue(uid + ": Constructor",
+ unit == MeasureUnit::forIdentifier(identifier, status));
+ status.errIfFailureAndReset("%s: Constructor", identifier);
+ assertEquals(uid + ": Complexity",
+ UMEASURE_UNIT_COMPOUND,
+ unit.getComplexity(status));
+ status.errIfFailureAndReset("%s: Complexity", identifier);
+
+ auto pair = unit.splitToSingleUnits(status);
+ const LocalArray<MeasureUnit>& subUnits = pair.first;
+ int32_t length = pair.second;
+ assertEquals(uid + ": Length", subIdentifierCount, length);
+ for (int32_t i = 0;; i++) {
+ if (i >= subIdentifierCount || i >= length) break;
+ assertEquals(uid + ": Sub-unit #" + Int64ToUnicodeString(i),
+ subIdentifiers[i],
+ subUnits[i].getIdentifier());
+ assertEquals(uid + ": Sub-unit Complexity",
+ UMEASURE_UNIT_SINGLE,
+ subUnits[i].getComplexity(status));
+ }
+}
+
+void MeasureFormatTest::verifyMixedUnit(
+ const MeasureUnit& unit,
+ const char* identifier,
+ const char** subIdentifiers,
+ int32_t subIdentifierCount) {
+ IcuTestErrorCode status(*this, "verifyMixedUnit");
+ UnicodeString uid(identifier, -1, US_INV);
+ assertEquals(uid + ": Identifier",
+ identifier,
+ unit.getIdentifier());
+ status.errIfFailureAndReset("%s: Identifier", identifier);
+ assertTrue(uid + ": Constructor",
+ unit == MeasureUnit::forIdentifier(identifier, status));
+ status.errIfFailureAndReset("%s: Constructor", identifier);
+ assertEquals(uid + ": Complexity",
+ UMEASURE_UNIT_MIXED,
+ unit.getComplexity(status));
+ status.errIfFailureAndReset("%s: Complexity", identifier);
+
+ auto pair = unit.splitToSingleUnits(status);
+ const LocalArray<MeasureUnit>& subUnits = pair.first;
+ int32_t length = pair.second;
+ assertEquals(uid + ": Length", subIdentifierCount, length);
+ for (int32_t i = 0;; i++) {
+ if (i >= subIdentifierCount || i >= length) break;
+ assertEquals(uid + ": Sub-unit #" + Int64ToUnicodeString(i),
+ subIdentifiers[i],
+ subUnits[i].getIdentifier());
+ }
+}
+
extern IntlTest *createMeasureFormatTest() {
return new MeasureFormatTest();
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numberformat2test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numberformat2test.cpp
deleted file mode 100644
index ce28c3f8135..00000000000
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numberformat2test.cpp
+++ /dev/null
@@ -1,3090 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-* Copyright (C) 2015, International Business Machines Corporation and *
-* others. All Rights Reserved. *
-*******************************************************************************
-*
-* File NUMBERFORMAT2TEST.CPP
-*
-*******************************************************************************
-*/
-#include "unicode/utypes.h"
-
-#include "intltest.h"
-
-#if !UCONFIG_NO_FORMATTING
-
-#include "unicode/localpointer.h"
-#include "unicode/plurrule.h"
-
-#include "affixpatternparser.h"
-#include "charstr.h"
-#include "datadrivennumberformattestsuite.h"
-#include "decimalformatpattern.h"
-#include "digitaffixesandpadding.h"
-#include "digitformatter.h"
-#include "digitgrouping.h"
-#include "digitinterval.h"
-#include "digitlst.h"
-#include "fphdlimp.h"
-#include "plurrule_impl.h"
-#include "precision.h"
-#include "significantdigitinterval.h"
-#include "smallintformatter.h"
-#include "uassert.h"
-#include "valueformatter.h"
-#include "visibledigits.h"
-
-struct NumberFormat2Test_Attributes {
- int32_t id;
- int32_t spos;
- int32_t epos;
-};
-
-class NumberFormat2Test_FieldPositionHandler : public FieldPositionHandler {
-public:
-NumberFormat2Test_Attributes attributes[100];
-int32_t count;
-UBool bRecording;
-
-
-
-NumberFormat2Test_FieldPositionHandler() : count(0), bRecording(TRUE) { attributes[0].spos = -1; }
-NumberFormat2Test_FieldPositionHandler(UBool recording) : count(0), bRecording(recording) { attributes[0].spos = -1; }
-virtual ~NumberFormat2Test_FieldPositionHandler();
-virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
-virtual void shiftLast(int32_t delta);
-virtual UBool isRecording(void) const;
-};
-
-NumberFormat2Test_FieldPositionHandler::~NumberFormat2Test_FieldPositionHandler() {
-}
-
-void NumberFormat2Test_FieldPositionHandler::addAttribute(
- int32_t id, int32_t start, int32_t limit) {
- if (count == UPRV_LENGTHOF(attributes) - 1) {
- return;
- }
- attributes[count].id = id;
- attributes[count].spos = start;
- attributes[count].epos = limit;
- ++count;
- attributes[count].spos = -1;
-}
-
-void NumberFormat2Test_FieldPositionHandler::shiftLast(int32_t /* delta */) {
-}
-
-UBool NumberFormat2Test_FieldPositionHandler::isRecording() const {
- return bRecording;
-}
-
-
-class NumberFormat2Test : public IntlTest {
-public:
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
-private:
- void TestQuantize();
- void TestConvertScientificNotation();
- void TestLowerUpperExponent();
- void TestRounding();
- void TestRoundingIncrement();
- void TestDigitInterval();
- void TestGroupingUsed();
- void TestBenchmark();
- void TestBenchmark2();
- void TestSmallIntFormatter();
- void TestPositiveIntDigitFormatter();
- void TestDigitListInterval();
- void TestLargeIntValue();
- void TestIntInitVisibleDigits();
- void TestIntInitVisibleDigitsToDigitList();
- void TestDoubleInitVisibleDigits();
- void TestDoubleInitVisibleDigitsToDigitList();
- void TestDigitListInitVisibleDigits();
- void TestSpecialInitVisibleDigits();
- void TestVisibleDigitsWithExponent();
- void TestDigitAffixesAndPadding();
- void TestPluralsAndRounding();
- void TestPluralsAndRoundingScientific();
- void TestValueFormatterIsFastFormattable();
- void TestCurrencyAffixInfo();
- void TestAffixPattern();
- void TestAffixPatternAppend();
- void TestAffixPatternAppendAjoiningLiterals();
- void TestAffixPatternDoubleQuote();
- void TestAffixPatternParser();
- void TestPluralAffix();
- void TestDigitAffix();
- void TestDigitFormatterDefaultCtor();
- void TestDigitFormatterMonetary();
- void TestDigitFormatter();
- void TestSciFormatterDefaultCtor();
- void TestSciFormatter();
- void TestToPatternScientific11648();
- void verifyInterval(const DigitInterval &, int32_t minInclusive, int32_t maxExclusive);
- void verifyAffix(
- const UnicodeString &expected,
- const DigitAffix &affix,
- const NumberFormat2Test_Attributes *expectedAttributes);
- void verifyAffixesAndPadding(
- const UnicodeString &expected,
- const DigitAffixesAndPadding &aaf,
- DigitList &digits,
- const ValueFormatter &vf,
- const PluralRules *optPluralRules,
- const NumberFormat2Test_Attributes *expectedAttributes);
- void verifyAffixesAndPaddingInt32(
- const UnicodeString &expected,
- const DigitAffixesAndPadding &aaf,
- int32_t value,
- const ValueFormatter &vf,
- const PluralRules *optPluralRules,
- const NumberFormat2Test_Attributes *expectedAttributes);
- void verifyDigitList(
- const UnicodeString &expected,
- const DigitList &digits);
- void verifyVisibleDigits(
- const UnicodeString &expected,
- UBool bNegative,
- const VisibleDigits &digits);
- void verifyVisibleDigitsWithExponent(
- const UnicodeString &expected,
- UBool bNegative,
- const VisibleDigitsWithExponent &digits);
- void verifyDigitFormatter(
- const UnicodeString &expected,
- const DigitFormatter &formatter,
- const VisibleDigits &digits,
- const DigitGrouping &grouping,
- const DigitFormatterOptions &options,
- const NumberFormat2Test_Attributes *expectedAttributes);
- void verifySciFormatter(
- const UnicodeString &expected,
- const DigitFormatter &formatter,
- const VisibleDigitsWithExponent &digits,
- const SciFormatterOptions &options,
- const NumberFormat2Test_Attributes *expectedAttributes);
- void verifySmallIntFormatter(
- const UnicodeString &expected,
- int32_t positiveValue,
- int32_t minDigits,
- int32_t maxDigits);
- void verifyPositiveIntDigitFormatter(
- const UnicodeString &expected,
- const DigitFormatter &formatter,
- int32_t value,
- int32_t minDigits,
- int32_t maxDigits,
- const NumberFormat2Test_Attributes *expectedAttributes);
- void verifyAttributes(
- const NumberFormat2Test_Attributes *expected,
- const NumberFormat2Test_Attributes *actual);
- void verifyIntValue(
- int64_t expected, const VisibleDigits &digits);
- void verifySource(
- double expected, const VisibleDigits &digits);
-};
-
-void NumberFormat2Test::runIndexedTest(
- int32_t index, UBool exec, const char *&name, char *) {
- if (exec) {
- logln("TestSuite ScientificNumberFormatterTest: ");
- }
- TESTCASE_AUTO_BEGIN;
- TESTCASE_AUTO(TestQuantize);
- TESTCASE_AUTO(TestConvertScientificNotation);
- TESTCASE_AUTO(TestLowerUpperExponent);
- TESTCASE_AUTO(TestRounding);
- TESTCASE_AUTO(TestRoundingIncrement);
- TESTCASE_AUTO(TestDigitInterval);
- TESTCASE_AUTO(TestGroupingUsed);
- TESTCASE_AUTO(TestDigitListInterval);
- TESTCASE_AUTO(TestDigitFormatterDefaultCtor);
- TESTCASE_AUTO(TestDigitFormatterMonetary);
- TESTCASE_AUTO(TestDigitFormatter);
- TESTCASE_AUTO(TestSciFormatterDefaultCtor);
- TESTCASE_AUTO(TestSciFormatter);
- TESTCASE_AUTO(TestBenchmark);
- TESTCASE_AUTO(TestBenchmark2);
- TESTCASE_AUTO(TestSmallIntFormatter);
- TESTCASE_AUTO(TestPositiveIntDigitFormatter);
- TESTCASE_AUTO(TestCurrencyAffixInfo);
- TESTCASE_AUTO(TestAffixPattern);
- TESTCASE_AUTO(TestAffixPatternAppend);
- TESTCASE_AUTO(TestAffixPatternAppendAjoiningLiterals);
- TESTCASE_AUTO(TestAffixPatternDoubleQuote);
- TESTCASE_AUTO(TestAffixPatternParser);
- TESTCASE_AUTO(TestPluralAffix);
- TESTCASE_AUTO(TestDigitAffix);
- TESTCASE_AUTO(TestValueFormatterIsFastFormattable);
- TESTCASE_AUTO(TestLargeIntValue);
- TESTCASE_AUTO(TestIntInitVisibleDigits);
- TESTCASE_AUTO(TestIntInitVisibleDigitsToDigitList);
- TESTCASE_AUTO(TestDoubleInitVisibleDigits);
- TESTCASE_AUTO(TestDoubleInitVisibleDigitsToDigitList);
- TESTCASE_AUTO(TestDigitListInitVisibleDigits);
- TESTCASE_AUTO(TestSpecialInitVisibleDigits);
- TESTCASE_AUTO(TestVisibleDigitsWithExponent);
- TESTCASE_AUTO(TestDigitAffixesAndPadding);
- TESTCASE_AUTO(TestPluralsAndRounding);
- TESTCASE_AUTO(TestPluralsAndRoundingScientific);
- TESTCASE_AUTO(TestToPatternScientific11648);
-
- TESTCASE_AUTO_END;
-}
-
-void NumberFormat2Test::TestDigitInterval() {
- DigitInterval all;
- DigitInterval threeInts;
- DigitInterval fourFrac;
- threeInts.setIntDigitCount(3);
- fourFrac.setFracDigitCount(4);
- verifyInterval(all, INT32_MIN, INT32_MAX);
- verifyInterval(threeInts, INT32_MIN, 3);
- verifyInterval(fourFrac, -4, INT32_MAX);
- {
- DigitInterval result(threeInts);
- result.shrinkToFitWithin(fourFrac);
- verifyInterval(result, -4, 3);
- assertEquals("", 7, result.length());
- }
- {
- DigitInterval result(threeInts);
- result.expandToContain(fourFrac);
- verifyInterval(result, INT32_MIN, INT32_MAX);
- }
- {
- DigitInterval result(threeInts);
- result.setIntDigitCount(0);
- verifyInterval(result, INT32_MIN, 0);
- result.setIntDigitCount(-1);
- verifyInterval(result, INT32_MIN, INT32_MAX);
- }
- {
- DigitInterval result(fourFrac);
- result.setFracDigitCount(0);
- verifyInterval(result, 0, INT32_MAX);
- result.setFracDigitCount(-1);
- verifyInterval(result, INT32_MIN, INT32_MAX);
- }
- {
- DigitInterval result;
- result.setIntDigitCount(3);
- result.setFracDigitCount(1);
- result.expandToContainDigit(0);
- result.expandToContainDigit(-1);
- result.expandToContainDigit(2);
- verifyInterval(result, -1, 3);
- result.expandToContainDigit(3);
- verifyInterval(result, -1, 4);
- result.expandToContainDigit(-2);
- verifyInterval(result, -2, 4);
- result.expandToContainDigit(15);
- result.expandToContainDigit(-15);
- verifyInterval(result, -15, 16);
- }
- {
- DigitInterval result;
- result.setIntDigitCount(3);
- result.setFracDigitCount(1);
- assertTrue("", result.contains(2));
- assertTrue("", result.contains(-1));
- assertFalse("", result.contains(3));
- assertFalse("", result.contains(-2));
- }
-}
-
-void NumberFormat2Test::verifyInterval(
- const DigitInterval &interval,
- int32_t minInclusive, int32_t maxExclusive) {
- assertEquals("", minInclusive, interval.getLeastSignificantInclusive());
- assertEquals("", maxExclusive, interval.getMostSignificantExclusive());
- assertEquals("", maxExclusive, interval.getIntDigitCount());
-}
-
-void NumberFormat2Test::TestGroupingUsed() {
- {
- DigitGrouping grouping;
- assertFalse("", grouping.isGroupingUsed());
- }
- {
- DigitGrouping grouping;
- grouping.fGrouping = 2;
- assertTrue("", grouping.isGroupingUsed());
- }
-}
-
-void NumberFormat2Test::TestDigitListInterval() {
- DigitInterval result;
- DigitList digitList;
- {
- digitList.set((int32_t)12345);
- verifyInterval(digitList.getSmallestInterval(result), 0, 5);
- }
- {
- digitList.set(1000.00);
- verifyInterval(digitList.getSmallestInterval(result), 0, 4);
- }
- {
- digitList.set(43.125);
- verifyInterval(digitList.getSmallestInterval(result), -3, 2);
- }
- {
- digitList.set(.0078125);
- verifyInterval(digitList.getSmallestInterval(result), -7, 0);
- }
- {
- digitList.set(1000.00);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(3);
- verifyInterval(result, 0, 4);
- }
- {
- digitList.set(1000.00);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(4);
- verifyInterval(result, 0, 5);
- }
- {
- digitList.set(1000.00);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(0);
- verifyInterval(result, 0, 4);
- }
- {
- digitList.set(1000.00);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(-1);
- verifyInterval(result, -1, 4);
- }
- {
- digitList.set(43.125);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(1);
- verifyInterval(result, -3, 2);
- }
- {
- digitList.set(43.125);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(2);
- verifyInterval(result, -3, 3);
- }
- {
- digitList.set(43.125);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(-3);
- verifyInterval(result, -3, 2);
- }
- {
- digitList.set(43.125);
- digitList.getSmallestInterval(result);
- result.expandToContainDigit(-4);
- verifyInterval(result, -4, 2);
- }
-}
-
-void NumberFormat2Test::TestQuantize() {
- DigitList quantity;
- quantity.set(0.00168);
- quantity.roundAtExponent(-5);
- DigitList digits;
- UErrorCode status = U_ZERO_ERROR;
- {
- digits.set((int32_t)1);
- digits.quantize(quantity, status);
- verifyDigitList(".9996", digits);
- }
- {
- // round half even up
- digits.set(1.00044);
- digits.roundAtExponent(-5);
- digits.quantize(quantity, status);
- verifyDigitList("1.00128", digits);
- }
- {
- // round half down
- digits.set(0.99876);
- digits.roundAtExponent(-5);
- digits.quantize(quantity, status);
- verifyDigitList(".99792", digits);
- }
- assertSuccess("", status);
-}
-
-void NumberFormat2Test::TestConvertScientificNotation() {
- DigitList digits;
- {
- digits.set((int32_t)186283);
- assertEquals("", 5, digits.toScientific(1, 1));
- verifyDigitList(
- "1.86283",
- digits);
- }
- {
- digits.set((int32_t)186283);
- assertEquals("", 0, digits.toScientific(6, 1));
- verifyDigitList(
- "186283",
- digits);
- }
- {
- digits.set((int32_t)186283);
- assertEquals("", -2, digits.toScientific(8, 1));
- verifyDigitList(
- "18628300",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", 6, digits.toScientific(-1, 3));
- verifyDigitList(
- ".043561",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", 3, digits.toScientific(0, 3));
- verifyDigitList(
- "43.561",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", 3, digits.toScientific(2, 3));
- verifyDigitList(
- "43.561",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", 0, digits.toScientific(3, 3));
- verifyDigitList(
- "43561",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", 0, digits.toScientific(5, 3));
- verifyDigitList(
- "43561",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", -3, digits.toScientific(6, 3));
- verifyDigitList(
- "43561000",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", -3, digits.toScientific(8, 3));
- verifyDigitList(
- "43561000",
- digits);
- }
- {
- digits.set((int32_t)43561);
- assertEquals("", -6, digits.toScientific(9, 3));
- verifyDigitList(
- "43561000000",
- digits);
- }
-}
-
-void NumberFormat2Test::TestLowerUpperExponent() {
- DigitList digits;
-
- digits.set(98.7);
- assertEquals("", -1, digits.getLowerExponent());
- assertEquals("", 2, digits.getUpperExponent());
-}
-
-void NumberFormat2Test::TestRounding() {
- DigitList digits;
- uprv_decContextSetRounding(&digits.fContext, DEC_ROUND_CEILING);
- {
- // Round at very large exponent
- digits.set(789.123);
- digits.roundAtExponent(100);
- verifyDigitList(
- "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", // 100 0's after 1
- digits);
- }
- {
- // Round at very large exponent
- digits.set(789.123);
- digits.roundAtExponent(1);
- verifyDigitList(
- "790", // 100 0's after 1
- digits);
- }
- {
- // Round at positive exponent
- digits.set(789.123);
- digits.roundAtExponent(1);
- verifyDigitList("790", digits);
- }
- {
- // Round at zero exponent
- digits.set(788.123);
- digits.roundAtExponent(0);
- verifyDigitList("789", digits);
- }
- {
- // Round at negative exponent
- digits.set(789.123);
- digits.roundAtExponent(-2);
- verifyDigitList("789.13", digits);
- }
- {
- // Round to exponent of digits.
- digits.set(789.123);
- digits.roundAtExponent(-3);
- verifyDigitList("789.123", digits);
- }
- {
- // Round at large negative exponent
- digits.set(789.123);
- digits.roundAtExponent(-100);
- verifyDigitList("789.123", digits);
- }
- {
- // Round negative
- digits.set(-789.123);
- digits.roundAtExponent(-2);
- digits.setPositive(TRUE);
- verifyDigitList("789.12", digits);
- }
- {
- // Round to 1 significant digit
- digits.set(789.123);
- digits.roundAtExponent(INT32_MIN, 1);
- verifyDigitList("800", digits);
- }
- {
- // Round to 5 significant digit
- digits.set(789.123);
- digits.roundAtExponent(INT32_MIN, 5);
- verifyDigitList("789.13", digits);
- }
- {
- // Round to 6 significant digit
- digits.set(789.123);
- digits.roundAtExponent(INT32_MIN, 6);
- verifyDigitList("789.123", digits);
- }
- {
- // no-op
- digits.set(789.123);
- digits.roundAtExponent(INT32_MIN, INT32_MAX);
- verifyDigitList("789.123", digits);
- }
- {
- // Rounding at -1 produces fewer than 5 significant digits
- digits.set(789.123);
- digits.roundAtExponent(-1, 5);
- verifyDigitList("789.2", digits);
- }
- {
- // Rounding at -1 produces exactly 4 significant digits
- digits.set(789.123);
- digits.roundAtExponent(-1, 4);
- verifyDigitList("789.2", digits);
- }
- {
- // Rounding at -1 produces more than 3 significant digits
- digits.set(788.123);
- digits.roundAtExponent(-1, 3);
- verifyDigitList("789", digits);
- }
- {
- digits.set(123.456);
- digits.round(INT32_MAX);
- verifyDigitList("123.456", digits);
- }
- {
- digits.set(123.456);
- digits.round(1);
- verifyDigitList("200", digits);
- }
-}
-void NumberFormat2Test::TestBenchmark() {
-/*
- UErrorCode status = U_ZERO_ERROR;
- Locale en("en");
- DecimalFormatSymbols *sym = new DecimalFormatSymbols(en, status);
- DecimalFormat2 fmt(en, "0.0000000", status);
- FieldPosition fpos(FieldPostion::DONT_CARE);
- clock_t start = clock();
- for (int32_t i = 0; i < 100000; ++i) {
- UParseError perror;
- DecimalFormat2 fmt2("0.0000000", new DecimalFormatSymbols(*sym), perror, status);
-// UnicodeString append;
-// fmt.format(4.6692016, append, fpos, status);
- }
- errln("Took %f", (double) (clock() - start) / CLOCKS_PER_SEC);
- assertSuccess("", status);
-*/
-}
-
-void NumberFormat2Test::TestBenchmark2() {
-/*
- UErrorCode status = U_ZERO_ERROR;
- Locale en("en");
- DecimalFormatSymbols *sym = new DecimalFormatSymbols(en, status);
- DecimalFormat fmt("0.0000000", sym, status);
- FieldPosition fpos(FieldPostion::DONT_CARE);
- clock_t start = clock();
- for (int32_t i = 0; i < 100000; ++i) {
- UParseError perror;
- DecimalFormat fmt("0.0000000", new DecimalFormatSymbols(*sym), perror, status);
-// UnicodeString append;
-// fmt.format(4.6692016, append, fpos, status);
- }
- errln("Took %f", (double) (clock() - start) / CLOCKS_PER_SEC);
- assertSuccess("", status);
-*/
-}
-
-void NumberFormat2Test::TestSmallIntFormatter() {
- verifySmallIntFormatter("0", 7, 0, -2);
- verifySmallIntFormatter("7", 7, 1, -2);
- verifySmallIntFormatter("07", 7, 2, -2);
- verifySmallIntFormatter("07", 7, 2, 2);
- verifySmallIntFormatter("007", 7, 3, 4);
- verifySmallIntFormatter("7", 7, -1, 3);
- verifySmallIntFormatter("0", 0, -1, 3);
- verifySmallIntFormatter("057", 57, 3, 7);
- verifySmallIntFormatter("0057", 57, 4, 7);
- // too many digits for small int
- verifySmallIntFormatter("", 57, 5, 7);
- // too many digits for small int
- verifySmallIntFormatter("", 57, 5, 4);
- verifySmallIntFormatter("03", 3, 2, 3);
- verifySmallIntFormatter("32", 32, 2, 3);
- verifySmallIntFormatter("321", 321, 2, 3);
- verifySmallIntFormatter("219", 3219, 2, 3);
- verifySmallIntFormatter("4095", 4095, 2, 4);
- verifySmallIntFormatter("4095", 4095, 2, 5);
- verifySmallIntFormatter("", 4096, 2, 5);
-}
-
-void NumberFormat2Test::TestPositiveIntDigitFormatter() {
- DigitFormatter formatter;
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 4},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "0057",
- formatter,
- 57,
- 4,
- INT32_MAX,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 5},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "00057",
- formatter,
- 57,
- 5,
- INT32_MAX,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 5},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "01000",
- formatter,
- 1000,
- 5,
- INT32_MAX,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 3},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "100",
- formatter,
- 100,
- 0,
- INT32_MAX,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 10},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "2147483647",
- formatter,
- 2147483647,
- 5,
- INT32_MAX,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 12},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "002147483647",
- formatter,
- 2147483647,
- 12,
- INT32_MAX,
- expectedAttributes);
- }
- {
- // Test long digit string where we have to append one
- // character at a time.
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 40},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "0000000000000000000000000000002147483647",
- formatter,
- 2147483647,
- 40,
- INT32_MAX,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 4},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "6283",
- formatter,
- 186283,
- 2,
- 4,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "0",
- formatter,
- 186283,
- 0,
- 0,
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {0, -1, 0}};
- verifyPositiveIntDigitFormatter(
- "3",
- formatter,
- 186283,
- 1,
- 1,
- expectedAttributes);
- }
-}
-
-
-void NumberFormat2Test::TestDigitFormatterDefaultCtor() {
- DigitFormatter formatter;
- VisibleDigits digits;
- FixedPrecision precision;
- UErrorCode status = U_ZERO_ERROR;
- precision.initVisibleDigits(246.801, digits, status);
- assertSuccess("", status);
- DigitGrouping grouping;
- DigitFormatterOptions options;
- verifyDigitFormatter(
- "246.801",
- formatter,
- digits,
- grouping,
- options,
- NULL);
-}
-
-void NumberFormat2Test::TestDigitFormatterMonetary() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (!assertSuccess("", status)) {
- return;
- }
- symbols.setSymbol(
- DecimalFormatSymbols::kMonetarySeparatorSymbol,
- "decimal separator");
- symbols.setSymbol(
- DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol,
- "grouping separator");
- DigitFormatter formatter(symbols);
- VisibleDigits visibleDigits;
- DigitGrouping grouping;
- FixedPrecision precision;
- precision.initVisibleDigits(43560.02, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatterOptions options;
- grouping.fGrouping = 3;
- {
- verifyDigitFormatter(
- "43,560.02",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
- formatter.setDecimalFormatSymbolsForMonetary(symbols);
- verifyDigitFormatter(
- "43grouping separator560decimal separator02",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
- }
-}
-
-void NumberFormat2Test::TestDigitFormatter() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatter formatter(symbols);
- DigitInterval interval;
- {
- VisibleDigits visibleDigits;
- DigitGrouping grouping;
- FixedPrecision precision;
- precision.initVisibleDigits((int64_t) 8192, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatterOptions options;
- verifyDigitFormatter(
- "8192",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 4},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 4, 5},
- {0, -1, 0}};
- options.fAlwaysShowDecimal = TRUE;
- verifyDigitFormatter(
- "8192.",
- formatter,
- visibleDigits,
- grouping,
- options,
- expectedAttributes);
-
- // Turn on grouping
- grouping.fGrouping = 3;
- options.fAlwaysShowDecimal = FALSE;
- verifyDigitFormatter(
- "8,192",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
-
- // turn on min grouping which will suppress grouping
- grouping.fMinGrouping = 2;
- verifyDigitFormatter(
- "8192",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
-
- // adding one more digit will enable grouping once again.
- precision.initVisibleDigits((int64_t) 43560, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- verifyDigitFormatter(
- "43,560",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
- }
- {
- DigitGrouping grouping;
- FixedPrecision precision;
- VisibleDigits visibleDigits;
- precision.initVisibleDigits(
- 31415926.0078125, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatterOptions options;
- verifyDigitFormatter(
- "31415926.0078125",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
-
- // Turn on grouping with secondary.
- grouping.fGrouping = 2;
- grouping.fGrouping2 = 3;
- verifyDigitFormatter(
- "314,159,26.0078125",
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
-
- // Pad with zeros by widening interval.
- precision.fMin.setIntDigitCount(9);
- precision.fMin.setFracDigitCount(10);
- precision.initVisibleDigits(
- 31415926.0078125, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_GROUPING_SEPARATOR_FIELD, 1, 2},
- {UNUM_GROUPING_SEPARATOR_FIELD, 5, 6},
- {UNUM_GROUPING_SEPARATOR_FIELD, 9, 10},
- {UNUM_INTEGER_FIELD, 0, 12},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 12, 13},
- {UNUM_FRACTION_FIELD, 13, 23},
- {0, -1, 0}};
- verifyDigitFormatter(
- "0,314,159,26.0078125000",
- formatter,
- visibleDigits,
- grouping,
- options,
- expectedAttributes);
- }
- {
- DigitGrouping grouping;
- FixedPrecision precision;
- VisibleDigits visibleDigits;
- DigitFormatterOptions options;
- precision.fMax.setIntDigitCount(0);
- precision.fMax.setFracDigitCount(0);
- precision.initVisibleDigits(
- 3125.0, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {0, -1, 0}};
- verifyDigitFormatter(
- "0",
- formatter,
- visibleDigits,
- grouping,
- options,
- expectedAttributes);
- NumberFormat2Test_Attributes expectedAttributesWithDecimal[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {0, -1, 0}};
- options.fAlwaysShowDecimal = TRUE;
- verifyDigitFormatter(
- "0.",
- formatter,
- visibleDigits,
- grouping,
- options,
- expectedAttributesWithDecimal);
- }
- {
- DigitGrouping grouping;
- FixedPrecision precision;
- VisibleDigits visibleDigits;
- DigitFormatterOptions options;
- precision.fMax.setIntDigitCount(1);
- precision.fMin.setFracDigitCount(1);
- precision.initVisibleDigits(
- 3125.0, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_FRACTION_FIELD, 2, 3},
- {0, -1, 0}};
- options.fAlwaysShowDecimal = TRUE;
- verifyDigitFormatter(
- "5.0",
- formatter,
- visibleDigits,
- grouping,
- options,
- expectedAttributes);
- }
-}
-
-void NumberFormat2Test::TestSciFormatterDefaultCtor() {
- DigitFormatter formatter;
- ScientificPrecision precision;
- VisibleDigitsWithExponent visibleDigits;
- UErrorCode status = U_ZERO_ERROR;
- precision.initVisibleDigitsWithExponent(
- 6.02E23, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- SciFormatterOptions options;
- verifySciFormatter(
- "6.02E23",
- formatter,
- visibleDigits,
- options,
- NULL);
- precision.initVisibleDigitsWithExponent(
- 6.62E-34, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- verifySciFormatter(
- "6.62E-34",
- formatter,
- visibleDigits,
- options,
- NULL);
-}
-
-void NumberFormat2Test::TestSciFormatter() {
- DigitFormatter formatter;
- ScientificPrecision precision;
- precision.fMantissa.fMin.setIntDigitCount(4);
- precision.fMantissa.fMax.setIntDigitCount(4);
- precision.fMantissa.fMin.setFracDigitCount(0);
- precision.fMantissa.fMax.setFracDigitCount(0);
- precision.fMinExponentDigits = 3;
- VisibleDigitsWithExponent visibleDigits;
- UErrorCode status = U_ZERO_ERROR;
- precision.initVisibleDigitsWithExponent(
- 1.248E26, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- SciFormatterOptions options;
-
- {
- options.fExponent.fAlwaysShowSign = TRUE;
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 4},
- {UNUM_EXPONENT_SYMBOL_FIELD, 4, 5},
- {UNUM_EXPONENT_SIGN_FIELD, 5, 6},
- {UNUM_EXPONENT_FIELD, 6, 9},
- {0, -1, 0}};
- verifySciFormatter(
- "1248E+023",
- formatter,
- visibleDigits,
- options,
- expectedAttributes);
- }
- {
- options.fMantissa.fAlwaysShowDecimal = TRUE;
- options.fExponent.fAlwaysShowSign = FALSE;
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 4},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 4, 5},
- {UNUM_EXPONENT_SYMBOL_FIELD, 5, 6},
- {UNUM_EXPONENT_FIELD, 6, 9},
- {0, -1, 0}};
- verifySciFormatter(
- "1248.E023",
- formatter,
- visibleDigits,
- options,
- expectedAttributes);
- }
-}
-
-void NumberFormat2Test::TestValueFormatterIsFastFormattable() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatter formatter(symbols);
- DigitGrouping grouping;
- FixedPrecision precision;
- DigitFormatterOptions options;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("", vf.isFastFormattable(0));
- assertTrue("", vf.isFastFormattable(35));
- assertTrue("", vf.isFastFormattable(-48));
- assertTrue("", vf.isFastFormattable(2147483647));
- assertTrue("", vf.isFastFormattable(-2147483647));
- assertFalse("", vf.isFastFormattable(-2147483648L));
- {
- DigitGrouping grouping;
- grouping.fGrouping = 3;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("0", vf.isFastFormattable(0));
- assertTrue("62", vf.isFastFormattable(62));
- assertTrue("999", vf.isFastFormattable(999));
- assertFalse("1000", vf.isFastFormattable(1000));
- assertTrue("-1", vf.isFastFormattable(-1));
- assertTrue("-38", vf.isFastFormattable(-38));
- assertTrue("-999", vf.isFastFormattable(-999));
- assertFalse("-1000", vf.isFastFormattable(-1000));
- grouping.fMinGrouping = 2;
- assertTrue("-1000", vf.isFastFormattable(-1000));
- assertTrue("-4095", vf.isFastFormattable(-4095));
- assertTrue("4095", vf.isFastFormattable(4095));
- // We give up on acounting digits at 4096
- assertFalse("-4096", vf.isFastFormattable(-4096));
- assertFalse("4096", vf.isFastFormattable(4096));
- }
- {
- // grouping on but with max integer digits set.
- DigitGrouping grouping;
- grouping.fGrouping = 4;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(4);
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("-4096", vf.isFastFormattable(-4096));
- assertTrue("4096", vf.isFastFormattable(4096));
- assertTrue("-10000", vf.isFastFormattable(-10000));
- assertTrue("10000", vf.isFastFormattable(10000));
- assertTrue("-2147483647", vf.isFastFormattable(-2147483647));
- assertTrue("2147483647", vf.isFastFormattable(2147483647));
-
- precision.fMax.setIntDigitCount(5);
- assertFalse("-4096", vf.isFastFormattable(-4096));
- assertFalse("4096", vf.isFastFormattable(4096));
-
- }
- {
- // grouping on but with min integer digits set.
- DigitGrouping grouping;
- grouping.fGrouping = 3;
- FixedPrecision precision;
- precision.fMin.setIntDigitCount(3);
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("-999", vf.isFastFormattable(-999));
- assertTrue("999", vf.isFastFormattable(999));
- assertFalse("-1000", vf.isFastFormattable(-1000));
- assertFalse("1000", vf.isFastFormattable(1000));
-
- precision.fMin.setIntDigitCount(4);
- assertFalse("-999", vf.isFastFormattable(-999));
- assertFalse("999", vf.isFastFormattable(999));
- assertFalse("-2147483647", vf.isFastFormattable(-2147483647));
- assertFalse("2147483647", vf.isFastFormattable(2147483647));
- }
- {
- // options set.
- DigitFormatterOptions options;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("5125", vf.isFastFormattable(5125));
- options.fAlwaysShowDecimal = TRUE;
- assertFalse("5125", vf.isFastFormattable(5125));
- options.fAlwaysShowDecimal = FALSE;
- assertTrue("5125", vf.isFastFormattable(5125));
- }
- {
- // test fraction digits
- FixedPrecision precision;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("7127", vf.isFastFormattable(7127));
- precision.fMin.setFracDigitCount(1);
- assertFalse("7127", vf.isFastFormattable(7127));
- }
- {
- // test presence of significant digits
- FixedPrecision precision;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("1049", vf.isFastFormattable(1049));
- precision.fSignificant.setMin(1);
- assertFalse("1049", vf.isFastFormattable(1049));
- }
- {
- // test presence of rounding increment
- FixedPrecision precision;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter, grouping, precision, options);
- assertTrue("1099", vf.isFastFormattable(1099));
- precision.fRoundingIncrement.set(2.3);
- assertFalse("1099", vf.isFastFormattable(1099));
- }
- {
- // test scientific notation
- ScientificPrecision precision;
- SciFormatterOptions options;
- ValueFormatter vf;
- vf.prepareScientificFormatting(
- formatter, precision, options);
- assertFalse("1081", vf.isFastFormattable(1081));
- }
-}
-
-void NumberFormat2Test::TestDigitAffix() {
- DigitAffix affix;
- {
- affix.append("foo");
- affix.append("--", UNUM_SIGN_FIELD);
- affix.append("%", UNUM_PERCENT_FIELD);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 3, 5},
- {UNUM_PERCENT_FIELD, 5, 6},
- {0, -1, 0}};
- verifyAffix("foo--%", affix, expectedAttributes);
- }
- {
- affix.remove();
- affix.append("USD", UNUM_CURRENCY_FIELD);
- affix.append(" ");
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 3},
- {0, -1, 0}};
- verifyAffix("USD ", affix, expectedAttributes);
- }
- {
- affix.setTo("%%", UNUM_PERCENT_FIELD);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_PERCENT_FIELD, 0, 2},
- {0, -1, 0}};
- verifyAffix("%%", affix, expectedAttributes);
- }
-}
-
-void NumberFormat2Test::TestPluralAffix() {
- UErrorCode status = U_ZERO_ERROR;
- PluralAffix part;
- part.setVariant("one", "Dollar", status);
- part.setVariant("few", "DollarFew", status);
- part.setVariant("other", "Dollars", status);
- PluralAffix dollar(part);
- PluralAffix percent(part);
- part.remove();
- part.setVariant("one", "Percent", status);
- part.setVariant("many", "PercentMany", status);
- part.setVariant("other", "Percents", status);
- percent = part;
- part.remove();
- part.setVariant("one", "foo", status);
-
- PluralAffix pa;
- assertEquals("", "", pa.getOtherVariant().toString());
- pa.append(dollar, UNUM_CURRENCY_FIELD, status);
- pa.append(" and ");
- pa.append(percent, UNUM_PERCENT_FIELD, status);
- pa.append("-", UNUM_SIGN_FIELD);
-
- {
- // other
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 7},
- {UNUM_PERCENT_FIELD, 12, 20},
- {UNUM_SIGN_FIELD, 20, 21},
- {0, -1, 0}};
- verifyAffix(
- "Dollars and Percents-",
- pa.getByCategory("other"),
- expectedAttributes);
- }
- {
- // two which is same as other
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 7},
- {UNUM_PERCENT_FIELD, 12, 20},
- {UNUM_SIGN_FIELD, 20, 21},
- {0, -1, 0}};
- verifyAffix(
- "Dollars and Percents-",
- pa.getByCategory("two"),
- expectedAttributes);
- }
- {
- // bad which is same as other
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 7},
- {UNUM_PERCENT_FIELD, 12, 20},
- {UNUM_SIGN_FIELD, 20, 21},
- {0, -1, 0}};
- verifyAffix(
- "Dollars and Percents-",
- pa.getByCategory("bad"),
- expectedAttributes);
- }
- {
- // one
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 6},
- {UNUM_PERCENT_FIELD, 11, 18},
- {UNUM_SIGN_FIELD, 18, 19},
- {0, -1, 0}};
- verifyAffix(
- "Dollar and Percent-",
- pa.getByCategory("one"),
- expectedAttributes);
- }
- {
- // few
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 9},
- {UNUM_PERCENT_FIELD, 14, 22},
- {UNUM_SIGN_FIELD, 22, 23},
- {0, -1, 0}};
- verifyAffix(
- "DollarFew and Percents-",
- pa.getByCategory("few"),
- expectedAttributes);
- }
- {
- // many
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_CURRENCY_FIELD, 0, 7},
- {UNUM_PERCENT_FIELD, 12, 23},
- {UNUM_SIGN_FIELD, 23, 24},
- {0, -1, 0}};
- verifyAffix(
- "Dollars and PercentMany-",
- pa.getByCategory("many"),
- expectedAttributes);
- }
- assertTrue("", pa.hasMultipleVariants());
- pa.remove();
- pa.append("$$$", UNUM_CURRENCY_FIELD);
- assertFalse("", pa.hasMultipleVariants());
-
-}
-
-void NumberFormat2Test::TestCurrencyAffixInfo() {
- CurrencyAffixInfo info;
- assertTrue("", info.isDefault());
- UnicodeString expectedSymbol("\\u00a4");
- UnicodeString expectedSymbolIso("\\u00a4\\u00a4");
- UnicodeString expectedSymbols("\\u00a4\\u00a4\\u00a4");
- assertEquals("", expectedSymbol.unescape(), info.getSymbol());
- assertEquals("", expectedSymbolIso.unescape(), info.getISO());
- assertEquals("", expectedSymbols.unescape(), info.getLong().getByCategory("one").toString());
- assertEquals("", expectedSymbols.unescape(), info.getLong().getByCategory("other").toString());
- assertEquals("", expectedSymbols.unescape(), info.getLong().getByCategory("two").toString());
- UErrorCode status = U_ZERO_ERROR;
- static UChar USD[] = {0x55, 0x53, 0x44, 0x0};
- LocalPointer<PluralRules> rules(PluralRules::forLocale("en", status));
- if (!assertSuccess("", status)) {
- return;
- }
- info.set("en", rules.getAlias(), USD, status);
- assertEquals("", "$", info.getSymbol(), TRUE);
- assertEquals("", "USD", info.getISO(), TRUE);
- assertEquals("", "US dollar", info.getLong().getByCategory("one").toString(), TRUE);
- assertEquals("", "US dollars", info.getLong().getByCategory("other").toString(), TRUE);
- assertEquals("", "US dollars", info.getLong().getByCategory("two").toString(), TRUE);
- assertFalse("", info.isDefault());
- info.set(NULL, NULL, NULL, status);
- assertTrue("", info.isDefault());
- assertEquals("", expectedSymbol.unescape(), info.getSymbol());
- assertEquals("", expectedSymbolIso.unescape(), info.getISO());
- assertEquals("", expectedSymbols.unescape(), info.getLong().getByCategory("one").toString());
- assertEquals("", expectedSymbols.unescape(), info.getLong().getByCategory("other").toString());
- assertEquals("", expectedSymbols.unescape(), info.getLong().getByCategory("two").toString());
- info.setSymbol("$");
- assertFalse("", info.isDefault());
- info.set(NULL, NULL, NULL, status);
- assertTrue("", info.isDefault());
- info.setISO("USD");
- assertFalse("", info.isDefault());
- assertSuccess("", status);
-}
-
-void NumberFormat2Test::TestAffixPattern() {
- static UChar chars[500];
- for (int32_t i = 0; i < UPRV_LENGTHOF(chars); ++i) {
- chars[i] = (UChar) (i + 1);
- }
- AffixPattern first;
- first.add(AffixPattern::kPercent);
- first.addLiteral(chars, 0, 200);
- first.addLiteral(chars, 200, 300);
- first.addCurrency(2);
- first.addLiteral(chars, 0, 256);
- AffixPattern second;
- second.add(AffixPattern::kPercent);
- second.addLiteral(chars, 0, 300);
- second.addLiteral(chars, 300, 200);
- second.addCurrency(2);
- second.addLiteral(chars, 0, 150);
- second.addLiteral(chars, 150, 106);
- assertTrue("", first.equals(second));
- AffixPatternIterator iter;
- second.remove();
- assertFalse("", second.iterator(iter).nextToken());
- assertTrue("", first.iterator(iter).nextToken());
- assertEquals("", (int32_t)AffixPattern::kPercent, iter.getTokenType());
- assertEquals("", 1, iter.getTokenLength());
- assertTrue("", iter.nextToken());
- UnicodeString str;
- assertEquals("", 500, iter.getLiteral(str).length());
- assertEquals("", (int32_t)AffixPattern::kLiteral, iter.getTokenType());
- assertEquals("", 500, iter.getTokenLength());
- assertTrue("", iter.nextToken());
- assertEquals("", (int32_t)AffixPattern::kCurrency, iter.getTokenType());
- assertEquals("", 2, iter.getTokenLength());
- assertTrue("", iter.nextToken());
- assertEquals("", 256, iter.getLiteral(str).length());
- assertEquals("", (int32_t)AffixPattern::kLiteral, iter.getTokenType());
- assertEquals("", 256, iter.getTokenLength());
- assertFalse("", iter.nextToken());
-}
-
-void NumberFormat2Test::TestAffixPatternDoubleQuote() {
- UnicodeString str("'Don''t'");
- AffixPattern expected;
- // Don't
- static UChar chars[] = {0x44, 0x6F, 0x6E, 0x27, 0x74};
- expected.addLiteral(chars, 0, UPRV_LENGTHOF(chars));
- AffixPattern actual;
- UErrorCode status = U_ZERO_ERROR;
- AffixPattern::parseUserAffixString(str, actual, status);
- assertTrue("", expected.equals(actual));
- UnicodeString formattedString;
- assertEquals("", "Don''t", actual.toUserString(formattedString));
- assertSuccess("", status);
-}
-
-void NumberFormat2Test::TestAffixPatternParser() {
- UErrorCode status = U_ZERO_ERROR;
- static UChar USD[] = {0x55, 0x53, 0x44, 0x0};
- LocalPointer<PluralRules> rules(PluralRules::forLocale("en", status));
- DecimalFormatSymbols symbols("en", status);
- if (U_FAILURE(status)) {
- dataerrln("Error creating DecimalFormatSymbols - %s", u_errorName(status));
- return;
- }
- AffixPatternParser parser(symbols);
- CurrencyAffixInfo currencyAffixInfo;
- currencyAffixInfo.set("en", rules.getAlias(), USD, status);
- PluralAffix affix;
- UnicodeString str("'--y'''dz'%'\\u00a4\\u00a4\\u00a4\\u00a4 y '\\u00a4\\u00a4\\u00a4 or '\\u00a4\\u00a4 but '\\u00a4");
- str = str.unescape();
- assertSuccess("", status);
- AffixPattern affixPattern;
- parser.parse(
- AffixPattern::parseAffixString(str, affixPattern, status),
- currencyAffixInfo,
- affix,
- status);
- UnicodeString formattedStr;
- affixPattern.toString(formattedStr);
- UnicodeString expectedFormattedStr("'--y''dz'%'\\u00a4\\u00a4\\u00a4\\u00a4 y '\\u00a4\\u00a4\\u00a4 or '\\u00a4\\u00a4 but '\\u00a4");
- expectedFormattedStr = expectedFormattedStr.unescape();
- assertEquals("1", expectedFormattedStr, formattedStr);
- AffixPattern userAffixPattern;
- UnicodeString userStr("-'-'y'''d'z%\\u00a4\\u00a4\\u00a4'\\u00a4' y \\u00a4\\u00a4\\u00a4 or \\u00a4\\u00a4 but \\u00a4");
- userStr = userStr.unescape();
- AffixPattern::parseUserAffixString(userStr, userAffixPattern, status),
- assertTrue("", affixPattern.equals(userAffixPattern));
- AffixPattern userAffixPattern2;
- UnicodeString formattedUserStr;
- AffixPattern::parseUserAffixString(
- userAffixPattern.toUserString(formattedUserStr),
- userAffixPattern2,
- status);
- UnicodeString expectedFormattedUserStr(
- "-'-'y''dz%\\u00a4\\u00a4\\u00a4'\\u00a4' y \\u00a4\\u00a4\\u00a4 or \\u00a4\\u00a4 but \\u00a4");
- assertEquals("2", expectedFormattedUserStr.unescape(), formattedUserStr);
- assertTrue("", userAffixPattern2.equals(userAffixPattern));
- assertSuccess("", status);
- assertTrue("", affixPattern.usesCurrency());
- assertTrue("", affixPattern.usesPercent());
- assertFalse("", affixPattern.usesPermill());
- assertTrue("", affix.hasMultipleVariants());
- {
- // other
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 1},
- {UNUM_PERCENT_FIELD, 6, 7},
- {UNUM_CURRENCY_FIELD, 7, 17},
- {UNUM_CURRENCY_FIELD, 21, 31},
- {UNUM_CURRENCY_FIELD, 35, 38},
- {UNUM_CURRENCY_FIELD, 43, 44},
- {0, -1, 0}};
- verifyAffix(
- "--y'dz%US dollars\\u00a4 y US dollars or USD but $",
- affix.getByCategory("other"),
- expectedAttributes);
- }
- {
- // one
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 1},
- {UNUM_PERCENT_FIELD, 6, 7},
- {UNUM_CURRENCY_FIELD, 7, 16},
- {UNUM_CURRENCY_FIELD, 20, 29},
- {UNUM_CURRENCY_FIELD, 33, 36},
- {UNUM_CURRENCY_FIELD, 41, 42},
- {0, -1, 0}};
- verifyAffix(
- "--y'dz%US dollar\\u00a4 y US dollar or USD but $",
- affix.getByCategory("one"),
- expectedAttributes);
- }
- affix.remove();
- str = "%'-";
- affixPattern.remove();
- parser.parse(
- AffixPattern::parseAffixString(str, affixPattern, status),
- currencyAffixInfo,
- affix,
- status);
- assertSuccess("", status);
- assertFalse("", affixPattern.usesCurrency());
- assertFalse("", affixPattern.usesPercent());
- assertFalse("", affixPattern.usesPermill());
- assertFalse("", affix.hasMultipleVariants());
- {
- // other
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 1, 2},
- {0, -1, 0}};
- verifyAffix(
- "%-",
- affix.getByCategory("other"),
- expectedAttributes);
- }
- UnicodeString a4("\\u00a4");
- AffixPattern scratchPattern;
- AffixPattern::parseAffixString(a4.unescape(), scratchPattern, status);
- assertFalse("", scratchPattern.usesCurrency());
-
- // Test really long string > 256 chars.
- str = "'\\u2030012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789";
- str = str.unescape();
- affixPattern.remove();
- affix.remove();
- parser.parse(
- AffixPattern::parseAffixString(str, affixPattern, status),
- currencyAffixInfo,
- affix,
- status);
- assertSuccess("", status);
- assertFalse("", affixPattern.usesCurrency());
- assertFalse("", affixPattern.usesPercent());
- assertTrue("", affixPattern.usesPermill());
- assertFalse("", affix.hasMultipleVariants());
- {
- UnicodeString expected =
- "\\u2030012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789"
- "012345678901234567890123456789012345678901234567890123456789";
- expected = expected.unescape();
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_PERMILL_FIELD, 0, 1},
- {0, -1, 0}};
- verifyAffix(
- expected,
- affix.getOtherVariant(),
- expectedAttributes);
- }
-}
-
-void NumberFormat2Test::TestAffixPatternAppend() {
- AffixPattern pattern;
- UErrorCode status = U_ZERO_ERROR;
- UnicodeString patternStr("%\\u2030");
- AffixPattern::parseUserAffixString(
- patternStr.unescape(), pattern, status);
-
- AffixPattern appendPattern;
- UnicodeString appendPatternStr("-\\u00a4\\u00a4*");
- AffixPattern::parseUserAffixString(
- appendPatternStr.unescape(), appendPattern, status);
-
- AffixPattern expectedPattern;
- UnicodeString expectedPatternStr("%\\u2030-\\u00a4\\u00a4*");
- AffixPattern::parseUserAffixString(
- expectedPatternStr.unescape(), expectedPattern, status);
-
- assertTrue("", pattern.append(appendPattern).equals(expectedPattern));
- assertSuccess("", status);
-}
-
-void NumberFormat2Test::TestAffixPatternAppendAjoiningLiterals() {
- AffixPattern pattern;
- UErrorCode status = U_ZERO_ERROR;
- UnicodeString patternStr("%baaa");
- AffixPattern::parseUserAffixString(
- patternStr, pattern, status);
-
- AffixPattern appendPattern;
- UnicodeString appendPatternStr("caa%");
- AffixPattern::parseUserAffixString(
- appendPatternStr, appendPattern, status);
-
- AffixPattern expectedPattern;
- UnicodeString expectedPatternStr("%baaacaa%");
- AffixPattern::parseUserAffixString(
- expectedPatternStr, expectedPattern, status);
-
- assertTrue("", pattern.append(appendPattern).equals(expectedPattern));
- assertSuccess("", status);
-}
-
-void NumberFormat2Test::TestLargeIntValue() {
- VisibleDigits digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
-
- // Last 18 digits for int values.
- verifyIntValue(
- 223372036854775807LL,
- precision.initVisibleDigits(U_INT64_MAX, digits, status));
- assertSuccess("U_INT64_MAX", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(5);
-
- // Last 18 digits for int values.
- verifyIntValue(
- 75807LL,
- precision.initVisibleDigits(U_INT64_MAX, digits, status));
- verifySource(75807.0, digits);
- assertSuccess("75807", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
-
- // Last 18 digits for int values.
- verifyIntValue(
- 223372036854775808LL,
- precision.initVisibleDigits(U_INT64_MIN, digits, status));
- assertSuccess("U_INT64_MIN", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(5);
-
- // Last 18 digits for int values.
- verifyIntValue(
- 75808LL,
- precision.initVisibleDigits(U_INT64_MIN, digits, status));
- verifySource(75808.0, digits);
- assertSuccess("75808", status);
- }
-
-}
-
-void NumberFormat2Test::TestIntInitVisibleDigits() {
- VisibleDigits digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "13",
- FALSE,
- precision.initVisibleDigits((int64_t) 13LL, digits, status));
- assertSuccess("13", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "17",
- TRUE,
- precision.initVisibleDigits((int64_t) -17LL, digits, status));
- assertSuccess("-17", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "9223372036854775808",
- TRUE,
- precision.initVisibleDigits(U_INT64_MIN, digits, status));
- assertSuccess("-9223372036854775808", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "9223372036854775807",
- FALSE,
- precision.initVisibleDigits(U_INT64_MAX, digits, status));
- assertSuccess("9223372036854775807", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "31536000",
- TRUE,
- precision.initVisibleDigits((int64_t) -31536000LL, digits, status));
- assertSuccess("-31536000", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "0",
- FALSE,
- precision.initVisibleDigits((int64_t) 0LL, digits, status));
- assertSuccess("0", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMin.setIntDigitCount(4);
- precision.fMin.setFracDigitCount(2);
- verifyVisibleDigits(
- "0000.00",
- FALSE,
- precision.initVisibleDigits((int64_t) 0LL, digits, status));
- assertSuccess("0", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMin.setIntDigitCount(4);
- precision.fMin.setFracDigitCount(2);
- verifyVisibleDigits(
- "0057.00",
- FALSE,
- precision.initVisibleDigits((int64_t) 57LL, digits, status));
- assertSuccess("57", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMin.setIntDigitCount(4);
- precision.fMin.setFracDigitCount(2);
- verifyVisibleDigits(
- "0057.00",
- TRUE,
- precision.initVisibleDigits((int64_t) -57LL, digits, status));
- assertSuccess("-57", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(2);
- precision.fMin.setFracDigitCount(1);
- verifyVisibleDigits(
- "35.0",
- FALSE,
- precision.initVisibleDigits((int64_t) 235LL, digits, status));
- assertSuccess("235", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(2);
- precision.fMin.setFracDigitCount(1);
- precision.fFailIfOverMax = TRUE;
- precision.initVisibleDigits((int64_t) 239LL, digits, status);
- if (status != U_ILLEGAL_ARGUMENT_ERROR) {
- errln("239: Expected U_ILLEGAL_ARGUMENT_ERROR");
- }
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMin(5);
- verifyVisibleDigits(
- "153.00",
- FALSE,
- precision.initVisibleDigits((int64_t) 153LL, digits, status));
- assertSuccess("153", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(2);
- precision.fExactOnly = TRUE;
- precision.initVisibleDigits((int64_t) 154LL, digits, status);
- if (status != U_FORMAT_INEXACT_ERROR) {
- errln("154: Expected U_FORMAT_INEXACT_ERROR");
- }
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(5);
- verifyVisibleDigits(
- "150",
- FALSE,
- precision.initVisibleDigits((int64_t) 150LL, digits, status));
- assertSuccess("150", status);
- }
-}
-
-void NumberFormat2Test::TestIntInitVisibleDigitsToDigitList() {
- VisibleDigits digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fRoundingIncrement.set(7.3);
- verifyVisibleDigits(
- "29.2",
- TRUE,
- precision.initVisibleDigits((int64_t) -30LL, digits, status));
- assertSuccess("-29.2", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fRoundingIncrement.set(7.3);
- precision.fRoundingMode = DecimalFormat::kRoundFloor;
- verifyVisibleDigits(
- "36.5",
- TRUE,
- precision.initVisibleDigits((int64_t) -30LL, digits, status));
- assertSuccess("-36.5", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(3);
- precision.fRoundingMode = DecimalFormat::kRoundCeiling;
- verifyVisibleDigits(
- "1390",
- FALSE,
- precision.initVisibleDigits((int64_t) 1381LL, digits, status));
- assertSuccess("1390", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(1);
- precision.fRoundingMode = DecimalFormat::kRoundFloor;
- verifyVisibleDigits(
- "2000",
- TRUE,
- precision.initVisibleDigits((int64_t) -1381LL, digits, status));
- assertSuccess("-2000", status);
- }
-}
-
-void NumberFormat2Test::TestDoubleInitVisibleDigits() {
- VisibleDigits digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "2.05",
- FALSE,
- precision.initVisibleDigits(2.05, digits, status));
- assertSuccess("2.05", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- verifyVisibleDigits(
- "3547",
- FALSE,
- precision.initVisibleDigits(3547.0, digits, status));
- assertSuccess("3547", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setFracDigitCount(2);
- precision.fMax.setIntDigitCount(1);
- precision.fFailIfOverMax = TRUE;
- precision.fExactOnly = TRUE;
- verifyVisibleDigits(
- "2.05",
- TRUE,
- precision.initVisibleDigits(-2.05, digits, status));
- assertSuccess("-2.05", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setFracDigitCount(1);
- precision.fMax.setIntDigitCount(1);
- precision.fFailIfOverMax = TRUE;
- precision.fExactOnly = TRUE;
- precision.initVisibleDigits(-2.05, digits, status);
- if (status != U_FORMAT_INEXACT_ERROR) {
- errln("6245.3: Expected U_FORMAT_INEXACT_ERROR");
- }
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setFracDigitCount(2);
- precision.fMax.setIntDigitCount(0);
- precision.fFailIfOverMax = TRUE;
- precision.fExactOnly = TRUE;
- precision.initVisibleDigits(-2.05, digits, status);
- if (status != U_ILLEGAL_ARGUMENT_ERROR) {
- errln("-2.05: Expected U_ILLEGAL_ARGUMENT_ERROR");
- }
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMin.setIntDigitCount(5);
- precision.fMin.setFracDigitCount(2);
- precision.fExactOnly = TRUE;
- verifyVisibleDigits(
- "06245.30",
- FALSE,
- precision.initVisibleDigits(6245.3, digits, status));
- assertSuccess("06245.30", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(5);
- precision.fExactOnly = TRUE;
- verifyVisibleDigits(
- "6245.3",
- FALSE,
- precision.initVisibleDigits(6245.3, digits, status));
- assertSuccess("6245.3", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(4);
- precision.fExactOnly = TRUE;
- precision.initVisibleDigits(6245.3, digits, status);
- if (status != U_FORMAT_INEXACT_ERROR) {
- errln("6245.3: Expected U_FORMAT_INEXACT_ERROR");
- }
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(3);
- precision.fMin.setFracDigitCount(2);
- verifyVisibleDigits(
- "384.90",
- FALSE,
- precision.initVisibleDigits(2384.9, digits, status));
- assertSuccess("380.00", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(3);
- precision.fMin.setFracDigitCount(2);
- precision.fFailIfOverMax = TRUE;
- precision.initVisibleDigits(2384.9, digits, status);
- if (status != U_ILLEGAL_ARGUMENT_ERROR) {
- errln("2384.9: Expected U_ILLEGAL_ARGUMENT_ERROR");
- }
- }
-}
-
-void NumberFormat2Test::TestDoubleInitVisibleDigitsToDigitList() {
- VisibleDigits digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- // 2.01 produces round off error when multiplied by powers of
- // 10 forcing the use of DigitList.
- verifyVisibleDigits(
- "2.01",
- TRUE,
- precision.initVisibleDigits(-2.01, digits, status));
- assertSuccess("-2.01", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(3);
- precision.fMin.setFracDigitCount(2);
- verifyVisibleDigits(
- "2380.00",
- FALSE,
- precision.initVisibleDigits(2385.0, digits, status));
- assertSuccess("2380.00", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setFracDigitCount(2);
- verifyVisibleDigits(
- "45.83",
- TRUE,
- precision.initVisibleDigits(-45.8251, digits, status));
- assertSuccess("45.83", status);
- }
-}
-
-void NumberFormat2Test::TestDigitListInitVisibleDigits() {
- VisibleDigits digits;
- DigitList dlist;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fMax.setIntDigitCount(3);
- precision.fMin.setFracDigitCount(2);
- precision.fFailIfOverMax = TRUE;
- dlist.set(2384.9);
- precision.initVisibleDigits(dlist, digits, status);
- if (status != U_ILLEGAL_ARGUMENT_ERROR) {
- errln("2384.9: Expected U_ILLEGAL_ARGUMENT_ERROR");
- }
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(4);
- precision.fExactOnly = TRUE;
- dlist.set(6245.3);
- precision.initVisibleDigits(dlist, digits, status);
- if (status != U_FORMAT_INEXACT_ERROR) {
- errln("6245.3: Expected U_FORMAT_INEXACT_ERROR");
- }
- }
-}
-
-void NumberFormat2Test::TestSpecialInitVisibleDigits() {
- VisibleDigits digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.fSignificant.setMax(3);
- precision.fMin.setFracDigitCount(2);
- precision.initVisibleDigits(-uprv_getInfinity(), digits, status);
- assertFalse("", digits.isNaN());
- assertTrue("", digits.isInfinite());
- assertTrue("", digits.isNegative());
- assertSuccess("-Inf", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.initVisibleDigits(uprv_getInfinity(), digits, status);
- assertFalse("", digits.isNaN());
- assertTrue("", digits.isInfinite());
- assertFalse("", digits.isNegative());
- assertSuccess("Inf", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- FixedPrecision precision;
- precision.initVisibleDigits(uprv_getNaN(), digits, status);
- assertTrue("", digits.isNaN());
- assertSuccess("Inf", status);
- }
-}
-
-void NumberFormat2Test::TestVisibleDigitsWithExponent() {
- VisibleDigitsWithExponent digits;
- {
- UErrorCode status = U_ZERO_ERROR;
- ScientificPrecision precision;
- precision.initVisibleDigitsWithExponent(389.256, digits, status);
- verifyVisibleDigitsWithExponent(
- "3.89256E2", FALSE, digits);
- assertSuccess("3.89256E2", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- ScientificPrecision precision;
- precision.initVisibleDigitsWithExponent(-389.256, digits, status);
- verifyVisibleDigitsWithExponent(
- "3.89256E2", TRUE, digits);
- assertSuccess("-3.89256E2", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- ScientificPrecision precision;
- precision.fMinExponentDigits = 3;
- precision.fMantissa.fMin.setIntDigitCount(1);
- precision.fMantissa.fMax.setIntDigitCount(3);
- precision.initVisibleDigitsWithExponent(12345.67, digits, status);
- verifyVisibleDigitsWithExponent(
- "12.34567E003", FALSE, digits);
- assertSuccess("12.34567E003", status);
- }
- {
- UErrorCode status = U_ZERO_ERROR;
- ScientificPrecision precision;
- precision.fMantissa.fRoundingIncrement.set(0.073);
- precision.fMantissa.fMin.setIntDigitCount(2);
- precision.fMantissa.fMax.setIntDigitCount(2);
- precision.initVisibleDigitsWithExponent(999.74, digits, status);
- verifyVisibleDigitsWithExponent(
- "10.001E2", FALSE, digits);
- assertSuccess("10.001E2", status);
- }
-}
-
-void NumberFormat2Test::TestDigitAffixesAndPadding() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatter formatter(symbols);
- DigitGrouping grouping;
- grouping.fGrouping = 3;
- FixedPrecision precision;
- DigitFormatterOptions options;
- options.fAlwaysShowDecimal = TRUE;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter,
- grouping,
- precision,
- options);
- DigitAffixesAndPadding aap;
- aap.fPositivePrefix.append("(+", UNUM_SIGN_FIELD);
- aap.fPositiveSuffix.append("+)", UNUM_SIGN_FIELD);
- aap.fNegativePrefix.append("(-", UNUM_SIGN_FIELD);
- aap.fNegativeSuffix.append("-)", UNUM_SIGN_FIELD);
- aap.fWidth = 10;
- aap.fPadPosition = DigitAffixesAndPadding::kPadBeforePrefix;
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 4, 6},
- {UNUM_INTEGER_FIELD, 6, 7},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8},
- {UNUM_SIGN_FIELD, 8, 10},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "****(+3.+)",
- aap,
- 3,
- vf,
- NULL,
- expectedAttributes);
- }
- aap.fPadPosition = DigitAffixesAndPadding::kPadAfterPrefix;
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 2},
- {UNUM_INTEGER_FIELD, 6, 7},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8},
- {UNUM_SIGN_FIELD, 8, 10},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "(+****3.+)",
- aap,
- 3,
- vf,
- NULL,
- expectedAttributes);
- }
- aap.fPadPosition = DigitAffixesAndPadding::kPadBeforeSuffix;
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 2},
- {UNUM_INTEGER_FIELD, 2, 3},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 3, 4},
- {UNUM_SIGN_FIELD, 8, 10},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "(+3.****+)",
- aap,
- 3,
- vf,
- NULL,
- expectedAttributes);
- }
- aap.fPadPosition = DigitAffixesAndPadding::kPadAfterSuffix;
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 2},
- {UNUM_INTEGER_FIELD, 2, 3},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 3, 4},
- {UNUM_SIGN_FIELD, 4, 6},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "(+3.+)****",
- aap,
- 3,
- vf,
- NULL,
- expectedAttributes);
- }
- aap.fPadPosition = DigitAffixesAndPadding::kPadAfterSuffix;
- {
- DigitList digits;
- digits.set(-1234.5);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 2},
- {UNUM_GROUPING_SEPARATOR_FIELD, 3, 4},
- {UNUM_INTEGER_FIELD, 2, 7},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8},
- {UNUM_FRACTION_FIELD, 8, 9},
- {UNUM_SIGN_FIELD, 9, 11},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "(-1,234.5-)",
- aap,
- digits,
- vf,
- NULL,
- expectedAttributes);
- }
- assertFalse("", aap.needsPluralRules());
-
- aap.fWidth = 0;
- aap.fPositivePrefix.remove();
- aap.fPositiveSuffix.remove();
- aap.fNegativePrefix.remove();
- aap.fNegativeSuffix.remove();
-
- // Set up for plural currencies.
- aap.fNegativePrefix.append("-", UNUM_SIGN_FIELD);
- {
- PluralAffix part;
- part.setVariant("one", " Dollar", status);
- part.setVariant("other", " Dollars", status);
- aap.fPositiveSuffix.append(part, UNUM_CURRENCY_FIELD, status);
- }
- aap.fNegativeSuffix = aap.fPositiveSuffix;
-
- LocalPointer<PluralRules> rules(PluralRules::forLocale("en", status));
- if (!assertSuccess("", status)) {
- return;
- }
-
- // Exercise the fastrack path
- {
- options.fAlwaysShowDecimal = FALSE;
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 1},
- {UNUM_INTEGER_FIELD, 1, 3},
- {UNUM_CURRENCY_FIELD, 3, 11},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "-45 Dollars",
- aap,
- -45,
- vf,
- NULL,
- expectedAttributes);
- options.fAlwaysShowDecimal = TRUE;
- }
-
- // Now test plurals
- assertTrue("", aap.needsPluralRules());
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_CURRENCY_FIELD, 2, 9},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "1. Dollar",
- aap,
- 1,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 1},
- {UNUM_INTEGER_FIELD, 1, 2},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3},
- {UNUM_CURRENCY_FIELD, 3, 10},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "-1. Dollar",
- aap,
- -1,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- precision.fMin.setFracDigitCount(2);
- {
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_FRACTION_FIELD, 2, 4},
- {UNUM_CURRENCY_FIELD, 4, 12},
- {0, -1, 0}};
- verifyAffixesAndPaddingInt32(
- "1.00 Dollars",
- aap,
- 1,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
-}
-
-void NumberFormat2Test::TestPluralsAndRounding() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatter formatter(symbols);
- DigitGrouping grouping;
- FixedPrecision precision;
- precision.fSignificant.setMax(3);
- DigitFormatterOptions options;
- ValueFormatter vf;
- vf.prepareFixedDecimalFormatting(
- formatter,
- grouping,
- precision,
- options);
- DigitList digits;
- DigitAffixesAndPadding aap;
- // Set up for plural currencies.
- aap.fNegativePrefix.append("-", UNUM_SIGN_FIELD);
- {
- PluralAffix part;
- part.setVariant("one", " Dollar", status);
- part.setVariant("other", " Dollars", status);
- aap.fPositiveSuffix.append(part, UNUM_CURRENCY_FIELD, status);
- }
- aap.fNegativeSuffix = aap.fPositiveSuffix;
- aap.fWidth = 14;
- LocalPointer<PluralRules> rules(PluralRules::forLocale("en", status));
- if (!assertSuccess("", status)) {
- return;
- }
- {
- digits.set(0.999);
- verifyAffixesAndPadding(
- "*0.999 Dollars",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- {
- digits.set(0.9996);
- verifyAffixesAndPadding(
- "******1 Dollar",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- {
- digits.set(1.004);
- verifyAffixesAndPadding(
- "******1 Dollar",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- precision.fSignificant.setMin(2);
- {
- digits.set(0.9996);
- verifyAffixesAndPadding(
- "***1.0 Dollars",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- {
- digits.set(1.004);
- verifyAffixesAndPadding(
- "***1.0 Dollars",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- precision.fSignificant.setMin(0);
- {
- digits.set(-79.214);
- verifyAffixesAndPadding(
- "*-79.2 Dollars",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- // No more sig digits just max fractions
- precision.fSignificant.setMax(0);
- precision.fMax.setFracDigitCount(4);
- {
- digits.set(79.213562);
- verifyAffixesAndPadding(
- "79.2136 Dollars",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
-
-}
-
-
-void NumberFormat2Test::TestPluralsAndRoundingScientific() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (!assertSuccess("", status)) {
- return;
- }
- DigitFormatter formatter(symbols);
- ScientificPrecision precision;
- precision.fMantissa.fSignificant.setMax(4);
- SciFormatterOptions options;
- ValueFormatter vf;
- vf.prepareScientificFormatting(
- formatter,
- precision,
- options);
- DigitList digits;
- DigitAffixesAndPadding aap;
- aap.fNegativePrefix.append("-", UNUM_SIGN_FIELD);
- {
- PluralAffix part;
- part.setVariant("one", " Meter", status);
- part.setVariant("other", " Meters", status);
- aap.fPositiveSuffix.append(part, UNUM_FIELD_COUNT, status);
- }
- aap.fNegativeSuffix = aap.fPositiveSuffix;
- LocalPointer<PluralRules> rules(PluralRules::forLocale("en", status));
- if (!assertSuccess("", status)) {
- return;
- }
- {
- digits.set(0.99996);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_EXPONENT_SYMBOL_FIELD, 1, 2},
- {UNUM_EXPONENT_FIELD, 2, 3},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "1E0 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- options.fMantissa.fAlwaysShowDecimal = TRUE;
- {
- digits.set(0.99996);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_EXPONENT_SYMBOL_FIELD, 2, 3},
- {UNUM_EXPONENT_FIELD, 3, 4},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "1.E0 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- {
- digits.set(-299792458.0);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_SIGN_FIELD, 0, 1},
- {UNUM_INTEGER_FIELD, 1, 2},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3},
- {UNUM_FRACTION_FIELD, 3, 6},
- {UNUM_EXPONENT_SYMBOL_FIELD, 6, 7},
- {UNUM_EXPONENT_FIELD, 7, 8},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "-2.998E8 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- precision.fMantissa.fSignificant.setMin(4);
- options.fExponent.fAlwaysShowSign = TRUE;
- precision.fMinExponentDigits = 3;
- {
- digits.set(3.0);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_FRACTION_FIELD, 2, 5},
- {UNUM_EXPONENT_SYMBOL_FIELD, 5, 6},
- {UNUM_EXPONENT_SIGN_FIELD, 6, 7},
- {UNUM_EXPONENT_FIELD, 7, 10},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "3.000E+000 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- precision.fMantissa.fMax.setIntDigitCount(3);
- {
- digits.set(0.00025001);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 3},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 3, 4},
- {UNUM_FRACTION_FIELD, 4, 5},
- {UNUM_EXPONENT_SYMBOL_FIELD, 5, 6},
- {UNUM_EXPONENT_SIGN_FIELD, 6, 7},
- {UNUM_EXPONENT_FIELD, 7, 10},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "250.0E-006 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- {
- digits.set(0.0000025001);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_FRACTION_FIELD, 2, 5},
- {UNUM_EXPONENT_SYMBOL_FIELD, 5, 6},
- {UNUM_EXPONENT_SIGN_FIELD, 6, 7},
- {UNUM_EXPONENT_FIELD, 7, 10},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "2.500E-006 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- precision.fMantissa.fMax.setFracDigitCount(1);
- {
- digits.set(0.0000025499);
- NumberFormat2Test_Attributes expectedAttributes[] = {
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_DECIMAL_SEPARATOR_FIELD, 1, 2},
- {UNUM_FRACTION_FIELD, 2, 3},
- {UNUM_EXPONENT_SYMBOL_FIELD, 3, 4},
- {UNUM_EXPONENT_SIGN_FIELD, 4, 5},
- {UNUM_EXPONENT_FIELD, 5, 8},
- {0, -1, 0}};
- verifyAffixesAndPadding(
- "2.5E-006 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- expectedAttributes);
- }
- precision.fMantissa.fMax.setIntDigitCount(1);
- precision.fMantissa.fMax.setFracDigitCount(2);
- {
- digits.set((int32_t)299792458);
- verifyAffixesAndPadding(
- "3.00E+008 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- // clear significant digits
- precision.fMantissa.fSignificant.setMin(0);
- precision.fMantissa.fSignificant.setMax(0);
-
- // set int and fraction digits
- precision.fMantissa.fMin.setFracDigitCount(2);
- precision.fMantissa.fMax.setFracDigitCount(4);
- precision.fMantissa.fMin.setIntDigitCount(2);
- precision.fMantissa.fMax.setIntDigitCount(3);
- {
- digits.set(-0.0000025300001);
- verifyAffixesAndPadding(
- "-253.00E-008 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- {
- digits.set(-0.0000025300006);
- verifyAffixesAndPadding(
- "-253.0001E-008 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
- {
- digits.set(-0.000025300006);
- verifyAffixesAndPadding(
- "-25.30E-006 Meters",
- aap,
- digits,
- vf,
- rules.getAlias(),
- NULL);
- }
-}
-
-
-void NumberFormat2Test::TestRoundingIncrement() {
- UErrorCode status = U_ZERO_ERROR;
- DecimalFormatSymbols symbols("en", status);
- if (U_FAILURE(status)) {
- dataerrln("Error creating DecimalFormatSymbols - %s", u_errorName(status));
- return;
- }
- DigitFormatter formatter(symbols);
- ScientificPrecision precision;
- SciFormatterOptions options;
- precision.fMantissa.fRoundingIncrement.set(0.25);
- precision.fMantissa.fSignificant.setMax(4);
- DigitGrouping grouping;
- ValueFormatter vf;
-
- // fixed
- vf.prepareFixedDecimalFormatting(
- formatter,
- grouping,
- precision.fMantissa,
- options.fMantissa);
- DigitList digits;
- DigitAffixesAndPadding aap;
- aap.fNegativePrefix.append("-", UNUM_SIGN_FIELD);
- {
- digits.set(3.7);
- verifyAffixesAndPadding(
- "3.75",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
- {
- digits.set(-7.4);
- verifyAffixesAndPadding(
- "-7.5",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
- {
- digits.set(99.8);
- verifyAffixesAndPadding(
- "99.75",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
- precision.fMantissa.fMin.setFracDigitCount(2);
- {
- digits.set(99.1);
- verifyAffixesAndPadding(
- "99.00",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
- {
- digits.set(-639.65);
- verifyAffixesAndPadding(
- "-639.80",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
-
- precision.fMantissa.fMin.setIntDigitCount(2);
- // Scientific notation
- vf.prepareScientificFormatting(
- formatter,
- precision,
- options);
- {
- digits.set(-6396.5);
- verifyAffixesAndPadding(
- "-64.00E2",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
- {
- digits.set(-0.00092374);
- verifyAffixesAndPadding(
- "-92.25E-5",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
- precision.fMantissa.fMax.setIntDigitCount(3);
- {
- digits.set(-0.00092374);
- verifyAffixesAndPadding(
- "-923.80E-6",
- aap,
- digits,
- vf,
- NULL, NULL);
- }
-}
-
-void NumberFormat2Test::TestToPatternScientific11648() {
-/*
- UErrorCode status = U_ZERO_ERROR;
- Locale en("en");
- DecimalFormat2 fmt(en, "0.00", status);
- fmt.setScientificNotation(TRUE);
- UnicodeString pattern;
- // Fails, produces "0.00E"
- assertEquals("", "0.00E0", fmt.toPattern(pattern));
- DecimalFormat fmt2(pattern, status);
- // Fails, bad pattern.
- assertSuccess("", status);
-*/
-}
-
-void NumberFormat2Test::verifyAffixesAndPadding(
- const UnicodeString &expected,
- const DigitAffixesAndPadding &aaf,
- DigitList &digits,
- const ValueFormatter &vf,
- const PluralRules *optPluralRules,
- const NumberFormat2Test_Attributes *expectedAttributes) {
- UnicodeString appendTo;
- NumberFormat2Test_FieldPositionHandler handler;
- UErrorCode status = U_ZERO_ERROR;
- assertEquals(
- "",
- expected,
- aaf.format(
- digits,
- vf,
- handler,
- optPluralRules,
- appendTo,
- status));
- if (!assertSuccess("", status)) {
- return;
- }
- if (expectedAttributes != NULL) {
- verifyAttributes(expectedAttributes, handler.attributes);
- }
-}
-
-void NumberFormat2Test::verifyAffixesAndPaddingInt32(
- const UnicodeString &expected,
- const DigitAffixesAndPadding &aaf,
- int32_t value,
- const ValueFormatter &vf,
- const PluralRules *optPluralRules,
- const NumberFormat2Test_Attributes *expectedAttributes) {
- UnicodeString appendTo;
- NumberFormat2Test_FieldPositionHandler handler;
- UErrorCode status = U_ZERO_ERROR;
- assertEquals(
- "",
- expected,
- aaf.formatInt32(
- value,
- vf,
- handler,
- optPluralRules,
- appendTo,
- status));
- if (!assertSuccess("", status)) {
- return;
- }
- if (expectedAttributes != NULL) {
- verifyAttributes(expectedAttributes, handler.attributes);
- }
- DigitList digits;
- digits.set(value);
- verifyAffixesAndPadding(
- expected, aaf, digits, vf, optPluralRules, expectedAttributes);
-}
-
-void NumberFormat2Test::verifyAffix(
- const UnicodeString &expected,
- const DigitAffix &affix,
- const NumberFormat2Test_Attributes *expectedAttributes) {
- UnicodeString appendTo;
- NumberFormat2Test_FieldPositionHandler handler;
- assertEquals(
- "",
- expected.unescape(),
- affix.format(handler, appendTo));
- if (expectedAttributes != NULL) {
- verifyAttributes(expectedAttributes, handler.attributes);
- }
-}
-
-// Right now only works for positive values.
-void NumberFormat2Test::verifyDigitList(
- const UnicodeString &expected,
- const DigitList &digits) {
- DigitFormatter formatter;
- DigitGrouping grouping;
- VisibleDigits visibleDigits;
- FixedPrecision precision;
- precision.fMin.setIntDigitCount(0);
- DigitFormatterOptions options;
- UErrorCode status = U_ZERO_ERROR;
- DigitList dlCopy(digits);
- precision.initVisibleDigits(
- dlCopy, visibleDigits, status);
- if (!assertSuccess("", status)) {
- return;
- }
- verifyDigitFormatter(
- expected,
- formatter,
- visibleDigits,
- grouping,
- options,
- NULL);
-}
-
-void NumberFormat2Test::verifyVisibleDigits(
- const UnicodeString &expected,
- UBool bNegative,
- const VisibleDigits &digits) {
- DigitFormatter formatter;
- DigitGrouping grouping;
- DigitFormatterOptions options;
- verifyDigitFormatter(
- expected,
- formatter,
- digits,
- grouping,
- options,
- NULL);
- if (digits.isNegative() != bNegative) {
- errln(expected + ": Wrong sign.");
- }
- if (digits.isNaN() || digits.isInfinite()) {
- errln(expected + ": Require real value.");
- }
-}
-
-void NumberFormat2Test::verifyVisibleDigitsWithExponent(
- const UnicodeString &expected,
- UBool bNegative,
- const VisibleDigitsWithExponent &digits) {
- DigitFormatter formatter;
- SciFormatterOptions options;
- verifySciFormatter(
- expected,
- formatter,
- digits,
- options,
- NULL);
- if (digits.isNegative() != bNegative) {
- errln(expected + ": Wrong sign.");
- }
- if (digits.isNaN() || digits.isInfinite()) {
- errln(expected + ": Require real value.");
- }
-}
-
-void NumberFormat2Test::verifySciFormatter(
- const UnicodeString &expected,
- const DigitFormatter &formatter,
- const VisibleDigitsWithExponent &digits,
- const SciFormatterOptions &options,
- const NumberFormat2Test_Attributes *expectedAttributes) {
- assertEquals(
- "",
- expected.countChar32(),
- formatter.countChar32(digits, options));
- UnicodeString appendTo;
- NumberFormat2Test_FieldPositionHandler handler;
- assertEquals(
- "",
- expected,
- formatter.format(
- digits,
- options,
- handler,
- appendTo));
- if (expectedAttributes != NULL) {
- verifyAttributes(expectedAttributes, handler.attributes);
- }
-}
-
-void NumberFormat2Test::verifyPositiveIntDigitFormatter(
- const UnicodeString &expected,
- const DigitFormatter &formatter,
- int32_t value,
- int32_t minDigits,
- int32_t maxDigits,
- const NumberFormat2Test_Attributes *expectedAttributes) {
- IntDigitCountRange range(minDigits, maxDigits);
- UnicodeString appendTo;
- NumberFormat2Test_FieldPositionHandler handler;
- assertEquals(
- "",
- expected,
- formatter.formatPositiveInt32(
- value,
- range,
- handler,
- appendTo));
- if (expectedAttributes != NULL) {
- verifyAttributes(expectedAttributes, handler.attributes);
- }
-}
-
-void NumberFormat2Test::verifyDigitFormatter(
- const UnicodeString &expected,
- const DigitFormatter &formatter,
- const VisibleDigits &digits,
- const DigitGrouping &grouping,
- const DigitFormatterOptions &options,
- const NumberFormat2Test_Attributes *expectedAttributes) {
- assertEquals(
- "",
- expected.countChar32(),
- formatter.countChar32(digits, grouping, options));
- UnicodeString appendTo;
- NumberFormat2Test_FieldPositionHandler handler;
- assertEquals(
- "",
- expected,
- formatter.format(
- digits,
- grouping,
- options,
- handler,
- appendTo));
- if (expectedAttributes != NULL) {
- verifyAttributes(expectedAttributes, handler.attributes);
- }
-}
-
-void NumberFormat2Test::verifySmallIntFormatter(
- const UnicodeString &expected,
- int32_t positiveValue,
- int32_t minDigits,
- int32_t maxDigits) {
- IntDigitCountRange range(minDigits, maxDigits);
- if (!SmallIntFormatter::canFormat(positiveValue, range)) {
- UnicodeString actual;
- assertEquals("", expected, actual);
- return;
- }
- UnicodeString actual;
- assertEquals("", expected, SmallIntFormatter::format(positiveValue, range, actual));
-}
-
-void NumberFormat2Test::verifyAttributes(
- const NumberFormat2Test_Attributes *expected,
- const NumberFormat2Test_Attributes *actual) {
- int32_t idx = 0;
- while (expected[idx].spos != -1 && actual[idx].spos != -1) {
- assertEquals("id", expected[idx].id, actual[idx].id);
- assertEquals("spos", expected[idx].spos, actual[idx].spos);
- assertEquals("epos", expected[idx].epos, actual[idx].epos);
- ++idx;
- }
- assertEquals(
- "expected and actual not same length",
- expected[idx].spos,
- actual[idx].spos);
-}
-
-void NumberFormat2Test::verifyIntValue(
- int64_t expected, const VisibleDigits &digits) {
- double unusedSource;
- int64_t intValue;
- int64_t unusedF;
- int64_t unusedT;
- int32_t unusedV;
- UBool unusedHasIntValue;
- digits.getFixedDecimal(
- unusedSource, intValue, unusedF,
- unusedT, unusedV, unusedHasIntValue);
- assertEquals("", expected, intValue);
-}
-
-void NumberFormat2Test::verifySource(
- double expected, const VisibleDigits &digits) {
- double source;
- int64_t unusedIntValue;
- int64_t unusedF;
- int64_t unusedT;
- int32_t unusedV;
- UBool unusedHasIntValue;
- digits.getFixedDecimal(
- source, unusedIntValue, unusedF,
- unusedT, unusedV, unusedHasIntValue);
- if (expected != source) {
- errln("Expected %f, got %f instead", expected, source);
- }
-}
-
-extern IntlTest *createNumberFormat2Test() {
- return new NumberFormat2Test();
-}
-
-#endif /* !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp
index 26db1ad1163..6565a4bb97f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp
@@ -11,12 +11,15 @@
#if !UCONFIG_NO_FORMATTING
+#include "unicode/testlog.h"
#include "ustrfmt.h"
#include "charstr.h"
#include "cstring.h"
#include "cmemory.h"
-static NumberFormatTestTuple *gNullPtr = NULL;
+static NumberFormatTestTuple emptyObject;
+
+static NumberFormatTestTuple *gNullPtr = &emptyObject;
#define FIELD_OFFSET(fieldName) ((int32_t) (((char *) &gNullPtr->fieldName) - ((char *) gNullPtr)))
#define FIELD_FLAG_OFFSET(fieldName) ((int32_t) (((char *) &gNullPtr->fieldName##Flag) - ((char *) gNullPtr)))
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
index 7f5bcdf4a8e..bd4c0e28cc5 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
@@ -16,6 +16,11 @@
#include "unicode/numberformatter.h"
#include "unicode/numberrangeformatter.h"
+// ICU-20241 Solaris #defines ESP in sys/regset.h
+#ifdef ESP
+# undef ESP
+#endif
+
using namespace icu::number;
using namespace icu::number::impl;
using namespace icu::numparse;
@@ -54,6 +59,10 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
void notationCompact();
void unitMeasure();
void unitCompoundMeasure();
+ void unitSkeletons();
+ void unitUsage();
+ void unitUsageErrorCodes();
+ void unitUsageSkeletons();
void unitCurrency();
void unitPercent();
void percentParity();
@@ -68,6 +77,7 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
// TODO: Add this method if currency symbols override support is added.
//void symbolsOverride();
void sign();
+ void signNearZero();
void signCoverage();
void decimal();
void scale();
@@ -83,6 +93,7 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
void localPointerCAPI();
void toObject();
void toDecimalNumber();
+ void microPropsInternals();
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
@@ -94,14 +105,20 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
CurrencyUnit ESP;
CurrencyUnit PTE;
CurrencyUnit RON;
+ CurrencyUnit TWD;
+ CurrencyUnit TRY;
+ CurrencyUnit CNY;
MeasureUnit METER;
+ MeasureUnit METER_PER_SECOND;
MeasureUnit DAY;
MeasureUnit SQUARE_METER;
MeasureUnit FAHRENHEIT;
MeasureUnit SECOND;
MeasureUnit POUND;
+ MeasureUnit POUND_FORCE;
MeasureUnit SQUARE_MILE;
+ MeasureUnit SQUARE_INCH;
MeasureUnit JOULE;
MeasureUnit FURLONG;
MeasureUnit KELVIN;
@@ -113,16 +130,38 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
DecimalFormatSymbols SWISS_SYMBOLS;
DecimalFormatSymbols MYANMAR_SYMBOLS;
- void assertFormatDescending(const char16_t* message, const char16_t* skeleton,
- const UnlocalizedNumberFormatter& f, Locale locale, ...);
+ /**
+ * skeleton is the full length skeleton, which must round-trip.
+ *
+ * conciseSkeleton should be the shortest available skeleton.
+ * The concise skeleton can be read but not printed.
+ */
+ void assertFormatDescending(
+ const char16_t* message,
+ const char16_t* skeleton,
+ const char16_t* conciseSkeleton,
+ const UnlocalizedNumberFormatter& f,
+ Locale locale,
+ ...);
- void assertFormatDescendingBig(const char16_t* message, const char16_t* skeleton,
- const UnlocalizedNumberFormatter& f, Locale locale, ...);
+ /** See notes above regarding skeleton vs conciseSkeleton */
+ void assertFormatDescendingBig(
+ const char16_t* message,
+ const char16_t* skeleton,
+ const char16_t* conciseSkeleton,
+ const UnlocalizedNumberFormatter& f,
+ Locale locale,
+ ...);
- FormattedNumber
- assertFormatSingle(const char16_t* message, const char16_t* skeleton,
- const UnlocalizedNumberFormatter& f, Locale locale, double input,
- const UnicodeString& expected);
+ /** See notes above regarding skeleton vs conciseSkeleton */
+ FormattedNumber assertFormatSingle(
+ const char16_t* message,
+ const char16_t* skeleton,
+ const char16_t* conciseSkeleton,
+ const UnlocalizedNumberFormatter& f,
+ Locale locale,
+ double input,
+ const UnicodeString& expected);
void assertUndefinedSkeleton(const UnlocalizedNumberFormatter& f);
@@ -145,6 +184,8 @@ class DecimalQuantityTest : public IntlTest {
void testToDouble();
void testMaxDigits();
void testNickelRounding();
+ void testCompactDecimalSuppressedExponent();
+ void testSuppressedExponentUnchangedByInitialScaling();
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
@@ -231,6 +272,9 @@ class NumberSkeletonTest : public IntlTest {
void stemsRequiringOption();
void defaultTokens();
void flexibleSeparators();
+ void wildcardCharacters();
+ void perUnitInArabic();
+ void perUnitToSkeleton();
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
@@ -252,6 +296,7 @@ class NumberRangeFormatterTest : public IntlTestWithFieldPosition {
void testFieldPositions();
void testCopyMove();
void toObject();
+ void testGetDecimalNumbers();
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
index 7f29ad19903..499b5d0e090 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
@@ -222,7 +222,7 @@ void AffixUtilsTest::testUnescapeWithSymbolProvider() {
UnicodeString input(cas[0]);
UnicodeString expected(cas[1]);
sb.clear();
- AffixUtils::unescape(input, sb, 0, provider, UNUM_FIELD_COUNT, status);
+ AffixUtils::unescape(input, sb, 0, provider, kUndefinedField, status);
assertSuccess("Spot 1", status);
assertEquals(input, expected, sb.toUnicodeString());
assertEquals(input, expected, sb.toTempUnicodeString());
@@ -230,9 +230,9 @@ void AffixUtilsTest::testUnescapeWithSymbolProvider() {
// Test insertion position
sb.clear();
- sb.append(u"abcdefg", UNUM_FIELD_COUNT, status);
+ sb.append(u"abcdefg", kUndefinedField, status);
assertSuccess("Spot 2", status);
- AffixUtils::unescape(u"-+%", sb, 4, provider, UNUM_FIELD_COUNT, status);
+ AffixUtils::unescape(u"-+%", sb, 4, provider, kUndefinedField, status);
assertSuccess("Spot 3", status);
assertEquals(u"Symbol provider into middle", u"abcd123efg", sb.toUnicodeString());
}
@@ -240,7 +240,7 @@ void AffixUtilsTest::testUnescapeWithSymbolProvider() {
UnicodeString AffixUtilsTest::unescapeWithDefaults(const SymbolProvider &defaultProvider,
UnicodeString input, UErrorCode &status) {
FormattedStringBuilder nsb;
- int32_t length = AffixUtils::unescape(input, nsb, 0, defaultProvider, UNUM_FIELD_COUNT, status);
+ int32_t length = AffixUtils::unescape(input, nsb, 0, defaultProvider, kUndefinedField, status);
assertEquals("Return value of unescape", nsb.length(), length);
return nsb.toUnicodeString();
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
index 4e4f0b72e15..e653fbf5bed 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
@@ -11,11 +11,16 @@
#include <memory>
#include "unicode/unum.h"
#include "unicode/numberformatter.h"
+#include "unicode/testlog.h"
+#include "unicode/utypes.h"
#include "number_asformat.h"
#include "number_types.h"
#include "number_utils.h"
+#include "number_utypes.h"
+#include "number_microprops.h"
#include "numbertest.h"
-#include "unicode/utypes.h"
+
+using number::impl::UFormattedNumberData;
// Horrible workaround for the lack of a status code in the constructor...
// (Also affects numbertest_range.cpp)
@@ -33,6 +38,9 @@ NumberFormatterApiTest::NumberFormatterApiTest(UErrorCode& status)
ESP(u"ESP", status),
PTE(u"PTE", status),
RON(u"RON", status),
+ TWD(u"TWD", status),
+ TRY(u"TRY", status),
+ CNY(u"CNY", status),
FRENCH_SYMBOLS(Locale::getFrench(), status),
SWISS_SYMBOLS(Locale("de-CH"), status),
MYANMAR_SYMBOLS(Locale("my"), status) {
@@ -45,12 +53,15 @@ NumberFormatterApiTest::NumberFormatterApiTest(UErrorCode& status)
}
METER = *unit;
+ METER_PER_SECOND = *LocalPointer<MeasureUnit>(MeasureUnit::createMeterPerSecond(status));
DAY = *LocalPointer<MeasureUnit>(MeasureUnit::createDay(status));
SQUARE_METER = *LocalPointer<MeasureUnit>(MeasureUnit::createSquareMeter(status));
FAHRENHEIT = *LocalPointer<MeasureUnit>(MeasureUnit::createFahrenheit(status));
SECOND = *LocalPointer<MeasureUnit>(MeasureUnit::createSecond(status));
POUND = *LocalPointer<MeasureUnit>(MeasureUnit::createPound(status));
+ POUND_FORCE = *LocalPointer<MeasureUnit>(MeasureUnit::createPoundForce(status));
SQUARE_MILE = *LocalPointer<MeasureUnit>(MeasureUnit::createSquareMile(status));
+ SQUARE_INCH = *LocalPointer<MeasureUnit>(MeasureUnit::createSquareInch(status));
JOULE = *LocalPointer<MeasureUnit>(MeasureUnit::createJoule(status));
FURLONG = *LocalPointer<MeasureUnit>(MeasureUnit::createFurlong(status));
KELVIN = *LocalPointer<MeasureUnit>(MeasureUnit::createKelvin(status));
@@ -69,6 +80,10 @@ void NumberFormatterApiTest::runIndexedTest(int32_t index, UBool exec, const cha
TESTCASE_AUTO(notationCompact);
TESTCASE_AUTO(unitMeasure);
TESTCASE_AUTO(unitCompoundMeasure);
+ TESTCASE_AUTO(unitSkeletons);
+ TESTCASE_AUTO(unitUsage);
+ TESTCASE_AUTO(unitUsageErrorCodes);
+ TESTCASE_AUTO(unitUsageSkeletons);
TESTCASE_AUTO(unitCurrency);
TESTCASE_AUTO(unitPercent);
if (!quick) {
@@ -86,6 +101,7 @@ void NumberFormatterApiTest::runIndexedTest(int32_t index, UBool exec, const cha
// TODO: Add this method if currency symbols override support is added.
//TESTCASE_AUTO(symbolsOverride);
TESTCASE_AUTO(sign);
+ TESTCASE_AUTO(signNearZero);
TESTCASE_AUTO(signCoverage);
TESTCASE_AUTO(decimal);
TESTCASE_AUTO(scale);
@@ -105,6 +121,7 @@ void NumberFormatterApiTest::runIndexedTest(int32_t index, UBool exec, const cha
TESTCASE_AUTO(localPointerCAPI);
TESTCASE_AUTO(toObject);
TESTCASE_AUTO(toDecimalNumber);
+ TESTCASE_AUTO(microPropsInternals);
TESTCASE_AUTO_END;
}
@@ -112,6 +129,7 @@ void NumberFormatterApiTest::notationSimple() {
assertFormatDescending(
u"Basic",
u"",
+ u"",
NumberFormatter::with(),
Locale::getEnglish(),
u"87,650",
@@ -127,6 +145,7 @@ void NumberFormatterApiTest::notationSimple() {
assertFormatDescendingBig(
u"Big Simple",
u"notation-simple",
+ u"",
NumberFormatter::with().notation(Notation::simple()),
Locale::getEnglish(),
u"87,650,000",
@@ -142,6 +161,7 @@ void NumberFormatterApiTest::notationSimple() {
assertFormatSingle(
u"Basic with Negative Sign",
u"",
+ u"",
NumberFormatter::with(),
Locale::getEnglish(),
-9876543.21,
@@ -153,6 +173,7 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatDescending(
u"Scientific",
u"scientific",
+ u"E0",
NumberFormatter::with().notation(Notation::scientific()),
Locale::getEnglish(),
u"8.765E4",
@@ -168,6 +189,7 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatDescending(
u"Engineering",
u"engineering",
+ u"EE0",
NumberFormatter::with().notation(Notation::engineering()),
Locale::getEnglish(),
u"87.65E3",
@@ -183,6 +205,7 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatDescending(
u"Scientific sign always shown",
u"scientific/sign-always",
+ u"E+!0",
NumberFormatter::with().notation(
Notation::scientific().withExponentSignDisplay(UNumberSignDisplay::UNUM_SIGN_ALWAYS)),
Locale::getEnglish(),
@@ -198,7 +221,8 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatDescending(
u"Scientific min exponent digits",
- u"scientific/+ee",
+ u"scientific/*ee",
+ u"E00",
NumberFormatter::with().notation(Notation::scientific().withMinExponentDigits(2)),
Locale::getEnglish(),
u"8.765E04",
@@ -214,6 +238,7 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatSingle(
u"Scientific Negative",
u"scientific",
+ u"E0",
NumberFormatter::with().notation(Notation::scientific()),
Locale::getEnglish(),
-1000000,
@@ -222,6 +247,7 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatSingle(
u"Scientific Infinity",
u"scientific",
+ u"E0",
NumberFormatter::with().notation(Notation::scientific()),
Locale::getEnglish(),
-uprv_getInfinity(),
@@ -230,6 +256,7 @@ void NumberFormatterApiTest::notationScientific() {
assertFormatSingle(
u"Scientific NaN",
u"scientific",
+ u"E0",
NumberFormatter::with().notation(Notation::scientific()),
Locale::getEnglish(),
uprv_getNaN(),
@@ -240,6 +267,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Short",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
u"88K",
@@ -255,6 +283,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Long",
u"compact-long",
+ u"KK",
NumberFormatter::with().notation(Notation::compactLong()),
Locale::getEnglish(),
u"88 thousand",
@@ -270,6 +299,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Short Currency",
u"compact-short currency/USD",
+ u"K currency/USD",
NumberFormatter::with().notation(Notation::compactShort()).unit(USD),
Locale::getEnglish(),
u"$88K",
@@ -285,6 +315,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Short with ISO Currency",
u"compact-short currency/USD unit-width-iso-code",
+ u"K currency/USD unit-width-iso-code",
NumberFormatter::with().notation(Notation::compactShort())
.unit(USD)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE),
@@ -302,6 +333,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Short with Long Name Currency",
u"compact-short currency/USD unit-width-full-name",
+ u"K currency/USD unit-width-full-name",
NumberFormatter::with().notation(Notation::compactShort())
.unit(USD)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
@@ -321,6 +353,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Long Currency",
u"compact-long currency/USD",
+ u"KK currency/USD",
NumberFormatter::with().notation(Notation::compactLong()).unit(USD),
Locale::getEnglish(),
u"$88K", // should be something like "$88 thousand"
@@ -338,6 +371,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Long with ISO Currency",
u"compact-long currency/USD unit-width-iso-code",
+ u"KK currency/USD unit-width-iso-code",
NumberFormatter::with().notation(Notation::compactLong())
.unit(USD)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE),
@@ -356,6 +390,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatDescending(
u"Compact Long with Long Name Currency",
u"compact-long currency/USD unit-width-full-name",
+ u"KK currency/USD unit-width-full-name",
NumberFormatter::with().notation(Notation::compactLong())
.unit(USD)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
@@ -373,6 +408,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Plural One",
u"compact-long",
+ u"KK",
NumberFormatter::with().notation(Notation::compactLong()),
Locale::createFromName("es"),
1000000,
@@ -381,6 +417,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Plural Other",
u"compact-long",
+ u"KK",
NumberFormatter::with().notation(Notation::compactLong()),
Locale::createFromName("es"),
2000000,
@@ -389,6 +426,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact with Negative Sign",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
-9876543.21,
@@ -397,6 +435,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Rounding",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
990000,
@@ -405,6 +444,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Rounding",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
999000,
@@ -413,6 +453,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Rounding",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
999900,
@@ -421,6 +462,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Rounding",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
9900000,
@@ -429,6 +471,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact Rounding",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
9990000,
@@ -437,6 +480,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact in zh-Hant-HK",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale("zh-Hant-HK"),
1e7,
@@ -445,14 +489,27 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact in zh-Hant",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale("zh-Hant"),
1e7,
u"1000\u842C");
+ if (!logKnownIssue("21258", "StandardPlural cannot handle keywords 1, 0")) {
+ assertFormatSingle(
+ u"Compact with plural form =1 (ICU-21258)",
+ u"compact-long",
+ u"K",
+ NumberFormatter::with().notation(Notation::compactLong()),
+ Locale("fr-FR"),
+ 1e3,
+ u"mille");
+ }
+
assertFormatSingle(
u"Compact Infinity",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
-uprv_getInfinity(),
@@ -461,6 +518,7 @@ void NumberFormatterApiTest::notationCompact() {
assertFormatSingle(
u"Compact NaN",
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getEnglish(),
uprv_getNaN(),
@@ -471,9 +529,12 @@ void NumberFormatterApiTest::notationCompact() {
}
void NumberFormatterApiTest::unitMeasure() {
+ IcuTestErrorCode status(*this, "unitMeasure()");
+
assertFormatDescending(
u"Meters Short and unit() method",
u"measure-unit/length-meter",
+ u"unit/meter",
NumberFormatter::with().unit(MeasureUnit::getMeter()),
Locale::getEnglish(),
u"87,650 m",
@@ -489,6 +550,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatDescending(
u"Meters Long and adoptUnit() method",
u"measure-unit/length-meter unit-width-full-name",
+ u"unit/meter unit-width-full-name",
NumberFormatter::with().adoptUnit(new MeasureUnit(METER))
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
Locale::getEnglish(),
@@ -505,6 +567,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatDescending(
u"Compact Meters Long",
u"compact-long measure-unit/length-meter unit-width-full-name",
+ u"KK unit/meter unit-width-full-name",
NumberFormatter::with().notation(Notation::compactLong())
.unit(METER)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
@@ -519,6 +582,23 @@ void NumberFormatterApiTest::unitMeasure() {
u"0.0088 meters",
u"0 meters");
+// // TODO(ICU-20941): Support formatting for not-built-in units
+// assertFormatDescending(
+// u"Hectometers",
+// u"measure-unit/length-hectometer",
+// u"unit/hectometer",
+// NumberFormatter::with().unit(MeasureUnit::forIdentifier("hectometer", status)),
+// Locale::getEnglish(),
+// u"87,650 hm",
+// u"8,765 hm",
+// u"876.5 hm",
+// u"87.65 hm",
+// u"8.765 hm",
+// u"0.8765 hm",
+// u"0.08765 hm",
+// u"0.008765 hm",
+// u"0 hm");
+
// TODO: Implement Measure in C++
// assertFormatSingleMeasure(
// u"Meters with Measure Input",
@@ -538,6 +618,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Meters with Negative Sign",
u"measure-unit/length-meter",
+ u"unit/meter",
NumberFormatter::with().unit(METER),
Locale::getEnglish(),
-9876543.21,
@@ -547,6 +628,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Interesting Data Fallback 1",
u"measure-unit/duration-day unit-width-full-name",
+ u"unit/day unit-width-full-name",
NumberFormatter::with().unit(DAY).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
Locale::createFromName("brx"),
5.43,
@@ -556,6 +638,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Interesting Data Fallback 2",
u"measure-unit/duration-day unit-width-narrow",
+ u"unit/day unit-width-narrow",
NumberFormatter::with().unit(DAY).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW),
Locale::createFromName("brx"),
5.43,
@@ -566,15 +649,17 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Interesting Data Fallback 3",
u"measure-unit/area-square-meter unit-width-narrow",
+ u"unit/square-meter unit-width-narrow",
NumberFormatter::with().unit(SQUARE_METER).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW),
Locale::createFromName("en-GB"),
5.43,
- u"5.43 m²");
+ u"5.43m²");
// Try accessing a narrow unit directly from root.
assertFormatSingle(
u"Interesting Data Fallback 4",
u"measure-unit/area-square-meter unit-width-narrow",
+ u"unit/square-meter unit-width-narrow",
NumberFormatter::with().unit(SQUARE_METER).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW),
Locale::createFromName("root"),
5.43,
@@ -585,6 +670,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Difference between Narrow and Short (Narrow Version)",
u"measure-unit/temperature-fahrenheit unit-width-narrow",
+ u"unit/fahrenheit unit-width-narrow",
NumberFormatter::with().unit(FAHRENHEIT).unitWidth(UNUM_UNIT_WIDTH_NARROW),
Locale("es-US"),
5.43,
@@ -593,6 +679,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Difference between Narrow and Short (Short Version)",
u"measure-unit/temperature-fahrenheit unit-width-short",
+ u"unit/fahrenheit unit-width-short",
NumberFormatter::with().unit(FAHRENHEIT).unitWidth(UNUM_UNIT_WIDTH_SHORT),
Locale("es-US"),
5.43,
@@ -601,6 +688,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"MeasureUnit form without {0} in CLDR pattern",
u"measure-unit/temperature-kelvin unit-width-full-name",
+ u"unit/kelvin unit-width-full-name",
NumberFormatter::with().unit(KELVIN).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
Locale("es-MX"),
1,
@@ -609,6 +697,7 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"MeasureUnit form without {0} in CLDR pattern and wide base form",
u"measure-unit/temperature-kelvin .00000000000000000000 unit-width-full-name",
+ u"unit/kelvin .00000000000000000000 unit-width-full-name",
NumberFormatter::with().precision(Precision::fixedFraction(20))
.unit(KELVIN)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
@@ -619,17 +708,114 @@ void NumberFormatterApiTest::unitMeasure() {
assertFormatSingle(
u"Person unit not in short form",
u"measure-unit/duration-year-person unit-width-full-name",
+ u"unit/year-person unit-width-full-name",
NumberFormatter::with().unit(MeasureUnit::getYearPerson())
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
Locale("es-MX"),
5,
u"5 a\u00F1os");
+
+ assertFormatSingle(
+ u"Mixed unit",
+ u"unit/yard-and-foot-and-inch",
+ u"unit/yard-and-foot-and-inch",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("yard-and-foot-and-inch", status)),
+ Locale("en-US"),
+ 3.65,
+ "3 yd, 1 ft, 11.4 in");
+
+ assertFormatSingle(
+ u"Mixed unit, Scientific",
+ u"unit/yard-and-foot-and-inch E0",
+ u"unit/yard-and-foot-and-inch E0",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("yard-and-foot-and-inch", status))
+ .notation(Notation::scientific()),
+ Locale("en-US"),
+ 3.65,
+ "3 yd, 1 ft, 1.14E1 in");
+
+ assertFormatSingle(
+ u"Mixed Unit (Narrow Version)",
+ u"unit/metric-ton-and-kilogram-and-gram unit-width-narrow",
+ u"unit/metric-ton-and-kilogram-and-gram unit-width-narrow",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("metric-ton-and-kilogram-and-gram", status))
+ .unitWidth(UNUM_UNIT_WIDTH_NARROW),
+ Locale("en-US"),
+ 4.28571,
+ u"4t 285kg 710g");
+
+ assertFormatSingle(
+ u"Mixed Unit (Short Version)",
+ u"unit/metric-ton-and-kilogram-and-gram unit-width-short",
+ u"unit/metric-ton-and-kilogram-and-gram unit-width-short",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("metric-ton-and-kilogram-and-gram", status))
+ .unitWidth(UNUM_UNIT_WIDTH_SHORT),
+ Locale("en-US"),
+ 4.28571,
+ u"4 t, 285 kg, 710 g");
+
+ assertFormatSingle(
+ u"Mixed Unit (Full Name Version)",
+ u"unit/metric-ton-and-kilogram-and-gram unit-width-full-name",
+ u"unit/metric-ton-and-kilogram-and-gram unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("metric-ton-and-kilogram-and-gram", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-US"),
+ 4.28571,
+ u"4 metric tons, 285 kilograms, 710 grams");
+
+ assertFormatSingle(
+ u"Testing \"1 foot 12 inches\"",
+ u"unit/foot-and-inch @### unit-width-full-name",
+ u"unit/foot-and-inch @### unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("foot-and-inch", status))
+ .precision(Precision::maxSignificantDigits(4))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-US"),
+ 1.9999,
+ u"2 feet, 0 inches");
+
+ assertFormatSingle(
+ u"Negative numbers: temperature",
+ u"measure-unit/temperature-celsius",
+ u"unit/celsius",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("celsius", status)),
+ Locale("nl-NL"),
+ -6.5,
+ u"-6,5\u00B0C");
+
+ assertFormatSingle(
+ u"Negative numbers: time",
+ u"unit/hour-and-minute-and-second",
+ u"unit/hour-and-minute-and-second",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("hour-and-minute-and-second", status)),
+ Locale("de-DE"),
+ -1.24,
+ u"-1 Std., 14 Min. und 24 Sek.");
+
+ assertFormatSingle(
+ u"Zero out the unit field",
+ u"",
+ u"",
+ NumberFormatter::with().unit(KELVIN).unit(MeasureUnit()),
+ Locale("en"),
+ 100,
+ u"100");
}
void NumberFormatterApiTest::unitCompoundMeasure() {
+ IcuTestErrorCode status(*this, "unitCompoundMeasure()");
+
assertFormatDescending(
u"Meters Per Second Short (unit that simplifies) and perUnit method",
u"measure-unit/length-meter per-measure-unit/duration-second",
+ u"unit/meter-per-second",
NumberFormatter::with().unit(METER).perUnit(SECOND),
Locale::getEnglish(),
u"87,650 m/s",
@@ -643,8 +829,25 @@ void NumberFormatterApiTest::unitCompoundMeasure() {
u"0 m/s");
assertFormatDescending(
+ u"Meters Per Second Short, built-in m/s",
+ u"measure-unit/speed-meter-per-second",
+ u"unit/meter-per-second",
+ NumberFormatter::with().unit(METER_PER_SECOND),
+ Locale::getEnglish(),
+ u"87,650 m/s",
+ u"8,765 m/s",
+ u"876.5 m/s",
+ u"87.65 m/s",
+ u"8.765 m/s",
+ u"0.8765 m/s",
+ u"0.08765 m/s",
+ u"0.008765 m/s",
+ u"0 m/s");
+
+ assertFormatDescending(
u"Pounds Per Square Mile Short (secondary unit has per-format) and adoptPerUnit method",
u"measure-unit/mass-pound per-measure-unit/area-square-mile",
+ u"unit/pound-per-square-mile",
NumberFormatter::with().unit(POUND).adoptPerUnit(new MeasureUnit(SQUARE_MILE)),
Locale::getEnglish(),
u"87,650 lb/mi²",
@@ -660,6 +863,7 @@ void NumberFormatterApiTest::unitCompoundMeasure() {
assertFormatDescending(
u"Joules Per Furlong Short (unit with no simplifications or special patterns)",
u"measure-unit/energy-joule per-measure-unit/length-furlong",
+ u"unit/joule-per-furlong",
NumberFormatter::with().unit(JOULE).perUnit(FURLONG),
Locale::getEnglish(),
u"87,650 J/fur",
@@ -671,12 +875,685 @@ void NumberFormatterApiTest::unitCompoundMeasure() {
u"0.08765 J/fur",
u"0.008765 J/fur",
u"0 J/fur");
+
+ // TODO(ICU-20941): Support constructions such as this one.
+ // assertFormatDescending(
+ // u"Joules Per Furlong Short with unit identifier via API",
+ // u"measure-unit/energy-joule per-measure-unit/length-furlong",
+ // u"unit/joule-per-furlong",
+ // NumberFormatter::with().unit(MeasureUnit::forIdentifier("joule-per-furlong", status)),
+ // Locale::getEnglish(),
+ // u"87,650 J/fur",
+ // u"8,765 J/fur",
+ // u"876.5 J/fur",
+ // u"87.65 J/fur",
+ // u"8.765 J/fur",
+ // u"0.8765 J/fur",
+ // u"0.08765 J/fur",
+ // u"0.008765 J/fur",
+ // u"0 J/fur");
+
+ assertFormatDescending(
+ u"Pounds per Square Inch: composed",
+ u"measure-unit/force-pound-force per-measure-unit/area-square-inch",
+ u"unit/pound-force-per-square-inch",
+ NumberFormatter::with().unit(POUND_FORCE).perUnit(SQUARE_INCH),
+ Locale::getEnglish(),
+ u"87,650 psi",
+ u"8,765 psi",
+ u"876.5 psi",
+ u"87.65 psi",
+ u"8.765 psi",
+ u"0.8765 psi",
+ u"0.08765 psi",
+ u"0.008765 psi",
+ u"0 psi");
+
+ assertFormatDescending(
+ u"Pounds per Square Inch: built-in",
+ u"measure-unit/force-pound-force per-measure-unit/area-square-inch",
+ u"unit/pound-force-per-square-inch",
+ NumberFormatter::with().unit(MeasureUnit::getPoundPerSquareInch()),
+ Locale::getEnglish(),
+ u"87,650 psi",
+ u"8,765 psi",
+ u"876.5 psi",
+ u"87.65 psi",
+ u"8.765 psi",
+ u"0.8765 psi",
+ u"0.08765 psi",
+ u"0.008765 psi",
+ u"0 psi");
+
+ assertFormatSingle(
+ u"m/s/s simplifies to m/s^2",
+ u"measure-unit/speed-meter-per-second per-measure-unit/duration-second",
+ u"unit/meter-per-square-second",
+ NumberFormatter::with().unit(METER_PER_SECOND).perUnit(SECOND),
+ Locale("en-GB"),
+ 2.4,
+ u"2.4 m/s\u00B2");
+
+ assertFormatSingle(
+ u"Negative numbers: acceleration",
+ u"measure-unit/acceleration-meter-per-square-second",
+ u"unit/meter-per-second-second",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("meter-per-pow2-second", status)),
+ Locale("af-ZA"),
+ -9.81,
+ u"-9,81 m/s\u00B2");
+
+ // Testing the rejection of invalid specifications
+
+ // If .unit() is not given a built-in type, .perUnit() is not allowed
+ // (because .unit is now flexible enough to handle compound units,
+ // .perUnit() is supported for backward compatibility).
+ LocalizedNumberFormatter nf = NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("furlong-pascal", status))
+ .perUnit(METER)
+ .locale("en-GB");
+ status.assertSuccess(); // Error is only returned once we try to format.
+ FormattedNumber num = nf.formatDouble(2.4, status);
+ if (!status.expectErrorAndReset(U_UNSUPPORTED_ERROR)) {
+ errln(UnicodeString("Expected failure, got: \"") +
+ nf.formatDouble(2.4, status).toString(status) + "\".");
+ status.assertSuccess();
+ }
+
+ // .perUnit() may only be passed a built-in type, or something that combines
+ // to a built-in type together with .unit().
+ MeasureUnit SQUARE_SECOND = MeasureUnit::forIdentifier("square-second", status);
+ nf = NumberFormatter::with().unit(FURLONG).perUnit(SQUARE_SECOND).locale("en-GB");
+ status.assertSuccess(); // Error is only returned once we try to format.
+ num = nf.formatDouble(2.4, status);
+ if (!status.expectErrorAndReset(U_UNSUPPORTED_ERROR)) {
+ errln(UnicodeString("Expected failure, got: \"") +
+ nf.formatDouble(2.4, status).toString(status) + "\".");
+ status.assertSuccess();
+ }
+ // As above, "square-second" is not a built-in type, however this time,
+ // meter-per-square-second is a built-in type.
+ assertFormatSingle(
+ u"meter per square-second works as a composed unit",
+ u"measure-unit/speed-meter-per-second per-measure-unit/duration-second",
+ u"unit/meter-per-square-second",
+ NumberFormatter::with().unit(METER).perUnit(SQUARE_SECOND),
+ Locale("en-GB"),
+ 2.4,
+ u"2.4 m/s\u00B2");
+}
+
+// TODO: merge these tests into numbertest_skeletons.cpp instead of here:
+void NumberFormatterApiTest::unitSkeletons() {
+ const struct TestCase {
+ const char *msg;
+ const char16_t *inputSkeleton;
+ const char16_t *normalizedSkeleton;
+ } cases[] = {
+ {"old-form built-in compound unit", //
+ u"measure-unit/speed-meter-per-second", //
+ u"unit/meter-per-second"},
+
+ {"old-form compound construction, converts to built-in", //
+ u"measure-unit/length-meter per-measure-unit/duration-second", //
+ u"unit/meter-per-second"},
+
+ {"old-form compound construction which does not simplify to a built-in", //
+ u"measure-unit/energy-joule per-measure-unit/length-meter", //
+ u"unit/joule-per-meter"},
+
+ {"old-form compound-compound ugliness resolves neatly", //
+ u"measure-unit/speed-meter-per-second per-measure-unit/duration-second", //
+ u"unit/meter-per-square-second"},
+
+ {"short-form built-in units stick with the built-in", //
+ u"unit/meter-per-second", //
+ u"unit/meter-per-second"},
+
+ {"short-form compound units stay as is", //
+ u"unit/square-meter-per-square-meter", //
+ u"unit/square-meter-per-square-meter"},
+
+ {"short-form compound units stay as is", //
+ u"unit/joule-per-furlong", //
+ u"unit/joule-per-furlong"},
+
+ {"short-form that doesn't consist of built-in units", //
+ u"unit/hectometer-per-second", //
+ u"unit/hectometer-per-second"},
+
+ {"short-form that doesn't consist of built-in units", //
+ u"unit/meter-per-hectosecond", //
+ u"unit/meter-per-hectosecond"},
+
+ {"percent compound skeletons handled correctly", //
+ u"unit/percent-per-meter", //
+ u"unit/percent-per-meter"},
+
+ {"permille compound skeletons handled correctly", //
+ u"measure-unit/concentr-permille per-measure-unit/length-meter", //
+ u"unit/permille-per-meter"},
+
+ {"percent simple unit is not actually considered a unit", //
+ u"unit/percent", //
+ u"percent"},
+
+ {"permille simple unit is not actually considered a unit", //
+ u"measure-unit/concentr-permille", //
+ u"permille"},
+
+ // // TODO: binary prefixes not supported yet!
+ // {"Round-trip example from icu-units#35", //
+ // u"unit/kibijoule-per-furlong", //
+ // u"unit/kibijoule-per-furlong"},
+ };
+ for (auto &cas : cases) {
+ IcuTestErrorCode status(*this, cas.msg);
+ auto nf = NumberFormatter::forSkeleton(cas.inputSkeleton, status);
+ if (status.errIfFailureAndReset("NumberFormatter::forSkeleton failed")) {
+ continue;
+ }
+ assertEquals( //
+ UnicodeString(TRUE, cas.inputSkeleton, -1) + u" normalization", //
+ cas.normalizedSkeleton, //
+ nf.toSkeleton(status));
+ status.errIfFailureAndReset("NumberFormatter::toSkeleton failed");
+ }
+
+ const struct FailCase {
+ const char *msg;
+ const char16_t *inputSkeleton;
+ UErrorCode expectedForSkelStatus;
+ UErrorCode expectedToSkelStatus;
+ } failCases[] = {
+ {"Parsing measure-unit/* results in failure if not built-in unit",
+ u"measure-unit/hectometer", //
+ U_NUMBER_SKELETON_SYNTAX_ERROR, //
+ U_ZERO_ERROR},
+
+ {"Parsing per-measure-unit/* results in failure if not built-in unit",
+ u"measure-unit/meter per-measure-unit/hectosecond", //
+ U_NUMBER_SKELETON_SYNTAX_ERROR, //
+ U_ZERO_ERROR},
+
+ {"\"currency/EUR measure-unit/length-meter\" fails, conflicting skeleton.",
+ u"currency/EUR measure-unit/length-meter", //
+ U_NUMBER_SKELETON_SYNTAX_ERROR, //
+ U_ZERO_ERROR},
+
+ {"\"measure-unit/length-meter currency/EUR\" fails, conflicting skeleton.",
+ u"measure-unit/length-meter currency/EUR", //
+ U_NUMBER_SKELETON_SYNTAX_ERROR, //
+ U_ZERO_ERROR},
+
+ {"\"currency/EUR per-measure-unit/meter\" fails, conflicting skeleton.",
+ u"currency/EUR per-measure-unit/length-meter", //
+ U_NUMBER_SKELETON_SYNTAX_ERROR, //
+ U_ZERO_ERROR},
+ };
+ for (auto &cas : failCases) {
+ IcuTestErrorCode status(*this, cas.msg);
+ auto nf = NumberFormatter::forSkeleton(cas.inputSkeleton, status);
+ if (status.expectErrorAndReset(cas.expectedForSkelStatus, cas.msg)) {
+ continue;
+ }
+ nf.toSkeleton(status);
+ status.expectErrorAndReset(cas.expectedToSkelStatus, cas.msg);
+ }
+
+ IcuTestErrorCode status(*this, "unitSkeletons");
+ assertEquals( //
+ ".unit(METER_PER_SECOND) normalization", //
+ u"unit/meter-per-second", //
+ NumberFormatter::with().unit(METER_PER_SECOND).toSkeleton(status));
+ assertEquals( //
+ ".unit(METER).perUnit(SECOND) normalization", //
+ u"unit/meter-per-second",
+ NumberFormatter::with().unit(METER).perUnit(SECOND).toSkeleton(status));
+ assertEquals( //
+ ".unit(MeasureUnit::forIdentifier(\"hectometer\", status)) normalization", //
+ u"unit/hectometer",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("hectometer", status))
+ .toSkeleton(status));
+ assertEquals( //
+ ".unit(MeasureUnit::forIdentifier(\"hectometer\", status)) normalization", //
+ u"unit/meter-per-hectosecond",
+ NumberFormatter::with()
+ .unit(METER)
+ .perUnit(MeasureUnit::forIdentifier("hectosecond", status))
+ .toSkeleton(status));
+
+ status.assertSuccess();
+ assertEquals( //
+ ".unit(CURRENCY) produces a currency/CURRENCY skeleton", //
+ u"currency/GBP", //
+ NumberFormatter::with().unit(GBP).toSkeleton(status));
+ status.assertSuccess();
+ // .unit(CURRENCY).perUnit(ANYTHING) is not supported.
+ NumberFormatter::with().unit(GBP).perUnit(METER).toSkeleton(status);
+ status.expectErrorAndReset(U_UNSUPPORTED_ERROR);
+}
+
+void NumberFormatterApiTest::unitUsage() {
+ IcuTestErrorCode status(*this, "unitUsage()");
+ UnlocalizedNumberFormatter unloc_formatter;
+ LocalizedNumberFormatter formatter;
+ FormattedNumber formattedNum;
+ UnicodeString uTestCase;
+
+ status.assertSuccess();
+ formattedNum =
+ NumberFormatter::with().usage("road").locale(Locale::getEnglish()).formatInt(1, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+
+ unloc_formatter = NumberFormatter::with().usage("road").unit(MeasureUnit::getMeter());
+
+ uTestCase = u"unitUsage() en-ZA road";
+ formatter = unloc_formatter.locale("en-ZA");
+ formattedNum = formatter.formatDouble(321, status);
+ status.errIfFailureAndReset("unitUsage() en-ZA road formatDouble");
+ assertTrue(
+ uTestCase + u", got outputUnit: \"" + formattedNum.getOutputUnit(status).getIdentifier() + "\"",
+ MeasureUnit::getMeter() == formattedNum.getOutputUnit(status));
+ assertEquals(uTestCase, "300 m", formattedNum.toString(status));
+ {
+ static const UFieldPosition expectedFieldPositions[] = {
+ {UNUM_INTEGER_FIELD, 0, 3},
+ {UNUM_MEASURE_UNIT_FIELD, 4, 5}};
+ assertNumberFieldPositions(
+ (uTestCase + u" field positions").getTerminatedBuffer(),
+ formattedNum,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ assertFormatDescendingBig(
+ uTestCase.getTerminatedBuffer(),
+ u"measure-unit/length-meter usage/road",
+ u"unit/meter usage/road",
+ unloc_formatter,
+ Locale("en-ZA"),
+ u"87\u00A0650 km",
+ u"8\u00A0765 km",
+ u"876 km", // 6.5 rounds down, 7.5 rounds up.
+ u"88 km",
+ u"8,8 km",
+ u"900 m",
+ u"90 m",
+ u"10 m",
+ u"0 m");
+
+ uTestCase = u"unitUsage() en-GB road";
+ formatter = unloc_formatter.locale("en-GB");
+ formattedNum = formatter.formatDouble(321, status);
+ status.errIfFailureAndReset("unitUsage() en-GB road, formatDouble(...)");
+ assertTrue(
+ uTestCase + u", got outputUnit: \"" + formattedNum.getOutputUnit(status).getIdentifier() + "\"",
+ MeasureUnit::getYard() == formattedNum.getOutputUnit(status));
+ status.errIfFailureAndReset("unitUsage() en-GB road, getOutputUnit(...)");
+ assertEquals(uTestCase, "350 yd", formattedNum.toString(status));
+ status.errIfFailureAndReset("unitUsage() en-GB road, toString(...)");
+ {
+ static const UFieldPosition expectedFieldPositions[] = {
+ {UNUM_INTEGER_FIELD, 0, 3},
+ {UNUM_MEASURE_UNIT_FIELD, 4, 6}};
+ assertNumberFieldPositions(
+ (uTestCase + u" field positions").getTerminatedBuffer(),
+ formattedNum,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ assertFormatDescendingBig(
+ uTestCase.getTerminatedBuffer(),
+ u"measure-unit/length-meter usage/road",
+ u"unit/meter usage/road",
+ unloc_formatter,
+ Locale("en-GB"),
+ u"54,463 mi",
+ u"5,446 mi",
+ u"545 mi",
+ u"54 mi",
+ u"5.4 mi",
+ u"0.54 mi",
+ u"96 yd",
+ u"9.6 yd",
+ u"0 yd");
+
+ uTestCase = u"unitUsage() en-US road";
+ formatter = unloc_formatter.locale("en-US");
+ formattedNum = formatter.formatDouble(321, status);
+ status.errIfFailureAndReset("unitUsage() en-US road, formatDouble(...)");
+ assertTrue(
+ uTestCase + u", got outputUnit: \"" + formattedNum.getOutputUnit(status).getIdentifier() + "\"",
+ MeasureUnit::getFoot() == formattedNum.getOutputUnit(status));
+ status.errIfFailureAndReset("unitUsage() en-US road, getOutputUnit(...)");
+ assertEquals(uTestCase, "1,050 ft", formattedNum.toString(status));
+ status.errIfFailureAndReset("unitUsage() en-US road, toString(...)");
+ {
+ static const UFieldPosition expectedFieldPositions[] = {
+ {UNUM_GROUPING_SEPARATOR_FIELD, 1, 2},
+ {UNUM_INTEGER_FIELD, 0, 5},
+ {UNUM_MEASURE_UNIT_FIELD, 6, 8}};
+ assertNumberFieldPositions(
+ (uTestCase + u" field positions").getTerminatedBuffer(),
+ formattedNum,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ assertFormatDescendingBig(
+ uTestCase.getTerminatedBuffer(),
+ u"measure-unit/length-meter usage/road",
+ u"unit/meter usage/road",
+ unloc_formatter,
+ Locale("en-US"),
+ u"54,463 mi",
+ u"5,446 mi",
+ u"545 mi",
+ u"54 mi",
+ u"5.4 mi",
+ u"0.54 mi",
+ u"300 ft",
+ u"30 ft",
+ u"0 ft");
+
+ unloc_formatter = NumberFormatter::with().usage("person").unit(MeasureUnit::getKilogram());
+ uTestCase = u"unitUsage() en-GB person";
+ formatter = unloc_formatter.locale("en-GB");
+ formattedNum = formatter.formatDouble(80, status);
+ status.errIfFailureAndReset("unitUsage() en-GB person formatDouble");
+ assertTrue(
+ uTestCase + ", got outputUnit: \"" + formattedNum.getOutputUnit(status).getIdentifier() + "\"",
+ MeasureUnit::forIdentifier("stone-and-pound", status) == formattedNum.getOutputUnit(status));
+ status.errIfFailureAndReset("unitUsage() en-GB person - formattedNum.getOutputUnit(status)");
+ assertEquals(uTestCase, "12 st, 8.4 lb", formattedNum.toString(status));
+ status.errIfFailureAndReset("unitUsage() en-GB person, toString(...)");
+ {
+ static const UFieldPosition expectedFieldPositions[] = {
+ // // Desired output: TODO(icu-units#67)
+ // {UNUM_INTEGER_FIELD, 0, 2},
+ // {UNUM_MEASURE_UNIT_FIELD, 3, 5},
+ // {ULISTFMT_LITERAL_FIELD, 5, 6},
+ // {UNUM_INTEGER_FIELD, 7, 8},
+ // {UNUM_DECIMAL_SEPARATOR_FIELD, 8, 9},
+ // {UNUM_FRACTION_FIELD, 9, 10},
+ // {UNUM_MEASURE_UNIT_FIELD, 11, 13}};
+
+ // Current output: rather no fields than wrong fields
+ {UNUM_INTEGER_FIELD, 7, 8},
+ {UNUM_DECIMAL_SEPARATOR_FIELD, 8, 9},
+ {UNUM_FRACTION_FIELD, 9, 10},
+ };
+ assertNumberFieldPositions(
+ (uTestCase + u" field positions").getTerminatedBuffer(),
+ formattedNum,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+ assertFormatDescending(
+ uTestCase.getTerminatedBuffer(),
+ u"measure-unit/mass-kilogram usage/person",
+ u"unit/kilogram usage/person",
+ unloc_formatter,
+ Locale("en-GB"),
+ u"13,802 st, 7.2 lb",
+ u"1,380 st, 3.5 lb",
+ u"138 st, 0.35 lb",
+ u"13 st, 11 lb",
+ u"1 st, 5.3 lb",
+ u"1 lb, 15 oz",
+ u"0 lb, 3.1 oz",
+ u"0 lb, 0.31 oz",
+ u"0 lb, 0 oz");
+
+ assertFormatDescending(
+ uTestCase.getTerminatedBuffer(),
+ u"usage/person unit-width-narrow measure-unit/mass-kilogram",
+ u"usage/person unit-width-narrow unit/kilogram",
+ unloc_formatter.unitWidth(UNUM_UNIT_WIDTH_NARROW),
+ Locale("en-GB"),
+ u"13,802st 7.2lb",
+ u"1,380st 3.5lb",
+ u"138st 0.35lb",
+ u"13st 11lb",
+ u"1st 5.3lb",
+ u"1lb 15oz",
+ u"0lb 3.1oz",
+ u"0lb 0.31oz",
+ u"0lb 0oz");
+
+ assertFormatDescending(
+ uTestCase.getTerminatedBuffer(),
+ u"usage/person unit-width-short measure-unit/mass-kilogram",
+ u"usage/person unit-width-short unit/kilogram",
+ unloc_formatter.unitWidth(UNUM_UNIT_WIDTH_SHORT),
+ Locale("en-GB"),
+ u"13,802 st, 7.2 lb",
+ u"1,380 st, 3.5 lb",
+ u"138 st, 0.35 lb",
+ u"13 st, 11 lb",
+ u"1 st, 5.3 lb",
+ u"1 lb, 15 oz",
+ u"0 lb, 3.1 oz",
+ u"0 lb, 0.31 oz",
+ u"0 lb, 0 oz");
+
+ assertFormatDescending(
+ uTestCase.getTerminatedBuffer(),
+ u"usage/person unit-width-full-name measure-unit/mass-kilogram",
+ u"usage/person unit-width-full-name unit/kilogram",
+ unloc_formatter.unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-GB"),
+ u"13,802 stone, 7.2 pounds",
+ u"1,380 stone, 3.5 pounds",
+ u"138 stone, 0.35 pounds",
+ u"13 stone, 11 pounds",
+ u"1 stone, 5.3 pounds",
+ u"1 pound, 15 ounces",
+ u"0 pounds, 3.1 ounces",
+ u"0 pounds, 0.31 ounces",
+ u"0 pounds, 0 ounces");
+
+ assertFormatDescendingBig(
+ u"Scientific notation with Usage: possible when using a reasonable Precision",
+ u"scientific @### usage/default measure-unit/area-square-meter unit-width-full-name",
+ u"scientific @### usage/default unit/square-meter unit-width-full-name",
+ NumberFormatter::with()
+ .unit(SQUARE_METER)
+ .usage("default")
+ .notation(Notation::scientific())
+ .precision(Precision::minMaxSignificantDigits(1, 4))
+ .unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-ZA"),
+ u"8,765E1 square kilometres",
+ u"8,765E0 square kilometres",
+ u"8,765E1 hectares",
+ u"8,765E0 hectares",
+ u"8,765E3 square metres",
+ u"8,765E2 square metres",
+ u"8,765E1 square metres",
+ u"8,765E0 square metres",
+ u"0E0 square centimetres");
+
+ assertFormatSingle(
+ u"Negative numbers: minute-and-second",
+ u"measure-unit/duration-second usage/media",
+ u"unit/second usage/media",
+ NumberFormatter::with().unit(SECOND).usage("media"),
+ Locale("nl-NL"),
+ -77.7,
+ u"-1 min, 18 sec");
+
+ assertFormatSingle(
+ u"Rounding Mode propagates: rounding down",
+ u"usage/road measure-unit/length-centimeter rounding-mode-floor",
+ u"usage/road unit/centimeter rounding-mode-floor",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("centimeter", status))
+ .usage("road")
+ .roundingMode(UNUM_ROUND_FLOOR),
+ Locale("en-ZA"),
+ 34500,
+ u"300 m");
+
+ assertFormatSingle(
+ u"Rounding Mode propagates: rounding up",
+ u"usage/road measure-unit/length-centimeter rounding-mode-ceiling",
+ u"usage/road unit/centimeter rounding-mode-ceiling",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("centimeter", status))
+ .usage("road")
+ .roundingMode(UNUM_ROUND_CEILING),
+ Locale("en-ZA"),
+ 30500,
+ u"350 m");
+
+ // TODO(icu-units#38): improve unit testing coverage. E.g. add vehicle-fuel
+ // triggering inversion conversion code. Test with 0 too, to see
+ // divide-by-zero behaviour.
+}
+
+void NumberFormatterApiTest::unitUsageErrorCodes() {
+ IcuTestErrorCode status(*this, "unitUsageErrorCodes()");
+ UnlocalizedNumberFormatter unloc_formatter;
+
+ unloc_formatter = NumberFormatter::forSkeleton(u"unit/foobar", status);
+ // This gives an error, because foobar is an invalid unit:
+ status.expectErrorAndReset(U_NUMBER_SKELETON_SYNTAX_ERROR);
+
+ unloc_formatter = NumberFormatter::forSkeleton(u"usage/foobar", status);
+ // This does not give an error, because usage is not looked up yet.
+ status.errIfFailureAndReset("Expected behaviour: no immediate error for invalid usage");
+ unloc_formatter.locale("en-GB").formatInt(1, status);
+ // Lacking a unit results in a failure. The skeleton is "incomplete", but we
+ // support adding the unit via the fluent API, so it is not an error until
+ // we build the formatting pipeline itself.
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ // Adding the unit as part of the fluent chain leads to success.
+ unloc_formatter.unit(MeasureUnit::getMeter()).locale("en-GB").formatInt(1, status);
+ status.assertSuccess();
+}
+
+// Tests for the "skeletons" field in unitPreferenceData, as well as precision
+// and notation overrides.
+void NumberFormatterApiTest::unitUsageSkeletons() {
+ IcuTestErrorCode status(*this, "unitUsageSkeletons()");
+
+ assertFormatSingle(
+ u"Default >300m road preference skeletons round to 50m",
+ u"usage/road measure-unit/length-meter",
+ u"usage/road unit/meter",
+ NumberFormatter::with().unit(METER).usage("road"),
+ Locale("en-ZA"),
+ 321,
+ u"300 m");
+
+ assertFormatSingle(
+ u"Precision can be overridden: override takes precedence",
+ u"usage/road measure-unit/length-meter @#",
+ u"usage/road unit/meter @#",
+ NumberFormatter::with()
+ .unit(METER)
+ .usage("road")
+ .precision(Precision::maxSignificantDigits(2)),
+ Locale("en-ZA"),
+ 321,
+ u"320 m");
+
+ assertFormatSingle(
+ u"Compact notation with Usage: bizarre, but possible (short)",
+ u"compact-short usage/road measure-unit/length-meter",
+ u"compact-short usage/road unit/meter",
+ NumberFormatter::with()
+ .unit(METER)
+ .usage("road")
+ .notation(Notation::compactShort()),
+ Locale("en-ZA"),
+ 987654321,
+ u"988K km");
+
+ assertFormatSingle(
+ u"Compact notation with Usage: bizarre, but possible (short, precision override)",
+ u"compact-short usage/road measure-unit/length-meter @#",
+ u"compact-short usage/road unit/meter @#",
+ NumberFormatter::with()
+ .unit(METER)
+ .usage("road")
+ .notation(Notation::compactShort())
+ .precision(Precision::maxSignificantDigits(2)),
+ Locale("en-ZA"),
+ 987654321,
+ u"990K km");
+
+ assertFormatSingle(
+ u"Compact notation with Usage: unusual but possible (long)",
+ u"compact-long usage/road measure-unit/length-meter @#",
+ u"compact-long usage/road unit/meter @#",
+ NumberFormatter::with()
+ .unit(METER)
+ .usage("road")
+ .notation(Notation::compactLong())
+ .precision(Precision::maxSignificantDigits(2)),
+ Locale("en-ZA"),
+ 987654321,
+ u"990 thousand km");
+
+ assertFormatSingle(
+ u"Compact notation with Usage: unusual but possible (long, precision override)",
+ u"compact-long usage/road measure-unit/length-meter @#",
+ u"compact-long usage/road unit/meter @#",
+ NumberFormatter::with()
+ .unit(METER)
+ .usage("road")
+ .notation(Notation::compactLong())
+ .precision(Precision::maxSignificantDigits(2)),
+ Locale("en-ZA"),
+ 987654321,
+ u"990 thousand km");
+
+ assertFormatSingle(
+ u"Scientific notation, not recommended, requires precision override for road",
+ u"scientific usage/road measure-unit/length-meter",
+ u"scientific usage/road unit/meter",
+ NumberFormatter::with().unit(METER).usage("road").notation(Notation::scientific()),
+ Locale("en-ZA"),
+ 321.45,
+ // Rounding to the nearest "50" is not exponent-adjusted in scientific notation:
+ u"0E2 m");
+
+ assertFormatSingle(
+ u"Scientific notation with Usage: possible when using a reasonable Precision",
+ u"scientific usage/road measure-unit/length-meter @###",
+ u"scientific usage/road unit/meter @###",
+ NumberFormatter::with()
+ .unit(METER)
+ .usage("road")
+ .notation(Notation::scientific())
+ .precision(Precision::maxSignificantDigits(4)),
+ Locale("en-ZA"),
+ 321.45, // 0.45 rounds down, 0.55 rounds up.
+ u"3,214E2 m");
+
+ assertFormatSingle(
+ u"Scientific notation with Usage: possible when using a reasonable Precision",
+ u"scientific usage/default measure-unit/length-astronomical-unit unit-width-full-name",
+ u"scientific usage/default unit/astronomical-unit unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("astronomical-unit", status))
+ .usage("default")
+ .notation(Notation::scientific())
+ .unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-ZA"),
+ 1e20,
+ u"1,5E28 kilometres");
+
+ status.assertSuccess();
}
void NumberFormatterApiTest::unitCurrency() {
assertFormatDescending(
u"Currency",
u"currency/GBP",
+ u"currency/GBP",
NumberFormatter::with().unit(GBP),
Locale::getEnglish(),
u"£87,650.00",
@@ -692,6 +1569,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatDescending(
u"Currency ISO",
u"currency/GBP unit-width-iso-code",
+ u"currency/GBP unit-width-iso-code",
NumberFormatter::with().unit(GBP).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE),
Locale::getEnglish(),
u"GBP 87,650.00",
@@ -707,6 +1585,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatDescending(
u"Currency Long Name",
u"currency/GBP unit-width-full-name",
+ u"currency/GBP unit-width-full-name",
NumberFormatter::with().unit(GBP).unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
Locale::getEnglish(),
u"87,650.00 British pounds",
@@ -722,6 +1601,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatDescending(
u"Currency Hidden",
u"currency/GBP unit-width-hidden",
+ u"currency/GBP unit-width-hidden",
NumberFormatter::with().unit(GBP).unitWidth(UNUM_UNIT_WIDTH_HIDDEN),
Locale::getEnglish(),
u"87,650.00",
@@ -752,6 +1632,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency with Negative Sign",
u"currency/GBP",
+ u"currency/GBP",
NumberFormatter::with().unit(GBP),
Locale::getEnglish(),
-9876543.21,
@@ -762,6 +1643,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency Difference between Narrow and Short (Narrow Version)",
u"currency/USD unit-width-narrow",
+ u"currency/USD unit-width-narrow",
NumberFormatter::with().unit(USD).unitWidth(UNUM_UNIT_WIDTH_NARROW),
Locale("en-CA"),
5.43,
@@ -770,14 +1652,52 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency Difference between Narrow and Short (Short Version)",
u"currency/USD unit-width-short",
+ u"currency/USD unit-width-short",
NumberFormatter::with().unit(USD).unitWidth(UNUM_UNIT_WIDTH_SHORT),
Locale("en-CA"),
5.43,
u"US$5.43");
assertFormatSingle(
+ u"Currency Difference between Formal and Short (Formal Version)",
+ u"currency/TWD unit-width-formal",
+ u"currency/TWD unit-width-formal",
+ NumberFormatter::with().unit(TWD).unitWidth(UNUM_UNIT_WIDTH_FORMAL),
+ Locale("zh-TW"),
+ 5.43,
+ u"NT$5.43");
+
+ assertFormatSingle(
+ u"Currency Difference between Formal and Short (Short Version)",
+ u"currency/TWD unit-width-short",
+ u"currency/TWD unit-width-short",
+ NumberFormatter::with().unit(TWD).unitWidth(UNUM_UNIT_WIDTH_SHORT),
+ Locale("zh-TW"),
+ 5.43,
+ u"$5.43");
+
+ assertFormatSingle(
+ u"Currency Difference between Variant and Short (Formal Version)",
+ u"currency/TRY unit-width-variant",
+ u"currency/TRY unit-width-variant",
+ NumberFormatter::with().unit(TRY).unitWidth(UNUM_UNIT_WIDTH_VARIANT),
+ Locale("tr-TR"),
+ 5.43,
+ u"TL\u00A05,43");
+
+ assertFormatSingle(
+ u"Currency Difference between Variant and Short (Short Version)",
+ u"currency/TRY unit-width-short",
+ u"currency/TRY unit-width-short",
+ NumberFormatter::with().unit(TRY).unitWidth(UNUM_UNIT_WIDTH_SHORT),
+ Locale("tr-TR"),
+ 5.43,
+ u"₺5,43");
+
+ assertFormatSingle(
u"Currency-dependent format (Control)",
u"currency/USD unit-width-short",
+ u"currency/USD unit-width-short",
NumberFormatter::with().unit(USD).unitWidth(UNUM_UNIT_WIDTH_SHORT),
Locale("ca"),
444444.55,
@@ -786,6 +1706,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency-dependent format (Test)",
u"currency/ESP unit-width-short",
+ u"currency/ESP unit-width-short",
NumberFormatter::with().unit(ESP).unitWidth(UNUM_UNIT_WIDTH_SHORT),
Locale("ca"),
444444.55,
@@ -794,6 +1715,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency-dependent symbols (Control)",
u"currency/USD unit-width-short",
+ u"currency/USD unit-width-short",
NumberFormatter::with().unit(USD).unitWidth(UNUM_UNIT_WIDTH_SHORT),
Locale("pt-PT"),
444444.55,
@@ -804,6 +1726,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency-dependent symbols (Test Short)",
u"currency/PTE unit-width-short",
+ u"currency/PTE unit-width-short",
NumberFormatter::with().unit(PTE).unitWidth(UNUM_UNIT_WIDTH_SHORT),
Locale("pt-PT"),
444444.55,
@@ -812,6 +1735,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency-dependent symbols (Test Narrow)",
u"currency/PTE unit-width-narrow",
+ u"currency/PTE unit-width-narrow",
NumberFormatter::with().unit(PTE).unitWidth(UNUM_UNIT_WIDTH_NARROW),
Locale("pt-PT"),
444444.55,
@@ -820,6 +1744,7 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Currency-dependent symbols (Test ISO Code)",
u"currency/PTE unit-width-iso-code",
+ u"currency/PTE unit-width-iso-code",
NumberFormatter::with().unit(PTE).unitWidth(UNUM_UNIT_WIDTH_ISO_CODE),
Locale("pt-PT"),
444444.55,
@@ -828,16 +1753,27 @@ void NumberFormatterApiTest::unitCurrency() {
assertFormatSingle(
u"Plural form depending on visible digits (ICU-20499)",
u"currency/RON unit-width-full-name",
+ u"currency/RON unit-width-full-name",
NumberFormatter::with().unit(RON).unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
Locale("ro-RO"),
24,
u"24,00 lei românești");
+
+ assertFormatSingle(
+ u"Currency spacing in suffix (ICU-20954)",
+ u"currency/CNY",
+ u"currency/CNY",
+ NumberFormatter::with().unit(CNY),
+ Locale("lu"),
+ 123.12,
+ u"123,12 CN¥");
}
void NumberFormatterApiTest::unitPercent() {
assertFormatDescending(
u"Percent",
u"percent",
+ u"%",
NumberFormatter::with().unit(NoUnit::percent()),
Locale::getEnglish(),
u"87,650%",
@@ -853,6 +1789,7 @@ void NumberFormatterApiTest::unitPercent() {
assertFormatDescending(
u"Permille",
u"permille",
+ u"permille",
NumberFormatter::with().unit(NoUnit::permille()),
Locale::getEnglish(),
u"87,650‰",
@@ -868,6 +1805,7 @@ void NumberFormatterApiTest::unitPercent() {
assertFormatSingle(
u"NoUnit Base",
u"base-unit",
+ u"",
NumberFormatter::with().unit(NoUnit::base()),
Locale::getEnglish(),
51423,
@@ -876,10 +1814,82 @@ void NumberFormatterApiTest::unitPercent() {
assertFormatSingle(
u"Percent with Negative Sign",
u"percent",
+ u"%",
NumberFormatter::with().unit(NoUnit::percent()),
Locale::getEnglish(),
-98.7654321,
u"-98.765432%");
+
+ // ICU-20923
+ assertFormatDescendingBig(
+ u"Compact Percent",
+ u"compact-short percent",
+ u"K %",
+ NumberFormatter::with()
+ .notation(Notation::compactShort())
+ .unit(NoUnit::percent()),
+ Locale::getEnglish(),
+ u"88M%",
+ u"8.8M%",
+ u"876K%",
+ u"88K%",
+ u"8.8K%",
+ u"876%",
+ u"88%",
+ u"8.8%",
+ u"0%");
+
+ // ICU-20923
+ assertFormatDescendingBig(
+ u"Compact Percent with Scale",
+ u"compact-short percent scale/100",
+ u"K %x100",
+ NumberFormatter::with()
+ .notation(Notation::compactShort())
+ .unit(NoUnit::percent())
+ .scale(Scale::powerOfTen(2)),
+ Locale::getEnglish(),
+ u"8.8B%",
+ u"876M%",
+ u"88M%",
+ u"8.8M%",
+ u"876K%",
+ u"88K%",
+ u"8.8K%",
+ u"876%",
+ u"0%");
+
+ // ICU-20923
+ assertFormatDescendingBig(
+ u"Compact Percent Long Name",
+ u"compact-short percent unit-width-full-name",
+ u"K % unit-width-full-name",
+ NumberFormatter::with()
+ .notation(Notation::compactShort())
+ .unit(NoUnit::percent())
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale::getEnglish(),
+ u"88M percent",
+ u"8.8M percent",
+ u"876K percent",
+ u"88K percent",
+ u"8.8K percent",
+ u"876 percent",
+ u"88 percent",
+ u"8.8 percent",
+ u"0 percent");
+
+ assertFormatSingle(
+ u"Per Percent",
+ u"measure-unit/length-meter per-measure-unit/concentr-percent unit-width-full-name",
+ u"measure-unit/length-meter per-measure-unit/concentr-percent unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::getMeter())
+ .perUnit(MeasureUnit::getPercent())
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale::getEnglish(),
+ 50,
+ u"50 meters per percent");
}
void NumberFormatterApiTest::percentParity() {
@@ -913,6 +1923,7 @@ void NumberFormatterApiTest::roundingFraction() {
assertFormatDescending(
u"Integer",
u"precision-integer",
+ u".",
NumberFormatter::with().precision(Precision::integer()),
Locale::getEnglish(),
u"87,650",
@@ -928,6 +1939,7 @@ void NumberFormatterApiTest::roundingFraction() {
assertFormatDescending(
u"Fixed Fraction",
u".000",
+ u".000",
NumberFormatter::with().precision(Precision::fixedFraction(3)),
Locale::getEnglish(),
u"87,650.000",
@@ -942,6 +1954,7 @@ void NumberFormatterApiTest::roundingFraction() {
assertFormatDescending(
u"Min Fraction",
+ u".0*",
u".0+",
NumberFormatter::with().precision(Precision::minFraction(1)),
Locale::getEnglish(),
@@ -958,6 +1971,7 @@ void NumberFormatterApiTest::roundingFraction() {
assertFormatDescending(
u"Max Fraction",
u".#",
+ u".#",
NumberFormatter::with().precision(Precision::maxFraction(1)),
Locale::getEnglish(),
u"87,650",
@@ -973,6 +1987,7 @@ void NumberFormatterApiTest::roundingFraction() {
assertFormatDescending(
u"Min/Max Fraction",
u".0##",
+ u".0##",
NumberFormatter::with().precision(Precision::minMaxFraction(1, 3)),
Locale::getEnglish(),
u"87,650.0",
@@ -990,6 +2005,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Fixed Significant",
u"@@@",
+ u"@@@",
NumberFormatter::with().precision(Precision::fixedSignificantDigits(3)),
Locale::getEnglish(),
-98,
@@ -998,6 +2014,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Fixed Significant Rounding",
u"@@@",
+ u"@@@",
NumberFormatter::with().precision(Precision::fixedSignificantDigits(3)),
Locale::getEnglish(),
-98.7654321,
@@ -1006,6 +2023,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Fixed Significant Zero",
u"@@@",
+ u"@@@",
NumberFormatter::with().precision(Precision::fixedSignificantDigits(3)),
Locale::getEnglish(),
0,
@@ -1013,6 +2031,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Min Significant",
+ u"@@*",
u"@@+",
NumberFormatter::with().precision(Precision::minSignificantDigits(2)),
Locale::getEnglish(),
@@ -1022,6 +2041,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Max Significant",
u"@###",
+ u"@###",
NumberFormatter::with().precision(Precision::maxSignificantDigits(4)),
Locale::getEnglish(),
98.7654321,
@@ -1030,6 +2050,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Min/Max Significant",
u"@@@#",
+ u"@@@#",
NumberFormatter::with().precision(Precision::minMaxSignificantDigits(3, 4)),
Locale::getEnglish(),
9.99999,
@@ -1038,6 +2059,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Fixed Significant on zero with lots of integer width",
u"@ integer-width/+000",
+ u"@ 000",
NumberFormatter::with().precision(Precision::fixedSignificantDigits(1))
.integerWidth(IntegerWidth::zeroFillTo(3)),
Locale::getEnglish(),
@@ -1046,6 +2068,7 @@ void NumberFormatterApiTest::roundingFigures() {
assertFormatSingle(
u"Fixed Significant on zero with zero integer width",
+ u"@ integer-width/*",
u"@ integer-width/+",
NumberFormatter::with().precision(Precision::fixedSignificantDigits(1))
.integerWidth(IntegerWidth::zeroFillTo(0)),
@@ -1058,6 +2081,7 @@ void NumberFormatterApiTest::roundingFractionFigures() {
assertFormatDescending(
u"Basic Significant", // for comparison
u"@#",
+ u"@#",
NumberFormatter::with().precision(Precision::maxSignificantDigits(2)),
Locale::getEnglish(),
u"88,000",
@@ -1072,6 +2096,7 @@ void NumberFormatterApiTest::roundingFractionFigures() {
assertFormatDescending(
u"FracSig minMaxFrac minSig",
+ u".0#/@@@*",
u".0#/@@@+",
NumberFormatter::with().precision(Precision::minMaxFraction(1, 2).withMinDigits(3)),
Locale::getEnglish(),
@@ -1088,6 +2113,7 @@ void NumberFormatterApiTest::roundingFractionFigures() {
assertFormatDescending(
u"FracSig minMaxFrac maxSig A",
u".0##/@#",
+ u".0##/@#",
NumberFormatter::with().precision(Precision::minMaxFraction(1, 3).withMaxDigits(2)),
Locale::getEnglish(),
u"88,000.0", // maxSig beats maxFrac
@@ -1103,6 +2129,7 @@ void NumberFormatterApiTest::roundingFractionFigures() {
assertFormatDescending(
u"FracSig minMaxFrac maxSig B",
u".00/@#",
+ u".00/@#",
NumberFormatter::with().precision(Precision::fixedFraction(2).withMaxDigits(2)),
Locale::getEnglish(),
u"88,000.00", // maxSig beats maxFrac
@@ -1117,6 +2144,7 @@ void NumberFormatterApiTest::roundingFractionFigures() {
assertFormatSingle(
u"FracSig with trailing zeros A",
+ u".00/@@@*",
u".00/@@@+",
NumberFormatter::with().precision(Precision::fixedFraction(2).withMinDigits(3)),
Locale::getEnglish(),
@@ -1125,6 +2153,7 @@ void NumberFormatterApiTest::roundingFractionFigures() {
assertFormatSingle(
u"FracSig with trailing zeros B",
+ u".00/@@@*",
u".00/@@@+",
NumberFormatter::with().precision(Precision::fixedFraction(2).withMinDigits(3)),
Locale::getEnglish(),
@@ -1136,6 +2165,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Rounding None",
u"precision-unlimited",
+ u".+",
NumberFormatter::with().precision(Precision::unlimited()),
Locale::getEnglish(),
u"87,650",
@@ -1151,6 +2181,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Increment",
u"precision-increment/0.5",
+ u"precision-increment/0.5",
NumberFormatter::with().precision(Precision::increment(0.5).withMinFraction(1)),
Locale::getEnglish(),
u"87,650.0",
@@ -1166,6 +2197,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Increment with Min Fraction",
u"precision-increment/0.50",
+ u"precision-increment/0.50",
NumberFormatter::with().precision(Precision::increment(0.5).withMinFraction(2)),
Locale::getEnglish(),
u"87,650.00",
@@ -1181,6 +2213,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Strange Increment",
u"precision-increment/3.140",
+ u"precision-increment/3.140",
NumberFormatter::with().precision(Precision::increment(3.14).withMinFraction(3)),
Locale::getEnglish(),
u"87,649.960",
@@ -1196,6 +2229,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Increment Resolving to Power of 10",
u"precision-increment/0.010",
+ u"precision-increment/0.010",
NumberFormatter::with().precision(Precision::increment(0.01).withMinFraction(3)),
Locale::getEnglish(),
u"87,650.000",
@@ -1211,6 +2245,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Currency Standard",
u"currency/CZK precision-currency-standard",
+ u"currency/CZK precision-currency-standard",
NumberFormatter::with().precision(Precision::currency(UCurrencyUsage::UCURR_USAGE_STANDARD))
.unit(CZK),
Locale::getEnglish(),
@@ -1227,6 +2262,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Currency Cash",
u"currency/CZK precision-currency-cash",
+ u"currency/CZK precision-currency-cash",
NumberFormatter::with().precision(Precision::currency(UCurrencyUsage::UCURR_USAGE_CASH))
.unit(CZK),
Locale::getEnglish(),
@@ -1243,6 +2279,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Currency Cash with Nickel Rounding",
u"currency/CAD precision-currency-cash",
+ u"currency/CAD precision-currency-cash",
NumberFormatter::with().precision(Precision::currency(UCurrencyUsage::UCURR_USAGE_CASH))
.unit(CAD),
Locale::getEnglish(),
@@ -1259,6 +2296,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Currency not in top-level fluent chain",
u"precision-integer", // calling .withCurrency() applies currency rounding rules immediately
+ u".",
NumberFormatter::with().precision(
Precision::currency(UCurrencyUsage::UCURR_USAGE_CASH).withCurrency(CZK)),
Locale::getEnglish(),
@@ -1276,6 +2314,7 @@ void NumberFormatterApiTest::roundingOther() {
assertFormatDescending(
u"Rounding Mode CEILING",
u"precision-integer rounding-mode-ceiling",
+ u". rounding-mode-ceiling",
NumberFormatter::with().precision(Precision::integer()).roundingMode(UNUM_ROUND_CEILING),
Locale::getEnglish(),
u"87,650",
@@ -1287,12 +2326,37 @@ void NumberFormatterApiTest::roundingOther() {
u"1",
u"1",
u"0");
+
+ assertFormatSingle(
+ u"ICU-20974 Double.MIN_NORMAL",
+ u"scientific",
+ u"E0",
+ NumberFormatter::with().notation(Notation::scientific()),
+ Locale::getEnglish(),
+ DBL_MIN,
+ u"2.225074E-308");
+
+#ifndef DBL_TRUE_MIN
+#define DBL_TRUE_MIN 4.9E-324
+#endif
+
+ // Note: this behavior is intentionally different from Java; see
+ // https://github.com/google/double-conversion/issues/126
+ assertFormatSingle(
+ u"ICU-20974 Double.MIN_VALUE",
+ u"scientific",
+ u"E0",
+ NumberFormatter::with().notation(Notation::scientific()),
+ Locale::getEnglish(),
+ DBL_TRUE_MIN,
+ u"5E-324");
}
void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Western Grouping",
u"group-auto",
+ u"",
NumberFormatter::with().grouping(UNUM_GROUPING_AUTO),
Locale::getEnglish(),
u"87,650,000",
@@ -1308,6 +2372,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Indic Grouping",
u"group-auto",
+ u"",
NumberFormatter::with().grouping(UNUM_GROUPING_AUTO),
Locale("en-IN"),
u"8,76,50,000",
@@ -1323,6 +2388,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Western Grouping, Min 2",
u"group-min2",
+ u",?",
NumberFormatter::with().grouping(UNUM_GROUPING_MIN2),
Locale::getEnglish(),
u"87,650,000",
@@ -1338,6 +2404,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Indic Grouping, Min 2",
u"group-min2",
+ u",?",
NumberFormatter::with().grouping(UNUM_GROUPING_MIN2),
Locale("en-IN"),
u"8,76,50,000",
@@ -1353,6 +2420,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"No Grouping",
u"group-off",
+ u",_",
NumberFormatter::with().grouping(UNUM_GROUPING_OFF),
Locale("en-IN"),
u"87650000",
@@ -1368,6 +2436,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Indic locale with THOUSANDS grouping",
u"group-thousands",
+ u"group-thousands",
NumberFormatter::with().grouping(UNUM_GROUPING_THOUSANDS),
Locale("en-IN"),
u"87,650,000",
@@ -1386,6 +2455,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Polish Grouping",
u"group-auto",
+ u"",
NumberFormatter::with().grouping(UNUM_GROUPING_AUTO),
Locale("pl"),
u"87 650 000",
@@ -1401,6 +2471,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Polish Grouping, Min 2",
u"group-min2",
+ u",?",
NumberFormatter::with().grouping(UNUM_GROUPING_MIN2),
Locale("pl"),
u"87 650 000",
@@ -1416,6 +2487,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Polish Grouping, Always",
u"group-on-aligned",
+ u",!",
NumberFormatter::with().grouping(UNUM_GROUPING_ON_ALIGNED),
Locale("pl"),
u"87 650 000",
@@ -1433,6 +2505,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Bulgarian Currency Grouping",
u"currency/USD group-auto",
+ u"currency/USD",
NumberFormatter::with().grouping(UNUM_GROUPING_AUTO).unit(USD),
Locale("bg"),
u"87650000,00 щ.д.",
@@ -1448,6 +2521,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Bulgarian Currency Grouping, Always",
u"currency/USD group-on-aligned",
+ u"currency/USD ,!",
NumberFormatter::with().grouping(UNUM_GROUPING_ON_ALIGNED).unit(USD),
Locale("bg"),
u"87 650 000,00 щ.д.",
@@ -1465,6 +2539,7 @@ void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Custom Grouping via Internal API",
nullptr,
+ nullptr,
NumberFormatter::with().macros(macros),
Locale::getEnglish(),
u"8,7,6,5,0000",
@@ -1482,6 +2557,7 @@ void NumberFormatterApiTest::padding() {
assertFormatDescending(
u"Padding",
nullptr,
+ nullptr,
NumberFormatter::with().padding(Padder::none()),
Locale::getEnglish(),
u"87,650",
@@ -1497,6 +2573,7 @@ void NumberFormatterApiTest::padding() {
assertFormatDescending(
u"Padding",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 8, PadPosition::UNUM_PAD_AFTER_PREFIX)),
@@ -1514,6 +2591,7 @@ void NumberFormatterApiTest::padding() {
assertFormatDescending(
u"Padding with code points",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
0x101E4, 8, PadPosition::UNUM_PAD_AFTER_PREFIX)),
@@ -1531,6 +2609,7 @@ void NumberFormatterApiTest::padding() {
assertFormatDescending(
u"Padding with wide digits",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 8, PadPosition::UNUM_PAD_AFTER_PREFIX))
@@ -1549,6 +2628,7 @@ void NumberFormatterApiTest::padding() {
assertFormatDescending(
u"Padding with currency spacing",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 10, PadPosition::UNUM_PAD_AFTER_PREFIX))
@@ -1568,6 +2648,7 @@ void NumberFormatterApiTest::padding() {
assertFormatSingle(
u"Pad Before Prefix",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 8, PadPosition::UNUM_PAD_BEFORE_PREFIX)),
@@ -1578,6 +2659,7 @@ void NumberFormatterApiTest::padding() {
assertFormatSingle(
u"Pad After Prefix",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 8, PadPosition::UNUM_PAD_AFTER_PREFIX)),
@@ -1588,6 +2670,7 @@ void NumberFormatterApiTest::padding() {
assertFormatSingle(
u"Pad Before Suffix",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 8, PadPosition::UNUM_PAD_BEFORE_SUFFIX)).unit(NoUnit::percent()),
@@ -1598,6 +2681,7 @@ void NumberFormatterApiTest::padding() {
assertFormatSingle(
u"Pad After Suffix",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'*', 8, PadPosition::UNUM_PAD_AFTER_SUFFIX)).unit(NoUnit::percent()),
@@ -1608,6 +2692,7 @@ void NumberFormatterApiTest::padding() {
assertFormatSingle(
u"Currency Spacing with Zero Digit Padding Broken",
nullptr,
+ nullptr,
NumberFormatter::with().padding(
Padder::codePoints(
'0', 12, PadPosition::UNUM_PAD_AFTER_PREFIX))
@@ -1622,6 +2707,7 @@ void NumberFormatterApiTest::integerWidth() {
assertFormatDescending(
u"Integer Width Default",
u"integer-width/+0",
+ u"0",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(1)),
Locale::getEnglish(),
u"87,650",
@@ -1636,6 +2722,7 @@ void NumberFormatterApiTest::integerWidth() {
assertFormatDescending(
u"Integer Width Zero Fill 0",
+ u"integer-width/*",
u"integer-width/+",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(0)),
Locale::getEnglish(),
@@ -1647,11 +2734,12 @@ void NumberFormatterApiTest::integerWidth() {
u".8765",
u".08765",
u".008765",
- u""); // TODO: Avoid the empty string here?
+ u"0"); // see ICU-20844
assertFormatDescending(
u"Integer Width Zero Fill 3",
u"integer-width/+000",
+ u"000",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(3)),
Locale::getEnglish(),
u"87,650",
@@ -1667,6 +2755,7 @@ void NumberFormatterApiTest::integerWidth() {
assertFormatDescending(
u"Integer Width Max 3",
u"integer-width/##0",
+ u"integer-width/##0",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(1).truncateAt(3)),
Locale::getEnglish(),
u"650",
@@ -1682,6 +2771,7 @@ void NumberFormatterApiTest::integerWidth() {
assertFormatDescending(
u"Integer Width Fixed 2",
u"integer-width/00",
+ u"integer-width/00",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(2).truncateAt(2)),
Locale::getEnglish(),
u"50",
@@ -1694,9 +2784,64 @@ void NumberFormatterApiTest::integerWidth() {
u"00.008765",
u"00");
+ assertFormatDescending(
+ u"Integer Width Compact",
+ u"compact-short integer-width/000",
+ u"compact-short integer-width/000",
+ NumberFormatter::with()
+ .notation(Notation::compactShort())
+ .integerWidth(IntegerWidth::zeroFillTo(3).truncateAt(3)),
+ Locale::getEnglish(),
+ u"088K",
+ u"008.8K",
+ u"876",
+ u"088",
+ u"008.8",
+ u"000.88",
+ u"000.088",
+ u"000.0088",
+ u"000");
+
+ assertFormatDescending(
+ u"Integer Width Scientific",
+ u"scientific integer-width/000",
+ u"scientific integer-width/000",
+ NumberFormatter::with()
+ .notation(Notation::scientific())
+ .integerWidth(IntegerWidth::zeroFillTo(3).truncateAt(3)),
+ Locale::getEnglish(),
+ u"008.765E4",
+ u"008.765E3",
+ u"008.765E2",
+ u"008.765E1",
+ u"008.765E0",
+ u"008.765E-1",
+ u"008.765E-2",
+ u"008.765E-3",
+ u"000E0");
+
+ assertFormatDescending(
+ u"Integer Width Engineering",
+ u"engineering integer-width/000",
+ u"engineering integer-width/000",
+ NumberFormatter::with()
+ .notation(Notation::engineering())
+ .integerWidth(IntegerWidth::zeroFillTo(3).truncateAt(3)),
+ Locale::getEnglish(),
+ u"087.65E3",
+ u"008.765E3",
+ u"876.5E0",
+ u"087.65E0",
+ u"008.765E0",
+ u"876.5E-3",
+ u"087.65E-3",
+ u"008.765E-3",
+ u"000E0");
+
assertFormatSingle(
u"Integer Width Remove All A",
u"integer-width/00",
+ u"integer-width/00",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(2).truncateAt(2)),
"en",
2500,
@@ -1705,6 +2850,7 @@ void NumberFormatterApiTest::integerWidth() {
assertFormatSingle(
u"Integer Width Remove All B",
u"integer-width/00",
+ u"integer-width/00",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(2).truncateAt(2)),
"en",
25000,
@@ -1713,6 +2859,7 @@ void NumberFormatterApiTest::integerWidth() {
assertFormatSingle(
u"Integer Width Remove All B, Bytes Mode",
u"integer-width/00",
+ u"integer-width/00",
NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(2).truncateAt(2)),
"en",
// Note: this double produces all 17 significant digits
@@ -1724,6 +2871,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatDescending(
u"French Symbols with Japanese Data 1",
nullptr,
+ nullptr,
NumberFormatter::with().symbols(FRENCH_SYMBOLS),
Locale::getJapan(),
u"87\u202F650",
@@ -1739,6 +2887,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"French Symbols with Japanese Data 2",
nullptr,
+ nullptr,
NumberFormatter::with().notation(Notation::compactShort()).symbols(FRENCH_SYMBOLS),
Locale::getJapan(),
12345,
@@ -1747,6 +2896,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatDescending(
u"Latin Numbering System with Arabic Data",
u"currency/USD latin",
+ u"currency/USD latin",
NumberFormatter::with().adoptSymbols(new NumberingSystem(LATN)).unit(USD),
Locale("ar"),
u"US$ 87,650.00",
@@ -1762,6 +2912,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatDescending(
u"Math Numbering System with French Data",
u"numbering-system/mathsanb",
+ u"numbering-system/mathsanb",
NumberFormatter::with().adoptSymbols(new NumberingSystem(MATHSANB)),
Locale::getFrench(),
u"ðŸ´ðŸ³\u202FðŸ²ðŸ±ðŸ¬",
@@ -1777,6 +2928,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"Swiss Symbols (used in documentation)",
nullptr,
+ nullptr,
NumberFormatter::with().symbols(SWISS_SYMBOLS),
Locale::getEnglish(),
12345.67,
@@ -1785,6 +2937,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"Myanmar Symbols (used in documentation)",
nullptr,
+ nullptr,
NumberFormatter::with().symbols(MYANMAR_SYMBOLS),
Locale::getEnglish(),
12345.67,
@@ -1795,6 +2948,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"Currency symbol should precede number in ar with NS latn",
u"currency/USD latin",
+ u"currency/USD latin",
NumberFormatter::with().adoptSymbols(new NumberingSystem(LATN)).unit(USD),
Locale("ar"),
12345.67,
@@ -1803,6 +2957,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"Currency symbol should precede number in ar@numbers=latn",
u"currency/USD",
+ u"currency/USD",
NumberFormatter::with().unit(USD),
Locale("ar@numbers=latn"),
12345.67,
@@ -1811,6 +2966,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"Currency symbol should follow number in ar-EG with NS arab",
u"currency/USD",
+ u"currency/USD",
NumberFormatter::with().unit(USD),
Locale("ar-EG"),
12345.67,
@@ -1819,6 +2975,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"Currency symbol should follow number in ar@numbers=arab",
u"currency/USD",
+ u"currency/USD",
NumberFormatter::with().unit(USD),
Locale("ar@numbers=arab"),
12345.67,
@@ -1827,6 +2984,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"NumberingSystem in API should win over @numbers keyword",
u"currency/USD latin",
+ u"currency/USD latin",
NumberFormatter::with().adoptSymbols(new NumberingSystem(LATN)).unit(USD),
Locale("ar@numbers=arab"),
12345.67,
@@ -1845,11 +3003,18 @@ void NumberFormatterApiTest::symbols() {
UnlocalizedNumberFormatter f = NumberFormatter::with().symbols(symbols);
symbols.setSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kGroupingSeparatorSymbol, u"!", status);
assertFormatSingle(
- u"Symbols object should be copied", nullptr, f, Locale::getEnglish(), 12345.67, u"12’345.67");
+ u"Symbols object should be copied",
+ nullptr,
+ nullptr,
+ f,
+ Locale::getEnglish(),
+ 12345.67,
+ u"12’345.67");
assertFormatSingle(
u"The last symbols setter wins",
u"latin",
+ u"latin",
NumberFormatter::with().symbols(symbols).adoptSymbols(new NumberingSystem(LATN)),
Locale::getEnglish(),
12345.67,
@@ -1858,6 +3023,7 @@ void NumberFormatterApiTest::symbols() {
assertFormatSingle(
u"The last symbols setter wins",
nullptr,
+ nullptr,
NumberFormatter::with().adoptSymbols(new NumberingSystem(LATN)).symbols(symbols),
Locale::getEnglish(),
12345.67,
@@ -1881,6 +3047,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Auto Positive",
u"sign-auto",
+ u"",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_AUTO),
Locale::getEnglish(),
444444,
@@ -1889,6 +3056,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Auto Negative",
u"sign-auto",
+ u"",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_AUTO),
Locale::getEnglish(),
-444444,
@@ -1897,6 +3065,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Auto Zero",
u"sign-auto",
+ u"",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_AUTO),
Locale::getEnglish(),
0,
@@ -1905,6 +3074,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Always Positive",
u"sign-always",
+ u"+!",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ALWAYS),
Locale::getEnglish(),
444444,
@@ -1913,6 +3083,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Always Negative",
u"sign-always",
+ u"+!",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ALWAYS),
Locale::getEnglish(),
-444444,
@@ -1921,6 +3092,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Always Zero",
u"sign-always",
+ u"+!",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ALWAYS),
Locale::getEnglish(),
0,
@@ -1929,6 +3101,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Never Positive",
u"sign-never",
+ u"+_",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_NEVER),
Locale::getEnglish(),
444444,
@@ -1937,6 +3110,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Never Negative",
u"sign-never",
+ u"+_",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_NEVER),
Locale::getEnglish(),
-444444,
@@ -1945,6 +3119,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Never Zero",
u"sign-never",
+ u"+_",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_NEVER),
Locale::getEnglish(),
0,
@@ -1953,6 +3128,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Positive",
u"currency/USD sign-accounting",
+ u"currency/USD ()",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING).unit(USD),
Locale::getEnglish(),
444444,
@@ -1961,6 +3137,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Negative",
u"currency/USD sign-accounting",
+ u"currency/USD ()",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING).unit(USD),
Locale::getEnglish(),
-444444,
@@ -1969,6 +3146,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Zero",
u"currency/USD sign-accounting",
+ u"currency/USD ()",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING).unit(USD),
Locale::getEnglish(),
0,
@@ -1977,6 +3155,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting-Always Positive",
u"currency/USD sign-accounting-always",
+ u"currency/USD ()!",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS).unit(USD),
Locale::getEnglish(),
444444,
@@ -1985,6 +3164,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting-Always Negative",
u"currency/USD sign-accounting-always",
+ u"currency/USD ()!",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS).unit(USD),
Locale::getEnglish(),
-444444,
@@ -1993,6 +3173,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting-Always Zero",
u"currency/USD sign-accounting-always",
+ u"currency/USD ()!",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS).unit(USD),
Locale::getEnglish(),
0,
@@ -2001,6 +3182,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Except-Zero Positive",
u"sign-except-zero",
+ u"+?",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO),
Locale::getEnglish(),
444444,
@@ -2009,6 +3191,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Except-Zero Negative",
u"sign-except-zero",
+ u"+?",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO),
Locale::getEnglish(),
-444444,
@@ -2017,6 +3200,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Except-Zero Zero",
u"sign-except-zero",
+ u"+?",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO),
Locale::getEnglish(),
0,
@@ -2025,6 +3209,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting-Except-Zero Positive",
u"currency/USD sign-accounting-except-zero",
+ u"currency/USD ()?",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO).unit(USD),
Locale::getEnglish(),
444444,
@@ -2033,6 +3218,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting-Except-Zero Negative",
u"currency/USD sign-accounting-except-zero",
+ u"currency/USD ()?",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO).unit(USD),
Locale::getEnglish(),
-444444,
@@ -2041,6 +3227,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting-Except-Zero Zero",
u"currency/USD sign-accounting-except-zero",
+ u"currency/USD ()?",
NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO).unit(USD),
Locale::getEnglish(),
0,
@@ -2049,6 +3236,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Negative Hidden",
u"currency/USD unit-width-hidden sign-accounting",
+ u"currency/USD unit-width-hidden ()",
NumberFormatter::with()
.sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING)
.unit(USD)
@@ -2060,6 +3248,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Negative Narrow",
u"currency/USD unit-width-narrow sign-accounting",
+ u"currency/USD unit-width-narrow ()",
NumberFormatter::with()
.sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING)
.unit(USD)
@@ -2071,6 +3260,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Negative Short",
u"currency/USD sign-accounting",
+ u"currency/USD ()",
NumberFormatter::with()
.sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING)
.unit(USD)
@@ -2082,6 +3272,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Negative Iso Code",
u"currency/USD unit-width-iso-code sign-accounting",
+ u"currency/USD unit-width-iso-code ()",
NumberFormatter::with()
.sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING)
.unit(USD)
@@ -2095,6 +3286,7 @@ void NumberFormatterApiTest::sign() {
assertFormatSingle(
u"Sign Accounting Negative Full Name",
u"currency/USD unit-width-full-name sign-accounting",
+ u"currency/USD unit-width-full-name ()",
NumberFormatter::with()
.sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING)
.unit(USD)
@@ -2104,6 +3296,49 @@ void NumberFormatterApiTest::sign() {
u"-444,444.00 US dollars");
}
+void NumberFormatterApiTest::signNearZero() {
+ // https://unicode-org.atlassian.net/browse/ICU-20709
+ IcuTestErrorCode status(*this, "signNearZero");
+ const struct TestCase {
+ UNumberSignDisplay sign;
+ double input;
+ const char16_t* expected;
+ } cases[] = {
+ { UNUM_SIGN_AUTO, 1.1, u"1" },
+ { UNUM_SIGN_AUTO, 0.9, u"1" },
+ { UNUM_SIGN_AUTO, 0.1, u"0" },
+ { UNUM_SIGN_AUTO, -0.1, u"-0" }, // interesting case
+ { UNUM_SIGN_AUTO, -0.9, u"-1" },
+ { UNUM_SIGN_AUTO, -1.1, u"-1" },
+ { UNUM_SIGN_ALWAYS, 1.1, u"+1" },
+ { UNUM_SIGN_ALWAYS, 0.9, u"+1" },
+ { UNUM_SIGN_ALWAYS, 0.1, u"+0" },
+ { UNUM_SIGN_ALWAYS, -0.1, u"-0" },
+ { UNUM_SIGN_ALWAYS, -0.9, u"-1" },
+ { UNUM_SIGN_ALWAYS, -1.1, u"-1" },
+ { UNUM_SIGN_EXCEPT_ZERO, 1.1, u"+1" },
+ { UNUM_SIGN_EXCEPT_ZERO, 0.9, u"+1" },
+ { UNUM_SIGN_EXCEPT_ZERO, 0.1, u"0" }, // interesting case
+ { UNUM_SIGN_EXCEPT_ZERO, -0.1, u"0" }, // interesting case
+ { UNUM_SIGN_EXCEPT_ZERO, -0.9, u"-1" },
+ { UNUM_SIGN_EXCEPT_ZERO, -1.1, u"-1" },
+ };
+ for (auto& cas : cases) {
+ auto sign = cas.sign;
+ auto input = cas.input;
+ auto expected = cas.expected;
+ auto actual = NumberFormatter::with()
+ .sign(sign)
+ .precision(Precision::integer())
+ .locale(Locale::getUS())
+ .formatDouble(input, status)
+ .toString(status);
+ assertEquals(
+ DoubleToUnicodeString(input) + " @ SignDisplay " + Int64ToUnicodeString(sign),
+ expected, actual);
+ }
+}
+
void NumberFormatterApiTest::signCoverage() {
// https://unicode-org.atlassian.net/browse/ICU-20708
IcuTestErrorCode status(*this, "signCoverage");
@@ -2114,7 +3349,7 @@ void NumberFormatterApiTest::signCoverage() {
{ UNUM_SIGN_AUTO, { u"-∞", u"-1", u"-0", u"0", u"1", u"∞", u"NaN", u"-NaN" } },
{ UNUM_SIGN_ALWAYS, { u"-∞", u"-1", u"-0", u"+0", u"+1", u"+∞", u"+NaN", u"-NaN" } },
{ UNUM_SIGN_NEVER, { u"∞", u"1", u"0", u"0", u"1", u"∞", u"NaN", u"NaN" } },
- { UNUM_SIGN_EXCEPT_ZERO, { u"-∞", u"-1", u"-0", u"0", u"+1", u"+∞", u"NaN", u"-NaN" } },
+ { UNUM_SIGN_EXCEPT_ZERO, { u"-∞", u"-1", u"0", u"0", u"+1", u"+∞", u"NaN", u"NaN" } },
};
double negNaN = std::copysign(uprv_getNaN(), -0.0);
const double inputs[] = {
@@ -2141,6 +3376,7 @@ void NumberFormatterApiTest::decimal() {
assertFormatDescending(
u"Decimal Default",
u"decimal-auto",
+ u"",
NumberFormatter::with().decimal(UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO),
Locale::getEnglish(),
u"87,650",
@@ -2156,6 +3392,7 @@ void NumberFormatterApiTest::decimal() {
assertFormatDescending(
u"Decimal Always Shown",
u"decimal-always",
+ u"decimal-always",
NumberFormatter::with().decimal(UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS),
Locale::getEnglish(),
u"87,650.",
@@ -2173,6 +3410,7 @@ void NumberFormatterApiTest::scale() {
assertFormatDescending(
u"Multiplier None",
u"scale/1",
+ u"",
NumberFormatter::with().scale(Scale::none()),
Locale::getEnglish(),
u"87,650",
@@ -2188,6 +3426,7 @@ void NumberFormatterApiTest::scale() {
assertFormatDescending(
u"Multiplier Power of Ten",
u"scale/1000000",
+ u"scale/1E6",
NumberFormatter::with().scale(Scale::powerOfTen(6)),
Locale::getEnglish(),
u"87,650,000,000",
@@ -2203,6 +3442,7 @@ void NumberFormatterApiTest::scale() {
assertFormatDescending(
u"Multiplier Arbitrary Double",
u"scale/5.2",
+ u"scale/5.2",
NumberFormatter::with().scale(Scale::byDouble(5.2)),
Locale::getEnglish(),
u"455,780",
@@ -2218,6 +3458,7 @@ void NumberFormatterApiTest::scale() {
assertFormatDescending(
u"Multiplier Arbitrary BigDecimal",
u"scale/5.2",
+ u"scale/5.2",
NumberFormatter::with().scale(Scale::byDecimal({"5.2", -1})),
Locale::getEnglish(),
u"455,780",
@@ -2233,6 +3474,7 @@ void NumberFormatterApiTest::scale() {
assertFormatDescending(
u"Multiplier Arbitrary Double And Power Of Ten",
u"scale/5200",
+ u"scale/5200",
NumberFormatter::with().scale(Scale::byDoubleAndPowerOfTen(5.2, 3)),
Locale::getEnglish(),
u"455,780,000",
@@ -2248,6 +3490,7 @@ void NumberFormatterApiTest::scale() {
assertFormatDescending(
u"Multiplier Zero",
u"scale/0",
+ u"scale/0",
NumberFormatter::with().scale(Scale::byDouble(0)),
Locale::getEnglish(),
u"0",
@@ -2263,6 +3506,7 @@ void NumberFormatterApiTest::scale() {
assertFormatSingle(
u"Multiplier Skeleton Scientific Notation and Percent",
u"percent scale/1E2",
+ u"%x100",
NumberFormatter::with().unit(NoUnit::percent()).scale(Scale::powerOfTen(2)),
Locale::getEnglish(),
0.5,
@@ -2271,6 +3515,7 @@ void NumberFormatterApiTest::scale() {
assertFormatSingle(
u"Negative Multiplier",
u"scale/-5.2",
+ u"scale/-5.2",
NumberFormatter::with().scale(Scale::byDouble(-5.2)),
Locale::getEnglish(),
2,
@@ -2279,6 +3524,7 @@ void NumberFormatterApiTest::scale() {
assertFormatSingle(
u"Negative One Multiplier",
u"scale/-1",
+ u"scale/-1",
NumberFormatter::with().scale(Scale::byDouble(-1)),
Locale::getEnglish(),
444444,
@@ -2287,6 +3533,7 @@ void NumberFormatterApiTest::scale() {
assertFormatSingle(
u"Two-Type Multiplier with Overlap",
u"scale/10000",
+ u"scale/1E4",
NumberFormatter::with().scale(Scale::byDoubleAndPowerOfTen(100, 2)),
Locale::getEnglish(),
2,
@@ -2307,29 +3554,30 @@ void NumberFormatterApiTest::skeletonUserGuideExamples() {
// Test the skeleton examples in userguide/format_parse/numbers/skeletons.md
struct TestCase {
const char16_t* skeleton;
+ const char16_t* conciseSkeleton;
double input;
const char16_t* expected;
} cases[] = {
- {u"percent", 25, u"25%"},
- {u".00", 25, u"25.00"},
- {u"percent .00", 25, u"25.00%"},
- {u"scale/100", 0.3, u"30"},
- {u"percent scale/100", 0.3, u"30%"},
- {u"measure-unit/length-meter", 5, u"5 m"},
- {u"measure-unit/length-meter unit-width-full-name", 5, u"5 meters"},
- {u"currency/CAD", 10, u"CA$10.00"},
- {u"currency/CAD unit-width-narrow", 10, u"$10.00"},
- {u"compact-short", 5000, u"5K"},
- {u"compact-long", 5000, u"5 thousand"},
- {u"compact-short currency/CAD", 5000, u"CA$5K"},
- {u"", 5000, u"5,000"},
- {u"group-min2", 5000, u"5000"},
- {u"group-min2", 15000, u"15,000"},
- {u"sign-always", 60, u"+60"},
- {u"sign-always", 0, u"+0"},
- {u"sign-except-zero", 60, u"+60"},
- {u"sign-except-zero", 0, u"0"},
- {u"sign-accounting currency/CAD", -40, u"(CA$40.00)"}
+ {u"percent", u"%", 25, u"25%"},
+ {u".00", u".00", 25, u"25.00"},
+ {u"percent .00", u"% .00", 25, u"25.00%"},
+ {u"scale/100", u"scale/100", 0.3, u"30"},
+ {u"percent scale/100", u"%x100", 0.3, u"30%"},
+ {u"measure-unit/length-meter", u"unit/meter", 5, u"5 m"},
+ {u"measure-unit/length-meter unit-width-full-name", u"unit/meter unit-width-full-name", 5, u"5 meters"},
+ {u"currency/CAD", u"currency/CAD", 10, u"CA$10.00"},
+ {u"currency/CAD unit-width-narrow", u"currency/CAD unit-width-narrow", 10, u"$10.00"},
+ {u"compact-short", u"K", 5000, u"5K"},
+ {u"compact-long", u"KK", 5000, u"5 thousand"},
+ {u"compact-short currency/CAD", u"K currency/CAD", 5000, u"CA$5K"},
+ {u"", u"", 5000, u"5,000"},
+ {u"group-min2", u",?", 5000, u"5000"},
+ {u"group-min2", u",?", 15000, u"15,000"},
+ {u"sign-always", u"+!", 60, u"+60"},
+ {u"sign-always", u"+!", 0, u"+0"},
+ {u"sign-except-zero", u"+?", 60, u"+60"},
+ {u"sign-except-zero", u"+?", 0, u"0"},
+ {u"sign-accounting currency/CAD", u"() currency/CAD", -40, u"(CA$40.00)"}
};
for (const auto& cas : cases) {
@@ -2339,6 +3587,11 @@ void NumberFormatterApiTest::skeletonUserGuideExamples() {
.formatDouble(cas.input, status);
assertEquals(cas.skeleton, cas.expected, actual.toTempString(status));
status.errIfFailureAndReset();
+ FormattedNumber actualConcise = NumberFormatter::forSkeleton(cas.conciseSkeleton, status)
+ .locale("en-US")
+ .formatDouble(cas.input, status);
+ assertEquals(cas.conciseSkeleton, cas.expected, actualConcise.toTempString(status));
+ status.errIfFailureAndReset();
}
}
@@ -2372,6 +3625,7 @@ void NumberFormatterApiTest::fieldPositionLogic() {
FormattedNumber fmtd = assertFormatSingle(
message,
u"",
+ u"",
NumberFormatter::with(),
Locale::getEnglish(),
-9876543210.12,
@@ -2394,9 +3648,10 @@ void NumberFormatterApiTest::fieldPositionLogic() {
UPRV_LENGTHOF(expectedFieldPositions));
// Test the iteration functionality of nextFieldPosition
- FieldPosition actual = {UNUM_GROUPING_SEPARATOR_FIELD};
+ ConstrainedFieldPosition actual;
+ actual.constrainField(UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD);
int32_t i = 1;
- while (fmtd.nextFieldPosition(actual, status)) {
+ while (fmtd.nextPosition(actual, status)) {
UFieldPosition expected = expectedFieldPositions[i++];
assertEquals(
UnicodeString(u"Next for grouping, field, case #") + Int64ToUnicodeString(i),
@@ -2405,18 +3660,19 @@ void NumberFormatterApiTest::fieldPositionLogic() {
assertEquals(
UnicodeString(u"Next for grouping, begin index, case #") + Int64ToUnicodeString(i),
expected.beginIndex,
- actual.getBeginIndex());
+ actual.getStart());
assertEquals(
UnicodeString(u"Next for grouping, end index, case #") + Int64ToUnicodeString(i),
expected.endIndex,
- actual.getEndIndex());
+ actual.getLimit());
}
assertEquals(u"Should have seen all grouping separators", 4, i);
// Make sure strings without fraction do not contain fraction field
- actual = {UNUM_FRACTION_FIELD};
+ actual.reset();
+ actual.constrainField(UFIELD_CATEGORY_NUMBER, UNUM_FRACTION_FIELD);
fmtd = NumberFormatter::withLocale("en").formatInt(5, status);
- assertFalse(u"No fraction part in an integer", fmtd.nextFieldPosition(actual, status));
+ assertFalse(u"No fraction part in an integer", fmtd.nextPosition(actual, status));
}
void NumberFormatterApiTest::fieldPositionCoverage() {
@@ -2427,6 +3683,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"measure-unit/temperature-fahrenheit",
+ u"unit/fahrenheit",
NumberFormatter::with().unit(FAHRENHEIT),
Locale::getEnglish(),
68,
@@ -2447,6 +3704,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"measure-unit/temperature-fahrenheit per-measure-unit/duration-day",
+ u"unit/fahrenheit-per-day",
NumberFormatter::with().unit(FAHRENHEIT).perUnit(DAY),
Locale::getEnglish(),
68,
@@ -2468,6 +3726,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"measure-unit/length-meter unit-width-full-name",
+ u"unit/meter unit-width-full-name",
NumberFormatter::with().unit(METER).unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
Locale::getEnglish(),
68,
@@ -2485,10 +3744,11 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
}
{
- const char16_t* message = u"Measure unit field position with prefix and suffix";
+ const char16_t* message = u"Measure unit field position with prefix and suffix, composed m/s";
FormattedNumber result = assertFormatSingle(
message,
u"measure-unit/length-meter per-measure-unit/duration-second unit-width-full-name",
+ u"measure-unit/length-meter per-measure-unit/duration-second unit-width-full-name",
NumberFormatter::with().unit(METER).perUnit(SECOND).unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
"ky", // locale with the interesting data
68,
@@ -2506,10 +3766,33 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
}
{
+ const char16_t* message = u"Measure unit field position with prefix and suffix, built-in m/s";
+ FormattedNumber result = assertFormatSingle(
+ message,
+ u"measure-unit/speed-meter-per-second unit-width-full-name",
+ u"unit/meter-per-second unit-width-full-name",
+ NumberFormatter::with().unit(METER_PER_SECOND).unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ "ky", // locale with the interesting data
+ 68,
+ u"ÑекундаÑына 68 метр");
+ static const UFieldPosition expectedFieldPositions[] = {
+ // field, begin index, end index
+ {UNUM_MEASURE_UNIT_FIELD, 0, 11},
+ {UNUM_INTEGER_FIELD, 12, 14},
+ {UNUM_MEASURE_UNIT_FIELD, 15, 19}};
+ assertNumberFieldPositions(
+ message,
+ result,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions));
+ }
+
+ {
const char16_t* message = u"Measure unit field position with inner spaces";
FormattedNumber result = assertFormatSingle(
message,
u"measure-unit/temperature-fahrenheit unit-width-full-name",
+ u"unit/fahrenheit unit-width-full-name",
NumberFormatter::with().unit(FAHRENHEIT).unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
"vi", // locale with the interesting data
68,
@@ -2534,6 +3817,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"measure-unit/temperature-kelvin",
+ u"unit/kelvin",
NumberFormatter::with().unit(KELVIN),
"fa", // locale with the interesting data
68,
@@ -2554,6 +3838,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"compact-short",
+ u"K",
NumberFormatter::with().notation(Notation::compactShort()),
Locale::getUS(),
65000,
@@ -2574,6 +3859,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"compact-long",
+ u"KK",
NumberFormatter::with().notation(Notation::compactLong()),
Locale::getUS(),
65000,
@@ -2594,6 +3880,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"compact-long",
+ u"KK",
NumberFormatter::with().notation(Notation::compactLong()),
"fil", // locale with interesting data
6000,
@@ -2614,6 +3901,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"compact-long",
+ u"KK",
NumberFormatter::with().notation(Notation::compactLong()),
"he", // locale with interesting data
6000,
@@ -2634,6 +3922,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"compact-short currency/USD",
+ u"K currency/USD",
NumberFormatter::with().notation(Notation::compactShort()).unit(USD),
"sr_Latn", // locale with interesting data
65000,
@@ -2655,6 +3944,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"currency/USD unit-width-full-name",
+ u"currency/USD unit-width-full-name",
NumberFormatter::with().unit(USD)
.unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME),
"en",
@@ -2679,6 +3969,7 @@ void NumberFormatterApiTest::fieldPositionCoverage() {
FormattedNumber result = assertFormatSingle(
message,
u"compact-long measure-unit/length-meter unit-width-full-name",
+ u"KK unit/meter unit-width-full-name",
NumberFormatter::with().notation(Notation::compactLong())
.unit(METER)
.unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
@@ -2715,10 +4006,18 @@ void NumberFormatterApiTest::toFormat() {
dynamic_cast<LocalizedNumberFormatterAsFormat*>(format.getAlias())->getNumberFormatter()
.toSkeleton(status));
+ UFormattedNumberData result;
+ result.quantity.setToDouble(514.23);
+ lnf.formatImpl(&result, status);
FieldPositionIterator fpi1;
- lnf.formatDouble(514.23, status).getAllFieldPositions(fpi1, status);
+ {
+ FieldPositionIteratorHandler fpih(&fpi1, status);
+ result.getAllFieldPositions(fpih, status);
+ }
+
FieldPositionIterator fpi2;
format->format(514.23, sb.remove(), &fpi2, status);
+
assertTrue("Should produce same field position iterator", fpi1 == fpi2);
}
@@ -2770,19 +4069,20 @@ void NumberFormatterApiTest::errors() {
"Terminal toSkeleton on error object should be bogus",
output.isBogus());
- // FieldPosition
+ // FieldPosition (constrained category)
status = U_ZERO_ERROR;
- FieldPosition fp;
- fn.nextFieldPosition(fp, status);
+ ConstrainedFieldPosition fp;
+ fp.constrainCategory(UFIELD_CATEGORY_NUMBER);
+ fn.nextPosition(fp, status);
assertEquals(
"Should fail on FieldPosition terminal method with correct error code",
U_NUMBER_ARG_OUTOFBOUNDS_ERROR,
status);
- // FieldPositionIterator
+ // FieldPositionIterator (no constraints)
status = U_ZERO_ERROR;
- FieldPositionIterator fpi;
- fn.getAllFieldPositions(fpi, status);
+ fp.reset();
+ fn.nextPosition(fp, status);
assertEquals(
"Should fail on FieldPositoinIterator terminal method with correct error code",
U_NUMBER_ARG_OUTOFBOUNDS_ERROR,
@@ -3047,10 +4347,50 @@ void NumberFormatterApiTest::toDecimalNumber() {
"9.8765E+14", fn.toDecimalNumber<std::string>(status).c_str());
}
+void NumberFormatterApiTest::microPropsInternals() {
+ // Verify copy construction and assignment operators.
+ int64_t testValues[2] = {4, 61};
+
+ MicroProps mp;
+ assertEquals("capacity", 2, mp.mixedMeasures.getCapacity());
+ mp.mixedMeasures[0] = testValues[0];
+ mp.mixedMeasures[1] = testValues[1];
+ MicroProps copyConstructed(mp);
+ MicroProps copyAssigned;
+ int64_t *resizeResult = mp.mixedMeasures.resize(4, 4);
+ assertTrue("Resize success", resizeResult != NULL);
+ copyAssigned = mp;
+
+ assertTrue("MicroProps success status", U_SUCCESS(mp.mixedMeasures.status));
+ assertTrue("Copy Constructed success status", U_SUCCESS(copyConstructed.mixedMeasures.status));
+ assertTrue("Copy Assigned success status", U_SUCCESS(copyAssigned.mixedMeasures.status));
+ assertEquals("Original values[0]", testValues[0], mp.mixedMeasures[0]);
+ assertEquals("Original values[1]", testValues[1], mp.mixedMeasures[1]);
+ assertEquals("Copy Constructed[0]", testValues[0], copyConstructed.mixedMeasures[0]);
+ assertEquals("Copy Constructed[1]", testValues[1], copyConstructed.mixedMeasures[1]);
+ assertEquals("Copy Assigned[0]", testValues[0], copyAssigned.mixedMeasures[0]);
+ assertEquals("Copy Assigned[1]", testValues[1], copyAssigned.mixedMeasures[1]);
+ assertEquals("Original capacity", 4, mp.mixedMeasures.getCapacity());
+ assertEquals("Copy Constructed capacity", 2, copyConstructed.mixedMeasures.getCapacity());
+ assertEquals("Copy Assigned capacity", 4, copyAssigned.mixedMeasures.getCapacity());
+}
-void NumberFormatterApiTest::assertFormatDescending(const char16_t* umessage, const char16_t* uskeleton,
- const UnlocalizedNumberFormatter& f, Locale locale,
- ...) {
+/* For skeleton comparisons: this checks the toSkeleton output for `f` and for
+ * `conciseSkeleton` against the normalized version of `uskeleton` - this does
+ * not round-trip uskeleton itself.
+ *
+ * If `conciseSkeleton` starts with a "~", its round-trip check is skipped.
+ *
+ * If `uskeleton` is nullptr, toSkeleton is expected to return an
+ * U_UNSUPPORTED_ERROR.
+ */
+void NumberFormatterApiTest::assertFormatDescending(
+ const char16_t* umessage,
+ const char16_t* uskeleton,
+ const char16_t* conciseSkeleton,
+ const UnlocalizedNumberFormatter& f,
+ Locale locale,
+ ...) {
va_list args;
va_start(args, locale);
UnicodeString message(TRUE, umessage, -1);
@@ -3084,14 +4424,43 @@ void NumberFormatterApiTest::assertFormatDescending(const char16_t* umessage, co
UnicodeString actual3 = l3.formatDouble(d, status).toString(status);
assertEquals(message + ": Skeleton Path: '" + normalized + "': " + d, expecteds[i], actual3);
}
+ // Concise skeletons should have same output, and usually round-trip to the normalized skeleton.
+ // If the concise skeleton starts with '~', disable the round-trip check.
+ bool shouldRoundTrip = true;
+ if (conciseSkeleton[0] == u'~') {
+ conciseSkeleton++;
+ shouldRoundTrip = false;
+ }
+ LocalizedNumberFormatter l4 = NumberFormatter::forSkeleton(conciseSkeleton, status).locale(locale);
+ if (shouldRoundTrip) {
+ assertEquals(message + ": Concise Skeleton:", normalized, l4.toSkeleton(status));
+ }
+ for (int32_t i = 0; i < 9; i++) {
+ double d = inputs[i];
+ UnicodeString actual4 = l4.formatDouble(d, status).toString(status);
+ assertEquals(message + ": Concise Skeleton Path: '" + normalized + "': " + d, expecteds[i], actual4);
+ }
} else {
assertUndefinedSkeleton(f);
}
}
-void NumberFormatterApiTest::assertFormatDescendingBig(const char16_t* umessage, const char16_t* uskeleton,
- const UnlocalizedNumberFormatter& f, Locale locale,
- ...) {
+/* For skeleton comparisons: this checks the toSkeleton output for `f` and for
+ * `conciseSkeleton` against the normalized version of `uskeleton` - this does
+ * not round-trip uskeleton itself.
+ *
+ * If `conciseSkeleton` starts with a "~", its round-trip check is skipped.
+ *
+ * If `uskeleton` is nullptr, toSkeleton is expected to return an
+ * U_UNSUPPORTED_ERROR.
+ */
+void NumberFormatterApiTest::assertFormatDescendingBig(
+ const char16_t* umessage,
+ const char16_t* uskeleton,
+ const char16_t* conciseSkeleton,
+ const UnlocalizedNumberFormatter& f,
+ Locale locale,
+ ...) {
va_list args;
va_start(args, locale);
UnicodeString message(TRUE, umessage, -1);
@@ -3125,15 +4494,45 @@ void NumberFormatterApiTest::assertFormatDescendingBig(const char16_t* umessage,
UnicodeString actual3 = l3.formatDouble(d, status).toString(status);
assertEquals(message + ": Skeleton Path: '" + normalized + "': " + d, expecteds[i], actual3);
}
+ // Concise skeletons should have same output, and usually round-trip to the normalized skeleton.
+ // If the concise skeleton starts with '~', disable the round-trip check.
+ bool shouldRoundTrip = true;
+ if (conciseSkeleton[0] == u'~') {
+ conciseSkeleton++;
+ shouldRoundTrip = false;
+ }
+ LocalizedNumberFormatter l4 = NumberFormatter::forSkeleton(conciseSkeleton, status).locale(locale);
+ if (shouldRoundTrip) {
+ assertEquals(message + ": Concise Skeleton:", normalized, l4.toSkeleton(status));
+ }
+ for (int32_t i = 0; i < 9; i++) {
+ double d = inputs[i];
+ UnicodeString actual4 = l4.formatDouble(d, status).toString(status);
+ assertEquals(message + ": Concise Skeleton Path: '" + normalized + "': " + d, expecteds[i], actual4);
+ }
} else {
assertUndefinedSkeleton(f);
}
}
+/* For skeleton comparisons: this checks the toSkeleton output for `f` and for
+ * `conciseSkeleton` against the normalized version of `uskeleton` - this does
+ * not round-trip uskeleton itself.
+ *
+ * If `conciseSkeleton` starts with a "~", its round-trip check is skipped.
+ *
+ * If `uskeleton` is nullptr, toSkeleton is expected to return an
+ * U_UNSUPPORTED_ERROR.
+ */
FormattedNumber
-NumberFormatterApiTest::assertFormatSingle(const char16_t* umessage, const char16_t* uskeleton,
- const UnlocalizedNumberFormatter& f, Locale locale,
- double input, const UnicodeString& expected) {
+NumberFormatterApiTest::assertFormatSingle(
+ const char16_t* umessage,
+ const char16_t* uskeleton,
+ const char16_t* conciseSkeleton,
+ const UnlocalizedNumberFormatter& f,
+ Locale locale,
+ double input,
+ const UnicodeString& expected) {
UnicodeString message(TRUE, umessage, -1);
const LocalizedNumberFormatter l1 = f.threshold(0).locale(locale); // no self-regulation
const LocalizedNumberFormatter l2 = f.threshold(1).locale(locale); // all self-regulation
@@ -3155,6 +4554,19 @@ NumberFormatterApiTest::assertFormatSingle(const char16_t* umessage, const char1
LocalizedNumberFormatter l3 = NumberFormatter::forSkeleton(normalized, status).locale(locale);
UnicodeString actual3 = l3.formatDouble(input, status).toString(status);
assertEquals(message + ": Skeleton Path: '" + normalized + "': " + input, expected, actual3);
+ // Concise skeletons should have same output, and usually round-trip to the normalized skeleton.
+ // If the concise skeleton starts with '~', disable the round-trip check.
+ bool shouldRoundTrip = true;
+ if (conciseSkeleton[0] == u'~') {
+ conciseSkeleton++;
+ shouldRoundTrip = false;
+ }
+ LocalizedNumberFormatter l4 = NumberFormatter::forSkeleton(conciseSkeleton, status).locale(locale);
+ if (shouldRoundTrip) {
+ assertEquals(message + ": Concise Skeleton:", normalized, l4.toSkeleton(status));
+ }
+ UnicodeString actual4 = l4.formatDouble(input, status).toString(status);
+ assertEquals(message + ": Concise Skeleton Path: '" + normalized + "': " + input, expected, actual4);
} else {
assertUndefinedSkeleton(f);
}
@@ -3171,8 +4583,10 @@ void NumberFormatterApiTest::assertUndefinedSkeleton(const UnlocalizedNumberForm
}
void NumberFormatterApiTest::assertNumberFieldPositions(
- const char16_t* message, const FormattedNumber& formattedNumber,
- const UFieldPosition* expectedFieldPositions, int32_t length) {
+ const char16_t* message,
+ const FormattedNumber& formattedNumber,
+ const UFieldPosition* expectedFieldPositions,
+ int32_t length) {
IcuTestErrorCode status(*this, "assertNumberFieldPositions");
// Check FormattedValue functions
@@ -3183,64 +4597,6 @@ void NumberFormatterApiTest::assertNumberFieldPositions(
UFIELD_CATEGORY_NUMBER,
expectedFieldPositions,
length);
-
- // Check FormattedNumber-specific functions
- UnicodeString baseMessage = UnicodeString(message) + u": " + formattedNumber.toString(status) + u": ";
- FieldPositionIterator fpi;
- formattedNumber.getAllFieldPositions(fpi, status);
- int32_t i = 0;
- FieldPosition actual;
- while (fpi.next(actual)) {
- UFieldPosition expected = expectedFieldPositions[i++];
- assertEquals(
- baseMessage + UnicodeString(u"Field, case #") + Int64ToUnicodeString(i),
- expected.field,
- actual.getField());
- assertEquals(
- baseMessage + UnicodeString(u"Iterator, begin, case #") + Int64ToUnicodeString(i),
- expected.beginIndex,
- actual.getBeginIndex());
- assertEquals(
- baseMessage + UnicodeString(u"Iterator, end, case #") + Int64ToUnicodeString(i),
- expected.endIndex,
- actual.getEndIndex());
-
- // Check for the first location of the field
- FieldPosition actual2(expected.field);
- // Fast-forward the field to skip previous occurrences of the field:
- actual2.setBeginIndex(expected.beginIndex);
- actual2.setEndIndex(expected.beginIndex);
- UBool found = formattedNumber.nextFieldPosition(actual2, status);
- assertEquals(
- baseMessage + UnicodeString(u"Next, found first, case #") + Int64ToUnicodeString(i),
- (UBool) TRUE,
- found);
- assertEquals(
- baseMessage + UnicodeString(u"Next, begin, case #") + Int64ToUnicodeString(i),
- expected.beginIndex,
- actual2.getBeginIndex());
- assertEquals(
- baseMessage + UnicodeString(u"Next, end, case #") + Int64ToUnicodeString(i),
- expected.endIndex,
- actual2.getEndIndex());
-
- // The next position should be empty unless the field occurs again
- UBool occursAgain = false;
- for (int32_t j=i; j<length; j++) {
- if (expectedFieldPositions[j].field == expected.field) {
- occursAgain = true;
- break;
- }
- }
- if (!occursAgain) {
- found = formattedNumber.nextFieldPosition(actual2, status);
- assertEquals(
- baseMessage + UnicodeString(u"Next, found second, case #") + Int64ToUnicodeString(i),
- (UBool) FALSE,
- found);
- }
- }
- assertEquals(baseMessage + u"Should have seen every field position", length, i);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
index d0ccfe015a7..9339396e41c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
@@ -30,6 +30,8 @@ void DecimalQuantityTest::runIndexedTest(int32_t index, UBool exec, const char *
TESTCASE_AUTO(testToDouble);
TESTCASE_AUTO(testMaxDigits);
TESTCASE_AUTO(testNickelRounding);
+ TESTCASE_AUTO(testCompactDecimalSuppressedExponent);
+ TESTCASE_AUTO(testSuppressedExponentUnchangedByInitialScaling);
TESTCASE_AUTO_END;
}
@@ -233,8 +235,6 @@ void DecimalQuantityTest::testConvertToAccurateDouble() {
// based on https://github.com/google/double-conversion/issues/28
static double hardDoubles[] = {
1651087494906221570.0,
- -5074790912492772E-327,
- 83602530019752571E-327,
2.207817077636718750000000000000,
1.818351745605468750000000000000,
3.941719055175781250000000000000,
@@ -259,9 +259,11 @@ void DecimalQuantityTest::testConvertToAccurateDouble() {
1.305290222167968750000000000000,
3.834922790527343750000000000000,};
- static double integerDoubles[] = {
+ static double exactDoubles[] = {
51423,
51423e10,
+ -5074790912492772E-327,
+ 83602530019752571E-327,
4.503599627370496E15,
6.789512076111555E15,
9.007199254740991E15,
@@ -271,7 +273,7 @@ void DecimalQuantityTest::testConvertToAccurateDouble() {
checkDoubleBehavior(d, true);
}
- for (double d : integerDoubles) {
+ for (double d : exactDoubles) {
checkDoubleBehavior(d, false);
}
@@ -467,4 +469,187 @@ void DecimalQuantityTest::testNickelRounding() {
status.expectErrorAndReset(U_FORMAT_INEXACT_ERROR);
}
+void DecimalQuantityTest::testCompactDecimalSuppressedExponent() {
+ IcuTestErrorCode status(*this, "testCompactDecimalSuppressedExponent");
+ Locale ulocale("fr-FR");
+
+ struct TestCase {
+ UnicodeString skeleton;
+ double input;
+ const char16_t* expectedString;
+ int64_t expectedLong;
+ double expectedDouble;
+ const char16_t* expectedPlainString;
+ int32_t expectedSuppressedExponent;
+ } cases[] = {
+ // unlocalized formatter skeleton, input, string output, long output, double output, BigDecimal output, plain string, suppressed exponent
+ {u"", 123456789, u"123 456 789", 123456789L, 123456789.0, u"123456789", 0},
+ {u"compact-long", 123456789, u"123 millions", 123000000L, 123000000.0, u"123000000", 6},
+ {u"compact-short", 123456789, u"123 M", 123000000L, 123000000.0, u"123000000", 6},
+ {u"scientific", 123456789, u"1,234568E8", 123456800L, 123456800.0, u"123456800", 8},
+
+ {u"", 1234567, u"1 234 567", 1234567L, 1234567.0, u"1234567", 0},
+ {u"compact-long", 1234567, u"1,2 million", 1200000L, 1200000.0, u"1200000", 6},
+ {u"compact-short", 1234567, u"1,2 M", 1200000L, 1200000.0, u"1200000", 6},
+ {u"scientific", 1234567, u"1,234567E6", 1234567L, 1234567.0, u"1234567", 6},
+
+ {u"", 123456, u"123 456", 123456L, 123456.0, u"123456", 0},
+ {u"compact-long", 123456, u"123 mille", 123000L, 123000.0, u"123000", 3},
+ {u"compact-short", 123456, u"123 k", 123000L, 123000.0, u"123000", 3},
+ {u"scientific", 123456, u"1,23456E5", 123456L, 123456.0, u"123456", 5},
+
+ {u"", 123, u"123", 123L, 123.0, u"123", 0},
+ {u"compact-long", 123, u"123", 123L, 123.0, u"123", 0},
+ {u"compact-short", 123, u"123", 123L, 123.0, u"123", 0},
+ {u"scientific", 123, u"1,23E2", 123L, 123.0, u"123", 2},
+
+ {u"", 1.2, u"1,2", 1L, 1.2, u"1.2", 0},
+ {u"compact-long", 1.2, u"1,2", 1L, 1.2, u"1.2", 0},
+ {u"compact-short", 1.2, u"1,2", 1L, 1.2, u"1.2", 0},
+ {u"scientific", 1.2, u"1,2E0", 1L, 1.2, u"1.2", 0},
+
+ {u"", 0.12, u"0,12", 0L, 0.12, u"0.12", 0},
+ {u"compact-long", 0.12, u"0,12", 0L, 0.12, u"0.12", 0},
+ {u"compact-short", 0.12, u"0,12", 0L, 0.12, u"0.12", 0},
+ {u"scientific", 0.12, u"1,2E-1", 0L, 0.12, u"0.12", -1},
+
+ {u"", 0.012, u"0,012", 0L, 0.012, u"0.012", 0},
+ {u"compact-long", 0.012, u"0,012", 0L, 0.012, u"0.012", 0},
+ {u"compact-short", 0.012, u"0,012", 0L, 0.012, u"0.012", 0},
+ {u"scientific", 0.012, u"1,2E-2", 0L, 0.012, u"0.012", -2},
+
+ {u"", 999.9, u"999,9", 999L, 999.9, u"999.9", 0},
+ {u"compact-long", 999.9, u"1 millier", 1000L, 1000.0, u"1000", 3},
+ {u"compact-short", 999.9, u"1 k", 1000L, 1000.0, u"1000", 3},
+ {u"scientific", 999.9, u"9,999E2", 999L, 999.9, u"999.9", 2},
+
+ {u"", 1000.0, u"1 000", 1000L, 1000.0, u"1000", 0},
+ {u"compact-long", 1000.0, u"1 millier", 1000L, 1000.0, u"1000", 3},
+ {u"compact-short", 1000.0, u"1 k", 1000L, 1000.0, u"1000", 3},
+ {u"scientific", 1000.0, u"1E3", 1000L, 1000.0, u"1000", 3},
+ };
+ for (const auto& cas : cases) {
+ // test the helper methods used to compute plural operand values
+
+ LocalizedNumberFormatter formatter =
+ NumberFormatter::forSkeleton(cas.skeleton, status)
+ .locale(ulocale);
+ FormattedNumber fn = formatter.formatDouble(cas.input, status);
+ DecimalQuantity dq;
+ fn.getDecimalQuantity(dq, status);
+ UnicodeString actualString = fn.toString(status);
+ int64_t actualLong = dq.toLong();
+ double actualDouble = dq.toDouble();
+ UnicodeString actualPlainString = dq.toPlainString();
+ int32_t actualSuppressedExponent = dq.getExponent();
+
+ assertEquals(
+ u"formatted number " + cas.skeleton + u" toString: " + cas.input,
+ cas.expectedString,
+ actualString);
+ assertEquals(
+ u"compact decimal " + cas.skeleton + u" toLong: " + cas.input,
+ cas.expectedLong,
+ actualLong);
+ assertDoubleEquals(
+ u"compact decimal " + cas.skeleton + u" toDouble: " + cas.input,
+ cas.expectedDouble,
+ actualDouble);
+ assertEquals(
+ u"formatted number " + cas.skeleton + u" toPlainString: " + cas.input,
+ cas.expectedPlainString,
+ actualPlainString);
+ assertEquals(
+ u"compact decimal " + cas.skeleton + u" suppressed exponent: " + cas.input,
+ cas.expectedSuppressedExponent,
+ actualSuppressedExponent);
+
+ // test the actual computed values of the plural operands
+
+ double expectedNOperand = cas.expectedDouble;
+ double expectedIOperand = cas.expectedLong;
+ double expectedEOperand = cas.expectedSuppressedExponent;
+ double actualNOperand = dq.getPluralOperand(PLURAL_OPERAND_N);
+ double actualIOperand = dq.getPluralOperand(PLURAL_OPERAND_I);
+ double actualEOperand = dq.getPluralOperand(PLURAL_OPERAND_E);
+
+ assertDoubleEquals(
+ u"compact decimal " + cas.skeleton + u" n operand: " + cas.input,
+ expectedNOperand,
+ actualNOperand);
+ assertDoubleEquals(
+ u"compact decimal " + cas.skeleton + u" i operand: " + cas.input,
+ expectedIOperand,
+ actualIOperand);
+ assertDoubleEquals(
+ u"compact decimal " + cas.skeleton + " e operand: " + cas.input,
+ expectedEOperand,
+ actualEOperand);
+ }
+}
+
+void DecimalQuantityTest::testSuppressedExponentUnchangedByInitialScaling() {
+ IcuTestErrorCode status(*this, "testCompactDecimalSuppressedExponent");
+ Locale ulocale("fr-FR");
+ LocalizedNumberFormatter withLocale = NumberFormatter::withLocale(ulocale);
+ LocalizedNumberFormatter compactLong =
+ withLocale.notation(Notation::compactLong());
+ LocalizedNumberFormatter compactScaled =
+ compactLong.scale(Scale::powerOfTen(3));
+
+ struct TestCase {
+ int32_t input;
+ UnicodeString expectedString;
+ double expectedNOperand;
+ double expectedIOperand;
+ double expectedEOperand;
+ } cases[] = {
+ // input, compact long string output,
+ // compact n operand, compact i operand, compact e operand
+ {123456789, "123 millions", 123000000.0, 123000000.0, 6.0},
+ {1234567, "1,2 million", 1200000.0, 1200000.0, 6.0},
+ {123456, "123 mille", 123000.0, 123000.0, 3.0},
+ {123, "123", 123.0, 123.0, 0.0},
+ };
+
+ for (const auto& cas : cases) {
+ FormattedNumber fnCompactScaled = compactScaled.formatInt(cas.input, status);
+ DecimalQuantity dqCompactScaled;
+ fnCompactScaled.getDecimalQuantity(dqCompactScaled, status);
+ double compactScaledEOperand = dqCompactScaled.getPluralOperand(PLURAL_OPERAND_E);
+
+ FormattedNumber fnCompact = compactLong.formatInt(cas.input, status);
+ DecimalQuantity dqCompact;
+ fnCompact.getDecimalQuantity(dqCompact, status);
+ UnicodeString actualString = fnCompact.toString(status);
+ double compactNOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_N);
+ double compactIOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_I);
+ double compactEOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_E);
+ assertEquals(
+ u"formatted number " + Int64ToUnicodeString(cas.input) + " compactLong toString: ",
+ cas.expectedString,
+ actualString);
+ assertDoubleEquals(
+ u"compact decimal " + DoubleToUnicodeString(cas.input) + ", n operand vs. expected",
+ cas.expectedNOperand,
+ compactNOperand);
+ assertDoubleEquals(
+ u"compact decimal " + DoubleToUnicodeString(cas.input) + ", i operand vs. expected",
+ cas.expectedIOperand,
+ compactIOperand);
+ assertDoubleEquals(
+ u"compact decimal " + DoubleToUnicodeString(cas.input) + ", e operand vs. expected",
+ cas.expectedEOperand,
+ compactEOperand);
+
+ // By scaling by 10^3 in a locale that has words / compact notation
+ // based on powers of 10^3, we guarantee that the suppressed
+ // exponent will differ by 3.
+ assertDoubleEquals(
+ u"decimal " + DoubleToUnicodeString(cas.input) + ", e operand for compact vs. compact scaled",
+ compactEOperand + 3,
+ compactScaledEOperand);
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp
index 90144ad1c64..5ffca12b70e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp
@@ -25,11 +25,11 @@ void ModifiersTest::runIndexedTest(int32_t index, UBool exec, const char *&name,
void ModifiersTest::testConstantAffixModifier() {
UErrorCode status = U_ZERO_ERROR;
- ConstantAffixModifier mod0(u"", u"", UNUM_PERCENT_FIELD, true);
+ ConstantAffixModifier mod0(u"", u"", {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD}, true);
assertModifierEquals(mod0, 0, true, u"|", u"n", status);
assertSuccess("Spot 1", status);
- ConstantAffixModifier mod1(u"a📻", u"b", UNUM_PERCENT_FIELD, true);
+ ConstantAffixModifier mod1(u"a📻", u"b", {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD}, true);
assertModifierEquals(mod1, 3, true, u"a📻|b", u"%%%n%", status);
assertSuccess("Spot 2", status);
}
@@ -42,8 +42,8 @@ void ModifiersTest::testConstantMultiFieldModifier() {
assertModifierEquals(mod1, 0, true, u"|", u"n", status);
assertSuccess("Spot 1", status);
- prefix.append(u"a📻", UNUM_PERCENT_FIELD, status);
- suffix.append(u"b", UNUM_CURRENCY_FIELD, status);
+ prefix.append(u"a📻", {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD}, status);
+ suffix.append(u"b", {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
ConstantMultiFieldModifier mod2(prefix, suffix, false, true);
assertModifierEquals(mod2, 3, true, u"a📻|b", u"%%%n$", status);
assertSuccess("Spot 2", status);
@@ -80,7 +80,7 @@ void ModifiersTest::testSimpleModifier() {
const UnicodeString pattern(patterns[i]);
SimpleFormatter compiledFormatter(pattern, 1, 1, status);
assertSuccess("Spot 1", status);
- SimpleModifier mod(compiledFormatter, UNUM_PERCENT_FIELD, false);
+ SimpleModifier mod(compiledFormatter, {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD}, false);
assertModifierEquals(
mod, prefixLens[i], false, expectedCharFields[i][0], expectedCharFields[i][1], status);
assertSuccess("Spot 2", status);
@@ -88,7 +88,7 @@ void ModifiersTest::testSimpleModifier() {
// Test strange insertion positions
for (int32_t j = 0; j < NUM_OUTPUTS; j++) {
FormattedStringBuilder output;
- output.append(outputs[j].baseString, UNUM_FIELD_COUNT, status);
+ output.append(outputs[j].baseString, kUndefinedField, status);
mod.apply(output, outputs[j].leftIndex, outputs[j].rightIndex, status);
UnicodeString expected = expecteds[j][i];
UnicodeString actual = output.toUnicodeString();
@@ -112,7 +112,7 @@ void ModifiersTest::testCurrencySpacingEnabledModifier() {
assertModifierEquals(mod1, 0, true, u"|", u"n", status);
assertSuccess("Spot 3", status);
- prefix.append(u"USD", UNUM_CURRENCY_FIELD, status);
+ prefix.append(u"USD", {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
assertSuccess("Spot 4", status);
CurrencySpacingEnabledModifier mod2(prefix, suffix, false, true, symbols, status);
assertSuccess("Spot 5", status);
@@ -121,7 +121,7 @@ void ModifiersTest::testCurrencySpacingEnabledModifier() {
// Test the default currency spacing rules
FormattedStringBuilder sb;
- sb.append("123", UNUM_INTEGER_FIELD, status);
+ sb.append("123", {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD}, status);
assertSuccess("Spot 7", status);
FormattedStringBuilder sb1(sb);
assertModifierEquals(mod2, sb1, 3, true, u"USD\u00A0123", u"$$$niii", status);
@@ -129,7 +129,7 @@ void ModifiersTest::testCurrencySpacingEnabledModifier() {
// Compare with the unsafe code path
FormattedStringBuilder sb2(sb);
- sb2.insert(0, "USD", UNUM_CURRENCY_FIELD, status);
+ sb2.insert(0, "USD", {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
assertSuccess("Spot 9", status);
CurrencySpacingEnabledModifier::applyCurrencySpacing(sb2, 0, 3, 6, 0, symbols, status);
assertSuccess("Spot 10", status);
@@ -138,7 +138,7 @@ void ModifiersTest::testCurrencySpacingEnabledModifier() {
// Test custom patterns
// The following line means that the last char of the number should be a | (rather than a digit)
symbols.setPatternForCurrencySpacing(UNUM_CURRENCY_SURROUNDING_MATCH, true, u"[|]");
- suffix.append("XYZ", UNUM_CURRENCY_FIELD, status);
+ suffix.append("XYZ", {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
assertSuccess("Spot 11", status);
CurrencySpacingEnabledModifier mod3(prefix, suffix, false, true, symbols, status);
assertSuccess("Spot 12", status);
@@ -150,7 +150,7 @@ void ModifiersTest::assertModifierEquals(const Modifier &mod, int32_t expectedPr
bool expectedStrong, UnicodeString expectedChars,
UnicodeString expectedFields, UErrorCode &status) {
FormattedStringBuilder sb;
- sb.appendCodePoint('|', UNUM_FIELD_COUNT, status);
+ sb.appendCodePoint('|', kUndefinedField, status);
assertModifierEquals(
mod, sb, expectedPrefixLength, expectedStrong, expectedChars, expectedFields, status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_parse.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_parse.cpp
index 12ecc751bc7..b47519ddb83 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_parse.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_parse.cpp
@@ -196,7 +196,8 @@ void NumberParserTest::testSeriesMatcher() {
PercentMatcher m3(symbols);
IgnorablesMatcher m4(0);
- ArraySeriesMatcher::MatcherArray matchers(5);
+ ArraySeriesMatcher::MatcherArray matchers(5, status);
+ status.assertSuccess();
matchers[0] = &m0;
matchers[1] = &m1;
matchers[2] = &m2;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
index 8f612423c37..650c526ce06 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
@@ -26,14 +26,13 @@ void PatternModifierTest::testBasic() {
ParsedPatternInfo patternInfo;
PatternParser::parseToPatternInfo(u"a0b", patternInfo, status);
assertSuccess("Spot 1", status);
- mod.setPatternInfo(&patternInfo, UNUM_FIELD_COUNT);
+ mod.setPatternInfo(&patternInfo, kUndefinedField);
mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
DecimalFormatSymbols symbols(Locale::getEnglish(), status);
- CurrencySymbols currencySymbols({u"USD", status}, "en", status);
+ mod.setSymbols(&symbols, {u"USD", status}, UNUM_UNIT_WIDTH_SHORT, nullptr, status);
if (!assertSuccess("Spot 2", status, true)) {
return;
}
- mod.setSymbols(&symbols, &currencySymbols, UNUM_UNIT_WIDTH_SHORT, nullptr);
mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"a", getPrefix(mod, status));
@@ -41,7 +40,10 @@ void PatternModifierTest::testBasic() {
mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
assertEquals("Pattern a0b", u"+a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
- mod.setNumberProperties(SIGNUM_ZERO, StandardPlural::Form::COUNT);
+ mod.setNumberProperties(SIGNUM_NEG_ZERO, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b", u"-a", getPrefix(mod, status));
+ assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
+ mod.setNumberProperties(SIGNUM_POS_ZERO, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"+a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false);
@@ -58,7 +60,7 @@ void PatternModifierTest::testBasic() {
ParsedPatternInfo patternInfo2;
PatternParser::parseToPatternInfo(u"a0b;c-0d", patternInfo2, status);
assertSuccess("Spot 4", status);
- mod.setPatternInfo(&patternInfo2, UNUM_FIELD_COUNT);
+ mod.setPatternInfo(&patternInfo2, kUndefinedField);
mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
@@ -66,7 +68,10 @@ void PatternModifierTest::testBasic() {
mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
assertEquals("Pattern a0b;c-0d", u"c+", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
- mod.setNumberProperties(SIGNUM_ZERO, StandardPlural::Form::COUNT);
+ mod.setNumberProperties(SIGNUM_NEG_ZERO, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b;c-0d", u"c-", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
+ mod.setNumberProperties(SIGNUM_POS_ZERO, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"c+", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false);
@@ -76,9 +81,8 @@ void PatternModifierTest::testBasic() {
assertEquals("Pattern a0b;c-0d", u"c-", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_NEVER, false);
- // TODO: What should this behavior be?
- assertEquals("Pattern a0b;c-0d", u"c-", getPrefix(mod, status));
- assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"b", getSuffix(mod, status));
assertSuccess("Spot 5", status);
}
@@ -88,19 +92,18 @@ void PatternModifierTest::testPatternWithNoPlaceholder() {
ParsedPatternInfo patternInfo;
PatternParser::parseToPatternInfo(u"abc", patternInfo, status);
assertSuccess("Spot 1", status);
- mod.setPatternInfo(&patternInfo, UNUM_FIELD_COUNT);
+ mod.setPatternInfo(&patternInfo, kUndefinedField);
mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
DecimalFormatSymbols symbols(Locale::getEnglish(), status);
- CurrencySymbols currencySymbols({u"USD", status}, "en", status);
+ mod.setSymbols(&symbols, {u"USD", status}, UNUM_UNIT_WIDTH_SHORT, nullptr, status);
if (!assertSuccess("Spot 2", status, true)) {
return;
}
- mod.setSymbols(&symbols, &currencySymbols, UNUM_UNIT_WIDTH_SHORT, nullptr);
mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
// Unsafe Code Path
FormattedStringBuilder nsb;
- nsb.append(u"x123y", UNUM_FIELD_COUNT, status);
+ nsb.append(u"x123y", kUndefinedField, status);
assertSuccess("Spot 3", status);
mod.apply(nsb, 1, 4, status);
assertSuccess("Spot 4", status);
@@ -108,7 +111,7 @@ void PatternModifierTest::testPatternWithNoPlaceholder() {
// Safe Code Path
nsb.clear();
- nsb.append(u"x123y", UNUM_FIELD_COUNT, status);
+ nsb.append(u"x123y", kUndefinedField, status);
assertSuccess("Spot 5", status);
MicroProps micros;
LocalPointer<ImmutablePatternModifier> imod(mod.createImmutable(status), status);
@@ -131,13 +134,12 @@ void PatternModifierTest::testMutableEqualsImmutable() {
ParsedPatternInfo patternInfo;
PatternParser::parseToPatternInfo("a0b;c-0d", patternInfo, status);
assertSuccess("Spot 1", status);
- mod.setPatternInfo(&patternInfo, UNUM_FIELD_COUNT);
+ mod.setPatternInfo(&patternInfo, kUndefinedField);
mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
DecimalFormatSymbols symbols(Locale::getEnglish(), status);
- CurrencySymbols currencySymbols({u"USD", status}, "en", status);
+ mod.setSymbols(&symbols, {u"USD", status}, UNUM_UNIT_WIDTH_SHORT, nullptr, status);
assertSuccess("Spot 2", status);
if (U_FAILURE(status)) { return; }
- mod.setSymbols(&symbols, &currencySymbols, UNUM_UNIT_WIDTH_SHORT, nullptr);
DecimalQuantity fq;
fq.setToInt(1);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_permutation.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_permutation.cpp
index 85f32d550b5..a96dd75c6fa 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_permutation.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_permutation.cpp
@@ -71,7 +71,11 @@ static const double kNumbersToTest[]{0, 91827.3645, -0.22222};
* Test permutations of 3 orthogonal skeleton parts from the list above.
* Compare the results against the golden data file:
* numberpermutationtest.txt
- * To regenerate that file, run intltest with the -G option.
+ * To regenerate that file, run intltest with the -e and -G options.
+ * On Linux, from icu4c/source:
+ * make -j8 tests && (cd test/intltest && LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./intltest -e -G format/NumberTest/NumberPermutationTest)
+ * After re-generating the file, copy it into icu4j:
+ * cp test/testdata/numberpermutationtest.txt ../../icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberpermutationtest.txt
*/
void NumberPermutationTest::testPermutations() {
IcuTestErrorCode status(*this, "testPermutations");
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp
index 75816ba9573..2cd31cae1b8 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp
@@ -51,6 +51,7 @@ void NumberRangeFormatterTest::runIndexedTest(int32_t index, UBool exec, const c
TESTCASE_AUTO(testFieldPositions);
TESTCASE_AUTO(testCopyMove);
TESTCASE_AUTO(toObject);
+ TESTCASE_AUTO(testGetDecimalNumbers);
TESTCASE_AUTO_END;
}
@@ -860,6 +861,48 @@ void NumberRangeFormatterTest::toObject() {
}
}
+void NumberRangeFormatterTest::testGetDecimalNumbers() {
+ IcuTestErrorCode status(*this, "testGetDecimalNumbers");
+
+ LocalizedNumberRangeFormatter lnf = NumberRangeFormatter::withLocale("en")
+ .numberFormatterBoth(NumberFormatter::with().unit(USD));
+
+ // Range of numbers
+ {
+ FormattedNumberRange range = lnf.formatFormattableRange(1, 5, status);
+ assertEquals("Range: Formatted string should be as expected",
+ u"$1.00 \u2013 $5.00",
+ range.toString(status));
+ auto decimalNumbers = range.getDecimalNumbers<std::string>(status);
+ // TODO(ICU-21281): DecNum doesn't retain trailing zeros. Is that a problem?
+ if (logKnownIssue("ICU-21281")) {
+ assertEquals("First decimal number", "1", decimalNumbers.first.c_str());
+ assertEquals("Second decimal number", "5", decimalNumbers.second.c_str());
+ } else {
+ assertEquals("First decimal number", "1.00", decimalNumbers.first.c_str());
+ assertEquals("Second decimal number", "5.00", decimalNumbers.second.c_str());
+ }
+ }
+
+ // Identity fallback
+ {
+ FormattedNumberRange range = lnf.formatFormattableRange(3, 3, status);
+ assertEquals("Identity: Formatted string should be as expected",
+ u"~$3.00",
+ range.toString(status));
+ auto decimalNumbers = range.getDecimalNumbers<std::string>(status);
+ // NOTE: DecNum doesn't retain trailing zeros. Is that a problem?
+ // TODO(ICU-21281): DecNum doesn't retain trailing zeros. Is that a problem?
+ if (logKnownIssue("ICU-21281")) {
+ assertEquals("First decimal number", "3", decimalNumbers.first.c_str());
+ assertEquals("Second decimal number", "3", decimalNumbers.second.c_str());
+ } else {
+ assertEquals("First decimal number", "3.00", decimalNumbers.first.c_str());
+ assertEquals("Second decimal number", "3.00", decimalNumbers.second.c_str());
+ }
+ }
+}
+
void NumberRangeFormatterTest::assertFormatRange(
const char16_t* message,
const UnlocalizedNumberRangeFormatter& f,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
index 635ea879906..07a864a6a4b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
@@ -29,6 +29,9 @@ void NumberSkeletonTest::runIndexedTest(int32_t index, UBool exec, const char*&
TESTCASE_AUTO(stemsRequiringOption);
TESTCASE_AUTO(defaultTokens);
TESTCASE_AUTO(flexibleSeparators);
+ TESTCASE_AUTO(wildcardCharacters);
+ TESTCASE_AUTO(perUnitInArabic);
+ TESTCASE_AUTO(perUnitToSkeleton);
TESTCASE_AUTO_END;
}
@@ -41,26 +44,35 @@ void NumberSkeletonTest::validTokens() {
u"precision-integer",
u"precision-unlimited",
u"@@@##",
+ u"@@*",
u"@@+",
u".000##",
+ u".00*",
u".00+",
u".",
+ u".*",
u".+",
u".######",
+ u".00/@@*",
u".00/@@+",
u".00/@##",
u"precision-increment/3.14",
u"precision-currency-standard",
u"precision-integer rounding-mode-half-up",
u".00# rounding-mode-ceiling",
+ u".00/@@* rounding-mode-floor",
u".00/@@+ rounding-mode-floor",
u"scientific",
+ u"scientific/*ee",
u"scientific/+ee",
u"scientific/sign-always",
+ u"scientific/*ee/sign-always",
u"scientific/+ee/sign-always",
+ u"scientific/sign-always/*ee",
u"scientific/sign-always/+ee",
u"scientific/sign-except-zero",
u"engineering",
+ u"engineering/*eee",
u"engineering/+eee",
u"compact-short",
u"compact-long",
@@ -70,6 +82,7 @@ void NumberSkeletonTest::validTokens() {
u"measure-unit/length-meter",
u"measure-unit/area-square-meter",
u"measure-unit/energy-joule per-measure-unit/length-meter",
+ u"unit/square-meter-per-square-meter",
u"currency/XXX",
u"currency/ZZZ",
u"currency/usd",
@@ -80,6 +93,7 @@ void NumberSkeletonTest::validTokens() {
u"group-thousands",
u"integer-width/00",
u"integer-width/#0",
+ u"integer-width/*00",
u"integer-width/+00",
u"sign-always",
u"sign-auto",
@@ -105,7 +119,20 @@ void NumberSkeletonTest::validTokens() {
u"numbering-system/latn",
u"precision-integer/@##",
u"precision-integer rounding-mode-ceiling",
- u"precision-currency-cash rounding-mode-ceiling"};
+ u"precision-currency-cash rounding-mode-ceiling",
+ u"0",
+ u"00",
+ u"000",
+ u"E0",
+ u"E00",
+ u"E000",
+ u"EE0",
+ u"EE00",
+ u"EE+?0",
+ u"EE+?00",
+ u"EE+!0",
+ u"EE+!00",
+ };
for (auto& cas : cases) {
UnicodeString skeletonString(cas);
@@ -122,16 +149,22 @@ void NumberSkeletonTest::invalidTokens() {
static const char16_t* cases[] = {
u".00x",
u".00##0",
+ u".##*",
+ u".00##*",
+ u".0#*",
+ u"@#*",
u".##+",
u".00##+",
u".0#+",
+ u"@#+",
u"@@x",
u"@@##0",
- u"@#+",
u".00/@",
u".00/@@",
u".00/@@x",
u".00/@@#",
+ u".00/@@#*",
+ u".00/floor/@@*", // wrong order
u".00/@@#+",
u".00/floor/@@+", // wrong order
u"precision-increment/français", // non-invariant characters for C++
@@ -147,11 +180,29 @@ void NumberSkeletonTest::invalidTokens() {
u"currency/ççç", // three characters but not ASCII
u"measure-unit/foo",
u"integer-width/xxx",
+ u"integer-width/0*",
+ u"integer-width/*0#",
+ u"integer-width/*#",
+ u"integer-width/*#0",
u"integer-width/0+",
u"integer-width/+0#",
u"integer-width/+#",
u"integer-width/+#0",
- u"scientific/foo"};
+ u"scientific/foo",
+ u"E",
+ u"E1",
+ u"E+",
+ u"E+?",
+ u"E+!",
+ u"E+0",
+ u"EE",
+ u"EE+",
+ u"EEE",
+ u"EEE0",
+ u"001",
+ u"00*",
+ u"00+",
+ };
expectedErrorSkeleton(cases, UPRV_LENGTHOF(cases));
}
@@ -277,6 +328,32 @@ void NumberSkeletonTest::flexibleSeparators() {
}
}
+void NumberSkeletonTest::wildcardCharacters() {
+ IcuTestErrorCode status(*this, "wildcardCharacters");
+
+ struct TestCase {
+ const char16_t* star;
+ const char16_t* plus;
+ } cases[] = {
+ { u".00*", u".00+" },
+ { u"@@*", u"@@+" },
+ { u".00/@@*", u".00/@@+" },
+ { u"scientific/*ee", u"scientific/+ee" },
+ { u"integer-width/*00", u"integer-width/+00" },
+ };
+
+ for (const auto& cas : cases) {
+ UnicodeString star(cas.star);
+ UnicodeString plus(cas.plus);
+ status.setScope(star);
+
+ UnicodeString normalized = NumberFormatter::forSkeleton(plus, status)
+ .toSkeleton(status);
+ assertEquals("Plus should normalize to star", star, normalized);
+ status.errIfFailureAndReset();
+ }
+}
+
// In C++, there is no distinguishing between "invalid", "unknown", and "unexpected" tokens.
void NumberSkeletonTest::expectedErrorSkeleton(const char16_t** cases, int32_t casesLen) {
for (int32_t i = 0; i < casesLen; i++) {
@@ -287,5 +364,132 @@ void NumberSkeletonTest::expectedErrorSkeleton(const char16_t** cases, int32_t c
}
}
+void NumberSkeletonTest::perUnitInArabic() {
+ IcuTestErrorCode status(*this, "perUnitInArabic");
+
+ struct TestCase {
+ const char16_t* type;
+ const char16_t* subtype;
+ } cases[] = {
+ {u"area", u"acre"},
+ {u"digital", u"bit"},
+ {u"digital", u"byte"},
+ {u"temperature", u"celsius"},
+ {u"length", u"centimeter"},
+ {u"duration", u"day"},
+ {u"angle", u"degree"},
+ {u"temperature", u"fahrenheit"},
+ {u"volume", u"fluid-ounce"},
+ {u"length", u"foot"},
+ {u"volume", u"gallon"},
+ {u"digital", u"gigabit"},
+ {u"digital", u"gigabyte"},
+ {u"mass", u"gram"},
+ {u"area", u"hectare"},
+ {u"duration", u"hour"},
+ {u"length", u"inch"},
+ {u"digital", u"kilobit"},
+ {u"digital", u"kilobyte"},
+ {u"mass", u"kilogram"},
+ {u"length", u"kilometer"},
+ {u"volume", u"liter"},
+ {u"digital", u"megabit"},
+ {u"digital", u"megabyte"},
+ {u"length", u"meter"},
+ {u"length", u"mile"},
+ {u"length", u"mile-scandinavian"},
+ {u"volume", u"milliliter"},
+ {u"length", u"millimeter"},
+ {u"duration", u"millisecond"},
+ {u"duration", u"minute"},
+ {u"duration", u"month"},
+ {u"mass", u"ounce"},
+ {u"concentr", u"percent"},
+ {u"digital", u"petabyte"},
+ {u"mass", u"pound"},
+ {u"duration", u"second"},
+ {u"mass", u"stone"},
+ {u"digital", u"terabit"},
+ {u"digital", u"terabyte"},
+ {u"duration", u"week"},
+ {u"length", u"yard"},
+ {u"duration", u"year"},
+ };
+
+ for (const auto& cas1 : cases) {
+ for (const auto& cas2 : cases) {
+ UnicodeString skeleton(u"measure-unit/");
+ skeleton += cas1.type;
+ skeleton += u"-";
+ skeleton += cas1.subtype;
+ skeleton += u" ";
+ skeleton += u"per-measure-unit/";
+ skeleton += cas2.type;
+ skeleton += u"-";
+ skeleton += cas2.subtype;
+
+ status.setScope(skeleton);
+ UnicodeString actual = NumberFormatter::forSkeleton(skeleton, status).locale("ar")
+ .formatDouble(5142.3, status)
+ .toString(status);
+ status.errIfFailureAndReset();
+ }
+ }
+}
+
+void NumberSkeletonTest::perUnitToSkeleton() {
+ IcuTestErrorCode status(*this, "perUnitToSkeleton");
+ struct TestCase {
+ const char16_t* type;
+ const char16_t* subtype;
+ } cases[] = {
+ {u"area", u"acre"},
+ {u"concentr", u"percent"},
+ {u"concentr", u"permille"},
+ {u"concentr", u"permillion"},
+ {u"concentr", u"permyriad"},
+ {u"digital", u"bit"},
+ {u"length", u"yard"},
+ };
+
+ for (const auto& cas1 : cases) {
+ for (const auto& cas2 : cases) {
+ UnicodeString skeleton(u"measure-unit/");
+ skeleton += cas1.type;
+ skeleton += u"-";
+ skeleton += cas1.subtype;
+ skeleton += u" ";
+ skeleton += u"per-measure-unit/";
+ skeleton += cas2.type;
+ skeleton += u"-";
+ skeleton += cas2.subtype;
+
+ status.setScope(skeleton);
+ if (cas1.type != cas2.type && cas1.subtype != cas2.subtype) {
+ UnicodeString toSkeleton = NumberFormatter::forSkeleton(
+ skeleton, status).toSkeleton(status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ // Ensure both subtype are in the toSkeleton.
+ UnicodeString msg;
+ msg.append(toSkeleton)
+ .append(" should contain '")
+ .append(UnicodeString(cas1.subtype))
+ .append("' when constructed from ")
+ .append(skeleton);
+ assertTrue(msg, toSkeleton.indexOf(cas1.subtype) >= 0);
+
+ msg.remove();
+ msg.append(toSkeleton)
+ .append(" should contain '")
+ .append(UnicodeString(cas2.subtype))
+ .append("' when constructed from ")
+ .append(skeleton);
+ assertTrue(msg, toSkeleton.indexOf(cas2.subtype) >= 0);
+ }
+ }
+ }
+}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
index bc9fc7fcb8a..dc193f2cc42 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
@@ -133,7 +133,7 @@ void NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &n
TESTCASE_AUTO(TestCases);
TESTCASE_AUTO(TestCurrencyNames);
- TESTCASE_AUTO(Test20484_NarrowSymbolFallback);
+ TESTCASE_AUTO(TestCurrencyVariants);
TESTCASE_AUTO(TestCurrencyAmount);
TESTCASE_AUTO(TestCurrencyUnit);
TESTCASE_AUTO(TestCoverage);
@@ -238,9 +238,16 @@ void NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &n
TESTCASE_AUTO(Test13840_ParseLongStringCrash);
TESTCASE_AUTO(Test13850_EmptyStringCurrency);
TESTCASE_AUTO(Test20348_CurrencyPrefixOverride);
+ TESTCASE_AUTO(Test20956_MonetarySymbolGetters);
TESTCASE_AUTO(Test20358_GroupingInPattern);
TESTCASE_AUTO(Test13731_DefaultCurrency);
TESTCASE_AUTO(Test20499_CurrencyVisibleDigitsPlural);
+ TESTCASE_AUTO(Test13735_GroupingSizeGetter);
+ TESTCASE_AUTO(Test13734_StrictFlexibleWhitespace);
+ TESTCASE_AUTO(Test20961_CurrencyPluralPattern);
+ TESTCASE_AUTO(Test21134_ToNumberFormatter);
+ TESTCASE_AUTO(Test13733_StrictAndLenient);
+ TESTCASE_AUTO(Test21232_ParseTimeout);
TESTCASE_AUTO_END;
}
@@ -924,8 +931,8 @@ NumberFormatTest::TestCurrency(void)
UnicodeString s; currencyFmt->format(1.50, s);
logln((UnicodeString)"Un pauvre ici a..........." + s);
- if (!(s==CharsToUnicodeString("1,50\\u00A0$")))
- errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$ but got " + s);
+ if (!(s==CharsToUnicodeString("1,50\\u00A0$\\u00A0CA")))
+ errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$<nbsp>CA but got " + s);
delete currencyFmt;
s.truncate(0);
char loc[256]={0};
@@ -2110,22 +2117,26 @@ void NumberFormatTest::TestCurrencyNames(void) {
// TODO add more tests later
}
-void NumberFormatTest::Test20484_NarrowSymbolFallback(){
- IcuTestErrorCode status(*this, "Test20484_NarrowSymbolFallback");
+void NumberFormatTest::TestCurrencyVariants(){
+ IcuTestErrorCode status(*this, "TestCurrencyVariants");
struct TestCase {
const char* locale;
const char16_t* isoCode;
const char16_t* expectedShort;
const char16_t* expectedNarrow;
+ const char16_t* expectedFormal;
+ const char16_t* expectedVariant;
UErrorCode expectedNarrowError;
} cases[] = {
- {"en-US", u"CAD", u"CA$", u"$", U_USING_DEFAULT_WARNING}, // narrow: fallback to root
- {"en-US", u"CDF", u"CDF", u"CDF", U_USING_FALLBACK_WARNING}, // narrow: fallback to short
- {"sw-CD", u"CDF", u"FC", u"FC", U_USING_FALLBACK_WARNING}, // narrow: fallback to short
- {"en-US", u"GEL", u"GEL", u"₾", U_USING_DEFAULT_WARNING}, // narrow: fallback to root
- {"ka-GE", u"GEL", u"₾", u"₾", U_USING_FALLBACK_WARNING}, // narrow: fallback to ka
- {"ka", u"GEL", u"₾", u"₾", U_ZERO_ERROR}, // no fallback on narrow
+ {"en-US", u"CAD", u"CA$", u"$", u"CA$", u"CA$", U_USING_DEFAULT_WARNING}, // narrow: fallback to root
+ {"en-US", u"CDF", u"CDF", u"CDF", u"CDF", u"CDF", U_USING_FALLBACK_WARNING}, // narrow: fallback to short
+ {"sw-CD", u"CDF", u"FC", u"FC", u"FC", u"FC", U_USING_FALLBACK_WARNING}, // narrow: fallback to short
+ {"en-US", u"GEL", u"GEL", u"₾", u"GEL", u"GEL", U_USING_DEFAULT_WARNING}, // narrow: fallback to root
+ {"ka-GE", u"GEL", u"₾", u"₾", u"₾", u"₾", U_USING_FALLBACK_WARNING}, // narrow: fallback to ka
+ {"ka", u"GEL", u"₾", u"₾", u"₾", u"₾", U_ZERO_ERROR}, // no fallback on narrow
+ {"zh-TW", u"TWD", u"$", u"$", u"NT$", u"$", U_USING_FALLBACK_WARNING}, // narrow: fallback to short
+ {"ccp", u"TRY", u"TRY", u"₺", u"TRY", u"TL", U_ZERO_ERROR}, // no fallback on variant
};
for (const auto& cas : cases) {
status.setScope(cas.isoCode);
@@ -2138,6 +2149,20 @@ void NumberFormatTest::Test20484_NarrowSymbolFallback(){
&choiceFormatIgnored,
&lengthIgnored,
status);
+ const UChar* actualFormal = ucurr_getName(
+ cas.isoCode,
+ cas.locale,
+ UCURR_FORMAL_SYMBOL_NAME,
+ &choiceFormatIgnored,
+ &lengthIgnored,
+ status);
+ const UChar* actualVarant = ucurr_getName(
+ cas.isoCode,
+ cas.locale,
+ UCURR_VARIANT_SYMBOL_NAME,
+ &choiceFormatIgnored,
+ &lengthIgnored,
+ status);
status.errIfFailureAndReset();
const UChar* actualNarrow = ucurr_getName(
cas.isoCode,
@@ -2149,8 +2174,12 @@ void NumberFormatTest::Test20484_NarrowSymbolFallback(){
status.expectErrorAndReset(cas.expectedNarrowError);
assertEquals(UnicodeString("Short symbol: ") + cas.locale + u": " + cas.isoCode,
cas.expectedShort, actualShort);
- assertEquals(UnicodeString("Narrow symbol: ") + cas.locale + ": " + cas.isoCode,
+ assertEquals(UnicodeString("Narrow symbol: ") + cas.locale + u": " + cas.isoCode,
cas.expectedNarrow, actualNarrow);
+ assertEquals(UnicodeString("Formal symbol: ") + cas.locale + u": " + cas.isoCode,
+ cas.expectedFormal, actualFormal);
+ assertEquals(UnicodeString("Variant symbol: ") + cas.locale + u": " + cas.isoCode,
+ cas.expectedVariant, actualVarant);
}
}
@@ -2162,10 +2191,16 @@ void NumberFormatTest::TestCurrencyUnit(void){
static const UChar BAD2[] = u"??A";
static const UChar XXX[] = u"XXX";
static const char XXX8[] = "XXX";
+ static const UChar XYZ[] = u"XYZ";
+ static const char XYZ8[] = "XYZ";
static const UChar INV[] = u"{$%";
static const char INV8[] = "{$%";
static const UChar ZZZ[] = u"zz";
static const char ZZZ8[] = "zz";
+ static const UChar JPY[] = u"JPY";
+ static const char JPY8[] = "JPY";
+ static const UChar jpy[] = u"jpy";
+ static const char jpy8[] = "jpy";
UChar* EUR = (UChar*) malloc(6);
EUR[0] = u'E';
@@ -2178,10 +2213,16 @@ void NumberFormatTest::TestCurrencyUnit(void){
CurrencyUnit cu(USD, ec);
assertSuccess("CurrencyUnit", ec);
-
assertEquals("getISOCurrency()", USD, cu.getISOCurrency());
assertEquals("getSubtype()", USD8, cu.getSubtype());
+ // Test XYZ, a valid but non-standard currency.
+ // Note: Country code XY is private-use, so XYZ should remain unallocated.
+ CurrencyUnit extended(XYZ, ec);
+ assertSuccess("non-standard", ec);
+ assertEquals("non-standard", XYZ, extended.getISOCurrency());
+ assertEquals("non-standard", XYZ8, extended.getSubtype());
+
CurrencyUnit inv(INV, ec);
assertEquals("non-invariant", U_INVARIANT_CONVERSION_ERROR, ec);
assertEquals("non-invariant", XXX, inv.getISOCurrency());
@@ -2230,12 +2271,12 @@ void NumberFormatTest::TestCurrencyUnit(void){
}
CurrencyUnit bad(BAD, ec);
assertSuccess("CurrencyUnit", ec);
- if (cu.getIndex() == bad.getIndex()) {
+ if (cu.getOffset() == bad.getOffset()) {
errln("Indexes of different currencies should differ.");
}
CurrencyUnit bad2(BAD2, ec);
assertSuccess("CurrencyUnit", ec);
- if (bad2.getIndex() != bad.getIndex()) {
+ if (bad2.getOffset() != bad.getOffset()) {
errln("Indexes of unrecognized currencies should be the same.");
}
if (bad == bad2) {
@@ -2255,15 +2296,20 @@ void NumberFormatTest::TestCurrencyUnit(void){
// Test slicing
MeasureUnit sliced1 = cu;
MeasureUnit sliced2 = cu;
+ MeasureUnit sliced3 = extended;
assertEquals("Subtype after slicing 1", USD8, sliced1.getSubtype());
assertEquals("Subtype after slicing 2", USD8, sliced2.getSubtype());
+ assertEquals("Subtype after slicing 3", XYZ8, sliced3.getSubtype());
CurrencyUnit restored1(sliced1, ec);
CurrencyUnit restored2(sliced2, ec);
+ CurrencyUnit restored3(sliced3, ec);
assertSuccess("Restoring from MeasureUnit", ec);
assertEquals("Subtype after restoring 1", USD8, restored1.getSubtype());
assertEquals("Subtype after restoring 2", USD8, restored2.getSubtype());
+ assertEquals("Subtype after restoring 3", XYZ8, restored3.getSubtype());
assertEquals("ISO Code after restoring 1", USD, restored1.getISOCurrency());
assertEquals("ISO Code after restoring 2", USD, restored2.getISOCurrency());
+ assertEquals("ISO Code after restoring 3", XYZ, restored3.getISOCurrency());
// Test copy constructor failure
LocalPointer<MeasureUnit> meter(MeasureUnit::createMeter(ec));
@@ -2272,6 +2318,27 @@ void NumberFormatTest::TestCurrencyUnit(void){
assertEquals("Copying from meter should fail", ec, U_ILLEGAL_ARGUMENT_ERROR);
assertEquals("Copying should not give uninitialized ISO code", u"", failure.getISOCurrency());
+ // Test equality
+ ec = U_ZERO_ERROR;
+ assertFalse("FAIL: USD == JPY", CurrencyUnit(USD, ec) == CurrencyUnit(JPY, ec));
+ assertTrue("FAIL: USD != USD", CurrencyUnit(USD, ec) == CurrencyUnit(USD, ec));
+ assertTrue("FAIL: JPY != jpy", CurrencyUnit(JPY, ec) == CurrencyUnit(jpy, ec));
+ assertTrue("FAIL: jpy != JPY", CurrencyUnit(jpy, ec) == CurrencyUnit(JPY, ec));
+
+ // Test equality with system charset instances
+ assertFalse("FAIL: USD8 == JPY8", CurrencyUnit(USD8, ec) == CurrencyUnit(JPY8, ec));
+ assertTrue("FAIL: USD8 != USD8", CurrencyUnit(USD8, ec) == CurrencyUnit(USD8, ec));
+ assertTrue("FAIL: JPY8 != jpy8", CurrencyUnit(JPY8, ec) == CurrencyUnit(jpy8, ec));
+ assertTrue("FAIL: jpy8 != JPY8", CurrencyUnit(jpy8, ec) == CurrencyUnit(JPY8, ec));
+
+ // Test equality between UTF-16 and system charset instances
+ assertTrue("FAIL: USD != USD8", CurrencyUnit(USD, ec) == CurrencyUnit(USD8, ec));
+ assertTrue("FAIL: USD8 != USD", CurrencyUnit(USD8, ec) == CurrencyUnit(USD, ec));
+ assertTrue("FAIL: JPY != jpy8", CurrencyUnit(JPY, ec) == CurrencyUnit(jpy8, ec));
+ assertTrue("FAIL: JPY8 != jpy", CurrencyUnit(JPY8, ec) == CurrencyUnit(jpy, ec));
+ assertTrue("FAIL: jpy != JPY8", CurrencyUnit(jpy, ec) == CurrencyUnit(JPY8, ec));
+ assertTrue("FAIL: jpy8 != JPY", CurrencyUnit(jpy8, ec) == CurrencyUnit(JPY, ec));
+
free(EUR);
free(EUR8);
}
@@ -8772,7 +8839,7 @@ void NumberFormatTest::Test11035_FormatCurrencyAmount() {
// Test two ways to set a currency via API
Locale loc1 = Locale("pt_PT");
- LocalPointer<NumberFormat> fmt1(NumberFormat::createCurrencyInstance("loc1", status),
+ LocalPointer<NumberFormat> fmt1(NumberFormat::createCurrencyInstance(loc1, status),
status);
if (U_FAILURE(status)) {
dataerrln("%s %d NumberFormat instance fmt1 is null", __FILE__, __LINE__);
@@ -8789,10 +8856,8 @@ void NumberFormatTest::Test11035_FormatCurrencyAmount() {
UnicodeString actualLocaleString;
fmt2->format(amount, actualLocaleString);
- // TODO: The following test will fail until DecimalFormat wraps NumberFormatter.
- if (!logKnownIssue("13574")) {
- assertEquals("Custom Currency Pattern, Set Currency", expected, actualSetCurrency);
- }
+ assertEquals("Custom Currency Pattern, Set Currency", expected, actualSetCurrency);
+ assertEquals("Custom Currency Pattern, Locale String", expected, actualLocaleString);
}
void NumberFormatTest::Test11318_DoubleConversion() {
@@ -9035,6 +9100,43 @@ void NumberFormatTest::TestMinimumGroupingDigits() {
df.format(12345, result.remove(), status);
status.errIfFailureAndReset();
assertEquals("Should have grouping", u"12,345", result);
+
+
+ // Test special values -1, UNUM_MINIMUM_GROUPING_DIGITS_AUTO and
+ // UNUM_MINIMUM_GROUPING_DIGITS_MIN2
+ struct TestCase {
+ const char* locale;
+ int32_t minGroup;
+ double input;
+ const char16_t* expected;
+ } cases[] = {
+ { "en-US", 1, 1000, u"1,000" },
+ { "en-US", 1, 10000, u"10,000" },
+ { "en-US", UNUM_MINIMUM_GROUPING_DIGITS_AUTO, 1000, u"1,000" },
+ { "en-US", UNUM_MINIMUM_GROUPING_DIGITS_AUTO, 10000, u"10,000" },
+ { "en-US", UNUM_MINIMUM_GROUPING_DIGITS_MIN2, 1000, u"1000" },
+ { "en-US", UNUM_MINIMUM_GROUPING_DIGITS_MIN2, 10000, u"10,000" },
+
+ { "es", 1, 1000, u"1.000" },
+ { "es", 1, 10000, u"10.000" },
+ { "es", UNUM_MINIMUM_GROUPING_DIGITS_AUTO, 1000, u"1000" },
+ { "es", UNUM_MINIMUM_GROUPING_DIGITS_AUTO, 10000, u"10.000" },
+ { "es", UNUM_MINIMUM_GROUPING_DIGITS_MIN2, 1000, u"1000" },
+ { "es", UNUM_MINIMUM_GROUPING_DIGITS_MIN2, 10000, u"10.000" },
+ };
+ for (const auto& cas : cases) {
+ UnicodeString message = UnicodeString(cas.locale)
+ + u" " + Int64ToUnicodeString(cas.minGroup)
+ + u" " + DoubleToUnicodeString(cas.input);
+ status.setScope(message);
+ DecimalFormat df(u"#,##0", {cas.locale, status}, status);
+ if (status.errIfFailureAndReset()) { continue; }
+ df.setMinimumGroupingDigits(cas.minGroup);
+ UnicodeString actual;
+ df.format(cas.input, actual, status);
+ if (status.errIfFailureAndReset()) { continue; }
+ assertEquals(message, cas.expected, actual);
+ }
}
void NumberFormatTest::Test11897_LocalizedPatternSeparator() {
@@ -9565,12 +9667,12 @@ void NumberFormatTest::Test13850_EmptyStringCurrency() {
const char16_t* currencyArg;
UErrorCode expectedError;
} cases[] = {
- {u"", U_ZERO_ERROR},
+ {u"", U_USING_FALLBACK_WARNING},
{u"U", U_ILLEGAL_ARGUMENT_ERROR},
{u"Us", U_ILLEGAL_ARGUMENT_ERROR},
- {nullptr, U_ZERO_ERROR},
+ {nullptr, U_USING_FALLBACK_WARNING},
{u"U$D", U_INVARIANT_CONVERSION_ERROR},
- {u"Xxx", U_ZERO_ERROR}
+ {u"Xxx", U_USING_FALLBACK_WARNING}
};
for (const auto& cas : cases) {
UnicodeString message(u"with currency arg: ");
@@ -9633,6 +9735,38 @@ void NumberFormatTest::Test20348_CurrencyPrefixOverride() {
u"$100.00", fmt->format(100, result.remove(), NULL, status));
}
+void NumberFormatTest::Test20956_MonetarySymbolGetters() {
+ IcuTestErrorCode status(*this, "Test20956_MonetarySymbolGetters");
+ LocalPointer<DecimalFormat> decimalFormat(static_cast<DecimalFormat*>(
+ NumberFormat::createCurrencyInstance("et", status)));
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+
+ decimalFormat->setCurrency(u"EEK");
+
+ const DecimalFormatSymbols* decimalFormatSymbols = decimalFormat->getDecimalFormatSymbols();
+ assertEquals("MONETARY DECIMAL SEPARATOR",
+ u".",
+ decimalFormatSymbols->getSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol));
+ assertEquals("DECIMAL SEPARATOR",
+ u",",
+ decimalFormatSymbols->getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol));
+ assertEquals("MONETARY GROUPING SEPARATOR",
+ u" ",
+ decimalFormatSymbols->getSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol));
+ assertEquals("GROUPING SEPARATOR",
+ u" ",
+ decimalFormatSymbols->getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol));
+ assertEquals("CURRENCY SYMBOL",
+ u"kr",
+ decimalFormatSymbols->getSymbol(DecimalFormatSymbols::kCurrencySymbol));
+
+ UnicodeString sb;
+ decimalFormat->format(12345.12, sb, status);
+ assertEquals("OUTPUT", u"12 345.12 kr", sb);
+}
+
void NumberFormatTest::Test20358_GroupingInPattern() {
IcuTestErrorCode status(*this, "Test20358_GroupingInPattern");
LocalPointer<DecimalFormat> fmt(static_cast<DecimalFormat*>(
@@ -9705,4 +9839,228 @@ void NumberFormatTest::Test20499_CurrencyVisibleDigitsPlural() {
}
}
+void NumberFormatTest::Test13735_GroupingSizeGetter() {
+ IcuTestErrorCode status(*this, "Test13735_GroupingSizeGetter");
+ {
+ DecimalFormat df("0", {"en", status}, status);
+ assertEquals("pat 0: ", 0, df.getGroupingSize());
+ df.setGroupingUsed(false);
+ assertEquals("pat 0 then disabled: ", 0, df.getGroupingSize());
+ df.setGroupingUsed(true);
+ assertEquals("pat 0 then enabled: ", 0, df.getGroupingSize());
+ }
+ {
+ DecimalFormat df("#,##0", {"en", status}, status);
+ assertEquals("pat #,##0: ", 3, df.getGroupingSize());
+ df.setGroupingUsed(false);
+ assertEquals("pat #,##0 then disabled: ", 3, df.getGroupingSize());
+ df.setGroupingUsed(true);
+ assertEquals("pat #,##0 then enabled: ", 3, df.getGroupingSize());
+ }
+}
+
+void NumberFormatTest::Test13734_StrictFlexibleWhitespace() {
+ IcuTestErrorCode status(*this, "Test13734_StrictFlexibleWhitespace");
+ {
+ DecimalFormat df("+0", {"en", status}, status);
+ df.setLenient(FALSE);
+ Formattable result;
+ ParsePosition ppos;
+ df.parse("+ 33", result, ppos);
+ assertEquals("ppos : ", 0, ppos.getIndex());
+ assertEquals("result : ", "0", result.getDecimalNumber(status).data());
+ }
+ {
+ DecimalFormat df("+ 0", {"en", status}, status);
+ df.setLenient(FALSE);
+ Formattable result;
+ ParsePosition ppos;
+ df.parse("+ 33", result, ppos);
+ assertEquals("ppos : ", 0, ppos.getIndex());
+ assertEquals("result : ", "0", result.getDecimalNumber(status).data());
+ }
+}
+
+void NumberFormatTest::Test20961_CurrencyPluralPattern() {
+ IcuTestErrorCode status(*this, "Test20961_CurrencyPluralPattern");
+ {
+ LocalPointer<DecimalFormat> decimalFormat(static_cast<DecimalFormat*>(
+ NumberFormat::createInstance("en-US", UNUM_CURRENCY_PLURAL, status)));
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+ UnicodeString result;
+ decimalFormat->toPattern(result);
+ assertEquals("Currency pattern", u"#,##0.00 ¤¤¤", result);
+ }
+}
+
+void NumberFormatTest::Test21134_ToNumberFormatter() {
+ IcuTestErrorCode status(*this, "Test21134_ToNumberFormatter");
+ LocalizedNumberFormatter outer1;
+ LocalizedNumberFormatter outer2;
+ LocalPointer<LocalizedNumberFormatter> outer3;
+ {
+ // Case 1: new formatter object
+ DecimalFormat inner(u"a0b", {"en", status}, status);
+ if (auto ptr = inner.toNumberFormatter(status)) {
+ // Copy assignment
+ outer1 = *ptr;
+ } else {
+ status.errIfFailureAndReset();
+ return;
+ }
+ }
+ {
+ // Case 2: compiled formatter object (used at least 3 times)
+ DecimalFormat inner(u"c0d", {"en", status}, status);
+ UnicodeString dummy;
+ inner.format(100, dummy);
+ inner.format(100, dummy);
+ inner.format(100, dummy);
+ if (auto ptr = inner.toNumberFormatter(status)) {
+ // Copy assignment
+ outer2 = *ptr;
+ } else {
+ status.errIfFailureAndReset();
+ return;
+ }
+ }
+ {
+ // Case 3: currency plural info (different code path)
+ LocalPointer<DecimalFormat> inner(static_cast<DecimalFormat*>(
+ DecimalFormat::createInstance("en-US", UNUM_CURRENCY_PLURAL, status)));
+ if (auto ptr = inner->toNumberFormatter(status)) {
+ // Copy constructor
+ outer3.adoptInsteadAndCheckErrorCode(new LocalizedNumberFormatter(*ptr), status);
+ } else {
+ status.errIfFailureAndReset();
+ return;
+ }
+ }
+ auto result1 = outer1.formatDouble(99, status);
+ assertEquals("Using NumberFormatter from DecimalFormat, new version",
+ u"a99b",
+ result1.toTempString(status));
+ auto result2 = outer2.formatDouble(99, status);
+ assertEquals("Using NumberFormatter from DecimalFormat, compiled version",
+ u"c99d",
+ result2.toTempString(status));
+ auto result3 = outer3->formatDouble(99, status);
+ assertEquals("Using NumberFormatter from DecimalFormat, compiled version",
+ u"99.00 US dollars",
+ result3.toTempString(status));
+}
+
+void NumberFormatTest::Test13733_StrictAndLenient() {
+ IcuTestErrorCode status(*this, "Test13733_StrictAndLenient");
+
+ static const struct TestCase {
+ const char16_t* inputString;
+ const char16_t* patternString;
+ int64_t expectedStrictParse;
+ int64_t expectedLenientParse;
+ } cases[] = { {u"CA$ 12", u"¤ 0", 12, 12},
+ {u"CA$12", u"¤0", 12, 12},
+ {u"CAD 12", u"¤¤ 0", 12, 12},
+ {u"12 CAD", u"0 ¤¤", 12, 12},
+ {u"12 Canadian dollars", u"0 ¤¤¤", 12, 12},
+ {u"$12 ", u"¤¤¤¤0", 12, 12},
+ {u"12$", u"0¤¤¤¤", 12, 12},
+ {u"CA$ 12", u"¤0", 0, 12},
+ {u"CA$ 12", u"0 ¤¤", 0, 12},
+ {u"CA$ 12", u"0 ¤¤¤", 0, 12},
+ {u"CA$ 12", u"¤¤¤¤0", 0, 12},
+ {u"CA$ 12", u"0¤¤¤¤", 0, 12},
+ {u"CA$12", u"¤ 0", 0, 12},
+ {u"CA$12", u"¤¤ 0", 0, 12},
+ {u"CA$12", u"0 ¤¤", 0, 12},
+ {u"CA$12", u"0 ¤¤¤", 0, 12},
+ {u"CA$12", u"0¤¤¤¤", 0, 12},
+ {u"CAD 12", u"¤0", 0, 12},
+ {u"CAD 12", u"0 ¤¤", 0, 12},
+ {u"CAD 12", u"0 ¤¤¤", 0, 12},
+ {u"CAD 12", u"¤¤¤¤0", 0, 12},
+ {u"CAD 12", u"0¤¤¤¤", 0, 12},
+ {u"12 CAD", u"¤ 0", 0, 12},
+ {u"12 CAD", u"¤0", 0, 12},
+ {u"12 CAD", u"¤¤ 0", 0, 12},
+ {u"12 CAD", u"¤¤¤¤0", 0, 12},
+ {u"12 CAD", u"0¤¤¤¤", 0, 12},
+ {u"12 Canadian dollars", u"¤ 0", 0, 12},
+ {u"12 Canadian dollars", u"¤0", 0, 12},
+ {u"12 Canadian dollars", u"¤¤ 0", 0, 12},
+ {u"12 Canadian dollars", u"¤¤¤¤0", 0, 12},
+ {u"12 Canadian dollars", u"0¤¤¤¤", 0, 12},
+ {u"$12 ", u"¤ 0", 0, 12},
+ {u"$12 ", u"¤¤ 0", 0, 12},
+ {u"$12 ", u"0 ¤¤", 0, 12},
+ {u"$12 ", u"0 ¤¤¤", 0, 12},
+ {u"$12 ", u"0¤¤¤¤", 0, 12},
+ {u"12$", u"¤ 0", 0, 12},
+ {u"12$", u"¤0", 0, 12},
+ {u"12$", u"¤¤ 0", 0, 12},
+ {u"12$", u"0 ¤¤", 0, 12},
+ {u"12$", u"0 ¤¤¤", 0, 12},
+ {u"12$", u"¤¤¤¤0", 0, 12} };
+ for (auto& cas : cases) {
+ UnicodeString inputString(cas.inputString);
+ UnicodeString patternString(cas.patternString);
+ int64_t parsedStrictValue = 0;
+ int64_t parsedLenientValue = 0;
+ ParsePosition ppos;
+
+ DecimalFormatSymbols dfs(Locale::getEnglish(), status);
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+ DecimalFormat df(patternString, dfs, status);
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+ df.setLenient(FALSE);
+ LocalPointer<CurrencyAmount> ca_strict(df.parseCurrency(inputString, ppos));
+ if (ca_strict != nullptr) {
+ parsedStrictValue = ca_strict->getNumber().getInt64();
+ }
+ assertEquals("Strict parse of " + inputString + " using " + patternString,
+ parsedStrictValue, cas.expectedStrictParse);
+
+ ppos.setIndex(0);
+ df.setLenient(TRUE);
+ LocalPointer<CurrencyAmount> ca_lenient(df.parseCurrency(inputString, ppos));
+ Formattable parsedNumber_lenient = ca_lenient->getNumber();
+ if (ca_lenient != nullptr) {
+ parsedLenientValue = ca_lenient->getNumber().getInt64();
+ }
+ assertEquals("Lenient parse of " + inputString + " using " + patternString,
+ parsedLenientValue, cas.expectedLenientParse);
+ }
+}
+
+void NumberFormatTest::Test21232_ParseTimeout() {
+ IcuTestErrorCode status(*this, "Test21232_ParseTimeout");
+
+ DecimalFormat df(status);
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+
+ UnicodeString input = u"4444444444444444444444444444444444444444";
+ if (quick) {
+ for (int32_t i = 0; i < 5; i++) {
+ input.append(input);
+ }
+ assertEquals("Somewhat long input of digits", 1280, input.length());
+ } else {
+ for (int32_t i = 0; i < 12; i++) {
+ input.append(input);
+ }
+ assertEquals("Very long input of digits", 163840, input.length());
+ }
+ Formattable result;
+ df.parse(input, result, status);
+ // Should not hang
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
index 66c4b2d9c73..24ca15a07b9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
@@ -153,7 +153,7 @@ class NumberFormatTest: public CalendarTimeZoneTest {
void TestCurrencyNames(void);
- void Test20484_NarrowSymbolFallback(void);
+ void TestCurrencyVariants(void);
void TestCurrencyAmount(void);
@@ -294,9 +294,16 @@ class NumberFormatTest: public CalendarTimeZoneTest {
void Test13840_ParseLongStringCrash();
void Test13850_EmptyStringCurrency();
void Test20348_CurrencyPrefixOverride();
+ void Test20956_MonetarySymbolGetters();
void Test20358_GroupingInPattern();
void Test13731_DefaultCurrency();
void Test20499_CurrencyVisibleDigitsPlural();
+ void Test13735_GroupingSizeGetter();
+ void Test13734_StrictFlexibleWhitespace();
+ void Test20961_CurrencyPluralPattern();
+ void Test21134_ToNumberFormatter();
+ void Test13733_StrictAndLenient();
+ void Test21232_ParseTimeout();
private:
UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
index 7bdb5f86ea8..b9c4f661373 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
@@ -975,20 +975,20 @@ void NumberFormatRegressionTest::Test4071005 (void)
UnicodeString tempString;
/* User error :
String expectedDefault = "-5\u00a0789,987";
- String expectedCurrency = "5\u00a0789,98\u00a0$";
+ String expectedCurrency = "5\u00a0789,98\u00a0$\u00a0CA";
String expectedPercent = "-578\u00a0998%";
*/
UChar chars1 [] = {
0x2d, 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x38, 0x38
};
UChar chars2 [] = {
- 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x39, 0x00a0, 0x24
+ 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x39, 0x00a0, 0x24, 0x00a0, 0x43, 0x41
};
UChar chars3 [] = {
0x2d, 0x35, 0x37, 0x38, 0x00a0, 0x39, 0x39, 0x39, 0x00a0, 0x25
};
UnicodeString expectedDefault(chars1, 10, 10);
- UnicodeString expectedCurrency(chars2, 10, 10);
+ UnicodeString expectedCurrency(chars2, 13, 13);
UnicodeString expectedPercent(chars3, 10, 10);
UErrorCode status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
index a70c362b7ab..c015197ba2b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
@@ -23,14 +23,17 @@
#include "unicode/plurrule.h"
#include "unicode/stringpiece.h"
#include "unicode/numberformatter.h"
+#include "unicode/numberrangeformatter.h"
#include "cmemory.h"
+#include "cstr.h"
#include "plurrule_impl.h"
#include "plurults.h"
#include "uhash.h"
#include "number_decimalquantity.h"
using icu::number::impl::DecimalQuantity;
+using namespace icu::number;
void setupResult(const int32_t testSource[], char result[], int32_t* max);
UBool checkEqual(const PluralRules &test, char *result, int32_t max);
@@ -47,10 +50,14 @@ void PluralRulesTest::runIndexedTest( int32_t index, UBool exec, const char* &na
TESTCASE_AUTO(testAPI);
// TESTCASE_AUTO(testGetUniqueKeywordValue);
TESTCASE_AUTO(testGetSamples);
+ TESTCASE_AUTO(testGetFixedDecimalSamples);
+ TESTCASE_AUTO(testSamplesWithExponent);
TESTCASE_AUTO(testWithin);
TESTCASE_AUTO(testGetAllKeywordValues);
+ TESTCASE_AUTO(testCompactDecimalPluralKeyword);
TESTCASE_AUTO(testOrdinal);
TESTCASE_AUTO(testSelect);
+ TESTCASE_AUTO(testSelectRange);
TESTCASE_AUTO(testAvailbleLocales);
TESTCASE_AUTO(testParseErrors);
TESTCASE_AUTO(testFixedDecimal);
@@ -352,120 +359,245 @@ UBool testEquality(const PluralRules &test) {
void
PluralRulesTest::assertRuleValue(const UnicodeString& rule, double expected) {
- assertRuleKeyValue("a:" + rule, "a", expected);
+ assertRuleKeyValue("a:" + rule, "a", expected);
}
void
PluralRulesTest::assertRuleKeyValue(const UnicodeString& rule,
const UnicodeString& key, double expected) {
- UErrorCode status = U_ZERO_ERROR;
- PluralRules *pr = PluralRules::createRules(rule, status);
- double result = pr->getUniqueKeywordValue(key);
- delete pr;
- if (expected != result) {
- errln("expected %g but got %g", expected, result);
- }
+ UErrorCode status = U_ZERO_ERROR;
+ PluralRules *pr = PluralRules::createRules(rule, status);
+ double result = pr->getUniqueKeywordValue(key);
+ delete pr;
+ if (expected != result) {
+ errln("expected %g but got %g", expected, result);
+ }
}
// TODO: UniqueKeywordValue() is not currently supported.
// If it never will be, this test code should be removed.
void PluralRulesTest::testGetUniqueKeywordValue() {
- assertRuleValue("n is 1", 1);
- assertRuleValue("n in 2..2", 2);
- assertRuleValue("n within 2..2", 2);
- assertRuleValue("n in 3..4", UPLRULES_NO_UNIQUE_VALUE);
- assertRuleValue("n within 3..4", UPLRULES_NO_UNIQUE_VALUE);
- assertRuleValue("n is 2 or n is 2", 2);
- assertRuleValue("n is 2 and n is 2", 2);
- assertRuleValue("n is 2 or n is 3", UPLRULES_NO_UNIQUE_VALUE);
- assertRuleValue("n is 2 and n is 3", UPLRULES_NO_UNIQUE_VALUE);
- assertRuleValue("n is 2 or n in 2..3", UPLRULES_NO_UNIQUE_VALUE);
- assertRuleValue("n is 2 and n in 2..3", 2);
- assertRuleKeyValue("a: n is 1", "not_defined", UPLRULES_NO_UNIQUE_VALUE); // key not defined
- assertRuleKeyValue("a: n is 1", "other", UPLRULES_NO_UNIQUE_VALUE); // key matches default rule
+ assertRuleValue("n is 1", 1);
+ assertRuleValue("n in 2..2", 2);
+ assertRuleValue("n within 2..2", 2);
+ assertRuleValue("n in 3..4", UPLRULES_NO_UNIQUE_VALUE);
+ assertRuleValue("n within 3..4", UPLRULES_NO_UNIQUE_VALUE);
+ assertRuleValue("n is 2 or n is 2", 2);
+ assertRuleValue("n is 2 and n is 2", 2);
+ assertRuleValue("n is 2 or n is 3", UPLRULES_NO_UNIQUE_VALUE);
+ assertRuleValue("n is 2 and n is 3", UPLRULES_NO_UNIQUE_VALUE);
+ assertRuleValue("n is 2 or n in 2..3", UPLRULES_NO_UNIQUE_VALUE);
+ assertRuleValue("n is 2 and n in 2..3", 2);
+ assertRuleKeyValue("a: n is 1", "not_defined", UPLRULES_NO_UNIQUE_VALUE); // key not defined
+ assertRuleKeyValue("a: n is 1", "other", UPLRULES_NO_UNIQUE_VALUE); // key matches default rule
}
void PluralRulesTest::testGetSamples() {
- // TODO: fix samples, re-enable this test.
+ // TODO: fix samples, re-enable this test.
- // no get functional equivalent API in ICU4C, so just
- // test every locale...
- UErrorCode status = U_ZERO_ERROR;
- int32_t numLocales;
- const Locale* locales = Locale::getAvailableLocales(numLocales);
+ // no get functional equivalent API in ICU4C, so just
+ // test every locale...
+ UErrorCode status = U_ZERO_ERROR;
+ int32_t numLocales;
+ const Locale* locales = Locale::getAvailableLocales(numLocales);
- double values[1000];
- for (int32_t i = 0; U_SUCCESS(status) && i < numLocales; ++i) {
- PluralRules *rules = PluralRules::forLocale(locales[i], status);
+ double values[1000];
+ for (int32_t i = 0; U_SUCCESS(status) && i < numLocales; ++i) {
+ if (uprv_strcmp(locales[i].getLanguage(), "fr") == 0 &&
+ logKnownIssue("21299", "PluralRules::getSamples cannot distinguish 1e5 from 100000")) {
+ continue;
+ }
+ LocalPointer<PluralRules> rules(PluralRules::forLocale(locales[i], status));
+ if (U_FAILURE(status)) {
+ break;
+ }
+ LocalPointer<StringEnumeration> keywords(rules->getKeywords(status));
+ if (U_FAILURE(status)) {
+ break;
+ }
+ const UnicodeString* keyword;
+ while (NULL != (keyword = keywords->snext(status))) {
+ int32_t count = rules->getSamples(*keyword, values, UPRV_LENGTHOF(values), status);
+ if (U_FAILURE(status)) {
+ errln(UnicodeString(u"getSamples() failed for locale ") +
+ locales[i].getName() +
+ UnicodeString(u", keyword ") + *keyword);
+ continue;
+ }
+ if (count == 0) {
+ // TODO: Lots of these.
+ // errln(UnicodeString(u"no samples for keyword ") + *keyword + UnicodeString(u" in locale ") + locales[i].getName() );
+ }
+ if (count > UPRV_LENGTHOF(values)) {
+ errln(UnicodeString(u"getSamples()=") + count +
+ UnicodeString(u", too many values, for locale ") +
+ locales[i].getName() +
+ UnicodeString(u", keyword ") + *keyword);
+ count = UPRV_LENGTHOF(values);
+ }
+ for (int32_t j = 0; j < count; ++j) {
+ if (values[j] == UPLRULES_NO_UNIQUE_VALUE) {
+ errln("got 'no unique value' among values");
+ } else {
+ UnicodeString resultKeyword = rules->select(values[j]);
+ // if (strcmp(locales[i].getName(), "uk") == 0) { // Debug only.
+ // std::cout << " uk " << US(resultKeyword).cstr() << " " << values[j] << std::endl;
+ // }
+ if (*keyword != resultKeyword) {
+ errln("file %s, line %d, Locale %s, sample for keyword \"%s\": %g, select(%g) returns keyword \"%s\"",
+ __FILE__, __LINE__, locales[i].getName(), US(*keyword).cstr(), values[j], values[j], US(resultKeyword).cstr());
+ }
+ }
+ }
+ }
+ }
+}
+
+void PluralRulesTest::testGetFixedDecimalSamples() {
+ // TODO: fix samples, re-enable this test.
+
+ // no get functional equivalent API in ICU4C, so just
+ // test every locale...
+ UErrorCode status = U_ZERO_ERROR;
+ int32_t numLocales;
+ const Locale* locales = Locale::getAvailableLocales(numLocales);
+
+ FixedDecimal values[1000];
+ for (int32_t i = 0; U_SUCCESS(status) && i < numLocales; ++i) {
+ if (uprv_strcmp(locales[i].getLanguage(), "fr") == 0 &&
+ logKnownIssue("21299", "PluralRules::getSamples cannot distinguish 1e5 from 100000")) {
+ continue;
+ }
+ LocalPointer<PluralRules> rules(PluralRules::forLocale(locales[i], status));
+ if (U_FAILURE(status)) {
+ break;
+ }
+ LocalPointer<StringEnumeration> keywords(rules->getKeywords(status));
+ if (U_FAILURE(status)) {
+ break;
+ }
+ const UnicodeString* keyword;
+ while (NULL != (keyword = keywords->snext(status))) {
+ int32_t count = rules->getSamples(*keyword, values, UPRV_LENGTHOF(values), status);
+ if (U_FAILURE(status)) {
+ errln(UnicodeString(u"getSamples() failed for locale ") +
+ locales[i].getName() +
+ UnicodeString(u", keyword ") + *keyword);
+ continue;
+ }
+ if (count == 0) {
+ // TODO: Lots of these.
+ // errln(UnicodeString(u"no samples for keyword ") + *keyword + UnicodeString(u" in locale ") + locales[i].getName() );
+ }
+ if (count > UPRV_LENGTHOF(values)) {
+ errln(UnicodeString(u"getSamples()=") + count +
+ UnicodeString(u", too many values, for locale ") +
+ locales[i].getName() +
+ UnicodeString(u", keyword ") + *keyword);
+ count = UPRV_LENGTHOF(values);
+ }
+ for (int32_t j = 0; j < count; ++j) {
+ if (values[j] == UPLRULES_NO_UNIQUE_VALUE_DECIMAL) {
+ errln("got 'no unique value' among values");
+ } else {
+ UnicodeString resultKeyword = rules->select(values[j]);
+ // if (strcmp(locales[i].getName(), "uk") == 0) { // Debug only.
+ // std::cout << " uk " << US(resultKeyword).cstr() << " " << values[j] << std::endl;
+ // }
+ if (*keyword != resultKeyword) {
+ errln("file %s, line %d, Locale %s, sample for keyword \"%s\": %s, select(%s) returns keyword \"%s\"",
+ __FILE__, __LINE__, locales[i].getName(), US(*keyword).cstr(), values[j].toString().getBuffer(), values[j].toString().getBuffer(), US(resultKeyword).cstr());
+ }
+ }
+ }
+ }
+ }
+}
+
+void PluralRulesTest::testSamplesWithExponent() {
+ // integer samples
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString description(
+ u"one: i = 0,1 @integer 0, 1, 1e5 @decimal 0.0~1.5, 1.1e5; "
+ u"many: e = 0 and i != 0 and i % 1000000 = 0 and v = 0 or e != 0..5"
+ u" @integer 1000000, 2e6, 3e6, 4e6, 5e6, 6e6, 7e6, … @decimal 2.1e6, 3.1e6, 4.1e6, 5.1e6, 6.1e6, 7.1e6, …; "
+ u"other: @integer 2~17, 100, 1000, 10000, 100000, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, …"
+ u" @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1e5, 3.1e5, 4.1e5, 5.1e5, 6.1e5, 7.1e5, …"
+ );
+ LocalPointer<PluralRules> test(PluralRules::createRules(description, status));
if (U_FAILURE(status)) {
- break;
+ errln("Couldn't create plural rules from a string using exponent notation, with error = %s", u_errorName(status));
+ return;
}
- StringEnumeration *keywords = rules->getKeywords(status);
+ checkNewSamples(description, test, u"one", u"@integer 0, 1, 1e5", FixedDecimal(0));
+ checkNewSamples(description, test, u"many", u"@integer 1000000, 2e6, 3e6, 4e6, 5e6, 6e6, 7e6, …", FixedDecimal(1000000));
+ checkNewSamples(description, test, u"other", u"@integer 2~17, 100, 1000, 10000, 100000, 2e5, 3e5, 4e5, 5e5, 6e5, 7e5, …", FixedDecimal(2));
+
+ // decimal samples
+ status = U_ZERO_ERROR;
+ UnicodeString description2(
+ u"one: i = 0,1 @decimal 0.0~1.5, 1.1e5; "
+ u"many: e = 0 and i != 0 and i % 1000000 = 0 and v = 0 or e != 0..5"
+ u" @decimal 2.1e6, 3.1e6, 4.1e6, 5.1e6, 6.1e6, 7.1e6, …; "
+ u"other: @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1e5, 3.1e5, 4.1e5, 5.1e5, 6.1e5, 7.1e5, …"
+ );
+ LocalPointer<PluralRules> test2(PluralRules::createRules(description2, status));
if (U_FAILURE(status)) {
- delete rules;
- break;
+ errln("Couldn't create plural rules from a string using exponent notation, with error = %s", u_errorName(status));
+ return;
}
- const UnicodeString* keyword;
- while (NULL != (keyword = keywords->snext(status))) {
- int32_t count = rules->getSamples(*keyword, values, UPRV_LENGTHOF(values), status);
- if (U_FAILURE(status)) {
- errln(UNICODE_STRING_SIMPLE("getSamples() failed for locale ") +
- locales[i].getName() +
- UNICODE_STRING_SIMPLE(", keyword ") + *keyword);
- continue;
- }
- if (count == 0) {
- // TODO: Lots of these.
- // errln(UNICODE_STRING_SIMPLE("no samples for keyword ") + *keyword + UNICODE_STRING_SIMPLE(" in locale ") + locales[i].getName() );
- }
- if (count > UPRV_LENGTHOF(values)) {
- errln(UNICODE_STRING_SIMPLE("getSamples()=") + count +
- UNICODE_STRING_SIMPLE(", too many values, for locale ") +
- locales[i].getName() +
- UNICODE_STRING_SIMPLE(", keyword ") + *keyword);
- count = UPRV_LENGTHOF(values);
- }
- for (int32_t j = 0; j < count; ++j) {
- if (values[j] == UPLRULES_NO_UNIQUE_VALUE) {
- errln("got 'no unique value' among values");
- } else {
- UnicodeString resultKeyword = rules->select(values[j]);
- // if (strcmp(locales[i].getName(), "uk") == 0) { // Debug only.
- // std::cout << " uk " << US(resultKeyword).cstr() << " " << values[j] << std::endl;
- // }
- if (*keyword != resultKeyword) {
- errln("file %s, line %d, Locale %s, sample for keyword \"%s\": %g, select(%g) returns keyword \"%s\"",
- __FILE__, __LINE__, locales[i].getName(), US(*keyword).cstr(), values[j], values[j], US(resultKeyword).cstr());
- }
- }
- }
+ checkNewSamples(description2, test2, u"one", u"@decimal 0.0~1.5, 1.1e5", FixedDecimal(0, 1));
+ checkNewSamples(description2, test2, u"many", u"@decimal 2.1e6, 3.1e6, 4.1e6, 5.1e6, 6.1e6, 7.1e6, …", FixedDecimal::createWithExponent(2.1, 1, 6));
+ checkNewSamples(description2, test2, u"other", u"@decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1e5, 3.1e5, 4.1e5, 5.1e5, 6.1e5, 7.1e5, …", FixedDecimal(2.0, 1));
+}
+
+void PluralRulesTest::checkNewSamples(
+ UnicodeString description,
+ const LocalPointer<PluralRules> &test,
+ UnicodeString keyword,
+ UnicodeString samplesString,
+ FixedDecimal firstInRange) {
+
+ UErrorCode status = U_ZERO_ERROR;
+ FixedDecimal samples[1000];
+
+ test->getSamples(keyword, samples, UPRV_LENGTHOF(samples), status);
+ if (U_FAILURE(status)) {
+ errln("Couldn't retrieve plural samples, with error = %s", u_errorName(status));
+ return;
+ }
+ FixedDecimal actualFirstSample = samples[0];
+
+ if (!(firstInRange == actualFirstSample)) {
+ CStr descCstr(description);
+ CStr samplesCstr(samplesString);
+ char errMsg[1000];
+ snprintf(errMsg, sizeof(errMsg), "First parsed sample FixedDecimal not equal to expected for samples: %s in rule string: %s\n", descCstr(), samplesCstr());
+ errln(errMsg);
}
- delete keywords;
- delete rules;
- }
}
void PluralRulesTest::testWithin() {
- // goes to show you what lack of testing will do.
- // of course, this has been broken for two years and no one has noticed...
- UErrorCode status = U_ZERO_ERROR;
- PluralRules *rules = PluralRules::createRules("a: n mod 10 in 5..8", status);
- if (!rules) {
- errln("couldn't instantiate rules");
- return;
- }
+ // goes to show you what lack of testing will do.
+ // of course, this has been broken for two years and no one has noticed...
+ UErrorCode status = U_ZERO_ERROR;
+ PluralRules *rules = PluralRules::createRules("a: n mod 10 in 5..8", status);
+ if (!rules) {
+ errln("couldn't instantiate rules");
+ return;
+ }
- UnicodeString keyword = rules->select((int32_t)26);
- if (keyword != "a") {
- errln("expected 'a' for 26 but didn't get it.");
- }
+ UnicodeString keyword = rules->select((int32_t)26);
+ if (keyword != "a") {
+ errln("expected 'a' for 26 but didn't get it.");
+ }
- keyword = rules->select(26.5);
- if (keyword != "other") {
- errln("expected 'other' for 26.5 but didn't get it.");
- }
+ keyword = rules->select(26.5);
+ if (keyword != "other") {
+ errln("expected 'other' for 26.5 but didn't get it.");
+ }
- delete rules;
+ delete rules;
}
void
@@ -595,6 +727,88 @@ PluralRulesTest::testGetAllKeywordValues() {
}
}
+void
+PluralRulesTest::testCompactDecimalPluralKeyword() {
+ IcuTestErrorCode errorCode(*this, "testCompactDecimalPluralKeyword");
+
+ LocalPointer<PluralRules> rules(PluralRules::createRules(
+ u"one: i = 0,1 @integer 0, 1 @decimal 0.0~1.5; "
+ u"many: e = 0 and i % 1000000 = 0 and v = 0 or e != 0 .. 5; "
+ u"other: @integer 2~17, 100, 1000, 10000, 100000, 1000000, "
+ u" @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", errorCode));
+
+ if (U_FAILURE(errorCode)) {
+ errln("Couldn't instantiate plurals rules from string, with error = %s", u_errorName(errorCode));
+ return;
+ }
+
+ const char* localeName = "fr-FR";
+ Locale locale = Locale::createFromName(localeName);
+
+ struct TestCase {
+ const char16_t* skeleton;
+ const int input;
+ const char16_t* expectedFormattedOutput;
+ const char16_t* expectedPluralRuleKeyword;
+ } cases[] = {
+ // unlocalized formatter skeleton, input, string output, plural rule keyword
+ {u"", 0, u"0", u"one"},
+ {u"compact-long", 0, u"0", u"one"},
+
+ {u"", 1, u"1", u"one"},
+ {u"compact-long", 1, u"1", u"one"},
+
+ {u"", 2, u"2", u"other"},
+ {u"compact-long", 2, u"2", u"other"},
+
+ {u"", 1000000, u"1 000 000", u"many"},
+ {u"compact-long", 1000000, u"1 million", u"many"},
+
+ {u"", 1000001, u"1 000 001", u"other"},
+ {u"compact-long", 1000001, u"1 million", u"many"},
+
+ {u"", 120000, u"1 200 000", u"other"},
+ {u"compact-long", 1200000, u"1,2 millions", u"many"},
+
+ {u"", 1200001, u"1 200 001", u"other"},
+ {u"compact-long", 1200001, u"1,2 millions", u"many"},
+
+ {u"", 2000000, u"2 000 000", u"many"},
+ {u"compact-long", 2000000, u"2 millions", u"many"},
+ };
+ for (const auto& cas : cases) {
+ const char16_t* skeleton = cas.skeleton;
+ const int input = cas.input;
+ const char16_t* expectedPluralRuleKeyword = cas.expectedPluralRuleKeyword;
+
+ UnicodeString actualPluralRuleKeyword =
+ getPluralKeyword(rules, locale, input, skeleton);
+
+ UnicodeString message(UnicodeString(localeName) + u" " + DoubleToUnicodeString(input));
+ assertEquals(message, expectedPluralRuleKeyword, actualPluralRuleKeyword);
+ }
+}
+
+UnicodeString PluralRulesTest::getPluralKeyword(const LocalPointer<PluralRules> &rules, Locale locale, double number, const char16_t* skeleton) {
+ IcuTestErrorCode errorCode(*this, "getPluralKeyword");
+ UnlocalizedNumberFormatter ulnf = NumberFormatter::forSkeleton(skeleton, errorCode);
+ if (errorCode.errIfFailureAndReset("PluralRules::getPluralKeyword(<PluralRules>, <locale>, %d, %s) failed", number, skeleton)) {
+ return nullptr;
+ }
+ LocalizedNumberFormatter formatter = ulnf.locale(locale);
+
+ const FormattedNumber fn = formatter.formatDouble(number, errorCode);
+ if (errorCode.errIfFailureAndReset("NumberFormatter::formatDouble(%d) failed", number)) {
+ return nullptr;
+ }
+
+ UnicodeString pluralKeyword = rules->select(fn, errorCode);
+ if (errorCode.errIfFailureAndReset("PluralRules->select(FormattedNumber of %d) failed", number)) {
+ return nullptr;
+ }
+ return pluralKeyword;
+}
+
void PluralRulesTest::testOrdinal() {
IcuTestErrorCode errorCode(*this, "testOrdinal");
LocalPointer<PluralRules> pr(PluralRules::forLocale("en", UPLURAL_TYPE_ORDINAL, errorCode));
@@ -841,6 +1055,50 @@ void PluralRulesTest::testSelect() {
}
+void PluralRulesTest::testSelectRange() {
+ IcuTestErrorCode status(*this, "testSelectRange");
+
+ int32_t d1 = 102;
+ int32_t d2 = 201;
+ Locale locale("sl");
+
+ // Locale sl has interesting data: one + two => few
+ auto range = NumberRangeFormatter::withLocale(locale).formatFormattableRange(d1, d2, status);
+ auto rules = LocalPointer<PluralRules>(PluralRules::forLocale(locale, status), status);
+ if (status.errIfFailureAndReset()) {
+ return;
+ }
+
+ // For testing: get plural form of first and second numbers
+ auto a = NumberFormatter::withLocale(locale).formatDouble(d1, status);
+ auto b = NumberFormatter::withLocale(locale).formatDouble(d2, status);
+ assertEquals("First plural", u"two", rules->select(a, status));
+ assertEquals("Second plural", u"one", rules->select(b, status));
+
+ // Check the range plural now:
+ auto form = rules->select(range, status);
+ assertEquals("Range plural", u"few", form);
+
+ // Test after copying:
+ PluralRules copy(*rules);
+ form = copy.select(range, status);
+ assertEquals("Range plural after copying", u"few", form);
+
+ // Test when plural ranges data is unavailable:
+ auto bare = LocalPointer<PluralRules>(
+ PluralRules::createRules(u"a: i = 0,1", status), status);
+ if (status.errIfFailureAndReset()) { return; }
+ form = bare->select(range, status);
+ status.expectErrorAndReset(U_UNSUPPORTED_ERROR);
+
+ // However, they should not set an error when no data is available for a language.
+ auto xyz = LocalPointer<PluralRules>(
+ PluralRules::forLocale("xyz", status));
+ form = xyz->select(range, status);
+ assertEquals("Fallback form", u"other", form);
+}
+
+
void PluralRulesTest::testAvailbleLocales() {
// Hash set of (char *) strings.
@@ -1030,6 +1288,11 @@ void PluralRulesTest::testSelectTrailingZeros() {
status.setScope(message);
Locale locale(cas.localeName);
LocalPointer<PluralRules> rules(PluralRules::forLocale(locale, status));
+ if (U_FAILURE(status)) {
+ dataerrln("Failed to create PluralRules by PluralRules::forLocale(%s): %s\n",
+ cas.localeName, u_errorName(status));
+ return;
+ }
assertEquals(message, cas.expectedDoubleKeyword, rules->select(cas.number));
number::FormattedNumber fn = unf.locale(locale).formatDouble(cas.number, status);
assertEquals(message, cas.expectedFormattedKeyword, rules->select(fn, status));
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
index 784b0d3bf27..70823498ccd 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
@@ -30,10 +30,14 @@ private:
void testAPI();
void testGetUniqueKeywordValue();
void testGetSamples();
+ void testGetFixedDecimalSamples();
+ void testSamplesWithExponent();
void testWithin();
void testGetAllKeywordValues();
+ void testCompactDecimalPluralKeyword();
void testOrdinal();
void testSelect();
+ void testSelectRange();
void testAvailbleLocales();
void testParseErrors();
void testFixedDecimal();
@@ -43,6 +47,13 @@ private:
void assertRuleValue(const UnicodeString& rule, double expected);
void assertRuleKeyValue(const UnicodeString& rule, const UnicodeString& key,
double expected);
+ void checkNewSamples(UnicodeString description,
+ const LocalPointer<PluralRules> &test,
+ UnicodeString keyword,
+ UnicodeString samplesString,
+ FixedDecimal firstInRange);
+ UnicodeString getPluralKeyword(const LocalPointer<PluralRules> &rules,
+ Locale locale, double number, const char16_t* skeleton);
void checkSelect(const LocalPointer<PluralRules> &rules, UErrorCode &status,
int32_t line, const char *keyword, ...);
void compareLocaleResults(const char* loc1, const char* loc2, const char* loc3);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
index ecc10e8ea65..fdb496e6c70 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
@@ -1030,7 +1030,7 @@ void RBBIAPITest::RoundtripRule(const char *dataFile) {
parseError.offset = 0;
LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", dataFile, &status));
uint32_t length;
- const UChar *builtSource;
+ const char *builtSource;
const uint8_t *rbbiRules;
const uint8_t *builtRules;
@@ -1040,7 +1040,7 @@ void RBBIAPITest::RoundtripRule(const char *dataFile) {
}
builtRules = (const uint8_t *)udata_getMemory(data.getAlias());
- builtSource = (const UChar *)(builtRules + ((RBBIDataHeader*)builtRules)->fRuleSource);
+ builtSource = (const char *)(builtRules + ((RBBIDataHeader*)builtRules)->fRuleSource);
LocalPointer<RuleBasedBreakIterator> brkItr (new RuleBasedBreakIterator(builtSource, parseError, status));
if (U_FAILURE(status)) {
errln("%s:%d createRuleBasedBreakIterator: ICU Error \"%s\" at line %d, column %d\n",
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
index 8f063d0e416..8e3086b5151 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
@@ -14,6 +14,7 @@
#include "unicode/utypes.h"
#if !UCONFIG_NO_BREAK_ITERATION
+#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -35,6 +36,7 @@
#include "unicode/uscript.h"
#include "unicode/ustring.h"
#include "unicode/utext.h"
+#include "unicode/utrace.h"
#include "charstr.h"
#include "cmemory.h"
@@ -63,6 +65,11 @@
} \
} UPRV_BLOCK_MACRO_END
+#define MONKEY_ERROR(msg, fRuleFileName, index, seed) { \
+ IntlTest::gTest->errln("\n%s:%d %s at index %d. Parameters to reproduce: @\"type=%s seed=%u loop=1\"", \
+ __FILE__, __LINE__, msg, index, fRuleFileName, seed); \
+}
+
//---------------------------------------------
// runIndexedTest
//---------------------------------------------
@@ -120,6 +127,26 @@ void RBBITest::runIndexedTest( int32_t index, UBool exec, const char* &name, cha
TESTCASE_AUTO(TestBug13447);
TESTCASE_AUTO(TestReverse);
TESTCASE_AUTO(TestBug13692);
+ TESTCASE_AUTO(TestDebugRules);
+ TESTCASE_AUTO(Test8BitsTrieWith8BitStateTable);
+ TESTCASE_AUTO(Test8BitsTrieWith16BitStateTable);
+ TESTCASE_AUTO(Test16BitsTrieWith8BitStateTable);
+ TESTCASE_AUTO(Test16BitsTrieWith16BitStateTable);
+ TESTCASE_AUTO(TestTable_8_16_Bits);
+ TESTCASE_AUTO(TestBug13590);
+
+#if U_ENABLE_TRACING
+ TESTCASE_AUTO(TestTraceCreateCharacter);
+ TESTCASE_AUTO(TestTraceCreateWord);
+ TESTCASE_AUTO(TestTraceCreateSentence);
+ TESTCASE_AUTO(TestTraceCreateTitle);
+ TESTCASE_AUTO(TestTraceCreateLine);
+ TESTCASE_AUTO(TestTraceCreateLineNormal);
+ TESTCASE_AUTO(TestTraceCreateLineLoose);
+ TESTCASE_AUTO(TestTraceCreateLineStrict);
+ TESTCASE_AUTO(TestTraceCreateBreakEngine);
+#endif
+
TESTCASE_AUTO_END;
}
@@ -878,6 +905,10 @@ void RBBITest::TestExtended() {
case PARSE_DATA:
if (c == u'•') {
int32_t breakIdx = tp.dataToBreak.length();
+ if (tp.expectedBreaks->size() > breakIdx) {
+ errln("rbbitst.txt:%d:%d adjacent expected breaks with no intervening test text",
+ lineNum, column);
+ }
tp.expectedBreaks->setSize(breakIdx+1);
tp.expectedBreaks->setElementAt(-1, breakIdx);
tp.srcLine->setSize(breakIdx+1);
@@ -1042,6 +1073,10 @@ void RBBITest::TestExtended() {
tagValue = -1;
}
int32_t breakIdx = tp.dataToBreak.length();
+ if (tp.expectedBreaks->size() > breakIdx) {
+ errln("rbbitst.txt:%d:%d adjacent expected breaks with no intervening test text",
+ lineNum, column);
+ }
tp.expectedBreaks->setSize(breakIdx+1);
tp.expectedBreaks->setElementAt(tagValue, breakIdx);
tp.srcLine->setSize(breakIdx+1);
@@ -1305,34 +1340,37 @@ UBool RBBITest::testCaseIsKnownIssue(const UnicodeString &testCase, const char *
const UChar *fString;
} badTestCases[] = {
{"10666", "GraphemeBreakTest.txt", u"\u0020\u0020\u0033"}, // Fake example, for illustration.
+ // The following tests were originally for
// Issue 8151, move the Finnish tailoring of the line break of hyphens to root.
- // This probably ultimately wants to be resolved by updating UAX-14, but in the mean time
- // ICU is out of sync with Unicode.
- {"8151", "LineBreakTest.txt", u"-#"},
- {"8151", "LineBreakTest.txt", u"\u002d\u0308\u0023"},
- {"8151", "LineBreakTest.txt", u"\u002d\u00a7"},
- {"8151", "LineBreakTest.txt", u"\u002d\u0308\u00a7"},
- {"8151", "LineBreakTest.txt", u"\u002d\U00050005"},
- {"8151", "LineBreakTest.txt", u"\u002d\u0308\U00050005"},
- {"8151", "LineBreakTest.txt", u"\u002d\u0e01"},
- {"8151", "LineBreakTest.txt", u"\u002d\u0308\u0e01"},
-
- // Issue ICU-12017 Improve line break around numbers
- {"12017", "LineBreakTest.txt", u"\u002C\u0030"}, // ",0"
- {"12017", "LineBreakTest.txt", u"\u002C\u0308\u0030"},
- {"12017", "LineBreakTest.txt", u"find .com"},
- {"12017", "LineBreakTest.txt", u"equals .35 cents"},
- {"12017", "LineBreakTest.txt", u"a.2 "},
- {"12017", "LineBreakTest.txt", u"a.2 \u0915"},
- {"12017", "LineBreakTest.txt", u"a.2 \u672C"},
- {"12017", "LineBreakTest.txt", u"a.2\u3000\u672C"},
- {"12017", "LineBreakTest.txt", u"a.2\u3000\u307E"},
- {"12017", "LineBreakTest.txt", u"a.2\u3000\u0033"},
- {"12017", "LineBreakTest.txt", u"A.1 \uBABB"},
- {"12017", "LineBreakTest.txt", u"\uBD24\uC5B4\u002E\u0020\u0041\u002E\u0032\u0020\uBCFC"},
- {"12017", "LineBreakTest.txt", u"\uBD10\uC694\u002E\u0020\u0041\u002E\u0033\u0020\uBABB"},
- {"12017", "LineBreakTest.txt", u"\uC694\u002E\u0020\u0041\u002E\u0034\u0020\uBABB"},
- {"12017", "LineBreakTest.txt", u"a.2\u3000\u300C"},
+ // However, that ticket has been closed as fixed but these tests still fail, so
+ // ICU-21097 has been created to investigate and address these remaining issues.
+ {"21097", "LineBreakTest.txt", u"-#"},
+ {"21097", "LineBreakTest.txt", u"\u002d\u0308\u0023"},
+ {"21097", "LineBreakTest.txt", u"\u002d\u00a7"},
+ {"21097", "LineBreakTest.txt", u"\u002d\u0308\u00a7"},
+ {"21097", "LineBreakTest.txt", u"\u002d\U00050005"},
+ {"21097", "LineBreakTest.txt", u"\u002d\u0308\U00050005"},
+ {"21097", "LineBreakTest.txt", u"\u002d\u0e01"},
+ {"21097", "LineBreakTest.txt", u"\u002d\u0308\u0e01"},
+
+ // The following tests were originally for
+ // Issue ICU-12017 Improve line break around numbers.
+ // However, that ticket has been closed as fixed but these tests still fail, so
+ // ICU-21097 has been created to investigate and address these remaining issues.
+ {"21097", "LineBreakTest.txt", u"\u002C\u0030"}, // ",0"
+ {"21097", "LineBreakTest.txt", u"\u002C\u0308\u0030"},
+ {"21097", "LineBreakTest.txt", u"equals .35 cents"},
+ {"21097", "LineBreakTest.txt", u"a.2 "},
+ {"21097", "LineBreakTest.txt", u"a.2 \u0915"},
+ {"21097", "LineBreakTest.txt", u"a.2 \u672C"},
+ {"21097", "LineBreakTest.txt", u"a.2\u3000\u672C"},
+ {"21097", "LineBreakTest.txt", u"a.2\u3000\u307E"},
+ {"21097", "LineBreakTest.txt", u"a.2\u3000\u0033"},
+ {"21097", "LineBreakTest.txt", u"A.1 \uBABB"},
+ {"21097", "LineBreakTest.txt", u"\uBD24\uC5B4\u002E\u0020\u0041\u002E\u0032\u0020\uBCFC"},
+ {"21097", "LineBreakTest.txt", u"\uBD10\uC694\u002E\u0020\u0041\u002E\u0033\u0020\uBABB"},
+ {"21097", "LineBreakTest.txt", u"\uC694\u002E\u0020\u0041\u002E\u0034\u0020\uBABB"},
+ {"21097", "LineBreakTest.txt", u"a.2\u3000\u300C"},
};
for (int n=0; n<UPRV_LENGTHOF(badTestCases); n++) {
@@ -1404,14 +1442,14 @@ void RBBITest::runUnicodeTestData(const char *fileName, RuleBasedBreakIterator *
//
int spin = 0;
while (tokenMatcher.find()) {
- if(tokenMatcher.hitEnd()) {
+ if(tokenMatcher.hitEnd()) {
/* Shouldnt Happen(TM). This means we didn't find the symbols we were looking for.
This occurred when the text file was corrupt (wasn't marked as UTF-8)
and caused an infinite loop here on EBCDIC systems!
*/
fprintf(stderr,"FAIL: hit end of file %s for the %8dth time- corrupt data file?\r", fileName, ++spin);
- // return;
- }
+ // return;
+ }
if (tokenMatcher.start(1, status) >= 0) {
// Scanned a divide sign, indicating a break position in the test data.
if (testString.length()>0) {
@@ -1552,14 +1590,30 @@ public:
// Return -1 after reaching end of string.
virtual int32_t next(int32_t i) = 0;
+ // Name of each character class, parallel with charClasses. Used for debugging output
+ // of characters.
+ virtual std::vector<std::string>& characterClassNames();
+
+ void setAppliedRule(int32_t position, const char* value);
+
+ std::string getAppliedRule(int32_t position);
+
virtual ~RBBIMonkeyKind();
- UErrorCode deferredStatus;
+ UErrorCode deferredStatus;
+ std::string classNameFromCodepoint(const UChar32 c);
+ unsigned int maxClassNameSize();
-protected:
- RBBIMonkeyKind();
+ protected:
+ RBBIMonkeyKind();
+ std::vector<std::string> classNames;
+ std::vector<std::string> appliedRules;
+
+ // Clear `appliedRules` and fill it with empty strings in the size of test text.
+ void prepareAppliedRules(int32_t size );
+
+ private:
-private:
};
RBBIMonkeyKind::RBBIMonkeyKind() {
@@ -1569,6 +1623,46 @@ RBBIMonkeyKind::RBBIMonkeyKind() {
RBBIMonkeyKind::~RBBIMonkeyKind() {
}
+std::vector<std::string>& RBBIMonkeyKind::characterClassNames() {
+ return classNames;
+}
+
+void RBBIMonkeyKind::prepareAppliedRules(int32_t size) {
+ // Remove all the information in the `appliedRules`.
+ appliedRules.clear();
+ appliedRules.resize(size + 1);
+}
+
+void RBBIMonkeyKind::setAppliedRule(int32_t position, const char* value) {
+ appliedRules[position] = value;
+}
+
+std::string RBBIMonkeyKind::getAppliedRule(int32_t position){
+ return appliedRules[position];
+}
+
+std::string RBBIMonkeyKind::classNameFromCodepoint(const UChar32 c) {
+ // Simply iterate through charClasses to find character's class
+ for (int aClassNum = 0; aClassNum < charClasses()->size(); aClassNum++) {
+ UnicodeSet *classSet = (UnicodeSet *)charClasses()->elementAt(aClassNum);
+ if (classSet->contains(c)) {
+ return classNames[aClassNum];
+ }
+ }
+ U_ASSERT(FALSE); // This should not happen.
+ return "bad class name";
+}
+
+unsigned int RBBIMonkeyKind::maxClassNameSize() {
+ unsigned int maxSize = 0;
+ for (int aClassNum = 0; aClassNum < charClasses()->size(); aClassNum++) {
+ auto aClassNumSize = static_cast<unsigned int>(classNames[aClassNum].size());
+ if (aClassNumSize > maxSize) {
+ maxSize = aClassNumSize;
+ }
+ }
+ return maxSize;
+}
//----------------------------------------------------------------------------------------
//
@@ -1659,22 +1753,27 @@ RBBICharMonkey::RBBICharMonkey() {
fExtCccZwjSet = new UnicodeSet(u"[[\\p{gcb=Extend}-\\p{ccc=0}] \\p{gcb=ZWJ}]", status);
fAnySet = new UnicodeSet(0, 0x10ffff);
+ // Create sets of characters, and add the names of the above character sets.
+ // In each new ICU release, add new names corresponding to the sets above.
fSets = new UVector(status);
- fSets->addElement(fCRLFSet, status);
- fSets->addElement(fControlSet, status);
- fSets->addElement(fExtendSet, status);
- fSets->addElement(fRegionalIndicatorSet, status);
+
+ // Important: Keep class names the same as the class contents.
+ fSets->addElement(fCRLFSet, status); classNames.push_back("CRLF");
+ fSets->addElement(fControlSet, status); classNames.push_back("Control");
+ fSets->addElement(fExtendSet, status); classNames.push_back("Extended");
+ fSets->addElement(fRegionalIndicatorSet, status); classNames.push_back("RegionalIndicator");
if (!fPrependSet->isEmpty()) {
- fSets->addElement(fPrependSet, status);
- }
- fSets->addElement(fSpacingSet, status);
- fSets->addElement(fHangulSet, status);
- fSets->addElement(fAnySet, status);
- fSets->addElement(fZWJSet, status);
- fSets->addElement(fExtendedPictSet, status);
- fSets->addElement(fViramaSet, status);
- fSets->addElement(fLinkingConsonantSet, status);
- fSets->addElement(fExtCccZwjSet, status);
+ fSets->addElement(fPrependSet, status); classNames.push_back("Prepend");
+ }
+ fSets->addElement(fSpacingSet, status); classNames.push_back("Spacing");
+ fSets->addElement(fHangulSet, status); classNames.push_back("Hangul");
+ fSets->addElement(fZWJSet, status); classNames.push_back("ZWJ");
+ fSets->addElement(fExtendedPictSet, status); classNames.push_back("ExtendedPict");
+ fSets->addElement(fViramaSet, status); classNames.push_back("Virama");
+ fSets->addElement(fLinkingConsonantSet, status); classNames.push_back("LinkingConsonant");
+ fSets->addElement(fExtCccZwjSet, status); classNames.push_back("ExtCcccZwj");
+ fSets->addElement(fAnySet, status); classNames.push_back("Any");
+
if (U_FAILURE(status)) {
deferredStatus = status;
}
@@ -1683,6 +1782,7 @@ RBBICharMonkey::RBBICharMonkey() {
void RBBICharMonkey::setText(const UnicodeString &s) {
fText = &s;
+ prepareAppliedRules(s.length());
}
@@ -1705,6 +1805,7 @@ int32_t RBBICharMonkey::next(int32_t prevPos) {
if (prevPos >= fText->length()) {
return -1;
}
+
p0 = p1 = p2 = p3 = prevPos;
c3 = fText->char32At(prevPos);
c0 = c1 = c2 = cBase = 0;
@@ -1718,7 +1819,7 @@ int32_t RBBICharMonkey::next(int32_t prevPos) {
p1 = p2; c1 = c2;
p2 = p3; c2 = c3;
- // Advancd p3 by one codepoint
+ // Advance p3 by one codepoint
p3 = fText->moveIndex32(p3, 1);
c3 = fText->char32At(p3);
@@ -1726,75 +1827,73 @@ int32_t RBBICharMonkey::next(int32_t prevPos) {
// Still warming up the loop. (won't work with zero length strings, but we don't care)
continue;
}
+
if (p2 == fText->length()) {
- // Reached end of string. Always a break position.
+ setAppliedRule(p2, "End of String");
break;
}
- // Rule GB3 CR x LF
// No Extend or Format characters may appear between the CR and LF,
// which requires the additional check for p2 immediately following p1.
//
if (c1==0x0D && c2==0x0A && p1==(p2-1)) {
- continue;
+ setAppliedRule(p2, "GB3 CR x LF");
+ continue;
}
- // Rule (GB4). ( Control | CR | LF ) <break>
if (fControlSet->contains(c1) ||
c1 == 0x0D ||
c1 == 0x0A) {
- break;
+ setAppliedRule(p2, "GB4 ( Control | CR | LF ) <break>");
+ break;
}
- // Rule (GB5) <break> ( Control | CR | LF )
- //
if (fControlSet->contains(c2) ||
c2 == 0x0D ||
c2 == 0x0A) {
+ setAppliedRule(p2, "GB5 <break> ( Control | CR | LF )");
break;
}
-
- // Rule (GB6) L x ( L | V | LV | LVT )
if (fLSet->contains(c1) &&
(fLSet->contains(c2) ||
fVSet->contains(c2) ||
fLVSet->contains(c2) ||
fLVTSet->contains(c2))) {
+ setAppliedRule(p2, "GB6 L x ( L | V | LV | LVT )");
continue;
}
- // Rule (GB7) ( LV | V ) x ( V | T )
if ((fLVSet->contains(c1) || fVSet->contains(c1)) &&
(fVSet->contains(c2) || fTSet->contains(c2))) {
+ setAppliedRule(p2, "GB7 ( LV | V ) x ( V | T )");
continue;
}
- // Rule (GB8) ( LVT | T) x T
if ((fLVTSet->contains(c1) || fTSet->contains(c1)) &&
fTSet->contains(c2)) {
+ setAppliedRule(p2, "GB8 ( LVT | T) x T");
continue;
}
- // Rule (GB9) x (Extend | ZWJ)
if (fExtendSet->contains(c2) || fZWJSet->contains(c2)) {
if (!fExtendSet->contains(c1)) {
cBase = c1;
}
+ setAppliedRule(p2, "GB9 x (Extend | ZWJ)");
continue;
}
- // Rule (GB9a) x SpacingMark
if (fSpacingSet->contains(c2)) {
+ setAppliedRule(p2, "GB9a x SpacingMark");
continue;
}
- // Rule (GB9b) Prepend x
if (fPrependSet->contains(c1)) {
+ setAppliedRule(p2, "GB9b Prepend x");
continue;
}
- // Rule (GB9.3) LinkingConsonant ExtCccZwj* Virama ExtCccZwj* × LinkingConsonant
// Note: Viramas are also included in the ExtCccZwj class.
if (fLinkingConsonantSet->contains(c2)) {
int pi = p1;
@@ -1806,29 +1905,31 @@ int32_t RBBICharMonkey::next(int32_t prevPos) {
pi = fText->moveIndex32(pi, -1);
}
if (sawVirama && fLinkingConsonantSet->contains(fText->char32At(pi))) {
- continue;
+ setAppliedRule(p2, "GB9.3 LinkingConsonant ExtCccZwj* Virama ExtCccZwj* × LinkingConsonant");
+ continue;
}
}
- // Rule (GB11) Extended_Pictographic Extend * ZWJ x Extended_Pictographic
if (fExtendedPictSet->contains(cBase) && fZWJSet->contains(c1) && fExtendedPictSet->contains(c2)) {
- continue;
+ setAppliedRule(p2, "GB11 Extended_Pictographic Extend * ZWJ x Extended_Pictographic");
+ continue;
}
- // Rule (GB12-13) Regional_Indicator x Regional_Indicator
// Note: The first if condition is a little tricky. We only need to force
// a break if there are three or more contiguous RIs. If there are
// only two, a break following will occur via other rules, and will include
// any trailing extend characters, which is needed behavior.
if (fRegionalIndicatorSet->contains(c0) && fRegionalIndicatorSet->contains(c1)
&& fRegionalIndicatorSet->contains(c2)) {
- break;
+ setAppliedRule(p2, "GB12-13 Regional_Indicator x Regional_Indicator");
+ break;
}
if (fRegionalIndicatorSet->contains(c1) && fRegionalIndicatorSet->contains(c2)) {
- continue;
+ setAppliedRule(p2, "GB12-13 Regional_Indicator x Regional_Indicator");
+ continue;
}
- // Rule (GB999) Any <break> Any
+ setAppliedRule(p2, "GB999 Any <break> Any");
break;
}
@@ -1842,7 +1943,6 @@ UVector *RBBICharMonkey::charClasses() {
return fSets;
}
-
RBBICharMonkey::~RBBICharMonkey() {
delete fSets;
delete fCRLFSet;
@@ -1862,7 +1962,8 @@ RBBICharMonkey::~RBBICharMonkey() {
delete fExtendedPictSet;
delete fViramaSet;
delete fLinkingConsonantSet;
- delete fExtCccZwjSet;}
+ delete fExtCccZwjSet;
+}
//------------------------------------------------------------------------------------------
//
@@ -1924,10 +2025,15 @@ RBBIWordMonkey::RBBIWordMonkey()
fMidNumLetSet = new UnicodeSet(u"[\\p{Word_Break = MidNumLet}]", status);
fMidLetterSet = new UnicodeSet(u"[\\p{Word_Break = MidLetter}]", status);
fMidNumSet = new UnicodeSet(u"[\\p{Word_Break = MidNum}]", status);
- fNumericSet = new UnicodeSet(u"[[\\p{Word_Break = Numeric}][\\uff10-\\uff19]]", status);
+ fNumericSet = new UnicodeSet(u"[\\p{Word_Break = Numeric}]", status);
fFormatSet = new UnicodeSet(u"[\\p{Word_Break = Format}]", status);
fExtendNumLetSet = new UnicodeSet(u"[\\p{Word_Break = ExtendNumLet}]", status);
- fExtendSet = new UnicodeSet(u"[\\p{Word_Break = Extend}]", status);
+ // There are some sc=Hani characters with WB=Extend.
+ // The break rules need to pick one or the other because
+ // Extend overlapping with something else is messy.
+ // For Unicode 13, we chose to keep U+16FF0 & U+16FF1
+ // in $Han (for $dictionary) and out of $Extend.
+ fExtendSet = new UnicodeSet(u"[\\p{Word_Break = Extend}-[:Hani:]]", status);
fWSegSpaceSet = new UnicodeSet(u"[\\p{Word_Break = WSegSpace}]", status);
fZWJSet = new UnicodeSet(u"[\\p{Word_Break = ZWJ}]", status);
@@ -1969,29 +2075,32 @@ RBBIWordMonkey::RBBIWordMonkey()
// Inhibit dictionary characters from being tested at all.
fOtherSet->removeAll(*fDictionarySet);
- fSets->addElement(fCRSet, status);
- fSets->addElement(fLFSet, status);
- fSets->addElement(fNewlineSet, status);
- fSets->addElement(fRegionalIndicatorSet, status);
- fSets->addElement(fHebrew_LetterSet, status);
- fSets->addElement(fALetterSet, status);
- fSets->addElement(fSingle_QuoteSet, status);
- fSets->addElement(fDouble_QuoteSet, status);
- //fSets->addElement(fKatakanaSet, status); // Omit Katakana from fSets, which omits Katakana characters
- // from the test data. They are all in the dictionary set,
- // which this (old, to be retired) monkey test cannot handle.
- fSets->addElement(fMidLetterSet, status);
- fSets->addElement(fMidNumLetSet, status);
- fSets->addElement(fMidNumSet, status);
- fSets->addElement(fNumericSet, status);
- fSets->addElement(fFormatSet, status);
- fSets->addElement(fExtendSet, status);
- fSets->addElement(fOtherSet, status);
- fSets->addElement(fExtendNumLetSet, status);
- fSets->addElement(fWSegSpaceSet, status);
-
- fSets->addElement(fZWJSet, status);
- fSets->addElement(fExtendedPictSet, status);
+ // Add classes and their names
+ fSets->addElement(fCRSet, status); classNames.push_back("CR");
+ fSets->addElement(fLFSet, status); classNames.push_back("LF");
+ fSets->addElement(fNewlineSet, status); classNames.push_back("Newline");
+ fSets->addElement(fRegionalIndicatorSet, status); classNames.push_back("RegionalIndicator");
+ fSets->addElement(fHebrew_LetterSet, status); classNames.push_back("Hebrew");
+ fSets->addElement(fALetterSet, status); classNames.push_back("ALetter");
+ fSets->addElement(fSingle_QuoteSet, status); classNames.push_back("Single Quote");
+ fSets->addElement(fDouble_QuoteSet, status); classNames.push_back("Double Quote");
+ // Omit Katakana from fSets, which omits Katakana characters
+ // from the test data. They are all in the dictionary set,
+ // which this (old, to be retired) monkey test cannot handle.
+ //fSets->addElement(fKatakanaSet, status);
+
+ fSets->addElement(fMidLetterSet, status); classNames.push_back("MidLetter");
+ fSets->addElement(fMidNumLetSet, status); classNames.push_back("MidNumLet");
+ fSets->addElement(fMidNumSet, status); classNames.push_back("MidNum");
+ fSets->addElement(fNumericSet, status); classNames.push_back("Numeric");
+ fSets->addElement(fFormatSet, status); classNames.push_back("Format");
+ fSets->addElement(fExtendSet, status); classNames.push_back("Extend");
+ fSets->addElement(fOtherSet, status); classNames.push_back("Other");
+ fSets->addElement(fExtendNumLetSet, status); classNames.push_back("ExtendNumLet");
+ fSets->addElement(fWSegSpaceSet, status); classNames.push_back("WSegSpace");
+
+ fSets->addElement(fZWJSet, status); classNames.push_back("ZWJ");
+ fSets->addElement(fExtendedPictSet, status); classNames.push_back("ExtendedPict");
if (U_FAILURE(status)) {
deferredStatus = status;
@@ -2000,6 +2109,7 @@ RBBIWordMonkey::RBBIWordMonkey()
void RBBIWordMonkey::setText(const UnicodeString &s) {
fText = &s;
+ prepareAppliedRules(s.length());
}
@@ -2032,7 +2142,7 @@ int32_t RBBIWordMonkey::next(int32_t prevPos) {
p1 = p2; c1 = c2;
p2 = p3; c2 = c3;
- // Advancd p3 by X(Extend | Format)* Rule 4
+ // Advance p3 by X(Extend | Format)* Rule 4
// But do not advance over Extend & Format following a new line. (Unicode 5.1 change)
do {
p3 = fText->moveIndex32(p3, 1);
@@ -2048,141 +2158,145 @@ int32_t RBBIWordMonkey::next(int32_t prevPos) {
// Still warming up the loop. (won't work with zero length strings, but we don't care)
continue;
}
+
if (p2 == fText->length()) {
// Reached end of string. Always a break position.
break;
}
- // Rule (3) CR x LF
// No Extend or Format characters may appear between the CR and LF,
// which requires the additional check for p2 immediately following p1.
//
if (c1==0x0D && c2==0x0A) {
- continue;
+ setAppliedRule(p2, "WB3 CR x LF");
+ continue;
}
- // Rule (3a) Break before and after newlines (including CR and LF)
- //
if (fCRSet->contains(c1) || fLFSet->contains(c1) || fNewlineSet->contains(c1)) {
+ setAppliedRule(p2, "WB3a Break before and after newlines (including CR and LF)");
break;
}
if (fCRSet->contains(c2) || fLFSet->contains(c2) || fNewlineSet->contains(c2)) {
+ setAppliedRule(p2, "WB3a Break before and after newlines (including CR and LF)");
break;
}
- // Rule (3c) ZWJ x Extended_Pictographic
// Not ignoring extend chars, so peek into input text to
// get the potential ZWJ, the character immediately preceding c2.
// Sloppy UChar32 indexing: p2-1 may reference trail half
// but char32At will get the full code point.
- if (fZWJSet->contains(fText->char32At(p2-1)) && fExtendedPictSet->contains(c2)) {
+ if (fZWJSet->contains(fText->char32At(p2 - 1)) && fExtendedPictSet->contains(c2)){
+ setAppliedRule(p2, "WB3c ZWJ x Extended_Pictographic");
continue;
}
- // Rule (3d) Keep horizontal whitespace together.
if (fWSegSpaceSet->contains(fText->char32At(p2-1)) && fWSegSpaceSet->contains(c2)) {
+ setAppliedRule(p2, "WB3d Keep horizontal whitespace together.");
continue;
}
- // Rule (5). (ALetter | Hebrew_Letter) x (ALetter | Hebrew_Letter)
if ((fALetterSet->contains(c1) || fHebrew_LetterSet->contains(c1)) &&
(fALetterSet->contains(c2) || fHebrew_LetterSet->contains(c2))) {
+ setAppliedRule(p2, "WB4 (ALetter | Hebrew_Letter) x (ALetter | Hebrew_Letter)");
continue;
}
- // Rule (6) (ALetter | Hebrew_Letter) x (MidLetter | MidNumLet | Single_Quote) (ALetter | Hebrew_Letter)
- //
if ( (fALetterSet->contains(c1) || fHebrew_LetterSet->contains(c1)) &&
(fMidLetterSet->contains(c2) || fMidNumLetSet->contains(c2) || fSingle_QuoteSet->contains(c2)) &&
(fALetterSet->contains(c3) || fHebrew_LetterSet->contains(c3))) {
+ setAppliedRule(p2,
+ "WB6 (ALetter | Hebrew_Letter) x (MidLetter | MidNumLet | Single_Quote) (ALetter _Letter)");
continue;
}
- // Rule (7) (ALetter | Hebrew_Letter) (MidLetter | MidNumLet | Single_Quote) x (ALetter | Hebrew_Letter)
if ((fALetterSet->contains(c0) || fHebrew_LetterSet->contains(c0)) &&
(fMidLetterSet->contains(c1) || fMidNumLetSet->contains(c1) || fSingle_QuoteSet->contains(c1)) &&
(fALetterSet->contains(c2) || fHebrew_LetterSet->contains(c2))) {
+ setAppliedRule(p2,
+ "WB7 (ALetter | Hebrew_Letter) (MidLetter | MidNumLet | Single_Quote) x (ALetter | Hebrew_Letter)");
continue;
}
- // Rule (7a) Hebrew_Letter x Single_Quote
if (fHebrew_LetterSet->contains(c1) && fSingle_QuoteSet->contains(c2)) {
+ setAppliedRule(p2, "WB7a Hebrew_Letter x Single_Quote");
continue;
}
- // Rule (7b) Hebrew_Letter x Double_Quote Hebrew_Letter
- if (fHebrew_LetterSet->contains(c1) && fDouble_QuoteSet->contains(c2) && fHebrew_LetterSet->contains(c3)) {
+ if (fHebrew_LetterSet->contains(c1) && fDouble_QuoteSet->contains(c2) && fHebrew_LetterSet->contains(c3)) {
+ setAppliedRule(p2, "WB7b Hebrew_Letter x Double_Quote Hebrew_Letter");
continue;
}
- // Rule (7c) Hebrew_Letter Double_Quote x Hebrew_Letter
if (fHebrew_LetterSet->contains(c0) && fDouble_QuoteSet->contains(c1) && fHebrew_LetterSet->contains(c2)) {
+ setAppliedRule(p2, "WB7c Hebrew_Letter Double_Quote x Hebrew_Letter");
continue;
}
- // Rule (8) Numeric x Numeric
if (fNumericSet->contains(c1) &&
- fNumericSet->contains(c2)) {
+ fNumericSet->contains(c2)) {
+ setAppliedRule(p2, "WB8 Numeric x Numeric");
continue;
}
- // Rule (9) (ALetter | Hebrew_Letter) x Numeric
if ((fALetterSet->contains(c1) || fHebrew_LetterSet->contains(c1)) &&
- fNumericSet->contains(c2)) {
+ fNumericSet->contains(c2)) {
+ setAppliedRule(p2, "WB9 (ALetter | Hebrew_Letter) x Numeric");
continue;
}
- // Rule (10) Numeric x (ALetter | Hebrew_Letter)
if (fNumericSet->contains(c1) &&
(fALetterSet->contains(c2) || fHebrew_LetterSet->contains(c2))) {
+ setAppliedRule(p2, "WB10 Numeric x (ALetter | Hebrew_Letter)");
continue;
}
- // Rule (11) Numeric (MidNum | MidNumLet | Single_Quote) x Numeric
- if (fNumericSet->contains(c0) &&
+ if (fNumericSet->contains(c0) &&
(fMidNumSet->contains(c1) || fMidNumLetSet->contains(c1) || fSingle_QuoteSet->contains(c1)) &&
fNumericSet->contains(c2)) {
+ setAppliedRule(p2, "WB11 Numeric (MidNum | MidNumLet | Single_Quote) x Numeric");
continue;
}
- // Rule (12) Numeric x (MidNum | MidNumLet | SingleQuote) Numeric
if (fNumericSet->contains(c1) &&
(fMidNumSet->contains(c2) || fMidNumLetSet->contains(c2) || fSingle_QuoteSet->contains(c2)) &&
fNumericSet->contains(c3)) {
+ setAppliedRule(p2, "WB12 Numeric x (MidNum | MidNumLet | SingleQuote) Numeric");
continue;
}
- // Rule (13) Katakana x Katakana
// Note: matches UAX 29 rules, but doesn't come into play for ICU because
// all Katakana are handled by the dictionary breaker.
if (fKatakanaSet->contains(c1) &&
fKatakanaSet->contains(c2)) {
+ setAppliedRule(p2, "WB13 Katakana x Katakana");
continue;
}
- // Rule 13a (ALetter | Hebrew_Letter | Numeric | KataKana | ExtendNumLet) x ExtendNumLet
if ((fALetterSet->contains(c1) || fHebrew_LetterSet->contains(c1) ||fNumericSet->contains(c1) ||
fKatakanaSet->contains(c1) || fExtendNumLetSet->contains(c1)) &&
fExtendNumLetSet->contains(c2)) {
- continue;
+ setAppliedRule(p2,
+ "WB13a (ALetter | Hebrew_Letter | Numeric | KataKana | ExtendNumLet) x ExtendNumLet");
+ continue;
}
- // Rule 13b ExtendNumLet x (ALetter | Hebrew_Letter | Numeric | Katakana)
if (fExtendNumLetSet->contains(c1) &&
(fALetterSet->contains(c2) || fHebrew_LetterSet->contains(c2) ||
fNumericSet->contains(c2) || fKatakanaSet->contains(c2))) {
+ setAppliedRule(p2, "WB13b ExtendNumLet x (ALetter | Hebrew_Letter | Numeric | Katakana)");
continue;
}
- // Rule 15 - 17 Group pairs of Regional Indicators.
if (fRegionalIndicatorSet->contains(c0) && fRegionalIndicatorSet->contains(c1)) {
+ setAppliedRule(p2, "WB15 - WB17 Group pairs of Regional Indicators.");
break;
}
if (fRegionalIndicatorSet->contains(c1) && fRegionalIndicatorSet->contains(c2)) {
+ setAppliedRule(p2, "WB15 - WB17 Group pairs of Regional Indicators.");
continue;
}
- // Rule 999. Break found here.
+ setAppliedRule(p2, "WB999");
break;
}
@@ -2195,7 +2309,6 @@ UVector *RBBIWordMonkey::charClasses() {
return fSets;
}
-
RBBIWordMonkey::~RBBIWordMonkey() {
delete fSets;
delete fCRSet;
@@ -2259,7 +2372,6 @@ private:
UnicodeSet *fExtendSet;
const UnicodeString *fText;
-
};
RBBISentMonkey::RBBISentMonkey()
@@ -2304,19 +2416,19 @@ RBBISentMonkey::RBBISentMonkey()
fOtherSet->removeAll(*fCloseSet);
fOtherSet->removeAll(*fExtendSet);
- fSets->addElement(fSepSet, status);
- fSets->addElement(fFormatSet, status);
- fSets->addElement(fSpSet, status);
- fSets->addElement(fLowerSet, status);
- fSets->addElement(fUpperSet, status);
- fSets->addElement(fOLetterSet, status);
- fSets->addElement(fNumericSet, status);
- fSets->addElement(fATermSet, status);
- fSets->addElement(fSContinueSet, status);
- fSets->addElement(fSTermSet, status);
- fSets->addElement(fCloseSet, status);
- fSets->addElement(fOtherSet, status);
- fSets->addElement(fExtendSet, status);
+ fSets->addElement(fSepSet, status); classNames.push_back("Sep");
+ fSets->addElement(fFormatSet, status); classNames.push_back("Format");
+ fSets->addElement(fSpSet, status); classNames.push_back("Sp");
+ fSets->addElement(fLowerSet, status); classNames.push_back("Lower");
+ fSets->addElement(fUpperSet, status); classNames.push_back("Upper");
+ fSets->addElement(fOLetterSet, status); classNames.push_back("OLetter");
+ fSets->addElement(fNumericSet, status); classNames.push_back("Numeric");
+ fSets->addElement(fATermSet, status); classNames.push_back("ATerm");
+ fSets->addElement(fSContinueSet, status); classNames.push_back("SContinue");
+ fSets->addElement(fSTermSet, status); classNames.push_back("STerm");
+ fSets->addElement(fCloseSet, status); classNames.push_back("Close");
+ fSets->addElement(fOtherSet, status); classNames.push_back("Other");
+ fSets->addElement(fExtendSet, status); classNames.push_back("Extend");
if (U_FAILURE(status)) {
deferredStatus = status;
@@ -2327,13 +2439,13 @@ RBBISentMonkey::RBBISentMonkey()
void RBBISentMonkey::setText(const UnicodeString &s) {
fText = &s;
+ prepareAppliedRules(s.length());
}
UVector *RBBISentMonkey::charClasses() {
return fSets;
}
-
// moveBack() Find the "significant" code point preceding the index i.
// Skips over ($Extend | $Format)* .
//
@@ -2405,43 +2517,45 @@ int32_t RBBISentMonkey::next(int32_t prevPos) {
p1 = p2; c1 = c2;
p2 = p3; c2 = c3;
- // Advancd p3 by X(Extend | Format)* Rule 4
+ // Advance p3 by X(Extend | Format)* Rule 4
p3 = moveForward(p3);
c3 = cAt(p3);
- // Rule (3) CR x LF
if (c1==0x0d && c2==0x0a && p2==(p1+1)) {
+ setAppliedRule(p2, "SB3 CR x LF");
continue;
}
- // Rule (4). Sep <break>
if (fSepSet->contains(c1)) {
p2 = p1+1; // Separators don't combine with Extend or Format.
+
+ setAppliedRule(p2, "SB4 Sep <break>");
break;
}
if (p2 >= fText->length()) {
// Reached end of string. Always a break position.
+ setAppliedRule(p2, "SB4 Sep <break>");
break;
}
if (p2 == prevPos) {
// Still warming up the loop. (won't work with zero length strings, but we don't care)
+ setAppliedRule(p2, "SB4 Sep <break>");
continue;
}
- // Rule (6). ATerm x Numeric
if (fATermSet->contains(c1) && fNumericSet->contains(c2)) {
+ setAppliedRule(p2, "SB6 ATerm x Numeric");
continue;
}
- // Rule (7). (Upper | Lower) ATerm x Uppper
- if ((fUpperSet->contains(c0) || fLowerSet->contains(c0)) &&
+ if ((fUpperSet->contains(c0) || fLowerSet->contains(c0)) &&
fATermSet->contains(c1) && fUpperSet->contains(c2)) {
+ setAppliedRule(p2, "SB7 (Upper | Lower) ATerm x Uppper");
continue;
}
- // Rule (8) ATerm Close* Sp* x (not (OLettter | Upper | Lower | Sep | STerm | ATerm))* Lower
// Note: STerm | ATerm are added to the negated part of the expression by a
// note to the Unicode 5.0 documents.
int p8 = p1;
@@ -2458,16 +2572,21 @@ int32_t RBBISentMonkey::next(int32_t prevPos) {
if (c==-1 || fOLetterSet->contains(c) || fUpperSet->contains(c) ||
fLowerSet->contains(c) || fSepSet->contains(c) ||
fATermSet->contains(c) || fSTermSet->contains(c)) {
+
+ setAppliedRule(p2,
+ "SB8 ATerm Close* Sp* x (not (OLettter | Upper | Lower | Sep | STerm | ATerm))* ");
break;
}
p8 = moveForward(p8);
}
if (fLowerSet->contains(cAt(p8))) {
+
+ setAppliedRule(p2,
+ "SB8 ATerm Close* Sp* x (not (OLettter | Upper | Lower | Sep | STerm | ATerm))* ");
continue;
}
}
- // Rule 8a (STerm | ATerm) Close* Sp* x (SContinue | STerm | ATerm);
if (fSContinueSet->contains(c2) || fSTermSet->contains(c2) || fATermSet->contains(c2)) {
p8 = p1;
while (fSpSet->contains(cAt(p8))) {
@@ -2478,11 +2597,11 @@ int32_t RBBISentMonkey::next(int32_t prevPos) {
}
c = cAt(p8);
if (fSTermSet->contains(c) || fATermSet->contains(c)) {
+ setAppliedRule(p2, "SB8a (STerm | ATerm) Close* Sp* x (SContinue | STerm | ATerm)");
continue;
}
}
- // Rule (9) (STerm | ATerm) Close* x (Close | Sp | Sep | CR | LF)
int p9 = p1;
while (fCloseSet->contains(cAt(p9))) {
p9 = moveBack(p9);
@@ -2490,11 +2609,12 @@ int32_t RBBISentMonkey::next(int32_t prevPos) {
c = cAt(p9);
if ((fSTermSet->contains(c) || fATermSet->contains(c))) {
if (fCloseSet->contains(c2) || fSpSet->contains(c2) || fSepSet->contains(c2)) {
+
+ setAppliedRule(p2, "SB9 (STerm | ATerm) Close* x (Close | Sp | Sep | CR | LF)");
continue;
}
}
- // Rule (10) (Sterm | ATerm) Close* Sp* x (Sp | Sep | CR | LF)
int p10 = p1;
while (fSpSet->contains(cAt(p10))) {
p10 = moveBack(p10);
@@ -2504,11 +2624,11 @@ int32_t RBBISentMonkey::next(int32_t prevPos) {
}
if (fSTermSet->contains(cAt(p10)) || fATermSet->contains(cAt(p10))) {
if (fSpSet->contains(c2) || fSepSet->contains(c2)) {
+ setAppliedRule(p2, "SB10 (Sterm | ATerm) Close* Sp* x (Sp | Sep | CR | LF)");
continue;
}
}
- // Rule (11) (STerm | ATerm) Close* Sp* (Sep | CR | LF)? <break>
int p11 = p1;
if (fSepSet->contains(cAt(p11))) {
p11 = moveBack(p11);
@@ -2520,12 +2640,14 @@ int32_t RBBISentMonkey::next(int32_t prevPos) {
p11 = moveBack(p11);
}
if (fSTermSet->contains(cAt(p11)) || fATermSet->contains(cAt(p11))) {
+ setAppliedRule(p2, "SB11 (STerm | ATerm) Close* Sp* (Sep | CR | LF)? <break>");
break;
}
- // Rule (12) Any x Any
+ setAppliedRule(p2, "SB12 Any x Any");
continue;
}
+
breakPos = p2;
return breakPos;
}
@@ -2609,6 +2731,8 @@ private:
UnicodeSet *fEB;
UnicodeSet *fEM;
UnicodeSet *fZWJ;
+ UnicodeSet *fOP30;
+ UnicodeSet *fCP30;
BreakIterator *fCharBI;
const UnicodeString *fText;
@@ -2674,7 +2798,9 @@ RBBILineMonkey::RBBILineMonkey() :
fXX = new UnicodeSet(UNICODE_STRING_SIMPLE("[\\p{Line_break=XX}]"), status);
fEB = new UnicodeSet(UNICODE_STRING_SIMPLE("[\\p{Line_break=EB}]"), status);
fEM = new UnicodeSet(UNICODE_STRING_SIMPLE("[\\p{Line_break=EM}]"), status);
- fZWJ = new UnicodeSet(UNICODE_STRING_SIMPLE("[\\p{Line_break=ZWJ}]"), status);
+ fZWJ = new UnicodeSet(UNICODE_STRING_SIMPLE("[\\p{Line_break=ZWJ}]"), status);
+ fOP30 = new UnicodeSet(u"[\\p{Line_break=OP}-[\\p{ea=F}\\p{ea=W}\\p{ea=H}]]", status);
+ fCP30 = new UnicodeSet(u"[\\p{Line_break=CP}-[\\p{ea=F}\\p{ea=W}\\p{ea=H}]]", status);
if (U_FAILURE(status)) {
deferredStatus = status;
@@ -2690,48 +2816,51 @@ RBBILineMonkey::RBBILineMonkey() :
fHH->add(u'\u2010'); // Hyphen, 'â€'
- fSets->addElement(fBK, status);
- fSets->addElement(fCR, status);
- fSets->addElement(fLF, status);
- fSets->addElement(fCM, status);
- fSets->addElement(fNL, status);
- fSets->addElement(fWJ, status);
- fSets->addElement(fZW, status);
- fSets->addElement(fGL, status);
- fSets->addElement(fCB, status);
- fSets->addElement(fSP, status);
- fSets->addElement(fB2, status);
- fSets->addElement(fBA, status);
- fSets->addElement(fBB, status);
- fSets->addElement(fHY, status);
- fSets->addElement(fH2, status);
- fSets->addElement(fH3, status);
- fSets->addElement(fCL, status);
- fSets->addElement(fCP, status);
- fSets->addElement(fEX, status);
- fSets->addElement(fIN, status);
- fSets->addElement(fJL, status);
- fSets->addElement(fJT, status);
- fSets->addElement(fJV, status);
- fSets->addElement(fNS, status);
- fSets->addElement(fOP, status);
- fSets->addElement(fQU, status);
- fSets->addElement(fIS, status);
- fSets->addElement(fNU, status);
- fSets->addElement(fPO, status);
- fSets->addElement(fPR, status);
- fSets->addElement(fSY, status);
- fSets->addElement(fAI, status);
- fSets->addElement(fAL, status);
- fSets->addElement(fHL, status);
- fSets->addElement(fID, status);
- fSets->addElement(fWJ, status);
- fSets->addElement(fRI, status);
- fSets->addElement(fSG, status);
- fSets->addElement(fEB, status);
- fSets->addElement(fEM, status);
- fSets->addElement(fZWJ, status);
-
+ // Sets and names.
+ fSets->addElement(fBK, status); classNames.push_back("fBK");
+ fSets->addElement(fCR, status); classNames.push_back("fCR");
+ fSets->addElement(fLF, status); classNames.push_back("fLF");
+ fSets->addElement(fCM, status); classNames.push_back("fCM");
+ fSets->addElement(fNL, status); classNames.push_back("fNL");
+ fSets->addElement(fWJ, status); classNames.push_back("fWJ");
+ fSets->addElement(fZW, status); classNames.push_back("fZW");
+ fSets->addElement(fGL, status); classNames.push_back("fGL");
+ fSets->addElement(fCB, status); classNames.push_back("fCB");
+ fSets->addElement(fSP, status); classNames.push_back("fSP");
+ fSets->addElement(fB2, status); classNames.push_back("fB2");
+ fSets->addElement(fBA, status); classNames.push_back("fBA");
+ fSets->addElement(fBB, status); classNames.push_back("fBB");
+ fSets->addElement(fHY, status); classNames.push_back("fHY");
+ fSets->addElement(fH2, status); classNames.push_back("fH2");
+ fSets->addElement(fH3, status); classNames.push_back("fH3");
+ fSets->addElement(fCL, status); classNames.push_back("fCL");
+ fSets->addElement(fCP, status); classNames.push_back("fCP");
+ fSets->addElement(fEX, status); classNames.push_back("fEX");
+ fSets->addElement(fIN, status); classNames.push_back("fIN");
+ fSets->addElement(fJL, status); classNames.push_back("fJL");
+ fSets->addElement(fJT, status); classNames.push_back("fJT");
+ fSets->addElement(fJV, status); classNames.push_back("fJV");
+ fSets->addElement(fNS, status); classNames.push_back("fNS");
+ fSets->addElement(fOP, status); classNames.push_back("fOP");
+ fSets->addElement(fQU, status); classNames.push_back("fQU");
+ fSets->addElement(fIS, status); classNames.push_back("fIS");
+ fSets->addElement(fNU, status); classNames.push_back("fNU");
+ fSets->addElement(fPO, status); classNames.push_back("fPO");
+ fSets->addElement(fPR, status); classNames.push_back("fPR");
+ fSets->addElement(fSY, status); classNames.push_back("fSY");
+ fSets->addElement(fAI, status); classNames.push_back("fAI");
+ fSets->addElement(fAL, status); classNames.push_back("fAL");
+ fSets->addElement(fHL, status); classNames.push_back("fHL");
+ fSets->addElement(fID, status); classNames.push_back("fID");
+ fSets->addElement(fWJ, status); classNames.push_back("fWJ");
+ fSets->addElement(fRI, status); classNames.push_back("fRI");
+ fSets->addElement(fSG, status); classNames.push_back("fSG");
+ fSets->addElement(fEB, status); classNames.push_back("fEB");
+ fSets->addElement(fEM, status); classNames.push_back("fEM");
+ fSets->addElement(fZWJ, status); classNames.push_back("fZWJ");
+ // TODO: fOP30 & fCP30 overlap with plain fOP. Probably OK, but fOP/CP chars will be over-represented.
+ fSets->addElement(fOP30, status); classNames.push_back("fOP30");
+ fSets->addElement(fCP30, status); classNames.push_back("fCP30");
const char *rules =
"((\\p{Line_Break=PR}|\\p{Line_Break=PO})(\\p{Line_Break=CM}|\\u200d)*)?"
@@ -2750,12 +2879,14 @@ RBBILineMonkey::RBBILineMonkey() :
if (U_FAILURE(status)) {
deferredStatus = status;
}
+
}
void RBBILineMonkey::setText(const UnicodeString &s) {
fText = &s;
fCharBI->setText(s);
+ prepareAppliedRules(s.length());
fNumberMatcher->reset(s);
}
@@ -2779,8 +2910,8 @@ void RBBILineMonkey::rule9Adjust(int32_t pos, UChar32 *posChar, int32_t *nextPos
int32_t nPos = *nextPos;
// LB 9 Keep combining sequences together.
- // advance over any CM class chars. Note that Line Break CM is different
- // from the normal Grapheme Extend property.
+ // advance over any CM class chars. Note that Line Break CM is different
+ // from the normal Grapheme Extend property.
if (!(fSP->contains(*posChar) || fBK->contains(*posChar) || *posChar==0x0d ||
*posChar==0x0a ||fNL->contains(*posChar) || fZW->contains(*posChar))) {
for (;;) {
@@ -2862,59 +2993,67 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
nextCPPos = fText->moveIndex32(pos, 1);
nextPos = nextCPPos;
- // Rule LB2 - Break at end of text.
+
if (pos >= fText->length()) {
+ setAppliedRule(pos, "LB2 - Break at end of text.");
break;
}
- // Rule LB 9 - adjust for combining sequences.
+
// We do this one out-of-order because the adjustment does not change anything
// that would match rules LB 3 - LB 6, but after the adjustment, LB 3-6 do need to
// be applied.
- rule9Adjust(prevPos, &prevChar, &pos, &thisChar);
+ rule9Adjust(prevPos, &prevChar, &pos, &thisChar);
nextCPPos = nextPos = fText->moveIndex32(pos, 1);
c = fText->char32At(nextPos);
- rule9Adjust(pos, &thisChar, &nextPos, &c);
+ rule9Adjust(pos, &thisChar, &nextPos, &c);
// If the loop is still warming up - if we haven't shifted the initial
// -1 positions out of prevPos yet - loop back to advance the
// position in the input without any further looking for breaks.
if (prevPos == -1) {
+ setAppliedRule(pos, "LB 9 - adjust for combining sequences.");
continue;
}
- // LB 4 Always break after hard line breaks,
+
if (fBK->contains(prevChar)) {
+ setAppliedRule(pos, "LB 4 Always break after hard line breaks");
break;
}
- // LB 5 Break after CR, LF, NL, but not inside CR LF
+
if (prevChar == 0x0d && thisChar == 0x0a) {
+ setAppliedRule(pos, "LB 5 Break after CR, LF, NL, but not inside CR LF");
continue;
}
if (prevChar == 0x0d ||
prevChar == 0x0a ||
prevChar == 0x85) {
+ setAppliedRule(pos, "LB 5 Break after CR, LF, NL, but not inside CR LF");
break;
}
- // LB 6 Don't break before hard line breaks
+
if (thisChar == 0x0d || thisChar == 0x0a || thisChar == 0x85 ||
fBK->contains(thisChar)) {
- continue;
+ setAppliedRule(pos, "LB 6 Don't break before hard line breaks");
+ continue;
}
- // LB 7 Don't break before spaces or zero-width space.
if (fSP->contains(thisChar)) {
+ setAppliedRule(pos, "LB 7 Don't break before spaces or zero-width space.");
continue;
}
+ // !!! ??? Is this the right text for the applied rule?
if (fZW->contains(thisChar)) {
+ setAppliedRule(pos, "LB 7 Don't break before spaces or zero-width space.");
continue;
}
- // LB 8 Break after zero width space
+
// ZW SP* ÷
// Scan backwards from prevChar for SP* ZW
tPos = prevPos;
@@ -2922,14 +3061,16 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
tPos = fText->moveIndex32(tPos, -1);
}
if (fZW->contains(fText->char32At(tPos))) {
+ setAppliedRule(pos, "LB 8 Break after zero width space");
break;
}
- // LB 25 Numbers
+
// Move this test up, before LB8a, because numbers can match a longer sequence that would
// also match 8a. e.g. NU ZWJ IS PO (ZWJ acts like CM)
if (fNumberMatcher->lookingAt(prevPos, status)) {
if (U_FAILURE(status)) {
+ setAppliedRule(pos, "LB 25 Numbers");
break;
}
// Matched a number. But could have been just a single digit, which would
@@ -2947,11 +3088,12 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
thisChar = fText->char32At(pos);
} while (fCM->contains(thisChar));
}
+ setAppliedRule(pos, "LB 25 Numbers");
continue;
}
}
- // LB 8a ZWJ x
+
// The monkey test's way of ignoring combining characters doesn't work
// for this rule. ZJ is also a CM. Need to get the actual character
// preceding "thisChar", not ignoring combining marks, possibly ZJ.
@@ -2959,46 +3101,48 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
int32_t prevIdx = fText->moveIndex32(pos, -1);
UChar32 prevC = fText->char32At(prevIdx);
if (fZWJ->contains(prevC)) {
+ setAppliedRule(pos, "LB 8a ZWJ x");
continue;
}
}
- // LB 9, 10 Already done, at top of loop.
+
+ // appliedRule: "LB 9, 10"; // Already done, at top of loop.";
//
- // LB 11 Do not break before or after WORD JOINER and related characters.
// x WJ
// WJ x
//
if (fWJ->contains(thisChar) || fWJ->contains(prevChar)) {
+ setAppliedRule(pos, "LB 11 Do not break before or after WORD JOINER and related characters.");
continue;
}
- // LB 12
- // GL x
+
if (fGL->contains(prevChar)) {
+ setAppliedRule(pos, "LB 12 GL x");
continue;
}
- // LB 12a
- // [^SP BA HY] x GL
- if (!(fSP->contains(prevChar) ||
+
+ if (!(fSP->contains(prevChar) ||
fBA->contains(prevChar) ||
fHY->contains(prevChar) ) && fGL->contains(thisChar)) {
- continue;
+ setAppliedRule(pos, "LB 12a [^SP BA HY] x GL");
+ continue;
}
- // LB 13 Don't break before closings.
- //
+
if (fCL->contains(thisChar) ||
fCP->contains(thisChar) ||
fEX->contains(thisChar) ||
fSY->contains(thisChar)) {
+ setAppliedRule(pos, "LB 13 Don't break before closings.");
continue;
}
- // LB 14 Don't break after OP SP*
+
// Scan backwards, checking for this sequence.
// The OP char could include combining marks, so we actually check for
// OP CM* SP*
@@ -3016,26 +3160,28 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
tPos=fText->moveIndex32(tPos, -1);
}
if (fOP->contains(fText->char32At(tPos))) {
+ setAppliedRule(pos, "LB 14 Don't break after OP SP*");
continue;
}
- // LB 14a Break before an IS that begins a number and follows a space
if (nextPos < fText->length()) {
// note: UnicodeString::char32At(length) returns ffff, not distinguishable
// from a legit ffff character. So test length separately.
UChar32 nextChar = fText->char32At(nextPos);
if (fSP->contains(prevChar) && fIS->contains(thisChar) && fNU->contains(nextChar)) {
+ setAppliedRule(pos, "LB 14a Break before an IS that begins a number and follows a space");
break;
}
}
- // LB14b Do not break before numeric separators, even after spaces.
- if (fIS->contains(thisChar)) {
- continue;
+
+ if (fIS->contains(thisChar)) {
+ setAppliedRule(pos, "LB 14b Do not break before numeric separators, even after spaces.");
+ continue;
}
- // LB 15 QU SP* x OP
+
if (fOP->contains(thisChar)) {
// Scan backwards from prevChar to see if it is preceded by QU CM* SP*
int tPos = prevPos;
@@ -3046,13 +3192,12 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
tPos = fText->moveIndex32(tPos, -1);
}
if (fQU->contains(fText->char32At(tPos))) {
+ setAppliedRule(pos, "LB 15 QU SP* x OP");
continue;
}
}
-
- // LB 16 (CL | CP) SP* x NS
// Scan backwards for SP* CM* (CL | CP)
if (fNS->contains(thisChar)) {
int tPos = prevPos;
@@ -3063,12 +3208,12 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
tPos = fText->moveIndex32(tPos, -1);
}
if (fCL->contains(fText->char32At(tPos)) || fCP->contains(fText->char32At(tPos))) {
+ setAppliedRule(pos, "LB 16 (CL | CP) SP* x NS");
continue;
}
}
- // LB 17 B2 SP* x B2
if (fB2->contains(thisChar)) {
// Scan backwards, checking for the B2 CM* SP* sequence.
tPos = prevPos;
@@ -3081,163 +3226,169 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
tPos=fText->moveIndex32(tPos, -1);
}
if (fB2->contains(fText->char32At(tPos))) {
+ setAppliedRule(pos, "LB 17 B2 SP* x B2");
continue;
}
}
- // LB 18 break after space
if (fSP->contains(prevChar)) {
+ setAppliedRule(pos, "LB 18 break after space");
break;
}
- // LB 19
// x QU
// QU x
if (fQU->contains(thisChar) || fQU->contains(prevChar)) {
+ setAppliedRule(pos, "LB 19");
continue;
}
- // LB 20 Break around a CB
if (fCB->contains(thisChar) || fCB->contains(prevChar)) {
+ setAppliedRule(pos, "LB 20 Break around a CB");
break;
}
- // LB 20.09 Don't break between Hyphens and letters if a break precedes the hyphen.
+ // Don't break between Hyphens and letters if a break precedes the hyphen.
// Formerly this was a Finnish tailoring.
// Moved to root in ICU 63. This is an ICU customization, not in UAX-14.
- // ^($HY | $HH) $AL;
+ // ^($HY | $HH) $AL;
if (fAL->contains(thisChar) && (fHY->contains(prevChar) || fHH->contains(prevChar)) &&
prevPosX2 == -1) {
+ setAppliedRule(pos, "LB 20.09");
continue;
}
- // LB 21
if (fBA->contains(thisChar) ||
fHY->contains(thisChar) ||
fNS->contains(thisChar) ||
fBB->contains(prevChar) ) {
+ setAppliedRule(pos, "LB 21");
continue;
}
- // LB 21a
- // HL (HY | BA) x
if (fHL->contains(prevCharX2) &&
(fHY->contains(prevChar) || fBA->contains(prevChar))) {
+ setAppliedRule(pos, "LB 21a HL (HY | BA) x");
continue;
}
- // LB 21b
- // SY x HL
if (fSY->contains(prevChar) && fHL->contains(thisChar)) {
+ setAppliedRule(pos, "LB 21b SY x HL");
continue;
}
- // LB 22
- if ((fAL->contains(prevChar) && fIN->contains(thisChar)) ||
- (fEX->contains(prevChar) && fIN->contains(thisChar)) ||
- (fHL->contains(prevChar) && fIN->contains(thisChar)) ||
- ((fID->contains(prevChar) || fEB->contains(prevChar) || fEM->contains(prevChar)) && fIN->contains(thisChar)) ||
- (fIN->contains(prevChar) && fIN->contains(thisChar)) ||
- (fNU->contains(prevChar) && fIN->contains(thisChar)) ) {
+ if (fIN->contains(thisChar)) {
+ setAppliedRule(pos, "LB 22");
continue;
}
- // LB 23 (AL | HL) x NU
+ // (AL | HL) x NU
// NU x (AL | HL)
if ((fAL->contains(prevChar) || fHL->contains(prevChar)) && fNU->contains(thisChar)) {
+ setAppliedRule(pos, "LB 23");
continue;
}
if (fNU->contains(prevChar) && (fAL->contains(thisChar) || fHL->contains(thisChar))) {
+ setAppliedRule(pos, "LB 23");
continue;
}
- // LB 23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.
+ // Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.
// PR x (ID | EB | EM)
// (ID | EB | EM) x PO
if (fPR->contains(prevChar) &&
(fID->contains(thisChar) || fEB->contains(thisChar) || fEM->contains(thisChar))) {
+ setAppliedRule(pos, "LB 23a");
continue;
}
if ((fID->contains(prevChar) || fEB->contains(prevChar) || fEM->contains(prevChar)) &&
fPO->contains(thisChar)) {
+ setAppliedRule(pos, "LB 23a");
continue;
}
- // LB 24 Do not break between prefix and letters or ideographs.
+ // Do not break between prefix and letters or ideographs.
// (PR | PO) x (AL | HL)
// (AL | HL) x (PR | PO)
if ((fPR->contains(prevChar) || fPO->contains(prevChar)) &&
(fAL->contains(thisChar) || fHL->contains(thisChar))) {
+ setAppliedRule(pos, "LB 24 no break between prefix and letters or ideographs");
continue;
}
if ((fAL->contains(prevChar) || fHL->contains(prevChar)) &&
(fPR->contains(thisChar) || fPO->contains(thisChar))) {
+ setAppliedRule(pos, "LB 24 no break between prefix and letters or ideographs");
continue;
}
- // LB 25 numbers match, moved up, before LB 8a,
+ // appliedRule: "LB 25 numbers match"; // moved up, before LB 8a,
- // LB 26 Do not break a Korean syllable.
if (fJL->contains(prevChar) && (fJL->contains(thisChar) ||
fJV->contains(thisChar) ||
fH2->contains(thisChar) ||
fH3->contains(thisChar))) {
- continue;
+ setAppliedRule(pos, "LB 26 Do not break a Korean syllable.");
+ continue;
}
if ((fJV->contains(prevChar) || fH2->contains(prevChar)) &&
(fJV->contains(thisChar) || fJT->contains(thisChar))) {
- continue;
+ setAppliedRule(pos, "LB 26 Do not break a Korean syllable.");
+ continue;
}
if ((fJT->contains(prevChar) || fH3->contains(prevChar)) &&
fJT->contains(thisChar)) {
- continue;
+ setAppliedRule(pos, "LB 26 Do not break a Korean syllable.");
+ continue;
}
- // LB 27 Treat a Korean Syllable Block the same as ID.
if ((fJL->contains(prevChar) || fJV->contains(prevChar) ||
fJT->contains(prevChar) || fH2->contains(prevChar) || fH3->contains(prevChar)) &&
fIN->contains(thisChar)) {
- continue;
+ setAppliedRule(pos, "LB 27 Treat a Korean Syllable Block the same as ID.");
+ continue;
}
if ((fJL->contains(prevChar) || fJV->contains(prevChar) ||
fJT->contains(prevChar) || fH2->contains(prevChar) || fH3->contains(prevChar)) &&
fPO->contains(thisChar)) {
- continue;
+ setAppliedRule(pos, "LB 27 Treat a Korean Syllable Block the same as ID.");
+ continue;
}
if (fPR->contains(prevChar) && (fJL->contains(thisChar) || fJV->contains(thisChar) ||
fJT->contains(thisChar) || fH2->contains(thisChar) || fH3->contains(thisChar))) {
- continue;
+ setAppliedRule(pos, "LB 27 Treat a Korean Syllable Block the same as ID.");
+ continue;
}
- // LB 28 Do not break between alphabetics ("at").
if ((fAL->contains(prevChar) || fHL->contains(prevChar)) && (fAL->contains(thisChar) || fHL->contains(thisChar))) {
+ setAppliedRule(pos, "LB 28 Do not break between alphabetics (\"at\").");
continue;
}
- // LB 29 Do not break between numeric punctuation and alphabetics ("e.g.").
- if (fIS->contains(prevChar) && (fAL->contains(thisChar) || fHL->contains(thisChar))) {
- continue;
+ if (fIS->contains(prevChar) && (fAL->contains(thisChar) || fHL->contains(thisChar))) {
+ setAppliedRule(pos, "LB 29 Do not break between numeric punctuation and alphabetics (\"e.g.\").");
+ continue;
}
- // LB 30 Do not break between letters, numbers, or ordinary symbols and opening or closing punctuation.
// (AL | NU) x OP
// CP x (AL | NU)
- if ((fAL->contains(prevChar) || fHL->contains(prevChar) || fNU->contains(prevChar)) && fOP->contains(thisChar)) {
+ if ((fAL->contains(prevChar) || fHL->contains(prevChar) || fNU->contains(prevChar)) && fOP30->contains(thisChar)) {
+ setAppliedRule(pos, "LB 30 No break in letters, numbers, or ordinary symbols, opening/closing punctuation.");
continue;
}
- if (fCP->contains(prevChar) && (fAL->contains(thisChar) || fHL->contains(thisChar) || fNU->contains(thisChar))) {
+ if (fCP30->contains(prevChar) && (fAL->contains(thisChar) || fHL->contains(thisChar) || fNU->contains(thisChar))) {
+ setAppliedRule(pos, "LB 30 No break in letters, numbers, or ordinary symbols, opening/closing punctuation.");
continue;
}
- // LB30a RI RI ÷ RI
// RI x RI
if (fRI->contains(prevCharX2) && fRI->contains(prevChar) && fRI->contains(thisChar)) {
+ setAppliedRule(pos, "LB30a RI RI ÷ RI");
break;
}
if (fRI->contains(prevChar) && fRI->contains(thisChar)) {
@@ -3245,17 +3396,17 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
// Over-write the trailing one (thisChar) to prevent it from forming another pair with a
// following RI. This is a hack.
thisChar = -1;
+ setAppliedRule(pos, "LB30a RI RI ÷ RI");
continue;
}
- // LB30b Emoji Base x Emoji Modifier
if (fEB->contains(prevChar) && fEM->contains(thisChar)) {
+ setAppliedRule(pos, "LB30b Emoji Base x Emoji Modifier");
continue;
}
- // LB 31 Break everywhere else
+ setAppliedRule(pos, "LB 31 Break everywhere else");
break;
-
}
return pos;
@@ -3313,6 +3464,8 @@ RBBILineMonkey::~RBBILineMonkey() {
delete fEB;
delete fEM;
delete fZWJ;
+ delete fOP30;
+ delete fCP30;
delete fCharBI;
delete fNumberMatcher;
@@ -3350,7 +3503,7 @@ static int32_t getIntParam(UnicodeString name, UnicodeString &params, int32_t d
paramLength = (int32_t)(sizeof(valString)-2);
}
params.extract(m.start(1, status), paramLength, valString, sizeof(valString));
- val = strtol(valString, NULL, 10);
+ val = strtol(valString, NULL, 10);
// Delete this parameter from the params string.
m.reset();
@@ -3678,6 +3831,7 @@ void RBBITest::TestLineBreaks(void)
int expectedcount = 0;
monkey.setText(ustr);
+
int i;
for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) {
if (expectedcount >= EXPECTEDSIZE) {
@@ -3742,6 +3896,7 @@ void RBBITest::TestSentBreaks(void)
int expectedcount = 0;
monkey.setText(ustr);
+
int i;
for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) {
if (expectedcount >= EXPECTEDSIZE) {
@@ -3857,7 +4012,7 @@ void RBBITest::TestMonkey() {
loopCount = loopCount / 10; // Sentence runs slower than the other break types
}
if (U_SUCCESS(status)) {
- RunMonkey(bi, m, "sentence", seed, loopCount, useUText);
+ RunMonkey(bi, m, "sent", seed, loopCount, useUText);
}
else {
errcheckln(status, "Creation of line break iterator failed %s", u_errorName(status));
@@ -3886,7 +4041,6 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
UnicodeString testText;
int32_t numCharClasses;
UVector *chClasses;
- int expected[TESTSTRINGLEN*2 + 1];
int expectedCount = 0;
char expectedBreaks[TESTSTRINGLEN*2 + 1];
char forwardBreaks[TESTSTRINGLEN*2 + 1];
@@ -3897,6 +4051,7 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
int i;
int loopCount = 0;
+
m_seed = seed;
numCharClasses = mk.charClasses()->size();
@@ -3919,6 +4074,9 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
}
}
+ // For minimizing width of class name output.
+ int classNameSize = mk.maxClassNameSize();
+
while (loopCount < numIterations || numIterations == -1) {
if (numIterations == -1 && loopCount % 10 == 0) {
// If test is running in an infinite loop, display a periodic tic so
@@ -3949,8 +4107,9 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
testText.append(c);
}
- // Calculate the expected results for this test string.
+ // Calculate the expected results for this test string and reset applied rules.
mk.setText(testText);
+
memset(expectedBreaks, 0, sizeof(expectedBreaks));
expectedBreaks[0] = 1;
int32_t breakPos = 0;
@@ -3965,9 +4124,6 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
}
expectedBreaks[breakPos] = 1;
U_ASSERT(expectedCount<testText.length());
- expected[expectedCount ++] = breakPos;
- (void)expected; // Set but not used warning.
- // TODO (andy): check it out.
}
// Find the break positions using forward iteration
@@ -4060,25 +4216,31 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
// Compare the expected and actual results.
for (i=0; i<=testText.length(); i++) {
const char *errorType = NULL;
+ const char* currentBreakData = NULL;
if (forwardBreaks[i] != expectedBreaks[i]) {
errorType = "next()";
+ currentBreakData = forwardBreaks;
} else if (reverseBreaks[i] != forwardBreaks[i]) {
errorType = "previous()";
- } else if (isBoundaryBreaks[i] != expectedBreaks[i]) {
+ currentBreakData = reverseBreaks;
+ } else if (isBoundaryBreaks[i] != expectedBreaks[i]) {
errorType = "isBoundary()";
+ currentBreakData = isBoundaryBreaks;
} else if (followingBreaks[i] != expectedBreaks[i]) {
errorType = "following()";
+ currentBreakData = followingBreaks;
} else if (precedingBreaks[i] != expectedBreaks[i]) {
errorType = "preceding()";
+ currentBreakData = precedingBreaks;
}
-
if (errorType != NULL) {
// Format a range of the test text that includes the failure as
// a data item that can be included in the rbbi test data file.
// Start of the range is the last point where expected and actual results
- // both agreed that there was a break position.
+ // both agreed that there was a break position.
+
int startContext = i;
int32_t count = 0;
for (;;) {
@@ -4104,53 +4266,64 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
}
}
- // Format looks like "<data>\\\uabcd\uabcd\\\U0001abcd...</data>"
- UnicodeString errorText = "<data>";
- /***if (strcmp(errorType, "next()") == 0) {
- startContext = 0;
- endContext = testText.length();
+ // Formatting of each line includes:
+ // character code
+ // reference break: '|' -> a break, '.' -> no break
+ // actual break: '|' -> a break, '.' -> no break
+ // (name of character clase)
+ // Unicode name of character
+ // '-->' indicates location of the difference.
- printStringBreaks(testText, expected, expectedCount);
- }***/
+ MONKEY_ERROR(
+ (expectedBreaks[i] ? "Break expected but not found" :
+ "Break found but not expected"),
+ name, i, seed);
- for (ci=startContext; ci<endContext;) {
- UnicodeString hexChars("0123456789abcdef");
+ for (ci=startContext; (ci = testText.moveIndex32(ci, 1));) {
UChar32 c;
- int bn;
c = testText.char32At(ci);
+
+ std::string currentLineFlag = " ";
if (ci == i) {
- // This is the location of the error.
- errorText.append("<?>");
- } else if (expectedBreaks[ci] != 0) {
- // This a non-error expected break position.
- errorText.append("\\");
+ currentLineFlag = "-->"; // Error position
}
- if (c < 0x10000) {
- errorText.append("\\u");
- for (bn=12; bn>=0; bn-=4) {
- errorText.append(hexChars.charAt((c>>bn)&0xf));
- }
+
+ // BMP or SMP character in hex
+ char hexCodePoint[12];
+ std::string format = " \\u%04x";
+ if (c >= 0x10000) {
+ format = "\\U%08x";
+ }
+ sprintf(hexCodePoint, format.c_str(), c);
+
+ // Get the class name and character name for the character.
+ char cName[200];
+ UErrorCode status = U_ZERO_ERROR;
+ u_charName(c, U_EXTENDED_CHAR_NAME, cName, sizeof(cName), &status);
+
+ char buffer[200];
+ auto ret = snprintf(buffer, UPRV_LENGTHOF(buffer),
+ "%4s %3i : %1s %1s %10s %-*s %-40s %-40s",
+ currentLineFlag.c_str(),
+ ci,
+ expectedBreaks[ci] == 0 ? "." : "|", // Reference break
+ currentBreakData[ci] == 0 ? "." : "|", // Actual break
+ hexCodePoint,
+ classNameSize,
+ mk.classNameFromCodepoint(c).c_str(),
+ mk.getAppliedRule(ci).c_str(), cName);
+ (void)ret;
+ U_ASSERT(0 <= ret && ret < UPRV_LENGTHOF(buffer));
+
+ // Output the error
+ if (ci == i) {
+ errln(buffer);
} else {
- errorText.append("\\U");
- for (bn=28; bn>=0; bn-=4) {
- errorText.append(hexChars.charAt((c>>bn)&0xf));
- }
+ infoln(buffer);
}
- ci = testText.moveIndex32(ci, 1);
+
+ if (ci >= endContext) { break; }
}
- errorText.append("\\");
- errorText.append("</data>\n");
-
- // Output the error
- char charErrorTxt[500];
- UErrorCode status = U_ZERO_ERROR;
- errorText.extract(charErrorTxt, sizeof(charErrorTxt), NULL, status);
- charErrorTxt[sizeof(charErrorTxt)-1] = 0;
- const char *badLocale = bi->getLocaleID(ULOC_ACTUAL_LOCALE, status);
-
- errln("%s break monkey test error [%s]. %s. Operation = %s; Random seed = %d; buf Idx = %d\n%s",
- name, badLocale, (expectedBreaks[i]? "break expected but not found" : "break found but not expected"),
- errorType, seed, i, charErrorTxt);
break;
}
}
@@ -4462,7 +4635,7 @@ void RBBITest::TestBug12677() {
RuleBasedBreakIterator bi(rules, pe, status);
assertSuccess(WHERE, status);
UnicodeString rtRules = bi.getRules();
- assertEquals(WHERE, UnicodeString(u"!!forward; $x = [ab#]; '#' '?'; "), rtRules);
+ assertEquals(WHERE, UnicodeString(u"!!forward;$x=[ab#];'#''?';"), rtRules);
}
@@ -4476,6 +4649,7 @@ void RBBITest::TestTableRedundancies() {
RBBIDataWrapper *dw = bi->fData;
const RBBIStateTable *fwtbl = dw->fForwardTable;
+ UBool in8Bits = fwtbl->fFlags & RBBI_8BITS_ROWS;
int32_t numCharClasses = dw->fHeader->fCatCount;
// printf("Char Classes: %d states: %d\n", numCharClasses, fwtbl->fNumStates);
@@ -4486,13 +4660,14 @@ void RBBITest::TestTableRedundancies() {
UnicodeString s;
for (int32_t r = 1; r < (int32_t)fwtbl->fNumStates; r++) {
RBBIStateTableRow *row = (RBBIStateTableRow *) (fwtbl->fTableData + (fwtbl->fRowLen * r));
- s.append(row->fNextState[column]);
+ s.append(in8Bits ? row->r8.fNextState[column] : row->r16.fNextState[column]);
}
columns.push_back(s);
}
// Ignore column (char class) 0 while checking; it's special, and may have duplicates.
for (int c1=1; c1<numCharClasses; c1++) {
- for (int c2 = c1+1; c2 < numCharClasses; c2++) {
+ int limit = c1 < (int)fwtbl->fDictCategoriesStart ? fwtbl->fDictCategoriesStart : numCharClasses;
+ for (int c2 = c1+1; c2 < limit; c2++) {
if (columns.at(c1) == columns.at(c2)) {
errln("%s:%d Duplicate columns (%d, %d)\n", __FILE__, __LINE__, c1, c2);
goto out;
@@ -4506,12 +4681,20 @@ void RBBITest::TestTableRedundancies() {
for (int32_t r=0; r < (int32_t)fwtbl->fNumStates; r++) {
UnicodeString s;
RBBIStateTableRow *row = (RBBIStateTableRow *) (fwtbl->fTableData + (fwtbl->fRowLen * r));
- assertTrue(WHERE, row->fAccepting >= -1);
- s.append(row->fAccepting + 1); // values of -1 are expected.
- s.append(row->fLookAhead);
- s.append(row->fTagIdx);
- for (int32_t column = 0; column < numCharClasses; column++) {
- s.append(row->fNextState[column]);
+ if (in8Bits) {
+ s.append(row->r8.fAccepting);
+ s.append(row->r8.fLookAhead);
+ s.append(row->r8.fTagsIdx);
+ for (int32_t column = 0; column < numCharClasses; column++) {
+ s.append(row->r8.fNextState[column]);
+ }
+ } else {
+ s.append(row->r16.fAccepting);
+ s.append(row->r16.fLookAhead);
+ s.append(row->r16.fTagsIdx);
+ for (int32_t column = 0; column < numCharClasses; column++) {
+ s.append(row->r16.fNextState[column]);
+ }
}
rows.push_back(s);
}
@@ -4584,12 +4767,14 @@ void RBBITest::TestReverse(std::unique_ptr<RuleBasedBreakIterator>bi) {
RBBIDataWrapper *data = bi->fData;
int32_t categoryCount = data->fHeader->fCatCount;
- UTrie2 *trie = data->fTrie;
+ UCPTrie *trie = data->fTrie;
+ bool use8BitsTrie = ucptrie_getValueWidth(trie) == UCPTRIE_VALUE_BITS_8;
+ uint32_t dictBit = use8BitsTrie ? 0x0080 : 0x4000;
std::vector<UnicodeString> strings(categoryCount, UnicodeString());
for (int cp=0; cp<0x1fff0; ++cp) {
- int cat = utrie2_get32(trie, cp);
- cat &= ~0x4000; // And off the dictionary bit from the category.
+ int cat = ucptrie_get(trie, cp);
+ cat &= ~dictBit; // And off the dictionary bit from the category.
assertTrue(WHERE, cat < categoryCount && cat >= 0);
if (cat < 0 || cat >= categoryCount) return;
strings[cat].append(cp);
@@ -4646,6 +4831,19 @@ void RBBITest::TestBug13692() {
assertSuccess(WHERE, status);
}
+
+void RBBITest::TestProperties() {
+ UErrorCode errorCode = U_ZERO_ERROR;
+ UnicodeSet prependSet(UNICODE_STRING_SIMPLE("[:GCB=Prepend:]"), errorCode);
+ if (!prependSet.isEmpty()) {
+ errln(
+ "[:GCB=Prepend:] is not empty any more. "
+ "Uncomment relevant lines in source/data/brkitr/char.txt and "
+ "change this test to the opposite condition.");
+ }
+}
+
+
//
// TestDebug - A place-holder test for debugging purposes.
// For putting in fragments of other tests that can be invoked
@@ -4664,15 +4862,465 @@ void RBBITest::TestDebug(void) {
assertSuccess(WHERE, status);
}
-void RBBITest::TestProperties() {
- UErrorCode errorCode = U_ZERO_ERROR;
- UnicodeSet prependSet(UNICODE_STRING_SIMPLE("[:GCB=Prepend:]"), errorCode);
- if (!prependSet.isEmpty()) {
- errln(
- "[:GCB=Prepend:] is not empty any more. "
- "Uncomment relevant lines in source/data/brkitr/char.txt and "
- "change this test to the opposite condition.");
+
+//
+// TestDebugRules A stub test for use in debugging rule compilation problems.
+// Can be freely altered as needed or convenient.
+// Leave disabled - #ifdef'ed out - when not activley debugging. The rule source
+// data files may not be available in all environments.
+// Any permanent test cases should be moved to rbbitst.txt
+// (see Bug 20303 in that file, for example), or to another test function in this file.
+//
+void RBBITest::TestDebugRules() {
+#if 0
+ const char16_t *rules = u""
+ "!!quoted_literals_only; \n"
+ "!!chain; \n"
+ "!!lookAheadHardBreak; \n"
+ " \n"
+ // "[a] / ; \n"
+ "[a] [b] / [c] [d]; \n"
+ "[a] [b] / [c] [d] {100}; \n"
+ "[x] [a] [b] / [c] [d] {100}; \n"
+ "[a] [b] [c] / [d] {100}; \n"
+ //" [c] [d] / [e] [f]; \n"
+ //"[a] [b] / [c]; \n"
+ ;
+
+ UErrorCode status = U_ZERO_ERROR;
+ CharString path(pathToDataDirectory(), status);
+ path.appendPathPart("brkitr", status);
+ path.appendPathPart("rules", status);
+ path.appendPathPart("line.txt", status);
+ int len;
+ std::unique_ptr<UChar []> testFile(ReadAndConvertFile(path.data(), len, "UTF-8", status));
+ if (!assertSuccess(WHERE, status)) {
+ return;
+ }
+
+ UParseError pe;
+ // rules = testFile.get();
+ RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rules, pe, status);
+
+ if (!assertSuccess(WHERE, status)) {
+ delete bi;
+ return;
+ }
+ // bi->dumpTables();
+
+ delete bi;
+#endif
+}
+
+void RBBITest::testTrieStateTable(int32_t numChar, bool expectedTrieWidthIn8Bits, bool expectedStateRowIn8Bits) {
+ UCPTrieValueWidth expectedTrieWidth = expectedTrieWidthIn8Bits ? UCPTRIE_VALUE_BITS_8 : UCPTRIE_VALUE_BITS_16;
+ int32_t expectedStateRowBits = expectedStateRowIn8Bits ? RBBI_8BITS_ROWS : 0;
+ // Text are duplicate characters from U+4E00 to U+4FFF
+ UnicodeString text;
+ for (UChar c = 0x4e00; c < 0x5000; c++) {
+ text.append(c).append(c);
+ }
+ // Generate rule which will caused length+4 character classes and
+ // length+3 states
+ UnicodeString rules(u"!!quoted_literals_only;");
+ for (UChar c = 0x4e00; c < 0x4e00 + numChar; c++) {
+ rules.append(u'\'').append(c).append(c).append(u"';");
+ }
+ rules.append(u".;");
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError parseError;
+ RuleBasedBreakIterator bi(rules, parseError, status);
+
+ assertEquals(WHERE, numChar + 4, bi.fData->fHeader->fCatCount);
+ assertEquals(WHERE, numChar + 3, bi.fData->fForwardTable->fNumStates);
+ assertEquals(WHERE, expectedTrieWidth, ucptrie_getValueWidth(bi.fData->fTrie));
+ assertEquals(WHERE, expectedStateRowBits, bi.fData->fForwardTable->fFlags & RBBI_8BITS_ROWS);
+ assertEquals(WHERE, expectedStateRowBits, bi.fData->fReverseTable->fFlags & RBBI_8BITS_ROWS);
+
+ bi.setText(text);
+
+ int32_t pos;
+ int32_t i = 0;
+ while ((pos = bi.next()) > 0) {
+ // The first numChar should not break between the pair
+ if (i++ < numChar) {
+ assertEquals(WHERE, i * 2, pos);
+ } else {
+ // After the first numChar next(), break on each character.
+ assertEquals(WHERE, i + numChar, pos);
+ }
+ }
+ while ((pos = bi.previous()) > 0) {
+ // The first numChar should not break between the pair
+ if (--i < numChar) {
+ assertEquals(WHERE, i * 2, pos);
+ } else {
+ // After the first numChar next(), break on each character.
+ assertEquals(WHERE, i + numChar, pos);
+ }
}
}
+void RBBITest::Test8BitsTrieWith8BitStateTable() {
+ testTrieStateTable(251, true /* expectedTrieWidthIn8Bits */, true /* expectedStateRowIn8Bits */);
+}
+
+void RBBITest::Test16BitsTrieWith8BitStateTable() {
+ testTrieStateTable(252, false /* expectedTrieWidthIn8Bits */, true /* expectedStateRowIn8Bits */);
+}
+
+void RBBITest::Test16BitsTrieWith16BitStateTable() {
+ testTrieStateTable(253, false /* expectedTrieWidthIn8Bits */, false /* expectedStateRowIn8Bits */);
+}
+
+void RBBITest::Test8BitsTrieWith16BitStateTable() {
+ // Test UCPTRIE_VALUE_BITS_8 with 16 bits rows. Use a different approach to
+ // create state table in 16 bits.
+
+ // Generate 510 'a' as text
+ UnicodeString text;
+ for (int32_t i = 0; i < 510; i++) {
+ text.append(u'a');
+ }
+
+ UnicodeString rules(u"!!quoted_literals_only;'");
+ // 254 'a' in the rule will cause 256 states
+ for (int32_t i = 0; i < 254; i++) {
+ rules.append(u'a');
+ }
+ rules.append(u"';.;");
+
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError parseError;
+ LocalPointer<RuleBasedBreakIterator> bi(new RuleBasedBreakIterator(rules, parseError, status));
+
+ assertEquals(WHERE, 256, bi->fData->fForwardTable->fNumStates);
+ assertEquals(WHERE, UCPTRIE_VALUE_BITS_8, ucptrie_getValueWidth(bi->fData->fTrie));
+ assertEquals(WHERE,
+ false, RBBI_8BITS_ROWS == (bi->fData->fForwardTable->fFlags & RBBI_8BITS_ROWS));
+ bi->setText(text);
+
+ // break positions:
+ // 254, 508, 509, ... 510
+ assertEquals("next()", 254, bi->next());
+ int32_t i = 0;
+ int32_t pos;
+ while ((pos = bi->next()) > 0) {
+ assertEquals(WHERE, 508 + i , pos);
+ i++;
+ }
+ i = 0;
+ while ((pos = bi->previous()) > 0) {
+ i++;
+ if (pos >= 508) {
+ assertEquals(WHERE, 510 - i , pos);
+ } else {
+ assertEquals(WHERE, 254 , pos);
+ }
+ }
+}
+
+// Test that both compact (8 bit) and full sized (16 bit) rbbi tables work, and
+// that there are no problems with rules at the size that transitions between the two.
+//
+// A rule that matches a literal string, like 'abcdefghij', will require one state and
+// one character class per character in the string. So we can make a rule to tickle the
+// boundaries by using literal strings of various lengths.
+//
+// For both the number of states and the number of character classes, the eight bit format
+// only has 7 bits available, allowing for 128 values. For both, a few values are reserved,
+// leaving 120 something available. This test runs the string over the range of 120 - 130,
+// which allows some margin for changes to the number of values reserved by the rule builder
+// without breaking the test.
+
+void RBBITest::TestTable_8_16_Bits() {
+
+ // testStr serves as both the source of the rule string (truncated to the desired length)
+ // and as test data to check matching behavior. A break rule consisting of the first 120
+ // characters of testStr will match the first 120 chars of the full-length testStr.
+ UnicodeString testStr;
+ for (UChar c=0x3000; c<0x3200; ++c) {
+ testStr.append(c);
+ }
+
+ const int32_t startLength = 120; // The shortest rule string to test.
+ const int32_t endLength = 260; // The longest rule string to test
+ const int32_t increment = this->quick ? endLength - startLength : 1;
+
+ for (int32_t ruleLen=startLength; ruleLen <= endLength; ruleLen += increment) {
+ UParseError parseError;
+ UErrorCode status = U_ZERO_ERROR;
+
+ UnicodeString ruleString{u"!!quoted_literals_only; '#';"};
+ ruleString.findAndReplace(UnicodeString(u"#"), UnicodeString(testStr, 0, ruleLen));
+ RuleBasedBreakIterator bi(ruleString, parseError, status);
+ if (!assertSuccess(WHERE, status)) {
+ errln(ruleString);
+ break;
+ }
+ // bi.dumpTables();
+
+ // Verify that the break iterator is functioning - that the first boundary found
+ // in testStr is at the length of the rule string.
+ bi.setText(testStr);
+ assertEquals(WHERE, ruleLen, bi.next());
+
+ // Reverse iteration. Do a setText() first, to flush the break iterator's internal cache
+ // of previously detected boundaries, thus forcing the engine to run the safe reverse rules.
+ bi.setText(testStr);
+ int32_t result = bi.preceding(ruleLen);
+ assertEquals(WHERE, 0, result);
+
+ // Verify that the range of rule lengths being tested cover the transations
+ // from 8 to 16 bit data.
+ bool has8BitRowData = bi.fData->fForwardTable->fFlags & RBBI_8BITS_ROWS;
+ bool has8BitsTrie = ucptrie_getValueWidth(bi.fData->fTrie) == UCPTRIE_VALUE_BITS_8;
+
+ if (ruleLen == startLength) {
+ assertEquals(WHERE, true, has8BitRowData);
+ assertEquals(WHERE, true, has8BitsTrie);
+ }
+ if (ruleLen == endLength) {
+ assertEquals(WHERE, false, has8BitRowData);
+ assertEquals(WHERE, false, has8BitsTrie);
+ }
+ }
+}
+
+/* Test handling of a large number of look-ahead rules.
+ * The number of rules in the test exceeds the implementation limits prior to the
+ * improvements introduced with #13590.
+ *
+ * The test look-ahead rules have the form "AB / CE"; "CD / EG"; ...
+ * The text being matched is sequential, "ABCDEFGHI..."
+ *
+ * The upshot is that the look-ahead rules all match on their preceding context,
+ * and consequently must save a potential result, but then fail to match on their
+ * trailing context, so that they don't actually cause a boundary.
+ *
+ * Additionally, add a ".*" rule, so there are no boundaries unless a
+ * look-ahead hard-break rule forces one.
+ */
+void RBBITest::TestBug13590() {
+ UnicodeString rules {u"!!quoted_literals_only; !!chain; .*;\n"};
+
+ const int NUM_LOOKAHEAD_RULES = 50;
+ const char16_t STARTING_CHAR = u'\u5000';
+ char16_t firstChar;
+ for (int ruleNum = 0; ruleNum < NUM_LOOKAHEAD_RULES; ++ruleNum) {
+ firstChar = STARTING_CHAR + ruleNum*2;
+ rules.append(u'\'') .append(firstChar) .append(firstChar+1) .append(u'\'')
+ .append(u' ') .append(u'/') .append(u' ')
+ .append(u'\'') .append(firstChar+2) .append(firstChar+4) .append(u'\'')
+ .append(u';') .append(u'\n');
+ }
+
+ // Change the last rule added from the form "UV / WY" to "UV / WX".
+ // Changes the rule so that it will match - all 4 chars are in ascending sequence.
+ rules.findAndReplace(UnicodeString(firstChar+4), UnicodeString(firstChar+3));
+
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError parseError;
+ RuleBasedBreakIterator bi(rules, parseError, status);
+ if (!assertSuccess(WHERE, status)) {
+ errln(rules);
+ return;
+ }
+ // bi.dumpTables();
+
+ UnicodeString testString;
+ for (char16_t c = STARTING_CHAR-200; c < STARTING_CHAR + NUM_LOOKAHEAD_RULES*4; ++c) {
+ testString.append(c);
+ }
+ bi.setText(testString);
+
+ int breaksFound = 0;
+ while (bi.next() != UBRK_DONE) {
+ ++breaksFound;
+ }
+
+ // Two matches are expected, one from the last rule that was explicitly modified,
+ // and one at the end of the text.
+ assertEquals(WHERE, 2, breaksFound);
+}
+
+
+#if U_ENABLE_TRACING
+static std::vector<std::string> gData;
+static std::vector<int32_t> gEntryFn;
+static std::vector<int32_t> gExitFn;
+static std::vector<int32_t> gDataFn;
+
+static void U_CALLCONV traceData(
+ const void*,
+ int32_t fnNumber,
+ int32_t,
+ const char *,
+ va_list args) {
+ if (UTRACE_UBRK_START <= fnNumber && fnNumber <= UTRACE_UBRK_LIMIT) {
+ const char* data = va_arg(args, const char*);
+ gDataFn.push_back(fnNumber);
+ gData.push_back(data);
+ }
+}
+
+static void traceEntry(const void *, int32_t fnNumber) {
+ if (UTRACE_UBRK_START <= fnNumber && fnNumber <= UTRACE_UBRK_LIMIT) {
+ gEntryFn.push_back(fnNumber);
+ }
+}
+
+static void traceExit(const void *, int32_t fnNumber, const char *, va_list) {
+ if (UTRACE_UBRK_START <= fnNumber && fnNumber <= UTRACE_UBRK_LIMIT) {
+ gExitFn.push_back(fnNumber);
+ }
+}
+
+
+void RBBITest::assertTestTraceResult(int32_t fnNumber, const char* expectedData) {
+ assertEquals("utrace_entry should be called ", 1, gEntryFn.size());
+ assertEquals("utrace_entry should be called with ", fnNumber, gEntryFn[0]);
+ assertEquals("utrace_exit should be called ", 1, gExitFn.size());
+ assertEquals("utrace_exit should be called with ", fnNumber, gExitFn[0]);
+
+ if (expectedData == nullptr) {
+ assertEquals("utrace_data should not be called ", 0, gDataFn.size());
+ assertEquals("utrace_data should not be called ", 0, gData.size());
+ } else {
+ assertEquals("utrace_data should be called ", 1, gDataFn.size());
+ assertEquals("utrace_data should be called with ", fnNumber, gDataFn[0]);
+ assertEquals("utrace_data should be called ", 1, gData.size());
+ assertEquals("utrace_data should pass in ", expectedData, gData[0].c_str());
+ }
+}
+
+void SetupTestTrace() {
+ gEntryFn.clear();
+ gExitFn.clear();
+ gDataFn.clear();
+ gData.clear();
+
+ const void* context = nullptr;
+ utrace_setFunctions(context, traceEntry, traceExit, traceData);
+ utrace_setLevel(UTRACE_INFO);
+}
+
+void RBBITest::TestTraceCreateCharacter(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateCharacter");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createCharacterInstance("zh-CN", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_CHARACTER, nullptr);
+}
+
+void RBBITest::TestTraceCreateTitle(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateTitle");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createTitleInstance("zh-CN", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_TITLE, nullptr);
+}
+
+void RBBITest::TestTraceCreateSentence(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateSentence");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createSentenceInstance("zh-CN", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_SENTENCE, nullptr);
+}
+
+void RBBITest::TestTraceCreateWord(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateWord");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createWordInstance("zh-CN", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_WORD, nullptr);
+}
+
+void RBBITest::TestTraceCreateLine(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateLine");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createLineInstance("zh-CN", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_LINE, "");
+}
+
+void RBBITest::TestTraceCreateLineStrict(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateLineStrict");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createLineInstance("zh-CN-u-lb-strict", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_LINE, "strict");
+}
+
+void RBBITest::TestTraceCreateLineNormal(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateLineNormal");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createLineInstance("zh-CN-u-lb-normal", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_LINE, "normal");
+}
+
+void RBBITest::TestTraceCreateLineLoose(void) {
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateLineLoose");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createLineInstance("zh-CN-u-lb-loose", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_LINE, "loose");
+}
+
+void RBBITest::TestTraceCreateBreakEngine(void) {
+ rbbi_cleanup();
+ SetupTestTrace();
+ IcuTestErrorCode status(*this, "TestTraceCreateBreakEngine");
+ LocalPointer<BreakIterator> brkitr(
+ BreakIterator::createWordInstance("zh-CN", status));
+ status.errIfFailureAndReset();
+ assertTestTraceResult(UTRACE_UBRK_CREATE_WORD, nullptr);
+
+ // To word break the following text, BreakIterator will create 5 dictionary
+ // break engine internally.
+ brkitr->setText(
+ u"test "
+ u"測試 " // Hani
+ u"សាកល្បង " // Khmr
+ u"ທົດສອບ " // Laoo
+ u"စမ်းသပ်မှု " // Mymr
+ u"ทดสอบ " // Thai
+ u"test "
+ );
+
+ // Loop through all the text.
+ while (brkitr->next() > 0) ;
+
+ assertEquals("utrace_entry should be called ", 6, gEntryFn.size());
+ assertEquals("utrace_exit should be called ", 6, gExitFn.size());
+ assertEquals("utrace_data should be called ", 5, gDataFn.size());
+
+ for (std::vector<int>::size_type i = 0; i < gDataFn.size(); i++) {
+ assertEquals("utrace_entry should be called ",
+ UTRACE_UBRK_CREATE_BREAK_ENGINE, gEntryFn[i+1]);
+ assertEquals("utrace_exit should be called ",
+ UTRACE_UBRK_CREATE_BREAK_ENGINE, gExitFn[i+1]);
+ assertEquals("utrace_data should be called ",
+ UTRACE_UBRK_CREATE_BREAK_ENGINE, gDataFn[i]);
+ }
+
+ assertEquals("utrace_data should pass ", "Hani", gData[0].c_str());
+ assertEquals("utrace_data should pass ", "Khmr", gData[1].c_str());
+ assertEquals("utrace_data should pass ", "Laoo", gData[2].c_str());
+ assertEquals("utrace_data should pass ", "Mymr", gData[3].c_str());
+ assertEquals("utrace_data should pass ", "Thai", gData[4].c_str());
+
+}
+#endif
+
#endif // #if !UCONFIG_NO_BREAK_ITERATION
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
index cfaf688ac1f..da144114af8 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
@@ -82,9 +82,28 @@ public:
void TestReverse();
void TestReverse(std::unique_ptr<RuleBasedBreakIterator>bi);
void TestBug13692();
+ void TestDebugRules();
void TestDebug();
void TestProperties();
+ void Test8BitsTrieWith8BitStateTable();
+ void Test8BitsTrieWith16BitStateTable();
+ void Test16BitsTrieWith8BitStateTable();
+ void Test16BitsTrieWith16BitStateTable();
+ void TestTable_8_16_Bits();
+ void TestBug13590();
+
+#if U_ENABLE_TRACING
+ void TestTraceCreateCharacter();
+ void TestTraceCreateWord();
+ void TestTraceCreateSentence();
+ void TestTraceCreateTitle();
+ void TestTraceCreateLine();
+ void TestTraceCreateLineNormal();
+ void TestTraceCreateLineStrict();
+ void TestTraceCreateLineLoose();
+ void TestTraceCreateBreakEngine();
+#endif
/***********************/
private:
@@ -119,6 +138,14 @@ private:
// Test parameters, from the test framework and test invocation.
const char* fTestParams;
+
+ // Helper functions to test different trie bit sizes and state table bit sizes.
+ void testTrieStateTable(int32_t numChar, bool expectedTrieWidthIn8Bits, bool expectedStateRowIn8Bits);
+
+#if U_ENABLE_TRACING
+ void assertTestTraceResult(int32_t fnNumber, const char* expectedData);
+#endif
+
};
#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
index b6391d2fa28..5f7e36b3ae1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
@@ -31,6 +31,7 @@
#include "unicode/localpointer.h"
#include "unicode/regex.h"
+#include "unicode/stringpiece.h"
#include "unicode/uchar.h"
#include "unicode/ucnv.h"
#include "unicode/uniset.h"
@@ -105,6 +106,7 @@ void RegexTest::runIndexedTest( int32_t index, UBool exec, const char* &name, ch
TESTCASE_AUTO(TestBug13631);
TESTCASE_AUTO(TestBug13632);
TESTCASE_AUTO(TestBug20359);
+ TESTCASE_AUTO(TestBug20863);
TESTCASE_AUTO_END;
}
@@ -3499,11 +3501,15 @@ void RegexTest::regex_find(const UnicodeString &pattern,
// positions.
//
parsePat = RegexPattern::compile("<(/?)(r|[0-9]+)>", 0, pe, status);
- REGEX_CHECK_STATUS_L(line);
+ if (!assertSuccess(WHERE, status) ) {
+ goto cleanupAndReturn;
+ }
unEscapedInput = inputString.unescape();
parseMatcher = parsePat->matcher(unEscapedInput, status);
- REGEX_CHECK_STATUS_L(line);
+ if (!assertSuccess(WHERE, status) ) {
+ goto cleanupAndReturn;
+ }
while(parseMatcher->find()) {
parseMatcher->appendReplacement(deTaggedInput, "", status);
REGEX_CHECK_STATUS;
@@ -4202,6 +4208,8 @@ void RegexTest::PerlTests() {
if (expected != found) {
errln("line %d: Expected %smatch, got %smatch",
lineNum, expected?"":"no ", found?"":"no " );
+ delete testMat;
+ delete testPat;
continue;
}
@@ -4597,6 +4605,8 @@ void RegexTest::PerlTestsUTF8() {
if (expected != found) {
errln("line %d: Expected %smatch, got %smatch",
lineNum, expected?"":"no ", found?"":"no " );
+ delete testMat;
+ delete testPat;
continue;
}
@@ -5829,11 +5839,11 @@ void RegexTest::TestBug12884() {
REGEX_ASSERT(status == U_REGEX_TIME_OUT);
// UText, wrapping non-UTF-16 text, also takes a different execution path.
- const char *text8 = u8"¿Qué es Unicode? Unicode proporciona un número único para cada"
+ StringPiece text8(u8"¿Qué es Unicode? Unicode proporciona un número único para cada"
"carácter, sin importar la plataforma, sin importar el programa,"
- "sin importar el idioma.";
+ "sin importar el idioma.");
status = U_ZERO_ERROR;
- LocalUTextPointer ut(utext_openUTF8(NULL, text8, -1, &status));
+ LocalUTextPointer ut(utext_openUTF8(NULL, text8.data(), text8.length(), &status));
REGEX_CHECK_STATUS;
m.reset(ut.getAlias());
m.find(status);
@@ -5913,4 +5923,95 @@ void RegexTest::TestBug20359() {
assertSuccess(WHERE, status);
}
+
+void RegexTest::TestBug20863() {
+ // Test that patterns with a large number of named capture groups work correctly.
+ //
+ // The ticket was not for a bug per se, but to reduce memory usage by using lazy
+ // construction of the map from capture names to numbers, and decreasing the
+ // default size of the map.
+
+ constexpr int GROUP_COUNT = 2000;
+ std::vector<UnicodeString> groupNames;
+ for (int32_t i=0; i<GROUP_COUNT; ++i) {
+ UnicodeString name;
+ name.append(u"name");
+ name.append(Int64ToUnicodeString(i));
+ groupNames.push_back(name);
+ }
+
+ UnicodeString patternString;
+ for (UnicodeString name: groupNames) {
+ patternString.append(u"(?<");
+ patternString.append(name);
+ patternString.append(u">.)");
+ }
+
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError pe;
+ LocalPointer<RegexPattern> pattern(RegexPattern::compile(patternString, pe, status), status);
+ if (!assertSuccess(WHERE, status)) {
+ return;
+ }
+
+ for (int32_t i=0; i<GROUP_COUNT; ++i) {
+ int32_t group = pattern->groupNumberFromName(groupNames[i], status);
+ if (!assertSuccess(WHERE, status)) {
+ return;
+ }
+ assertEquals(WHERE, i+1, group);
+ // Note: group 0 is the overall match; group 1 is the first separate capture group.
+ }
+
+ // Verify that assignment of patterns with various combinations of named capture work.
+ // Lazy creation of the internal named capture map changed the implementation logic here.
+ {
+ LocalPointer<RegexPattern> pat1(RegexPattern::compile(u"abc", pe, status), status);
+ LocalPointer<RegexPattern> pat2(RegexPattern::compile(u"a(?<name>b)c", pe, status), status);
+ assertSuccess(WHERE, status);
+ assertFalse(WHERE, *pat1 == *pat2);
+ *pat1 = *pat2;
+ assertTrue(WHERE, *pat1 == *pat2);
+ assertEquals(WHERE, 1, pat1->groupNumberFromName(u"name", status));
+ assertEquals(WHERE, 1, pat2->groupNumberFromName(u"name", status));
+ assertSuccess(WHERE, status);
+ }
+
+ {
+ LocalPointer<RegexPattern> pat1(RegexPattern::compile(u"abc", pe, status), status);
+ LocalPointer<RegexPattern> pat2(RegexPattern::compile(u"a(?<name>b)c", pe, status), status);
+ assertSuccess(WHERE, status);
+ assertFalse(WHERE, *pat1 == *pat2);
+ *pat2 = *pat1;
+ assertTrue(WHERE, *pat1 == *pat2);
+ assertEquals(WHERE, 0, pat1->groupNumberFromName(u"name", status));
+ assertEquals(WHERE, U_REGEX_INVALID_CAPTURE_GROUP_NAME, status);
+ status = U_ZERO_ERROR;
+ assertEquals(WHERE, 0, pat2->groupNumberFromName(u"name", status));
+ assertEquals(WHERE, U_REGEX_INVALID_CAPTURE_GROUP_NAME, status);
+ status = U_ZERO_ERROR;
+ }
+
+ {
+ LocalPointer<RegexPattern> pat1(RegexPattern::compile(u"a(?<name1>b)c", pe, status), status);
+ LocalPointer<RegexPattern> pat2(RegexPattern::compile(u"a(?<name2>b)c", pe, status), status);
+ assertSuccess(WHERE, status);
+ assertFalse(WHERE, *pat1 == *pat2);
+ *pat2 = *pat1;
+ assertTrue(WHERE, *pat1 == *pat2);
+ assertEquals(WHERE, 1, pat1->groupNumberFromName(u"name1", status));
+ assertSuccess(WHERE, status);
+ assertEquals(WHERE, 1, pat2->groupNumberFromName(u"name1", status));
+ assertSuccess(WHERE, status);
+ assertEquals(WHERE, 0, pat1->groupNumberFromName(u"name2", status));
+ assertEquals(WHERE, U_REGEX_INVALID_CAPTURE_GROUP_NAME, status);
+ status = U_ZERO_ERROR;
+ assertEquals(WHERE, 0, pat2->groupNumberFromName(u"name2", status));
+ assertEquals(WHERE, U_REGEX_INVALID_CAPTURE_GROUP_NAME, status);
+ status = U_ZERO_ERROR;
+ }
+
+}
+
+
#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
index 58e9acb22c6..46494c568fc 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
@@ -60,6 +60,7 @@ public:
virtual void TestBug13631();
virtual void TestBug13632();
virtual void TestBug20359();
+ virtual void TestBug20863();
// The following functions are internal to the regexp tests.
virtual void assertUText(const char *expected, UText *actual, const char *file, int line);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
index c55f2239225..5d25dd12e10 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
@@ -7,6 +7,7 @@
#include "unicode/utypes.h"
+#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
#include "unicode/unistr.h"
@@ -14,6 +15,7 @@
#include "unicode/brkiter.h"
#include "unicode/utrace.h"
#include "unicode/ucurr.h"
+#include "uresimp.h"
#include "restsnew.h"
#include <stdlib.h>
@@ -40,6 +42,7 @@ void NewResourceBundleTest::runIndexedTest( int32_t index, UBool exec, const cha
TESTCASE_AUTO(TestGetByFallback);
TESTCASE_AUTO(TestFilter);
+ TESTCASE_AUTO(TestIntervalAliasFallbacks);
#if U_ENABLE_TRACING
TESTCASE_AUTO(TestTrace);
@@ -532,26 +535,28 @@ NewResourceBundleTest::TestOtherAPI(){
errln("copy construction failed\n");
}
- ResourceBundle defaultSub = defaultresource.get((int32_t)0, err);
- ResourceBundle defSubCopy(defaultSub);
- if(strcmp(defSubCopy.getName(), defaultSub.getName() ) !=0 ||
- strcmp(defSubCopy.getLocale().getName(), defaultSub.getLocale().getName() ) !=0 ){
- errln("copy construction for subresource failed\n");
- }
-
- ResourceBundle *p;
-
- p = defaultresource.clone();
- if(p == &defaultresource || !equalRB(*p, defaultresource)) {
- errln("ResourceBundle.clone() failed");
+ {
+ LocalPointer<ResourceBundle> p(defaultresource.clone());
+ if(p.getAlias() == &defaultresource || !equalRB(*p, defaultresource)) {
+ errln("ResourceBundle.clone() failed");
+ }
}
- delete p;
- p = defaultSub.clone();
- if(p == &defaultSub || !equalRB(*p, defaultSub)) {
- errln("2nd ResourceBundle.clone() failed");
+ // The following tests involving defaultSub may no longer be exercised if
+ // defaultresource is for a locale like en_US with an empty resource bundle.
+ // (Before ICU-21028 such a bundle would have contained at least a Version string.)
+ if(defaultresource.getSize() != 0) {
+ ResourceBundle defaultSub = defaultresource.get((int32_t)0, err);
+ ResourceBundle defSubCopy(defaultSub);
+ if(strcmp(defSubCopy.getName(), defaultSub.getName()) != 0 ||
+ strcmp(defSubCopy.getLocale().getName(), defaultSub.getLocale().getName() ) != 0) {
+ errln("copy construction for subresource failed\n");
+ }
+ LocalPointer<ResourceBundle> p(defaultSub.clone());
+ if(p.getAlias() == &defaultSub || !equalRB(*p, defaultSub)) {
+ errln("2nd ResourceBundle.clone() failed");
+ }
}
- delete p;
UVersionInfo ver;
copyRes.getVersion(ver);
@@ -1392,6 +1397,79 @@ void NewResourceBundleTest::TestFilter() {
}
}
+/*
+ * The following test for ICU-20706 has infinite loops on certain inputs for
+ * locales and calendars. In order to unblock the build (ICU-21055), those
+ * specific values are temporarily removed.
+ * The issue of the infinite loops and its blocking dependencies were captured
+ * in ICU-21080.
+ */
+
+void NewResourceBundleTest::TestIntervalAliasFallbacks() {
+ const char* locales[] = {
+ // Thee will not cause infinity loop
+ "en",
+ "ja",
+
+ // These will cause infinity loop
+#if 0
+ "fr_CA",
+ "en_150",
+ "es_419",
+ "id",
+ "in",
+ "pl",
+ "pt_PT",
+ "sr_ME",
+ "zh_Hant",
+ "zh_Hant_TW",
+ "zh_TW",
+#endif
+ };
+ const char* calendars[] = {
+ // These won't cause infinity loop
+ "gregorian",
+ "chinese",
+
+ // These will cause infinity loop
+#if 0
+ "islamic",
+ "islamic-civil",
+ "islamic-tbla",
+ "islamic-umalqura",
+ "ethiopic-amete-alem",
+ "islamic-rgsa",
+ "japanese",
+ "roc",
+#endif
+ };
+
+ for (int lidx = 0; lidx < UPRV_LENGTHOF(locales); lidx++) {
+ UErrorCode status = U_ZERO_ERROR;
+ UResourceBundle *rb = ures_open(NULL, locales[lidx], &status);
+ if (U_FAILURE(status)) {
+ errln("Cannot open bundle for locale %s", locales[lidx]);
+ break;
+ }
+ for (int cidx = 0; cidx < UPRV_LENGTHOF(calendars); cidx++) {
+ CharString key;
+ key.append("calendar/", status);
+ key.append(calendars[cidx], status);
+ key.append("/intervalFormats/fallback", status);
+ if (! logKnownIssue("20400")) {
+ int32_t resStrLen = 0;
+ ures_getStringByKeyWithFallback(rb, key.data(), &resStrLen, &status);
+ }
+ if (U_FAILURE(status)) {
+ errln("Cannot ures_getStringByKeyWithFallback('%s') on locale %s",
+ key.data(), locales[lidx]);
+ break;
+ }
+ }
+ ures_close(rb);
+ }
+}
+
#if U_ENABLE_TRACING
static std::vector<std::string> gResourcePathsTraced;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
index 9ae3bf048e2..45cc9309365 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
@@ -40,6 +40,8 @@ public:
void TestFilter(void);
+ void TestIntervalAliasFallbacks(void);
+
#if U_ENABLE_TRACING
void TestTrace(void);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
index 5cc946bc225..ab12819716a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
@@ -111,8 +111,9 @@ void StaticUnicodeSetsTest::assertInSet(const UnicodeString &localeName, const U
void StaticUnicodeSetsTest::assertInSet(const UnicodeString &localeName, const UnicodeString &setName,
const UnicodeSet &set, UChar32 cp) {
- // If this test case fails, add the specified code point to the corresponding set in
- // UnicodeSetStaticCache.java and numparse_unisets.cpp
+ // If this test case fails, add the specified code point to the corresponding set in either:
+ // - parseLenients in CLDR root.xml
+ // - harded-coded sets in StaticUnicodeSets.java and static_unicode_sets.cpp
assertTrue(
localeName + UnicodeString(u" ") + UnicodeString(cp) + UnicodeString(u" is missing in ") +
setName, set.contains(cp));
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
index 9b753e4b12d..4154558e5c0 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
@@ -53,6 +53,7 @@ public:
void TestTitleOptions();
void TestFullCaseFoldingIterator();
void TestGreekUpper();
+ void TestArmenian();
void TestLongUpper();
void TestMalformedUTF8();
void TestBufferOverflow();
@@ -97,6 +98,7 @@ StringCaseTest::runIndexedTest(int32_t index, UBool exec, const char *&name, cha
#endif
TESTCASE_AUTO(TestFullCaseFoldingIterator);
TESTCASE_AUTO(TestGreekUpper);
+ TESTCASE_AUTO(TestArmenian);
TESTCASE_AUTO(TestLongUpper);
TESTCASE_AUTO(TestMalformedUTF8);
TESTCASE_AUTO(TestBufferOverflow);
@@ -814,6 +816,26 @@ StringCaseTest::TestGreekUpper() {
assertGreekUpper(u"ή.", u"ΗÌ.");
}
+void StringCaseTest::TestArmenian() {
+ Locale hy("hy"); // Eastern Armenian
+ Locale hyw("hyw"); // Western Armenian
+ Locale root = Locale::getRoot();
+ // See ICU-13416:
+ // Ö‡ ligature ech-yiwn
+ // uppercases to ÔµÕ’=ech+yiwn by default and in Western Armenian,
+ // but to ÔµÕŽ=ech+vew in Eastern Armenian.
+ UnicodeString s(u"Ö‡ ÔµÖ€Ö‡Õ¡Õ¶Õ«");
+
+ assertEquals("upper root", u"ÔµÕ’ ÔµÕÔµÕ’Ô±Õ†Ô»", UnicodeString(s).toUpper(root));
+ assertEquals("upper hy", u"ÔµÕŽ ÔµÕÔµÕŽÔ±Õ†Ô»", UnicodeString(s).toUpper(hy));
+ assertEquals("upper hyw", u"ÔµÕ’ ÔµÕÔµÕ’Ô±Õ†Ô»", UnicodeString(s).toUpper(hyw));
+#if !UCONFIG_NO_BREAK_ITERATION
+ assertEquals("title root", u"ÔµÖ‚ ÔµÖ€Ö‡Õ¡Õ¶Õ«", UnicodeString(s).toTitle(nullptr, root));
+ assertEquals("title hy", u"ÔµÕ¾ ÔµÖ€Ö‡Õ¡Õ¶Õ«", UnicodeString(s).toTitle(nullptr, hy));
+ assertEquals("title hyw", u"ÔµÖ‚ ÔµÖ€Ö‡Õ¡Õ¶Õ«", UnicodeString(s).toTitle(nullptr, hyw));
+#endif
+}
+
void
StringCaseTest::TestLongUpper() {
if (quick) {
@@ -1314,7 +1336,8 @@ void StringCaseTest::TestCaseMapUTF8WithEdits() {
Edits edits;
int32_t length = CaseMap::utf8ToLower("tr", U_OMIT_UNCHANGED_TEXT,
- u8"IstanBul", 8, dest, UPRV_LENGTHOF(dest), &edits, errorCode);
+ reinterpret_cast<const char*>(u8"IstanBul"), 8,
+ dest, UPRV_LENGTHOF(dest), &edits, errorCode);
assertEquals(u"toLower(IstanBul)", UnicodeString(u"ıb"),
UnicodeString::fromUTF8(StringPiece(dest, length)));
static const EditChange lowerExpectedChanges[] = {
@@ -1330,7 +1353,8 @@ void StringCaseTest::TestCaseMapUTF8WithEdits() {
edits.reset();
length = CaseMap::utf8ToUpper("el", U_OMIT_UNCHANGED_TEXT,
- u8"Πατάτα", 6 * 2, dest, UPRV_LENGTHOF(dest), &edits, errorCode);
+ reinterpret_cast<const char*>(u8"Πατάτα"), 6 * 2,
+ dest, UPRV_LENGTHOF(dest), &edits, errorCode);
assertEquals(u"toUpper(Πατάτα)", UnicodeString(u"ΑΤΑΤΑ"),
UnicodeString::fromUTF8(StringPiece(dest, length)));
static const EditChange upperExpectedChanges[] = {
@@ -1352,7 +1376,7 @@ void StringCaseTest::TestCaseMapUTF8WithEdits() {
U_OMIT_UNCHANGED_TEXT |
U_TITLECASE_NO_BREAK_ADJUSTMENT |
U_TITLECASE_NO_LOWERCASE,
- nullptr, u8"IjssEL IglOo", 12,
+ nullptr, reinterpret_cast<const char*>(u8"IjssEL IglOo"), 12,
dest, UPRV_LENGTHOF(dest), &edits, errorCode);
assertEquals(u"toTitle(IjssEL IglOo)", UnicodeString(u"J"),
UnicodeString::fromUTF8(StringPiece(dest, length)));
@@ -1370,7 +1394,8 @@ void StringCaseTest::TestCaseMapUTF8WithEdits() {
// No explicit nor automatic edits.reset(). Edits should be appended.
length = CaseMap::utf8Fold(U_OMIT_UNCHANGED_TEXT | U_EDITS_NO_RESET |
U_FOLD_CASE_EXCLUDE_SPECIAL_I,
- u8"IßtanBul", 1 + 2 + 6, dest, UPRV_LENGTHOF(dest), &edits, errorCode);
+ reinterpret_cast<const char*>(u8"IßtanBul"), 1 + 2 + 6,
+ dest, UPRV_LENGTHOF(dest), &edits, errorCode);
assertEquals(u"foldCase(IßtanBul)", UnicodeString(u"ıssb"),
UnicodeString::fromUTF8(StringPiece(dest, length)));
static const EditChange foldExpectedChanges[] = {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
index 7bb9662c36c..043355ff767 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
@@ -166,7 +166,7 @@ void
StringTest::TestUpperOrdinal() {
for (int32_t i = 0;; ++i) {
char ic = nativeInvChars[i];
- uint8_t ac = asciiInvChars[i];
+ uint8_t ac = static_cast<uint8_t>(asciiInvChars[i]);
int32_t expected = ac - 'A';
int32_t actual = uprv_upperOrdinal(ic);
if (0 <= expected && expected <= 25) {
@@ -188,7 +188,7 @@ void
StringTest::TestLowerOrdinal() {
for (int32_t i = 0;; ++i) {
char ic = nativeInvChars[i];
- uint8_t ac = asciiInvChars[i];
+ uint8_t ac = static_cast<uint8_t>(asciiInvChars[i]);
int32_t expected = ac - 'a';
int32_t actual = uprv_lowerOrdinal(ic);
if (0 <= expected && expected <= 25) {
@@ -243,13 +243,16 @@ void StringTest::runIndexedTest(int32_t index, UBool exec, const char *&name, ch
TESTCASE_AUTO(TestSTLCompatibility);
TESTCASE_AUTO(TestStringPiece);
TESTCASE_AUTO(TestStringPieceComparisons);
+ TESTCASE_AUTO(TestStringPieceFind);
TESTCASE_AUTO(TestStringPieceOther);
#ifdef U_HAVE_STRING_VIEW
TESTCASE_AUTO(TestStringPieceStringView);
#endif
+ TESTCASE_AUTO(TestStringPieceU8);
TESTCASE_AUTO(TestByteSink);
TESTCASE_AUTO(TestCheckedArrayByteSink);
TESTCASE_AUTO(TestStringByteSink);
+ TESTCASE_AUTO(TestStringByteSinkAppendU8);
TESTCASE_AUTO(TestCharString);
TESTCASE_AUTO(TestCStr);
TESTCASE_AUTO(Testctou);
@@ -264,7 +267,7 @@ StringTest::TestStringPiece() {
errln("StringPiece() failed");
}
// Construct from NULL const char * pointer.
- StringPiece null(NULL);
+ StringPiece null((const char *)nullptr);
if(!null.empty() || null.data()!=NULL || null.length()!=0 || null.size()!=0) {
errln("StringPiece(NULL) failed");
}
@@ -394,7 +397,7 @@ StringTest::TestStringPiece() {
void
StringTest::TestStringPieceComparisons() {
StringPiece empty;
- StringPiece null(NULL);
+ StringPiece null(nullptr);
StringPiece abc("abc");
StringPiece abcd("abcdefg", 4);
StringPiece abx("abx");
@@ -407,6 +410,35 @@ StringTest::TestStringPieceComparisons() {
if(abc==abcd) {
errln("abc==abcd");
}
+
+ assertTrue("null<abc", null.compare(abc) < 0);
+ assertTrue("abc>null", abc.compare(null) > 0);
+ assertTrue("abc<abcd", abc.compare(abcd) < 0);
+ assertTrue("abcd>abc", abcd.compare(abc) > 0);
+ assertTrue("abc<abx", abc.compare(abx) < 0);
+ assertTrue("abx>abc", abx.compare(abc) > 0);
+ assertTrue("abx>abcd", abx.compare(abcd) > 0);
+ assertTrue("abcd<abx", abcd.compare(abx) < 0);
+ assertTrue("abx==abx", abx.compare(abx) == 0);
+
+ // Behavior should be the same as std::string::compare
+ {
+ std::string null("");
+ std::string abc("abc");
+ std::string abcd("abcdefg", 4);
+ std::string abx("abx");
+
+ assertTrue("std: null<abc", null.compare(abc) < 0);
+ assertTrue("std: abc>null", abc.compare(null) > 0);
+ assertTrue("std: abc<abcd", abc.compare(abcd) < 0);
+ assertTrue("std: abcd>abc", abcd.compare(abc) > 0);
+ assertTrue("std: abc<abx", abc.compare(abx) < 0);
+ assertTrue("std: abx>abc", abx.compare(abc) > 0);
+ assertTrue("std: abx>abcd", abx.compare(abcd) > 0);
+ assertTrue("std: abcd<abx", abcd.compare(abx) < 0);
+ assertTrue("std: abx==abx", abx.compare(abx) == 0);
+ }
+
abcd.remove_suffix(1);
if(abc!=abcd) {
errln("abc!=abcd.remove_suffix(1)");
@@ -417,6 +449,51 @@ StringTest::TestStringPieceComparisons() {
}
void
+StringTest::TestStringPieceFind() {
+ struct TestCase {
+ const char* haystack;
+ const char* needle;
+ int32_t expected;
+ } cases[] = {
+ { "", "", 0 },
+ { "", "x", -1 },
+ { "x", "", 0 },
+ { "x", "x", 0 },
+ { "xy", "x", 0 },
+ { "xy", "y", 1 },
+ { "xy", "xy", 0 },
+ { "xy", "xyz", -1 },
+ { "qwerty", "qqw", -1 },
+ { "qwerty", "qw", 0 },
+ { "qwerty", "er", 2 },
+ { "qwerty", "err", -1 },
+ { "qwerty", "ert", 2 },
+ { "qwerty", "ty", 4 },
+ { "qwerty", "tyy", -1 },
+ { "qwerty", "a", -1 },
+ { "qwerty", "abc", -1 }
+ };
+ int32_t caseNumber = 0;
+ for (auto& cas : cases) {
+ StringPiece haystack(cas.haystack);
+ StringPiece needle(cas.needle);
+ assertEquals(Int64ToUnicodeString(caseNumber),
+ cas.expected, haystack.find(needle, 0));
+ // Should be same as std::string::find
+ std::string stdhaystack(cas.haystack);
+ std::string stdneedle(cas.needle);
+ assertEquals(Int64ToUnicodeString(caseNumber) + u" (std)",
+ cas.expected, static_cast<int32_t>(stdhaystack.find(stdneedle, 0)));
+ // Test offsets against std::string::find
+ for (int32_t offset = 0; offset < haystack.length(); offset++) {
+ assertEquals(Int64ToUnicodeString(caseNumber) + "u @ " + Int64ToUnicodeString(offset),
+ static_cast<int32_t>(stdhaystack.find(stdneedle, offset)), haystack.find(needle, offset));
+ }
+ caseNumber++;
+ }
+}
+
+void
StringTest::TestStringPieceOther() {
static constexpr char msg[] = "Kapow!";
@@ -429,7 +506,7 @@ StringTest::TestStringPieceOther() {
Other other;
StringPiece piece(other);
- assertEquals("size()", piece.size(), other.size());
+ assertEquals("size()", piece.size(), static_cast<int32_t>(other.size()));
assertEquals("data()", piece.data(), other.data());
}
@@ -446,6 +523,52 @@ StringTest::TestStringPieceStringView() {
}
#endif
+void
+StringTest::TestStringPieceU8() {
+ // ICU-20984 "mitigate some C++20 char8_t breakages"
+ // For the following APIs there are overloads for both
+ // const char * and const char8_t *.
+ // A u8"string literal" has one type or the other
+ // depending on C++ version and compiler settings.
+ StringPiece abc(u8"abc");
+ assertEquals("abc.length", 3, abc.length());
+ assertEquals("abc", "\x61\x62\x63", abc.data());
+
+ StringPiece abc3(u8"abcdef", 3);
+ assertEquals("abc3.length", 3, abc3.length());
+ assertEquals("abc3[0]", 0x61, abc3.data()[0]);
+ assertEquals("abc3[1]", 0x62, abc3.data()[1]);
+ assertEquals("abc3[2]", 0x63, abc3.data()[2]);
+
+ StringPiece uvw("q");
+ uvw.set(u8"uvw");
+ assertEquals("uvw.length", 3, uvw.length());
+ assertEquals("uvw", "\x75\x76\x77", uvw.data());
+
+ StringPiece xyz("r");
+ xyz.set(u8"xyzXYZ", 3);
+ assertEquals("xyz.length", 3, xyz.length());
+ assertEquals("xyz[0]", 0x78, xyz.data()[0]);
+ assertEquals("xyz[1]", 0x79, xyz.data()[1]);
+ assertEquals("xyz[2]", 0x7a, xyz.data()[2]);
+
+ StringPiece null(nullptr);
+ assertTrue("null is empty", null.empty());
+ assertTrue("null is null", null.data() == nullptr);
+
+#ifdef __cpp_lib_char8_t
+ std::u8string_view u8sv(u8"sv"); // C++20
+ StringPiece u8svsp(u8sv);
+ assertEquals("u8svsp.length", 2, u8svsp.length());
+ assertEquals("u8svsp", "\x73\x76", u8svsp.data());
+
+ std::u8string u8str(u8"str"); // C++20
+ StringPiece u8strsp(u8str);
+ assertEquals("u8strsp.length", 3, u8strsp.length());
+ assertEquals("u8strsp", "\x73\x74\x72", u8strsp.data());
+#endif // __cpp_lib_char8_t
+}
+
// Verify that ByteSink is subclassable and Flush() overridable.
class SimpleByteSink : public ByteSink {
public:
@@ -578,6 +701,20 @@ StringTest::TestStringByteSink() {
}
}
+void
+StringTest::TestStringByteSinkAppendU8() {
+ // ICU-20984 "mitigate some C++20 char8_t breakages"
+ // For the following APIs there are overloads for both
+ // const char * and const char8_t *.
+ // A u8"string literal" has one type or the other
+ // depending on C++ version and compiler settings.
+ std::string result("abc");
+ StringByteSink<std::string> sink(&result);
+ sink.AppendU8("def", 3);
+ sink.AppendU8(u8"ghijkl", 4);
+ assertEquals("abcdefghij", "abcdef\x67\x68\x69\x6a", result.c_str());
+}
+
#if defined(_MSC_VER)
#include <vector>
#endif
@@ -673,6 +810,27 @@ StringTest::TestCharString() {
"Long string over 40 characters to trigger heap allocation",
s3.data());
}
+
+ {
+ // extract()
+ errorCode.reset();
+ CharString s("abc", errorCode);
+ char buffer[10];
+
+ s.extract(buffer, 10, errorCode);
+ assertEquals("abc.extract(10) success", U_ZERO_ERROR, errorCode.get());
+ assertEquals("abc.extract(10) output", "abc", buffer);
+
+ strcpy(buffer, "012345");
+ s.extract(buffer, 3, errorCode);
+ assertEquals("abc.extract(3) not terminated",
+ U_STRING_NOT_TERMINATED_WARNING, errorCode.reset());
+ assertEquals("abc.extract(3) output", "abc345", buffer);
+
+ strcpy(buffer, "012345");
+ s.extract(buffer, 2, errorCode);
+ assertEquals("abc.extract(2) overflow", U_BUFFER_OVERFLOW_ERROR, errorCode.reset());
+ }
}
void
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
index 040c0b0e3c9..2a1b98804f3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
@@ -43,14 +43,17 @@ private:
void TestLowerOrdinal();
void Test_UTF8_COUNT_TRAIL_BYTES();
void TestStringPiece();
+ void TestStringPieceFind();
void TestStringPieceComparisons();
void TestStringPieceOther();
#ifdef U_HAVE_STRING_VIEW
void TestStringPieceStringView();
#endif
+ void TestStringPieceU8();
void TestByteSink();
void TestCheckedArrayByteSink();
void TestStringByteSink();
+ void TestStringByteSinkAppendU8();
void TestSTLCompatibility();
void TestCharString();
void TestCStr();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
index 965fca88ebb..8e7bcb09174 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
@@ -196,6 +196,7 @@ TransliteratorTest::runIndexedTest(int32_t index, UBool exec,
TESTCASE(82,TestHalfwidthFullwidth);
TESTCASE(83,TestThai);
TESTCASE(84,TestAny);
+ TESTCASE(85,TestBasicTransliteratorEvenWithoutData);
default: name = ""; break;
}
}
@@ -1509,6 +1510,84 @@ void TransliteratorTest::TestNormalizationTransliterator() {
}
/**
+ * Test we can create basic transliterator even without data.
+ */
+void TransliteratorTest::TestBasicTransliteratorEvenWithoutData() {
+ const char16_t* TEST_DATA = u"\u0124e\u0301 \uFB01nd x";
+ const char16_t* EXPECTED_RESULTS[] = {
+ u"H\u0302e\u0301 \uFB01nd x", // NFD
+ u"\u0124\u00E9 \uFB01nd x", // NFC
+ u"H\u0302e\u0301 find x", // NFKD
+ u"\u0124\u00E9 find x", // NFKC
+ u"\u0124e\u0301 \uFB01nd x", // Hex-Any
+ u"\u0125e\u0301 \uFB01nd x", // Lower
+ u"\u0124e\uFB01ndx", // [:^L:]Remove
+ u"H\u0302e\u0301 \uFB01nd ", // NFD; [x]Remove
+ u"h\u0302e\u0301 find x", // Lower; NFKD;
+ u"hefindx", // Lower; NFKD; [:^L:]Remove; NFC;
+ u"\u0124e \uFB01nd x", // [:Nonspacing Mark:] Remove;
+ u"He \uFB01nd x", // NFD; [:Nonspacing Mark:] Remove; NFC;
+ // end
+ 0
+ };
+
+ const char* BASIC_TRANSLITERATOR_ID[] = {
+ "NFD",
+ "NFC",
+ "NFKD",
+ "NFKC",
+ "Hex-Any",
+ "Lower",
+ "[:^L:]Remove",
+ "NFD; [x]Remove",
+ "Lower; NFKD;",
+ "Lower; NFKD; [:^L:]Remove; NFC;",
+ "[:Nonspacing Mark:] Remove;",
+ "NFD; [:Nonspacing Mark:] Remove; NFC;",
+ // end
+ 0
+ };
+ const char* BASIC_TRANSLITERATOR_RULES[] = {
+ "::Lower; ::NFKD;",
+ "::Lower; ::NFKD; ::[:^L:]Remove; ::NFC;",
+ "::[:Nonspacing Mark:] Remove;",
+ "::NFD; ::[:Nonspacing Mark:] Remove; ::NFC;",
+ // end
+ 0
+ };
+ for (int32_t i=0; BASIC_TRANSLITERATOR_ID[i]; i++) {
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError parseError;
+ std::unique_ptr<Transliterator> translit(Transliterator::createInstance(
+ BASIC_TRANSLITERATOR_ID[i], UTRANS_FORWARD, parseError, status));
+ if (translit.get() == nullptr || !U_SUCCESS(status)) {
+ dataerrln("FAIL: createInstance %s failed", BASIC_TRANSLITERATOR_ID[i]);
+ continue;
+ }
+ UnicodeString data(TEST_DATA);
+ UnicodeString expected(EXPECTED_RESULTS[i]);
+ translit->transliterate(data);
+ if (data != expected) {
+ dataerrln(UnicodeString("FAIL: expected translit(") +
+ BASIC_TRANSLITERATOR_ID[i] + ") = '" +
+ EXPECTED_RESULTS[i] + "' but got '" + data);
+ continue;
+ }
+ }
+ for (int32_t i=0; BASIC_TRANSLITERATOR_RULES[i]; i++) {
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError parseError;
+ std::unique_ptr<Transliterator> translit(Transliterator::createFromRules(
+ "Test",
+ BASIC_TRANSLITERATOR_RULES[i], UTRANS_FORWARD, parseError, status));
+ if (translit.get() == nullptr || !U_SUCCESS(status)) {
+ dataerrln("FAIL: createFromRules %s failed", BASIC_TRANSLITERATOR_RULES[i]);
+ continue;
+ }
+ }
+}
+
+/**
* Test compound RBT rules.
*/
void TransliteratorTest::TestCompoundRBT(void) {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
index 8a2bcc68f69..64246d4add7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
@@ -369,6 +369,7 @@ private:
*/
void TestRegisterAlias(void);
+ void TestBasicTransliteratorEvenWithoutData(void);
//======================================================================
// Support methods
//======================================================================
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
index b3f4185ab50..e478872d53e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
@@ -14,6 +14,7 @@
#include "unicode/errorcode.h"
#include "unicode/normlzr.h"
#include "unicode/stringoptions.h"
+#include "unicode/stringpiece.h"
#include "unicode/uniset.h"
#include "unicode/usetiter.h"
#include "unicode/schriter.h"
@@ -1573,15 +1574,15 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
if(errorCode.errDataIfFailureAndReset("Normalizer2::getNFKCCasefoldInstance() call failed")) {
return;
}
- static const char *const src =
+ static const StringPiece src =
u8" AÄA\u0308A\u0308\u00ad\u0323Ä\u0323,\u00ad\u1100\u1161가\u11A8가\u3133 ";
- std::string expected = u8" aääạ\u0308ạ\u0308,ê°€ê°ê°ƒ ";
+ StringPiece expected = u8" aääạ\u0308ạ\u0308,ê°€ê°ê°ƒ ";
std::string result;
StringByteSink<std::string> sink(&result, static_cast<int32_t>(expected.length()));
Edits edits;
nfkc_cf->normalizeUTF8(0, src, sink, &edits, errorCode);
assertSuccess("normalizeUTF8 with Edits", errorCode.get());
- assertEquals("normalizeUTF8 with Edits", expected.c_str(), result.c_str());
+ assertEquals("normalizeUTF8 with Edits", expected.data(), result.c_str());
static const EditChange expectedChanges[] = {
{ FALSE, 2, 2 }, // 2 spaces
{ TRUE, 1, 1 }, // A→a
@@ -1612,7 +1613,7 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
edits.reset();
nfkc_cf->normalizeUTF8(U_OMIT_UNCHANGED_TEXT, src, sink, &edits, errorCode);
assertSuccess("normalizeUTF8 omit unchanged", errorCode.get());
- assertEquals("normalizeUTF8 omit unchanged", expected.c_str(), result.c_str());
+ assertEquals("normalizeUTF8 omit unchanged", expected.data(), result.c_str());
assertTrue("normalizeUTF8 omit unchanged hasChanges", edits.hasChanges());
assertEquals("normalizeUTF8 omit unchanged numberOfChanges", 9, edits.numberOfChanges());
TestUtility::checkEditsIter(*this, u"normalizeUTF8 omit unchanged",
@@ -1628,7 +1629,7 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
edits.reset();
fn2.normalizeUTF8(0, src, sink, &edits, errorCode);
assertSuccess("filtered normalizeUTF8", errorCode.get());
- assertEquals("filtered normalizeUTF8", expected.c_str(), result.c_str());
+ assertEquals("filtered normalizeUTF8", expected.data(), result.c_str());
static const EditChange filteredChanges[] = {
{ FALSE, 3, 3 }, // 2 spaces + A
{ TRUE, 2, 2 }, // Ä→ä
@@ -1660,7 +1661,7 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
edits.reset();
fn2.normalizeUTF8(U_OMIT_UNCHANGED_TEXT, src, sink, &edits, errorCode);
assertSuccess("filtered normalizeUTF8 omit unchanged", errorCode.get());
- assertEquals("filtered normalizeUTF8 omit unchanged", expected.c_str(), result.c_str());
+ assertEquals("filtered normalizeUTF8 omit unchanged", expected.data(), result.c_str());
assertTrue("filtered normalizeUTF8 omit unchanged hasChanges", edits.hasChanges());
assertEquals("filtered normalizeUTF8 omit unchanged numberOfChanges", 7, edits.numberOfChanges());
TestUtility::checkEditsIter(*this, u"filtered normalizeUTF8 omit unchanged",
@@ -1743,16 +1744,16 @@ BasicNormalizerTest::TestNormalizeIllFormedText() {
assertSuccess("normalize", errorCode.get());
assertEquals("normalize", expected, result);
- std::string src8(u8" A");
- src8.append("\x80").append(u8"ÄA\u0308").append("\xC0\x80").
- append(u8"A\u0308\u00ad\u0323").append("\xED\xA0\x80").
- append(u8"Ä\u0323,\u00ad").append("\xF4\x90\x80\x80").
- append(u8"\u1100\u1161ê°€\u11A8ê°€\u3133 ").append("\xF0");
- std::string expected8(u8" a");
- expected8.append("\x80").append(u8"ää").append("\xC0\x80").
- append(u8"ạ\u0308").append("\xED\xA0\x80").
- append(u8"ạ\u0308,").append("\xF4\x90\x80\x80").
- append(u8"ê°€ê°ê°ƒ ").append("\xF0");
+ std::string src8(reinterpret_cast<const char*>(u8" A"));
+ src8.append("\x80").append(reinterpret_cast<const char*>(u8"ÄA\u0308")).append("\xC0\x80").
+ append(reinterpret_cast<const char*>(u8"A\u0308\u00ad\u0323")).append("\xED\xA0\x80").
+ append(reinterpret_cast<const char*>(u8"Ä\u0323,\u00ad")).append("\xF4\x90\x80\x80").
+ append(reinterpret_cast<const char*>(u8"\u1100\u1161ê°€\u11A8ê°€\u3133 ")).append("\xF0");
+ std::string expected8(reinterpret_cast<const char*>(u8" a"));
+ expected8.append("\x80").append(reinterpret_cast<const char*>(u8"ää")).append("\xC0\x80").
+ append(reinterpret_cast<const char*>(u8"ạ\u0308")).append("\xED\xA0\x80").
+ append(reinterpret_cast<const char*>(u8"ạ\u0308,")).append("\xF4\x90\x80\x80").
+ append(reinterpret_cast<const char*>(u8"ê°€ê°ê°ƒ ")).append("\xF0");
std::string result8;
StringByteSink<std::string> sink(&result8);
nfkc_cf->normalizeUTF8(0, src8, sink, nullptr, errorCode);
@@ -1777,13 +1778,13 @@ BasicNormalizerTest::TestComposeJamoTBase() {
assertFalse("isNormalized(LV+11A7)", nfkc->isNormalized(s, errorCode));
assertTrue("isNormalized(normalized)", nfkc->isNormalized(result, errorCode));
- std::string s8(u8"\u1100\u1161\u11A7\u1100\u314F\u11A7ê°€\u11A7");
- std::string expected8(u8"ê°€\u11A7ê°€\u11A7ê°€\u11A7");
+ StringPiece s8(u8"\u1100\u1161\u11A7\u1100\u314F\u11A7ê°€\u11A7");
+ StringPiece expected8(u8"ê°€\u11A7ê°€\u11A7ê°€\u11A7");
std::string result8;
- StringByteSink<std::string> sink(&result8, static_cast<int32_t>(expected8.length()));
+ StringByteSink<std::string> sink(&result8, expected8.length());
nfkc->normalizeUTF8(0, s8, sink, nullptr, errorCode);
assertSuccess("normalizeUTF8(LV+11A7)", errorCode.get());
- assertEquals("normalizeUTF8(LV+11A7)", expected8.c_str(), result8.c_str());
+ assertEquals("normalizeUTF8(LV+11A7)", expected8.data(), result8.c_str());
assertFalse("isNormalizedUTF8(LV+11A7)", nfkc->isNormalizedUTF8(s8, errorCode));
assertTrue("isNormalizedUTF8(normalized)", nfkc->isNormalizedUTF8(result8, errorCode));
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
index a3873bcb2b4..17492a7a13b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
@@ -537,7 +537,7 @@ TimeZoneTest::TestGetAvailableIDsNew()
const UnicodeString *id1, *id2;
UnicodeString canonicalID;
UBool isSystemID;
- char region[4];
+ char region[4] = {0};
int32_t zoneCount;
any = canonical = canonicalLoc = any_US = canonical_US = canonicalLoc_US = any_W5 = any_CA_W5 = any_US_E14 = NULL;
@@ -860,7 +860,9 @@ void TimeZoneTest::TestShortZoneIDs()
{"PRT", -240, FALSE}, // ICU Link - America/Puerto_Rico
{"CNT", -210, TRUE}, // ICU Link - America/St_Johns
{"AGT", -180, FALSE}, // ICU Link - America/Argentina/Buenos_Aires
- {"BET", -180, TRUE}, // ICU Link - America/Sao_Paulo
+ // Per https://mm.icann.org/pipermail/tz-announce/2019-July/000056.html
+ // Brazil has canceled DST and will stay on standard time indefinitely.
+ {"BET", -180, FALSE}, // ICU Link - America/Sao_Paulo
{"GMT", 0, FALSE}, // Olson etcetera Link - Etc/GMT
{"UTC", 0, FALSE}, // Olson etcetera 0
{"ECT", 60, TRUE}, // ICU Link - Europe/Paris
@@ -2251,8 +2253,11 @@ static struct {
{"America/Sao_Paulo", "en", FALSE, TimeZone::SHORT, "GMT-3"/*"BRT"*/},
{"America/Sao_Paulo", "en", FALSE, TimeZone::LONG, "Brasilia Standard Time"},
- {"America/Sao_Paulo", "en", TRUE, TimeZone::SHORT, "GMT-2"/*"BRST"*/},
- {"America/Sao_Paulo", "en", TRUE, TimeZone::LONG, "Brasilia Summer Time"},
+
+ // Per https://mm.icann.org/pipermail/tz-announce/2019-July/000056.html
+ // Brazil has canceled DST and will stay on standard time indefinitely.
+ // {"America/Sao_Paulo", "en", TRUE, TimeZone::SHORT, "GMT-2"/*"BRST"*/},
+ // {"America/Sao_Paulo", "en", TRUE, TimeZone::LONG, "Brasilia Summer Time"},
// No Summer Time, but had it before 1983.
{"Pacific/Honolulu", "en", FALSE, TimeZone::SHORT, "HST"},
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp
new file mode 100644
index 00000000000..18464516146
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp
@@ -0,0 +1,153 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "units_data.h"
+#include "intltest.h"
+
+using namespace ::icu::units;
+
+class UnitsDataTest : public IntlTest {
+ public:
+ UnitsDataTest() {}
+
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
+
+ void testGetUnitCategory();
+ void testGetAllConversionRates();
+ void testGetPreferencesFor();
+};
+
+extern IntlTest *createUnitsDataTest() { return new UnitsDataTest(); }
+
+void UnitsDataTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) {
+ if (exec) { logln("TestSuite UnitsDataTest: "); }
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(testGetUnitCategory);
+ TESTCASE_AUTO(testGetAllConversionRates);
+ TESTCASE_AUTO(testGetPreferencesFor);
+ TESTCASE_AUTO_END;
+}
+
+void UnitsDataTest::testGetUnitCategory() {
+ struct TestCase {
+ const char *unit;
+ const char *expectedCategory;
+ } testCases[]{
+ {"kilogram-per-cubic-meter", "mass-density"},
+ {"cubic-meter-per-meter", "consumption"},
+ // TODO(CLDR-13787,hugovdm): currently we're treating
+ // consumption-inverse as a separate category. Once consumption
+ // preference handling has been clarified by CLDR-13787, this function
+ // should be fixed.
+ {"meter-per-cubic-meter", "consumption-inverse"},
+ };
+
+ IcuTestErrorCode status(*this, "testGetUnitCategory");
+ for (const auto &t : testCases) {
+ CharString category = getUnitCategory(t.unit, status);
+ status.errIfFailureAndReset("getUnitCategory(%s)", t.unit);
+ assertEquals("category", t.expectedCategory, category.data());
+ }
+}
+
+void UnitsDataTest::testGetAllConversionRates() {
+ IcuTestErrorCode status(*this, "testGetAllConversionRates");
+ MaybeStackVector<ConversionRateInfo> conversionInfo;
+ getAllConversionRates(conversionInfo, status);
+
+ // Convenience output for debugging
+ for (int i = 0; i < conversionInfo.length(); i++) {
+ ConversionRateInfo *cri = conversionInfo[i];
+ logln("* conversionInfo %d: source=\"%s\", baseUnit=\"%s\", factor=\"%s\", offset=\"%s\"", i,
+ cri->sourceUnit.data(), cri->baseUnit.data(), cri->factor.data(), cri->offset.data());
+ assertTrue("sourceUnit", cri->sourceUnit.length() > 0);
+ assertTrue("baseUnit", cri->baseUnit.length() > 0);
+ assertTrue("factor", cri->factor.length() > 0);
+ }
+}
+
+class UnitPreferencesOpenedUp : public UnitPreferences {
+ public:
+ UnitPreferencesOpenedUp(UErrorCode &status) : UnitPreferences(status) {}
+ const MaybeStackVector<UnitPreferenceMetadata> *getInternalMetadata() const { return &metadata_; }
+ const MaybeStackVector<UnitPreference> *getInternalUnitPrefs() const { return &unitPrefs_; }
+};
+
+/**
+ * This test is dependent upon CLDR Data: when the preferences change, the test
+ * may fail: see the constants for expected Max/Min unit identifiers, for US and
+ * World, and for Roads and default lengths.
+ */
+void UnitsDataTest::testGetPreferencesFor() {
+ const char* USRoadMax = "mile";
+ const char* USRoadMin = "foot";
+ const char* USLenMax = "mile";
+ const char* USLenMin = "inch";
+ const char* WorldRoadMax = "kilometer";
+ const char* WorldRoadMin = "meter";
+ const char* WorldLenMax = "kilometer";
+ const char* WorldLenMin = "centimeter";
+ struct TestCase {
+ const char *name;
+ const char *category;
+ const char *usage;
+ const char *region;
+ const char *expectedBiggest;
+ const char *expectedSmallest;
+ } testCases[]{
+ {"US road", "length", "road", "US", USRoadMax, USRoadMin},
+ {"001 road", "length", "road", "001", WorldRoadMax, WorldRoadMin},
+ {"US lengths", "length", "default", "US", USLenMax, USLenMin},
+ {"001 lengths", "length", "default", "001", WorldLenMax, WorldLenMin},
+ {"XX road falls back to 001", "length", "road", "XX", WorldRoadMax, WorldRoadMin},
+ {"XX default falls back to 001", "length", "default", "XX", WorldLenMax, WorldLenMin},
+ {"Unknown usage US", "length", "foobar", "US", USLenMax, USLenMin},
+ {"Unknown usage 001", "length", "foobar", "XX", WorldLenMax, WorldLenMin},
+ {"Fallback", "length", "person-height-xyzzy", "DE", "meter-and-centimeter",
+ "meter-and-centimeter"},
+ {"Fallback twice", "length", "person-height-xyzzy-foo", "DE", "meter-and-centimeter",
+ "meter-and-centimeter"},
+ // Confirming results for some unitPreferencesTest.txt test cases
+ {"001 area", "area", "default", "001", "square-kilometer", "square-centimeter"},
+ {"GB area", "area", "default", "GB", "square-mile", "square-inch"},
+ {"001 area geograph", "area", "geograph", "001", "square-kilometer", "square-kilometer"},
+ {"GB area geograph", "area", "geograph", "GB", "square-mile", "square-mile"},
+ {"CA person-height", "length", "person-height", "CA", "foot-and-inch", "inch"},
+ {"AT person-height", "length", "person-height", "AT", "meter-and-centimeter",
+ "meter-and-centimeter"},
+ };
+ IcuTestErrorCode status(*this, "testGetPreferencesFor");
+ UnitPreferencesOpenedUp preferences(status);
+ auto *metadata = preferences.getInternalMetadata();
+ auto *unitPrefs = preferences.getInternalUnitPrefs();
+ assertTrue(UnicodeString("Metadata count: ") + metadata->length() + " > 200",
+ metadata->length() > 200);
+ assertTrue(UnicodeString("Preferences count: ") + unitPrefs->length() + " > 250",
+ unitPrefs->length() > 250);
+
+ for (const auto &t : testCases) {
+ logln(t.name);
+ const UnitPreference *const *prefs;
+ int32_t prefsCount;
+ preferences.getPreferencesFor(t.category, t.usage, t.region, prefs, prefsCount, status);
+ if (status.errIfFailureAndReset("getPreferencesFor(\"%s\", \"%s\", \"%s\", ...", t.category,
+ t.usage, t.region)) {
+ continue;
+ }
+ if (prefsCount > 0) {
+ assertEquals(UnicodeString(t.name) + " - max unit", t.expectedBiggest,
+ prefs[0]->unit.data());
+ assertEquals(UnicodeString(t.name) + " - min unit", t.expectedSmallest,
+ prefs[prefsCount - 1]->unit.data());
+ } else {
+ errln(UnicodeString(t.name) + ": failed to find preferences");
+ }
+ status.errIfFailureAndReset("testCase '%s'", t.name);
+ }
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp
new file mode 100644
index 00000000000..d43e1c85319
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp
@@ -0,0 +1,33 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include "intltest.h"
+#include "unicode/unistr.h"
+#include "units_router.h"
+
+
+class UnitsRouterTest : public IntlTest {
+ public:
+ UnitsRouterTest() {}
+
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
+
+ void testBasic();
+};
+
+extern IntlTest *createUnitsRouterTest() { return new UnitsRouterTest(); }
+
+void UnitsRouterTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) {
+ if (exec) { logln("TestSuite UnitsRouterTest: "); }
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(testBasic);
+ TESTCASE_AUTO_END;
+}
+
+void UnitsRouterTest::testBasic() { IcuTestErrorCode status(*this, "UnitsRouter testBasic"); }
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp
new file mode 100644
index 00000000000..a853dd79a8a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp
@@ -0,0 +1,887 @@
+// © 2020 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_FORMATTING
+
+#include <cmath>
+#include <iostream>
+
+#include "charstr.h"
+#include "cmemory.h"
+#include "filestrm.h"
+#include "intltest.h"
+#include "number_decimalquantity.h"
+#include "putilimp.h"
+#include "unicode/ctest.h"
+#include "unicode/measunit.h"
+#include "unicode/unistr.h"
+#include "unicode/unum.h"
+#include "unicode/ures.h"
+#include "units_complexconverter.h"
+#include "units_converter.h"
+#include "units_data.h"
+#include "units_router.h"
+#include "uparse.h"
+#include "uresimp.h"
+
+struct UnitConversionTestCase {
+ const StringPiece source;
+ const StringPiece target;
+ const double inputValue;
+ const double expectedValue;
+};
+
+using ::icu::number::impl::DecimalQuantity;
+using namespace ::icu::units;
+
+class UnitsTest : public IntlTest {
+ public:
+ UnitsTest() {}
+
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
+
+ void testUnitConstantFreshness();
+ void testConversionCapability();
+ void testConversions();
+ void testComplexUnitsConverter();
+ void testComplexUnitConverterSorting();
+ void testPreferences();
+ void testSiPrefixes();
+ void testMass();
+ void testTemperature();
+ void testArea();
+};
+
+extern IntlTest *createUnitsTest() { return new UnitsTest(); }
+
+void UnitsTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) {
+ if (exec) {
+ logln("TestSuite UnitsTest: ");
+ }
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(testUnitConstantFreshness);
+ TESTCASE_AUTO(testConversionCapability);
+ TESTCASE_AUTO(testConversions);
+ TESTCASE_AUTO(testComplexUnitsConverter);
+ TESTCASE_AUTO(testComplexUnitConverterSorting);
+ TESTCASE_AUTO(testPreferences);
+ TESTCASE_AUTO(testSiPrefixes);
+ TESTCASE_AUTO(testMass);
+ TESTCASE_AUTO(testTemperature);
+ TESTCASE_AUTO(testArea);
+ TESTCASE_AUTO_END;
+}
+
+// Tests the hard-coded constants in the code against constants that appear in
+// units.txt.
+void UnitsTest::testUnitConstantFreshness() {
+ IcuTestErrorCode status(*this, "testUnitConstantFreshness");
+ LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", status));
+ LocalUResourceBundlePointer unitConstants(
+ ures_getByKey(unitsBundle.getAlias(), "unitConstants", NULL, status));
+
+ while (ures_hasNext(unitConstants.getAlias())) {
+ int32_t len;
+ const char *constant = NULL;
+ ures_getNextString(unitConstants.getAlias(), &len, &constant, status);
+
+ Factor factor;
+ addSingleFactorConstant(constant, 1, POSITIVE, factor, status);
+ if (status.errDataIfFailureAndReset(
+ "addSingleFactorConstant(<%s>, ...).\n\n"
+ "If U_INVALID_FORMAT_ERROR, please check that \"icu4c/source/i18n/units_converter.cpp\" "
+ "has all constants? Is \"%s\" a new constant?\n",
+ constant, constant)) {
+ continue;
+ }
+
+ // Check the values of constants that have a simple numeric value
+ factor.substituteConstants();
+ int32_t uLen;
+ UnicodeString uVal = ures_getStringByKey(unitConstants.getAlias(), constant, &uLen, status);
+ CharString val;
+ val.appendInvariantChars(uVal, status);
+ if (status.errDataIfFailureAndReset("Failed to get constant value for %s.", constant)) {
+ continue;
+ }
+ DecimalQuantity dqVal;
+ UErrorCode parseStatus = U_ZERO_ERROR;
+ // TODO(units): unify with strToDouble() in units_converter.cpp
+ dqVal.setToDecNumber(val.toStringPiece(), parseStatus);
+ if (!U_SUCCESS(parseStatus)) {
+ // Not simple to parse, skip validating this constant's value. (We
+ // leave catching mistakes to the data-driven integration tests.)
+ continue;
+ }
+ double expectedNumerator = dqVal.toDouble();
+ assertEquals(UnicodeString("Constant ") + constant + u" numerator", expectedNumerator,
+ factor.factorNum);
+ assertEquals(UnicodeString("Constant ") + constant + u" denominator", 1.0, factor.factorDen);
+ }
+}
+
+void UnitsTest::testConversionCapability() {
+ struct TestCase {
+ const char *const source;
+ const char *const target;
+ const Convertibility expectedState;
+ } testCases[]{
+ {"meter", "foot", CONVERTIBLE}, //
+ {"kilometer", "foot", CONVERTIBLE}, //
+ {"hectare", "square-foot", CONVERTIBLE}, //
+ {"kilometer-per-second", "second-per-meter", RECIPROCAL}, //
+ {"square-meter", "square-foot", CONVERTIBLE}, //
+ {"kilometer-per-second", "foot-per-second", CONVERTIBLE}, //
+ {"square-hectare", "pow4-foot", CONVERTIBLE}, //
+ {"square-kilometer-per-second", "second-per-square-meter", RECIPROCAL}, //
+ {"cubic-kilometer-per-second-meter", "second-per-square-meter", RECIPROCAL}, //
+ };
+
+ for (const auto &testCase : testCases) {
+ UErrorCode status = U_ZERO_ERROR;
+
+ MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+
+ ConversionRates conversionRates(status);
+ auto convertibility = extractConvertibility(source, target, conversionRates, status);
+
+ assertEquals(UnicodeString("Conversion Capability: ") + testCase.source + " to " +
+ testCase.target,
+ testCase.expectedState, convertibility);
+ }
+}
+
+void UnitsTest::testSiPrefixes() {
+ IcuTestErrorCode status(*this, "Units testSiPrefixes");
+ // Test Cases
+ struct TestCase {
+ const char *source;
+ const char *target;
+ const double inputValue;
+ const double expectedValue;
+ } testCases[]{
+ {"gram", "kilogram", 1.0, 0.001}, //
+ {"milligram", "kilogram", 1.0, 0.000001}, //
+ {"microgram", "kilogram", 1.0, 0.000000001}, //
+ {"megagram", "gram", 1.0, 1000000}, //
+ {"megagram", "kilogram", 1.0, 1000}, //
+ {"gigabyte", "byte", 1.0, 1000000000}, //
+ // TODO: Fix `watt` probelms.
+ // {"megawatt", "watt", 1.0, 1000000}, //
+ // {"megawatt", "kilowatt", 1.0, 1000}, //
+ };
+
+ for (const auto &testCase : testCases) {
+ UErrorCode status = U_ZERO_ERROR;
+
+ MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+
+ ConversionRates conversionRates(status);
+ UnitConverter converter(source, target, conversionRates, status);
+
+ assertEqualsNear(UnicodeString("testSiPrefixes: ") + testCase.source + " to " + testCase.target,
+ testCase.expectedValue, converter.convert(testCase.inputValue),
+ 0.0001 * testCase.expectedValue);
+ }
+}
+
+void UnitsTest::testMass() {
+ IcuTestErrorCode status(*this, "Units testMass");
+
+ // Test Cases
+ struct TestCase {
+ const char *source;
+ const char *target;
+ const double inputValue;
+ const double expectedValue;
+ } testCases[]{
+ {"gram", "kilogram", 1.0, 0.001}, //
+ {"pound", "kilogram", 1.0, 0.453592}, //
+ {"pound", "kilogram", 2.0, 0.907185}, //
+ {"ounce", "pound", 16.0, 1.0}, //
+ {"ounce", "kilogram", 16.0, 0.453592}, //
+ {"ton", "pound", 1.0, 2000}, //
+ {"stone", "pound", 1.0, 14}, //
+ {"stone", "kilogram", 1.0, 6.35029} //
+ };
+
+ for (const auto &testCase : testCases) {
+ UErrorCode status = U_ZERO_ERROR;
+
+ MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+
+ ConversionRates conversionRates(status);
+ UnitConverter converter(source, target, conversionRates, status);
+
+ assertEqualsNear(UnicodeString("testMass: ") + testCase.source + " to " + testCase.target,
+ testCase.expectedValue, converter.convert(testCase.inputValue),
+ 0.0001 * testCase.expectedValue);
+ }
+}
+
+void UnitsTest::testTemperature() {
+ IcuTestErrorCode status(*this, "Units testTemperature");
+ // Test Cases
+ struct TestCase {
+ const char *source;
+ const char *target;
+ const double inputValue;
+ const double expectedValue;
+ } testCases[]{
+ {"celsius", "fahrenheit", 0.0, 32.0}, //
+ {"celsius", "fahrenheit", 10.0, 50.0}, //
+ {"fahrenheit", "celsius", 32.0, 0.0}, //
+ {"fahrenheit", "celsius", 89.6, 32}, //
+ {"kelvin", "fahrenheit", 0.0, -459.67}, //
+ {"kelvin", "fahrenheit", 300, 80.33}, //
+ {"kelvin", "celsius", 0.0, -273.15}, //
+ {"kelvin", "celsius", 300.0, 26.85} //
+ };
+
+ for (const auto &testCase : testCases) {
+ UErrorCode status = U_ZERO_ERROR;
+
+ MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+
+ ConversionRates conversionRates(status);
+ UnitConverter converter(source, target, conversionRates, status);
+
+ assertEqualsNear(UnicodeString("testTemperature: ") + testCase.source + " to " + testCase.target,
+ testCase.expectedValue, converter.convert(testCase.inputValue),
+ 0.0001 * uprv_fabs(testCase.expectedValue));
+ }
+}
+
+void UnitsTest::testArea() {
+ IcuTestErrorCode status(*this, "Units Area");
+
+ // Test Cases
+ struct TestCase {
+ const char *source;
+ const char *target;
+ const double inputValue;
+ const double expectedValue;
+ } testCases[]{
+ {"square-meter", "square-yard", 10.0, 11.9599}, //
+ {"hectare", "square-yard", 1.0, 11959.9}, //
+ {"square-mile", "square-foot", 0.0001, 2787.84}, //
+ {"hectare", "square-yard", 1.0, 11959.9}, //
+ {"hectare", "square-meter", 1.0, 10000}, //
+ {"hectare", "square-meter", 0.0, 0.0}, //
+ {"square-mile", "square-foot", 0.0001, 2787.84}, //
+ {"square-yard", "square-foot", 10, 90}, //
+ {"square-yard", "square-foot", 0, 0}, //
+ {"square-yard", "square-foot", 0.000001, 0.000009}, //
+ {"square-mile", "square-foot", 0.0, 0.0}, //
+ };
+
+ for (const auto &testCase : testCases) {
+ UErrorCode status = U_ZERO_ERROR;
+
+ MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+
+ ConversionRates conversionRates(status);
+ UnitConverter converter(source, target, conversionRates, status);
+
+ assertEqualsNear(UnicodeString("testArea: ") + testCase.source + " to " + testCase.target,
+ testCase.expectedValue, converter.convert(testCase.inputValue),
+ 0.0001 * testCase.expectedValue);
+ }
+}
+
+/**
+ * Trims whitespace off of the specified string.
+ * @param field is two pointers pointing at the start and end of the string.
+ * @return A StringPiece with initial and final space characters trimmed off.
+ */
+StringPiece trimField(char *(&field)[2]) {
+ const char *start = field[0];
+ start = u_skipWhitespace(start);
+ if (start >= field[1]) {
+ start = field[1];
+ }
+ const char *end = field[1];
+ while ((start < end) && U_IS_INV_WHITESPACE(*(end - 1))) {
+ end--;
+ }
+ int32_t length = (int32_t)(end - start);
+ return StringPiece(start, length);
+}
+
+// Used for passing context to unitsTestDataLineFn via u_parseDelimitedFile.
+struct UnitsTestContext {
+ // Provides access to UnitsTest methods like logln.
+ UnitsTest *unitsTest;
+ // Conversion rates: does not take ownership.
+ ConversionRates *conversionRates;
+};
+
+/**
+ * Deals with a single data-driven unit test for unit conversions.
+ *
+ * This is a UParseLineFn as required by u_parseDelimitedFile, intended for
+ * parsing unitsTest.txt.
+ *
+ * @param context Must point at a UnitsTestContext struct.
+ * @param fields A list of pointer-pairs, each pair pointing at the start and
+ * end of each field. End pointers are important because these are *not*
+ * null-terminated strings. (Interpreted as a null-terminated string,
+ * fields[0][0] points at the whole line.)
+ * @param fieldCount The number of fields (pointer pairs) passed to the fields
+ * parameter.
+ * @param pErrorCode Receives status.
+ */
+void unitsTestDataLineFn(void *context, char *fields[][2], int32_t fieldCount, UErrorCode *pErrorCode) {
+ if (U_FAILURE(*pErrorCode)) {
+ return;
+ }
+ UnitsTestContext *ctx = (UnitsTestContext *)context;
+ UnitsTest *unitsTest = ctx->unitsTest;
+ (void)fieldCount; // unused UParseLineFn variable
+ IcuTestErrorCode status(*unitsTest, "unitsTestDatalineFn");
+
+ StringPiece quantity = trimField(fields[0]);
+ StringPiece x = trimField(fields[1]);
+ StringPiece y = trimField(fields[2]);
+ StringPiece commentConversionFormula = trimField(fields[3]);
+ StringPiece utf8Expected = trimField(fields[4]);
+
+ UNumberFormat *nf = unum_open(UNUM_DEFAULT, NULL, -1, "en_US", NULL, status);
+ if (status.errIfFailureAndReset("unum_open failed")) {
+ return;
+ }
+ UnicodeString uExpected = UnicodeString::fromUTF8(utf8Expected);
+ double expected = unum_parseDouble(nf, uExpected.getBuffer(), uExpected.length(), 0, status);
+ unum_close(nf);
+ if (status.errIfFailureAndReset("unum_parseDouble(\"%s\") failed", utf8Expected)) {
+ return;
+ }
+
+ CharString sourceIdent(x, status);
+ MeasureUnitImpl sourceUnit = MeasureUnitImpl::forIdentifier(x, status);
+ if (status.errIfFailureAndReset("forIdentifier(\"%.*s\")", x.length(), x.data())) {
+ return;
+ }
+
+ CharString targetIdent(y, status);
+ MeasureUnitImpl targetUnit = MeasureUnitImpl::forIdentifier(y, status);
+ if (status.errIfFailureAndReset("forIdentifier(\"%.*s\")", y.length(), y.data())) {
+ return;
+ }
+
+ unitsTest->logln("Quantity (Category): \"%.*s\", "
+ "Expected value of \"1000 %.*s in %.*s\": %f, "
+ "commentConversionFormula: \"%.*s\", ",
+ quantity.length(), quantity.data(), x.length(), x.data(), y.length(), y.data(),
+ expected, commentConversionFormula.length(), commentConversionFormula.data());
+
+ // Convertibility:
+ auto convertibility = extractConvertibility(sourceUnit, targetUnit, *ctx->conversionRates, status);
+ if (status.errIfFailureAndReset("extractConvertibility(<%s>, <%s>, ...)",
+ sourceIdent.data(), targetIdent.data())) {
+ return;
+ }
+ CharString msg;
+ msg.append("convertible: ", status)
+ .append(sourceIdent.data(), status)
+ .append(" -> ", status)
+ .append(targetIdent.data(), status);
+ if (status.errIfFailureAndReset("msg construction")) {
+ return;
+ }
+ unitsTest->assertNotEquals(msg.data(), UNCONVERTIBLE, convertibility);
+
+ // Conversion:
+ UnitConverter converter(sourceUnit, targetUnit, *ctx->conversionRates, status);
+ if (status.errIfFailureAndReset("constructor: UnitConverter(<%s>, <%s>, status)",
+ sourceIdent.data(), targetIdent.data())) {
+ return;
+ }
+ double got = converter.convert(1000);
+ msg.clear();
+ msg.append("Converting 1000 ", status).append(x, status).append(" to ", status).append(y, status);
+ unitsTest->assertEqualsNear(msg.data(), expected, got, 0.0001 * expected);
+ double inverted = converter.convertInverse(got);
+ msg.clear();
+ msg.append("Converting back to ", status).append(x, status).append(" from ", status).append(y, status);
+ unitsTest->assertEqualsNear(msg.data(), 1000, inverted, 0.0001);
+}
+
+/**
+ * Runs data-driven unit tests for unit conversion. It looks for the test cases
+ * in source/test/testdata/cldr/units/unitsTest.txt, which originates in CLDR.
+ */
+void UnitsTest::testConversions() {
+ const char *filename = "unitsTest.txt";
+ const int32_t kNumFields = 5;
+ char *fields[kNumFields][2];
+
+ IcuTestErrorCode errorCode(*this, "UnitsTest::testConversions");
+ const char *sourceTestDataPath = getSourceTestData(errorCode);
+ if (errorCode.errIfFailureAndReset("unable to find the source/test/testdata "
+ "folder (getSourceTestData())")) {
+ return;
+ }
+
+ CharString path(sourceTestDataPath, errorCode);
+ path.appendPathPart("cldr/units", errorCode);
+ path.appendPathPart(filename, errorCode);
+
+ ConversionRates rates(errorCode);
+ UnitsTestContext ctx = {this, &rates};
+ u_parseDelimitedFile(path.data(), ';', fields, kNumFields, unitsTestDataLineFn, &ctx, errorCode);
+ if (errorCode.errIfFailureAndReset("error parsing %s: %s\n", path.data(), u_errorName(errorCode))) {
+ return;
+ }
+}
+
+void UnitsTest::testComplexUnitsConverter() {
+ IcuTestErrorCode status(*this, "UnitsTest::testComplexUnitsConverter");
+ ConversionRates rates(status);
+ MeasureUnit input = MeasureUnit::getFoot();
+ MeasureUnit output = MeasureUnit::forIdentifier("foot-and-inch", status);
+ MeasureUnitImpl tempInput, tempOutput;
+ const MeasureUnitImpl &inputImpl = MeasureUnitImpl::forMeasureUnit(input, tempInput, status);
+ const MeasureUnitImpl &outputImpl = MeasureUnitImpl::forMeasureUnit(output, tempOutput, status);
+ auto converter = ComplexUnitsConverter(inputImpl, outputImpl, rates, status);
+
+ // Significantly less than 2.0.
+ MaybeStackVector<Measure> measures = converter.convert(1.9999, nullptr, status);
+ assertEquals("measures length", 2, measures.length());
+ if (2 == measures.length()) {
+ assertEquals("1.9999: measures[0] value", 1.0, measures[0]->getNumber().getDouble(status));
+ assertEquals("1.9999: measures[0] unit", MeasureUnit::getFoot().getIdentifier(),
+ measures[0]->getUnit().getIdentifier());
+ assertEqualsNear("1.9999: measures[1] value", 11.9988,
+ measures[1]->getNumber().getDouble(status), 0.0001);
+ assertEquals("1.9999: measures[1] unit", MeasureUnit::getInch().getIdentifier(),
+ measures[1]->getUnit().getIdentifier());
+ }
+
+ // TODO(icu-units#100): consider factoring out the set of tests to make this function more
+ // data-driven.
+
+ // A minimal nudge under 2.0.
+ measures = converter.convert((2.0 - DBL_EPSILON), nullptr, status);
+ assertEquals("measures length", 2, measures.length());
+ if (2 == measures.length()) {
+ assertEquals("1 - eps: measures[0] value", 2.0, measures[0]->getNumber().getDouble(status));
+ assertEquals("1 - eps: measures[0] unit", MeasureUnit::getFoot().getIdentifier(),
+ measures[0]->getUnit().getIdentifier());
+ assertEquals("1 - eps: measures[1] value", 0.0, measures[1]->getNumber().getDouble(status));
+ assertEquals("1 - eps: measures[1] unit", MeasureUnit::getInch().getIdentifier(),
+ measures[1]->getUnit().getIdentifier());
+ }
+
+ // Testing precision with meter and light-year. 1e-16 light years is
+ // 0.946073 meters, and double precision can provide only ~15 decimal
+ // digits, so we don't expect to get anything less than 1 meter.
+
+ // An epsilon's nudge under one light-year: should give 1 ly, 0 m.
+ input = MeasureUnit::getLightYear();
+ output = MeasureUnit::forIdentifier("light-year-and-meter", status);
+ const MeasureUnitImpl &inputImpl3 = MeasureUnitImpl::forMeasureUnit(input, tempInput, status);
+ const MeasureUnitImpl &outputImpl3 = MeasureUnitImpl::forMeasureUnit(output, tempOutput, status);
+ converter = ComplexUnitsConverter(inputImpl3, outputImpl3, rates, status);
+ measures = converter.convert((2.0 - DBL_EPSILON), nullptr, status);
+ assertEquals("measures length", 2, measures.length());
+ if (2 == measures.length()) {
+ assertEquals("light-year test: measures[0] value", 2.0,
+ measures[0]->getNumber().getDouble(status));
+ assertEquals("light-year test: measures[0] unit", MeasureUnit::getLightYear().getIdentifier(),
+ measures[0]->getUnit().getIdentifier());
+ assertEquals("light-year test: measures[1] value", 0.0,
+ measures[1]->getNumber().getDouble(status));
+ assertEquals("light-year test: measures[1] unit", MeasureUnit::getMeter().getIdentifier(),
+ measures[1]->getUnit().getIdentifier());
+ }
+
+ // 1e-15 light years is 9.46073 meters (calculated using "bc" and the CLDR
+ // conversion factor). With double-precision maths, we get 10.5. In this
+ // case, we're off by almost 1 meter.
+ measures = converter.convert((1.0 + 1e-15), nullptr, status);
+ assertEquals("measures length", 2, measures.length());
+ if (2 == measures.length()) {
+ assertEquals("light-year test: measures[0] value", 1.0,
+ measures[0]->getNumber().getDouble(status));
+ assertEquals("light-year test: measures[0] unit", MeasureUnit::getLightYear().getIdentifier(),
+ measures[0]->getUnit().getIdentifier());
+ assertEqualsNear("light-year test: measures[1] value", 10,
+ measures[1]->getNumber().getDouble(status), 1);
+ assertEquals("light-year test: measures[1] unit", MeasureUnit::getMeter().getIdentifier(),
+ measures[1]->getUnit().getIdentifier());
+ }
+
+ // 2e-16 light years is 1.892146 meters. We consider this in the noise, and
+ // thus expect a 0. (This test fails when 2e-16 is increased to 4e-16.)
+ measures = converter.convert((1.0 + 2e-16), nullptr, status);
+ assertEquals("measures length", 2, measures.length());
+ if (2 == measures.length()) {
+ assertEquals("light-year test: measures[0] value", 1.0,
+ measures[0]->getNumber().getDouble(status));
+ assertEquals("light-year test: measures[0] unit", MeasureUnit::getLightYear().getIdentifier(),
+ measures[0]->getUnit().getIdentifier());
+ assertEquals("light-year test: measures[1] value", 0.0,
+ measures[1]->getNumber().getDouble(status));
+ assertEquals("light-year test: measures[1] unit", MeasureUnit::getMeter().getIdentifier(),
+ measures[1]->getUnit().getIdentifier());
+ }
+
+ // TODO(icu-units#63): test negative numbers!
+}
+
+void UnitsTest::testComplexUnitConverterSorting() {
+ IcuTestErrorCode status(*this, "UnitsTest::testComplexUnitConverterSorting");
+
+ MeasureUnitImpl source = MeasureUnitImpl::forIdentifier("meter", status);
+ MeasureUnitImpl target = MeasureUnitImpl::forIdentifier("inch-and-foot", status);
+ ConversionRates conversionRates(status);
+
+ ComplexUnitsConverter complexConverter(source, target, conversionRates, status);
+ auto measures = complexConverter.convert(10.0, nullptr, status);
+
+ if (2 == measures.length()) {
+ assertEquals("inch-and-foot unit 0", "inch", measures[0]->getUnit().getIdentifier());
+ assertEquals("inch-and-foot unit 1", "foot", measures[1]->getUnit().getIdentifier());
+
+ assertEqualsNear("inch-and-foot value 0", 9.7008, measures[0]->getNumber().getDouble(), 0.0001);
+ assertEqualsNear("inch-and-foot value 1", 32, measures[1]->getNumber().getInt64(), 0.00001);
+ }
+}
+
+/**
+ * This class represents the output fields from unitPreferencesTest.txt. Please
+ * see the documentation at the top of that file for details.
+ *
+ * For "mixed units" output, there are more (repeated) output fields. The last
+ * output unit has the expected output specified as both a rational fraction and
+ * a decimal fraction. This class ignores rational fractions, and expects to
+ * find a decimal fraction for each output unit.
+ */
+class ExpectedOutput {
+ public:
+ // Counts number of units in the output. When this is more than one, we have
+ // "mixed units" in the expected output.
+ int _compoundCount = 0;
+
+ // Counts how many fields were skipped: we expect to skip only one per
+ // output unit type (the rational fraction).
+ int _skippedFields = 0;
+
+ // The expected output units: more than one for "mixed units".
+ MeasureUnit _measureUnits[3];
+
+ // The amounts of each of the output units.
+ double _amounts[3];
+
+ /**
+ * Parse an expected output field from the test data file.
+ *
+ * @param output may be a string representation of an integer, a rational
+ * fraction, a decimal fraction, or it may be a unit identifier. Whitespace
+ * should already be trimmed. This function ignores rational fractions,
+ * saving only decimal fractions and their unit identifiers.
+ * @return true if the field was successfully parsed, false if parsing
+ * failed.
+ */
+ void parseOutputField(StringPiece output, UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) return;
+ DecimalQuantity dqOutputD;
+
+ dqOutputD.setToDecNumber(output, errorCode);
+ if (U_SUCCESS(errorCode)) {
+ _amounts[_compoundCount] = dqOutputD.toDouble();
+ return;
+ } else if (errorCode == U_DECIMAL_NUMBER_SYNTAX_ERROR) {
+ // Not a decimal fraction, it might be a rational fraction or a unit
+ // identifier: continue.
+ errorCode = U_ZERO_ERROR;
+ } else {
+ // Unexpected error, so we propagate it.
+ return;
+ }
+
+ _measureUnits[_compoundCount] = MeasureUnit::forIdentifier(output, errorCode);
+ if (U_SUCCESS(errorCode)) {
+ _compoundCount++;
+ _skippedFields = 0;
+ return;
+ }
+ _skippedFields++;
+ if (_skippedFields < 2) {
+ // We are happy skipping one field per output unit: we want to skip
+ // rational fraction fields like "11 / 10".
+ errorCode = U_ZERO_ERROR;
+ return;
+ } else {
+ // Propagate the error.
+ return;
+ }
+ }
+
+ /**
+ * Produces an output string for debug purposes.
+ */
+ std::string toDebugString() {
+ std::string result;
+ for (int i = 0; i < _compoundCount; i++) {
+ result += std::to_string(_amounts[i]);
+ result += " ";
+ result += _measureUnits[i].getIdentifier();
+ result += " ";
+ }
+ return result;
+ }
+};
+
+// Checks a vector of Measure instances against ExpectedOutput.
+void checkOutput(UnitsTest *unitsTest, const char *msg, ExpectedOutput expected,
+ const MaybeStackVector<Measure> &actual, double precision) {
+ IcuTestErrorCode status(*unitsTest, "checkOutput");
+
+ CharString testMessage("Test case \"", status);
+ testMessage.append(msg, status);
+ testMessage.append("\": expected output: ", status);
+ testMessage.append(expected.toDebugString().c_str(), status);
+ testMessage.append(", obtained output:", status);
+ for (int i = 0; i < actual.length(); i++) {
+ testMessage.append(" ", status);
+ testMessage.append(std::to_string(actual[i]->getNumber().getDouble(status)), status);
+ testMessage.append(" ", status);
+ testMessage.appendInvariantChars(actual[i]->getUnit().getIdentifier(), status);
+ }
+ if (!unitsTest->assertEquals(testMessage.data(), expected._compoundCount, actual.length())) {
+ return;
+ };
+ for (int i = 0; i < actual.length(); i++) {
+ double permittedDiff = precision * expected._amounts[i];
+ if (permittedDiff == 0) {
+ // If 0 is expected, still permit a small delta.
+ // TODO: revisit this experimentally chosen value:
+ permittedDiff = 0.00000001;
+ }
+ unitsTest->assertEqualsNear(testMessage.data(), expected._amounts[i],
+ actual[i]->getNumber().getDouble(status), permittedDiff);
+ }
+}
+
+/**
+ * Runs a single data-driven unit test for unit preferences.
+ *
+ * This is a UParseLineFn as required by u_parseDelimitedFile, intended for
+ * parsing unitPreferencesTest.txt.
+ */
+void unitPreferencesTestDataLineFn(void *context, char *fields[][2], int32_t fieldCount,
+ UErrorCode *pErrorCode) {
+ if (U_FAILURE(*pErrorCode)) return;
+ UnitsTest *unitsTest = (UnitsTest *)context;
+ IcuTestErrorCode status(*unitsTest, "unitPreferencesTestDatalineFn");
+
+ if (!unitsTest->assertTrue(u"unitPreferencesTestDataLineFn expects 9 fields for simple and 11 "
+ u"fields for compound. Other field counts not yet supported. ",
+ fieldCount == 9 || fieldCount == 11)) {
+ return;
+ }
+
+ StringPiece quantity = trimField(fields[0]);
+ StringPiece usage = trimField(fields[1]);
+ StringPiece region = trimField(fields[2]);
+ // Unused // StringPiece inputR = trimField(fields[3]);
+ StringPiece inputD = trimField(fields[4]);
+ StringPiece inputUnit = trimField(fields[5]);
+ ExpectedOutput expected;
+ for (int i = 6; i < fieldCount; i++) {
+ expected.parseOutputField(trimField(fields[i]), status);
+ }
+ if (status.errIfFailureAndReset("parsing unitPreferencesTestData.txt test case: %s", fields[0][0])) {
+ return;
+ }
+
+ DecimalQuantity dqInputD;
+ dqInputD.setToDecNumber(inputD, status);
+ if (status.errIfFailureAndReset("parsing decimal quantity: \"%.*s\"", inputD.length(),
+ inputD.data())) {
+ return;
+ }
+ double inputAmount = dqInputD.toDouble();
+
+ MeasureUnit inputMeasureUnit = MeasureUnit::forIdentifier(inputUnit, status);
+ if (status.errIfFailureAndReset("forIdentifier(\"%.*s\")", inputUnit.length(), inputUnit.data())) {
+ return;
+ }
+
+ unitsTest->logln("Quantity (Category): \"%.*s\", Usage: \"%.*s\", Region: \"%.*s\", "
+ "Input: \"%f %s\", Expected Output: %s",
+ quantity.length(), quantity.data(), usage.length(), usage.data(), region.length(),
+ region.data(), inputAmount, inputMeasureUnit.getIdentifier(),
+ expected.toDebugString().c_str());
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ UnitsRouter router(inputMeasureUnit, region, usage, status);
+ if (status.errIfFailureAndReset("UnitsRouter(<%s>, \"%.*s\", \"%.*s\", status)",
+ inputMeasureUnit.getIdentifier(), region.length(), region.data(),
+ usage.length(), usage.data())) {
+ return;
+ }
+
+ CharString msg(quantity, status);
+ msg.append(" ", status);
+ msg.append(usage, status);
+ msg.append(" ", status);
+ msg.append(region, status);
+ msg.append(" ", status);
+ msg.append(inputD, status);
+ msg.append(" ", status);
+ msg.append(inputMeasureUnit.getIdentifier(), status);
+ if (status.errIfFailureAndReset("Failure before router.route")) {
+ return;
+ }
+ RouteResult routeResult = router.route(inputAmount, nullptr, status);
+ if (status.errIfFailureAndReset("router.route(inputAmount, ...)")) {
+ return;
+ }
+ // TODO: revisit this experimentally chosen precision:
+ checkOutput(unitsTest, msg.data(), expected, routeResult.measures, 0.0000000001);
+}
+
+/**
+ * Parses the format used by unitPreferencesTest.txt, calling lineFn for each
+ * line.
+ *
+ * This is a modified version of u_parseDelimitedFile, customized for
+ * unitPreferencesTest.txt, due to it having a variable number of fields per
+ * line.
+ */
+void parsePreferencesTests(const char *filename, char delimiter, char *fields[][2],
+ int32_t maxFieldCount, UParseLineFn *lineFn, void *context,
+ UErrorCode *pErrorCode) {
+ FileStream *file;
+ char line[10000];
+ char *start, *limit;
+ int32_t i;
+
+ if (U_FAILURE(*pErrorCode)) {
+ return;
+ }
+
+ if (fields == NULL || lineFn == NULL || maxFieldCount <= 0) {
+ *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (filename == NULL || *filename == 0 || (*filename == '-' && filename[1] == 0)) {
+ filename = NULL;
+ file = T_FileStream_stdin();
+ } else {
+ file = T_FileStream_open(filename, "r");
+ }
+ if (file == NULL) {
+ *pErrorCode = U_FILE_ACCESS_ERROR;
+ return;
+ }
+
+ while (T_FileStream_readLine(file, line, sizeof(line)) != NULL) {
+ /* remove trailing newline characters */
+ u_rtrim(line);
+
+ start = line;
+ *pErrorCode = U_ZERO_ERROR;
+
+ /* skip this line if it is empty or a comment */
+ if (*start == 0 || *start == '#') {
+ continue;
+ }
+
+ /* remove in-line comments */
+ limit = uprv_strchr(start, '#');
+ if (limit != NULL) {
+ /* get white space before the pound sign */
+ while (limit > start && U_IS_INV_WHITESPACE(*(limit - 1))) {
+ --limit;
+ }
+
+ /* truncate the line */
+ *limit = 0;
+ }
+
+ /* skip lines with only whitespace */
+ if (u_skipWhitespace(start)[0] == 0) {
+ continue;
+ }
+
+ /* for each field, call the corresponding field function */
+ for (i = 0; i < maxFieldCount; ++i) {
+ /* set the limit pointer of this field */
+ limit = start;
+ while (*limit != delimiter && *limit != 0) {
+ ++limit;
+ }
+
+ /* set the field start and limit in the fields array */
+ fields[i][0] = start;
+ fields[i][1] = limit;
+
+ /* set start to the beginning of the next field, if any */
+ start = limit;
+ if (*start != 0) {
+ ++start;
+ } else {
+ break;
+ }
+ }
+ if (i == maxFieldCount) {
+ *pErrorCode = U_PARSE_ERROR;
+ }
+ int fieldCount = i + 1;
+
+ /* call the field function */
+ lineFn(context, fields, fieldCount, pErrorCode);
+ if (U_FAILURE(*pErrorCode)) {
+ break;
+ }
+ }
+
+ if (filename != NULL) {
+ T_FileStream_close(file);
+ }
+}
+
+/**
+ * Runs data-driven unit tests for unit preferences. It looks for the test cases
+ * in source/test/testdata/cldr/units/unitPreferencesTest.txt, which originates
+ * in CLDR.
+ */
+void UnitsTest::testPreferences() {
+ const char *filename = "unitPreferencesTest.txt";
+ const int32_t maxFields = 11;
+ char *fields[maxFields][2];
+
+ IcuTestErrorCode errorCode(*this, "UnitsTest::testPreferences");
+ const char *sourceTestDataPath = getSourceTestData(errorCode);
+ if (errorCode.errIfFailureAndReset("unable to find the source/test/testdata "
+ "folder (getSourceTestData())")) {
+ return;
+ }
+
+ CharString path(sourceTestDataPath, errorCode);
+ path.appendPathPart("cldr/units", errorCode);
+ path.appendPathPart(filename, errorCode);
+
+ parsePreferencesTests(path.data(), ';', fields, maxFields, unitPreferencesTestDataLineFn, this,
+ errorCode);
+ if (errorCode.errIfFailureAndReset("error parsing %s: %s\n", path.data(), u_errorName(errorCode))) {
+ return;
+ }
+}
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
index 3c4abb0dad0..6b6a02c3962 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
@@ -276,7 +276,6 @@ UObject *UObjectTest::testClassNoClassID(UObject *obj, const char *className, co
#include "unicode/msgfmt.h"
#include "unicode/normlzr.h"
#include "unicode/normalizer2.h"
-#include "unicode/nounit.h"
#include "unicode/numfmt.h"
#include "unicode/parsepos.h"
#include "unicode/plurrule.h"
@@ -373,7 +372,6 @@ void UObjectTest::testIDs()
TESTCLASSID_DEFAULT(Formattable);
TESTCLASSID_FACTORY(MeasureUnit, MeasureUnit::createMeter(status));
- TESTCLASSID_FACTORY(NoUnit, NoUnit::percent().clone());
TESTCLASSID_FACTORY(TimeUnit, TimeUnit::createInstance(TimeUnit::UTIMEUNIT_YEAR, status));
static const UChar SMALL_STR[] = u"QQQ";
TESTCLASSID_CTOR(CurrencyAmount, (1.0, SMALL_STR, status));
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
index b6515ea813c..ad38bdf53a3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* &
TESTCASE_AUTO(TestWCharPointers);
TESTCASE_AUTO(TestNullPointers);
TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf);
+ TESTCASE_AUTO(TestLargeAppend);
TESTCASE_AUTO_END;
}
@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() {
str.insert(2, sub);
assertEquals("", u"abbcdcde", str);
}
+
+void UnicodeStringTest::TestLargeAppend() {
+ if(quick) return;
+
+ IcuTestErrorCode status(*this, "TestLargeAppend");
+ // Make a large UnicodeString
+ int32_t len = 0xAFFFFFF;
+ UnicodeString str;
+ char16_t *buf = str.getBuffer(len);
+ // A fast way to set buffer to valid Unicode.
+ // 4E4E is a valid unicode character
+ uprv_memset(buf, 0x4e, len * 2);
+ str.releaseBuffer(len);
+ UnicodeString dest;
+ // Append it 16 times
+ // 0xAFFFFFF times 16 is 0xA4FFFFF1,
+ // which is greater than INT32_MAX, which is 0x7FFFFFFF.
+ int64_t total = 0;
+ for (int32_t i = 0; i < 16; i++) {
+ dest.append(str);
+ total += len;
+ if (total <= INT32_MAX) {
+ assertFalse("dest is not bogus", dest.isBogus());
+ } else {
+ assertTrue("dest should be bogus", dest.isBogus());
+ }
+ }
+ dest.remove();
+ total = 0;
+ for (int32_t i = 0; i < 16; i++) {
+ dest.append(str);
+ total += len;
+ if (total + len <= INT32_MAX) {
+ assertFalse("dest is not bogus", dest.isBogus());
+ } else if (total <= INT32_MAX) {
+ // Check that a string of exactly the maximum size works
+ UnicodeString str2;
+ int32_t remain = INT32_MAX - total;
+ char16_t *buf2 = str2.getBuffer(remain);
+ if (buf2 == nullptr) {
+ // if somehow memory allocation fail, return the test
+ return;
+ }
+ uprv_memset(buf2, 0x4e, remain * 2);
+ str2.releaseBuffer(remain);
+ dest.append(str2);
+ total += remain;
+ assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total);
+ assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length());
+ assertFalse("dest is not bogus", dest.isBogus());
+
+ // Check that a string size+1 goes bogus
+ str2.truncate(1);
+ dest.append(str2);
+ total++;
+ assertTrue("dest should be bogus", dest.isBogus());
+ } else {
+ assertTrue("dest should be bogus", dest.isBogus());
+ }
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
index 218befdcc68..4a356a92c7a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
@@ -97,6 +97,7 @@ public:
void TestWCharPointers();
void TestNullPointers();
void TestUnicodeStringInsertAppendToSelf();
+ void TestLargeAppend();
};
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
index 1a9bd6b5a7a..9f80466cbe4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
@@ -29,6 +29,7 @@
#include "charstr.h"
#include "cmemory.h"
#include "intltest.h"
+#include "punycode.h"
#include "uparse.h"
class UTS46Test : public IntlTest {
@@ -39,6 +40,9 @@ public:
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
void TestAPI();
void TestNotSTD3();
+ void TestInvalidPunycodeDigits();
+ void TestACELabelEdgeCases();
+ void TestTooLong();
void TestSomeCases();
void IdnaTest();
@@ -82,6 +86,9 @@ void UTS46Test::runIndexedTest(int32_t index, UBool exec, const char *&name, cha
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(TestAPI);
TESTCASE_AUTO(TestNotSTD3);
+ TESTCASE_AUTO(TestInvalidPunycodeDigits);
+ TESTCASE_AUTO(TestACELabelEdgeCases);
+ TESTCASE_AUTO(TestTooLong);
TESTCASE_AUTO(TestSomeCases);
TESTCASE_AUTO(IdnaTest);
TESTCASE_AUTO_END;
@@ -160,7 +167,7 @@ void UTS46Test::TestAPI() {
char buffer[100];
TestCheckedArrayByteSink sink(buffer, UPRV_LENGTHOF(buffer));
errorCode=U_ZERO_ERROR;
- nontrans->labelToUnicodeUTF8(StringPiece(NULL, 5), sink, info, errorCode);
+ nontrans->labelToUnicodeUTF8(StringPiece((const char *)NULL, 5), sink, info, errorCode);
if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || sink.NumberOfBytesWritten()!=0) {
errln("N.labelToUnicodeUTF8(StringPiece(NULL, 5)) did not set illegal-argument-error ",
"or did output something - %s",
@@ -245,6 +252,114 @@ void UTS46Test::TestNotSTD3() {
}
}
+void UTS46Test::TestInvalidPunycodeDigits() {
+ IcuTestErrorCode errorCode(*this, "TestInvalidPunycodeDigits()");
+ LocalPointer<IDNA> idna(IDNA::createUTS46Instance(0, errorCode));
+ if(errorCode.isFailure()) {
+ return;
+ }
+ UnicodeString result;
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--pleP", result, info, errorCode); // P=U+0050
+ assertFalse("nameToUnicode() should succeed",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ assertEquals("normal result", u"ᔼᔴ", result);
+ }
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--pleÑ", result, info, errorCode); // ends with non-ASCII U+0450
+ assertTrue("nameToUnicode() should detect non-ASCII",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+
+ // Test with ASCII characters adjacent to LDH.
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--ple/", result, info, errorCode);
+ assertTrue("nameToUnicode() should detect '/'",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--ple:", result, info, errorCode);
+ assertTrue("nameToUnicode() should detect ':'",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--ple@", result, info, errorCode);
+ assertTrue("nameToUnicode() should detect '@'",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--ple[", result, info, errorCode);
+ assertTrue("nameToUnicode() should detect '['",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--ple`", result, info, errorCode);
+ assertTrue("nameToUnicode() should detect '`'",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+
+ {
+ IDNAInfo info;
+ idna->nameToUnicode(u"xn--ple{", result, info, errorCode);
+ assertTrue("nameToUnicode() should detect '{'",
+ (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+}
+
+void UTS46Test::TestACELabelEdgeCases() {
+ // In IDNA2008, these labels fail the round-trip validation from comparing
+ // the ToUnicode input with the back-to-ToASCII output.
+ IcuTestErrorCode errorCode(*this, "TestACELabelEdgeCases()");
+ LocalPointer<IDNA> idna(IDNA::createUTS46Instance(0, errorCode));
+ if(errorCode.isFailure()) {
+ return;
+ }
+ UnicodeString result;
+ {
+ IDNAInfo info;
+ idna->labelToUnicode(u"xn--", result, info, errorCode);
+ assertTrue("empty xn--", (info.getErrors()&UIDNA_ERROR_INVALID_ACE_LABEL)!=0);
+ }
+ {
+ IDNAInfo info;
+ idna->labelToUnicode(u"xN--ASCII-", result, info, errorCode);
+ assertTrue("nothing but ASCII", (info.getErrors()&UIDNA_ERROR_INVALID_ACE_LABEL)!=0);
+ }
+ {
+ // Different error: The Punycode decoding procedure does not consume the last delimiter
+ // if it is right after the xn-- so the main decoding loop fails because the hyphen
+ // is not a valid Punycode digit.
+ IDNAInfo info;
+ idna->labelToUnicode(u"Xn---", result, info, errorCode);
+ assertTrue("empty Xn---", (info.getErrors()&UIDNA_ERROR_PUNYCODE)!=0);
+ }
+}
+
+void UTS46Test::TestTooLong() {
+ // ICU-13727: Limit input length for n^2 algorithm
+ // where well-formed strings are at most 59 characters long.
+ int32_t count = 50000;
+ UnicodeString s(count, u'a', count); // capacity, code point, count
+ char16_t dest[60000];
+ UErrorCode errorCode = U_ZERO_ERROR;
+ u_strToPunycode(s.getBuffer(), s.length(), dest, UPRV_LENGTHOF(dest), nullptr, &errorCode);
+ assertEquals("encode: expected an error for too-long input", U_INPUT_TOO_LONG_ERROR, errorCode);
+ errorCode = U_ZERO_ERROR;
+ u_strFromPunycode(s.getBuffer(), s.length(), dest, UPRV_LENGTHOF(dest), nullptr, &errorCode);
+ assertEquals("decode: expected an error for too-long input", U_INPUT_TOO_LONG_ERROR, errorCode);
+}
+
struct TestCase {
// Input string and options string (Nontransitional/Transitional/Both).
const char *s, *o;
@@ -491,13 +606,13 @@ static const TestCase testCases[]={
UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN|
UIDNA_ERROR_HYPHEN_3_4 },
{ "a..c", "B", "a..c", UIDNA_ERROR_EMPTY_LABEL },
- { "a.xn--.c", "B", "a..c", UIDNA_ERROR_EMPTY_LABEL },
+ { "a.xn--.c", "B", "a.xn--\\uFFFD.c", UIDNA_ERROR_INVALID_ACE_LABEL },
{ "a.-b.", "B", "a.-b.", UIDNA_ERROR_LEADING_HYPHEN },
{ "a.b-.c", "B", "a.b-.c", UIDNA_ERROR_TRAILING_HYPHEN },
{ "a.-.c", "B", "a.-.c", UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN },
{ "a.bc--de.f", "B", "a.bc--de.f", UIDNA_ERROR_HYPHEN_3_4 },
{ "\\u00E4.\\u00AD.c", "B", "\\u00E4..c", UIDNA_ERROR_EMPTY_LABEL },
- { "\\u00E4.xn--.c", "B", "\\u00E4..c", UIDNA_ERROR_EMPTY_LABEL },
+ { "\\u00E4.xn--.c", "B", "\\u00E4.xn--\\uFFFD.c", UIDNA_ERROR_INVALID_ACE_LABEL },
{ "\\u00E4.-b.", "B", "\\u00E4.-b.", UIDNA_ERROR_LEADING_HYPHEN },
{ "\\u00E4.b-.c", "B", "\\u00E4.b-.c", UIDNA_ERROR_TRAILING_HYPHEN },
{ "\\u00E4.-.c", "B", "\\u00E4.-.c", UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN },
@@ -935,7 +1050,7 @@ void UTS46Test::checkIdnaTestResult(const char *line, const char *type,
if (*status != u'[') {
errln("%s status field does not start with '[': %s\n %s", type, status, line);
}
- if (strcmp(status, u8"[]") != 0) {
+ if (strcmp(status, reinterpret_cast<const char*>(u8"[]")) != 0) {
expectedHasErrors = TRUE;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c b/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
index e074b9020d8..7215c7d2e79 100644
--- a/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
+++ b/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
@@ -15,6 +15,7 @@
*/
#include "cmemory.h"
+#include "cstring.h"
#include "iotest.h"
#include "unicode/ustdio.h"
#include "unicode/ustring.h"
@@ -27,9 +28,18 @@ const char *STANDARD_TEST_FILE = "iotest-c.txt";
const char *STANDARD_TEST_LOCALE = "en_US_POSIX";
+const char *MEDIUMNAME_TEST_FILE =
+"iotest_medium_filename_4567_30_234567_40_234567_50_234567_60_234567_70_234567_80_234567_90_23456_100"
+"_23456_110_23456_120.txt"; // 124 chars
+
+const char *LONGNAME_TEST_FILE =
+"iotest_long_filename_234567_30_234567_40_234567_50_234567_60_234567_70_234567_80_234567_90_23456_100"
+"_23456_110_23456_120_23456_130_23456_140_23456_150_23456_160_23456_170_23456_180_23456_190_23456_200"
+"_23456_210_23456_220_23456_230_23456_240_23456_250_23456_260.txt"; // 264 chars, may be too long on some filesystems
+
#if !UCONFIG_NO_FORMATTING
-static void TestFileFromICU(UFILE *myFile) {
+static void TestFileFromICU(UFILE *myFile, const char* description) {
int32_t n[1];
float myFloat = -1234.0;
int32_t newValuePtr[1];
@@ -48,7 +58,11 @@ static void TestFileFromICU(UFILE *myFile) {
memset(testBuf, '*', UPRV_LENGTHOF(testBuf));
if (myFile == NULL) {
- log_err("Can't write test file.\n");
+ if (uprv_strstr(description, "ULONGNAME")) {
+ log_info("Can't %s test file, OK.\n", description);
+ } else {
+ log_err("Can't %s test file.\n", description);
+ }
return;
}
@@ -314,10 +328,24 @@ static void TestFileFromICU(UFILE *myFile) {
u_fclose(myFile);
}
+enum { kUFilenameBufLen = 296 };
static void TestFile(void) {
-
- log_verbose("Testing u_fopen\n");
- TestFileFromICU(u_fopen(STANDARD_TEST_FILE, "w", STANDARD_TEST_LOCALE, NULL));
+
+ UChar ufilename[kUFilenameBufLen + 1]; // +1 for guaranteed 0 termination
+ ufilename[kUFilenameBufLen] = 0; // ensure 0 termination
+
+ log_verbose("Testing u_fopen with STANDARD_TEST_FILE\n");
+ TestFileFromICU(u_fopen(STANDARD_TEST_FILE, "w", STANDARD_TEST_LOCALE, NULL), "u_fopen STANDARD");
+
+ u_uastrncpy(ufilename, MEDIUMNAME_TEST_FILE, kUFilenameBufLen);
+ log_verbose("Testing u_fopen_u with UMEDIUMNAME_TEST_FILE\n");
+ TestFileFromICU(u_fopen_u(ufilename, "w", STANDARD_TEST_LOCALE, NULL), "u_fopen_u UMEDIUMNAME");
+
+ // The following u_fopen_u will fail to open a file on many filesystems (name too long)
+ // but we want to make sure that at least we do not crash in u_fopen_u name conversion.
+ u_uastrncpy(ufilename, LONGNAME_TEST_FILE, kUFilenameBufLen);
+ log_verbose("Testing u_fopen_u with ULONGNAME_TEST_FILE\n");
+ TestFileFromICU(u_fopen_u(ufilename, "w", STANDARD_TEST_LOCALE, NULL), "u_fopen_u ULONGNAME");
}
static void TestFinit(void) {
@@ -325,7 +353,7 @@ static void TestFinit(void) {
log_verbose("Testing u_finit\n");
standardFile = fopen(STANDARD_TEST_FILE, "w");
- TestFileFromICU(u_finit(standardFile, STANDARD_TEST_LOCALE, NULL));
+ TestFileFromICU(u_finit(standardFile, STANDARD_TEST_LOCALE, NULL), "u_finit STANDARD");
fclose(standardFile);
}
@@ -334,7 +362,7 @@ static void TestFadopt(void) {
log_verbose("Testing u_fadopt\n");
standardFile = fopen(STANDARD_TEST_FILE, "w");
- TestFileFromICU(u_fadopt(standardFile, STANDARD_TEST_LOCALE, NULL));
+ TestFileFromICU(u_fadopt(standardFile, STANDARD_TEST_LOCALE, NULL), "u_fadopt STANDARD");
}
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
index 186d10e17e5..1e7716aa85b 100644
--- a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
@@ -360,6 +360,43 @@ static void U_CALLCONV DataDrivenPrintf(void)
U_CDECL_END
U_CDECL_BEGIN
+static void U_CALLCONV ScanfMultipleIntegers(void)
+{
+#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_FILE_IO
+ UnicodeString input = UNICODE_STRING("[1.2.3]", 7);
+ UnicodeString fmt = UNICODE_STRING("[%d.%d.%d]", 10);
+ DataDrivenLogger logger;
+
+ const int32_t expectedFirst = 1;
+ const int32_t expectedSecond = 2;
+ const int32_t expectedThird = 3;
+ const int32_t expectedResult = 3;
+ int32_t first = 0;
+ int32_t second = 0;
+ int32_t third = 0;
+ int32_t result = u_sscanf_u(input.getBuffer(), fmt.getBuffer(), &first, &second, &third);
+
+ if(first != expectedFirst){
+ log_err("error in scanfmultipleintegers test 'first' Got: %d Exp: %d\n",
+ first, expectedFirst);
+ }
+ if(second != expectedSecond){
+ log_err("error in scanfmultipleintegers test 'second' Got: %d Exp: %d\n",
+ second, expectedSecond);
+ }
+ if(third != expectedThird){
+ log_err("error in scanfmultipleintegers test 'third' Got: %d Exp: %d\n",
+ third, expectedThird);
+ }
+ if(result != expectedResult){
+ log_err("error in scanfmultipleintegers test 'result' Got: %d Exp: %d\n",
+ result, expectedResult);
+ }
+#endif
+}
+U_CDECL_END
+
+U_CDECL_BEGIN
static void U_CALLCONV DataDrivenScanf(void)
{
#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_FILE_IO
@@ -697,6 +734,7 @@ static void addAllTests(TestNode** root) {
addTest(root, &DataDrivenPrintf, "datadriv/DataDrivenPrintf");
addTest(root, &DataDrivenPrintfPrecision, "datadriv/DataDrivenPrintfPrecision");
addTest(root, &DataDrivenScanf, "datadriv/DataDrivenScanf");
+ addTest(root, &ScanfMultipleIntegers, "ScanfMultipleIntegers");
#endif
addStreamTests(root);
}
@@ -853,15 +891,20 @@ int main(int argc, char* argv[])
nerrors = runTestRequest(root, argc, argv);
#if 1
+ static const char* filenamesToRemove[] = { STANDARD_TEST_FILE, MEDIUMNAME_TEST_FILE, LONGNAME_TEST_FILE, nullptr };
+ const char** filenamesToRemovePtr = filenamesToRemove;
+ const char* filenameToRemove;
+ while ((filenameToRemove = *filenamesToRemovePtr++) != nullptr)
{
- FILE* fileToRemove = fopen(STANDARD_TEST_FILE, "r");
+
+ FILE* fileToRemove = fopen(filenameToRemove, "r");
/* This should delete any temporary files. */
if (fileToRemove) {
fclose(fileToRemove);
- log_verbose("Deleting: %s\n", STANDARD_TEST_FILE);
- if (remove(STANDARD_TEST_FILE) != 0) {
+ log_verbose("Deleting: %s\n", filenameToRemove);
+ if (remove(filenameToRemove) != 0) {
/* Maybe someone didn't close the file correctly. */
- fprintf(stderr, "FAIL: Could not delete %s\n", STANDARD_TEST_FILE);
+ fprintf(stderr, "FAIL: Could not delete %s\n", filenameToRemove);
nerrors += 1;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.h b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.h
index 514575e0dc3..d9840d7b0d9 100644
--- a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.h
+++ b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.h
@@ -36,6 +36,8 @@ U_CDECL_BEGIN
extern const UChar NEW_LINE[];
extern const char C_NEW_LINE[];
extern const char *STANDARD_TEST_FILE;
+extern const char *MEDIUMNAME_TEST_FILE;
+extern const char *LONGNAME_TEST_FILE;
U_CDECL_END
#define STANDARD_TEST_NUM_RANGE 1000
diff --git a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj
index 4de454058b2..7ed7342aee0 100644
--- a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj b/Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj
index 5a0b943d64b..f29232bf630 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj
@@ -49,22 +49,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj b/Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj
index e2a5499b383..5936d5eed82 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj
@@ -49,22 +49,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp
index d0a729550fc..facb39ac352 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2014,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h
index b07a7e07c59..0dd6ec9f21b 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2016,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/Makefile.in
index d216155e6fb..8ec01524a98 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/ubrkperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/ReadMe.txt b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/ReadMe.txt
index 968c85ba732..b73f7081e7f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/ReadMe.txt
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/ReadMe.txt
@@ -1,6 +1,6 @@
***********************************************************************
* Copyright (C) 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2010,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h
index f94f314583e..1dce508e69c 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2010,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h
index 82304db605d..406aedc1b37 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2010,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h
index e30fdc7524b..d1f290d45b8 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2010,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/Makefile.in
index faef51acd32..cb7c2f15943 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/Makefile.in
@@ -1,7 +1,7 @@
## Makefile.in for ICU tests
##
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 1999-2011, International Business Machines Corporation and
## others. All Rights Reserved.
@@ -22,7 +22,7 @@ subdir = test/perf
## Files to remove for 'make clean'
CLEANFILES = *~
-SUBDIRS = collationperf collperf collperf2 charperf dicttrieperf normperf ubrkperf unisetperf usetperf ustrperf utfperf utrie2perf DateFmtPerf howExpensiveIs
+SUBDIRS = collationperf collperf collperf2 charperf dicttrieperf localecanperf normperf ubrkperf unisetperf usetperf ustrperf utfperf utrie2perf DateFmtPerf howExpensiveIs
# Subdirs that support 'xperf'
XSUBDIRS = DateFmtPerf
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/README b/Build/source/libs/icu/icu-src/source/test/perf/README
index aaf0d3b2590..75c5cda302e 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/README
+++ b/Build/source/libs/icu/icu-src/source/test/perf/README
@@ -1,5 +1,5 @@
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (C) 2008-2013, International Business Machines
Corporation and others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf.pl
index 822d2698755..2cab9a31db4 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf_r.pl
index 85fecda9935..c567813ece7 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/charperf/CharPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/charperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/charperf/Makefile.in
index a40e517cde3..d755c1952c7 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/charperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/charperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/charperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp
index a1dda4a67b8..6fc576cd235 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h b/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h
index ab794b60919..bb93c072ab2 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h
@@ -1,7 +1,7 @@
/*
**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
**********************************************************************
**********************************************************************
* Copyright (c) 2002-2006, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj
index 1128037fb7c..a2b438233d3 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/CollPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/CollPerf.pl
index 3e11d2119a2..ad7db500db7 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/CollPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/CollPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# * COPYRIGHT:
# * Copyright (c) 2002-2013, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/Makefile.in
index 13ec1a73dc8..a19f1ea8c0c 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/collationperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
index 33e3e6c696d..a1d85561bcd 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* COPYRIGHT:
@@ -110,31 +110,31 @@ char * opt_fName = 0;
const char * opt_locale = "en_US";
int opt_langid = 0; // Defaults to value corresponding to opt_locale.
char * opt_rules = 0;
-UBool opt_help = FALSE;
+UBool opt_help = false;
int opt_loopCount = 1;
int opt_iLoopCount = 1;
-UBool opt_terse = FALSE;
-UBool opt_qsort = FALSE;
-UBool opt_binsearch = FALSE;
-UBool opt_icu = TRUE;
-UBool opt_win = FALSE; // Run with Windows native functions.
-UBool opt_unix = FALSE; // Run with UNIX strcoll, strxfrm functions.
-UBool opt_uselen = FALSE;
-UBool opt_usekeys = FALSE;
-UBool opt_strcmp = FALSE;
-UBool opt_strcmpCPO = FALSE;
-UBool opt_norm = FALSE;
-UBool opt_keygen = FALSE;
-UBool opt_french = FALSE;
-UBool opt_frenchoff = FALSE;
-UBool opt_shifted = FALSE;
-UBool opt_lower = FALSE;
-UBool opt_upper = FALSE;
-UBool opt_case = FALSE;
+UBool opt_terse = false;
+UBool opt_qsort = false;
+UBool opt_binsearch = false;
+UBool opt_icu = true;
+UBool opt_win = false; // Run with Windows native functions.
+UBool opt_unix = false; // Run with UNIX strcoll, strxfrm functions.
+UBool opt_uselen = false;
+UBool opt_usekeys = false;
+UBool opt_strcmp = false;
+UBool opt_strcmpCPO = false;
+UBool opt_norm = false;
+UBool opt_keygen = false;
+UBool opt_french = false;
+UBool opt_frenchoff = false;
+UBool opt_shifted = false;
+UBool opt_lower = false;
+UBool opt_upper = false;
+UBool opt_case = false;
int opt_level = 0;
-UBool opt_keyhist = FALSE;
-UBool opt_itertest = FALSE;
-UBool opt_dump = FALSE;
+UBool opt_keyhist = false;
+UBool opt_itertest = false;
+UBool opt_dump = false;
@@ -233,13 +233,13 @@ UBool ProcessOptions(int argc, const char **argv, OptSpec opts[])
if (strcmp(pOpt->name, pArgName) == 0) {
switch (pOpt->type) {
case OptSpec::FLAG:
- *(UBool *)(pOpt->pVar) = TRUE;
+ *(UBool *)(pOpt->pVar) = true;
break;
case OptSpec::STRING:
argNum ++;
if (argNum >= argc) {
fprintf(stderr, "value expected for \"%s\" option.\n", pOpt->name);
- return FALSE;
+ return false;
}
*(const char **)(pOpt->pVar) = argv[argNum];
break;
@@ -247,13 +247,13 @@ UBool ProcessOptions(int argc, const char **argv, OptSpec opts[])
argNum ++;
if (argNum >= argc) {
fprintf(stderr, "value expected for \"%s\" option.\n", pOpt->name);
- return FALSE;
+ return false;
}
char *endp;
i = strtol(argv[argNum], &endp, 0);
if (endp == argv[argNum]) {
fprintf(stderr, "integer value expected for \"%s\" option.\n", pOpt->name);
- return FALSE;
+ return false;
}
*(int *)(pOpt->pVar) = i;
}
@@ -263,10 +263,10 @@ UBool ProcessOptions(int argc, const char **argv, OptSpec opts[])
if (pOpt->name == 0)
{
fprintf(stderr, "Unrecognized option \"%s\"\n", pArgName);
- return FALSE;
+ return false;
}
}
-return TRUE;
+return true;
}
//---------------------------------------------------------------------------------------
@@ -425,7 +425,7 @@ void doKeyGen()
unsigned long elapsedTime = timeGetTime() - startTime;
int ns = (int)(float(1000000) * (float)elapsedTime / (float)(adj_loopCount*gNumFileLines));
- if (opt_terse == FALSE) {
+ if (opt_terse == false) {
printf("Sort Key Generation: total # of keys = %d\n", loops*gNumFileLines);
printf("Sort Key Generation: time per key = %d ns\n", ns);
}
@@ -448,7 +448,7 @@ void doKeyGen()
}
}
- if (opt_terse == FALSE) {
+ if (opt_terse == false) {
printf("Key Length / character = %f\n", (float)totalKeyLen / (float)totalChars);
} else {
printf("%f, ", (float)totalKeyLen / (float)totalChars);
@@ -610,7 +610,7 @@ void doBinarySearch()
r = CompareStringW(gWinLCID, 0, (gSortedLines[line])->name, lineLen, (gSortedLines[guess])->name, guessLen);
}
if (r == 0) {
- if (opt_terse == FALSE) {
+ if (opt_terse == false) {
fprintf(stderr, "Error returned from Windows CompareStringW.\n");
}
exit(-1);
@@ -679,7 +679,7 @@ void doBinarySearch()
}
int ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount);
- if (opt_terse == FALSE) {
+ if (opt_terse == false) {
printf("binary search: total # of string compares = %d\n", gCount);
printf("binary search: compares per loop = %d\n", gCount / loops);
printf("binary search: time per compare = %d ns\n", ns);
@@ -763,7 +763,7 @@ void doQSort() {
unsigned long elapsedTime = timeGetTime() - startTime;
int ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount);
- if (opt_terse == FALSE) {
+ if (opt_terse == false) {
printf("qsort: total # of string compares = %d\n", gCount);
printf("qsort: time per compare = %d ns\n", ns);
} else {
@@ -925,7 +925,7 @@ void doForwardIterTest(UBool haslen) {
int count5 = 5;
strindex = 0;
ucol_setOffset(iter, strindex, &error);
- while (TRUE) {
+ while (true) {
if (ucol_next(iter, &error) == UCOL_NULLORDER) {
break;
}
@@ -954,7 +954,7 @@ void doForwardIterTest(UBool haslen) {
int count5 = 5;
strindex = 0;
ucol_setOffset(iter, strindex, &error);
- while (TRUE) {
+ while (true) {
tempgCount ++;
count5 --;
if (count5 == 0) {
@@ -1088,7 +1088,7 @@ void doBackwardIterTest(UBool haslen) {
int count5 = 5;
strindex = 5;
ucol_setOffset(iter, strindex, &error);
- while (TRUE) {
+ while (true) {
if (ucol_previous(iter, &error) == UCOL_NULLORDER) {
break;
}
@@ -1117,7 +1117,7 @@ void doBackwardIterTest(UBool haslen) {
int count5 = 5;
strindex = 5;
ucol_setOffset(iter, strindex, &error);
- while (TRUE) {
+ while (true) {
tempgCount ++;
count5 --;
if (count5 == 0) {
@@ -1229,14 +1229,14 @@ private:
};
UCharFile::UCharFile(const char * fileName) {
- fEof = FALSE;
- fError = FALSE;
+ fEof = false;
+ fError = false;
fName = fileName;
fFile = fopen(fName, "rb");
fPending2ndSurrogate = 0;
if (fFile == NULL) {
fprintf(stderr, "Can not open file \"%s\"\n", opt_fName);
- fError = TRUE;
+ fError = true;
return;
}
//
@@ -1279,7 +1279,7 @@ UChar UCharFile::get() {
c = cL | (cH << 8);
if (cH == EOF) {
c = 0;
- fEof = TRUE;
+ fEof = true;
}
break;
}
@@ -1291,7 +1291,7 @@ UChar UCharFile::get() {
c = cL | (cH << 8);
if (cL == EOF) {
c = 0;
- fEof = TRUE;
+ fEof = true;
}
break;
}
@@ -1306,7 +1306,7 @@ UChar UCharFile::get() {
int ch = fgetc(fFile); // Note: c and ch are separate cause eof test doesn't work on UChar type.
if (ch == EOF) {
c = 0;
- fEof = TRUE;
+ fEof = true;
break;
}
@@ -1324,7 +1324,7 @@ UChar UCharFile::get() {
else if (ch >= 0xC0) {nBytes=2;}
else {
fprintf(stderr, "utf-8 encoded file contains corrupt data.\n");
- fError = TRUE;
+ fError = true;
return 0;
}
@@ -1335,7 +1335,7 @@ UChar UCharFile::get() {
bytes[i] = fgetc(fFile);
if (bytes[i] < 0x80 || bytes[i] >= 0xc0) {
fprintf(stderr, "utf-8 encoded file contains corrupt data.\n");
- fError = TRUE;
+ fError = true;
return 0;
}
}
@@ -1426,14 +1426,14 @@ UCollator *openRulesCollator() {
//
//----------------------------------------------------------------------------------------
int main(int argc, const char** argv) {
- if (ProcessOptions(argc, argv, opts) != TRUE || opt_help || opt_fName == 0) {
+ if (ProcessOptions(argc, argv, opts) != true || opt_help || opt_fName == 0) {
printf(gUsageString);
exit (1);
}
// Make sure that we've only got one API selected.
- if (opt_unix || opt_win) opt_icu = FALSE;
- if (opt_unix) opt_win = FALSE;
+ if (opt_unix || opt_win) opt_icu = false;
+ if (opt_unix) opt_win = false;
//
// Set up an ICU collator
@@ -1451,10 +1451,10 @@ int main(int argc, const char** argv) {
return -1;
}
}
- if (status==U_USING_DEFAULT_WARNING && opt_terse==FALSE) {
+ if (status==U_USING_DEFAULT_WARNING && opt_terse==false) {
fprintf(stderr, "Warning, U_USING_DEFAULT_WARNING for %s\n", opt_locale);
}
- if (status==U_USING_FALLBACK_WARNING && opt_terse==FALSE) {
+ if (status==U_USING_FALLBACK_WARNING && opt_terse==false) {
fprintf(stderr, "Warning, U_USING_FALLBACK_ERROR for %s\n", opt_locale);
}
@@ -1589,16 +1589,16 @@ int main(int argc, const char** argv) {
buf[column++] = c;
if (column >= 1023)
{
- static UBool warnFlag = TRUE;
+ static UBool warnFlag = true;
if (warnFlag) {
fprintf(stderr, "Warning - file line longer than 1023 chars truncated.\n");
- warnFlag = FALSE;
+ warnFlag = false;
}
column--;
}
}
- if (opt_terse == FALSE) {
+ if (opt_terse == false) {
printf("file \"%s\", %d lines.\n", opt_fName, gNumFileLines);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/readme.html b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/readme.html
index 07fb7a7e698..a0950a73a68 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/readme.html
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/readme.html
@@ -4,7 +4,7 @@
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
<meta name="Copyright" content="Copyright (C) 2016 and later: Unicode, Inc. and others.
- License & terms of use: http://www.unicode.org/copyright.html#License
+ License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2002-2008, International Business Machines Corporation and others. All Rights Reserved.">
<META NAME="GENERATOR" Content="Visual Page 2.0 for Windows">
<TITLE>collperf</TITLE>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf.pl
index 73b8048aed2..972b9c7276f 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf_r.pl
index 83dc933c769..ef2315a075f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf/CollPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/collperf/Makefile.in
index d3fc8813699..8e3c158d3b5 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/collperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp
index 137b31af3c0..8622ea365f2 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
***********************************************************************
***********************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj
index 807894d60fe..4eaae91f22f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/CollPerf2_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/CollPerf2_r.pl
index b957ac3a03e..71813c6fc68 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/CollPerf2_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/CollPerf2_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/Makefile.in
index f3f74bea279..af4e0d20ec8 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/collperf2
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2013, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp
index 35201dcae9c..afb90c5b468 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2013-2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj
index cb6cb110750..42422e26ef1 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/ConvPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/convperf/ConvPerf_r.pl
index 20a311e4dbd..0213ffa2579 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/ConvPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/ConvPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/convperf/Makefile.in
index 27190760b25..813f024a0d0 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/Makefile.in
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Makefile.in for ICU - test/perf/collperf
## Copyright (c) 2001-2011, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp
index d5437487346..072011112ab 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h
index cc1e3d5f1ce..e185c908d3b 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj
index 41bdd92f7e2..3a875328a10 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_ansi.pl b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_ansi.pl
index 406bfeb365b..2427eaa908b 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_ansi.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_ansi.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_iml.pl b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_iml.pl
index 0ca20aa1cb3..3c9996b5792 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_iml.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf_iml.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h b/Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h
index 0ff85631424..3afaa1db831 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2003,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/Makefile.in
index d95ec922487..005604bf188 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/dicttrieperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp
index 661c6e8b856..7d70233069e 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (C) 2010-2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in
index a50642e3834..ad0cec88d05 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/howExpensiveIs
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2012, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
index fb16e4f672d..7fe13cbeeb6 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2011-2016,International Business Machines
@@ -500,7 +500,7 @@ protected:
case kApplyPattern:
{
UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus);
- unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
+ unum_applyPattern(fmt, false, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
return fmt;
}
case kGroupOff:
@@ -512,7 +512,7 @@ protected:
case kApplyGroupOff:
{
UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus);
- unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
+ unum_applyPattern(fmt, false, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO);
return fmt;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt
index 64eb0b12c21..cd056573f1d 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt
@@ -1,6 +1,6 @@
# -*- mode: org -*-
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (C) 2012 International Business Machines Corporation and Others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
index 6190de75ac7..0478b6d6bf2 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2011-2012,International Business Machines
@@ -190,12 +190,12 @@ U_CAPI double uprv_getMeanTime(double *times, uint32_t *timeCount, double *margi
return meanTime;
}
-UBool calcSieveTime = FALSE;
+UBool calcSieveTime = false;
double meanSieveTime = 0.0;
double meanSieveME = 0.0;
U_CAPI double uprv_getSieveTime(double *marginOfError) {
- if(calcSieveTime==FALSE) {
+ if(!calcSieveTime) {
#define SAMPLES 50
uint32_t samples = SAMPLES;
double times[SAMPLES];
@@ -208,7 +208,7 @@ U_CAPI double uprv_getSieveTime(double *marginOfError) {
}
meanSieveTime = uprv_getMeanTime(times, &samples,&meanSieveME);
- calcSieveTime=TRUE;
+ calcSieveTime=true;
}
if(marginOfError!=NULL) {
*marginOfError = meanSieveME;
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h
index 168f82ecd22..00dbaa9ba09 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2011-2012,International Business Machines
@@ -20,7 +20,7 @@
/**
* Calculate the standardized sieve time (1 run)
*/
-U_INTERNAL double uprv_calcSieveTime(void);
+U_CAPI double uprv_calcSieveTime(void);
/**
* Calculate the mean time, with margin of error
@@ -29,13 +29,13 @@ U_INTERNAL double uprv_calcSieveTime(void);
* @param marginOfError out parameter: gives +/- margin of err at 95% confidence
* @return the mean time, or negative if error/imprecision.
*/
-U_INTERNAL double uprv_getMeanTime(double *times, uint32_t *timeCount, double *marginOfError);
+U_CAPI double uprv_getMeanTime(double *times, uint32_t *timeCount, double *marginOfError);
/**
* Get the standardized sieve time. (Doesn't recalculate if already computed.
* @param marginOfError out parameter: gives +/- margin of error at 95% confidence.
* @return the mean time, or negative if error/imprecision.
*/
-U_INTERNAL double uprv_getSieveTime(double *marginOfError);
+U_CAPI double uprv_getSieveTime(double *marginOfError);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/icuperf2report.xsl b/Build/source/libs/icu/icu-src/source/test/perf/icuperf2report.xsl
index 73c28154396..b2bc90bc94d 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/icuperf2report.xsl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/icuperf2report.xsl
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2016 and later: Unicode, Inc. and others. -->
-<!-- License & terms of use: http://www.unicode.org/copyright.html#License -->
+<!-- License & terms of use: http://www.unicode.org/copyright.html -->
<!-- Copyright (C) 2011 IBM Corporation and Others. All Rights Reserved. -->
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp
index 39aefe98764..96b8773e3b4 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp
@@ -1,7 +1,7 @@
/***************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
****************************************************************************/
/***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h
index 83fe8fba78a..95a438594ea 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
***************************************************************************
***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp
index b3124326ee0..a687068b027 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp
@@ -1,7 +1,7 @@
/*
**************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* Copyright (C) 2003-2013, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h
index 038a01fac4f..2a839068c91 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h
@@ -1,7 +1,7 @@
/*
**********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
**********************************************************************
**********************************************************************
* Copyright (C) 2003-2013, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/leperf/Makefile.in
index d7f00a31b22..0538e20ee99 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/collperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2013, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp
index 28866ab0042..a7fe7e21b1d 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h
index 6f3f95d39bf..2f113cd0930 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h
@@ -3,7 +3,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp
index f143d9384e9..23ae00ee424 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h
index f50a62afd12..14f5bfb48cb 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp
index 00314691474..62f7aeea920 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h
index 3ab38ec9e7b..f9403cd25e3 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp
index da06afb016f..943befa82e1 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp
@@ -1,7 +1,7 @@
/**************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
***************************************************************************
***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h
index 16bf92b1b7e..a90057ffb5a 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
***************************************************************************
***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp
index 1639102e045..9fa8a5e4e2f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp
@@ -1,7 +1,7 @@
/**************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
***************************************************************************
***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp
index 25e6ea9a213..75f3a551436 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp
@@ -1,7 +1,7 @@
/**************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
***************************************************************************
***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h
index 73ec116487d..8e4d3d8d0ff 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h
@@ -1,7 +1,7 @@
/***************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
****************************************************************************/
/***************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp b/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp
index 1ad93992c75..e0f595de365 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h b/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h
index 2f01e73dc81..298d9b8197a 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h
@@ -1,7 +1,7 @@
/*
*
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
* (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
*
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/Makefile.in
new file mode 100644
index 00000000000..e681eff4c11
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/Makefile.in
@@ -0,0 +1,79 @@
+## Makefile.in for ICU - test/perf/localecanperf
+## Copyright (C) 2020 and later: Unicode, Inc. and others.
+## License & terms of use: http://www.unicode.org/copyright.html
+
+## Source directory information
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+
+top_builddir = ../../..
+
+include $(top_builddir)/icudefs.mk
+
+## Build directory information
+subdir = test/perf/localecanperf
+
+## Extra files to remove for 'make clean'
+CLEANFILES = *~ $(DEPS)
+
+## Target information
+TARGET = localecanperf
+
+CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw
+LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M)
+
+OBJECTS = localecanperf.o
+
+DEPS = $(OBJECTS:.o=.d)
+
+## List of phony targets
+.PHONY : all all-local install install-local clean clean-local \
+distclean distclean-local dist dist-local check check-local
+
+## Clear suffix list
+.SUFFIXES :
+
+## List of standard targets
+all: all-local
+install: install-local
+clean: clean-local
+distclean : distclean-local
+dist: dist-local
+check: all check-local
+
+all-local: $(TARGET)
+
+install-local:
+
+dist-local:
+
+clean-local:
+ test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
+ $(RMV) $(OBJECTS) $(TARGET)
+
+distclean-local: clean-local
+ $(RMV) Makefile
+
+check-local: all-local
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(TARGET) : $(OBJECTS)
+ $(LINK.cc) -o $@ $^ $(LIBS)
+ $(POST_BUILD_STEP)
+
+invoke:
+ ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) $(INVOCATION)
+
+ifeq (,$(MAKECMDGOALS))
+-include $(DEPS)
+else
+ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
+ifneq ($(patsubst %install,,$(MAKECMDGOALS)),)
+-include $(DEPS)
+endif
+endif
+endif
+
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/localecanperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/localecanperf.cpp
new file mode 100644
index 00000000000..9e561344ae9
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/localecanperf.cpp
@@ -0,0 +1,94 @@
+/*
+***********************************************************************
+* © 2020 and later: Unicode, Inc. and others.
+* License & terms of use: http://www.unicode.org/copyright.html
+***********************************************************************
+*/
+
+#include <algorithm>
+#include <vector>
+#include <string>
+
+#include "unicode/locid.h"
+#include "unicode/uperf.h"
+
+//
+// Test case ...
+//
+class LocaleCreateCanonical : public UPerfFunction {
+public:
+ LocaleCreateCanonical() {
+ testCases.push_back("en");
+ testCases.push_back("en-US");
+ testCases.push_back("ja-JP");
+ testCases.push_back("zh-Hant-CN");
+ testCases.push_back("hy-SU");
+ }
+ ~LocaleCreateCanonical() { }
+ virtual void call(UErrorCode* /* status */)
+ {
+ std::for_each(testCases.begin(), testCases.end(),
+ [](const std::string& s)
+ {
+ Locale l = Locale::createCanonical(s.c_str());
+ });
+ }
+ virtual long getOperationsPerIteration() { return testCases.size(); }
+ virtual long getEventsPerIteration() { return testCases.size(); }
+private:
+ std::vector<std::string> testCases;
+};
+
+class LocaleCanonicalizationPerfTest : public UPerfTest
+{
+public:
+ LocaleCanonicalizationPerfTest(
+ int32_t argc, const char *argv[], UErrorCode &status)
+ : UPerfTest(argc, argv, nullptr, 0, "localecanperf", status)
+ {
+ }
+
+ ~LocaleCanonicalizationPerfTest()
+ {
+ }
+ virtual UPerfFunction* runIndexedTest(
+ int32_t index, UBool exec, const char *&name, char *par = nullptr);
+
+private:
+ UPerfFunction* TestLocaleCreateCanonical()
+ {
+ return new LocaleCreateCanonical();
+ }
+};
+
+UPerfFunction*
+LocaleCanonicalizationPerfTest::runIndexedTest(
+ int32_t index, UBool exec, const char *&name, char *par /*= nullptr*/)
+{
+ (void)par;
+ TESTCASE_AUTO_BEGIN;
+
+ TESTCASE_AUTO(TestLocaleCreateCanonical);
+
+ TESTCASE_AUTO_END;
+ return nullptr;
+}
+
+int main(int argc, const char *argv[])
+{
+ UErrorCode status = U_ZERO_ERROR;
+ LocaleCanonicalizationPerfTest test(argc, argv, status);
+
+ if (U_FAILURE(status)){
+ fprintf(stderr, "The error is %s\n", u_errorName(status));
+ test.usage();
+ return status;
+ }
+
+ if (test.run() == FALSE){
+ test.usage();
+ fprintf(stderr, "FAILED: Tests could not be run please check the arguments.\n");
+ return -1;
+ }
+ return 0;
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/runTest.sh b/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/runTest.sh
new file mode 100755
index 00000000000..b72e5af59fa
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/perf/localecanperf/runTest.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Copyright (C) 2020 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# run the test with 1, 10, 100, 1000, 10000, 100000 iterations
+LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH:../../../lib:../../../stubdata:../../../tools/ctestfw:$LD_LIBRARY_PATH \
+ ./localecanperf TestLocaleCreateCanonical -i 1
+
+LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH:../../../lib:../../../stubdata:../../../tools/ctestfw:$LD_LIBRARY_PATH \
+ ./localecanperf TestLocaleCreateCanonical -i 10
+
+LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH:../../../lib:../../../stubdata:../../../tools/ctestfw:$LD_LIBRARY_PATH \
+ ./localecanperf TestLocaleCreateCanonical -i 100
+
+LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH:../../../lib:../../../stubdata:../../../tools/ctestfw:$LD_LIBRARY_PATH \
+ ./localecanperf TestLocaleCreateCanonical -i 1000
+
+LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH:../../../lib:../../../stubdata:../../../tools/ctestfw:$LD_LIBRARY_PATH \
+ ./localecanperf TestLocaleCreateCanonical -i 10000
+
+LD_LIBRARY_PATH=lib:stubdata:tools/ctestfw:../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH:../../../lib:../../../stubdata:../../../tools/ctestfw:$LD_LIBRARY_PATH \
+ ./localecanperf TestLocaleCreateCanonical -i 100000
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/normperf/Makefile.in
index bc63e822686..3ed7e3d28dd 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/normperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl
index f079e6df2e0..a37e28cd7ed 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * Copyright (c) 2002-2013, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl
index cb7139f230b..673afef1527 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp
index a4ebf26c9b6..a53fb7373e4 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2010,International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj
index 689ce0693a4..b3146ea0389 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj
@@ -50,22 +50,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp
index 0cc65b5205c..8ec29d5fde3 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2016, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
index c05715442d3..b29a7bc99c1 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2011, International Business Machines
@@ -47,7 +47,7 @@ private:
public:
virtual void call(UErrorCode* status){
- if(line_mode==TRUE){
+ if(line_mode){
if(uselen){
for(int32_t i = 0; i< numLines; i++){
retVal = (*fn)(lines[i].name,lines[i].len,mode, options, status);
@@ -68,7 +68,7 @@ public:
}
virtual long getOperationsPerIteration(){
- if(line_mode==TRUE){
+ if(line_mode){
int32_t totalChars=0;
for(int32_t i =0; i< numLines; i++){
totalChars+= lines[i].len;
@@ -86,7 +86,7 @@ public:
mode = _mode;
src = NULL;
srcLen = 0;
- line_mode = TRUE;
+ line_mode = true;
}
QuickCheckPerfFunction(QuickCheckFn func, const UChar* source,int32_t sourceLen, UNormalizationMode _mode, int32_t opts, UBool _uselen) : options(opts) {
fn = func;
@@ -96,7 +96,7 @@ public:
mode = _mode;
src = source;
srcLen = sourceLen;
- line_mode = FALSE;
+ line_mode = false;
}
};
@@ -118,7 +118,7 @@ private:
public:
virtual void call(UErrorCode* status){
- if(line_mode==TRUE){
+ if(line_mode){
if(uselen){
for(int32_t i = 0; i< numLines; i++){
retVal = (*fn)(lines[i].name,lines[i].len,pDest,destLen, options, status);
@@ -137,7 +137,7 @@ public:
}
}
virtual long getOperationsPerIteration(){
- if(line_mode ==TRUE){
+ if(line_mode){
int32_t totalChars=0;
for(int32_t i =0; i< numLines; i++){
totalChars+= lines[i].len;
@@ -156,7 +156,7 @@ public:
pDest = dest;
src = NULL;
srcLen = 0;
- line_mode = TRUE;
+ line_mode = true;
}
NormPerfFunction(NormFn func, int32_t opts, const UChar* source,int32_t sourceLen,UBool _uselen) : options(opts) {
fn = func;
@@ -167,7 +167,7 @@ public:
pDest = (UChar*) malloc(destLen * U_SIZEOF_UCHAR);
src = source;
srcLen = sourceLen;
- line_mode = FALSE;
+ line_mode = false;
}
~NormPerfFunction(){
if(dest != pDest){
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj
index 62c9aad1d42..ee8f01e62f7 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/simplenormperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/normperf/simplenormperf.cpp
index b6865ba1eca..2f7341b71f6 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/simplenormperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/simplenormperf.cpp
@@ -255,7 +255,7 @@ double NormalizeUTF16::call(int32_t iterations, int32_t pieceLength) {
UErrorCode errorCode = U_ZERO_ERROR;
utimer_getTime(&startTime);
for (int32_t i = 0; i < iterations; ++i) {
- piece.setTo(FALSE, s + start, pieceLength);
+ piece.setTo(false, s + start, pieceLength);
norm2.normalize(piece, dest, errorCode);
start = (start + pieceLength) % limit;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Common.pl.template b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Common.pl.template
index 0bee8b092c0..8bad2b119f6 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Common.pl.template
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Common.pl.template
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm
index 119cfd52e64..82acd2d99ea 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm
@@ -1,7 +1,7 @@
#!/usr/local/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Format.pm b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Format.pm
index d06448f59ef..b53b784cd14 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Format.pm
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Format.pm
@@ -1,7 +1,7 @@
#!/usr/local/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm
index d7b8837e3b8..3e74bc966fd 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm
@@ -2,7 +2,7 @@
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/PerfFramework.pm b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/PerfFramework.pm
index f6d55406f6c..59e0f1b901d 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/PerfFramework.pm
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/PerfFramework.pm
@@ -1,7 +1,7 @@
#!/usr/local/bin/perl
# ***********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ***********************************************************************
# ***********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/Makefile.in
index d42dcb720af..1a4982be77c 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/strsrchperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2008-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/StrSrchPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/StrSrchPerf_r.pl
index 7b16dc8ade6..349efa0f716 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/StrSrchPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/StrSrchPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp
index 406e398a06a..cc674862348 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp
@@ -1,6 +1,6 @@
/************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*************************************************************************
********************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h
index 81b83bdf3d1..04ee4033f8a 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h
@@ -1,6 +1,6 @@
/************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
*************************************************************************
********************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj
index 89f2ccdbc9c..f5988dfa721 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/Makefile.in
index 68f2d25251e..c992705d212 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/Makefile.in
@@ -1,5 +1,5 @@
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Makefile.in for ICU - test/perf/ubrkperf
## Copyright (c) 2001-2011, International Business Machines Corporation and
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl
index de5c9bebc0d..34c5f1fc9c6 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * Copyright (c) 2002-2013, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp
index 361a14baadf..a8d2bd1197d 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
***********************************************************************
***********************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h
index bc028da49b0..651228f8bdb 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
**********************************************************************
* Copyright (c) 2002-2011, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj
index f38d9b4d503..87f23eaeba8 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
index 19c472172ed..7ac6e341e5f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
***********************************************************************
***********************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp
index d79468b2e50..f16db53b205 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp
@@ -2,7 +2,7 @@
*******************************************************************************
*
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*
*******************************************************************************
*******************************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/Makefile.in
index 121441a0a1f..6a025292371 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/unisetperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp
index e1eb64ee8ab..59746bc46b0 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp
@@ -1,7 +1,7 @@
/*
*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* Copyright (C) 2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.bat b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.bat
index fd2447418e7..1adb0135d45 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.bat
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.bat
@@ -1,5 +1,5 @@
rem Copyright (C) 2016 and later: Unicode, Inc. and others.
-rem License & terms of use: http://www.unicode.org/copyright.html#License
+rem License & terms of use: http://www.unicode.org/copyright.html
rem Copyright (c) 2007, International Business Machines Corporation and
rem others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.sh b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.sh
index 20a15a2df53..bfe0ae8ed69 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.sh
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/contperf.sh
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2007, International Business Machines Corporation and
# others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.bat b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.bat
index 8df7e3e6394..91ecd91b118 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.bat
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.bat
@@ -1,5 +1,5 @@
rem Copyright (C) 2016 and later: Unicode, Inc. and others.
-rem License & terms of use: http://www.unicode.org/copyright.html#License
+rem License & terms of use: http://www.unicode.org/copyright.html
rem Copyright (c) 2007, International Business Machines Corporation and
rem others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.sh b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.sh
index a1cb5ebe6a5..b620aa28e08 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.sh
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span16perf.sh
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2007, International Business Machines Corporation and
# others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.bat b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.bat
index 2e1561b888b..48460000764 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.bat
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.bat
@@ -1,5 +1,5 @@
rem Copyright (C) 2016 and later: Unicode, Inc. and others.
-rem License & terms of use: http://www.unicode.org/copyright.html#License
+rem License & terms of use: http://www.unicode.org/copyright.html
rem Copyright (c) 2007, International Business Machines Corporation and
rem others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.sh b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.sh
index fce51e2b8d0..200303f8992 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.sh
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/span8perf.sh
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2007, International Business Machines Corporation and
# others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp
index ad5afdea180..0e007d7b03f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp
@@ -1,7 +1,7 @@
/*
*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* Copyright (C) 2007, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h
index 19b5791e9b3..aeb43d20e6e 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h
@@ -1,7 +1,7 @@
/*
*************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* Copyright (C) 2007, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp
index cfeb3adf92c..6bc7957ddcb 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp
@@ -1,7 +1,7 @@
/*
**************************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
**************************************************************************
**************************************************************************
* Copyright (C) 2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.pl b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.pl
index f4a5a5b6ea2..9de7c699fb6 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj
index 7e689014152..c68b7006622 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/Makefile.in
index 55b0f3f4a9b..e5c17b64e3f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/usetperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/UsetPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/UsetPerf.pl
index e48683648e4..02c667551a5 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/UsetPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/UsetPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp
index ce8842d980b..71da112f2ba 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2005, International Business Machines
@@ -35,7 +35,7 @@ UBool BitSet::get(int32_t bitIndex) const {
uint32_t longIndex = bitIndex >> 5;
int32_t bitInLong = bitIndex & 0x1F;
return (longIndex < len) ? (((data[longIndex] >> bitInLong) & 1) != 0)
- : FALSE;
+ : false;
}
void BitSet::set(int32_t bitIndex) {
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h
index d03aa862ba8..70634b73501 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2005, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp
index 337b2625372..0885a5d7ce8 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2005, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj
index 801b8a80742..9c566432371 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/Makefile.in
index e9cba1e3a86..4d601137ac0 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/ustrperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl
index f477e6eb3f6..378cbc125e0 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# *License & terms of use: http://www.unicode.org/copyright.html#License
+# *License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl
index db2c5e0fe51..587595083b0 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# *License & terms of use: http://www.unicode.org/copyright.html#License
+# *License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp
index d9b5c12f4ba..420b1b30d5a 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp
@@ -1,6 +1,6 @@
/***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*
***********************************************************************
***********************************************************************
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h
index 5392ee7fdee..59b841865a3 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html#License
+* License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2016, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj
index a6b4e5cbd7f..86dd1ae8342 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/Makefile.in
index a83cd69177c..3896fd23847 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/utfperf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/UtfPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/UtfPerf.pl
index b9d6cac3a60..115611e8e11 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/UtfPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/UtfPerf.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# ********************************************************************
# * Copyright (C) 2016 and later: Unicode, Inc. and others.
-# * License & terms of use: http://www.unicode.org/copyright.html#License
+# * License & terms of use: http://www.unicode.org/copyright.html
# ********************************************************************
# ********************************************************************
# * COPYRIGHT:
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp
index e027cc89a1e..a48b0c768f6 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp
@@ -1,7 +1,7 @@
/*
**************************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
*************************************************************************
*************************************************************************
* Copyright (C) 2002-2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj
index 0d0eef71fcc..49aea66a06f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/Makefile.in b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/Makefile.in
index 747592564ea..5cebe56d497 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/Makefile.in
@@ -1,6 +1,6 @@
## Makefile.in for ICU - test/perf/utrie2perf
## Copyright (C) 2016 and later: Unicode, Inc. and others.
-## License & terms of use: http://www.unicode.org/copyright.html#License
+## License & terms of use: http://www.unicode.org/copyright.html
##
## Copyright (c) 2001-2011, International Business Machines Corporation and
## others. All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.bat b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.bat
index 7c7d64a363e..83b155eefee 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.bat
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.bat
@@ -1,5 +1,5 @@
rem Copyright (C) 2016 and later: Unicode, Inc. and others.
-rem License & terms of use: http://www.unicode.org/copyright.html#License
+rem License & terms of use: http://www.unicode.org/copyright.html
rem Copyright (C) 2008, International Business Machines Corporation and others.
rem All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp
index 8b28407c19b..761ad0c0b7f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp
@@ -1,7 +1,7 @@
/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
+ * License & terms of use: http://www.unicode.org/copyright.html
***********************************************************************
***********************************************************************
* Copyright (C) 2002-2014, International Business Machines
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.sh b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.sh
index 788cce95a53..3753453df65 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.sh
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.sh
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (C) 2008, International Business Machines Corporation and others.
# All Rights Reserved.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj
index bca5958b8bb..d829fcbd5bd 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj
@@ -47,22 +47,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py b/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
index 2a5eed8755c..6e09938f9e6 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
@@ -5,13 +5,13 @@ from icutools.databuilder import *
from icutools.databuilder.request_types import *
-def generate(config, glob, common_vars):
+def generate(config, io, common_vars):
requests = []
- requests += generate_rb(config, glob, common_vars)
- requests += generate_sprep(config, glob, common_vars)
- requests += generate_conv(config, glob, common_vars)
- requests += generate_other(config, glob, common_vars)
- requests += generate_copy(config, glob, common_vars)
+ requests += generate_rb(config, io, common_vars)
+ requests += generate_sprep(config, io, common_vars)
+ requests += generate_conv(config, io, common_vars)
+ requests += generate_other(config, io, common_vars)
+ requests += generate_copy(config, io, common_vars)
requests += [
ListRequest(
@@ -25,7 +25,7 @@ def generate(config, glob, common_vars):
return requests
-def generate_rb(config, glob, common_vars):
+def generate_rb(config, io, common_vars):
basenames = [
"calendar",
"casing",
@@ -95,7 +95,7 @@ def generate_rb(config, glob, common_vars):
]
-def generate_sprep(config, glob, common_vars):
+def generate_sprep(config, io, common_vars):
return [
SingleExecutionRequest(
name = "nfscsi",
@@ -145,7 +145,7 @@ def generate_sprep(config, glob, common_vars):
]
-def generate_conv(config, glob, common_vars):
+def generate_conv(config, io, common_vars):
basenames = [
"test1",
"test1bmp",
@@ -170,7 +170,7 @@ def generate_conv(config, glob, common_vars):
]
-def generate_copy(config, glob, common_vars):
+def generate_copy(config, io, common_vars):
return [
CopyRequest(
name = "nam_typ",
@@ -190,7 +190,7 @@ def generate_copy(config, glob, common_vars):
]
-def generate_other(config, glob, common_vars):
+def generate_other(config, io, common_vars):
return [
SingleExecutionRequest(
name = "testnorm",
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
index 49665bd198c..d3d945b570c 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
@@ -1,5 +1,5 @@
-# BidiTest-12.1.0.txt
-# Date: 2019-03-08, 23:59:20 GMT
+# BidiTest-13.0.0.txt
+# Date: 2019-09-08, 23:30:56 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
index 488aa673c13..32874357116 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
@@ -1,10 +1,10 @@
# CollationTest_CLDR_NON_IGNORABLE_SHORT.txt
-# Date: 2019-04-01, 20:17:34 GMT
-# © 2019 Unicode®, Inc.
+# Date: 2020-02-12, 17:50:40 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
-# UCA Version: 12.1.0
-# UCD Version: 12.1.0
+# UCA Version: 13.0.0
+# UCD Version: 13.0.0
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Data_Files
@@ -945,8 +945,12 @@ FB1E 0334
0652 0334
0334 0653
0653 0334
+0334 10EAC
+10EAC 0334
0334 0654
0654 0334
+0334 10EAB
+10EAB 0334
0334 0655
0655 0334
0334 065F
@@ -1109,6 +1113,8 @@ A9B3 0334
116B7 0334
0334 1183A
1183A 0334
+0334 11943
+11943 0334
0334 11D42
11D42 0334
0334 11100
@@ -1229,6 +1235,10 @@ A92D 0334
302E 0334
0334 302F
302F 0334
+0334 16FF0
+16FF0 0334
+0334 16FF1
+16FF1 0334
0334 20D0
20D0 0334
0334 20D1
@@ -1599,6 +1609,11 @@ FF65 0061
FF65 0041
30FB 0062
FF65 0062
+10EAD 0021
+10EAD 003F
+10EAD 0061
+10EAD 0041
+10EAD 0062
002C 0021
FF0C 0021
FE50 0021
@@ -2340,6 +2355,7 @@ FFFB 0021
13436 0021
13437 0021
13438 0021
+16FE4 0021
1BCA0 0021
1BCA1 0021
1BCA2 0021
@@ -2907,6 +2923,7 @@ E01EF 0021
0487 0021
0741 0021
0745 0021
+0B55 0021
17CB 0021
17CC 0021
17CD 0021
@@ -3160,7 +3177,9 @@ FE7F 0021
FE7E 0021
0653 0021
0AFC 0021
+10EAC 0021
0654 0021
+10EAB 0021
0655 0021
065F 0021
0656 0021
@@ -3250,6 +3269,7 @@ A9B3 0021
115C0 0021
116B7 0021
1183A 0021
+11943 0021
11A33 0021
11D42 0021
0900 0021
@@ -3262,6 +3282,7 @@ A9B3 0021
0C01 0021
0C81 0021
0D01 0021
+0D81 0021
1B00 0021
1B01 0021
A8C5 0021
@@ -3270,11 +3291,13 @@ A980 0021
11080 0021
11100 0021
11180 0021
+111CF 0021
11301 0021
11443 0021
114BF 0021
115BC 0021
11640 0021
+1193C 0021
11A35 0021
11A36 0021
11A37 0021
@@ -3318,6 +3341,7 @@ A981 0021
1163D 0021
116AB 0021
11837 0021
+1193B 0021
119DE 0021
11A38 0021
11A96 0021
@@ -3435,6 +3459,8 @@ A92D 0021
302D 0021
302E 0021
302F 0021
+16FF0 0021
+16FF1 0021
20D0 0021
20D1 0021
20D2 0021
@@ -3837,6 +3863,7 @@ FFFB 003F
13436 003F
13437 003F
13438 003F
+16FE4 003F
1BCA0 003F
1BCA1 003F
1BCA2 003F
@@ -4404,6 +4431,7 @@ E01EF 003F
0487 003F
0741 003F
0745 003F
+0B55 003F
17CB 003F
17CC 003F
17CD 003F
@@ -4657,7 +4685,9 @@ FE7F 003F
FE7E 003F
0653 003F
0AFC 003F
+10EAC 003F
0654 003F
+10EAB 003F
0655 003F
065F 003F
0656 003F
@@ -4747,6 +4777,7 @@ A9B3 003F
115C0 003F
116B7 003F
1183A 003F
+11943 003F
11A33 003F
11D42 003F
0900 003F
@@ -4759,6 +4790,7 @@ A9B3 003F
0C01 003F
0C81 003F
0D01 003F
+0D81 003F
1B00 003F
1B01 003F
A8C5 003F
@@ -4767,11 +4799,13 @@ A980 003F
11080 003F
11100 003F
11180 003F
+111CF 003F
11301 003F
11443 003F
114BF 003F
115BC 003F
11640 003F
+1193C 003F
11A35 003F
11A36 003F
11A37 003F
@@ -4815,6 +4849,7 @@ A981 003F
1163D 003F
116AB 003F
11837 003F
+1193B 003F
119DE 003F
11A38 003F
11A96 003F
@@ -4932,6 +4967,8 @@ A92D 003F
302D 003F
302E 003F
302F 003F
+16FF0 003F
+16FF1 003F
20D0 003F
20D1 003F
20D2 003F
@@ -5468,6 +5505,11 @@ ABEB 0062
1173D 0061
1173D 0041
1173D 0062
+11944 0021
+11944 003F
+11944 0061
+11944 0041
+11944 0062
11C41 0021
11C41 003F
11C41 0061
@@ -5703,6 +5745,11 @@ A95F 0062
1173E 0061
1173E 0041
1173E 0062
+11946 0021
+11946 003F
+11946 0061
+11946 0041
+11946 0062
11EF7 0021
11EF7 003F
11EF7 0061
@@ -7613,6 +7660,11 @@ FE60 0062
204A 0061
204A 0041
204A 0062
+2E52 0021
+2E52 003F
+2E52 0061
+2E52 0041
+2E52 0062
0023 0021
FF03 0021
FE5F 0021
@@ -8758,6 +8810,11 @@ AA5C 0062
1144D 0061
1144D 0041
1144D 0062
+1145A 0021
+1145A 003F
+1145A 0061
+1145A 0041
+1145A 0062
1144E 0021
1144E 003F
1144E 0061
@@ -8898,6 +8955,11 @@ AA5C 0062
1183B 0061
1183B 0041
1183B 0062
+11945 0021
+11945 003F
+11945 0061
+11945 0041
+11945 0062
119E2 0021
119E2 003F
119E2 0061
@@ -9291,6 +9353,16 @@ FFE3 0062
02D5 0061
02D5 0041
02D5 0062
+AB6A 0021
+AB6A 003F
+AB6A 0061
+AB6A 0041
+AB6A 0062
+AB6B 0021
+AB6B 003F
+AB6B 0061
+AB6B 0041
+AB6B 0062
02D6 0021
02D6 003F
02D6 0061
@@ -10546,6 +10618,11 @@ AA79 0062
00AE 0061
00AE 0041
00AE 0062
+1F1AD 0021
+1F1AD 003F
+1F1AD 0061
+1F1AD 0041
+1F1AD 0062
2104 0021
2104 003F
2104 0061
@@ -15649,6 +15726,1016 @@ FFEE 0062
25FF 0061
25FF 0041
25FF 0062
+1FB00 0021
+1FB00 003F
+1FB00 0061
+1FB00 0041
+1FB00 0062
+1FB01 0021
+1FB01 003F
+1FB01 0061
+1FB01 0041
+1FB01 0062
+1FB02 0021
+1FB02 003F
+1FB02 0061
+1FB02 0041
+1FB02 0062
+1FB03 0021
+1FB03 003F
+1FB03 0061
+1FB03 0041
+1FB03 0062
+1FB04 0021
+1FB04 003F
+1FB04 0061
+1FB04 0041
+1FB04 0062
+1FB05 0021
+1FB05 003F
+1FB05 0061
+1FB05 0041
+1FB05 0062
+1FB06 0021
+1FB06 003F
+1FB06 0061
+1FB06 0041
+1FB06 0062
+1FB07 0021
+1FB07 003F
+1FB07 0061
+1FB07 0041
+1FB07 0062
+1FB08 0021
+1FB08 003F
+1FB08 0061
+1FB08 0041
+1FB08 0062
+1FB09 0021
+1FB09 003F
+1FB09 0061
+1FB09 0041
+1FB09 0062
+1FB0A 0021
+1FB0A 003F
+1FB0A 0061
+1FB0A 0041
+1FB0A 0062
+1FB0B 0021
+1FB0B 003F
+1FB0B 0061
+1FB0B 0041
+1FB0B 0062
+1FB0C 0021
+1FB0C 003F
+1FB0C 0061
+1FB0C 0041
+1FB0C 0062
+1FB0D 0021
+1FB0D 003F
+1FB0D 0061
+1FB0D 0041
+1FB0D 0062
+1FB0E 0021
+1FB0E 003F
+1FB0E 0061
+1FB0E 0041
+1FB0E 0062
+1FB0F 0021
+1FB0F 003F
+1FB0F 0061
+1FB0F 0041
+1FB0F 0062
+1FB10 0021
+1FB10 003F
+1FB10 0061
+1FB10 0041
+1FB10 0062
+1FB11 0021
+1FB11 003F
+1FB11 0061
+1FB11 0041
+1FB11 0062
+1FB12 0021
+1FB12 003F
+1FB12 0061
+1FB12 0041
+1FB12 0062
+1FB13 0021
+1FB13 003F
+1FB13 0061
+1FB13 0041
+1FB13 0062
+1FB14 0021
+1FB14 003F
+1FB14 0061
+1FB14 0041
+1FB14 0062
+1FB15 0021
+1FB15 003F
+1FB15 0061
+1FB15 0041
+1FB15 0062
+1FB16 0021
+1FB16 003F
+1FB16 0061
+1FB16 0041
+1FB16 0062
+1FB17 0021
+1FB17 003F
+1FB17 0061
+1FB17 0041
+1FB17 0062
+1FB18 0021
+1FB18 003F
+1FB18 0061
+1FB18 0041
+1FB18 0062
+1FB19 0021
+1FB19 003F
+1FB19 0061
+1FB19 0041
+1FB19 0062
+1FB1A 0021
+1FB1A 003F
+1FB1A 0061
+1FB1A 0041
+1FB1A 0062
+1FB1B 0021
+1FB1B 003F
+1FB1B 0061
+1FB1B 0041
+1FB1B 0062
+1FB1C 0021
+1FB1C 003F
+1FB1C 0061
+1FB1C 0041
+1FB1C 0062
+1FB1D 0021
+1FB1D 003F
+1FB1D 0061
+1FB1D 0041
+1FB1D 0062
+1FB1E 0021
+1FB1E 003F
+1FB1E 0061
+1FB1E 0041
+1FB1E 0062
+1FB1F 0021
+1FB1F 003F
+1FB1F 0061
+1FB1F 0041
+1FB1F 0062
+1FB20 0021
+1FB20 003F
+1FB20 0061
+1FB20 0041
+1FB20 0062
+1FB21 0021
+1FB21 003F
+1FB21 0061
+1FB21 0041
+1FB21 0062
+1FB22 0021
+1FB22 003F
+1FB22 0061
+1FB22 0041
+1FB22 0062
+1FB23 0021
+1FB23 003F
+1FB23 0061
+1FB23 0041
+1FB23 0062
+1FB24 0021
+1FB24 003F
+1FB24 0061
+1FB24 0041
+1FB24 0062
+1FB25 0021
+1FB25 003F
+1FB25 0061
+1FB25 0041
+1FB25 0062
+1FB26 0021
+1FB26 003F
+1FB26 0061
+1FB26 0041
+1FB26 0062
+1FB27 0021
+1FB27 003F
+1FB27 0061
+1FB27 0041
+1FB27 0062
+1FB28 0021
+1FB28 003F
+1FB28 0061
+1FB28 0041
+1FB28 0062
+1FB29 0021
+1FB29 003F
+1FB29 0061
+1FB29 0041
+1FB29 0062
+1FB2A 0021
+1FB2A 003F
+1FB2A 0061
+1FB2A 0041
+1FB2A 0062
+1FB2B 0021
+1FB2B 003F
+1FB2B 0061
+1FB2B 0041
+1FB2B 0062
+1FB2C 0021
+1FB2C 003F
+1FB2C 0061
+1FB2C 0041
+1FB2C 0062
+1FB2D 0021
+1FB2D 003F
+1FB2D 0061
+1FB2D 0041
+1FB2D 0062
+1FB2E 0021
+1FB2E 003F
+1FB2E 0061
+1FB2E 0041
+1FB2E 0062
+1FB2F 0021
+1FB2F 003F
+1FB2F 0061
+1FB2F 0041
+1FB2F 0062
+1FB30 0021
+1FB30 003F
+1FB30 0061
+1FB30 0041
+1FB30 0062
+1FB31 0021
+1FB31 003F
+1FB31 0061
+1FB31 0041
+1FB31 0062
+1FB32 0021
+1FB32 003F
+1FB32 0061
+1FB32 0041
+1FB32 0062
+1FB33 0021
+1FB33 003F
+1FB33 0061
+1FB33 0041
+1FB33 0062
+1FB34 0021
+1FB34 003F
+1FB34 0061
+1FB34 0041
+1FB34 0062
+1FB35 0021
+1FB35 003F
+1FB35 0061
+1FB35 0041
+1FB35 0062
+1FB36 0021
+1FB36 003F
+1FB36 0061
+1FB36 0041
+1FB36 0062
+1FB37 0021
+1FB37 003F
+1FB37 0061
+1FB37 0041
+1FB37 0062
+1FB38 0021
+1FB38 003F
+1FB38 0061
+1FB38 0041
+1FB38 0062
+1FB39 0021
+1FB39 003F
+1FB39 0061
+1FB39 0041
+1FB39 0062
+1FB3A 0021
+1FB3A 003F
+1FB3A 0061
+1FB3A 0041
+1FB3A 0062
+1FB3B 0021
+1FB3B 003F
+1FB3B 0061
+1FB3B 0041
+1FB3B 0062
+1FB3C 0021
+1FB3C 003F
+1FB3C 0061
+1FB3C 0041
+1FB3C 0062
+1FB3D 0021
+1FB3D 003F
+1FB3D 0061
+1FB3D 0041
+1FB3D 0062
+1FB3E 0021
+1FB3E 003F
+1FB3E 0061
+1FB3E 0041
+1FB3E 0062
+1FB3F 0021
+1FB3F 003F
+1FB3F 0061
+1FB3F 0041
+1FB3F 0062
+1FB40 0021
+1FB40 003F
+1FB40 0061
+1FB40 0041
+1FB40 0062
+1FB41 0021
+1FB41 003F
+1FB41 0061
+1FB41 0041
+1FB41 0062
+1FB42 0021
+1FB42 003F
+1FB42 0061
+1FB42 0041
+1FB42 0062
+1FB43 0021
+1FB43 003F
+1FB43 0061
+1FB43 0041
+1FB43 0062
+1FB44 0021
+1FB44 003F
+1FB44 0061
+1FB44 0041
+1FB44 0062
+1FB45 0021
+1FB45 003F
+1FB45 0061
+1FB45 0041
+1FB45 0062
+1FB46 0021
+1FB46 003F
+1FB46 0061
+1FB46 0041
+1FB46 0062
+1FB47 0021
+1FB47 003F
+1FB47 0061
+1FB47 0041
+1FB47 0062
+1FB48 0021
+1FB48 003F
+1FB48 0061
+1FB48 0041
+1FB48 0062
+1FB49 0021
+1FB49 003F
+1FB49 0061
+1FB49 0041
+1FB49 0062
+1FB4A 0021
+1FB4A 003F
+1FB4A 0061
+1FB4A 0041
+1FB4A 0062
+1FB4B 0021
+1FB4B 003F
+1FB4B 0061
+1FB4B 0041
+1FB4B 0062
+1FB4C 0021
+1FB4C 003F
+1FB4C 0061
+1FB4C 0041
+1FB4C 0062
+1FB4D 0021
+1FB4D 003F
+1FB4D 0061
+1FB4D 0041
+1FB4D 0062
+1FB4E 0021
+1FB4E 003F
+1FB4E 0061
+1FB4E 0041
+1FB4E 0062
+1FB4F 0021
+1FB4F 003F
+1FB4F 0061
+1FB4F 0041
+1FB4F 0062
+1FB50 0021
+1FB50 003F
+1FB50 0061
+1FB50 0041
+1FB50 0062
+1FB51 0021
+1FB51 003F
+1FB51 0061
+1FB51 0041
+1FB51 0062
+1FB52 0021
+1FB52 003F
+1FB52 0061
+1FB52 0041
+1FB52 0062
+1FB53 0021
+1FB53 003F
+1FB53 0061
+1FB53 0041
+1FB53 0062
+1FB54 0021
+1FB54 003F
+1FB54 0061
+1FB54 0041
+1FB54 0062
+1FB55 0021
+1FB55 003F
+1FB55 0061
+1FB55 0041
+1FB55 0062
+1FB56 0021
+1FB56 003F
+1FB56 0061
+1FB56 0041
+1FB56 0062
+1FB57 0021
+1FB57 003F
+1FB57 0061
+1FB57 0041
+1FB57 0062
+1FB58 0021
+1FB58 003F
+1FB58 0061
+1FB58 0041
+1FB58 0062
+1FB59 0021
+1FB59 003F
+1FB59 0061
+1FB59 0041
+1FB59 0062
+1FB5A 0021
+1FB5A 003F
+1FB5A 0061
+1FB5A 0041
+1FB5A 0062
+1FB5B 0021
+1FB5B 003F
+1FB5B 0061
+1FB5B 0041
+1FB5B 0062
+1FB5C 0021
+1FB5C 003F
+1FB5C 0061
+1FB5C 0041
+1FB5C 0062
+1FB5D 0021
+1FB5D 003F
+1FB5D 0061
+1FB5D 0041
+1FB5D 0062
+1FB5E 0021
+1FB5E 003F
+1FB5E 0061
+1FB5E 0041
+1FB5E 0062
+1FB5F 0021
+1FB5F 003F
+1FB5F 0061
+1FB5F 0041
+1FB5F 0062
+1FB60 0021
+1FB60 003F
+1FB60 0061
+1FB60 0041
+1FB60 0062
+1FB61 0021
+1FB61 003F
+1FB61 0061
+1FB61 0041
+1FB61 0062
+1FB62 0021
+1FB62 003F
+1FB62 0061
+1FB62 0041
+1FB62 0062
+1FB63 0021
+1FB63 003F
+1FB63 0061
+1FB63 0041
+1FB63 0062
+1FB64 0021
+1FB64 003F
+1FB64 0061
+1FB64 0041
+1FB64 0062
+1FB65 0021
+1FB65 003F
+1FB65 0061
+1FB65 0041
+1FB65 0062
+1FB66 0021
+1FB66 003F
+1FB66 0061
+1FB66 0041
+1FB66 0062
+1FB67 0021
+1FB67 003F
+1FB67 0061
+1FB67 0041
+1FB67 0062
+1FB68 0021
+1FB68 003F
+1FB68 0061
+1FB68 0041
+1FB68 0062
+1FB69 0021
+1FB69 003F
+1FB69 0061
+1FB69 0041
+1FB69 0062
+1FB6A 0021
+1FB6A 003F
+1FB6A 0061
+1FB6A 0041
+1FB6A 0062
+1FB6B 0021
+1FB6B 003F
+1FB6B 0061
+1FB6B 0041
+1FB6B 0062
+1FB6C 0021
+1FB6C 003F
+1FB6C 0061
+1FB6C 0041
+1FB6C 0062
+1FB6D 0021
+1FB6D 003F
+1FB6D 0061
+1FB6D 0041
+1FB6D 0062
+1FB6E 0021
+1FB6E 003F
+1FB6E 0061
+1FB6E 0041
+1FB6E 0062
+1FB6F 0021
+1FB6F 003F
+1FB6F 0061
+1FB6F 0041
+1FB6F 0062
+1FB70 0021
+1FB70 003F
+1FB70 0061
+1FB70 0041
+1FB70 0062
+1FB71 0021
+1FB71 003F
+1FB71 0061
+1FB71 0041
+1FB71 0062
+1FB72 0021
+1FB72 003F
+1FB72 0061
+1FB72 0041
+1FB72 0062
+1FB73 0021
+1FB73 003F
+1FB73 0061
+1FB73 0041
+1FB73 0062
+1FB74 0021
+1FB74 003F
+1FB74 0061
+1FB74 0041
+1FB74 0062
+1FB75 0021
+1FB75 003F
+1FB75 0061
+1FB75 0041
+1FB75 0062
+1FB76 0021
+1FB76 003F
+1FB76 0061
+1FB76 0041
+1FB76 0062
+1FB77 0021
+1FB77 003F
+1FB77 0061
+1FB77 0041
+1FB77 0062
+1FB78 0021
+1FB78 003F
+1FB78 0061
+1FB78 0041
+1FB78 0062
+1FB79 0021
+1FB79 003F
+1FB79 0061
+1FB79 0041
+1FB79 0062
+1FB7A 0021
+1FB7A 003F
+1FB7A 0061
+1FB7A 0041
+1FB7A 0062
+1FB7B 0021
+1FB7B 003F
+1FB7B 0061
+1FB7B 0041
+1FB7B 0062
+1FB7C 0021
+1FB7C 003F
+1FB7C 0061
+1FB7C 0041
+1FB7C 0062
+1FB7D 0021
+1FB7D 003F
+1FB7D 0061
+1FB7D 0041
+1FB7D 0062
+1FB7E 0021
+1FB7E 003F
+1FB7E 0061
+1FB7E 0041
+1FB7E 0062
+1FB7F 0021
+1FB7F 003F
+1FB7F 0061
+1FB7F 0041
+1FB7F 0062
+1FB80 0021
+1FB80 003F
+1FB80 0061
+1FB80 0041
+1FB80 0062
+1FB81 0021
+1FB81 003F
+1FB81 0061
+1FB81 0041
+1FB81 0062
+1FB82 0021
+1FB82 003F
+1FB82 0061
+1FB82 0041
+1FB82 0062
+1FB83 0021
+1FB83 003F
+1FB83 0061
+1FB83 0041
+1FB83 0062
+1FB84 0021
+1FB84 003F
+1FB84 0061
+1FB84 0041
+1FB84 0062
+1FB85 0021
+1FB85 003F
+1FB85 0061
+1FB85 0041
+1FB85 0062
+1FB86 0021
+1FB86 003F
+1FB86 0061
+1FB86 0041
+1FB86 0062
+1FB87 0021
+1FB87 003F
+1FB87 0061
+1FB87 0041
+1FB87 0062
+1FB88 0021
+1FB88 003F
+1FB88 0061
+1FB88 0041
+1FB88 0062
+1FB89 0021
+1FB89 003F
+1FB89 0061
+1FB89 0041
+1FB89 0062
+1FB8A 0021
+1FB8A 003F
+1FB8A 0061
+1FB8A 0041
+1FB8A 0062
+1FB8B 0021
+1FB8B 003F
+1FB8B 0061
+1FB8B 0041
+1FB8B 0062
+1FB8C 0021
+1FB8C 003F
+1FB8C 0061
+1FB8C 0041
+1FB8C 0062
+1FB8D 0021
+1FB8D 003F
+1FB8D 0061
+1FB8D 0041
+1FB8D 0062
+1FB8E 0021
+1FB8E 003F
+1FB8E 0061
+1FB8E 0041
+1FB8E 0062
+1FB8F 0021
+1FB8F 003F
+1FB8F 0061
+1FB8F 0041
+1FB8F 0062
+1FB90 0021
+1FB90 003F
+1FB90 0061
+1FB90 0041
+1FB90 0062
+1FB91 0021
+1FB91 003F
+1FB91 0061
+1FB91 0041
+1FB91 0062
+1FB92 0021
+1FB92 003F
+1FB92 0061
+1FB92 0041
+1FB92 0062
+1FB94 0021
+1FB94 003F
+1FB94 0061
+1FB94 0041
+1FB94 0062
+1FB95 0021
+1FB95 003F
+1FB95 0061
+1FB95 0041
+1FB95 0062
+1FB96 0021
+1FB96 003F
+1FB96 0061
+1FB96 0041
+1FB96 0062
+1FB97 0021
+1FB97 003F
+1FB97 0061
+1FB97 0041
+1FB97 0062
+1FB98 0021
+1FB98 003F
+1FB98 0061
+1FB98 0041
+1FB98 0062
+1FB99 0021
+1FB99 003F
+1FB99 0061
+1FB99 0041
+1FB99 0062
+1FB9A 0021
+1FB9A 003F
+1FB9A 0061
+1FB9A 0041
+1FB9A 0062
+1FB9B 0021
+1FB9B 003F
+1FB9B 0061
+1FB9B 0041
+1FB9B 0062
+1FB9C 0021
+1FB9C 003F
+1FB9C 0061
+1FB9C 0041
+1FB9C 0062
+1FB9D 0021
+1FB9D 003F
+1FB9D 0061
+1FB9D 0041
+1FB9D 0062
+1FB9E 0021
+1FB9E 003F
+1FB9E 0061
+1FB9E 0041
+1FB9E 0062
+1FB9F 0021
+1FB9F 003F
+1FB9F 0061
+1FB9F 0041
+1FB9F 0062
+1FBA0 0021
+1FBA0 003F
+1FBA0 0061
+1FBA0 0041
+1FBA0 0062
+1FBA1 0021
+1FBA1 003F
+1FBA1 0061
+1FBA1 0041
+1FBA1 0062
+1FBA2 0021
+1FBA2 003F
+1FBA2 0061
+1FBA2 0041
+1FBA2 0062
+1FBA3 0021
+1FBA3 003F
+1FBA3 0061
+1FBA3 0041
+1FBA3 0062
+1FBA4 0021
+1FBA4 003F
+1FBA4 0061
+1FBA4 0041
+1FBA4 0062
+1FBA5 0021
+1FBA5 003F
+1FBA5 0061
+1FBA5 0041
+1FBA5 0062
+1FBA6 0021
+1FBA6 003F
+1FBA6 0061
+1FBA6 0041
+1FBA6 0062
+1FBA7 0021
+1FBA7 003F
+1FBA7 0061
+1FBA7 0041
+1FBA7 0062
+1FBA8 0021
+1FBA8 003F
+1FBA8 0061
+1FBA8 0041
+1FBA8 0062
+1FBA9 0021
+1FBA9 003F
+1FBA9 0061
+1FBA9 0041
+1FBA9 0062
+1FBAA 0021
+1FBAA 003F
+1FBAA 0061
+1FBAA 0041
+1FBAA 0062
+1FBAB 0021
+1FBAB 003F
+1FBAB 0061
+1FBAB 0041
+1FBAB 0062
+1FBAC 0021
+1FBAC 003F
+1FBAC 0061
+1FBAC 0041
+1FBAC 0062
+1FBAD 0021
+1FBAD 003F
+1FBAD 0061
+1FBAD 0041
+1FBAD 0062
+1FBAE 0021
+1FBAE 003F
+1FBAE 0061
+1FBAE 0041
+1FBAE 0062
+1FBAF 0021
+1FBAF 003F
+1FBAF 0061
+1FBAF 0041
+1FBAF 0062
+1FBB0 0021
+1FBB0 003F
+1FBB0 0061
+1FBB0 0041
+1FBB0 0062
+1FBB1 0021
+1FBB1 003F
+1FBB1 0061
+1FBB1 0041
+1FBB1 0062
+1FBB2 0021
+1FBB2 003F
+1FBB2 0061
+1FBB2 0041
+1FBB2 0062
+1FBB3 0021
+1FBB3 003F
+1FBB3 0061
+1FBB3 0041
+1FBB3 0062
+1FBB4 0021
+1FBB4 003F
+1FBB4 0061
+1FBB4 0041
+1FBB4 0062
+1FBB5 0021
+1FBB5 003F
+1FBB5 0061
+1FBB5 0041
+1FBB5 0062
+1FBB6 0021
+1FBB6 003F
+1FBB6 0061
+1FBB6 0041
+1FBB6 0062
+1FBB7 0021
+1FBB7 003F
+1FBB7 0061
+1FBB7 0041
+1FBB7 0062
+1FBB8 0021
+1FBB8 003F
+1FBB8 0061
+1FBB8 0041
+1FBB8 0062
+1FBB9 0021
+1FBB9 003F
+1FBB9 0061
+1FBB9 0041
+1FBB9 0062
+1FBBA 0021
+1FBBA 003F
+1FBBA 0061
+1FBBA 0041
+1FBBA 0062
+1FBBB 0021
+1FBBB 003F
+1FBBB 0061
+1FBBB 0041
+1FBBB 0062
+1FBBC 0021
+1FBBC 003F
+1FBBC 0061
+1FBBC 0041
+1FBBC 0062
+1FBBD 0021
+1FBBD 003F
+1FBBD 0061
+1FBBD 0041
+1FBBD 0062
+1FBBE 0021
+1FBBE 003F
+1FBBE 0061
+1FBBE 0041
+1FBBE 0062
+1FBBF 0021
+1FBBF 003F
+1FBBF 0061
+1FBBF 0041
+1FBBF 0062
+1FBC0 0021
+1FBC0 003F
+1FBC0 0061
+1FBC0 0041
+1FBC0 0062
+1FBC1 0021
+1FBC1 003F
+1FBC1 0061
+1FBC1 0041
+1FBC1 0062
+1FBC2 0021
+1FBC2 003F
+1FBC2 0061
+1FBC2 0041
+1FBC2 0062
+1FBC3 0021
+1FBC3 003F
+1FBC3 0061
+1FBC3 0041
+1FBC3 0062
+1FBC4 0021
+1FBC4 003F
+1FBC4 0061
+1FBC4 0041
+1FBC4 0062
+1FBC5 0021
+1FBC5 003F
+1FBC5 0061
+1FBC5 0041
+1FBC5 0062
+1FBC6 0021
+1FBC6 003F
+1FBC6 0061
+1FBC6 0041
+1FBC6 0062
+1FBC7 0021
+1FBC7 003F
+1FBC7 0061
+1FBC7 0041
+1FBC7 0062
+1FBC8 0021
+1FBC8 003F
+1FBC8 0061
+1FBC8 0041
+1FBC8 0062
+1FBC9 0021
+1FBC9 003F
+1FBC9 0061
+1FBC9 0041
+1FBC9 0062
+1FBCA 0021
+1FBCA 003F
+1FBCA 0061
+1FBCA 0041
+1FBCA 0062
2600 0021
2600 003F
2600 0061
@@ -17139,6 +18226,16 @@ FFEE 0062
2720 0061
2720 0041
2720 0062
+2E50 0021
+2E50 003F
+2E50 0061
+2E50 0041
+2E50 0062
+2E51 0021
+2E51 003F
+2E51 0061
+2E51 0041
+2E51 0062
2721 0021
2721 003F
2721 0061
@@ -21116,6 +22213,11 @@ FFEE 0062
2B95 0061
2B95 0041
2B95 0062
+2B97 0021
+2B97 003F
+2B97 0061
+2B97 0041
+2B97 0062
2B98 0021
2B98 003F
2B98 0061
@@ -24251,6 +25353,11 @@ A4C6 0062
1019B 0061
1019B 0041
1019B 0062
+1019C 0021
+1019C 003F
+1019C 0061
+1019C 0041
+1019C 0062
101A0 0021
101A0 003F
101A0 0061
@@ -28749,6 +29856,36 @@ A4C6 0062
1FA6D 0061
1FA6D 0041
1FA6D 0062
+1F10D 0021
+1F10D 003F
+1F10D 0061
+1F10D 0041
+1F10D 0062
+1F10E 0021
+1F10E 003F
+1F10E 0061
+1F10E 0041
+1F10E 0062
+1F10F 0021
+1F10F 003F
+1F10F 0061
+1F10F 0041
+1F10F 0062
+1F16D 0021
+1F16D 003F
+1F16D 0061
+1F16D 0041
+1F16D 0062
+1F16E 0021
+1F16E 003F
+1F16E 0061
+1F16E 0041
+1F16E 0062
+1F16F 0021
+1F16F 003F
+1F16F 0061
+1F16F 0041
+1F16F 0062
1F260 0021
1F260 003F
1F260 0061
@@ -32679,6 +33816,11 @@ A4C6 0062
1F90B 0061
1F90B 0041
1F90B 0062
+1F90C 0021
+1F90C 003F
+1F90C 0061
+1F90C 0041
+1F90C 0062
1F90D 0021
1F90D 003F
1F90D 0061
@@ -33184,6 +34326,11 @@ A4C6 0062
1F971 0061
1F971 0041
1F971 0062
+1F972 0021
+1F972 003F
+1F972 0061
+1F972 0041
+1F972 0062
1F973 0021
1F973 003F
1F973 0061
@@ -33204,6 +34351,16 @@ A4C6 0062
1F976 0061
1F976 0041
1F976 0062
+1F977 0021
+1F977 003F
+1F977 0061
+1F977 0041
+1F977 0062
+1F978 0021
+1F978 003F
+1F978 0061
+1F978 0041
+1F978 0062
1F97A 0021
1F97A 003F
1F97A 0061
@@ -33409,6 +34566,16 @@ A4C6 0062
1F9A2 0061
1F9A2 0041
1F9A2 0062
+1F9A3 0021
+1F9A3 003F
+1F9A3 0061
+1F9A3 0041
+1F9A3 0062
+1F9A4 0021
+1F9A4 003F
+1F9A4 0061
+1F9A4 0041
+1F9A4 0062
1F9A5 0021
1F9A5 003F
1F9A5 0061
@@ -33439,6 +34606,21 @@ A4C6 0062
1F9AA 0061
1F9AA 0041
1F9AA 0062
+1F9AB 0021
+1F9AB 003F
+1F9AB 0061
+1F9AB 0041
+1F9AB 0062
+1F9AC 0021
+1F9AC 003F
+1F9AC 0061
+1F9AC 0041
+1F9AC 0062
+1F9AD 0021
+1F9AD 003F
+1F9AD 0061
+1F9AD 0041
+1F9AD 0062
1F9AE 0021
1F9AE 003F
1F9AE 0061
@@ -33584,6 +34766,11 @@ A4C6 0062
1F9CA 0061
1F9CA 0041
1F9CA 0062
+1F9CB 0021
+1F9CB 003F
+1F9CB 0061
+1F9CB 0041
+1F9CB 0062
1F9CD 0021
1F9CD 003F
1F9CD 0061
@@ -33859,6 +35046,11 @@ A4C6 0062
1FA73 0061
1FA73 0041
1FA73 0062
+1FA74 0021
+1FA74 003F
+1FA74 0061
+1FA74 0041
+1FA74 0062
1FA78 0021
1FA78 003F
1FA78 0061
@@ -33889,6 +35081,26 @@ A4C6 0062
1FA82 0061
1FA82 0041
1FA82 0062
+1FA83 0021
+1FA83 003F
+1FA83 0061
+1FA83 0041
+1FA83 0062
+1FA84 0021
+1FA84 003F
+1FA84 0061
+1FA84 0041
+1FA84 0062
+1FA85 0021
+1FA85 003F
+1FA85 0061
+1FA85 0041
+1FA85 0062
+1FA86 0021
+1FA86 003F
+1FA86 0061
+1FA86 0041
+1FA86 0062
1FA90 0021
1FA90 003F
1FA90 0061
@@ -33919,6 +35131,186 @@ A4C6 0062
1FA95 0061
1FA95 0041
1FA95 0062
+1FA96 0021
+1FA96 003F
+1FA96 0061
+1FA96 0041
+1FA96 0062
+1FA97 0021
+1FA97 003F
+1FA97 0061
+1FA97 0041
+1FA97 0062
+1FA98 0021
+1FA98 003F
+1FA98 0061
+1FA98 0041
+1FA98 0062
+1FA99 0021
+1FA99 003F
+1FA99 0061
+1FA99 0041
+1FA99 0062
+1FA9A 0021
+1FA9A 003F
+1FA9A 0061
+1FA9A 0041
+1FA9A 0062
+1FA9B 0021
+1FA9B 003F
+1FA9B 0061
+1FA9B 0041
+1FA9B 0062
+1FA9C 0021
+1FA9C 003F
+1FA9C 0061
+1FA9C 0041
+1FA9C 0062
+1FA9D 0021
+1FA9D 003F
+1FA9D 0061
+1FA9D 0041
+1FA9D 0062
+1FA9E 0021
+1FA9E 003F
+1FA9E 0061
+1FA9E 0041
+1FA9E 0062
+1FA9F 0021
+1FA9F 003F
+1FA9F 0061
+1FA9F 0041
+1FA9F 0062
+1FAA0 0021
+1FAA0 003F
+1FAA0 0061
+1FAA0 0041
+1FAA0 0062
+1FAA1 0021
+1FAA1 003F
+1FAA1 0061
+1FAA1 0041
+1FAA1 0062
+1FAA2 0021
+1FAA2 003F
+1FAA2 0061
+1FAA2 0041
+1FAA2 0062
+1FAA3 0021
+1FAA3 003F
+1FAA3 0061
+1FAA3 0041
+1FAA3 0062
+1FAA4 0021
+1FAA4 003F
+1FAA4 0061
+1FAA4 0041
+1FAA4 0062
+1FAA5 0021
+1FAA5 003F
+1FAA5 0061
+1FAA5 0041
+1FAA5 0062
+1FAA6 0021
+1FAA6 003F
+1FAA6 0061
+1FAA6 0041
+1FAA6 0062
+1FAA7 0021
+1FAA7 003F
+1FAA7 0061
+1FAA7 0041
+1FAA7 0062
+1FAA8 0021
+1FAA8 003F
+1FAA8 0061
+1FAA8 0041
+1FAA8 0062
+1FAB0 0021
+1FAB0 003F
+1FAB0 0061
+1FAB0 0041
+1FAB0 0062
+1FAB1 0021
+1FAB1 003F
+1FAB1 0061
+1FAB1 0041
+1FAB1 0062
+1FAB2 0021
+1FAB2 003F
+1FAB2 0061
+1FAB2 0041
+1FAB2 0062
+1FAB3 0021
+1FAB3 003F
+1FAB3 0061
+1FAB3 0041
+1FAB3 0062
+1FAB4 0021
+1FAB4 003F
+1FAB4 0061
+1FAB4 0041
+1FAB4 0062
+1FAB5 0021
+1FAB5 003F
+1FAB5 0061
+1FAB5 0041
+1FAB5 0062
+1FAB6 0021
+1FAB6 003F
+1FAB6 0061
+1FAB6 0041
+1FAB6 0062
+1FAC0 0021
+1FAC0 003F
+1FAC0 0061
+1FAC0 0041
+1FAC0 0062
+1FAC1 0021
+1FAC1 003F
+1FAC1 0061
+1FAC1 0041
+1FAC1 0062
+1FAC2 0021
+1FAC2 003F
+1FAC2 0061
+1FAC2 0041
+1FAC2 0062
+1FAD0 0021
+1FAD0 003F
+1FAD0 0061
+1FAD0 0041
+1FAD0 0062
+1FAD1 0021
+1FAD1 003F
+1FAD1 0061
+1FAD1 0041
+1FAD1 0062
+1FAD2 0021
+1FAD2 003F
+1FAD2 0061
+1FAD2 0041
+1FAD2 0062
+1FAD3 0021
+1FAD3 003F
+1FAD3 0061
+1FAD3 0041
+1FAD3 0062
+1FAD4 0021
+1FAD4 003F
+1FAD4 0061
+1FAD4 0041
+1FAD4 0062
+1FAD5 0021
+1FAD5 003F
+1FAD5 0061
+1FAD5 0041
+1FAD5 0062
+1FAD6 0021
+1FAD6 003F
+1FAD6 0061
+1FAD6 0041
+1FAD6 0062
1F600 0021
1F600 003F
1F600 0061
@@ -34989,6 +36381,16 @@ A4C6 0062
1F6D5 0061
1F6D5 0041
1F6D5 0062
+1F6D6 0021
+1F6D6 003F
+1F6D6 0061
+1F6D6 0041
+1F6D6 0062
+1F6D7 0021
+1F6D7 003F
+1F6D7 0061
+1F6D7 0041
+1F6D7 0062
1F6E0 0021
1F6E0 003F
1F6E0 0061
@@ -35109,6 +36511,16 @@ A4C6 0062
1F6FA 0061
1F6FA 0041
1F6FA 0062
+1F6FB 0021
+1F6FB 003F
+1F6FB 0061
+1F6FB 0041
+1F6FB 0062
+1F6FC 0021
+1F6FC 003F
+1F6FC 0061
+1F6FC 0041
+1F6FC 0062
1F700 0021
1F700 003F
1F700 0061
@@ -36934,6 +38346,16 @@ A4C6 0062
1F8AD 0061
1F8AD 0041
1F8AD 0062
+1F8B0 0021
+1F8B0 003F
+1F8B0 0061
+1F8B0 0041
+1F8B0 0062
+1F8B1 0021
+1F8B1 003F
+1F8B1 0061
+1F8B1 0041
+1F8B1 0062
1D800 0021
1D800 003F
1D800 0061
@@ -41650,6 +43072,21 @@ A835 0062
10F54 0061
10F54 0041
10F54 0062
+10FC9 0021
+10FC9 003F
+10FC9 0061
+10FC9 0041
+10FC9 0062
+10FCA 0021
+10FCA 003F
+10FCA 0061
+10FCA 0041
+10FCA 0062
+10FCB 0021
+10FCB 003F
+10FCB 0061
+10FCB 0041
+10FCB 0062
1173A 0021
1173A 003F
1173A 0061
@@ -42933,6 +44370,7 @@ ABF0 0021
116C0 0021
11730 0021
118E0 0021
+11950 0021
11C50 0021
11D50 0021
11DA0 0021
@@ -42950,6 +44388,7 @@ FF10 0021
1D7E2 0021
1D7EC 0021
1D7F6 0021
+1FBF0 0021
24EA 0021
24FF 0021
1F10B 0021
@@ -43009,6 +44448,7 @@ ABF0 003F
116C0 003F
11730 003F
118E0 003F
+11950 003F
11C50 003F
11D50 003F
11DA0 003F
@@ -43026,6 +44466,7 @@ FF10 003F
1D7E2 003F
1D7EC 003F
1D7F6 003F
+1FBF0 003F
24EA 003F
24FF 003F
1F10B 003F
@@ -43095,6 +44536,7 @@ ABF0 0061
116C0 0061
11730 0061
118E0 0061
+11950 0061
11C50 0061
11D50 0061
11DA0 0061
@@ -43158,6 +44600,7 @@ ABF0 0041
116C0 0041
11730 0041
118E0 0041
+11950 0041
11C50 0041
11D50 0041
11DA0 0041
@@ -43177,11 +44620,13 @@ FF10 0041
1D7E2 0061
1D7EC 0061
1D7F6 0061
+1FBF0 0061
1D7CE 0041
1D7D8 0041
1D7E2 0041
1D7EC 0041
1D7F6 0041
+1FBF0 0041
24EA 0061
24FF 0061
1F10B 0061
@@ -43247,6 +44692,7 @@ ABF0 0062
116C0 0062
11730 0062
118E0 0062
+11950 0062
11C50 0062
11D50 0062
11DA0 0062
@@ -43264,6 +44710,7 @@ FF10 0062
1D7E2 0062
1D7EC 0062
1D7F6 0062
+1FBF0 0062
24EA 0062
24FF 0062
1F10B 0062
@@ -43349,6 +44796,7 @@ ABF1 0021
10E60 0021
10F1D 0021
10F51 0021
+10FC5 0021
11052 0021
11067 0021
110F1 0021
@@ -43362,6 +44810,7 @@ ABF1 0021
116C1 0021
11731 0021
118E1 0021
+11951 0021
11C51 0021
11C5A 0021
11D51 0021
@@ -43393,6 +44842,7 @@ FF11 0021
1D7E3 0021
1D7ED 0021
1D7F7 0021
+1FBF1 0021
2460 0021
24F5 0021
2776 0021
@@ -43471,6 +44921,7 @@ ABF1 003F
10E60 003F
10F1D 003F
10F51 003F
+10FC5 003F
11052 003F
11067 003F
110F1 003F
@@ -43484,6 +44935,7 @@ ABF1 003F
116C1 003F
11731 003F
118E1 003F
+11951 003F
11C51 003F
11C5A 003F
11D51 003F
@@ -43515,6 +44967,7 @@ FF11 003F
1D7E3 003F
1D7ED 003F
1D7F7 003F
+1FBF1 003F
2460 003F
24F5 003F
2776 003F
@@ -43938,6 +45391,7 @@ ABF1 0061
10E60 0061
10F1D 0061
10F51 0061
+10FC5 0061
11052 0061
11067 0061
110F1 0061
@@ -43951,6 +45405,7 @@ ABF1 0061
116C1 0061
11731 0061
118E1 0061
+11951 0061
11C51 0061
11C5A 0061
11D51 0061
@@ -44044,6 +45499,7 @@ ABF1 0041
10E60 0041
10F1D 0041
10F51 0041
+10FC5 0041
11052 0041
11067 0041
110F1 0041
@@ -44057,6 +45513,7 @@ ABF1 0041
116C1 0041
11731 0041
118E1 0041
+11951 0041
11C51 0041
11C5A 0041
11D51 0041
@@ -44090,11 +45547,13 @@ FF11 0041
1D7E3 0061
1D7ED 0061
1D7F7 0061
+1FBF1 0061
1D7CF 0041
1D7D9 0041
1D7E3 0041
1D7ED 0041
1D7F7 0041
+1FBF1 0041
2460 0061
24F5 0061
2776 0061
@@ -44182,6 +45641,7 @@ ABF1 0062
10E60 0062
10F1D 0062
10F51 0062
+10FC5 0062
11052 0062
11067 0062
110F1 0062
@@ -44195,6 +45655,7 @@ ABF1 0062
116C1 0062
11731 0062
118E1 0062
+11951 0062
11C51 0062
11C5A 0062
11D51 0062
@@ -44226,6 +45687,7 @@ FF11 0062
1D7E3 0062
1D7ED 0062
1D7F7 0062
+1FBF1 0062
2460 0062
24F5 0062
2776 0062
@@ -44316,6 +45778,7 @@ ABF2 0021
10D32 0021
10E61 0021
10F1E 0021
+10FC6 0021
11053 0021
11068 0021
110F2 0021
@@ -44329,6 +45792,7 @@ ABF2 0021
116C2 0021
11732 0021
118E2 0021
+11952 0021
11C52 0021
11C5B 0021
11D52 0021
@@ -44363,6 +45827,7 @@ FF12 0021
1D7E4 0021
1D7EE 0021
1D7F8 0021
+1FBF2 0021
2461 0021
24F6 0021
2777 0021
@@ -44434,6 +45899,7 @@ ABF2 003F
10D32 003F
10E61 003F
10F1E 003F
+10FC6 003F
11053 003F
11068 003F
110F2 003F
@@ -44447,6 +45913,7 @@ ABF2 003F
116C2 003F
11732 003F
118E2 003F
+11952 003F
11C52 003F
11C5B 003F
11D52 003F
@@ -44481,6 +45948,7 @@ FF12 003F
1D7E4 003F
1D7EE 003F
1D7F8 003F
+1FBF2 003F
2461 003F
24F6 003F
2777 003F
@@ -44712,6 +46180,7 @@ ABF2 0061
10D32 0061
10E61 0061
10F1E 0061
+10FC6 0061
11053 0061
11068 0061
110F2 0061
@@ -44725,6 +46194,7 @@ ABF2 0061
116C2 0061
11732 0061
118E2 0061
+11952 0061
11C52 0061
11C5B 0061
11D52 0061
@@ -44813,6 +46283,7 @@ ABF2 0041
10D32 0041
10E61 0041
10F1E 0041
+10FC6 0041
11053 0041
11068 0041
110F2 0041
@@ -44826,6 +46297,7 @@ ABF2 0041
116C2 0041
11732 0041
118E2 0041
+11952 0041
11C52 0041
11C5B 0041
11D52 0041
@@ -44862,11 +46334,13 @@ FF12 0041
1D7E4 0061
1D7EE 0061
1D7F8 0061
+1FBF2 0061
1D7D0 0041
1D7DA 0041
1D7E4 0041
1D7EE 0041
1D7F8 0041
+1FBF2 0041
2461 0061
24F6 0061
2777 0061
@@ -44948,6 +46422,7 @@ ABF2 0062
10D32 0062
10E61 0062
10F1E 0062
+10FC6 0062
11053 0062
11068 0062
110F2 0062
@@ -44961,6 +46436,7 @@ ABF2 0062
116C2 0062
11732 0062
118E2 0062
+11952 0062
11C52 0062
11C5B 0062
11D52 0062
@@ -44995,6 +46471,7 @@ FF12 0062
1D7E4 0062
1D7EE 0062
1D7F8 0062
+1FBF2 0062
2461 0062
24F6 0062
2777 0062
@@ -45091,6 +46568,7 @@ ABF3 0021
10D33 0021
10E62 0021
10F1F 0021
+10FC7 0021
11054 0021
11069 0021
110F3 0021
@@ -45104,6 +46582,7 @@ ABF3 0021
116C3 0021
11733 0021
118E3 0021
+11953 0021
11C53 0021
11C5C 0021
11D53 0021
@@ -45143,6 +46622,7 @@ FF13 0021
1D7E5 0021
1D7EF 0021
1D7F9 0021
+1FBF3 0021
2462 0021
24F7 0021
2778 0021
@@ -45208,6 +46688,7 @@ ABF3 003F
10D33 003F
10E62 003F
10F1F 003F
+10FC7 003F
11054 003F
11069 003F
110F3 003F
@@ -45221,6 +46702,7 @@ ABF3 003F
116C3 003F
11733 003F
118E3 003F
+11953 003F
11C53 003F
11C5C 003F
11D53 003F
@@ -45260,6 +46742,7 @@ FF13 003F
1D7E5 003F
1D7EF 003F
1D7F9 003F
+1FBF3 003F
2462 003F
24F7 003F
2778 003F
@@ -45410,6 +46893,7 @@ ABF3 0061
10D33 0061
10E62 0061
10F1F 0061
+10FC7 0061
11054 0061
11069 0061
110F3 0061
@@ -45423,6 +46907,7 @@ ABF3 0061
116C3 0061
11733 0061
118E3 0061
+11953 0061
11C53 0061
11C5C 0061
11D53 0061
@@ -45511,6 +46996,7 @@ ABF3 0041
10D33 0041
10E62 0041
10F1F 0041
+10FC7 0041
11054 0041
11069 0041
110F3 0041
@@ -45524,6 +47010,7 @@ ABF3 0041
116C3 0041
11733 0041
118E3 0041
+11953 0041
11C53 0041
11C5C 0041
11D53 0041
@@ -45565,11 +47052,13 @@ FF13 0041
1D7E5 0061
1D7EF 0061
1D7F9 0061
+1FBF3 0061
1D7D1 0041
1D7DB 0041
1D7E5 0041
1D7EF 0041
1D7F9 0041
+1FBF3 0041
2462 0061
24F7 0061
2778 0061
@@ -45644,6 +47133,7 @@ ABF3 0062
10D33 0062
10E62 0062
10F1F 0062
+10FC7 0062
11054 0062
11069 0062
110F3 0062
@@ -45657,6 +47147,7 @@ ABF3 0062
116C3 0062
11733 0062
118E3 0062
+11953 0062
11C53 0062
11C5C 0062
11D53 0062
@@ -45696,6 +47187,7 @@ FF13 0062
1D7E5 0062
1D7EF 0062
1D7F9 0062
+1FBF3 0062
2462 0062
24F7 0062
2778 0062
@@ -45783,6 +47275,7 @@ ABF4 0021
10D34 0021
10E63 0021
10F20 0021
+10FC8 0021
11055 0021
1106A 0021
110F4 0021
@@ -45796,6 +47289,7 @@ ABF4 0021
116C4 0021
11734 0021
118E4 0021
+11954 0021
11C54 0021
11C5D 0021
11D54 0021
@@ -45836,6 +47330,7 @@ FF14 0021
1D7E6 0021
1D7F0 0021
1D7FA 0021
+1FBF4 0021
2463 0021
24F8 0021
2779 0021
@@ -45897,6 +47392,7 @@ ABF4 003F
10D34 003F
10E63 003F
10F20 003F
+10FC8 003F
11055 003F
1106A 003F
110F4 003F
@@ -45910,6 +47406,7 @@ ABF4 003F
116C4 003F
11734 003F
118E4 003F
+11954 003F
11C54 003F
11C5D 003F
11D54 003F
@@ -45950,6 +47447,7 @@ FF14 003F
1D7E6 003F
1D7F0 003F
1D7FA 003F
+1FBF4 003F
2463 003F
24F8 003F
2779 003F
@@ -46076,6 +47574,7 @@ ABF4 0061
10D34 0061
10E63 0061
10F20 0061
+10FC8 0061
11055 0061
1106A 0061
110F4 0061
@@ -46089,6 +47588,7 @@ ABF4 0061
116C4 0061
11734 0061
118E4 0061
+11954 0061
11C54 0061
11C5D 0061
11D54 0061
@@ -46175,6 +47675,7 @@ ABF4 0041
10D34 0041
10E63 0041
10F20 0041
+10FC8 0041
11055 0041
1106A 0041
110F4 0041
@@ -46188,6 +47689,7 @@ ABF4 0041
116C4 0041
11734 0041
118E4 0041
+11954 0041
11C54 0041
11C5D 0041
11D54 0041
@@ -46230,11 +47732,13 @@ FF14 0041
1D7E6 0061
1D7F0 0061
1D7FA 0061
+1FBF4 0061
1D7D2 0041
1D7DC 0041
1D7E6 0041
1D7F0 0041
1D7FA 0041
+1FBF4 0041
2463 0061
24F8 0061
2779 0061
@@ -46304,6 +47808,7 @@ ABF4 0062
10D34 0062
10E63 0062
10F20 0062
+10FC8 0062
11055 0062
1106A 0062
110F4 0062
@@ -46317,6 +47822,7 @@ ABF4 0062
116C4 0062
11734 0062
118E4 0062
+11954 0062
11C54 0062
11C5D 0062
11D54 0062
@@ -46357,6 +47863,7 @@ FF14 0062
1D7E6 0062
1D7F0 0062
1D7FA 0062
+1FBF4 0062
2463 0062
24F8 0062
2779 0062
@@ -46460,6 +47967,7 @@ ABF5 0021
116C5 0021
11735 0021
118E5 0021
+11955 0021
11C55 0021
11C5E 0021
11D55 0021
@@ -46497,6 +48005,7 @@ FF15 0021
1D7E7 0021
1D7F1 0021
1D7FB 0021
+1FBF5 0021
2464 0021
24F9 0021
277A 0021
@@ -46575,6 +48084,7 @@ ABF5 003F
116C5 003F
11735 003F
118E5 003F
+11955 003F
11C55 003F
11C5E 003F
11D55 003F
@@ -46612,6 +48122,7 @@ FF15 003F
1D7E7 003F
1D7F1 003F
1D7FB 003F
+1FBF5 003F
2464 003F
24F9 003F
277A 003F
@@ -46720,6 +48231,7 @@ ABF5 0061
116C5 0061
11735 0061
118E5 0061
+11955 0061
11C55 0061
11C5E 0061
11D55 0061
@@ -46820,6 +48332,7 @@ ABF5 0041
116C5 0041
11735 0041
118E5 0041
+11955 0041
11C55 0041
11C5E 0041
11D55 0041
@@ -46859,11 +48372,13 @@ FF15 0041
1D7E7 0061
1D7F1 0061
1D7FB 0061
+1FBF5 0061
1D7D3 0041
1D7DD 0041
1D7E7 0041
1D7F1 0041
1D7FB 0041
+1FBF5 0041
2464 0061
24F9 0061
277A 0061
@@ -46950,6 +48465,7 @@ ABF5 0062
116C5 0062
11735 0062
118E5 0062
+11955 0062
11C55 0062
11C5E 0062
11D55 0062
@@ -46987,6 +48503,7 @@ FF15 0062
1D7E7 0062
1D7F1 0062
1D7FB 0062
+1FBF5 0062
2464 0062
24F9 0062
277A 0062
@@ -47074,6 +48591,7 @@ ABF6 0021
116C6 0021
11736 0021
118E6 0021
+11956 0021
11C56 0021
11C5F 0021
11D56 0021
@@ -47105,6 +48623,7 @@ FF16 0021
1D7E8 0021
1D7F2 0021
1D7FC 0021
+1FBF6 0021
2465 0021
24FA 0021
277B 0021
@@ -47172,6 +48691,7 @@ ABF6 003F
116C6 003F
11736 003F
118E6 003F
+11956 003F
11C56 003F
11C5F 003F
11D56 003F
@@ -47203,6 +48723,7 @@ FF16 003F
1D7E8 003F
1D7F2 003F
1D7FC 003F
+1FBF6 003F
2465 003F
24FA 003F
277B 003F
@@ -47285,6 +48806,7 @@ ABF6 0061
116C6 0061
11736 0061
118E6 0061
+11956 0061
11C56 0061
11C5F 0061
11D56 0061
@@ -47368,6 +48890,7 @@ ABF6 0041
116C6 0041
11736 0041
118E6 0041
+11956 0041
11C56 0041
11C5F 0041
11D56 0041
@@ -47401,11 +48924,13 @@ FF16 0041
1D7E8 0061
1D7F2 0061
1D7FC 0061
+1FBF6 0061
1D7D4 0041
1D7DE 0041
1D7E8 0041
1D7F2 0041
1D7FC 0041
+1FBF6 0041
2465 0061
24FA 0061
277B 0061
@@ -47481,6 +49006,7 @@ ABF6 0062
116C6 0062
11736 0062
118E6 0062
+11956 0062
11C56 0062
11C5F 0062
11D56 0062
@@ -47512,6 +49038,7 @@ FF16 0062
1D7E8 0062
1D7F2 0062
1D7FC 0062
+1FBF6 0062
2465 0062
24FA 0062
277B 0062
@@ -47598,6 +49125,7 @@ ABF7 0021
116C7 0021
11737 0021
118E7 0021
+11957 0021
11C57 0021
11C60 0021
11D57 0021
@@ -47630,6 +49158,7 @@ FF17 0021
1D7E9 0021
1D7F3 0021
1D7FD 0021
+1FBF7 0021
2466 0021
24FB 0021
277C 0021
@@ -47696,6 +49225,7 @@ ABF7 003F
116C7 003F
11737 003F
118E7 003F
+11957 003F
11C57 003F
11C60 003F
11D57 003F
@@ -47728,6 +49258,7 @@ FF17 003F
1D7E9 003F
1D7F3 003F
1D7FD 003F
+1FBF7 003F
2466 003F
24FB 003F
277C 003F
@@ -47814,6 +49345,7 @@ ABF7 0061
116C7 0061
11737 0061
118E7 0061
+11957 0061
11C57 0061
11C60 0061
11D57 0061
@@ -47897,6 +49429,7 @@ ABF7 0041
116C7 0041
11737 0041
118E7 0041
+11957 0041
11C57 0041
11C60 0041
11D57 0041
@@ -47931,11 +49464,13 @@ FF17 0041
1D7E9 0061
1D7F3 0061
1D7FD 0061
+1FBF7 0061
1D7D5 0041
1D7DF 0041
1D7E9 0041
1D7F3 0041
1D7FD 0041
+1FBF7 0041
2466 0061
24FB 0061
277C 0061
@@ -48010,6 +49545,7 @@ ABF7 0062
116C7 0062
11737 0062
118E7 0062
+11957 0062
11C57 0062
11C60 0062
11D57 0062
@@ -48042,6 +49578,7 @@ FF17 0062
1D7E9 0062
1D7F3 0062
1D7FD 0062
+1FBF7 0062
2466 0062
24FB 0062
277C 0062
@@ -48128,6 +49665,7 @@ ABF8 0021
116C8 0021
11738 0021
118E8 0021
+11958 0021
11C58 0021
11C61 0021
11D58 0021
@@ -48159,6 +49697,7 @@ FF18 0021
1D7EA 0021
1D7F4 0021
1D7FE 0021
+1FBF8 0021
2467 0021
24FC 0021
277D 0021
@@ -48225,6 +49764,7 @@ ABF8 003F
116C8 003F
11738 003F
118E8 003F
+11958 003F
11C58 003F
11C61 003F
11D58 003F
@@ -48256,6 +49796,7 @@ FF18 003F
1D7EA 003F
1D7F4 003F
1D7FE 003F
+1FBF8 003F
2467 003F
24FC 003F
277D 003F
@@ -48332,6 +49873,7 @@ ABF8 0061
116C8 0061
11738 0061
118E8 0061
+11958 0061
11C58 0061
11C61 0061
11D58 0061
@@ -48414,6 +49956,7 @@ ABF8 0041
116C8 0041
11738 0041
118E8 0041
+11958 0041
11C58 0041
11C61 0041
11D58 0041
@@ -48447,11 +49990,13 @@ FF18 0041
1D7EA 0061
1D7F4 0061
1D7FE 0061
+1FBF8 0061
1D7D6 0041
1D7E0 0041
1D7EA 0041
1D7F4 0041
1D7FE 0041
+1FBF8 0041
2467 0061
24FC 0061
277D 0061
@@ -48526,6 +50071,7 @@ ABF8 0062
116C8 0062
11738 0062
118E8 0062
+11958 0062
11C58 0062
11C61 0062
11D58 0062
@@ -48557,6 +50103,7 @@ FF18 0062
1D7EA 0062
1D7F4 0062
1D7FE 0062
+1FBF8 0062
2467 0062
24FC 0062
277D 0062
@@ -48648,6 +50195,7 @@ ABF9 0021
116C9 0021
11739 0021
118E9 0021
+11959 0021
11C59 0021
11C62 0021
11D59 0021
@@ -48681,6 +50229,7 @@ FF19 0021
1D7EB 0021
1D7F5 0021
1D7FF 0021
+1FBF9 0021
2468 0021
24FD 0021
277E 0021
@@ -48747,6 +50296,7 @@ ABF9 003F
116C9 003F
11739 003F
118E9 003F
+11959 003F
11C59 003F
11C62 003F
11D59 003F
@@ -48780,6 +50330,7 @@ FF19 003F
1D7EB 003F
1D7F5 003F
1D7FF 003F
+1FBF9 003F
2468 003F
24FD 003F
277E 003F
@@ -48851,6 +50402,7 @@ ABF9 0061
116C9 0061
11739 0061
118E9 0061
+11959 0061
11C59 0061
11C62 0061
11D59 0061
@@ -48935,6 +50487,7 @@ ABF9 0041
116C9 0041
11739 0041
118E9 0041
+11959 0041
11C59 0041
11C62 0041
11D59 0041
@@ -48970,11 +50523,13 @@ FF19 0041
1D7EB 0061
1D7F5 0061
1D7FF 0061
+1FBF9 0061
1D7D7 0041
1D7E1 0041
1D7EB 0041
1D7F5 0041
1D7FF 0041
+1FBF9 0041
2468 0061
24FD 0061
277E 0061
@@ -49049,6 +50604,7 @@ ABF9 0062
116C9 0062
11739 0062
118E9 0062
+11959 0062
11C59 0062
11C62 0062
11D59 0062
@@ -49082,6 +50638,7 @@ FF19 0062
1D7EB 0062
1D7F5 0062
1D7FF 0062
+1FBF9 0062
2468 0062
24FD 0062
277E 0062
@@ -49436,6 +50993,7 @@ FFFB 0061
13436 0061
13437 0061
13438 0061
+16FE4 0061
1BCA0 0061
1BCA1 0061
1BCA2 0061
@@ -50283,6 +51841,7 @@ FFFB 0041
13436 0041
13437 0041
13438 0041
+16FE4 0041
1BCA0 0041
1BCA1 0041
1BCA2 0041
@@ -51083,6 +52642,7 @@ E01EF 0041
0487 0061
0741 0061
0745 0061
+0B55 0061
17CB 0061
17CC 0061
17CD 0061
@@ -51155,6 +52715,7 @@ A67D 0061
0487 0041
0741 0041
0745 0041
+0B55 0041
17CB 0041
17CC 0041
17CD 0041
@@ -51616,10 +53177,14 @@ FE7E 0061
FE7E 0041
0653 0061
0AFC 0061
+10EAC 0061
0653 0041
0AFC 0041
+10EAC 0041
0654 0061
+10EAB 0061
0654 0041
+10EAB 0041
0655 0061
0655 0041
065F 0061
@@ -51773,6 +53338,7 @@ A9B3 0061
115C0 0061
116B7 0061
1183A 0061
+11943 0061
11A33 0061
11D42 0061
093C 0041
@@ -51800,6 +53366,7 @@ A9B3 0041
115C0 0041
116B7 0041
1183A 0041
+11943 0041
11A33 0041
11D42 0041
0900 0061
@@ -51812,6 +53379,7 @@ A9B3 0041
0C01 0061
0C81 0061
0D01 0061
+0D81 0061
1B00 0061
1B01 0061
A8C5 0061
@@ -51820,11 +53388,13 @@ A980 0061
11080 0061
11100 0061
11180 0061
+111CF 0061
11301 0061
11443 0061
114BF 0061
115BC 0061
11640 0061
+1193C 0061
11A35 0061
11A36 0061
11A37 0061
@@ -51841,6 +53411,7 @@ A980 0061
0C01 0041
0C81 0041
0D01 0041
+0D81 0041
1B00 0041
1B01 0041
A8C5 0041
@@ -51849,11 +53420,13 @@ A980 0041
11080 0041
11100 0041
11180 0041
+111CF 0041
11301 0041
11443 0041
114BF 0041
115BC 0041
11640 0041
+1193C 0041
11A35 0041
11A36 0041
11A37 0041
@@ -51897,6 +53470,7 @@ A981 0061
1163D 0061
116AB 0061
11837 0061
+1193B 0061
119DE 0061
11A38 0061
11A96 0061
@@ -51941,6 +53515,7 @@ A981 0041
1163D 0041
116AB 0041
11837 0041
+1193B 0041
119DE 0041
11A38 0041
11A96 0041
@@ -52168,6 +53743,10 @@ A92D 0041
302E 0041
302F 0061
302F 0041
+16FF0 0061
+16FF0 0041
+16FF1 0061
+16FF1 0041
20D0 0061
20D0 0041
20D1 0061
@@ -53333,6 +54912,7 @@ FFFB 0062
13436 0062
13437 0062
13438 0062
+16FE4 0062
1BCA0 0062
1BCA1 0062
1BCA2 0062
@@ -53918,6 +55498,7 @@ E01EF 0062
0487 0062
0741 0062
0745 0062
+0B55 0062
17CB 0062
17CC 0062
17CD 0062
@@ -54173,7 +55754,9 @@ FE7F 0062
FE7E 0062
0653 0062
0AFC 0062
+10EAC 0062
0654 0062
+10EAB 0062
0655 0062
065F 0062
0656 0062
@@ -54263,6 +55846,7 @@ A9B3 0062
115C0 0062
116B7 0062
1183A 0062
+11943 0062
11A33 0062
11D42 0062
0900 0062
@@ -54275,6 +55859,7 @@ A9B3 0062
0C01 0062
0C81 0062
0D01 0062
+0D81 0062
1B00 0062
1B01 0062
A8C5 0062
@@ -54283,11 +55868,13 @@ A980 0062
11080 0062
11100 0062
11180 0062
+111CF 0062
11301 0062
11443 0062
114BF 0062
115BC 0062
11640 0062
+1193C 0062
11A35 0062
11A36 0062
11A37 0062
@@ -54331,6 +55918,7 @@ A981 0062
1163D 0062
116AB 0062
11837 0062
+1193B 0062
119DE 0062
11A38 0062
11A96 0062
@@ -54448,6 +56036,8 @@ A92D 0062
302D 0062
302E 0062
302F 0062
+16FF0 0062
+16FF1 0062
20D0 0062
20D1 0062
20D2 0062
@@ -55687,6 +57277,16 @@ AB66 0062
1D06 0061
1D06 0041
1D06 0062
+A7C8 0021
+A7C7 0021
+A7C8 003F
+A7C7 003F
+A7C8 0061
+A7C8 0041
+A7C7 0061
+A7C7 0041
+A7C8 0062
+A7C7 0062
1D6D 0021
1D6D 003F
1D6D 0061
@@ -57759,6 +59359,16 @@ A7AA 0062
2C75 0041
2C76 0062
2C75 0062
+A7F6 0021
+A7F5 0021
+A7F6 003F
+A7F5 003F
+A7F6 0061
+A7F6 0041
+A7F5 0061
+A7F5 0041
+A7F6 0062
+A7F5 0062
A727 0021
A726 0021
AB5C 0021
@@ -63002,6 +64612,11 @@ AB4C 0062
02B6 0041
0281 0062
02B6 0062
+AB68 0021
+AB68 003F
+AB68 0061
+AB68 0041
+AB68 0062
A775 0021
A775 003F
A775 0061
@@ -63487,6 +65102,16 @@ A731 003F
A731 0061
A731 0041
A731 0062
+A7CA 0021
+A7C9 0021
+A7CA 003F
+A7C9 003F
+A7CA 0061
+A7CA 0041
+A7C9 0061
+A7C9 0041
+A7CA 0062
+A7C9 0062
1D74 0021
1D74 003F
1D74 0061
@@ -65375,10 +67000,13 @@ A75E 0062
0057 0323 0334
0057 0334 0323
1E88 0334
+0334 1ABF
+1ABF 0334
0334 1DF1
1DF1 0334
0077 0021
FF57 0021
+1ABF 0021
1DF1 0021
1D430 0021
1D464 0021
@@ -65430,6 +67058,7 @@ FF37 0021
1E88 0021
0077 003F
FF57 003F
+1ABF 003F
1DF1 003F
1D430 003F
1D464 003F
@@ -65483,7 +67112,9 @@ FF37 003F
0077 0041
FF57 0061
FF57 0041
+1ABF 0061
1DF1 0061
+1ABF 0041
1DF1 0041
1D430 0061
1D464 0061
@@ -65583,6 +67214,7 @@ FF37 0041
1E88 0041
0077 0062
FF57 0062
+1ABF 0062
1DF1 0062
1D430 0062
1D464 0062
@@ -65677,11 +67309,23 @@ A7C2 0062
2C72 0041
2C73 0062
2C72 0062
+0334 1AC0
+1AC0 0334
028D 0021
+1AC0 0021
+AB69 0021
028D 003F
+1AC0 003F
+AB69 003F
028D 0061
028D 0041
+1AC0 0061
+1AC0 0041
+AB69 0061
+AB69 0041
028D 0062
+1AC0 0062
+AB69 0062
0078 0308 0334
0078 0334 0308
1E8D 0334
@@ -77963,6 +79607,11 @@ FB5A 0062
0756 0061
0756 0041
0756 0062
+08BE 0021
+08BE 003F
+08BE 0061
+08BE 0041
+08BE 0062
08A1 0021
08A1 003F
08A1 0061
@@ -78413,6 +80062,16 @@ FB62 0062
08B8 0061
08B8 0041
08B8 0062
+08BF 0021
+08BF 003F
+08BF 0061
+08BF 0041
+08BF 0062
+08C0 0021
+08C0 003F
+08C0 0061
+08C0 0041
+08C0 0062
062C 0021
1EE02 0021
1EE22 0021
@@ -78653,6 +80312,21 @@ FB7E 0062
08A2 0061
08A2 0041
08A2 0062
+08C1 0021
+08C1 003F
+08C1 0061
+08C1 0041
+08C1 0062
+08C5 0021
+08C5 003F
+08C5 0061
+08C5 0041
+08C5 0062
+08C6 0021
+08C6 003F
+08C6 0061
+08C6 0041
+08C6 0062
062D 0021
1EE07 0021
1EE27 0021
@@ -80463,6 +82137,11 @@ FCFA 0062
06A0 0061
06A0 0041
06A0 0062
+08C3 0021
+08C3 003F
+08C3 0061
+08C3 0041
+08C3 0062
06FC 0021
06FC 003F
06FC 0061
@@ -80863,6 +82542,11 @@ FC36 0062
06A8 0061
06A8 0041
06A8 0062
+08C4 0021
+08C4 003F
+08C4 0061
+08C4 0041
+08C4 0062
08A5 0021
08A5 003F
08A5 0061
@@ -81223,6 +82907,11 @@ FB96 0062
0764 0061
0764 0041
0764 0062
+08C2 0021
+08C2 003F
+08C2 0061
+08C2 0041
+08C2 0062
0644 0021
1EE0B 0021
1EE2B 0021
@@ -81488,6 +83177,11 @@ FC44 0062
08A6 0061
08A6 0041
08A6 0062
+08C7 0021
+08C7 003F
+08C7 0061
+08C7 0041
+08C7 0062
0645 0021
1EE0C 0021
1EE2C 0021
@@ -89544,6 +91238,11 @@ A8FF 0062
0D3D 0061
0D3D 0041
0D3D 0062
+0D04 0021
+0D04 003F
+0D04 0061
+0D04 0041
+0D04 0062
0D3E 0021
0D3E 003F
0D3E 0061
@@ -90462,6 +92161,13 @@ A806 003F
A806 0061
A806 0041
A806 0062
+0334 A82C
+A82C 0334
+A82C 0021
+A82C 003F
+A82C 0061
+A82C 0041
+A82C 0062
A807 0021
A807 003F
A807 0061
@@ -91745,6 +93451,11 @@ A8C4 0062
111BC 0061
111BC 0041
111BC 0062
+111CE 0021
+111CE 003F
+111CE 0061
+111CE 0041
+111CE 0062
111BD 0021
111BD 003F
111BD 0061
@@ -93139,6 +94850,16 @@ A8C4 0062
11447 0061
11447 0041
11447 0062
+11460 0021
+11460 003F
+11460 0061
+11460 0041
+11460 0062
+11461 0021
+11461 003F
+11461 0061
+11461 0041
+11461 0062
11448 0021
11448 003F
11448 0061
@@ -94514,6 +96235,298 @@ A8C4 0062
116B6 0061
116B6 0041
116B6 0062
+11900 0021
+11900 003F
+11900 0061
+11900 0041
+11900 0062
+11901 0021
+11901 003F
+11901 0061
+11901 0041
+11901 0062
+11902 0021
+11902 003F
+11902 0061
+11902 0041
+11902 0062
+11903 0021
+11903 003F
+11903 0061
+11903 0041
+11903 0062
+11904 0021
+11904 003F
+11904 0061
+11904 0041
+11904 0062
+11905 0021
+11905 003F
+11905 0061
+11905 0041
+11905 0062
+11906 0021
+11906 003F
+11906 0061
+11906 0041
+11906 0062
+11909 0021
+11909 003F
+11909 0061
+11909 0041
+11909 0062
+1190C 0021
+1190C 003F
+1190C 0061
+1190C 0041
+1190C 0062
+1190D 0021
+1190D 003F
+1190D 0061
+1190D 0041
+1190D 0062
+1190E 0021
+1190E 003F
+1190E 0061
+1190E 0041
+1190E 0062
+1190F 0021
+1190F 003F
+1190F 0061
+1190F 0041
+1190F 0062
+11910 0021
+11910 003F
+11910 0061
+11910 0041
+11910 0062
+1193F 0021
+1193F 003F
+1193F 0061
+1193F 0041
+1193F 0062
+11911 0021
+11911 003F
+11911 0061
+11911 0041
+11911 0062
+11912 0021
+11912 003F
+11912 0061
+11912 0041
+11912 0062
+11913 0021
+11913 003F
+11913 0061
+11913 0041
+11913 0062
+11915 0021
+11915 003F
+11915 0061
+11915 0041
+11915 0062
+11916 0021
+11916 003F
+11916 0061
+11916 0041
+11916 0062
+11918 0021
+11918 003F
+11918 0061
+11918 0041
+11918 0062
+11919 0021
+11919 003F
+11919 0061
+11919 0041
+11919 0062
+1191A 0021
+1191A 003F
+1191A 0061
+1191A 0041
+1191A 0062
+1191B 0021
+1191B 003F
+1191B 0061
+1191B 0041
+1191B 0062
+1191C 0021
+1191C 003F
+1191C 0061
+1191C 0041
+1191C 0062
+1191D 0021
+1191D 003F
+1191D 0061
+1191D 0041
+1191D 0062
+1191E 0021
+1191E 003F
+1191E 0061
+1191E 0041
+1191E 0062
+1191F 0021
+1191F 003F
+1191F 0061
+1191F 0041
+1191F 0062
+11920 0021
+11920 003F
+11920 0061
+11920 0041
+11920 0062
+11921 0021
+11921 003F
+11921 0061
+11921 0041
+11921 0062
+11922 0021
+11922 003F
+11922 0061
+11922 0041
+11922 0062
+11923 0021
+11923 003F
+11923 0061
+11923 0041
+11923 0062
+11924 0021
+11924 003F
+11924 0061
+11924 0041
+11924 0062
+11925 0021
+11925 003F
+11925 0061
+11925 0041
+11925 0062
+11940 0021
+11940 003F
+11940 0061
+11940 0041
+11940 0062
+11926 0021
+11926 003F
+11926 0061
+11926 0041
+11926 0062
+11941 0021
+11941 003F
+11941 0061
+11941 0041
+11941 0062
+11927 0021
+11927 003F
+11927 0061
+11927 0041
+11927 0062
+11942 0021
+11942 003F
+11942 0061
+11942 0041
+11942 0062
+11928 0021
+11928 003F
+11928 0061
+11928 0041
+11928 0062
+11929 0021
+11929 003F
+11929 0061
+11929 0041
+11929 0062
+1192A 0021
+1192A 003F
+1192A 0061
+1192A 0041
+1192A 0062
+1192B 0021
+1192B 003F
+1192B 0061
+1192B 0041
+1192B 0062
+1192C 0021
+1192C 003F
+1192C 0061
+1192C 0041
+1192C 0062
+1192D 0021
+1192D 003F
+1192D 0061
+1192D 0041
+1192D 0062
+1192E 0021
+1192E 003F
+1192E 0061
+1192E 0041
+1192E 0062
+1192F 0021
+1192F 003F
+1192F 0061
+1192F 0041
+1192F 0062
+11930 0021
+11930 003F
+11930 0061
+11930 0041
+11930 0062
+11931 0021
+11931 003F
+11931 0061
+11931 0041
+11931 0062
+11932 0021
+11932 003F
+11932 0061
+11932 0041
+11932 0062
+11933 0021
+11933 003F
+11933 0061
+11933 0041
+11933 0062
+11934 0021
+11934 003F
+11934 0061
+11934 0041
+11934 0062
+11935 0021
+11935 003F
+11935 0061
+11935 0041
+11935 0062
+11935 0001 11930 0061
+11935 0591 11930 0061
+11935 1D165 11930 0061
+11937 0021
+11937 003F
+11937 0061
+11937 0041
+11937 0062
+11935 11930 0021
+11938 0021
+11935 11930 003F
+11938 003F
+11935 11930 0061
+11938 0061
+11935 11930 0041
+11938 0041
+11935 11930 0062
+11938 0062
+0334 1193D
+1193D 0334
+1193D 0021
+1193D 003F
+1193D 0061
+1193D 0041
+1193D 0062
+0334 1193E
+1193E 0334
+1193E 0021
+1193E 003F
+1193E 0061
+1193E 0041
+1193E 0062
119A0 0021
119A0 003F
119A0 0061
@@ -108689,6 +110702,11 @@ AA76 0062
11123 0061
11123 0041
11123 0062
+11147 0021
+11147 003F
+11147 0061
+11147 0041
+11147 0062
11124 0021
11124 003F
11124 0061
@@ -112552,10 +114570,15 @@ A9B2 0061
A9B2 0041
A9B2 0062
A9B4 0021
+A9B5 0021
A9B4 003F
+A9B5 003F
A9B4 0061
A9B4 0041
+A9B5 0061
+A9B5 0041
A9B4 0062
+A9B5 0062
A9BC 0021
A9BC 003F
A9BC 0061
@@ -112596,11 +114619,6 @@ A9BB 003F
A9BB 0061
A9BB 0041
A9BB 0062
-A9B5 0021
-A9B5 003F
-A9B5 0061
-A9B5 0041
-A9B5 0062
0334 A9C0
A9C0 0334
A9C0 0021
@@ -132573,14 +134591,19 @@ FF9D 0062
310C 0041
310C 0062
310D 0021
+31BB 0021
31A3 0021
310D 003F
+31BB 003F
31A3 003F
310D 0061
310D 0041
+31BB 0061
+31BB 0041
31A3 0061
31A3 0041
310D 0062
+31BB 0062
31A3 0062
310E 0021
31B6 0021
@@ -132637,6 +134660,16 @@ FF9D 0062
312C 0061
312C 0041
312C 0062
+31BC 0021
+31BC 003F
+31BC 0061
+31BC 0041
+31BC 0062
+31BD 0021
+31BD 003F
+31BD 0061
+31BD 0041
+31BD 0062
3113 0021
3113 003F
3113 0061
@@ -132852,6 +134885,16 @@ FF9D 0062
312D 0061
312D 0041
312D 0062
+31BE 0021
+31BE 003F
+31BE 0061
+31BE 0041
+31BE 0062
+31BF 0021
+31BF 003F
+31BF 0061
+31BF 0041
+31BF 0062
A000 0021
A000 003F
A000 0061
@@ -138857,6 +140900,11 @@ A4EC 003F
A4EC 0061
A4EC 0041
A4EC 0062
+11FB0 0021
+11FB0 003F
+11FB0 0061
+11FB0 0041
+11FB0 0062
A4EE 0021
A4EE 003F
A4EE 0061
@@ -149177,6 +151225,331 @@ A4F7 0062
10F44 0061
10F44 0041
10F44 0062
+10E80 0021
+10E80 003F
+10E80 0061
+10E80 0041
+10E80 0062
+10E81 0021
+10E81 003F
+10E81 0061
+10E81 0041
+10E81 0062
+10E82 0021
+10E82 003F
+10E82 0061
+10E82 0041
+10E82 0062
+10E83 0021
+10E83 003F
+10E83 0061
+10E83 0041
+10E83 0062
+10E84 0021
+10E84 003F
+10E84 0061
+10E84 0041
+10E84 0062
+10E85 0021
+10E85 003F
+10E85 0061
+10E85 0041
+10E85 0062
+10E86 0021
+10E86 003F
+10E86 0061
+10E86 0041
+10E86 0062
+10E87 0021
+10E87 003F
+10E87 0061
+10E87 0041
+10E87 0062
+10E88 0021
+10E88 003F
+10E88 0061
+10E88 0041
+10E88 0062
+10E89 0021
+10E89 003F
+10E89 0061
+10E89 0041
+10E89 0062
+10E8A 0021
+10E8A 003F
+10E8A 0061
+10E8A 0041
+10E8A 0062
+10E8B 0021
+10E8B 003F
+10E8B 0061
+10E8B 0041
+10E8B 0062
+10E8C 0021
+10E8C 003F
+10E8C 0061
+10E8C 0041
+10E8C 0062
+10E8D 0021
+10E8D 003F
+10E8D 0061
+10E8D 0041
+10E8D 0062
+10E8E 0021
+10E8E 003F
+10E8E 0061
+10E8E 0041
+10E8E 0062
+10E8F 0021
+10E8F 003F
+10E8F 0061
+10E8F 0041
+10E8F 0062
+10E90 0021
+10E90 003F
+10E90 0061
+10E90 0041
+10E90 0062
+10E91 0021
+10E91 003F
+10E91 0061
+10E91 0041
+10E91 0062
+10E92 0021
+10E92 003F
+10E92 0061
+10E92 0041
+10E92 0062
+10E93 0021
+10E93 003F
+10E93 0061
+10E93 0041
+10E93 0062
+10E94 0021
+10E94 003F
+10E94 0061
+10E94 0041
+10E94 0062
+10E95 0021
+10E95 003F
+10E95 0061
+10E95 0041
+10E95 0062
+10E96 0021
+10E96 003F
+10E96 0061
+10E96 0041
+10E96 0062
+10E97 0021
+10E97 003F
+10E97 0061
+10E97 0041
+10E97 0062
+10E98 0021
+10E98 003F
+10E98 0061
+10E98 0041
+10E98 0062
+10E99 0021
+10E99 003F
+10E99 0061
+10E99 0041
+10E99 0062
+10E9A 0021
+10E9A 003F
+10E9A 0061
+10E9A 0041
+10E9A 0062
+10E9B 0021
+10E9B 003F
+10E9B 0061
+10E9B 0041
+10E9B 0062
+10E9C 0021
+10E9C 003F
+10E9C 0061
+10E9C 0041
+10E9C 0062
+10E9D 0021
+10E9D 003F
+10E9D 0061
+10E9D 0041
+10E9D 0062
+10E9E 0021
+10E9E 003F
+10E9E 0061
+10E9E 0041
+10E9E 0062
+10E9F 0021
+10E9F 003F
+10E9F 0061
+10E9F 0041
+10E9F 0062
+10EA0 0021
+10EA0 003F
+10EA0 0061
+10EA0 0041
+10EA0 0062
+10EB0 0021
+10EB0 003F
+10EB0 0061
+10EB0 0041
+10EB0 0062
+10EA1 0021
+10EA1 003F
+10EA1 0061
+10EA1 0041
+10EA1 0062
+10EA2 0021
+10EA2 003F
+10EA2 0061
+10EA2 0041
+10EA2 0062
+10EA3 0021
+10EA3 003F
+10EA3 0061
+10EA3 0041
+10EA3 0062
+10EA4 0021
+10EA4 003F
+10EA4 0061
+10EA4 0041
+10EA4 0062
+10EA5 0021
+10EA5 003F
+10EA5 0061
+10EA5 0041
+10EA5 0062
+10EA6 0021
+10EA6 003F
+10EA6 0061
+10EA6 0041
+10EA6 0062
+10EA7 0021
+10EA7 003F
+10EA7 0061
+10EA7 0041
+10EA7 0062
+10EA8 0021
+10EA8 003F
+10EA8 0061
+10EA8 0041
+10EA8 0062
+10EB1 0021
+10EB1 003F
+10EB1 0061
+10EB1 0041
+10EB1 0062
+10EA9 0021
+10EA9 003F
+10EA9 0061
+10EA9 0041
+10EA9 0062
+10FB0 0021
+10FB0 003F
+10FB0 0061
+10FB0 0041
+10FB0 0062
+10FB1 0021
+10FB1 003F
+10FB1 0061
+10FB1 0041
+10FB1 0062
+10FB2 0021
+10FB2 003F
+10FB2 0061
+10FB2 0041
+10FB2 0062
+10FB3 0021
+10FB3 003F
+10FB3 0061
+10FB3 0041
+10FB3 0062
+10FB4 0021
+10FB4 003F
+10FB4 0061
+10FB4 0041
+10FB4 0062
+10FB5 0021
+10FB5 003F
+10FB5 0061
+10FB5 0041
+10FB5 0062
+10FB6 0021
+10FB6 003F
+10FB6 0061
+10FB6 0041
+10FB6 0062
+10FB7 0021
+10FB7 003F
+10FB7 0061
+10FB7 0041
+10FB7 0062
+10FB8 0021
+10FB8 003F
+10FB8 0061
+10FB8 0041
+10FB8 0062
+10FB9 0021
+10FB9 003F
+10FB9 0061
+10FB9 0041
+10FB9 0062
+10FBA 0021
+10FBA 003F
+10FBA 0061
+10FBA 0041
+10FBA 0062
+10FBB 0021
+10FBB 003F
+10FBB 0061
+10FBB 0041
+10FBB 0062
+10FBC 0021
+10FBC 003F
+10FBC 0061
+10FBC 0041
+10FBC 0062
+10FBD 0021
+10FBD 003F
+10FBD 0061
+10FBD 0041
+10FBD 0062
+10FBE 0021
+10FBE 003F
+10FBE 0061
+10FBE 0041
+10FBE 0062
+10FBF 0021
+10FBF 003F
+10FBF 0061
+10FBF 0041
+10FBF 0062
+10FC0 0021
+10FC0 003F
+10FC0 0061
+10FC0 0041
+10FC0 0062
+10FC1 0021
+10FC1 003F
+10FC1 0061
+10FC1 0041
+10FC1 0062
+10FC2 0021
+10FC2 003F
+10FC2 0061
+10FC2 0041
+10FC2 0062
+10FC3 0021
+10FC3 003F
+10FC3 0061
+10FC3 0041
+10FC3 0062
+10FC4 0021
+10FC4 003F
+10FC4 0061
+10FC4 0041
+10FC4 0062
10380 0021
10380 003F
10380 0061
@@ -163737,11 +166110,36 @@ A4F7 0062
18803 0061
18803 0041
18803 0062
-18AF2 0021
-18AF2 003F
-18AF2 0061
-18AF2 0041
-18AF2 0062
+18AFF 0021
+18AFF 003F
+18AFF 0061
+18AFF 0041
+18AFF 0062
+18D00 0021
+18D00 003F
+18D00 0061
+18D00 0041
+18D00 0062
+18D01 0021
+18D01 003F
+18D01 0061
+18D01 0041
+18D01 0062
+18D02 0021
+18D02 003F
+18D02 0061
+18D02 0041
+18D02 0062
+18D03 0021
+18D03 003F
+18D03 0061
+18D03 0041
+18D03 0062
+18D08 0021
+18D08 003F
+18D08 0061
+18D08 0041
+18D08 0062
1B170 0021
1B170 003F
1B170 0061
@@ -163767,6 +166165,16 @@ A4F7 0062
1B2FB 0061
1B2FB 0041
1B2FB 0062
+18B00 0021
+18B00 003F
+18B00 0061
+18B00 0041
+18B00 0062
+18CD5 0021
+18CD5 003F
+18CD5 0061
+18CD5 0041
+18CD5 0062
4E00 0021
2F00 0021
3280 0021
@@ -166292,11 +168700,6 @@ FA93 0041
2F8D9 0041
FA93 0062
2F8D9 0062
-2F8DA 0021
-2F8DA 003F
-2F8DA 0061
-2F8DA 0041
-2F8DA 0062
2F4A 0021
328D 0021
2F4A 003F
@@ -169807,11 +172210,11 @@ FACE 0062
0378 0061
0378 0041
0378 0062
-4DB6 0021
-4DB6 003F
-4DB6 0061
-4DB6 0041
-4DB6 0062
+9FFD 0021
+9FFD 003F
+9FFD 0061
+9FFD 0041
+9FFD 0062
D800 0021
D800 003F
D800 0061
@@ -169937,11 +172340,11 @@ FFF0 0062
1FFFF 0061
1FFFF 0041
1FFFF 0062
-2A6D7 0021
-2A6D7 003F
-2A6D7 0061
-2A6D7 0041
-2A6D7 0062
+2A6DE 0021
+2A6DE 003F
+2A6DE 0061
+2A6DE 0041
+2A6DE 0062
2B735 0021
2B735 003F
2B735 0061
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
index 4a208898073..99cc92cde93 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
@@ -1,10 +1,10 @@
# CollationTest_CLDR_SHIFTED_SHORT.txt
-# Date: 2019-04-01, 20:17:36 GMT
-# © 2019 Unicode®, Inc.
+# Date: 2020-02-12, 17:50:42 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
-# UCA Version: 12.1.0
-# UCD Version: 12.1.0
+# UCA Version: 13.0.0
+# UCD Version: 13.0.0
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Data_Files
@@ -140,6 +140,9 @@ FE58 003F
FF65 0021
30FB 003F
FF65 003F
+10EAD 0334
+10EAD 0021
+10EAD 003F
002C 0021
FE10 0021
FE50 0021
@@ -635,6 +638,7 @@ FFFB 0021
13436 0021
13437 0021
13438 0021
+16FE4 0021
1BCA0 0021
1BCA1 0021
1BCA2 0021
@@ -1505,6 +1509,7 @@ FFFB 003F
13436 003F
13437 003F
13438 003F
+16FE4 003F
1BCA0 003F
1BCA1 003F
1BCA2 003F
@@ -2254,6 +2259,9 @@ ABEB 003F
1173D 0334
1173D 0021
1173D 003F
+11944 0334
+11944 0021
+11944 003F
11C41 0334
11C41 0021
11C41 003F
@@ -2372,6 +2380,9 @@ A95F 003F
1173E 0334
1173E 0021
1173E 003F
+11946 0334
+11946 0021
+11946 003F
11EF7 0334
11EF7 0021
11EF7 003F
@@ -2852,6 +2863,8 @@ FE60 003F
FF06 003F
204A 0021
204A 003F
+2E52 0021
+2E52 003F
0023 0021
FE5F 0021
FF03 0021
@@ -3382,6 +3395,9 @@ AA5C 003F
1144D 0334
1144D 0021
1144D 003F
+1145A 0334
+1145A 0021
+1145A 003F
1144E 0334
1144E 0021
1144E 003F
@@ -3466,6 +3482,9 @@ AA5C 003F
1183B 0334
1183B 0021
1183B 003F
+11945 0334
+11945 0021
+11945 003F
119E2 0334
119E2 0021
119E2 003F
@@ -3594,6 +3613,7 @@ AA5C 003F
0487 0021
0741 0021
0745 0021
+0B55 0021
17CB 0021
17CC 0021
17CD 0021
@@ -3666,6 +3686,7 @@ A67D 0021
0487 003F
0741 003F
0745 003F
+0B55 003F
17CB 003F
17CC 003F
17CD 003F
@@ -4377,6 +4398,7 @@ FE2F 0334
13436 0334
13437 0334
13438 0334
+16FE4 0334
1BCA0 0334
1BCA1 0334
1BCA2 0334
@@ -5349,8 +5371,12 @@ FB1E 0334
0652 0334
0334 0653
0653 0334
+0334 10EAC
+10EAC 0334
0334 0654
0654 0334
+0334 10EAB
+10EAB 0334
0334 0655
0655 0334
0334 065F
@@ -5513,6 +5539,8 @@ A9B3 0334
116B7 0334
0334 1183A
1183A 0334
+0334 11943
+11943 0334
0334 11D42
11D42 0334
0334 11100
@@ -5633,6 +5661,10 @@ A92D 0334
302E 0334
0334 302F
302F 0334
+0334 16FF0
+16FF0 0334
+0334 16FF1
+16FF1 0334
0334 20D0
20D0 0334
0334 20D1
@@ -5857,10 +5889,14 @@ FE7E 003F
1123E 0334
0653 0021
0AFC 0021
+10EAC 0021
0653 003F
0AFC 003F
+10EAC 003F
0654 0021
+10EAB 0021
0654 003F
+10EAB 003F
0655 0021
0655 003F
065F 0021
@@ -6019,6 +6055,7 @@ A9B3 0021
115C0 0021
116B7 0021
1183A 0021
+11943 0021
11A33 0021
11D42 0021
093C 003F
@@ -6046,6 +6083,7 @@ A9B3 003F
115C0 003F
116B7 003F
1183A 003F
+11943 003F
11A33 003F
11D42 003F
11A33 0334
@@ -6059,6 +6097,7 @@ A9B3 003F
0C01 0021
0C81 0021
0D01 0021
+0D81 0021
1B00 0021
1B01 0021
A8C5 0021
@@ -6067,11 +6106,13 @@ A980 0021
11080 0021
11100 0021
11180 0021
+111CF 0021
11301 0021
11443 0021
114BF 0021
115BC 0021
11640 0021
+1193C 0021
11A35 0021
11A36 0021
11A37 0021
@@ -6088,6 +6129,7 @@ A980 0021
0C01 003F
0C81 003F
0D01 003F
+0D81 003F
1B00 003F
1B01 003F
A8C5 003F
@@ -6096,11 +6138,13 @@ A980 003F
11080 003F
11100 003F
11180 003F
+111CF 003F
11301 003F
11443 003F
114BF 003F
115BC 003F
11640 003F
+1193C 003F
11A35 003F
11A36 003F
11A37 003F
@@ -6110,11 +6154,13 @@ A980 003F
11000 0334
11080 0334
11180 0334
+111CF 0334
11301 0334
11443 0334
114BF 0334
115BC 0334
11640 0334
+1193C 0334
11A35 0334
11A36 0334
11A37 0334
@@ -6158,6 +6204,7 @@ A981 0021
1163D 0021
116AB 0021
11837 0021
+1193B 0021
119DE 0021
11A38 0021
11A96 0021
@@ -6202,6 +6249,7 @@ A981 003F
1163D 003F
116AB 003F
11837 003F
+1193B 003F
119DE 003F
11A38 003F
11A96 003F
@@ -6223,6 +6271,7 @@ A981 003F
1163D 0334
116AB 0334
11837 0334
+1193B 0334
119DE 0334
11A38 0334
11A96 0334
@@ -6471,6 +6520,10 @@ A92D 003F
302E 003F
302F 0021
302F 003F
+16FF0 0021
+16FF0 003F
+16FF1 0021
+16FF1 003F
20D0 0021
20D0 003F
20D1 0021
@@ -6824,6 +6877,16 @@ FFE3 0062
02D5 0061
02D5 0041
02D5 0062
+AB6A 0021
+AB6A 003F
+AB6A 0061
+AB6A 0041
+AB6A 0062
+AB6B 0021
+AB6B 003F
+AB6B 0061
+AB6B 0041
+AB6B 0062
02D6 0021
02D6 003F
02D6 0061
@@ -8108,6 +8171,12 @@ AA79 0062
00AE 0061
00AE 0041
00AE 0062
+1F1AD 0021
+1F1AD 003F
+1F1AD 0334
+1F1AD 0061
+1F1AD 0041
+1F1AD 0062
2104 0021
2104 003F
2104 0061
@@ -13226,6 +13295,1218 @@ FFEE 0062
25FF 0061
25FF 0041
25FF 0062
+1FB00 0021
+1FB00 003F
+1FB00 0334
+1FB00 0061
+1FB00 0041
+1FB00 0062
+1FB01 0021
+1FB01 003F
+1FB01 0334
+1FB01 0061
+1FB01 0041
+1FB01 0062
+1FB02 0021
+1FB02 003F
+1FB02 0334
+1FB02 0061
+1FB02 0041
+1FB02 0062
+1FB03 0021
+1FB03 003F
+1FB03 0334
+1FB03 0061
+1FB03 0041
+1FB03 0062
+1FB04 0021
+1FB04 003F
+1FB04 0334
+1FB04 0061
+1FB04 0041
+1FB04 0062
+1FB05 0021
+1FB05 003F
+1FB05 0334
+1FB05 0061
+1FB05 0041
+1FB05 0062
+1FB06 0021
+1FB06 003F
+1FB06 0334
+1FB06 0061
+1FB06 0041
+1FB06 0062
+1FB07 0021
+1FB07 003F
+1FB07 0334
+1FB07 0061
+1FB07 0041
+1FB07 0062
+1FB08 0021
+1FB08 003F
+1FB08 0334
+1FB08 0061
+1FB08 0041
+1FB08 0062
+1FB09 0021
+1FB09 003F
+1FB09 0334
+1FB09 0061
+1FB09 0041
+1FB09 0062
+1FB0A 0021
+1FB0A 003F
+1FB0A 0334
+1FB0A 0061
+1FB0A 0041
+1FB0A 0062
+1FB0B 0021
+1FB0B 003F
+1FB0B 0334
+1FB0B 0061
+1FB0B 0041
+1FB0B 0062
+1FB0C 0021
+1FB0C 003F
+1FB0C 0334
+1FB0C 0061
+1FB0C 0041
+1FB0C 0062
+1FB0D 0021
+1FB0D 003F
+1FB0D 0334
+1FB0D 0061
+1FB0D 0041
+1FB0D 0062
+1FB0E 0021
+1FB0E 003F
+1FB0E 0334
+1FB0E 0061
+1FB0E 0041
+1FB0E 0062
+1FB0F 0021
+1FB0F 003F
+1FB0F 0334
+1FB0F 0061
+1FB0F 0041
+1FB0F 0062
+1FB10 0021
+1FB10 003F
+1FB10 0334
+1FB10 0061
+1FB10 0041
+1FB10 0062
+1FB11 0021
+1FB11 003F
+1FB11 0334
+1FB11 0061
+1FB11 0041
+1FB11 0062
+1FB12 0021
+1FB12 003F
+1FB12 0334
+1FB12 0061
+1FB12 0041
+1FB12 0062
+1FB13 0021
+1FB13 003F
+1FB13 0334
+1FB13 0061
+1FB13 0041
+1FB13 0062
+1FB14 0021
+1FB14 003F
+1FB14 0334
+1FB14 0061
+1FB14 0041
+1FB14 0062
+1FB15 0021
+1FB15 003F
+1FB15 0334
+1FB15 0061
+1FB15 0041
+1FB15 0062
+1FB16 0021
+1FB16 003F
+1FB16 0334
+1FB16 0061
+1FB16 0041
+1FB16 0062
+1FB17 0021
+1FB17 003F
+1FB17 0334
+1FB17 0061
+1FB17 0041
+1FB17 0062
+1FB18 0021
+1FB18 003F
+1FB18 0334
+1FB18 0061
+1FB18 0041
+1FB18 0062
+1FB19 0021
+1FB19 003F
+1FB19 0334
+1FB19 0061
+1FB19 0041
+1FB19 0062
+1FB1A 0021
+1FB1A 003F
+1FB1A 0334
+1FB1A 0061
+1FB1A 0041
+1FB1A 0062
+1FB1B 0021
+1FB1B 003F
+1FB1B 0334
+1FB1B 0061
+1FB1B 0041
+1FB1B 0062
+1FB1C 0021
+1FB1C 003F
+1FB1C 0334
+1FB1C 0061
+1FB1C 0041
+1FB1C 0062
+1FB1D 0021
+1FB1D 003F
+1FB1D 0334
+1FB1D 0061
+1FB1D 0041
+1FB1D 0062
+1FB1E 0021
+1FB1E 003F
+1FB1E 0334
+1FB1E 0061
+1FB1E 0041
+1FB1E 0062
+1FB1F 0021
+1FB1F 003F
+1FB1F 0334
+1FB1F 0061
+1FB1F 0041
+1FB1F 0062
+1FB20 0021
+1FB20 003F
+1FB20 0334
+1FB20 0061
+1FB20 0041
+1FB20 0062
+1FB21 0021
+1FB21 003F
+1FB21 0334
+1FB21 0061
+1FB21 0041
+1FB21 0062
+1FB22 0021
+1FB22 003F
+1FB22 0334
+1FB22 0061
+1FB22 0041
+1FB22 0062
+1FB23 0021
+1FB23 003F
+1FB23 0334
+1FB23 0061
+1FB23 0041
+1FB23 0062
+1FB24 0021
+1FB24 003F
+1FB24 0334
+1FB24 0061
+1FB24 0041
+1FB24 0062
+1FB25 0021
+1FB25 003F
+1FB25 0334
+1FB25 0061
+1FB25 0041
+1FB25 0062
+1FB26 0021
+1FB26 003F
+1FB26 0334
+1FB26 0061
+1FB26 0041
+1FB26 0062
+1FB27 0021
+1FB27 003F
+1FB27 0334
+1FB27 0061
+1FB27 0041
+1FB27 0062
+1FB28 0021
+1FB28 003F
+1FB28 0334
+1FB28 0061
+1FB28 0041
+1FB28 0062
+1FB29 0021
+1FB29 003F
+1FB29 0334
+1FB29 0061
+1FB29 0041
+1FB29 0062
+1FB2A 0021
+1FB2A 003F
+1FB2A 0334
+1FB2A 0061
+1FB2A 0041
+1FB2A 0062
+1FB2B 0021
+1FB2B 003F
+1FB2B 0334
+1FB2B 0061
+1FB2B 0041
+1FB2B 0062
+1FB2C 0021
+1FB2C 003F
+1FB2C 0334
+1FB2C 0061
+1FB2C 0041
+1FB2C 0062
+1FB2D 0021
+1FB2D 003F
+1FB2D 0334
+1FB2D 0061
+1FB2D 0041
+1FB2D 0062
+1FB2E 0021
+1FB2E 003F
+1FB2E 0334
+1FB2E 0061
+1FB2E 0041
+1FB2E 0062
+1FB2F 0021
+1FB2F 003F
+1FB2F 0334
+1FB2F 0061
+1FB2F 0041
+1FB2F 0062
+1FB30 0021
+1FB30 003F
+1FB30 0334
+1FB30 0061
+1FB30 0041
+1FB30 0062
+1FB31 0021
+1FB31 003F
+1FB31 0334
+1FB31 0061
+1FB31 0041
+1FB31 0062
+1FB32 0021
+1FB32 003F
+1FB32 0334
+1FB32 0061
+1FB32 0041
+1FB32 0062
+1FB33 0021
+1FB33 003F
+1FB33 0334
+1FB33 0061
+1FB33 0041
+1FB33 0062
+1FB34 0021
+1FB34 003F
+1FB34 0334
+1FB34 0061
+1FB34 0041
+1FB34 0062
+1FB35 0021
+1FB35 003F
+1FB35 0334
+1FB35 0061
+1FB35 0041
+1FB35 0062
+1FB36 0021
+1FB36 003F
+1FB36 0334
+1FB36 0061
+1FB36 0041
+1FB36 0062
+1FB37 0021
+1FB37 003F
+1FB37 0334
+1FB37 0061
+1FB37 0041
+1FB37 0062
+1FB38 0021
+1FB38 003F
+1FB38 0334
+1FB38 0061
+1FB38 0041
+1FB38 0062
+1FB39 0021
+1FB39 003F
+1FB39 0334
+1FB39 0061
+1FB39 0041
+1FB39 0062
+1FB3A 0021
+1FB3A 003F
+1FB3A 0334
+1FB3A 0061
+1FB3A 0041
+1FB3A 0062
+1FB3B 0021
+1FB3B 003F
+1FB3B 0334
+1FB3B 0061
+1FB3B 0041
+1FB3B 0062
+1FB3C 0021
+1FB3C 003F
+1FB3C 0334
+1FB3C 0061
+1FB3C 0041
+1FB3C 0062
+1FB3D 0021
+1FB3D 003F
+1FB3D 0334
+1FB3D 0061
+1FB3D 0041
+1FB3D 0062
+1FB3E 0021
+1FB3E 003F
+1FB3E 0334
+1FB3E 0061
+1FB3E 0041
+1FB3E 0062
+1FB3F 0021
+1FB3F 003F
+1FB3F 0334
+1FB3F 0061
+1FB3F 0041
+1FB3F 0062
+1FB40 0021
+1FB40 003F
+1FB40 0334
+1FB40 0061
+1FB40 0041
+1FB40 0062
+1FB41 0021
+1FB41 003F
+1FB41 0334
+1FB41 0061
+1FB41 0041
+1FB41 0062
+1FB42 0021
+1FB42 003F
+1FB42 0334
+1FB42 0061
+1FB42 0041
+1FB42 0062
+1FB43 0021
+1FB43 003F
+1FB43 0334
+1FB43 0061
+1FB43 0041
+1FB43 0062
+1FB44 0021
+1FB44 003F
+1FB44 0334
+1FB44 0061
+1FB44 0041
+1FB44 0062
+1FB45 0021
+1FB45 003F
+1FB45 0334
+1FB45 0061
+1FB45 0041
+1FB45 0062
+1FB46 0021
+1FB46 003F
+1FB46 0334
+1FB46 0061
+1FB46 0041
+1FB46 0062
+1FB47 0021
+1FB47 003F
+1FB47 0334
+1FB47 0061
+1FB47 0041
+1FB47 0062
+1FB48 0021
+1FB48 003F
+1FB48 0334
+1FB48 0061
+1FB48 0041
+1FB48 0062
+1FB49 0021
+1FB49 003F
+1FB49 0334
+1FB49 0061
+1FB49 0041
+1FB49 0062
+1FB4A 0021
+1FB4A 003F
+1FB4A 0334
+1FB4A 0061
+1FB4A 0041
+1FB4A 0062
+1FB4B 0021
+1FB4B 003F
+1FB4B 0334
+1FB4B 0061
+1FB4B 0041
+1FB4B 0062
+1FB4C 0021
+1FB4C 003F
+1FB4C 0334
+1FB4C 0061
+1FB4C 0041
+1FB4C 0062
+1FB4D 0021
+1FB4D 003F
+1FB4D 0334
+1FB4D 0061
+1FB4D 0041
+1FB4D 0062
+1FB4E 0021
+1FB4E 003F
+1FB4E 0334
+1FB4E 0061
+1FB4E 0041
+1FB4E 0062
+1FB4F 0021
+1FB4F 003F
+1FB4F 0334
+1FB4F 0061
+1FB4F 0041
+1FB4F 0062
+1FB50 0021
+1FB50 003F
+1FB50 0334
+1FB50 0061
+1FB50 0041
+1FB50 0062
+1FB51 0021
+1FB51 003F
+1FB51 0334
+1FB51 0061
+1FB51 0041
+1FB51 0062
+1FB52 0021
+1FB52 003F
+1FB52 0334
+1FB52 0061
+1FB52 0041
+1FB52 0062
+1FB53 0021
+1FB53 003F
+1FB53 0334
+1FB53 0061
+1FB53 0041
+1FB53 0062
+1FB54 0021
+1FB54 003F
+1FB54 0334
+1FB54 0061
+1FB54 0041
+1FB54 0062
+1FB55 0021
+1FB55 003F
+1FB55 0334
+1FB55 0061
+1FB55 0041
+1FB55 0062
+1FB56 0021
+1FB56 003F
+1FB56 0334
+1FB56 0061
+1FB56 0041
+1FB56 0062
+1FB57 0021
+1FB57 003F
+1FB57 0334
+1FB57 0061
+1FB57 0041
+1FB57 0062
+1FB58 0021
+1FB58 003F
+1FB58 0334
+1FB58 0061
+1FB58 0041
+1FB58 0062
+1FB59 0021
+1FB59 003F
+1FB59 0334
+1FB59 0061
+1FB59 0041
+1FB59 0062
+1FB5A 0021
+1FB5A 003F
+1FB5A 0334
+1FB5A 0061
+1FB5A 0041
+1FB5A 0062
+1FB5B 0021
+1FB5B 003F
+1FB5B 0334
+1FB5B 0061
+1FB5B 0041
+1FB5B 0062
+1FB5C 0021
+1FB5C 003F
+1FB5C 0334
+1FB5C 0061
+1FB5C 0041
+1FB5C 0062
+1FB5D 0021
+1FB5D 003F
+1FB5D 0334
+1FB5D 0061
+1FB5D 0041
+1FB5D 0062
+1FB5E 0021
+1FB5E 003F
+1FB5E 0334
+1FB5E 0061
+1FB5E 0041
+1FB5E 0062
+1FB5F 0021
+1FB5F 003F
+1FB5F 0334
+1FB5F 0061
+1FB5F 0041
+1FB5F 0062
+1FB60 0021
+1FB60 003F
+1FB60 0334
+1FB60 0061
+1FB60 0041
+1FB60 0062
+1FB61 0021
+1FB61 003F
+1FB61 0334
+1FB61 0061
+1FB61 0041
+1FB61 0062
+1FB62 0021
+1FB62 003F
+1FB62 0334
+1FB62 0061
+1FB62 0041
+1FB62 0062
+1FB63 0021
+1FB63 003F
+1FB63 0334
+1FB63 0061
+1FB63 0041
+1FB63 0062
+1FB64 0021
+1FB64 003F
+1FB64 0334
+1FB64 0061
+1FB64 0041
+1FB64 0062
+1FB65 0021
+1FB65 003F
+1FB65 0334
+1FB65 0061
+1FB65 0041
+1FB65 0062
+1FB66 0021
+1FB66 003F
+1FB66 0334
+1FB66 0061
+1FB66 0041
+1FB66 0062
+1FB67 0021
+1FB67 003F
+1FB67 0334
+1FB67 0061
+1FB67 0041
+1FB67 0062
+1FB68 0021
+1FB68 003F
+1FB68 0334
+1FB68 0061
+1FB68 0041
+1FB68 0062
+1FB69 0021
+1FB69 003F
+1FB69 0334
+1FB69 0061
+1FB69 0041
+1FB69 0062
+1FB6A 0021
+1FB6A 003F
+1FB6A 0334
+1FB6A 0061
+1FB6A 0041
+1FB6A 0062
+1FB6B 0021
+1FB6B 003F
+1FB6B 0334
+1FB6B 0061
+1FB6B 0041
+1FB6B 0062
+1FB6C 0021
+1FB6C 003F
+1FB6C 0334
+1FB6C 0061
+1FB6C 0041
+1FB6C 0062
+1FB6D 0021
+1FB6D 003F
+1FB6D 0334
+1FB6D 0061
+1FB6D 0041
+1FB6D 0062
+1FB6E 0021
+1FB6E 003F
+1FB6E 0334
+1FB6E 0061
+1FB6E 0041
+1FB6E 0062
+1FB6F 0021
+1FB6F 003F
+1FB6F 0334
+1FB6F 0061
+1FB6F 0041
+1FB6F 0062
+1FB70 0021
+1FB70 003F
+1FB70 0334
+1FB70 0061
+1FB70 0041
+1FB70 0062
+1FB71 0021
+1FB71 003F
+1FB71 0334
+1FB71 0061
+1FB71 0041
+1FB71 0062
+1FB72 0021
+1FB72 003F
+1FB72 0334
+1FB72 0061
+1FB72 0041
+1FB72 0062
+1FB73 0021
+1FB73 003F
+1FB73 0334
+1FB73 0061
+1FB73 0041
+1FB73 0062
+1FB74 0021
+1FB74 003F
+1FB74 0334
+1FB74 0061
+1FB74 0041
+1FB74 0062
+1FB75 0021
+1FB75 003F
+1FB75 0334
+1FB75 0061
+1FB75 0041
+1FB75 0062
+1FB76 0021
+1FB76 003F
+1FB76 0334
+1FB76 0061
+1FB76 0041
+1FB76 0062
+1FB77 0021
+1FB77 003F
+1FB77 0334
+1FB77 0061
+1FB77 0041
+1FB77 0062
+1FB78 0021
+1FB78 003F
+1FB78 0334
+1FB78 0061
+1FB78 0041
+1FB78 0062
+1FB79 0021
+1FB79 003F
+1FB79 0334
+1FB79 0061
+1FB79 0041
+1FB79 0062
+1FB7A 0021
+1FB7A 003F
+1FB7A 0334
+1FB7A 0061
+1FB7A 0041
+1FB7A 0062
+1FB7B 0021
+1FB7B 003F
+1FB7B 0334
+1FB7B 0061
+1FB7B 0041
+1FB7B 0062
+1FB7C 0021
+1FB7C 003F
+1FB7C 0334
+1FB7C 0061
+1FB7C 0041
+1FB7C 0062
+1FB7D 0021
+1FB7D 003F
+1FB7D 0334
+1FB7D 0061
+1FB7D 0041
+1FB7D 0062
+1FB7E 0021
+1FB7E 003F
+1FB7E 0334
+1FB7E 0061
+1FB7E 0041
+1FB7E 0062
+1FB7F 0021
+1FB7F 003F
+1FB7F 0334
+1FB7F 0061
+1FB7F 0041
+1FB7F 0062
+1FB80 0021
+1FB80 003F
+1FB80 0334
+1FB80 0061
+1FB80 0041
+1FB80 0062
+1FB81 0021
+1FB81 003F
+1FB81 0334
+1FB81 0061
+1FB81 0041
+1FB81 0062
+1FB82 0021
+1FB82 003F
+1FB82 0334
+1FB82 0061
+1FB82 0041
+1FB82 0062
+1FB83 0021
+1FB83 003F
+1FB83 0334
+1FB83 0061
+1FB83 0041
+1FB83 0062
+1FB84 0021
+1FB84 003F
+1FB84 0334
+1FB84 0061
+1FB84 0041
+1FB84 0062
+1FB85 0021
+1FB85 003F
+1FB85 0334
+1FB85 0061
+1FB85 0041
+1FB85 0062
+1FB86 0021
+1FB86 003F
+1FB86 0334
+1FB86 0061
+1FB86 0041
+1FB86 0062
+1FB87 0021
+1FB87 003F
+1FB87 0334
+1FB87 0061
+1FB87 0041
+1FB87 0062
+1FB88 0021
+1FB88 003F
+1FB88 0334
+1FB88 0061
+1FB88 0041
+1FB88 0062
+1FB89 0021
+1FB89 003F
+1FB89 0334
+1FB89 0061
+1FB89 0041
+1FB89 0062
+1FB8A 0021
+1FB8A 003F
+1FB8A 0334
+1FB8A 0061
+1FB8A 0041
+1FB8A 0062
+1FB8B 0021
+1FB8B 003F
+1FB8B 0334
+1FB8B 0061
+1FB8B 0041
+1FB8B 0062
+1FB8C 0021
+1FB8C 003F
+1FB8C 0334
+1FB8C 0061
+1FB8C 0041
+1FB8C 0062
+1FB8D 0021
+1FB8D 003F
+1FB8D 0334
+1FB8D 0061
+1FB8D 0041
+1FB8D 0062
+1FB8E 0021
+1FB8E 003F
+1FB8E 0334
+1FB8E 0061
+1FB8E 0041
+1FB8E 0062
+1FB8F 0021
+1FB8F 003F
+1FB8F 0334
+1FB8F 0061
+1FB8F 0041
+1FB8F 0062
+1FB90 0021
+1FB90 003F
+1FB90 0334
+1FB90 0061
+1FB90 0041
+1FB90 0062
+1FB91 0021
+1FB91 003F
+1FB91 0334
+1FB91 0061
+1FB91 0041
+1FB91 0062
+1FB92 0021
+1FB92 003F
+1FB92 0334
+1FB92 0061
+1FB92 0041
+1FB92 0062
+1FB94 0021
+1FB94 003F
+1FB94 0334
+1FB94 0061
+1FB94 0041
+1FB94 0062
+1FB95 0021
+1FB95 003F
+1FB95 0334
+1FB95 0061
+1FB95 0041
+1FB95 0062
+1FB96 0021
+1FB96 003F
+1FB96 0334
+1FB96 0061
+1FB96 0041
+1FB96 0062
+1FB97 0021
+1FB97 003F
+1FB97 0334
+1FB97 0061
+1FB97 0041
+1FB97 0062
+1FB98 0021
+1FB98 003F
+1FB98 0334
+1FB98 0061
+1FB98 0041
+1FB98 0062
+1FB99 0021
+1FB99 003F
+1FB99 0334
+1FB99 0061
+1FB99 0041
+1FB99 0062
+1FB9A 0021
+1FB9A 003F
+1FB9A 0334
+1FB9A 0061
+1FB9A 0041
+1FB9A 0062
+1FB9B 0021
+1FB9B 003F
+1FB9B 0334
+1FB9B 0061
+1FB9B 0041
+1FB9B 0062
+1FB9C 0021
+1FB9C 003F
+1FB9C 0334
+1FB9C 0061
+1FB9C 0041
+1FB9C 0062
+1FB9D 0021
+1FB9D 003F
+1FB9D 0334
+1FB9D 0061
+1FB9D 0041
+1FB9D 0062
+1FB9E 0021
+1FB9E 003F
+1FB9E 0334
+1FB9E 0061
+1FB9E 0041
+1FB9E 0062
+1FB9F 0021
+1FB9F 003F
+1FB9F 0334
+1FB9F 0061
+1FB9F 0041
+1FB9F 0062
+1FBA0 0021
+1FBA0 003F
+1FBA0 0334
+1FBA0 0061
+1FBA0 0041
+1FBA0 0062
+1FBA1 0021
+1FBA1 003F
+1FBA1 0334
+1FBA1 0061
+1FBA1 0041
+1FBA1 0062
+1FBA2 0021
+1FBA2 003F
+1FBA2 0334
+1FBA2 0061
+1FBA2 0041
+1FBA2 0062
+1FBA3 0021
+1FBA3 003F
+1FBA3 0334
+1FBA3 0061
+1FBA3 0041
+1FBA3 0062
+1FBA4 0021
+1FBA4 003F
+1FBA4 0334
+1FBA4 0061
+1FBA4 0041
+1FBA4 0062
+1FBA5 0021
+1FBA5 003F
+1FBA5 0334
+1FBA5 0061
+1FBA5 0041
+1FBA5 0062
+1FBA6 0021
+1FBA6 003F
+1FBA6 0334
+1FBA6 0061
+1FBA6 0041
+1FBA6 0062
+1FBA7 0021
+1FBA7 003F
+1FBA7 0334
+1FBA7 0061
+1FBA7 0041
+1FBA7 0062
+1FBA8 0021
+1FBA8 003F
+1FBA8 0334
+1FBA8 0061
+1FBA8 0041
+1FBA8 0062
+1FBA9 0021
+1FBA9 003F
+1FBA9 0334
+1FBA9 0061
+1FBA9 0041
+1FBA9 0062
+1FBAA 0021
+1FBAA 003F
+1FBAA 0334
+1FBAA 0061
+1FBAA 0041
+1FBAA 0062
+1FBAB 0021
+1FBAB 003F
+1FBAB 0334
+1FBAB 0061
+1FBAB 0041
+1FBAB 0062
+1FBAC 0021
+1FBAC 003F
+1FBAC 0334
+1FBAC 0061
+1FBAC 0041
+1FBAC 0062
+1FBAD 0021
+1FBAD 003F
+1FBAD 0334
+1FBAD 0061
+1FBAD 0041
+1FBAD 0062
+1FBAE 0021
+1FBAE 003F
+1FBAE 0334
+1FBAE 0061
+1FBAE 0041
+1FBAE 0062
+1FBAF 0021
+1FBAF 003F
+1FBAF 0334
+1FBAF 0061
+1FBAF 0041
+1FBAF 0062
+1FBB0 0021
+1FBB0 003F
+1FBB0 0334
+1FBB0 0061
+1FBB0 0041
+1FBB0 0062
+1FBB1 0021
+1FBB1 003F
+1FBB1 0334
+1FBB1 0061
+1FBB1 0041
+1FBB1 0062
+1FBB2 0021
+1FBB2 003F
+1FBB2 0334
+1FBB2 0061
+1FBB2 0041
+1FBB2 0062
+1FBB3 0021
+1FBB3 003F
+1FBB3 0334
+1FBB3 0061
+1FBB3 0041
+1FBB3 0062
+1FBB4 0021
+1FBB4 003F
+1FBB4 0334
+1FBB4 0061
+1FBB4 0041
+1FBB4 0062
+1FBB5 0021
+1FBB5 003F
+1FBB5 0334
+1FBB5 0061
+1FBB5 0041
+1FBB5 0062
+1FBB6 0021
+1FBB6 003F
+1FBB6 0334
+1FBB6 0061
+1FBB6 0041
+1FBB6 0062
+1FBB7 0021
+1FBB7 003F
+1FBB7 0334
+1FBB7 0061
+1FBB7 0041
+1FBB7 0062
+1FBB8 0021
+1FBB8 003F
+1FBB8 0334
+1FBB8 0061
+1FBB8 0041
+1FBB8 0062
+1FBB9 0021
+1FBB9 003F
+1FBB9 0334
+1FBB9 0061
+1FBB9 0041
+1FBB9 0062
+1FBBA 0021
+1FBBA 003F
+1FBBA 0334
+1FBBA 0061
+1FBBA 0041
+1FBBA 0062
+1FBBB 0021
+1FBBB 003F
+1FBBB 0334
+1FBBB 0061
+1FBBB 0041
+1FBBB 0062
+1FBBC 0021
+1FBBC 003F
+1FBBC 0334
+1FBBC 0061
+1FBBC 0041
+1FBBC 0062
+1FBBD 0021
+1FBBD 003F
+1FBBD 0334
+1FBBD 0061
+1FBBD 0041
+1FBBD 0062
+1FBBE 0021
+1FBBE 003F
+1FBBE 0334
+1FBBE 0061
+1FBBE 0041
+1FBBE 0062
+1FBBF 0021
+1FBBF 003F
+1FBBF 0334
+1FBBF 0061
+1FBBF 0041
+1FBBF 0062
+1FBC0 0021
+1FBC0 003F
+1FBC0 0334
+1FBC0 0061
+1FBC0 0041
+1FBC0 0062
+1FBC1 0021
+1FBC1 003F
+1FBC1 0334
+1FBC1 0061
+1FBC1 0041
+1FBC1 0062
+1FBC2 0021
+1FBC2 003F
+1FBC2 0334
+1FBC2 0061
+1FBC2 0041
+1FBC2 0062
+1FBC3 0021
+1FBC3 003F
+1FBC3 0334
+1FBC3 0061
+1FBC3 0041
+1FBC3 0062
+1FBC4 0021
+1FBC4 003F
+1FBC4 0334
+1FBC4 0061
+1FBC4 0041
+1FBC4 0062
+1FBC5 0021
+1FBC5 003F
+1FBC5 0334
+1FBC5 0061
+1FBC5 0041
+1FBC5 0062
+1FBC6 0021
+1FBC6 003F
+1FBC6 0334
+1FBC6 0061
+1FBC6 0041
+1FBC6 0062
+1FBC7 0021
+1FBC7 003F
+1FBC7 0334
+1FBC7 0061
+1FBC7 0041
+1FBC7 0062
+1FBC8 0021
+1FBC8 003F
+1FBC8 0334
+1FBC8 0061
+1FBC8 0041
+1FBC8 0062
+1FBC9 0021
+1FBC9 003F
+1FBC9 0334
+1FBC9 0061
+1FBC9 0041
+1FBC9 0062
+1FBCA 0021
+1FBCA 003F
+1FBCA 0334
+1FBCA 0061
+1FBCA 0041
+1FBCA 0062
2600 0021
2600 003F
2600 0061
@@ -14742,6 +16023,16 @@ FFEE 0062
2720 0061
2720 0041
2720 0062
+2E50 0021
+2E50 003F
+2E50 0061
+2E50 0041
+2E50 0062
+2E51 0021
+2E51 003F
+2E51 0061
+2E51 0041
+2E51 0062
2721 0021
2721 003F
2721 0061
@@ -18719,6 +20010,11 @@ FFEE 0062
2B95 0061
2B95 0041
2B95 0062
+2B97 0021
+2B97 003F
+2B97 0061
+2B97 0041
+2B97 0062
2B98 0021
2B98 003F
2B98 0061
@@ -21982,6 +23278,12 @@ A4C6 0062
1019B 0061
1019B 0041
1019B 0062
+1019C 0021
+1019C 003F
+1019C 0334
+1019C 0061
+1019C 0041
+1019C 0062
101A0 0021
101A0 003F
101A0 0334
@@ -27359,6 +28661,42 @@ A4C6 0062
1FA6D 0061
1FA6D 0041
1FA6D 0062
+1F10D 0021
+1F10D 003F
+1F10D 0334
+1F10D 0061
+1F10D 0041
+1F10D 0062
+1F10E 0021
+1F10E 003F
+1F10E 0334
+1F10E 0061
+1F10E 0041
+1F10E 0062
+1F10F 0021
+1F10F 003F
+1F10F 0334
+1F10F 0061
+1F10F 0041
+1F10F 0062
+1F16D 0021
+1F16D 003F
+1F16D 0334
+1F16D 0061
+1F16D 0041
+1F16D 0062
+1F16E 0021
+1F16E 003F
+1F16E 0334
+1F16E 0061
+1F16E 0041
+1F16E 0062
+1F16F 0021
+1F16F 003F
+1F16F 0334
+1F16F 0061
+1F16F 0041
+1F16F 0062
1F260 0021
1F260 003F
1F260 0334
@@ -32075,6 +33413,12 @@ A4C6 0062
1F90B 0061
1F90B 0041
1F90B 0062
+1F90C 0021
+1F90C 003F
+1F90C 0334
+1F90C 0061
+1F90C 0041
+1F90C 0062
1F90D 0021
1F90D 003F
1F90D 0334
@@ -32681,6 +34025,12 @@ A4C6 0062
1F971 0061
1F971 0041
1F971 0062
+1F972 0021
+1F972 003F
+1F972 0334
+1F972 0061
+1F972 0041
+1F972 0062
1F973 0021
1F973 003F
1F973 0334
@@ -32705,6 +34055,18 @@ A4C6 0062
1F976 0061
1F976 0041
1F976 0062
+1F977 0021
+1F977 003F
+1F977 0334
+1F977 0061
+1F977 0041
+1F977 0062
+1F978 0021
+1F978 003F
+1F978 0334
+1F978 0061
+1F978 0041
+1F978 0062
1F97A 0021
1F97A 003F
1F97A 0334
@@ -32951,6 +34313,18 @@ A4C6 0062
1F9A2 0061
1F9A2 0041
1F9A2 0062
+1F9A3 0021
+1F9A3 003F
+1F9A3 0334
+1F9A3 0061
+1F9A3 0041
+1F9A3 0062
+1F9A4 0021
+1F9A4 003F
+1F9A4 0334
+1F9A4 0061
+1F9A4 0041
+1F9A4 0062
1F9A5 0021
1F9A5 003F
1F9A5 0334
@@ -32987,6 +34361,24 @@ A4C6 0062
1F9AA 0061
1F9AA 0041
1F9AA 0062
+1F9AB 0021
+1F9AB 003F
+1F9AB 0334
+1F9AB 0061
+1F9AB 0041
+1F9AB 0062
+1F9AC 0021
+1F9AC 003F
+1F9AC 0334
+1F9AC 0061
+1F9AC 0041
+1F9AC 0062
+1F9AD 0021
+1F9AD 003F
+1F9AD 0334
+1F9AD 0061
+1F9AD 0041
+1F9AD 0062
1F9AE 0021
1F9AE 003F
1F9AE 0334
@@ -33161,6 +34553,12 @@ A4C6 0062
1F9CA 0061
1F9CA 0041
1F9CA 0062
+1F9CB 0021
+1F9CB 003F
+1F9CB 0334
+1F9CB 0061
+1F9CB 0041
+1F9CB 0062
1F9CD 0021
1F9CD 003F
1F9CD 0334
@@ -33491,6 +34889,12 @@ A4C6 0062
1FA73 0061
1FA73 0041
1FA73 0062
+1FA74 0021
+1FA74 003F
+1FA74 0334
+1FA74 0061
+1FA74 0041
+1FA74 0062
1FA78 0021
1FA78 003F
1FA78 0334
@@ -33527,6 +34931,30 @@ A4C6 0062
1FA82 0061
1FA82 0041
1FA82 0062
+1FA83 0021
+1FA83 003F
+1FA83 0334
+1FA83 0061
+1FA83 0041
+1FA83 0062
+1FA84 0021
+1FA84 003F
+1FA84 0334
+1FA84 0061
+1FA84 0041
+1FA84 0062
+1FA85 0021
+1FA85 003F
+1FA85 0334
+1FA85 0061
+1FA85 0041
+1FA85 0062
+1FA86 0021
+1FA86 003F
+1FA86 0334
+1FA86 0061
+1FA86 0041
+1FA86 0062
1FA90 0021
1FA90 003F
1FA90 0334
@@ -33563,6 +34991,222 @@ A4C6 0062
1FA95 0061
1FA95 0041
1FA95 0062
+1FA96 0021
+1FA96 003F
+1FA96 0334
+1FA96 0061
+1FA96 0041
+1FA96 0062
+1FA97 0021
+1FA97 003F
+1FA97 0334
+1FA97 0061
+1FA97 0041
+1FA97 0062
+1FA98 0021
+1FA98 003F
+1FA98 0334
+1FA98 0061
+1FA98 0041
+1FA98 0062
+1FA99 0021
+1FA99 003F
+1FA99 0334
+1FA99 0061
+1FA99 0041
+1FA99 0062
+1FA9A 0021
+1FA9A 003F
+1FA9A 0334
+1FA9A 0061
+1FA9A 0041
+1FA9A 0062
+1FA9B 0021
+1FA9B 003F
+1FA9B 0334
+1FA9B 0061
+1FA9B 0041
+1FA9B 0062
+1FA9C 0021
+1FA9C 003F
+1FA9C 0334
+1FA9C 0061
+1FA9C 0041
+1FA9C 0062
+1FA9D 0021
+1FA9D 003F
+1FA9D 0334
+1FA9D 0061
+1FA9D 0041
+1FA9D 0062
+1FA9E 0021
+1FA9E 003F
+1FA9E 0334
+1FA9E 0061
+1FA9E 0041
+1FA9E 0062
+1FA9F 0021
+1FA9F 003F
+1FA9F 0334
+1FA9F 0061
+1FA9F 0041
+1FA9F 0062
+1FAA0 0021
+1FAA0 003F
+1FAA0 0334
+1FAA0 0061
+1FAA0 0041
+1FAA0 0062
+1FAA1 0021
+1FAA1 003F
+1FAA1 0334
+1FAA1 0061
+1FAA1 0041
+1FAA1 0062
+1FAA2 0021
+1FAA2 003F
+1FAA2 0334
+1FAA2 0061
+1FAA2 0041
+1FAA2 0062
+1FAA3 0021
+1FAA3 003F
+1FAA3 0334
+1FAA3 0061
+1FAA3 0041
+1FAA3 0062
+1FAA4 0021
+1FAA4 003F
+1FAA4 0334
+1FAA4 0061
+1FAA4 0041
+1FAA4 0062
+1FAA5 0021
+1FAA5 003F
+1FAA5 0334
+1FAA5 0061
+1FAA5 0041
+1FAA5 0062
+1FAA6 0021
+1FAA6 003F
+1FAA6 0334
+1FAA6 0061
+1FAA6 0041
+1FAA6 0062
+1FAA7 0021
+1FAA7 003F
+1FAA7 0334
+1FAA7 0061
+1FAA7 0041
+1FAA7 0062
+1FAA8 0021
+1FAA8 003F
+1FAA8 0334
+1FAA8 0061
+1FAA8 0041
+1FAA8 0062
+1FAB0 0021
+1FAB0 003F
+1FAB0 0334
+1FAB0 0061
+1FAB0 0041
+1FAB0 0062
+1FAB1 0021
+1FAB1 003F
+1FAB1 0334
+1FAB1 0061
+1FAB1 0041
+1FAB1 0062
+1FAB2 0021
+1FAB2 003F
+1FAB2 0334
+1FAB2 0061
+1FAB2 0041
+1FAB2 0062
+1FAB3 0021
+1FAB3 003F
+1FAB3 0334
+1FAB3 0061
+1FAB3 0041
+1FAB3 0062
+1FAB4 0021
+1FAB4 003F
+1FAB4 0334
+1FAB4 0061
+1FAB4 0041
+1FAB4 0062
+1FAB5 0021
+1FAB5 003F
+1FAB5 0334
+1FAB5 0061
+1FAB5 0041
+1FAB5 0062
+1FAB6 0021
+1FAB6 003F
+1FAB6 0334
+1FAB6 0061
+1FAB6 0041
+1FAB6 0062
+1FAC0 0021
+1FAC0 003F
+1FAC0 0334
+1FAC0 0061
+1FAC0 0041
+1FAC0 0062
+1FAC1 0021
+1FAC1 003F
+1FAC1 0334
+1FAC1 0061
+1FAC1 0041
+1FAC1 0062
+1FAC2 0021
+1FAC2 003F
+1FAC2 0334
+1FAC2 0061
+1FAC2 0041
+1FAC2 0062
+1FAD0 0021
+1FAD0 003F
+1FAD0 0334
+1FAD0 0061
+1FAD0 0041
+1FAD0 0062
+1FAD1 0021
+1FAD1 003F
+1FAD1 0334
+1FAD1 0061
+1FAD1 0041
+1FAD1 0062
+1FAD2 0021
+1FAD2 003F
+1FAD2 0334
+1FAD2 0061
+1FAD2 0041
+1FAD2 0062
+1FAD3 0021
+1FAD3 003F
+1FAD3 0334
+1FAD3 0061
+1FAD3 0041
+1FAD3 0062
+1FAD4 0021
+1FAD4 003F
+1FAD4 0334
+1FAD4 0061
+1FAD4 0041
+1FAD4 0062
+1FAD5 0021
+1FAD5 003F
+1FAD5 0334
+1FAD5 0061
+1FAD5 0041
+1FAD5 0062
+1FAD6 0021
+1FAD6 003F
+1FAD6 0334
+1FAD6 0061
+1FAD6 0041
+1FAD6 0062
1F600 0021
1F600 003F
1F600 0334
@@ -34847,6 +36491,18 @@ A4C6 0062
1F6D5 0061
1F6D5 0041
1F6D5 0062
+1F6D6 0021
+1F6D6 003F
+1F6D6 0334
+1F6D6 0061
+1F6D6 0041
+1F6D6 0062
+1F6D7 0021
+1F6D7 003F
+1F6D7 0334
+1F6D7 0061
+1F6D7 0041
+1F6D7 0062
1F6E0 0021
1F6E0 003F
1F6E0 0334
@@ -34991,6 +36647,18 @@ A4C6 0062
1F6FA 0061
1F6FA 0041
1F6FA 0062
+1F6FB 0021
+1F6FB 003F
+1F6FB 0334
+1F6FB 0061
+1F6FB 0041
+1F6FB 0062
+1F6FC 0021
+1F6FC 003F
+1F6FC 0334
+1F6FC 0061
+1F6FC 0041
+1F6FC 0062
1F700 0021
1F700 003F
1F700 0334
@@ -37181,6 +38849,18 @@ A4C6 0062
1F8AD 0061
1F8AD 0041
1F8AD 0062
+1F8B0 0021
+1F8B0 003F
+1F8B0 0334
+1F8B0 0061
+1F8B0 0041
+1F8B0 0062
+1F8B1 0021
+1F8B1 003F
+1F8B1 0334
+1F8B1 0061
+1F8B1 0041
+1F8B1 0062
1D800 0021
1D800 003F
1D800 0334
@@ -42642,6 +44322,24 @@ A835 0062
10F54 0061
10F54 0041
10F54 0062
+10FC9 0021
+10FC9 003F
+10FC9 0334
+10FC9 0061
+10FC9 0041
+10FC9 0062
+10FCA 0021
+10FCA 003F
+10FCA 0334
+10FCA 0061
+10FCA 0041
+10FCA 0062
+10FCB 0021
+10FCB 003F
+10FCB 0334
+10FCB 0061
+10FCB 0041
+10FCB 0062
1173A 0021
1173A 003F
1173A 0334
@@ -44165,6 +45863,7 @@ ABF0 0021
116C0 0021
11730 0021
118E0 0021
+11950 0021
11C50 0021
11D50 0021
11DA0 0021
@@ -44228,6 +45927,7 @@ ABF0 003F
116C0 003F
11730 003F
118E0 003F
+11950 003F
11C50 003F
11D50 003F
11DA0 003F
@@ -44253,11 +45953,13 @@ FF10 003F
1D7E2 0021
1D7EC 0021
1D7F6 0021
+1FBF0 0021
1D7CE 003F
1D7D8 003F
1D7E2 003F
1D7EC 003F
1D7F6 003F
+1FBF0 003F
24EA 0021
24FF 0021
1F10B 0021
@@ -44284,6 +45986,7 @@ FF10 003F
116C0 0334
11730 0334
118E0 0334
+11950 0334
11C50 0334
11D50 0334
11DA0 0334
@@ -44299,6 +46002,7 @@ FF10 003F
1D7E2 0334
1D7EC 0334
1D7F6 0334
+1FBF0 0334
1F10B 0334
1F10C 0334
2189 0021
@@ -44359,6 +46063,7 @@ ABF0 0061
116C0 0061
11730 0061
118E0 0061
+11950 0061
11C50 0061
11D50 0061
11DA0 0061
@@ -44422,6 +46127,7 @@ ABF0 0041
116C0 0041
11730 0041
118E0 0041
+11950 0041
11C50 0041
11D50 0041
11DA0 0041
@@ -44445,11 +46151,13 @@ FF10 0041
1D7E2 0061
1D7EC 0061
1D7F6 0061
+1FBF0 0061
1D7CE 0041
1D7D8 0041
1D7E2 0041
1D7EC 0041
1D7F6 0041
+1FBF0 0041
24EA 0061
24FF 0061
1F10B 0061
@@ -44515,6 +46223,7 @@ ABF0 0062
116C0 0062
11730 0062
118E0 0062
+11950 0062
11C50 0062
11D50 0062
11DA0 0062
@@ -44534,6 +46243,7 @@ FF10 0062
1D7E2 0062
1D7EC 0062
1D7F6 0062
+1FBF0 0062
24EA 0062
24FF 0062
1F10B 0062
@@ -44614,6 +46324,7 @@ ABF1 0021
10E60 0021
10F1D 0021
10F51 0021
+10FC5 0021
11052 0021
11067 0021
110F1 0021
@@ -44627,6 +46338,7 @@ ABF1 0021
116C1 0021
11731 0021
118E1 0021
+11951 0021
11C51 0021
11C5A 0021
11D51 0021
@@ -44720,6 +46432,7 @@ ABF1 003F
10E60 003F
10F1D 003F
10F51 003F
+10FC5 003F
11052 003F
11067 003F
110F1 003F
@@ -44733,6 +46446,7 @@ ABF1 003F
116C1 003F
11731 003F
118E1 003F
+11951 003F
11C51 003F
11C5A 003F
11D51 003F
@@ -44773,11 +46487,13 @@ FF11 003F
1D7E3 0021
1D7ED 0021
1D7F7 0021
+1FBF1 0021
1D7CF 003F
1D7D9 003F
1D7E3 003F
1D7ED 003F
1D7F7 003F
+1FBF1 003F
2460 0021
24F5 0021
2776 0021
@@ -44819,6 +46535,7 @@ FF11 003F
10E60 0334
10F1D 0334
10F51 0334
+10FC5 0334
11052 0334
11067 0334
110F1 0334
@@ -44832,6 +46549,7 @@ FF11 003F
116C1 0334
11731 0334
118E1 0334
+11951 0334
11C51 0334
11C5A 0334
11D51 0334
@@ -44861,6 +46579,7 @@ FF11 003F
1D7E3 0334
1D7ED 0334
1D7F7 0334
+1FBF1 0334
16E94 0021
1ECB1 0021
16E94 003F
@@ -45327,6 +47046,7 @@ ABF1 0061
10E60 0061
10F1D 0061
10F51 0061
+10FC5 0061
11052 0061
11067 0061
110F1 0061
@@ -45340,6 +47060,7 @@ ABF1 0061
116C1 0061
11731 0061
118E1 0061
+11951 0061
11C51 0061
11C5A 0061
11D51 0061
@@ -45433,6 +47154,7 @@ ABF1 0041
10E60 0041
10F1D 0041
10F51 0041
+10FC5 0041
11052 0041
11067 0041
110F1 0041
@@ -45446,6 +47168,7 @@ ABF1 0041
116C1 0041
11731 0041
118E1 0041
+11951 0041
11C51 0041
11C5A 0041
11D51 0041
@@ -45485,11 +47208,13 @@ FF11 0041
1D7E3 0061
1D7ED 0061
1D7F7 0061
+1FBF1 0061
1D7CF 0041
1D7D9 0041
1D7E3 0041
1D7ED 0041
1D7F7 0041
+1FBF1 0041
2460 0061
24F5 0061
2776 0061
@@ -45577,6 +47302,7 @@ ABF1 0062
10E60 0062
10F1D 0062
10F51 0062
+10FC5 0062
11052 0062
11067 0062
110F1 0062
@@ -45590,6 +47316,7 @@ ABF1 0062
116C1 0062
11731 0062
118E1 0062
+11951 0062
11C51 0062
11C5A 0062
11D51 0062
@@ -45624,6 +47351,7 @@ FF11 0062
1D7E3 0062
1D7ED 0062
1D7F7 0062
+1FBF1 0062
2460 0062
24F5 0062
2776 0062
@@ -45709,6 +47437,7 @@ ABF2 0021
10D32 0021
10E61 0021
10F1E 0021
+10FC6 0021
11053 0021
11068 0021
110F2 0021
@@ -45722,6 +47451,7 @@ ABF2 0021
116C2 0021
11732 0021
118E2 0021
+11952 0021
11C52 0021
11C5B 0021
11D52 0021
@@ -45810,6 +47540,7 @@ ABF2 003F
10D32 003F
10E61 003F
10F1E 003F
+10FC6 003F
11053 003F
11068 003F
110F2 003F
@@ -45823,6 +47554,7 @@ ABF2 003F
116C2 003F
11732 003F
118E2 003F
+11952 003F
11C52 003F
11C5B 003F
11D52 003F
@@ -45866,11 +47598,13 @@ FF12 003F
1D7E4 0021
1D7EE 0021
1D7F8 0021
+1FBF2 0021
1D7D0 003F
1D7DA 003F
1D7E4 003F
1D7EE 003F
1D7F8 003F
+1FBF2 003F
2461 0021
24F6 0021
2777 0021
@@ -45905,6 +47639,7 @@ FF12 003F
10D32 0334
10E61 0334
10F1E 0334
+10FC6 0334
11053 0334
11068 0334
110F2 0334
@@ -45918,6 +47653,7 @@ FF12 003F
116C2 0334
11732 0334
118E2 0334
+11952 0334
11C52 0334
11C5B 0334
11D52 0334
@@ -45950,6 +47686,7 @@ FF12 003F
1D7E4 0334
1D7EE 0334
1D7F8 0334
+1FBF2 0334
16E95 0021
1ECB2 0021
1ED2F 0021
@@ -46181,6 +47918,7 @@ ABF2 0061
10D32 0061
10E61 0061
10F1E 0061
+10FC6 0061
11053 0061
11068 0061
110F2 0061
@@ -46194,6 +47932,7 @@ ABF2 0061
116C2 0061
11732 0061
118E2 0061
+11952 0061
11C52 0061
11C5B 0061
11D52 0061
@@ -46282,6 +48021,7 @@ ABF2 0041
10D32 0041
10E61 0041
10F1E 0041
+10FC6 0041
11053 0041
11068 0041
110F2 0041
@@ -46295,6 +48035,7 @@ ABF2 0041
116C2 0041
11732 0041
118E2 0041
+11952 0041
11C52 0041
11C5B 0041
11D52 0041
@@ -46337,11 +48078,13 @@ FF12 0041
1D7E4 0061
1D7EE 0061
1D7F8 0061
+1FBF2 0061
1D7D0 0041
1D7DA 0041
1D7E4 0041
1D7EE 0041
1D7F8 0041
+1FBF2 0041
2461 0061
24F6 0061
2777 0061
@@ -46423,6 +48166,7 @@ ABF2 0062
10D32 0062
10E61 0062
10F1E 0062
+10FC6 0062
11053 0062
11068 0062
110F2 0062
@@ -46436,6 +48180,7 @@ ABF2 0062
116C2 0062
11732 0062
118E2 0062
+11952 0062
11C52 0062
11C5B 0062
11D52 0062
@@ -46473,6 +48218,7 @@ FF12 0062
1D7E4 0062
1D7EE 0062
1D7F8 0062
+1FBF2 0062
2461 0062
24F6 0062
2777 0062
@@ -46566,6 +48312,7 @@ ABF3 0021
10D33 0021
10E62 0021
10F1F 0021
+10FC7 0021
11054 0021
11069 0021
110F3 0021
@@ -46579,6 +48326,7 @@ ABF3 0021
116C3 0021
11733 0021
118E3 0021
+11953 0021
11C53 0021
11C5C 0021
11D53 0021
@@ -46667,6 +48415,7 @@ ABF3 003F
10D33 003F
10E62 003F
10F1F 003F
+10FC7 003F
11054 003F
11069 003F
110F3 003F
@@ -46680,6 +48429,7 @@ ABF3 003F
116C3 003F
11733 003F
118E3 003F
+11953 003F
11C53 003F
11C5C 003F
11D53 003F
@@ -46728,11 +48478,13 @@ FF13 003F
1D7E5 0021
1D7EF 0021
1D7F9 0021
+1FBF3 0021
1D7D1 003F
1D7DB 003F
1D7E5 003F
1D7EF 003F
1D7F9 003F
+1FBF3 003F
2462 0021
24F7 0021
2778 0021
@@ -46762,6 +48514,7 @@ FF13 003F
10D33 0334
10E62 0334
10F1F 0334
+10FC7 0334
11054 0334
11069 0334
110F3 0334
@@ -46775,6 +48528,7 @@ FF13 003F
116C3 0334
11733 0334
118E3 0334
+11953 0334
11C53 0334
11C5C 0334
11D53 0334
@@ -46812,6 +48566,7 @@ FF13 003F
1D7E5 0334
1D7EF 0334
1D7F9 0334
+1FBF3 0334
16E96 0021
16E96 003F
1ED30 0021
@@ -46954,6 +48709,7 @@ ABF3 0061
10D33 0061
10E62 0061
10F1F 0061
+10FC7 0061
11054 0061
11069 0061
110F3 0061
@@ -46967,6 +48723,7 @@ ABF3 0061
116C3 0061
11733 0061
118E3 0061
+11953 0061
11C53 0061
11C5C 0061
11D53 0061
@@ -47055,6 +48812,7 @@ ABF3 0041
10D33 0041
10E62 0041
10F1F 0041
+10FC7 0041
11054 0041
11069 0041
110F3 0041
@@ -47068,6 +48826,7 @@ ABF3 0041
116C3 0041
11733 0041
118E3 0041
+11953 0041
11C53 0041
11C5C 0041
11D53 0041
@@ -47115,11 +48874,13 @@ FF13 0041
1D7E5 0061
1D7EF 0061
1D7F9 0061
+1FBF3 0061
1D7D1 0041
1D7DB 0041
1D7E5 0041
1D7EF 0041
1D7F9 0041
+1FBF3 0041
2462 0061
24F7 0061
2778 0061
@@ -47194,6 +48955,7 @@ ABF3 0062
10D33 0062
10E62 0062
10F1F 0062
+10FC7 0062
11054 0062
11069 0062
110F3 0062
@@ -47207,6 +48969,7 @@ ABF3 0062
116C3 0062
11733 0062
118E3 0062
+11953 0062
11C53 0062
11C5C 0062
11D53 0062
@@ -47249,6 +49012,7 @@ FF13 0062
1D7E5 0062
1D7EF 0062
1D7F9 0062
+1FBF3 0062
2462 0062
24F7 0062
2778 0062
@@ -47332,6 +49096,7 @@ ABF4 0021
10D34 0021
10E63 0021
10F20 0021
+10FC8 0021
11055 0021
1106A 0021
110F4 0021
@@ -47345,6 +49110,7 @@ ABF4 0021
116C4 0021
11734 0021
118E4 0021
+11954 0021
11C54 0021
11C5D 0021
11D54 0021
@@ -47431,6 +49197,7 @@ ABF4 003F
10D34 003F
10E63 003F
10F20 003F
+10FC8 003F
11055 003F
1106A 003F
110F4 003F
@@ -47444,6 +49211,7 @@ ABF4 003F
116C4 003F
11734 003F
118E4 003F
+11954 003F
11C54 003F
11C5D 003F
11D54 003F
@@ -47493,11 +49261,13 @@ FF14 003F
1D7E6 0021
1D7F0 0021
1D7FA 0021
+1FBF4 0021
1D7D2 003F
1D7DC 003F
1D7E6 003F
1D7F0 003F
1D7FA 003F
+1FBF4 003F
2463 0021
24F8 0021
2779 0021
@@ -47526,6 +49296,7 @@ FF14 003F
10D34 0334
10E63 0334
10F20 0334
+10FC8 0334
11055 0334
1106A 0334
110F4 0334
@@ -47539,6 +49310,7 @@ FF14 003F
116C4 0334
11734 0334
118E4 0334
+11954 0334
11C54 0334
11C5D 0334
11D54 0334
@@ -47577,6 +49349,7 @@ FF14 003F
1D7E6 0334
1D7F0 0334
1D7FA 0334
+1FBF4 0334
1ED31 0021
1ED31 003F
1ED31 0334
@@ -47693,6 +49466,7 @@ ABF4 0061
10D34 0061
10E63 0061
10F20 0061
+10FC8 0061
11055 0061
1106A 0061
110F4 0061
@@ -47706,6 +49480,7 @@ ABF4 0061
116C4 0061
11734 0061
118E4 0061
+11954 0061
11C54 0061
11C5D 0061
11D54 0061
@@ -47792,6 +49567,7 @@ ABF4 0041
10D34 0041
10E63 0041
10F20 0041
+10FC8 0041
11055 0041
1106A 0041
110F4 0041
@@ -47805,6 +49581,7 @@ ABF4 0041
116C4 0041
11734 0041
118E4 0041
+11954 0041
11C54 0041
11C5D 0041
11D54 0041
@@ -47853,11 +49630,13 @@ FF14 0041
1D7E6 0061
1D7F0 0061
1D7FA 0061
+1FBF4 0061
1D7D2 0041
1D7DC 0041
1D7E6 0041
1D7F0 0041
1D7FA 0041
+1FBF4 0041
2463 0061
24F8 0061
2779 0061
@@ -47927,6 +49706,7 @@ ABF4 0062
10D34 0062
10E63 0062
10F20 0062
+10FC8 0062
11055 0062
1106A 0062
110F4 0062
@@ -47940,6 +49720,7 @@ ABF4 0062
116C4 0062
11734 0062
118E4 0062
+11954 0062
11C54 0062
11C5D 0062
11D54 0062
@@ -47983,6 +49764,7 @@ FF14 0062
1D7E6 0062
1D7F0 0062
1D7FA 0062
+1FBF4 0062
2463 0062
24F8 0062
2779 0062
@@ -48082,6 +49864,7 @@ ABF5 0021
116C5 0021
11735 0021
118E5 0021
+11955 0021
11C55 0021
11C5E 0021
11D55 0021
@@ -48182,6 +49965,7 @@ ABF5 003F
116C5 003F
11735 003F
118E5 003F
+11955 003F
11C55 003F
11C5E 003F
11D55 003F
@@ -48228,11 +50012,13 @@ FF15 003F
1D7E7 0021
1D7F1 0021
1D7FB 0021
+1FBF5 0021
1D7D3 003F
1D7DD 003F
1D7E7 003F
1D7F1 003F
1D7FB 003F
+1FBF5 003F
2464 0021
24F9 0021
277A 0021
@@ -48278,6 +50064,7 @@ FF15 003F
116C5 0334
11735 0334
118E5 0334
+11955 0334
11C55 0334
11C5E 0334
11D55 0334
@@ -48313,6 +50100,7 @@ FF15 003F
1D7E7 0334
1D7F1 0334
1D7FB 0334
+1FBF5 0334
1ED32 0021
1ED32 003F
1ED32 0334
@@ -48412,6 +50200,7 @@ ABF5 0061
116C5 0061
11735 0061
118E5 0061
+11955 0061
11C55 0061
11C5E 0061
11D55 0061
@@ -48512,6 +50301,7 @@ ABF5 0041
116C5 0041
11735 0041
118E5 0041
+11955 0041
11C55 0041
11C5E 0041
11D55 0041
@@ -48557,11 +50347,13 @@ FF15 0041
1D7E7 0061
1D7F1 0061
1D7FB 0061
+1FBF5 0061
1D7D3 0041
1D7DD 0041
1D7E7 0041
1D7F1 0041
1D7FB 0041
+1FBF5 0041
2464 0061
24F9 0061
277A 0061
@@ -48648,6 +50440,7 @@ ABF5 0062
116C5 0062
11735 0062
118E5 0062
+11955 0062
11C55 0062
11C5E 0062
11D55 0062
@@ -48688,6 +50481,7 @@ FF15 0062
1D7E7 0062
1D7F1 0062
1D7FB 0062
+1FBF5 0062
2464 0062
24F9 0062
277A 0062
@@ -48770,6 +50564,7 @@ ABF6 0021
116C6 0021
11736 0021
118E6 0021
+11956 0021
11C56 0021
11C5F 0021
11D56 0021
@@ -48853,6 +50648,7 @@ ABF6 003F
116C6 003F
11736 003F
118E6 003F
+11956 003F
11C56 003F
11C5F 003F
11D56 003F
@@ -48893,11 +50689,13 @@ FF16 003F
1D7E8 0021
1D7F2 0021
1D7FC 0021
+1FBF6 0021
1D7D4 003F
1D7DE 003F
1D7E8 003F
1D7F2 003F
1D7FC 003F
+1FBF6 003F
2465 0021
24FA 0021
277B 0021
@@ -48931,6 +50729,7 @@ FF16 003F
116C6 0334
11736 0334
118E6 0334
+11956 0334
11C56 0334
11C5F 0334
11D56 0334
@@ -48960,6 +50759,7 @@ FF16 003F
1D7E8 0334
1D7F2 0334
1D7FC 0334
+1FBF6 0334
1ED33 0021
1ED33 003F
1ED33 0334
@@ -49033,6 +50833,7 @@ ABF6 0061
116C6 0061
11736 0061
118E6 0061
+11956 0061
11C56 0061
11C5F 0061
11D56 0061
@@ -49116,6 +50917,7 @@ ABF6 0041
116C6 0041
11736 0041
118E6 0041
+11956 0041
11C56 0041
11C5F 0041
11D56 0041
@@ -49155,11 +50957,13 @@ FF16 0041
1D7E8 0061
1D7F2 0061
1D7FC 0061
+1FBF6 0061
1D7D4 0041
1D7DE 0041
1D7E8 0041
1D7F2 0041
1D7FC 0041
+1FBF6 0041
2465 0061
24FA 0061
277B 0061
@@ -49235,6 +51039,7 @@ ABF6 0062
116C6 0062
11736 0062
118E6 0062
+11956 0062
11C56 0062
11C5F 0062
11D56 0062
@@ -49269,6 +51074,7 @@ FF16 0062
1D7E8 0062
1D7F2 0062
1D7FC 0062
+1FBF6 0062
2465 0062
24FA 0062
277B 0062
@@ -49350,6 +51156,7 @@ ABF7 0021
116C7 0021
11737 0021
118E7 0021
+11957 0021
11C57 0021
11C60 0021
11D57 0021
@@ -49433,6 +51240,7 @@ ABF7 003F
116C7 003F
11737 003F
118E7 003F
+11957 003F
11C57 003F
11C60 003F
11D57 003F
@@ -49474,11 +51282,13 @@ FF17 003F
1D7E9 0021
1D7F3 0021
1D7FD 0021
+1FBF7 0021
1D7D5 003F
1D7DF 003F
1D7E9 003F
1D7F3 003F
1D7FD 003F
+1FBF7 003F
2466 0021
24FB 0021
277C 0021
@@ -49512,6 +51322,7 @@ FF17 003F
116C7 0334
11737 0334
118E7 0334
+11957 0334
11C57 0334
11C60 0334
11D57 0334
@@ -49542,6 +51353,7 @@ FF17 003F
1D7E9 0334
1D7F3 0334
1D7FD 0334
+1FBF7 0334
1ED34 0021
1ED34 003F
1ED34 0334
@@ -49619,6 +51431,7 @@ ABF7 0061
116C7 0061
11737 0061
118E7 0061
+11957 0061
11C57 0061
11C60 0061
11D57 0061
@@ -49702,6 +51515,7 @@ ABF7 0041
116C7 0041
11737 0041
118E7 0041
+11957 0041
11C57 0041
11C60 0041
11D57 0041
@@ -49742,11 +51556,13 @@ FF17 0041
1D7E9 0061
1D7F3 0061
1D7FD 0061
+1FBF7 0061
1D7D5 0041
1D7DF 0041
1D7E9 0041
1D7F3 0041
1D7FD 0041
+1FBF7 0041
2466 0061
24FB 0061
277C 0061
@@ -49821,6 +51637,7 @@ ABF7 0062
116C7 0062
11737 0062
118E7 0062
+11957 0062
11C57 0062
11C60 0062
11D57 0062
@@ -49856,6 +51673,7 @@ FF17 0062
1D7E9 0062
1D7F3 0062
1D7FD 0062
+1FBF7 0062
2466 0062
24FB 0062
277C 0062
@@ -49937,6 +51755,7 @@ ABF8 0021
116C8 0021
11738 0021
118E8 0021
+11958 0021
11C58 0021
11C61 0021
11D58 0021
@@ -50019,6 +51838,7 @@ ABF8 003F
116C8 003F
11738 003F
118E8 003F
+11958 003F
11C58 003F
11C61 003F
11D58 003F
@@ -50059,11 +51879,13 @@ FF18 003F
1D7EA 0021
1D7F4 0021
1D7FE 0021
+1FBF8 0021
1D7D6 003F
1D7E0 003F
1D7EA 003F
1D7F4 003F
1D7FE 003F
+1FBF8 003F
2467 0021
24FC 0021
277D 0021
@@ -50097,6 +51919,7 @@ FF18 003F
116C8 0334
11738 0334
118E8 0334
+11958 0334
11C58 0334
11C61 0334
11D58 0334
@@ -50126,6 +51949,7 @@ FF18 003F
1D7EA 0334
1D7F4 0334
1D7FE 0334
+1FBF8 0334
1ED35 0021
1ED35 003F
1ED35 0334
@@ -50192,6 +52016,7 @@ ABF8 0061
116C8 0061
11738 0061
118E8 0061
+11958 0061
11C58 0061
11C61 0061
11D58 0061
@@ -50274,6 +52099,7 @@ ABF8 0041
116C8 0041
11738 0041
118E8 0041
+11958 0041
11C58 0041
11C61 0041
11D58 0041
@@ -50313,11 +52139,13 @@ FF18 0041
1D7EA 0061
1D7F4 0061
1D7FE 0061
+1FBF8 0061
1D7D6 0041
1D7E0 0041
1D7EA 0041
1D7F4 0041
1D7FE 0041
+1FBF8 0041
2467 0061
24FC 0061
277D 0061
@@ -50392,6 +52220,7 @@ ABF8 0062
116C8 0062
11738 0062
118E8 0062
+11958 0062
11C58 0062
11C61 0062
11D58 0062
@@ -50426,6 +52255,7 @@ FF18 0062
1D7EA 0062
1D7F4 0062
1D7FE 0062
+1FBF8 0062
2467 0062
24FC 0062
277D 0062
@@ -50513,6 +52343,7 @@ ABF9 0021
116C9 0021
11739 0021
118E9 0021
+11959 0021
11C59 0021
11C62 0021
11D59 0021
@@ -50597,6 +52428,7 @@ ABF9 003F
116C9 003F
11739 003F
118E9 003F
+11959 003F
11C59 003F
11C62 003F
11D59 003F
@@ -50639,11 +52471,13 @@ FF19 003F
1D7EB 0021
1D7F5 0021
1D7FF 0021
+1FBF9 0021
1D7D7 003F
1D7E1 003F
1D7EB 003F
1D7F5 003F
1D7FF 003F
+1FBF9 003F
2468 0021
24FD 0021
277E 0021
@@ -50677,6 +52511,7 @@ FF19 003F
116C9 0334
11739 0334
118E9 0334
+11959 0334
11C59 0334
11C62 0334
11D59 0334
@@ -50708,6 +52543,7 @@ FF19 003F
1D7EB 0334
1D7F5 0334
1D7FF 0334
+1FBF9 0334
1ED36 0021
1ED36 003F
1ED36 0334
@@ -50769,6 +52605,7 @@ ABF9 0061
116C9 0061
11739 0061
118E9 0061
+11959 0061
11C59 0061
11C62 0061
11D59 0061
@@ -50853,6 +52690,7 @@ ABF9 0041
116C9 0041
11739 0041
118E9 0041
+11959 0041
11C59 0041
11C62 0041
11D59 0041
@@ -50894,11 +52732,13 @@ FF19 0041
1D7EB 0061
1D7F5 0061
1D7FF 0061
+1FBF9 0061
1D7D7 0041
1D7E1 0041
1D7EB 0041
1D7F5 0041
1D7FF 0041
+1FBF9 0041
2468 0061
24FD 0061
277E 0061
@@ -50973,6 +52813,7 @@ ABF9 0062
116C9 0062
11739 0062
118E9 0062
+11959 0062
11C59 0062
11C62 0062
11D59 0062
@@ -51009,6 +52850,7 @@ FF19 0062
1D7EB 0062
1D7F5 0062
1D7FF 0062
+1FBF9 0062
2468 0062
24FD 0062
277E 0062
@@ -51098,6 +52940,7 @@ FE58 0061
30A0 0061
30FB 0061
FF65 0061
+10EAD 0061
002C 0061
FE10 0061
FE50 0061
@@ -51294,6 +53137,7 @@ ABEB 0061
11642 0061
1173C 0061
1173D 0061
+11944 0061
11C41 0061
11C42 0061
16A6E 0061
@@ -51341,6 +53185,7 @@ A95F 0061
111DF 0061
112A9 0061
1173E 0061
+11946 0061
11EF7 0061
11EF8 0061
2055 0061
@@ -51574,6 +53419,7 @@ FF3C 0061
FE60 0061
FF06 0061
204A 0061
+2E52 0061
0023 0061
FE5F 0061
FF03 0061
@@ -51803,6 +53649,7 @@ AA5C 0061
1123C 0061
1123D 0061
1144D 0061
+1145A 0061
1144E 0061
1144F 0061
1145B 0061
@@ -51831,6 +53678,7 @@ AA5C 0061
115D7 0061
11643 0061
1183B 0061
+11945 0061
119E2 0061
11FFF 0061
16B37 0061
@@ -52178,6 +54026,7 @@ FFFB 0061
13436 0061
13437 0061
13438 0061
+16FE4 0061
1BCA0 0061
1BCA1 0061
1BCA2 0061
@@ -52796,6 +54645,7 @@ FE58 0041
30A0 0041
30FB 0041
FF65 0041
+10EAD 0041
002C 0041
FE10 0041
FE50 0041
@@ -52992,6 +54842,7 @@ ABEB 0041
11642 0041
1173C 0041
1173D 0041
+11944 0041
11C41 0041
11C42 0041
16A6E 0041
@@ -53039,6 +54890,7 @@ A95F 0041
111DF 0041
112A9 0041
1173E 0041
+11946 0041
11EF7 0041
11EF8 0041
2055 0041
@@ -53272,6 +55124,7 @@ FF3C 0041
FE60 0041
FF06 0041
204A 0041
+2E52 0041
0023 0041
FE5F 0041
FF03 0041
@@ -53501,6 +55354,7 @@ AA5C 0041
1123C 0041
1123D 0041
1144D 0041
+1145A 0041
1144E 0041
1144F 0041
1145B 0041
@@ -53529,6 +55383,7 @@ AA5C 0041
115D7 0041
11643 0041
1183B 0041
+11945 0041
119E2 0041
11FFF 0041
16B37 0041
@@ -53876,6 +55731,7 @@ FFFB 0041
13436 0041
13437 0041
13438 0041
+16FE4 0041
1BCA0 0041
1BCA1 0041
1BCA2 0041
@@ -54880,6 +56736,7 @@ A79A 003F
0487 0061
0741 0061
0745 0061
+0B55 0061
17CB 0061
17CC 0061
17CD 0061
@@ -54952,6 +56809,7 @@ A67D 0061
0487 0041
0741 0041
0745 0041
+0B55 0041
17CB 0041
17CC 0041
17CD 0041
@@ -55413,10 +57271,14 @@ FE7E 0061
FE7E 0041
0653 0061
0AFC 0061
+10EAC 0061
0653 0041
0AFC 0041
+10EAC 0041
0654 0061
+10EAB 0061
0654 0041
+10EAB 0041
0655 0061
0655 0041
065F 0061
@@ -55570,6 +57432,7 @@ A9B3 0061
115C0 0061
116B7 0061
1183A 0061
+11943 0061
11A33 0061
11D42 0061
093C 0041
@@ -55597,6 +57460,7 @@ A9B3 0041
115C0 0041
116B7 0041
1183A 0041
+11943 0041
11A33 0041
11D42 0041
0900 0061
@@ -55609,6 +57473,7 @@ A9B3 0041
0C01 0061
0C81 0061
0D01 0061
+0D81 0061
1B00 0061
1B01 0061
A8C5 0061
@@ -55617,11 +57482,13 @@ A980 0061
11080 0061
11100 0061
11180 0061
+111CF 0061
11301 0061
11443 0061
114BF 0061
115BC 0061
11640 0061
+1193C 0061
11A35 0061
11A36 0061
11A37 0061
@@ -55638,6 +57505,7 @@ A980 0061
0C01 0041
0C81 0041
0D01 0041
+0D81 0041
1B00 0041
1B01 0041
A8C5 0041
@@ -55646,11 +57514,13 @@ A980 0041
11080 0041
11100 0041
11180 0041
+111CF 0041
11301 0041
11443 0041
114BF 0041
115BC 0041
11640 0041
+1193C 0041
11A35 0041
11A36 0041
11A37 0041
@@ -55694,6 +57564,7 @@ A981 0061
1163D 0061
116AB 0061
11837 0061
+1193B 0061
119DE 0061
11A38 0061
11A96 0061
@@ -55738,6 +57609,7 @@ A981 0041
1163D 0041
116AB 0041
11837 0041
+1193B 0041
119DE 0041
11A38 0041
11A96 0041
@@ -55965,6 +57837,10 @@ A92D 0041
302E 0041
302F 0061
302F 0041
+16FF0 0061
+16FF0 0041
+16FF1 0061
+16FF1 0041
20D0 0061
20D0 0041
20D1 0061
@@ -56666,6 +58542,7 @@ FE58 0062
30A0 0062
30FB 0062
FF65 0062
+10EAD 0062
002C 0062
FE10 0062
FE50 0062
@@ -56862,6 +58739,7 @@ ABEB 0062
11642 0062
1173C 0062
1173D 0062
+11944 0062
11C41 0062
11C42 0062
16A6E 0062
@@ -56909,6 +58787,7 @@ A95F 0062
111DF 0062
112A9 0062
1173E 0062
+11946 0062
11EF7 0062
11EF8 0062
2055 0062
@@ -57142,6 +59021,7 @@ FF3C 0062
FE60 0062
FF06 0062
204A 0062
+2E52 0062
0023 0062
FE5F 0062
FF03 0062
@@ -57371,6 +59251,7 @@ AA5C 0062
1123C 0062
1123D 0062
1144D 0062
+1145A 0062
1144E 0062
1144F 0062
1145B 0062
@@ -57399,6 +59280,7 @@ AA5C 0062
115D7 0062
11643 0062
1183B 0062
+11945 0062
119E2 0062
11FFF 0062
16B37 0062
@@ -57746,6 +59628,7 @@ FFFB 0062
13436 0062
13437 0062
13438 0062
+16FE4 0062
1BCA0 0062
1BCA1 0062
1BCA2 0062
@@ -58452,6 +60335,7 @@ FF22 003F
0487 0062
0741 0062
0745 0062
+0B55 0062
17CB 0062
17CC 0062
17CD 0062
@@ -58707,7 +60591,9 @@ FE7F 0062
FE7E 0062
0653 0062
0AFC 0062
+10EAC 0062
0654 0062
+10EAB 0062
0655 0062
065F 0062
0656 0062
@@ -58797,6 +60683,7 @@ A9B3 0062
115C0 0062
116B7 0062
1183A 0062
+11943 0062
11A33 0062
11D42 0062
0900 0062
@@ -58809,6 +60696,7 @@ A9B3 0062
0C01 0062
0C81 0062
0D01 0062
+0D81 0062
1B00 0062
1B01 0062
A8C5 0062
@@ -58817,11 +60705,13 @@ A980 0062
11080 0062
11100 0062
11180 0062
+111CF 0062
11301 0062
11443 0062
114BF 0062
115BC 0062
11640 0062
+1193C 0062
11A35 0062
11A36 0062
11A37 0062
@@ -58865,6 +60755,7 @@ A981 0062
1163D 0062
116AB 0062
11837 0062
+1193B 0062
119DE 0062
11A38 0062
11A96 0062
@@ -58982,6 +60873,8 @@ A92D 0062
302D 0062
302E 0062
302F 0062
+16FF0 0062
+16FF1 0062
20D0 0062
20D1 0062
20D2 0062
@@ -60223,6 +62116,16 @@ AB66 0062
1D06 0061
1D06 0041
1D06 0062
+A7C8 0021
+A7C8 003F
+A7C7 0021
+A7C7 003F
+A7C8 0061
+A7C8 0041
+A7C7 0061
+A7C7 0041
+A7C8 0062
+A7C7 0062
1D6D 0021
1D6D 003F
1D6D 0061
@@ -62452,6 +64355,16 @@ A7AA 0062
2C75 0041
2C76 0062
2C75 0062
+A7F6 0021
+A7F6 003F
+A7F5 0021
+A7F5 003F
+A7F6 0061
+A7F6 0041
+A7F5 0061
+A7F5 0041
+A7F6 0062
+A7F5 0062
A727 0021
A727 003F
A726 0021
@@ -68100,6 +70013,11 @@ AB4C 0062
02B6 0041
0281 0062
02B6 0062
+AB68 0021
+AB68 003F
+AB68 0061
+AB68 0041
+AB68 0062
A775 0021
A775 003F
A775 0061
@@ -68636,6 +70554,16 @@ A731 003F
A731 0061
A731 0041
A731 0062
+A7CA 0021
+A7CA 003F
+A7C9 0021
+A7C9 003F
+A7CA 0061
+A7CA 0041
+A7C9 0061
+A7C9 0041
+A7CA 0062
+A7C9 0062
1D74 0021
1D74 003F
1D74 0061
@@ -70611,7 +72539,9 @@ FF57 0021
FF57 003F
24B2 0021
24B2 003F
+1ABF 0021
1DF1 0021
+1ABF 003F
1DF1 003F
1D430 0021
1D464 0021
@@ -70784,6 +72714,8 @@ FF37 003F
0057 0323 0334
0057 0334 0323
1E88 0334
+0334 1ABF
+1ABF 0334
0334 1DF1
1DF1 0334
0077 0061
@@ -70791,8 +72723,10 @@ FF37 003F
FF57 0061
FF57 0041
24B2 0061
+1ABF 0061
1DF1 0061
24B2 0041
+1ABF 0041
1DF1 0041
1D430 0061
1D464 0061
@@ -70895,6 +72829,7 @@ FF37 0041
0077 0062
FF57 0062
24B2 0062
+1ABF 0062
1DF1 0062
1D430 0062
1D464 0062
@@ -70995,9 +72930,21 @@ A7C2 0062
2C72 0062
028D 0021
028D 003F
+1AC0 0021
+1AC0 003F
+AB69 0021
+AB69 003F
+0334 1AC0
+1AC0 0334
028D 0061
028D 0041
+1AC0 0061
+1AC0 0041
+AB69 0061
+AB69 0041
028D 0062
+1AC0 0062
+AB69 0062
0078 0021
0078 003F
FF58 0021
@@ -83748,6 +85695,11 @@ FB5A 0062
0756 0061
0756 0041
0756 0062
+08BE 0021
+08BE 003F
+08BE 0061
+08BE 0041
+08BE 0062
08A1 0021
08A1 003F
08A1 0061
@@ -84208,6 +86160,16 @@ FB62 0062
08B8 0061
08B8 0041
08B8 0062
+08BF 0021
+08BF 003F
+08BF 0061
+08BF 0041
+08BF 0062
+08C0 0021
+08C0 003F
+08C0 0061
+08C0 0041
+08C0 0062
062C 0021
062C 003F
1EE02 0021
@@ -84454,6 +86416,21 @@ FB7E 0062
08A2 0061
08A2 0041
08A2 0062
+08C1 0021
+08C1 003F
+08C1 0061
+08C1 0041
+08C1 0062
+08C5 0021
+08C5 003F
+08C5 0061
+08C5 0041
+08C5 0062
+08C6 0021
+08C6 003F
+08C6 0061
+08C6 0041
+08C6 0062
062D 0021
062D 003F
1EE07 0021
@@ -86332,6 +88309,11 @@ FCFA 0062
06A0 0061
06A0 0041
06A0 0062
+08C3 0021
+08C3 003F
+08C3 0061
+08C3 0041
+08C3 0062
06FC 0021
06FC 003F
06FC 0061
@@ -86747,6 +88729,11 @@ FC36 0062
06A8 0061
06A8 0041
06A8 0062
+08C4 0021
+08C4 003F
+08C4 0061
+08C4 0041
+08C4 0062
08A5 0021
08A5 003F
08A5 0061
@@ -87110,6 +89097,11 @@ FB96 0062
0764 0061
0764 0041
0764 0062
+08C2 0021
+08C2 003F
+08C2 0061
+08C2 0041
+08C2 0062
0644 0021
0644 003F
1EE0B 0021
@@ -87380,6 +89372,11 @@ FC44 0062
08A6 0061
08A6 0041
08A6 0062
+08C7 0021
+08C7 003F
+08C7 0061
+08C7 0041
+08C7 0062
0645 0021
0645 003F
1EE0C 0021
@@ -95461,6 +97458,11 @@ A8FF 0062
0D3D 0061
0D3D 0041
0D3D 0062
+0D04 0021
+0D04 003F
+0D04 0061
+0D04 0041
+0D04 0062
0D3E 0021
0D3E 003F
0D3E 0061
@@ -96379,6 +98381,13 @@ A806 0334
A806 0061
A806 0041
A806 0062
+A82C 0021
+A82C 003F
+0334 A82C
+A82C 0334
+A82C 0061
+A82C 0041
+A82C 0062
A807 0021
A807 003F
A807 0061
@@ -97813,6 +99822,12 @@ A8C4 0062
111BC 0061
111BC 0041
111BC 0062
+111CE 0021
+111CE 003F
+111CE 0334
+111CE 0061
+111CE 0041
+111CE 0062
111BD 0021
111BD 003F
111BD 0334
@@ -99479,6 +101494,18 @@ A8C4 0062
11447 0061
11447 0041
11447 0062
+11460 0021
+11460 003F
+11460 0334
+11460 0061
+11460 0041
+11460 0062
+11461 0021
+11461 003F
+11461 0334
+11461 0061
+11461 0041
+11461 0062
11448 0021
11448 003F
11448 0334
@@ -101119,6 +103146,353 @@ A8C4 0062
116B6 0061
116B6 0041
116B6 0062
+11900 0021
+11900 003F
+11900 0334
+11900 0061
+11900 0041
+11900 0062
+11901 0021
+11901 003F
+11901 0334
+11901 0061
+11901 0041
+11901 0062
+11902 0021
+11902 003F
+11902 0334
+11902 0061
+11902 0041
+11902 0062
+11903 0021
+11903 003F
+11903 0334
+11903 0061
+11903 0041
+11903 0062
+11904 0021
+11904 003F
+11904 0334
+11904 0061
+11904 0041
+11904 0062
+11905 0021
+11905 003F
+11905 0334
+11905 0061
+11905 0041
+11905 0062
+11906 0021
+11906 003F
+11906 0334
+11906 0061
+11906 0041
+11906 0062
+11909 0021
+11909 003F
+11909 0334
+11909 0061
+11909 0041
+11909 0062
+1190C 0021
+1190C 003F
+1190C 0334
+1190C 0061
+1190C 0041
+1190C 0062
+1190D 0021
+1190D 003F
+1190D 0334
+1190D 0061
+1190D 0041
+1190D 0062
+1190E 0021
+1190E 003F
+1190E 0334
+1190E 0061
+1190E 0041
+1190E 0062
+1190F 0021
+1190F 003F
+1190F 0334
+1190F 0061
+1190F 0041
+1190F 0062
+11910 0021
+11910 003F
+11910 0334
+11910 0061
+11910 0041
+11910 0062
+1193F 0021
+1193F 003F
+1193F 0334
+1193F 0061
+1193F 0041
+1193F 0062
+11911 0021
+11911 003F
+11911 0334
+11911 0061
+11911 0041
+11911 0062
+11912 0021
+11912 003F
+11912 0334
+11912 0061
+11912 0041
+11912 0062
+11913 0021
+11913 003F
+11913 0334
+11913 0061
+11913 0041
+11913 0062
+11915 0021
+11915 003F
+11915 0334
+11915 0061
+11915 0041
+11915 0062
+11916 0021
+11916 003F
+11916 0334
+11916 0061
+11916 0041
+11916 0062
+11918 0021
+11918 003F
+11918 0334
+11918 0061
+11918 0041
+11918 0062
+11919 0021
+11919 003F
+11919 0334
+11919 0061
+11919 0041
+11919 0062
+1191A 0021
+1191A 003F
+1191A 0334
+1191A 0061
+1191A 0041
+1191A 0062
+1191B 0021
+1191B 003F
+1191B 0334
+1191B 0061
+1191B 0041
+1191B 0062
+1191C 0021
+1191C 003F
+1191C 0334
+1191C 0061
+1191C 0041
+1191C 0062
+1191D 0021
+1191D 003F
+1191D 0334
+1191D 0061
+1191D 0041
+1191D 0062
+1191E 0021
+1191E 003F
+1191E 0334
+1191E 0061
+1191E 0041
+1191E 0062
+1191F 0021
+1191F 003F
+1191F 0334
+1191F 0061
+1191F 0041
+1191F 0062
+11920 0021
+11920 003F
+11920 0334
+11920 0061
+11920 0041
+11920 0062
+11921 0021
+11921 003F
+11921 0334
+11921 0061
+11921 0041
+11921 0062
+11922 0021
+11922 003F
+11922 0334
+11922 0061
+11922 0041
+11922 0062
+11923 0021
+11923 003F
+11923 0334
+11923 0061
+11923 0041
+11923 0062
+11924 0021
+11924 003F
+11924 0334
+11924 0061
+11924 0041
+11924 0062
+11925 0021
+11925 003F
+11925 0334
+11925 0061
+11925 0041
+11925 0062
+11940 0021
+11940 003F
+11940 0334
+11940 0061
+11940 0041
+11940 0062
+11926 0021
+11926 003F
+11926 0334
+11926 0061
+11926 0041
+11926 0062
+11941 0021
+11941 003F
+11941 0334
+11941 0061
+11941 0041
+11941 0062
+11927 0021
+11927 003F
+11927 0334
+11927 0061
+11927 0041
+11927 0062
+11942 0021
+11942 003F
+11942 0334
+11942 0061
+11942 0041
+11942 0062
+11928 0021
+11928 003F
+11928 0334
+11928 0061
+11928 0041
+11928 0062
+11929 0021
+11929 003F
+11929 0334
+11929 0061
+11929 0041
+11929 0062
+1192A 0021
+1192A 003F
+1192A 0334
+1192A 0061
+1192A 0041
+1192A 0062
+1192B 0021
+1192B 003F
+1192B 0334
+1192B 0061
+1192B 0041
+1192B 0062
+1192C 0021
+1192C 003F
+1192C 0334
+1192C 0061
+1192C 0041
+1192C 0062
+1192D 0021
+1192D 003F
+1192D 0334
+1192D 0061
+1192D 0041
+1192D 0062
+1192E 0021
+1192E 003F
+1192E 0334
+1192E 0061
+1192E 0041
+1192E 0062
+1192F 0021
+1192F 003F
+1192F 0334
+1192F 0061
+1192F 0041
+1192F 0062
+11930 0021
+11930 003F
+11930 0334
+11930 0061
+11930 0041
+11930 0062
+11931 0021
+11931 003F
+11931 0334
+11931 0061
+11931 0041
+11931 0062
+11932 0021
+11932 003F
+11932 0334
+11932 0061
+11932 0041
+11932 0062
+11933 0021
+11933 003F
+11933 0334
+11933 0061
+11933 0041
+11933 0062
+11934 0021
+11934 003F
+11934 0334
+11934 0061
+11934 0041
+11934 0062
+11935 0021
+11935 003F
+11935 0334
+11935 0061
+11935 0041
+11935 0062
+11935 0001 11930 0061
+11935 0591 11930 0061
+11935 1D165 11930 0061
+11937 0021
+11937 003F
+11937 0334
+11937 0061
+11937 0041
+11937 0062
+11935 11930 0021
+11938 0021
+11935 11930 003F
+11938 003F
+11935 11930 0334
+11938 0334
+11935 11930 0061
+11938 0061
+11935 11930 0041
+11938 0041
+11935 11930 0062
+11938 0062
+1193D 0021
+1193D 003F
+0334 1193D
+1193D 0334
+1193D 0061
+1193D 0041
+1193D 0062
+1193E 0021
+1193E 003F
+0334 1193E
+1193E 0334
+1193E 0061
+1193E 0041
+1193E 0062
119A0 0021
119A0 003F
119A0 0334
@@ -116012,6 +118386,12 @@ AA76 0062
11123 0061
11123 0041
11123 0062
+11147 0021
+11147 003F
+11147 0334
+11147 0061
+11147 0041
+11147 0062
11124 0021
11124 003F
11124 0334
@@ -119896,9 +122276,14 @@ A9B2 0041
A9B2 0062
A9B4 0021
A9B4 003F
+A9B5 0021
+A9B5 003F
A9B4 0061
A9B4 0041
+A9B5 0061
+A9B5 0041
A9B4 0062
+A9B5 0062
A9BC 0021
A9BC 003F
A9BC 0061
@@ -119939,11 +122324,6 @@ A9BB 003F
A9BB 0061
A9BB 0041
A9BB 0062
-A9B5 0021
-A9B5 003F
-A9B5 0061
-A9B5 0041
-A9B5 0062
A9C0 0021
A9C0 003F
0334 A9C0
@@ -141546,13 +143926,18 @@ FF9D 0062
310C 0062
310D 0021
310D 003F
+31BB 0021
+31BB 003F
31A3 0021
31A3 003F
310D 0061
310D 0041
+31BB 0061
+31BB 0041
31A3 0061
31A3 0041
310D 0062
+31BB 0062
31A3 0062
310E 0021
310E 003F
@@ -141609,6 +143994,16 @@ FF9D 0062
312C 0061
312C 0041
312C 0062
+31BC 0021
+31BC 003F
+31BC 0061
+31BC 0041
+31BC 0062
+31BD 0021
+31BD 003F
+31BD 0061
+31BD 0041
+31BD 0062
3113 0021
3113 003F
3113 0061
@@ -141824,6 +144219,16 @@ FF9D 0062
312D 0061
312D 0041
312D 0062
+31BE 0021
+31BE 003F
+31BE 0061
+31BE 0041
+31BE 0062
+31BF 0021
+31BF 003F
+31BF 0061
+31BF 0041
+31BF 0062
A000 0021
A000 003F
A000 0061
@@ -147829,6 +150234,12 @@ A4EC 003F
A4EC 0061
A4EC 0041
A4EC 0062
+11FB0 0021
+11FB0 003F
+11FB0 0334
+11FB0 0061
+11FB0 0041
+11FB0 0062
A4EE 0021
A4EE 003F
A4EE 0061
@@ -160203,6 +162614,396 @@ A4F7 0062
10F44 0061
10F44 0041
10F44 0062
+10E80 0021
+10E80 003F
+10E80 0334
+10E80 0061
+10E80 0041
+10E80 0062
+10E81 0021
+10E81 003F
+10E81 0334
+10E81 0061
+10E81 0041
+10E81 0062
+10E82 0021
+10E82 003F
+10E82 0334
+10E82 0061
+10E82 0041
+10E82 0062
+10E83 0021
+10E83 003F
+10E83 0334
+10E83 0061
+10E83 0041
+10E83 0062
+10E84 0021
+10E84 003F
+10E84 0334
+10E84 0061
+10E84 0041
+10E84 0062
+10E85 0021
+10E85 003F
+10E85 0334
+10E85 0061
+10E85 0041
+10E85 0062
+10E86 0021
+10E86 003F
+10E86 0334
+10E86 0061
+10E86 0041
+10E86 0062
+10E87 0021
+10E87 003F
+10E87 0334
+10E87 0061
+10E87 0041
+10E87 0062
+10E88 0021
+10E88 003F
+10E88 0334
+10E88 0061
+10E88 0041
+10E88 0062
+10E89 0021
+10E89 003F
+10E89 0334
+10E89 0061
+10E89 0041
+10E89 0062
+10E8A 0021
+10E8A 003F
+10E8A 0334
+10E8A 0061
+10E8A 0041
+10E8A 0062
+10E8B 0021
+10E8B 003F
+10E8B 0334
+10E8B 0061
+10E8B 0041
+10E8B 0062
+10E8C 0021
+10E8C 003F
+10E8C 0334
+10E8C 0061
+10E8C 0041
+10E8C 0062
+10E8D 0021
+10E8D 003F
+10E8D 0334
+10E8D 0061
+10E8D 0041
+10E8D 0062
+10E8E 0021
+10E8E 003F
+10E8E 0334
+10E8E 0061
+10E8E 0041
+10E8E 0062
+10E8F 0021
+10E8F 003F
+10E8F 0334
+10E8F 0061
+10E8F 0041
+10E8F 0062
+10E90 0021
+10E90 003F
+10E90 0334
+10E90 0061
+10E90 0041
+10E90 0062
+10E91 0021
+10E91 003F
+10E91 0334
+10E91 0061
+10E91 0041
+10E91 0062
+10E92 0021
+10E92 003F
+10E92 0334
+10E92 0061
+10E92 0041
+10E92 0062
+10E93 0021
+10E93 003F
+10E93 0334
+10E93 0061
+10E93 0041
+10E93 0062
+10E94 0021
+10E94 003F
+10E94 0334
+10E94 0061
+10E94 0041
+10E94 0062
+10E95 0021
+10E95 003F
+10E95 0334
+10E95 0061
+10E95 0041
+10E95 0062
+10E96 0021
+10E96 003F
+10E96 0334
+10E96 0061
+10E96 0041
+10E96 0062
+10E97 0021
+10E97 003F
+10E97 0334
+10E97 0061
+10E97 0041
+10E97 0062
+10E98 0021
+10E98 003F
+10E98 0334
+10E98 0061
+10E98 0041
+10E98 0062
+10E99 0021
+10E99 003F
+10E99 0334
+10E99 0061
+10E99 0041
+10E99 0062
+10E9A 0021
+10E9A 003F
+10E9A 0334
+10E9A 0061
+10E9A 0041
+10E9A 0062
+10E9B 0021
+10E9B 003F
+10E9B 0334
+10E9B 0061
+10E9B 0041
+10E9B 0062
+10E9C 0021
+10E9C 003F
+10E9C 0334
+10E9C 0061
+10E9C 0041
+10E9C 0062
+10E9D 0021
+10E9D 003F
+10E9D 0334
+10E9D 0061
+10E9D 0041
+10E9D 0062
+10E9E 0021
+10E9E 003F
+10E9E 0334
+10E9E 0061
+10E9E 0041
+10E9E 0062
+10E9F 0021
+10E9F 003F
+10E9F 0334
+10E9F 0061
+10E9F 0041
+10E9F 0062
+10EA0 0021
+10EA0 003F
+10EA0 0334
+10EA0 0061
+10EA0 0041
+10EA0 0062
+10EB0 0021
+10EB0 003F
+10EB0 0334
+10EB0 0061
+10EB0 0041
+10EB0 0062
+10EA1 0021
+10EA1 003F
+10EA1 0334
+10EA1 0061
+10EA1 0041
+10EA1 0062
+10EA2 0021
+10EA2 003F
+10EA2 0334
+10EA2 0061
+10EA2 0041
+10EA2 0062
+10EA3 0021
+10EA3 003F
+10EA3 0334
+10EA3 0061
+10EA3 0041
+10EA3 0062
+10EA4 0021
+10EA4 003F
+10EA4 0334
+10EA4 0061
+10EA4 0041
+10EA4 0062
+10EA5 0021
+10EA5 003F
+10EA5 0334
+10EA5 0061
+10EA5 0041
+10EA5 0062
+10EA6 0021
+10EA6 003F
+10EA6 0334
+10EA6 0061
+10EA6 0041
+10EA6 0062
+10EA7 0021
+10EA7 003F
+10EA7 0334
+10EA7 0061
+10EA7 0041
+10EA7 0062
+10EA8 0021
+10EA8 003F
+10EA8 0334
+10EA8 0061
+10EA8 0041
+10EA8 0062
+10EB1 0021
+10EB1 003F
+10EB1 0334
+10EB1 0061
+10EB1 0041
+10EB1 0062
+10EA9 0021
+10EA9 003F
+10EA9 0334
+10EA9 0061
+10EA9 0041
+10EA9 0062
+10FB0 0021
+10FB0 003F
+10FB0 0334
+10FB0 0061
+10FB0 0041
+10FB0 0062
+10FB1 0021
+10FB1 003F
+10FB1 0334
+10FB1 0061
+10FB1 0041
+10FB1 0062
+10FB2 0021
+10FB2 003F
+10FB2 0334
+10FB2 0061
+10FB2 0041
+10FB2 0062
+10FB3 0021
+10FB3 003F
+10FB3 0334
+10FB3 0061
+10FB3 0041
+10FB3 0062
+10FB4 0021
+10FB4 003F
+10FB4 0334
+10FB4 0061
+10FB4 0041
+10FB4 0062
+10FB5 0021
+10FB5 003F
+10FB5 0334
+10FB5 0061
+10FB5 0041
+10FB5 0062
+10FB6 0021
+10FB6 003F
+10FB6 0334
+10FB6 0061
+10FB6 0041
+10FB6 0062
+10FB7 0021
+10FB7 003F
+10FB7 0334
+10FB7 0061
+10FB7 0041
+10FB7 0062
+10FB8 0021
+10FB8 003F
+10FB8 0334
+10FB8 0061
+10FB8 0041
+10FB8 0062
+10FB9 0021
+10FB9 003F
+10FB9 0334
+10FB9 0061
+10FB9 0041
+10FB9 0062
+10FBA 0021
+10FBA 003F
+10FBA 0334
+10FBA 0061
+10FBA 0041
+10FBA 0062
+10FBB 0021
+10FBB 003F
+10FBB 0334
+10FBB 0061
+10FBB 0041
+10FBB 0062
+10FBC 0021
+10FBC 003F
+10FBC 0334
+10FBC 0061
+10FBC 0041
+10FBC 0062
+10FBD 0021
+10FBD 003F
+10FBD 0334
+10FBD 0061
+10FBD 0041
+10FBD 0062
+10FBE 0021
+10FBE 003F
+10FBE 0334
+10FBE 0061
+10FBE 0041
+10FBE 0062
+10FBF 0021
+10FBF 003F
+10FBF 0334
+10FBF 0061
+10FBF 0041
+10FBF 0062
+10FC0 0021
+10FC0 003F
+10FC0 0334
+10FC0 0061
+10FC0 0041
+10FC0 0062
+10FC1 0021
+10FC1 003F
+10FC1 0334
+10FC1 0061
+10FC1 0041
+10FC1 0062
+10FC2 0021
+10FC2 003F
+10FC2 0334
+10FC2 0061
+10FC2 0041
+10FC2 0062
+10FC3 0021
+10FC3 003F
+10FC3 0334
+10FC3 0061
+10FC3 0041
+10FC3 0062
+10FC4 0021
+10FC4 003F
+10FC4 0334
+10FC4 0061
+10FC4 0041
+10FC4 0062
10380 0021
10380 003F
10380 0334
@@ -177675,12 +180476,42 @@ A4F7 0062
18803 0061
18803 0041
18803 0062
-18AF2 0021
-18AF2 003F
-18AF2 0334
-18AF2 0061
-18AF2 0041
-18AF2 0062
+18AFF 0021
+18AFF 003F
+18AFF 0334
+18AFF 0061
+18AFF 0041
+18AFF 0062
+18D00 0021
+18D00 003F
+18D00 0334
+18D00 0061
+18D00 0041
+18D00 0062
+18D01 0021
+18D01 003F
+18D01 0334
+18D01 0061
+18D01 0041
+18D01 0062
+18D02 0021
+18D02 003F
+18D02 0334
+18D02 0061
+18D02 0041
+18D02 0062
+18D03 0021
+18D03 003F
+18D03 0334
+18D03 0061
+18D03 0041
+18D03 0062
+18D08 0021
+18D08 003F
+18D08 0334
+18D08 0061
+18D08 0041
+18D08 0062
1B170 0021
1B170 003F
1B170 0334
@@ -177711,6 +180542,18 @@ A4F7 0062
1B2FB 0061
1B2FB 0041
1B2FB 0062
+18B00 0021
+18B00 003F
+18B00 0334
+18B00 0061
+18B00 0041
+18B00 0062
+18CD5 0021
+18CD5 003F
+18CD5 0334
+18CD5 0061
+18CD5 0041
+18CD5 0062
4E00 0021
4E00 003F
3220 0021
@@ -180575,12 +183418,6 @@ FA93 0041
2F8D9 0041
FA93 0062
2F8D9 0062
-2F8DA 0021
-2F8DA 003F
-2F8DA 0334
-2F8DA 0061
-2F8DA 0041
-2F8DA 0062
322D 0021
322D 003F
2F4A 0021
@@ -184362,11 +187199,11 @@ FACE 0062
0378 0061
0378 0041
0378 0062
-4DB6 0021
-4DB6 003F
-4DB6 0061
-4DB6 0041
-4DB6 0062
+9FFD 0021
+9FFD 003F
+9FFD 0061
+9FFD 0041
+9FFD 0062
D800 0021
D800 003F
D800 0061
@@ -184494,12 +187331,12 @@ FFF0 0062
1FFFF 0061
1FFFF 0041
1FFFF 0062
-2A6D7 0021
-2A6D7 003F
-2A6D7 0334
-2A6D7 0061
-2A6D7 0041
-2A6D7 0062
+2A6DE 0021
+2A6DE 003F
+2A6DE 0334
+2A6DE 0061
+2A6DE 0041
+2A6DE 0062
2B735 0021
2B735 003F
2B735 0334
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
index 6f8ca3ab129..8f096229620 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
@@ -1,6 +1,6 @@
-# GraphemeBreakTest-12.0.0.txt
-# Date: 2019-02-21, 07:57:26 GMT
-# © 2019 Unicode®, Inc.
+# GraphemeBreakTest-cldr-13.0.0.txt
+# Date: 2020-02-07, 21:43:46 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -760,8 +760,17 @@
÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
+÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
+÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3]
+÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]
+÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]
÷ 0915 ÷ 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
÷ 0915 × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
÷ 0915 × 094D × 200D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
÷ 0915 × 093C × 200D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
÷ 0915 × 093C × 094D × 200D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
@@ -769,15 +778,7 @@
÷ 0915 × 094D ÷ 0061 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER A (Other) ÷ [0.3]
÷ 0061 × 094D ÷ 0924 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
÷ 003F × 094D ÷ 0924 ÷ # ÷ [0.2] QUESTION MARK (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_Virama_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (LinkingConsonant) ÷ [0.3]
-÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
-÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
-÷ 0061 × 1F3FF ÷ 1F476 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [0.3]
-÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]
-÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]
#
-# Lines: 755
+# Lines: 756
#
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt b/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
index 731b78177b0..28c5b64e0e9 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
@@ -1,11 +1,11 @@
# IdnaTestV2.txt
-# Date: 2019-04-01, 09:18:19 GMT
+# Date: 2019-11-07, 13:47:27 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode IDNA Compatible Preprocessing for UTS #46
-# Version: 12.1.0
+# Version: 13.0.0
#
# For documentation and usage, see http://www.unicode.org/reports/tr46
#
@@ -572,10 +572,10 @@ xn--jbf911clb.xn----p9j493ivi4l; ≠ᢙ≯.솣-ᡴⴀ; [V6]; xn--jbf911clb.xn---
xn--jbf929a90b0b.xn----p9j493ivi4l; â€â‰ á¢™â‰¯.솣-á¡´â´€; [C2, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-á¡´â´€
xn--jbf911clb.xn----6zg521d196p; ≠ᢙ≯.솣-ᡴႠ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ
xn--jbf929a90b0b.xn----6zg521d196p; â€â‰ á¢™â‰¯.솣-á¡´á‚ ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-á¡´á‚ 
-ñ¯žœï¼Žð¿‡à¾¢Ý½Ø€; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ྡྷݽ
-ñ¯žœï¼Žð¿‡à¾¡à¾·Ý½Ø€; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ྡྷݽ
-ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; ; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ྡྷݽ
-xn--gw68a.xn--ifb57ev2psc6027m; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ྡྷݽ
+ñ¯žœï¼Žð¿‡à¾¢Ý½Ø€; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+ñ¯žœï¼Žð¿‡à¾¡à¾·Ý½Ø€; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; ; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+xn--gw68a.xn--ifb57ev2psc6027m; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
𣳔̃.𑓂; ; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂
xn--nsa95820a.xn--wz1d; 𣳔̃.𑓂; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂
𞤀𞥅ñ˜±ã€‚󠄌Ⴣꡥ; 𞤢𞥅ñ˜±.Ⴣꡥ; [B2, B3, P1, V6]; xn--9d6hgcy3556a.xn--7nd0578e; ; ; # 𞤢𞥅.Ⴣꡥ
@@ -802,9 +802,9 @@ xn--3gb910r.; ⴙظ.; [B5, B6]; xn--3gb910r.; ; ; # ⴙظ.
xn--3gb910r.xn--1ug; ⴙظ.â€; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; ; # ⴙظ.
xn--3gb194c.; Ⴙظ.; [B5, B6, V6]; xn--3gb194c.; ; ; # Ⴙظ.
xn--3gb194c.xn--1ug; Ⴙظ.â€; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; ; # Ⴙظ.
-󠆸。₆ï¼ðº§Ý–; .60ðº§Ý–; [B1, P1, V6, X4_2]; .xn--60-cke9470y; [B1, P1, V6, A4_2]; ; # .60Ý–
-󠆸。60ðº§Ý–; .60ðº§Ý–; [B1, P1, V6, X4_2]; .xn--60-cke9470y; [B1, P1, V6, A4_2]; ; # .60Ý–
-.xn--60-cke9470y; .60ðº§Ý–; [B1, V6, X4_2]; .xn--60-cke9470y; [B1, V6, A4_2]; ; # .60Ý–
+󠆸。₆ï¼ðº§Ý–; .60ðº§Ý–; [B1, P1, V6, X4_2]; .xn--60-cke9470y; [B1, P1, V6, A4_2]; ; # .60ðº§Ý–
+󠆸。60ðº§Ý–; .60ðº§Ý–; [B1, P1, V6, X4_2]; .xn--60-cke9470y; [B1, P1, V6, A4_2]; ; # .60ðº§Ý–
+.xn--60-cke9470y; .60ðº§Ý–; [B1, V6, X4_2]; .xn--60-cke9470y; [B1, V6, A4_2]; ; # .60ðº§Ý–
6à¡ï½¡-𑈴; 6à¡.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
6à¡ã€‚-𑈴; 6à¡.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
xn--6-jjd.xn----6n8i; 6à¡.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
@@ -1071,14 +1071,14 @@ xn--8b9a1720d.xn--kcb33b; ꡀ𞀟.Ù«Ö™; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ê
òˆ›‰â€Œà¢©ã€‚⧅ñ˜˜¡-ð­¡; òˆ›‰â€Œà¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, P1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, P1, V6] # ࢩ.⧅-ð­¡
xn--yyb56242i.xn----zir1232guu71b; òˆ›‰à¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, V6]; xn--yyb56242i.xn----zir1232guu71b; ; ; # ࢩ.⧅-ð­¡
xn--yyb780jll63m.xn----zir1232guu71b; òˆ›‰â€Œà¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; ; # ࢩ.⧅-ð­¡
-룱â€ð°¨â€Œã€‚ð¨–︒; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱.ð¨–︒
-룱â€ð°¨â€Œã€‚ð¨–︒; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱.ð¨–︒
-룱â€ð°¨â€Œã€‚ð¨–。; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [P1, V5, V6] # 룱.ð¨–.
-룱â€ð°¨â€Œã€‚ð¨–。; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [P1, V5, V6] # 룱.ð¨–.
-xn--ct2b0738h.xn--772h.; 룱ð°¨.ð¨–.; [V5, V6]; xn--ct2b0738h.xn--772h.; ; ; # 룱.ð¨–.
-xn--0ugb3358ili2v.xn--772h.; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱.ð¨–.
-xn--ct2b0738h.xn--y86cl899a; 룱ð°¨.ð¨–︒; [V5, V6]; xn--ct2b0738h.xn--y86cl899a; ; ; # 룱.ð¨–︒
-xn--0ugb3358ili2v.xn--y86cl899a; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; ; # 룱.ð¨–︒
+룱â€ð°¨â€Œã€‚ð¨–︒; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱ð°¨.ð¨–︒
+룱â€ð°¨â€Œã€‚ð¨–︒; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱ð°¨.ð¨–︒
+룱â€ð°¨â€Œã€‚ð¨–。; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [P1, V5, V6] # 룱ð°¨.ð¨–.
+룱â€ð°¨â€Œã€‚ð¨–。; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [P1, V5, V6] # 룱ð°¨.ð¨–.
+xn--ct2b0738h.xn--772h.; 룱ð°¨.ð¨–.; [V5, V6]; xn--ct2b0738h.xn--772h.; ; ; # 룱ð°¨.ð¨–.
+xn--0ugb3358ili2v.xn--772h.; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱ð°¨.ð¨–.
+xn--ct2b0738h.xn--y86cl899a; 룱ð°¨.ð¨–︒; [V5, V6]; xn--ct2b0738h.xn--y86cl899a; ; ; # 룱ð°¨.ð¨–︒
+xn--0ugb3358ili2v.xn--y86cl899a; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; ; # 룱ð°¨.ð¨–︒
🄄.᳜⒈ß; 🄄.᳜⒈ß; [P1, V5, V6]; xn--x07h.xn--zca344lmif; ; xn--x07h.xn--ss-k1r094b; # 🄄.᳜⒈ß
3,.᳜1.ß; ; [P1, V5, V6]; 3,.xn--1-43l.xn--zca; ; 3,.xn--1-43l.ss; # 3,.᳜1.ß
3,.᳜1.SS; 3,.᳜1.ss; [P1, V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
@@ -1186,10 +1186,10 @@ xn--fhbea662czx68a2tju.xn--vnd55511o; كممð®±à­ð¨¿.ó§¤á‚·; [B2, B3, V6]; x
𞀨。᭄򡛨𞎇; 𞀨.᭄򡛨𞎇; [P1, V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
𞀨。᭄򡛨𞎇; 𞀨.᭄򡛨𞎇; [P1, V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
xn--mi4h.xn--1uf6843smg20c; 𞀨.᭄򡛨𞎇; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
-󠣼‌.ðº°â€Œá¡Ÿ; 󠣼‌.ðº°â€Œá¡Ÿ; [B1, B2, B3, C1, P1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, P1, V6] # .á¡Ÿ
-󠣼‌.ðº°â€Œá¡Ÿ; ; [B1, B2, B3, C1, P1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, P1, V6] # .á¡Ÿ
-xn--q046e.xn--v8e7227j; ó £¼.ðº°á¡Ÿ; [B1, B2, B3, V6]; xn--q046e.xn--v8e7227j; ; ; # .á¡Ÿ
-xn--0ug18531l.xn--v8e340bp21t; 󠣼‌.ðº°â€Œá¡Ÿ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; ; # .á¡Ÿ
+󠣼‌.ðº°â€Œá¡Ÿ; 󠣼‌.ðº°â€Œá¡Ÿ; [B1, B2, B3, C1, P1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, P1, V6] # .ðº°á¡Ÿ
+󠣼‌.ðº°â€Œá¡Ÿ; ; [B1, B2, B3, C1, P1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, P1, V6] # .ðº°á¡Ÿ
+xn--q046e.xn--v8e7227j; ó £¼.ðº°á¡Ÿ; [B1, B2, B3, V6]; xn--q046e.xn--v8e7227j; ; ; # .ðº°á¡Ÿ
+xn--0ug18531l.xn--v8e340bp21t; 󠣼‌.ðº°â€Œá¡Ÿ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; ; # .ðº°á¡Ÿ
ᢛ󨅟ß.ጧ; ; [P1, V6]; xn--zca562jc642x.xn--p5d; ; xn--ss-7dp66033t.xn--p5d; # ᢛß.ጧ
ᢛ󨅟SS.ጧ; ᢛ󨅟ss.ጧ; [P1, V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
ᢛ󨅟ss.ጧ; ; [P1, V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
@@ -1865,9 +1865,9 @@ xn--0ug8815chtz0e.xn--0ib8893fegvj; 򊉆‌꥓.𞤻ٻꡘ; [B2, B3, C1, V6]; xn--
‌.≯; ‌.≯; [C1, P1, V6]; xn--0ug.xn--hdh; ; .xn--hdh; [P1, V6, A4_2] # .≯
.xn--hdh; .≯; [V6, X4_2]; .xn--hdh; [V6, A4_2]; ; # .≯
xn--0ug.xn--hdh; ‌.≯; [C1, V6]; xn--0ug.xn--hdh; ; ; # .≯
-𰅧񣩠-.꯭-悜; 𰅧񣩠-.꯭-悜; [P1, V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # -.꯭-悜
-𰅧񣩠-.꯭-悜; ; [P1, V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # -.꯭-悜
-xn----7m53aj640l.xn----8f4br83t; 𰅧񣩠-.꯭-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # -.꯭-悜
+𰅧񣩠-.꯭-悜; 𰅧񣩠-.꯭-悜; [P1, V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
+𰅧񣩠-.꯭-悜; ; [P1, V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
+xn----7m53aj640l.xn----8f4br83t; 𰅧񣩠-.꯭-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
ᡉ𶓧⬞ᢜ.-â€ðž£‘‮; ; [C2, P1, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; xn--87e0ol04cdl39e.xn----qinu247r; [P1, V3, V6] # ᡉ⬞ᢜ.-𞣑
xn--87e0ol04cdl39e.xn----qinu247r; ᡉ𶓧⬞ᢜ.-𞣑‮; [V3, V6]; xn--87e0ol04cdl39e.xn----qinu247r; ; ; # ᡉ⬞ᢜ.-𞣑
xn--87e0ol04cdl39e.xn----ugn5e3763s; ᡉ𶓧⬞ᢜ.-â€ðž£‘‮; [C2, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; ; # ᡉ⬞ᢜ.-𞣑
@@ -2295,9 +2295,9 @@ xn--t6f5138v; 𦀾᳠; ; xn--t6f5138v; ; ; # 𦀾᳠
𞮑Ssôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, P1, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
xn--ss-o412ac6305g.xn--07e; 𞮑ssôžž.á¡; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
xn--zca9432wb989f.xn--07e; 𞮑ßôžž.á¡; [B2, B3, V6]; xn--zca9432wb989f.xn--07e; ; ; # ß.á¡
-꥓â€Ø¬Ù¬ã€‚𱆎󻡟‌󠅆; ꥓â€Ø¬Ù¬.𱆎󻡟‌; [B5, B6, C1, P1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; xn--rgb2k6711c.xn--ec8nj3948b; [B5, B6, P1, V5, V6] # ꥓ج٬.
-xn--rgb2k6711c.xn--ec8nj3948b; ꥓ج٬.𱆎󻡟; [B5, B6, V5, V6]; xn--rgb2k6711c.xn--ec8nj3948b; ; ; # ꥓ج٬.
-xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ꥓â€Ø¬Ù¬.𱆎󻡟‌; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; ; # ꥓ج٬.
+꥓â€Ø¬Ù¬ã€‚𱆎󻡟‌󠅆; ꥓â€Ø¬Ù¬.𱆎󻡟‌; [B5, B6, C1, P1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; xn--rgb2k6711c.xn--ec8nj3948b; [B5, B6, P1, V5, V6] # ꥓ج٬.𱆎
+xn--rgb2k6711c.xn--ec8nj3948b; ꥓ج٬.𱆎󻡟; [B5, B6, V5, V6]; xn--rgb2k6711c.xn--ec8nj3948b; ; ; # ꥓ج٬.𱆎
+xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ꥓â€Ø¬Ù¬.𱆎󻡟‌; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; ; # ꥓ج٬.𱆎
ó •ï¼Ž-ß‌≠; ó •.-ß‌≠; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
ó •ï¼Ž-ß‌≠; ó •.-ß‌≠; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
ó •.-ß‌≠; ; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
@@ -2431,9 +2431,9 @@ xn--ss-pyd98921c.xn----nz8rh7531csznt; 🂃٦ss.ó  ‚ò­°ðž©’-; [B1, V3, V6]; xn-
xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; 🂃٦ssâ€.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; ; # 🂃٦ss.-
xn--zca34z68yzu83b.xn----nz8rh7531csznt; 🂃٦ßâ€.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; ; # 🂃٦ß.-
🂃٦Ssâ€ã€‚ó  ‚ò­°ðž©’-; 🂃٦ssâ€.ó  ‚ò­°ðž©’-; [B1, C2, P1, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, P1, V3, V6] # 🂃٦ss.-
-ꇟ-ð¾ºÚŸã€‚ò°€ºâ€Œ; ꇟ-ð¾ºÚŸ.ò°€ºâ€Œ; [B5, B6, C1, P1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; xn----utc4430jd3zd.xn--bp20d; [B5, B6, P1, V6] # ꇟ-ÚŸ.
-xn----utc4430jd3zd.xn--bp20d; ꇟ-ð¾ºÚŸ.ò°€º; [B5, B6, V6]; xn----utc4430jd3zd.xn--bp20d; ; ; # ꇟ-ÚŸ.
-xn----utc4430jd3zd.xn--0ugx6670i; ꇟ-ð¾ºÚŸ.ò°€ºâ€Œ; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; ; # ꇟ-ÚŸ.
+ꇟ-ð¾ºÚŸã€‚ò°€ºâ€Œ; ꇟ-ð¾ºÚŸ.ò°€ºâ€Œ; [B5, B6, C1, P1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; xn----utc4430jd3zd.xn--bp20d; [B5, B6, P1, V6] # ꇟ-ð¾ºÚŸ.
+xn----utc4430jd3zd.xn--bp20d; ꇟ-ð¾ºÚŸ.ò°€º; [B5, B6, V6]; xn----utc4430jd3zd.xn--bp20d; ; ; # ꇟ-ð¾ºÚŸ.
+xn----utc4430jd3zd.xn--0ugx6670i; ꇟ-ð¾ºÚŸ.ò°€ºâ€Œ; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; ; # ꇟ-ð¾ºÚŸ.
Ù¥.Ò„ð¨—ð©‹ð´¤ƒ; ; [B1, P1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # Ù¥.Ò„ð¨—ð©‹
xn--eib.xn--n3a0405kus8eft5l; Ù¥.Ò„ð¨—ð©‹ð´¤ƒ; [B1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # Ù¥.Ò„ð¨—ð©‹
-.ñ±¼“Ù‰ð¨¿; ; [B1, B5, B6, P1, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.Ù‰ð¨¿
@@ -3071,10 +3071,10 @@ xn----p26i72em2894c.xn--zw6h; -ð‘„³ó Š—ð¹©.ðž®±; [B1, V3, V6]; xn----p26i72em28
ڹ.ᡳᅟ; ڹ.ᡳᅟ; [P1, V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
ڹ.ᡳᅟ; ; [P1, V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
xn--skb.xn--osd737a; ڹ.ᡳᅟ; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
-㨛𘱎.︒ðŸ•à´; 㨛𘱎.︒7à´; [P1, V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛.︒7à´
-㨛𘱎.。7à´; 㨛𘱎..7à´; [P1, V6, X4_2]; xn--mbm8237g..xn--7-7hf; [P1, V6, A4_2]; ; # 㨛..7à´
-xn--mbm8237g..xn--7-7hf; 㨛𘱎..7à´; [V6, X4_2]; xn--mbm8237g..xn--7-7hf; [V6, A4_2]; ; # 㨛..7à´
-xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7à´; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛.︒7à´
+㨛𘱎.︒ðŸ•à´; 㨛𘱎.︒7à´; [P1, V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7à´
+㨛𘱎.。7à´; 㨛𘱎..7à´; [P1, V6, X4_2]; xn--mbm8237g..xn--7-7hf; [P1, V6, A4_2]; ; # 㨛𘱎..7à´
+xn--mbm8237g..xn--7-7hf; 㨛𘱎..7à´; [V6, X4_2]; xn--mbm8237g..xn--7-7hf; [V6, A4_2]; ; # 㨛𘱎..7à´
+xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7à´; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7à´
Û𻱧-。ðž·â¤ðž¤£â‰®; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
Û𻱧-。ðž·â¤ðž¤£≮; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
Û𻱧-。ðž·â¤ðž¤£â‰®; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
@@ -3538,16 +3538,16 @@ xn--1ch22084l.xn----qkc07co6n; ≠󦋂.Ø€à¯-Ú¹; [B1, V6]; xn--1ch22084l.xn----q
áŸó £â‰ ã€‚ð¹¼ð‹¤; áŸó £â‰ .ð¹¼ð‹¤; [B1, P1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
áŸó £≠。ð¹¼ð‹¤; áŸó £â‰ .ð¹¼ð‹¤; [B1, P1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
xn--54e694cn389z.xn--787ct8r; áŸó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
-ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [P1, V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß.ð©¨ðŸ•®ÃŸ
-ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [P1, V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß.ð©¨ðŸ•®ÃŸ
-SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
-ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
-Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
-xn--ss-jl59biy67d.xn--ss-4d11aw87d; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
-xn--zca20040bgrkh.xn--zca3653v86qa; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; ; # ß.ð©¨ðŸ•®ÃŸ
-SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
-ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
-Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss.ð©¨ðŸ•®ss
+ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [P1, V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.ð©¨ðŸ•®ÃŸ
+ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [P1, V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.ð©¨ðŸ•®ÃŸ
+SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+xn--ss-jl59biy67d.xn--ss-4d11aw87d; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+xn--zca20040bgrkh.xn--zca3653v86qa; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; ; # ß𰀻.ð©¨ðŸ•®ÃŸ
+SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
â€ã€‚‌; â€.‌; [C1, C2]; xn--1ug.xn--0ug; ; .; [A4_2] # .
xn--1ug.xn--0ug; â€.‌; [C1, C2]; xn--1ug.xn--0ug; ; ; # .
Òƒð­žâ€.ឹ𞯌òŸ©š; ; [B1, C2, P1, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; xn--m3a6965k.xn--43e8670vmd79b; [B1, P1, V5, V6] # Òƒð­ž.áž¹
@@ -3769,10 +3769,10 @@ xn--5-24jyf768b.xn--lqw213ime95g; ᡃ5≯ᠣ.æ°ñ¨±ê«; [V6]; xn--5-24jyf768b.x
ð¹¬ð©‡ï¼Žà¾²à¾€; ð¹¬ð©‡.ྲྀ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
ð¹¬ð©‡.ྲྀ; ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
xn--ko0d8295a.xn--zed3h; ð¹¬ð©‡.ྲྀ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
--𑈶â’.⒎𰛢󠎭; -𑈶â’.⒎𰛢󠎭; [P1, V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.â’Ž
--𑈶8..7.𰛢󠎭; ; [P1, V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [P1, V3, V6, A4_2]; ; # -𑈶8..7.
-xn---8-bv5o..7.xn--c35nf1622b; -𑈶8..7.𰛢󠎭; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ; # -𑈶8..7.
-xn----scp6252h.xn--zshy411yzpx2d; -𑈶â’.⒎𰛢󠎭; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.â’Ž
+-𑈶â’.⒎𰛢󠎭; -𑈶â’.⒎𰛢󠎭; [P1, V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.⒎𰛢
+-𑈶8..7.𰛢󠎭; ; [P1, V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [P1, V3, V6, A4_2]; ; # -𑈶8..7.𰛢
+xn---8-bv5o..7.xn--c35nf1622b; -𑈶8..7.𰛢󠎭; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ; # -𑈶8..7.𰛢
+xn----scp6252h.xn--zshy411yzpx2d; -𑈶â’.⒎𰛢󠎭; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.⒎𰛢
‌Ⴁç•â€ï¼Žâ‰®; ‌Ⴁç•â€.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
‌Ⴁç•â€ï¼Ž≮; ‌Ⴁç•â€.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
‌Ⴁç•â€.≮; ; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
@@ -4450,10 +4450,10 @@ xn--3xa.xn--dhbip2802atb20c; Ï‚.Ùمي🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c
🗩-。ð¹»óž†ñ¥‰®; 🗩-.ð¹»óž†ñ¥‰®; [B1, P1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
🗩-。ð¹»óž†ñ¥‰®; 🗩-.ð¹»óž†ñ¥‰®; [B1, P1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
xn----6t3s.xn--zo0d4811u6ru6a; 🗩-.ð¹»óž†ñ¥‰®; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
-ð¡œ-🔪。ðŸ»â€Œð¿€; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1, P1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3, P1, V6] # ð¡œ-🔪.5
-ð¡œ-🔪。5‌ð¿€; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1, P1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3, P1, V6] # ð¡œ-🔪.5
-xn----5j4iv089c.xn--5-bn7i; ð¡œ-🔪.5ð¿€; [B1, B3, V6]; xn----5j4iv089c.xn--5-bn7i; ; ; # ð¡œ-🔪.5
-xn----5j4iv089c.xn--5-sgn7149h; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # ð¡œ-🔪.5
+ð¡œ-🔪。ðŸ»â€Œð¿€; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1, P1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3, P1, V6] # ð¡œ-🔪.5ð¿€
+ð¡œ-🔪。5‌ð¿€; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1, P1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3, P1, V6] # ð¡œ-🔪.5ð¿€
+xn----5j4iv089c.xn--5-bn7i; ð¡œ-🔪.5ð¿€; [B1, B3, V6]; xn----5j4iv089c.xn--5-bn7i; ; ; # ð¡œ-🔪.5ð¿€
+xn----5j4iv089c.xn--5-sgn7149h; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # ð¡œ-🔪.5ð¿€
ð¹£ëŠ¿â€ÃŸï¼Žß0Ö¼; ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
ð¹£á„‚ᅴᆺâ€ÃŸï¼Žß0Ö¼; ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
@@ -5664,9 +5664,9 @@ xn--rgbd2e831i.xn----zyc875efr3a; ᪲مخج.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgb
xn--ce6h.xn----cod.; 𞤤.-ࢣ.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
𞤂.-ࢣ︒; 𞤤.-ࢣ︒; [B1, P1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
xn--ce6h.xn----cod7069p; 𞤤.-ࢣ︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
-‌ðº¨.à¡™--; ; [B1, C1, P1, V3, V5, V6]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, P1, V3, V5, V6] # .à¡™--
-xn--9p0d.xn-----h6e; ðº¨.à¡™--; [B1, V3, V5, V6]; xn--9p0d.xn-----h6e; ; ; # .à¡™--
-xn--0ug7905g.xn-----h6e; ‌ðº¨.à¡™--; [B1, C1, V3, V5, V6]; xn--0ug7905g.xn-----h6e; ; ; # .à¡™--
+‌ðº¨.à¡™--; ; [B1, C1, P1, V3, V5, V6]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, P1, V3, V5, V6] # ðº¨.à¡™--
+xn--9p0d.xn-----h6e; ðº¨.à¡™--; [B1, V3, V5, V6]; xn--9p0d.xn-----h6e; ; ; # ðº¨.à¡™--
+xn--0ug7905g.xn-----h6e; ‌ðº¨.à¡™--; [B1, C1, V3, V5, V6]; xn--0ug7905g.xn-----h6e; ; ; # ðº¨.à¡™--
ð‹¸ó®˜‹áƒ‚.á‚¡; ; [P1, V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # ð‹¸áƒ‚.á‚¡
ð‹¸ó®˜‹â´¢.â´; ; [P1, V6]; xn--qlj1559dr224h.xn--skj; ; ; # ð‹¸â´¢.â´
ð‹¸ó®˜‹áƒ‚.â´; ; [P1, V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # ð‹¸áƒ‚.â´
@@ -5921,10 +5921,10 @@ xn--qib.xn--4xa21s; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
xn--qib.xn--3xa41s; ٱ.ςߜ; [B5, B6]; xn--qib.xn--3xa41s; ; ; # ٱ.ςߜ
ٱ.Σߜ; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
ٱ.σߜ; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
-ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, P1, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, P1, V6] # .ð‘‘‚
-ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; ; [B2, B3, B5, B6, C2, P1, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, P1, V6] # .ð‘‘‚
-xn--nfb17942h.xn--nzb6708kx3pn; ñ¼ˆ¶Ø….à£ð‘‘‚ð±¼±; [B2, B3, B5, B6, V6]; xn--nfb17942h.xn--nzb6708kx3pn; ; ; # .ð‘‘‚
-xn--nfb17942h.xn--nzb240jv06otevq; ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; ; # .ð‘‘‚
+ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, P1, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, P1, V6] # .à£ð‘‘‚
+ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; ; [B2, B3, B5, B6, C2, P1, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, P1, V6] # .à£ð‘‘‚
+xn--nfb17942h.xn--nzb6708kx3pn; ñ¼ˆ¶Ø….à£ð‘‘‚ð±¼±; [B2, B3, B5, B6, V6]; xn--nfb17942h.xn--nzb6708kx3pn; ; ; # .à£ð‘‘‚
+xn--nfb17942h.xn--nzb240jv06otevq; ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; ; # .à£ð‘‘‚
ð¹¾ð‹©ðžµœï½¡á¯²; ð¹¾ð‹©ðžµœ.᯲; [B1, P1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
ð¹¾ð‹©ðžµœã€‚᯲; ð¹¾ð‹©ðžµœ.᯲; [B1, P1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
xn--d97cn8rn44p.xn--0zf; ð¹¾ð‹©ðžµœ.᯲; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
index eb056990a0d..d8666c458fc 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
@@ -1,5 +1,5 @@
-# LineBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:14 GMT
+# LineBreakTest-13.0.0.txt
+# Date: 2019-11-21, 16:13:36 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -54,10 +54,6 @@
× 0023 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0023 × 0308 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0023 × 0308 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0023 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0023 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0023 × 0308 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -90,9 +86,9 @@
× 0023 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0023 × 0308 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] COMMA (IS) ÷ [0.3]
× 0023 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -126,10 +122,10 @@
× 0023 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0308 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0023 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0308 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0023 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0023 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0023 × 0308 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -170,6 +166,14 @@
× 0023 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0023 × 0308 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0023 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0023 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0023 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0023 × 0308 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -222,10 +226,6 @@
× 2014 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2014 × 0308 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2014 × 0308 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2014 × 000D ÷ # × [0.3] EM DASH (B2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2014 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2014 × 0308 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -258,9 +258,9 @@
× 2014 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2014 × 0308 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2014 ÷ 2024 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 2024 ÷ # × [0.3] EM DASH (B2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0308 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 0308 × 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 002C ÷ # × [0.3] EM DASH (B2) × [13.02] COMMA (IS) ÷ [0.3]
× 2014 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -294,10 +294,10 @@
× 2014 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2014 × 0308 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 ÷ 0028 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2014 ÷ 2329 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2014 × 0020 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2014 × 0308 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 2014 ÷ 0025 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 2014 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2014 × 0308 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -338,6 +338,14 @@
× 2014 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2014 × 0308 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 ÷ 0028 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2014 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 2014 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2014 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2014 × 0308 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -390,10 +398,6 @@
× 0009 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0009 × 0308 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0009 × 0308 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0009 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0009 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0009 × 0308 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -426,9 +430,9 @@
× 0009 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0009 × 0308 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0009 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0308 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 0308 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] COMMA (IS) ÷ [0.3]
× 0009 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -462,10 +466,10 @@
× 0009 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0009 × 0308 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0009 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0009 × 0020 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0009 × 0308 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0009 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0009 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0009 × 0308 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -506,6 +510,14 @@
× 0009 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0009 × 0308 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0009 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0009 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0009 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0009 × 0308 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -558,10 +570,6 @@
× 00B4 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00B4 × 0308 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00B4 × 0308 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00B4 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00B4 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00B4 × 0308 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -630,10 +638,10 @@
× 00B4 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00B4 × 0308 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00B4 × 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00B4 × 0020 ÷ 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00B4 × 0308 × 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00B4 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
× 00B4 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00B4 × 0308 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
@@ -674,6 +682,14 @@
× 00B4 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00B4 × 0308 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00B4 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 00B4 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00B4 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00B4 × 0308 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -726,10 +742,6 @@
× 000B ÷ 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000B ÷ 0308 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000B ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000B ÷ 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000B ÷ 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000B ÷ 0308 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -764,7 +776,7 @@
× 000B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000B ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMMA (IS) ÷ [0.3]
× 000B ÷ 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -798,10 +810,10 @@
× 000B ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 0308 × 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000B ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000B ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0308 × 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -842,6 +854,14 @@
× 000B ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000B ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 000B ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000B ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000B ÷ 0308 × 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -894,10 +914,6 @@
× FFFC × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× FFFC × 0308 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× FFFC × 0308 × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× FFFC × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× FFFC × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× FFFC × 0308 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -966,10 +982,10 @@
× FFFC × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× FFFC × 0308 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× FFFC ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× FFFC × 0020 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× FFFC × 0308 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× FFFC ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
× FFFC × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× FFFC × 0308 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -1010,6 +1026,14 @@
× FFFC × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× FFFC × 0308 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× FFFC × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× FFFC × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× FFFC × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× FFFC × 0308 × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1062,10 +1086,6 @@
× 007D × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 007D × 0308 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 007D × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 007D × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 007D × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 007D × 0308 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1098,9 +1118,9 @@
× 007D × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 007D × 0308 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 007D ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0308 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 0308 × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] COMMA (IS) ÷ [0.3]
× 007D × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1134,10 +1154,10 @@
× 007D × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 007D × 0308 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 007D ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 007D × 0020 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 007D × 0308 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 007D ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 007D × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 007D × 0308 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1178,6 +1198,14 @@
× 007D × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 007D × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 007D × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 007D × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 007D × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 007D × 0308 × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1202,174 +1230,6 @@
× 007D × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0308 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0308 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0308 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000D ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0308 × 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
@@ -1398,10 +1258,6 @@
× 000D ÷ 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000D ÷ 0308 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000D ÷ 0308 × 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000D ÷ 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000D ÷ 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000D ÷ 0308 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1436,7 +1292,7 @@
× 000D ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000D ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMMA (IS) ÷ [0.3]
× 000D ÷ 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1470,10 +1326,10 @@
× 000D ÷ 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 0308 × 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000D ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0308 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000D ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0308 × 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -1514,6 +1370,14 @@
× 000D ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000D ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000D ÷ 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 000D ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000D ÷ 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000D ÷ 0308 × 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1566,10 +1430,6 @@
× 0021 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0021 × 0308 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0021 × 0308 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0021 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0021 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0021 × 0308 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1602,9 +1462,9 @@
× 0021 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0021 × 0308 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] COMMA (IS) ÷ [0.3]
× 0021 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1638,10 +1498,10 @@
× 0021 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0021 × 0308 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0021 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0021 × 0020 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0021 × 0308 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0021 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0021 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0021 × 0308 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1682,6 +1542,14 @@
× 0021 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0021 × 0308 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0021 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0021 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0021 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0021 × 0308 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1734,10 +1602,6 @@
× 00A0 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A0 × 0308 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A0 × 0308 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A0 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A0 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A0 × 0308 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1806,10 +1670,10 @@
× 00A0 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A0 × 0308 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A0 × 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A0 × 0020 ÷ 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A0 × 0308 × 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A0 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A0 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A0 × 0308 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1850,6 +1714,14 @@
× 00A0 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A0 × 0308 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A0 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 00A0 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A0 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A0 × 0308 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1902,10 +1774,6 @@
× AC00 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC00 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC00 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC00 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC00 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC00 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1938,9 +1806,9 @@
× AC00 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× AC00 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] COMMA (IS) ÷ [0.3]
× AC00 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1974,10 +1842,10 @@
× AC00 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× AC00 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC00 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC00 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC00 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -2018,6 +1886,14 @@
× AC00 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC00 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC00 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× AC00 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC00 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC00 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2070,10 +1946,6 @@
× AC01 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC01 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC01 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC01 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC01 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC01 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2106,9 +1978,9 @@
× AC01 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× AC01 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] COMMA (IS) ÷ [0.3]
× AC01 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2142,10 +2014,10 @@
× AC01 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× AC01 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC01 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC01 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC01 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -2186,6 +2058,14 @@
× AC01 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC01 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC01 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× AC01 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC01 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC01 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2238,10 +2118,6 @@
× 05D0 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 05D0 × 0308 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 05D0 × 0308 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 05D0 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 05D0 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 05D0 × 0308 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2274,9 +2150,9 @@
× 05D0 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 05D0 × 0308 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] COMMA (IS) ÷ [0.3]
× 05D0 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2310,10 +2186,10 @@
× 05D0 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0308 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 05D0 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0308 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 05D0 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 05D0 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 05D0 × 0308 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -2354,6 +2230,14 @@
× 05D0 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 05D0 × 0308 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 05D0 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 05D0 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 05D0 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 05D0 × 0308 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2406,10 +2290,6 @@
× 002D × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002D × 0308 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002D × 0308 × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002D × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002D × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002D × 0308 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2442,9 +2322,9 @@
× 002D × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002D × 0308 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002D ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0308 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 0308 × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] COMMA (IS) ÷ [0.3]
× 002D × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2478,10 +2358,10 @@
× 002D × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002D × 0308 × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002D ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002D ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002D × 0020 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002D × 0308 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 002D ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002D × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002D × 0308 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -2522,6 +2402,14 @@
× 002D × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002D × 0308 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002D × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 002D × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002D × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002D × 0308 × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2574,10 +2462,6 @@
× 231A × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 231A × 0308 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 231A × 0308 × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 231A × 000D ÷ # × [0.3] WATCH (ID) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 231A × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 231A × 0308 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2610,9 +2494,9 @@
× 231A × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 231A × 0308 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 002C ÷ # × [0.3] WATCH (ID) × [13.02] COMMA (IS) ÷ [0.3]
× 231A × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2646,10 +2530,10 @@
× 231A × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 231A × 0308 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 231A ÷ 2329 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 231A × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 231A × 0308 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 231A × 0025 ÷ # × [0.3] WATCH (ID) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 231A × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 231A × 0308 × 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
@@ -2690,6 +2574,14 @@
× 231A × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 231A × 0308 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 231A × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 231A × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 231A × 0308 × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2742,10 +2634,6 @@
× 2024 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2024 × 0308 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2024 × 0308 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2024 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2024 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2024 × 0308 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2778,9 +2666,9 @@
× 2024 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2024 × 0308 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] COMMA (IS) ÷ [0.3]
× 2024 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2814,10 +2702,10 @@
× 2024 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2024 × 0308 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2024 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2024 × 0020 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2024 × 0308 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 2024 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 2024 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2024 × 0308 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -2858,6 +2746,14 @@
× 2024 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2024 × 0308 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2024 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 2024 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2024 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2024 × 0308 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2910,10 +2806,6 @@
× 002C × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002C × 0308 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002C × 0308 × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002C × 000D ÷ # × [0.3] COMMA (IS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002C × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002C × 0308 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2946,9 +2838,9 @@
× 002C × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002C × 0308 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002C ÷ 2024 ÷ # × [0.3] COMMA (IS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 2024 ÷ # × [0.3] COMMA (IS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0308 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 0308 × 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 002C ÷ # × [0.3] COMMA (IS) × [13.02] COMMA (IS) ÷ [0.3]
× 002C × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2982,10 +2874,10 @@
× 002C × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002C × 0308 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C ÷ 0028 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002C ÷ 2329 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002C × 0020 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002C × 0308 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 002C ÷ 0025 ÷ # × [0.3] COMMA (IS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002C × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002C × 0308 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -3026,6 +2918,14 @@
× 002C × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002C × 0308 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C ÷ 0028 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002C × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 002C × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002C × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002C × 0308 × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3078,10 +2978,6 @@
× 1100 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1100 × 0308 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1100 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1100 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1100 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1100 × 0308 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3114,9 +3010,9 @@
× 1100 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1100 × 0308 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] COMMA (IS) ÷ [0.3]
× 1100 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3150,10 +3046,10 @@
× 1100 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1100 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1100 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1100 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1100 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -3194,6 +3090,14 @@
× 1100 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1100 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1100 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1100 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1100 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1100 × 0308 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3246,10 +3150,6 @@
× 11A8 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 11A8 × 0308 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 11A8 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 11A8 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 11A8 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 11A8 × 0308 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3282,9 +3182,9 @@
× 11A8 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 11A8 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] COMMA (IS) ÷ [0.3]
× 11A8 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3318,10 +3218,10 @@
× 11A8 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 11A8 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 11A8 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11A8 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11A8 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -3362,6 +3262,14 @@
× 11A8 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 11A8 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11A8 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 11A8 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 11A8 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 11A8 × 0308 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3414,10 +3322,6 @@
× 1160 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1160 × 0308 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1160 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1160 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1160 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1160 × 0308 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3450,9 +3354,9 @@
× 1160 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1160 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] COMMA (IS) ÷ [0.3]
× 1160 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3486,10 +3390,10 @@
× 1160 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1160 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1160 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1160 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1160 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -3530,6 +3434,14 @@
× 1160 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1160 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1160 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1160 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1160 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1160 × 0308 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3582,10 +3494,6 @@
× 000A ÷ 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000A ÷ 0308 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000A ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000A ÷ 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000A ÷ 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000A ÷ 0308 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3620,7 +3528,7 @@
× 000A ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000A ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMMA (IS) ÷ [0.3]
× 000A ÷ 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3654,10 +3562,10 @@
× 000A ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 0308 × 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000A ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000A ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0308 × 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -3698,6 +3606,14 @@
× 000A ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000A ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000A ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 000A ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000A ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000A ÷ 0308 × 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3750,10 +3666,6 @@
× 0085 ÷ 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0085 ÷ 0308 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0085 ÷ 0308 × 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0085 ÷ 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0085 ÷ 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0085 ÷ 0308 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3788,7 +3700,7 @@
× 0085 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0085 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMMA (IS) ÷ [0.3]
× 0085 ÷ 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3822,10 +3734,10 @@
× 0085 ÷ 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 0308 × 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0085 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0085 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0308 × 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -3866,6 +3778,14 @@
× 0085 ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0085 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0085 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0085 ÷ 0308 × 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3918,10 +3838,6 @@
× 17D6 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 17D6 × 0308 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 17D6 × 0308 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 17D6 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 17D6 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 17D6 × 0308 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3954,9 +3870,9 @@
× 17D6 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 17D6 × 0308 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 17D6 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0308 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 0308 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] COMMA (IS) ÷ [0.3]
× 17D6 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3990,10 +3906,10 @@
× 17D6 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 17D6 × 0308 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 17D6 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 17D6 × 0020 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 17D6 × 0308 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 17D6 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 17D6 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 17D6 × 0308 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4034,6 +3950,14 @@
× 17D6 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 17D6 × 0308 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 17D6 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 17D6 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 17D6 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 17D6 × 0308 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4086,10 +4010,6 @@
× 0030 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0030 × 0308 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0030 × 0308 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0030 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0030 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0030 × 0308 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4122,9 +4042,9 @@
× 0030 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0030 × 0308 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] COMMA (IS) ÷ [0.3]
× 0030 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4158,10 +4078,10 @@
× 0030 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0308 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0030 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0308 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0030 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0308 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
@@ -4202,6 +4122,14 @@
× 0030 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0030 × 0308 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0030 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0030 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0030 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0030 × 0308 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4226,174 +4154,178 @@
× 0030 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0308 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0308 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0308 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 0308 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0308 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 0308 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 0308 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × 0308 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 0308 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 0308 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0308 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 0308 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × 0308 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 0308 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 0308 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 0308 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 0308 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 0308 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2329 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2329 × 0308 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2329 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 0308 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 0308 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 0308 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0308 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 0308 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0308 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 0308 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0308 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0308 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0308 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0308 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 0308 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 0308 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 0308 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 0308 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 0308 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 0308 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0308 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0308 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0308 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 0308 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 0308 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 0308 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0308 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 0308 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0308 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0025 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0308 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
@@ -4422,10 +4354,6 @@
× 0025 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0025 × 0308 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0025 × 0308 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0025 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0025 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0025 × 0308 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4458,9 +4386,9 @@
× 0025 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0025 × 0308 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0025 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0308 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 0308 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] COMMA (IS) ÷ [0.3]
× 0025 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4494,10 +4422,10 @@
× 0025 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0025 × 0308 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0025 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0025 × 0020 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0025 × 0308 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0025 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0025 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0025 × 0308 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4538,6 +4466,14 @@
× 0025 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0025 × 0308 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0025 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0025 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0025 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0025 × 0308 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4590,10 +4526,6 @@
× 0024 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0024 × 0308 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0024 × 0308 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0024 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0024 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0024 × 0308 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4626,9 +4558,9 @@
× 0024 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0024 × 0308 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WATCH (ID) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0024 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0308 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 0308 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] COMMA (IS) ÷ [0.3]
× 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4662,10 +4594,10 @@
× 0024 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 0308 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0024 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0024 × 0020 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0024 × 0308 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0024 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 0308 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4706,6 +4638,14 @@
× 0024 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0024 × 0308 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0024 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0024 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0024 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0024 × 0308 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4758,10 +4698,6 @@
× 0022 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0022 × 0308 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0022 × 0308 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0022 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0022 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0022 × 0308 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4830,10 +4766,10 @@
× 0022 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0308 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0022 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0308 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0308 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0022 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0308 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -4874,6 +4810,14 @@
× 0022 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0022 × 0308 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0022 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0022 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0022 × 0308 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4926,10 +4870,6 @@
× 0020 × 0020 × 007D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0020 ÷ 0308 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0020 ÷ 0308 × 0020 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0020 × 000D ÷ # × [0.3] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0020 × 0020 × 000D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0020 ÷ 0308 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4964,7 +4904,7 @@
× 0020 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 002C ÷ # × [0.3] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0020 × 0020 × 002C ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4998,10 +4938,10 @@
× 0020 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0020 ÷ 0308 × 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 ÷ 0308 × 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -5042,6 +4982,14 @@
× 0020 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0020 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0020 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0020 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0020 ÷ 0308 × 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5094,10 +5042,6 @@
× 002F × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002F × 0308 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002F × 0308 × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002F × 000D ÷ # × [0.3] SOLIDUS (SY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002F × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002F × 0308 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5130,9 +5074,9 @@
× 002F × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002F × 0308 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002F ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 2024 ÷ # × [0.3] SOLIDUS (SY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0308 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 0308 × 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 002C ÷ # × [0.3] SOLIDUS (SY) × [13.02] COMMA (IS) ÷ [0.3]
× 002F × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5166,10 +5110,10 @@
× 002F × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002F × 0308 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002F ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002F × 0020 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002F × 0308 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 002F ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002F × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002F × 0308 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -5210,6 +5154,14 @@
× 002F × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002F × 0308 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002F × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 002F × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002F × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002F × 0308 × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5262,10 +5214,6 @@
× 2060 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2060 × 0308 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2060 × 0308 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2060 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2060 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2060 × 0308 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5334,10 +5282,10 @@
× 2060 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2060 × 0308 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2060 × 2329 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2060 × 0020 ÷ 2329 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2060 × 0308 × 2329 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 2060 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
× 2060 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2060 × 0308 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -5378,6 +5326,14 @@
× 2060 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2060 × 0308 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2060 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 2060 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2060 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2060 × 0308 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5430,10 +5386,6 @@
× 200B × 0020 ÷ 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200B ÷ 0308 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200B ÷ 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 200B × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200B × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200B ÷ 0308 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5468,7 +5420,7 @@
× 200B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 200B ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMMA (IS) ÷ [0.3]
× 200B × 0020 ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] COMMA (IS) ÷ [0.3]
@@ -5502,10 +5454,10 @@
× 200B × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] DIGIT ZERO (NU) ÷ [0.3]
× 200B ÷ 0308 × 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200B ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B ÷ 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200B ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B ÷ 0308 × 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -5546,6 +5498,14 @@
× 200B × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200B × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 200B ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200B × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200B ÷ 0308 × 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5598,10 +5558,6 @@
× 1F1E6 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F1E6 × 0308 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F1E6 × 0308 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1F1E6 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F1E6 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F1E6 × 0308 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5634,9 +5590,9 @@
× 1F1E6 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1F1E6 × 0308 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 0308 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] COMMA (IS) ÷ [0.3]
× 1F1E6 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5670,10 +5626,10 @@
× 1F1E6 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F1E6 × 0308 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F1E6 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1F1E6 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F1E6 × 0308 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -5714,6 +5670,14 @@
× 1F1E6 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F1E6 × 0308 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1F1E6 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F1E6 × 0308 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5766,10 +5730,6 @@
× 261D × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 261D × 0308 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 261D × 0308 × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 261D × 0308 × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 261D × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 261D × 0020 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 261D × 0308 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5802,9 +5762,9 @@
× 261D × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 261D × 0308 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] COMMA (IS) ÷ [0.3]
× 261D × 0020 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5838,10 +5798,10 @@
× 261D × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 261D × 0308 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 261D ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 261D × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 261D × 0308 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 261D ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 261D × 0020 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 261D × 0308 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 261D × 0020 ÷ 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 261D × 0308 × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
@@ -5882,6 +5842,14 @@
× 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D × 0308 × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 261D × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 261D × 0308 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 261D × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 261D × 0020 ÷ 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 261D × 0308 × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5934,10 +5902,6 @@
× 1F3FB × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F3FB × 0308 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F3FB × 0308 × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1F3FB × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F3FB × 0020 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F3FB × 0308 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5970,9 +5934,9 @@
× 1F3FB × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1F3FB × 0308 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] COMMA (IS) ÷ [0.3]
× 1F3FB × 0020 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6006,10 +5970,10 @@
× 1F3FB × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F3FB × 0308 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F3FB ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F3FB ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F3FB × 0020 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F3FB × 0308 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1F3FB × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 1F3FB × 0020 ÷ 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F3FB × 0308 × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
@@ -6050,6 +6014,14 @@
× 1F3FB × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F3FB × 0308 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1F3FB × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F3FB × 0020 ÷ 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F3FB × 0308 × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6074,6 +6046,350 @@
× 1F3FB × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F3FB × 0308 × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0029 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 × 0308 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0308 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0308 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0020 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0308 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0308 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0308 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0001 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0308 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
@@ -6102,10 +6418,6 @@
× 0001 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0001 × 0308 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0001 × 0308 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0001 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0001 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0001 × 0308 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6138,9 +6450,9 @@
× 0001 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0001 × 0308 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
× 0001 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6174,10 +6486,10 @@
× 0001 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0001 × 0308 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0001 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0308 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0001 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0001 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0001 × 0308 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6218,6 +6530,14 @@
× 0001 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0001 × 0308 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0001 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0001 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0001 × 0308 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6270,10 +6590,6 @@
× 200D × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200D × 0308 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200D × 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200D × 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 200D × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200D × 0020 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200D × 0308 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6308,7 +6624,7 @@
× 200D × 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 200D × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMMA (IS) ÷ [0.3]
× 200D × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6342,10 +6658,10 @@
× 200D × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 200D × 0308 × 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200D × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200D × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200D × 0308 × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200D × 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200D × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] PERCENT SIGN (PO) ÷ [0.3]
× 200D × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 200D × 0308 × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6386,6 +6702,14 @@
× 200D × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200D × 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200D × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200D × 0308 × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 200D × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200D × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200D × 0308 × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6438,10 +6762,6 @@
× 00A7 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A7 × 0308 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A7 × 0308 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A7 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A7 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A7 × 0308 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6474,9 +6794,9 @@
× 00A7 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 00A7 × 0308 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 00A7 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6510,10 +6830,10 @@
× 00A7 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0308 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A7 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0308 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A7 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 00A7 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A7 × 0308 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6554,6 +6874,14 @@
× 00A7 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A7 × 0308 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A7 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 00A7 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A7 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A7 × 0308 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6606,10 +6934,6 @@
× 50005 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 50005 × 0308 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 50005 × 0308 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 50005 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 50005 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 50005 × 0308 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6642,9 +6966,9 @@
× 50005 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 50005 × 0308 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 50005 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6678,10 +7002,10 @@
× 50005 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0308 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 50005 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0308 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 50005 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 50005 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 50005 × 0308 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6722,6 +7046,14 @@
× 50005 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 50005 × 0308 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 50005 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 50005 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 50005 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 50005 × 0308 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6774,10 +7106,6 @@
× 0E01 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0E01 × 0308 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0E01 × 0308 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0E01 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0E01 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0E01 × 0308 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6810,9 +7138,9 @@
× 0E01 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0E01 × 0308 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 0E01 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6846,10 +7174,10 @@
× 0E01 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0308 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0E01 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0308 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0E01 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0308 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6890,6 +7218,14 @@
× 0E01 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0E01 × 0308 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0E01 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0E01 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0E01 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0E01 × 0308 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6942,10 +7278,6 @@
× 3041 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 3041 × 0308 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 3041 × 0308 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 3041 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 3041 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 3041 × 0308 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6978,9 +7310,9 @@
× 3041 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 3041 × 0308 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 3041 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0308 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 0308 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] COMMA (IS) ÷ [0.3]
× 3041 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -7014,10 +7346,10 @@
× 3041 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 3041 × 0308 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 3041 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 3041 × 0020 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 3041 × 0308 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 3041 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 3041 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 3041 × 0308 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -7058,6 +7390,14 @@
× 3041 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 3041 × 0308 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 3041 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 3041 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 3041 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 3041 × 0308 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -7099,10 +7439,10 @@
× 3041 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× FFFC ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 3041 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
@@ -7111,7 +7451,7 @@
× 1100 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
@@ -7120,8 +7460,8 @@
× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0027 × 0063 × 0061 × 006E × 0027 × 0020 ÷ 006E × 006F × 0074 ÷ # × [0.3] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 0020 ÷ 0027 × 006E × 006F × 0074 × 0027 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) × [19.01] APOSTROPHE (QU) ÷ [0.3]
-× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 00A0 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 00A0 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 002E × 002E ÷ 307E ÷ 3059 × 3002 ÷ 0058 × 004D × 004C ÷ 306E × 002E × 002E ÷ # × [0.3] FULL STOP (IS) × [13.02] FULL STOP (IS) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [999.0] HIRAGANA LETTER SU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN CAPITAL LETTER X (AL) × [28.0] LATIN CAPITAL LETTER M (AL) × [28.0] LATIN CAPITAL LETTER L (AL) ÷ [999.0] HIRAGANA LETTER NO (ID) × [13.02] FULL STOP (IS) × [13.02] FULL STOP (IS) ÷ [0.3]
× 0061 × 0062 × 00AD ÷ 0062 × 0079 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER Y (AL) ÷ [0.3]
× 002D × 0033 ÷ # × [0.3] HYPHEN-MINUS (HY) × [25.02] DIGIT THREE (NU) ÷ [0.3]
@@ -7130,81 +7470,81 @@
× 0061 × 0020 × 0020 ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0020 × 0020 × 200B ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0020 ÷ 0308 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0067 × 0069 × 0076 × 0065 × 0020 ÷ 0062 × 006F × 006F × 006B × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER K (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 307E ÷ 0028 × 3059 × 0029 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER SU (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0067 × 0069 × 0076 × 0065 × 0020 ÷ 0062 × 006F × 006F × 006B × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER K (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 307E ÷ 0028 × 3059 × 0029 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER SU (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0066 × 0069 × 006E × 0064 × 0020 × 002E × 0063 × 006F × 006D ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) × [29.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) ÷ [0.3]
× 0065 × 0071 × 0075 × 0061 × 006C × 0073 × 0020 × 002E ÷ 0033 × 0035 × 0020 ÷ 0063 × 0065 × 006E × 0074 × 0073 ÷ # × [0.3] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [25.03] DIGIT FIVE (NU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0068 × 0065 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
-× 007B × 0073 × 007D ÷ 0068 × 0065 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
-× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 0028 × 0259 × 0029 × 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 007B × 0259 × 007D ÷ 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 002E × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0021 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 005C ÷ 0028 × 0073 × 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0020 × 0073 × 0020 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0028 × 0065 × 0029 ÷ 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 ÷ 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0063 × 006F × 0064 × 007B × 0065 × 007D ÷ 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D ÷ 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 002D × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 00AD × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 2011 × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 002D × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 00AD × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 2011 × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 007D ÷ 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 007D × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 007D × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0030 × 0029 × 003B ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP) × [13.02] SEMICOLON (IS) ÷ [0.3]
-× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0029 ÷ 007B × 007D ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT CURLY BRACKET (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 672C ÷ 0028 × 3092 × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 0028 × 300C × 3092 × 300D × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 300C × 0028 × 3092 × 0029 × 300D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 007B × 3092 × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 007B × 300C × 3092 × 300D × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 005B × 0028 × 3092 × 0029 × 005D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT SQUARE BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 0028 × 30CB × 30E5 × 30FC × 30FB × 0029 ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 30CB × 30E5 × 30FC × 0029 × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 007B × 30CB × 30E5 × 30FC × 30FB × 007D ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 007B × 30CB × 30E5 × 30FC × 007D × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 0028 × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 0029 × 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 007D ÷ 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0030 × 002C × 0031 × 0029 × 002B × 0028 × 0032 × 002C × 0033 × 0029 × 2295 × 0028 × 2212 × 0034 × 002C × 0035 × 0029 × 2296 × 0028 × 0036 × 002C × 0037 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [25.05] PLUS SIGN (PR) × [25.01] LEFT PARENTHESIS (OP) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [30.02] CIRCLED PLUS (AI_AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [30.02] CIRCLED MINUS (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007B × 0030 × 002C × 0031 × 007D × 002B × 007B × 0032 × 002C × 0033 × 007D ÷ 2295 × 007B × 2212 × 0034 × 002C × 0035 × 007D ÷ 2296 × 007B × 0036 × 002C × 0037 × 007D ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT CURLY BRACKET (CL) × [25.05] PLUS SIGN (PR) × [25.01] LEFT CURLY BRACKET (OP) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED PLUS (AI_AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED MINUS (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0068 × 0065 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
+× 007B × 0073 × 007D ÷ 0068 × 0065 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
+× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 0028 × 0259 × 0029 × 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) ÷ [0.3]
+× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 007B × 0259 × 007D ÷ 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 002E × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0021 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 005C ÷ 0028 × 0073 × 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0020 × 0073 × 0020 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 002D × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 00AD × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 2011 × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 0029 × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 0029 × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 0029 × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 002D × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 00AD × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 2011 × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 007D × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 007D × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 007D × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 007D ÷ 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 007D × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 007D × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0030 × 0029 × 003B ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [13.02] SEMICOLON (IS) ÷ [0.3]
+× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0029 ÷ 007B × 007D ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 672C ÷ 0028 × 3092 × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 0028 × 300C × 3092 × 300D × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 300C × 0028 × 3092 × 0029 × 300D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 007B × 3092 × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 007B × 300C × 3092 × 300D × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 005B × 0028 × 3092 × 0029 × 005D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 0028 × 30CB × 30E5 × 30FC × 30FB × 0029 ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0028 × 30CB × 30E5 × 30FC × 0029 × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 007B × 30CB × 30E5 × 30FC × 30FB × 007D ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 007B × 30CB × 30E5 × 30FC × 007D × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 0028 × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 0029 × 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 007D ÷ 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 0028 × 0030 × 002C × 0031 × 0029 × 002B × 0028 × 0032 × 002C × 0033 × 0029 × 2295 × 0028 × 2212 × 0034 × 002C × 0035 × 0029 × 2296 × 0028 × 0036 × 002C × 0037 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [25.05] PLUS SIGN (PR) × [25.01] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [30.02] CIRCLED PLUS (AI_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [30.02] CIRCLED MINUS (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007B × 0030 × 002C × 0031 × 007D × 002B × 007B × 0032 × 002C × 0033 × 007D ÷ 2295 × 007B × 2212 × 0034 × 002C × 0035 × 007D ÷ 2296 × 007B × 0036 × 002C × 0037 × 007D ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT CURLY BRACKET (CL) × [25.05] PLUS SIGN (PR) × [25.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED PLUS (AI_AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED MINUS (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0061 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0062 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [0.3]
× 0061 × 0062 × 0020 ÷ 0063 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) ÷ [0.3]
@@ -7245,9 +7585,9 @@
× BD10 ÷ C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0033 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE BWA (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
× C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0034 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT FOUR (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
× 0061 × 002E ÷ 0032 × 3000 ÷ 300C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] LEFT CORNER BRACKET (OP) ÷ [0.3]
-× 306B ÷ 300C × 30D0 ÷ 0028 × 0062 × 0061 × 0029 × 300D ÷ 3084 ÷ 300C × 30B9 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER BA (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER YA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER SU (ID) ÷ [0.3]
+× 306B ÷ 300C × 30D0 ÷ 0028 × 0062 × 0061 × 0029 × 300D ÷ 3084 ÷ 300C × 30B9 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER BA (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER YA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER SU (ID) ÷ [0.3]
× 308B ÷ 300C × 0055 × 004B ÷ 30DD ÷ 30F3 ÷ 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] HIRAGANA LETTER RU (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LATIN CAPITAL LETTER U (AL) × [28.0] LATIN CAPITAL LETTER K (AL) ÷ [999.0] KATAKANA LETTER PO (ID) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [999.0] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 306F × 3001 ÷ 300C × 003D × 0072 × 0061 × 006E × 0064 × 0028 × 0029 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] EQUALS SIGN (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
+× 306F × 3001 ÷ 300C × 003D × 0072 × 0061 × 006E × 0064 × 0028 × 0029 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] EQUALS SIGN (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 3067 × 3001 ÷ 300C × 0021 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER DE (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 8A33 ÷ 300C × 3059 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8A33 (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER SU (ID) ÷ [0.3]
× 3066 ÷ 300C × BD24 ÷ C5B4 × 003F × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TE (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE BWASS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
@@ -7255,32 +7595,32 @@
× 306F ÷ 300C × 30A8 ÷ # × [0.3] HIRAGANA LETTER HA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER E (ID) ÷ [0.3]
× 4F8B × FF1A ÷ 300C × 3042 × 3000 ÷ 3044 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F8B (ID) × [21.03] FULLWIDTH COLON (NS) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER A (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER I (ID) ÷ [0.3]
× 304F × 3001 ÷ 300C × D3C9 ÷ C591 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER KU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE PYEONG (H3) ÷ [999.0] HANGUL SYLLABLE YANG (H3) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
-× 306B ÷ 300C × C81C ÷ BAA9 ÷ 0028 × 984C ÷ 540D × 0029 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE JE (H2) ÷ [999.0] HANGUL SYLLABLE MOG (H3) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-984C (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
+× 306B ÷ 300C × C81C ÷ BAA9 ÷ 0028 × 984C ÷ 540D × 0029 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE JE (H2) ÷ [999.0] HANGUL SYLLABLE MOG (H3) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-984C (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
× 5178 ÷ 300E × 30A6 × 30A3 ÷ 30AD ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5178 (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] KATAKANA LETTER U (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER KI (ID) ÷ [0.3]
× 3067 ÷ 300E × 82F1 ÷ 8A9E ÷ # × [0.3] HIRAGANA LETTER DE (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] CJK UNIFIED IDEOGRAPH-82F1 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8A9E (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 672C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 307E ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 308B × 3002 ÷ 0064 × 006F × 0067 × FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0020 ÷ 672C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0020 ÷ 307E ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0020 ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 308B × 3002 ÷ 0064 × 006F × 0067 ÷ FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
× 672C ÷ FF08 × 307E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 672C × 0020 ÷ 0028 × 0061 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 70B9 × 0020 ÷ 005B × 7DE8 ÷ 96C6 × 005D ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-70B9 (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP) × [14.0] CJK UNIFIED IDEOGRAPH-7DE8 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-96C6 (ID) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [0.3]
-× 0061 × 0028 × 0073 × 0029 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [0.3]
+× 672C × 0020 ÷ 0028 × 0061 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 70B9 × 0020 ÷ 005B × 7DE8 ÷ 96C6 × 005D ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-70B9 (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-7DE8 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-96C6 (ID) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
+× 0061 × 0028 × 0073 × 0029 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
× FF08 × 30B6 × 30FB ÷ 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER ZA (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-× 0070 × FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) × [30.01] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-× 0061 × 0062 × FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 5370 ÷ 672C × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0070 ÷ FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
+× 0061 × 0062 ÷ FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0028 × 5370 ÷ 672C × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 30B9 ÷ FF08 × 3044 ÷ # × [0.3] KATAKANA LETTER SU (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER I (ID) ÷ [0.3]
× 30C9 ÷ FF08 × 30DD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER PO (ID) ÷ [0.3]
-× 30C9 × 0020 ÷ 0028 × 8CEA ÷ # × [0.3] KATAKANA LETTER DO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-8CEA (ID) ÷ [0.3]
-× 0073 × 0029 × 300D ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
+× 30C9 × 0020 ÷ 0028 × 8CEA ÷ # × [0.3] KATAKANA LETTER DO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-8CEA (ID) ÷ [0.3]
+× 0073 × 0029 × 300D ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 0061 × FF09 × 300F ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] RIGHT WHITE CORNER BRACKET (CL) ÷ [0.3]
× 308B × 300D × FF09 ÷ 306F ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER HA (ID) ÷ [0.3]
× 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 0072 × 006B × 0029 × 300D ÷ 3082 ÷ # × [0.3] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER K (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
-× 30AF ÷ 0028 × 0061 × 0062 × 0020 ÷ 0063 × 0064 × 0029 × 300D ÷ 3082 ÷ # × [0.3] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER D (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ 0028 × 0065 × 0078 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) ÷ [0.3]
-× 30DE × 30FC ÷ 0028 × 006D × 0061 × 0029 × 300D ÷ 306A ÷ # × [0.3] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER NA (ID) ÷ [0.3]
+× 0072 × 006B × 0029 × 300D ÷ 3082 ÷ # × [0.3] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER K (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
+× 30AF ÷ 0028 × 0061 × 0062 × 0020 ÷ 0063 × 0064 × 0029 × 300D ÷ 3082 ÷ # × [0.3] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER D (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
+× 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ 0028 × 0065 × 0078 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) ÷ [0.3]
+× 30DE × 30FC ÷ 0028 × 006D × 0061 × 0029 × 300D ÷ 306A ÷ # × [0.3] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER NA (ID) ÷ [0.3]
× 30AC ÷ 30EF × 300D × 3002 ÷ 3053 ÷ # × [0.3] KATAKANA LETTER GA (ID) ÷ [999.0] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
× 30AF × 300D ÷ 307E ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 30EF × 300D × 3002 ÷ 3053 ÷ # × [0.3] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
@@ -7288,9 +7628,9 @@
× 30AF × 300D × 3001 ÷ 30AF ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 30C7 × 30A3 ÷ 30A2 ÷ FF08 × 0061 × 0062 × FF09 × 300F ÷ # × [0.3] KATAKANA LETTER DE (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER A (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] RIGHT WHITE CORNER BRACKET (CL) ÷ [0.3]
× CABD ÷ C774 ÷ C5D0 ÷ C694 × 003F × 300D ÷ 3068 ÷ 805E ÷ # × [0.3] HANGUL SYLLABLE JJOG (H3) ÷ [999.0] HANGUL SYLLABLE I (H2) ÷ [999.0] HANGUL SYLLABLE E (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-805E (ID) ÷ [0.3]
-× 540D × 0029 ÷ C740 × 0020 ÷ C54C ÷ C544 ÷ C694 × 003F × 300D ÷ 3068 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE EUN (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE AL (H3) ÷ [999.0] HANGUL SYLLABLE A (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 8CA8 × 0029 × 0020 ÷ 002D × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8CA8 (ID) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
-× 91CF × 0029 × 0020 × 301C × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-91CF (ID) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
+× 540D × 0029 ÷ C740 × 0020 ÷ C54C ÷ C544 ÷ C694 × 003F × 300D ÷ 3068 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE EUN (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE AL (H3) ÷ [999.0] HANGUL SYLLABLE A (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
+× 8CA8 × 0029 × 0020 ÷ 002D × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8CA8 (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
+× 91CF × 0029 × 0020 × 301C × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-91CF (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
× 30C9 ÷ 91CD × FF09 × 0020 × 301C × 0020 ÷ 529B × 30FB ÷ 91CD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-529B (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) ÷ [0.3]
× 0061 × 0062 × 0022 × FF08 × 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [19.01] QUOTATION MARK (QU) × [15.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 306F × 0020 ÷ 0022 × 0073 × 0022 × 0020 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER S (AL) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [0.3]
@@ -7302,17 +7642,17 @@
× 30F3 × 30FB ÷ 30D5 × 30A9 × 30C3 ÷ 30AF ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER HU (ID) × [21.03] KATAKANA LETTER SMALL O (CJ_NS) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 30A4 ÷ 30B8 × 30FC × 30FB ÷ 30C9 × 30C3 ÷ 30B0 × 3001 ÷ 548C ÷ # × [0.3] KATAKANA LETTER I (ID) ÷ [999.0] KATAKANA LETTER ZI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER DO (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER GU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-548C (ID) ÷ [0.3]
× 30E1 × 30FC ÷ 30B7 × 30E7 ÷ 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ # × [0.3] KATAKANA LETTER ME (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30AF ÷ 0028 × 0061 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 30F3 × 30FB ÷ 30AF ÷ 0028 × 0061 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 30B7 × 30E7 ÷ 30F3 × 30FB ÷ 30DE ÷ # × [0.3] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) ÷ [0.3]
× 672C × 003A × 0020 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [0.3]
× 672C × 003A × 0020 ÷ 30AF ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 51FA ÷ 5178 × 003A × 0020 ÷ 30D5 ÷ 30EA × 30FC ÷ 767E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-51FA (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5178 (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER HU (ID) ÷ [999.0] KATAKANA LETTER RI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-767E (ID) ÷ [0.3]
-× 5F8C × 2026 ÷ 306B ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5F8C (ID) × [22.03] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] HIRAGANA LETTER NI (ID) ÷ [0.3]
+× 5F8C × 2026 ÷ 306B ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5F8C (ID) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] HIRAGANA LETTER NI (ID) ÷ [0.3]
× 3057 × 3087 ÷ 3046 × 3002 × 3002 × 3002 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [21.03] HIRAGANA LETTER SMALL YO (CJ_NS) ÷ [999.0] HIRAGANA LETTER U (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
× 304D × 3001 × 0021 × 0021 × 3001 × 0021 × 0021 × 0021 ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER KI (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 306F × 3001 × 003F ÷ 3068 × 0021 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] QUESTION MARK (EX) ÷ [999.0] HIRAGANA LETTER TO (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 305F × 3001 × 2049 ÷ 0028 × 0021 × 003F × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] EXCLAMATION QUESTION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP) × [13.01] EXCLAMATION MARK (EX) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
-× 3084 × 3001 × 2048 ÷ 0028 × 003F × 0021 × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER YA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] QUESTION EXCLAMATION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP) × [13.01] QUESTION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
+× 305F × 3001 × 2049 ÷ 0028 × 0021 × 003F × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] EXCLAMATION QUESTION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.01] EXCLAMATION MARK (EX) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
+× 3084 × 3001 × 2048 ÷ 0028 × 003F × 0021 × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER YA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] QUESTION EXCLAMATION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.01] QUESTION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
× 305F × 0020 ÷ 203D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [7.01] SPACE (SP) ÷ [18.0] INTERROBANG (NS) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 305B × FF01 ÷ 0031 × 0030 × 0030 × 0025 ÷ 306E ÷ 5B8C ÷ # × [0.3] HIRAGANA LETTER SE (ID) × [13.01] FULLWIDTH EXCLAMATION MARK (EX) ÷ [999.0] DIGIT ONE (NU) × [25.03] DIGIT ZERO (NU) × [25.03] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5B8C (ID) ÷ [0.3]
× 0032 × 0033 ÷ 672C ÷ # × [0.3] DIGIT TWO (NU) × [25.03] DIGIT THREE (NU) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
@@ -7339,6 +7679,6 @@
× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
#
-# Lines: 7312
+# Lines: 7652
#
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
index 7c1c34afbd0..5ae1f881100 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
@@ -1,5 +1,5 @@
-# SentenceBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:28 GMT
+# SentenceBreakTest-13.0.0.txt
+# Date: 2019-11-20, 22:27:22 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
index facd8920ea8..3e85759b85a 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
@@ -1,5 +1,5 @@
-# WordBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:29 GMT
+# WordBreakTest-13.0.0.txt
+# Date: 2019-11-20, 22:27:23 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/README.md b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/README.md
index b5b9bd8e518..1deb4dfc32f 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/README.md
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/README.md
@@ -1,6 +1,6 @@
-<!--
+<!--
Copyright (C) 2016 and later: Unicode, Inc. and others.
-License & terms of use: http://www.unicode.org/copyright.html#License
+License & terms of use: http://www.unicode.org/copyright.html
Copyright (c) 2015-2016, International Business Machines Corporation and others. All Rights Reserved.
-->
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
index 425f0109bc8..10513005486 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
@@ -6,7 +6,14 @@
# file: line.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 40 for Unicode 11.0
+# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0,
+# with the following modification:
+#
+# Boundaries between hyphens and following letters are suppressed when
+# there is a boundary preceding the hyphen. See rule 20.9
+#
+# This corresponds to CSS line-break=strict (BCP47 -u-lb-strict).
+# It sets characters of class CJ to behave like NS.
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -61,6 +68,13 @@ XX = [:LineBreak = Unknown:];
ZW = [:LineBreak = ZWSpace:];
ZWJ = [:LineBreak = ZWJ:];
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -165,11 +179,7 @@ LB21.2: BB CM* [^CM CB];
LB21b: SY CM* HL;
-LB22.1: (AL | HL | CM) CM* IN; # The CM is from LB10, treat an unattached CM as AL.
-LB22.2: EX CM* IN;
-LB22.3: (ID | EB | EM) CM* IN;
-LB22.4: IN CM* IN;
-LB22.5: NU CM* IN;
+LB22: . CM* IN;
LB23.1: (AL | HL | CM) CM* NU;
LB23.2: NU CM* (AL | HL);
@@ -196,13 +206,13 @@ LB28: (AL | HL | CM)CM* (AL | HL);
LB29: IS CM* (AL | HL);
# LB30 is adjusted for unattached leading CM being treated as AL.
-LB30.1: (AL | CM | HL | NU) CM* OP;
-LB30.2: CP CM* (AL | HL | NU);
+LB30.1: (AL | CM | HL | NU) CM* OP30;
+LB30.2: CP30 CM* (AL | HL | NU);
# LB30a keep pairs of RI together.
-LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS ZWJ]?;
+LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b: EB CM* EM;
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
index 765953bb0c0..a4a541a7d69 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
@@ -6,7 +6,7 @@
# file: line.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 40 for Unicode 11.0
+# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -61,6 +61,20 @@ XX = [:LineBreak = Unknown:];
ZW = [:LineBreak = ZWSpace:];
ZWJ = [:LineBreak = ZWJ:];
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -165,11 +179,7 @@ LB21.2: BB CM* [^CM CB];
LB21b: SY CM* HL;
-LB22.1: (AL | HL | CM) CM* IN; # The CM is from LB10, treat an unattached CM as AL.
-LB22.2: EX CM* IN;
-LB22.3: (ID | EB | EM) CM* IN;
-LB22.4: IN CM* IN;
-LB22.5: NU CM* IN;
+LB22: . CM* IN;
LB23.1: (AL | HL | CM) CM* NU;
LB23.2: NU CM* (AL | HL);
@@ -196,13 +206,13 @@ LB28: (AL | HL | CM)CM* (AL | HL);
LB29: IS CM* (AL | HL);
# LB30 is adjusted for unattached leading CM being treated as AL.
-LB30.1: (AL | CM | HL | NU) CM* OP;
-LB30.2: CP CM* (AL | HL | NU);
+LB30.1: (AL | CM | HL | NU) CM* OP30;
+LB30.2: CP30 CM* (AL | HL | NU);
# LB30a keep pairs of RI together.
-LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS ZWJ]?;
+LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b: EB CM* EM;
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
index 86eb170c46e..904b9d13dfd 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
@@ -6,7 +6,7 @@
# file: line_loose.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 40 for Unicode 11.0
+# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -69,6 +69,13 @@ XX = [:LineBreak = Unknown:];
ZW = [:LineBreak = ZWSpace:];
ZWJ = [:LineBreak = ZWJ:];
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -173,11 +180,8 @@ LB21.2: BB CM* [^CM CB];
LB21b: SY CM* HL;
-LB22.1: (AL | HL | CM) CM* IN; # The CM is from LB10, treat an unattached CM as AL.
-LB22.2: EX CM* IN;
-LB22.3: (ID | EB | EM) CM* IN;
-# LB22.4: IN CM* IN; # delete this rule for CSS loose.
-LB22.5: NU CM* IN;
+
+LB22: [^IN] CM* IN; # For CSS Loose, allow breaks between adjacent ellipses characters.
LB23.1: (AL | HL | CM) CM* NU;
LB23.2: NU CM* (AL | HL);
@@ -204,13 +208,13 @@ LB28: (AL | HL | CM)CM* (AL | HL);
LB29: IS CM* (AL | HL);
# LB30 is adjusted for unattached leading CM being treated as AL.
-LB30.1: (AL | CM | HL | NU) CM* OP;
-LB30.2: CP CM* (AL | HL | NU);
+LB30.1: (AL | CM | HL | NU) CM* OP30;
+LB30.2: CP30 CM* (AL | HL | NU);
# LB30a keep pairs of RI together.
-LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS ZWJ]?;
+LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b: EB CM* EM;
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
index 049ecd017a3..8ad6a62d790 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
@@ -6,16 +6,15 @@
# file: line_loose_cj.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 40 for Unicode 11.0
+# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
#
# Line Breaking Rules
# Implement default line breaking as defined by
-# Unicode Standard Annex #14 Revision 34 for Unicode 8.0
-# http://www.unicode.org/reports/tr14/
-# tailored as noted in 2nd paragraph below..
+# Unicode Standard Annex #14
+# http://www.unicode.org/reports/tr14/, tailored as noted below.
#
# This tailors the line break behavior to correspond to CSS
# line-break=loose (BCP47 -u-lb-loose) as defined for Chinese & Japanese.
@@ -87,6 +86,13 @@ XX = [:LineBreak = Unknown:];
ZW = [:LineBreak = ZWSpace:];
ZWJ = [:LineBreak = ZWJ:];
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -196,11 +202,8 @@ LB21.2: BB CM* [^CM CB];
LB21b: SY CM* HL;
-LB22.1: (AL | HL | CM) CM* IN; # The CM is from LB10, treat an unattached CM as AL.
-LB22.2: EX CM* IN;
-LB22.3: (ID | EB | EM) CM* IN;
-# LB22.4: IN CM* IN; # delete this rule for CSS loose.
-LB22.5: NU CM* IN;
+
+LB22: [^IN] CM* IN; # For CSS Loose, allow breaks between adjacent ellipses characters.
LB23.1: (AL | HL | CM) CM* NU;
LB23.2: NU CM* (AL | HL);
@@ -227,13 +230,13 @@ LB28: (AL | HL | CM)CM* (AL | HL);
LB29: IS CM* (AL | HL);
# LB30 is adjusted for unattached leading CM being treated as AL.
-LB30.1: (AL | CM | HL | NU) CM* OP;
-LB30.2: CP CM* (AL | HL | NU);
+LB30.1: (AL | CM | HL | NU) CM* OP30;
+LB30.2: CP30 CM* (AL | HL | NU);
# LB30a keep pairs of RI together.
-LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS ZWJ]?;
+LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b: EB CM* EM;
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
index 2cf6e7c1158..db7ba4209a5 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
@@ -6,20 +6,15 @@
# file: line_normal.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 40 for Unicode 11.0
+# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
#
# Line Breaking Rules
# Implement default line breaking as defined by
-# Unicode Standard Annex #14 Revision 34 for Unicode 8.0
-# http://www.unicode.org/reports/tr14/
-# tailored as noted in 2nd paragraph below.
-#
-# TODO: Rule LB 8 remains as it was in Unicode 5.2
-# This is only because of a limitation of ICU break engine implementation,
-# not because the older behavior is desirable.
+# Unicode Standard Annex #14
+# http://www.unicode.org/reports/tr14/, tailored as noted below.
#
# This tailors the line break behavior to correspond to CSS
# line-break=normal (BCP47 -u-lb-normal) as defined for languages other than
@@ -75,6 +70,13 @@ XX = [:LineBreak = Unknown:];
ZW = [:LineBreak = ZWSpace:];
ZWJ = [:LineBreak = ZWJ:];
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -179,11 +181,7 @@ LB21.2: BB CM* [^CM CB];
LB21b: SY CM* HL;
-LB22.1: (AL | HL | CM) CM* IN; # The CM is from LB10, treat an unattached CM as AL.
-LB22.2: EX CM* IN;
-LB22.3: (ID | EB | EM) CM* IN;
-LB22.4: IN CM* IN;
-LB22.5: NU CM* IN;
+LB22: . CM* IN;
LB23.1: (AL | HL | CM) CM* NU;
LB23.2: NU CM* (AL | HL);
@@ -210,13 +208,13 @@ LB28: (AL | HL | CM)CM* (AL | HL);
LB29: IS CM* (AL | HL);
# LB30 is adjusted for unattached leading CM being treated as AL.
-LB30.1: (AL | CM | HL | NU) CM* OP;
-LB30.2: CP CM* (AL | HL | NU);
+LB30.1: (AL | CM | HL | NU) CM* OP30;
+LB30.2: CP30 CM* (AL | HL | NU);
# LB30a keep pairs of RI together.
-LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS ZWJ]?;
+LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b: EB CM* EM;
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
index 57139f4b231..2c47c7fcba8 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
@@ -6,20 +6,15 @@
# file: line_normal_cj.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 40 for Unicode 11.0
+# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
#
# Line Breaking Rules
# Implement default line breaking as defined by
-# Unicode Standard Annex #14 Revision 34 for Unicode 8.0
-# http://www.unicode.org/reports/tr14/
-# tailored as noted in 2nd paragraph below.
-#
-# TODO: Rule LB 8 remains as it was in Unicode 5.2
-# This is only because of a limitation of ICU break engine implementation,
-# not because the older behavior is desirable.
+# Unicode Standard Annex #14
+# http://www.unicode.org/reports/tr14/, tailored as noted below.
#
# This tailors the line break behavior to correspond to CSS
# line-break=normal (BCP47 -u-lb-normal) as defined for Chinese & Japanese.
@@ -78,6 +73,13 @@ XX = [:LineBreak = Unknown:];
ZW = [:LineBreak = ZWSpace:];
ZWJ = [:LineBreak = ZWJ:];
+# OP30 and CP30 are variants of OP and CP that appear in rule LB30 from UAX 14.
+# Limitations of this monkey test rule parser require that these definitions be pulled out
+# rather than appearing in-line in LB 30.
+
+OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -188,11 +190,7 @@ LB21.2: BB CM* [^CM CB];
LB21b: SY CM* HL;
-LB22.1: (AL | HL | CM) CM* IN; # The CM is from LB10, treat an unattached CM as AL.
-LB22.2: EX CM* IN;
-LB22.3: (ID | EB | EM) CM* IN;
-LB22.4: IN CM* IN;
-LB22.5: NU CM* IN;
+LB22: . CM* IN;
LB23.1: (AL | HL | CM) CM* NU;
LB23.2: NU CM* (AL | HL);
@@ -218,13 +216,13 @@ LB28: (AL | HL | CM)CM* (AL | HL);
LB29: IS CM* (AL | HL);
# LB30 is adjusted for unattached leading CM being treated as AL.
-LB30.1: (AL | CM | HL | NU) CM* OP;
-LB30.2: CP CM* (AL | HL | NU);
+LB30.1: (AL | CM | HL | NU) CM* OP30;
+LB30.2: CP30 CM* (AL | HL | NU);
# LB30a keep pairs of RI together.
-LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS CM];
-LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS ZWJ]?;
+LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
+LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b: EB CM* EM;
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/sentence.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/sentence.txt
index ed0918f3845..5f6843c615e 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/sentence.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/sentence.txt
@@ -1,6 +1,6 @@
#
# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
# Copyright (c) 2016, International Business Machines Corporation and others. All Rights Reserved.
# file: sentence.txt
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt
index 9b3e527ee72..5ace30266c8 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt
@@ -14,11 +14,12 @@
type = word; # one of grapheme | word | line | sentence
locale = en;
+Han = [:Han:];
CR = [\p{Word_Break = CR}];
LF = [\p{Word_Break = LF}];
Newline = [\p{Word_Break = Newline}];
-Extend = [\p{Word_Break = Extend}];
+Extend = [\p{Word_Break = Extend}-Han];
ZWJ = [\p{Word_Break = ZWJ}];
Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
Format = [\p{Word_Break = Format}];
@@ -30,14 +31,13 @@ Double_Quote = [\p{Word_Break = Double_Quote}];
MidNumLet = [\p{Word_Break = MidNumLet}];
MidLetter = [\p{Word_Break = MidLetter}];
MidNum = [\p{Word_Break = MidNum}];
-Numeric = [[\p{Word_Break = Numeric}] [\uFF10-\uff19]]; # Patch for ICU-12079;
+Numeric = [\p{Word_Break = Numeric}];
ExtendNumLet = [\p{Word_Break = ExtendNumLet}];
WSegSpace = [\p{Word_Break = WSegSpace}];
Extended_Pict = [:ExtPict:];
#define dictionary, with the effect being that those characters don't appear in test data.
-Han = [:Han:];
Hiragana = [:Hiragana:];
Control = [\p{Grapheme_Cluster_Break = Control}];
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt
index 04bcb321ae9..7fdc1a1ee07 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt
@@ -13,11 +13,12 @@
type = word; # one of grapheme | word | line | sentence
locale = en_US_POSIX;
+Han = [:Han:];
CR = [\p{Word_Break = CR}];
LF = [\p{Word_Break = LF}];
Newline = [\p{Word_Break = Newline}];
-Extend = [\p{Word_Break = Extend}];
+Extend = [\p{Word_Break = Extend}-Han];
ZWJ = [\p{Word_Break = ZWJ}];
Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
Format = [\p{Word_Break = Format}];
@@ -29,14 +30,13 @@ Double_Quote = [\p{Word_Break = Double_Quote}];
MidNumLet = [\p{Word_Break = MidNumLet} - [.]];
MidLetter = [\p{Word_Break = MidLetter} - [\:]];
MidNum = [\p{Word_Break = MidNum} [.]];
-Numeric = [[\p{Word_Break = Numeric}] [\uFF10-\uff19]]; # Patch for ICU-12079;
+Numeric = [\p{Word_Break = Numeric}];
ExtendNumLet = [\p{Word_Break = ExtendNumLet}];
WSegSpace = [\p{Word_Break = WSegSpace}];
Extended_Pict = [:ExtPict:];
#define dictionary, with the effect being that those characters don't appear in test data.
-Han = [:Han:];
Hiragana = [:Hiragana:];
Control = [\p{Grapheme_Cluster_Break = Control}];
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/calendar.txt b/Build/source/libs/icu/icu-src/source/test/testdata/calendar.txt
index 83b9301419b..f4ebc35c86c 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/calendar.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/calendar.txt
@@ -438,7 +438,7 @@ calendar:table(nofallback) {
"MILLIS=-180799750799999",
"add",
"YEAR=100000", // year + 100000
- "MILLIS=2974930006022001",
+ "MILLIS=2974932601622001",
},
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/_readme.txt b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/_readme.txt
new file mode 100644
index 00000000000..323c53fec1b
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/_readme.txt
@@ -0,0 +1,6 @@
+# Test data for units: conversions and preferences
+# Copyright © 1991-2020 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/copyright.html
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
+# The format may vary between folders or files.
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt
new file mode 100644
index 00000000000..b0dabe0539f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt
@@ -0,0 +1,454 @@
+# Test data for unit preferences
+# Copyright © 1991-2020 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/copyright.html
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
+#
+# Format:
+# Quantity; Usage; Region; Input (r); Input (d); Input Unit; Output (r); Output (d); Output Unit
+#
+# Use: Convert the Input amount & unit according to the Usage and Region.
+# The result should match the Output amount and unit.
+# Both rational (r) and double64 (d) forms of the input and output amounts are supplied so that implementations
+# have two options for testing based on the precision in their implementations. For example:
+# 3429 / 12500; 0.27432; meter;
+# The Output amount and Unit are repeated for mixed units. In such a case, only the smallest unit will have
+# both a rational and decimal amount; the others will have a single integer value, such as:
+# length; person-height; CA; 3429 / 12500; 0.27432; meter; 2; foot; 54 / 5; 10.8; inch
+# The input and output units are unit identifers; in particular, the output does not have further processing:
+# • no localization
+# • no adjustment for pluralization
+# • no formatted with the skeleton
+# • no suppression of zero values (for secondary -and- units such as pound in stone-and-pound)
+#
+# Generation: Set GENERATE_TESTS in TestUnits.java, and look at TestUnitPreferences results.
+
+area; default; 001; 1100000; 1100000.0; square-meter; 11 / 10; 1.1; square-kilometer
+area; default; 001; 1000000; 1000000.0; square-meter; 1; 1.0; square-kilometer
+area; default; 001; 900000; 900000.0; square-meter; 90; 90.0; hectare
+area; default; 001; 10000; 10000.0; square-meter; 1; 1.0; hectare
+area; default; 001; 9000; 9000.0; square-meter; 9000; 9000.0; square-meter
+area; default; 001; 1; 1.0; square-meter; 1; 1.0; square-meter
+area; default; 001; 9 / 10; 0.9; square-meter; 9000; 9000.0; square-centimeter
+area; default; 001; 1 / 10000; 1.0E-4; square-meter; 1; 1.0; square-centimeter
+area; default; 001; 9 / 100000; 9.0E-5; square-meter; 9 / 10; 0.9; square-centimeter
+
+area; default; GB; 222577103232 / 78125; 2848986.9213696; square-meter; 11 / 10; 1.1; square-mile
+area; default; GB; 40468564224 / 15625; 2589988.110336; square-meter; 1; 1.0; square-mile
+area; default; GB; 182108539008 / 78125; 2330989.2993024; square-meter; 576; 576.0; acre
+area; default; GB; 316160658 / 78125; 4046.8564224; square-meter; 1; 1.0; acre
+area; default; GB; 1422722961 / 390625; 3642.17078016; square-meter; 39204; 39204.0; square-foot
+area; default; GB; 145161 / 1562500; 0.09290304; square-meter; 1; 1.0; square-foot
+area; default; GB; 1306449 / 15625000; 0.083612736; square-meter; 648 / 5; 129.6; square-inch
+area; default; GB; 16129 / 25000000; 6.4516E-4; square-meter; 1; 1.0; square-inch
+area; default; GB; 145161 / 250000000; 5.80644E-4; square-meter; 9 / 10; 0.9; square-inch
+
+area; geograph; 001; 1100000; 1100000.0; square-meter; 11 / 10; 1.1; square-kilometer
+area; geograph; 001; 1000000; 1000000.0; square-meter; 1; 1.0; square-kilometer
+area; geograph; 001; 900000; 900000.0; square-meter; 9 / 10; 0.9; square-kilometer
+
+area; geograph; GB; 222577103232 / 78125; 2848986.9213696; square-meter; 11 / 10; 1.1; square-mile
+area; geograph; GB; 40468564224 / 15625; 2589988.110336; square-meter; 1; 1.0; square-mile
+area; geograph; GB; 182108539008 / 78125; 2330989.2993024; square-meter; 9 / 10; 0.9; square-mile
+
+area; land; 001; 11000; 11000.0; square-meter; 11 / 10; 1.1; hectare
+area; land; 001; 10000; 10000.0; square-meter; 1; 1.0; hectare
+area; land; 001; 9000; 9000.0; square-meter; 9 / 10; 0.9; hectare
+
+area; land; GB; 1738883619 / 390625; 4451.54206464; square-meter; 11 / 10; 1.1; acre
+area; land; GB; 316160658 / 78125; 4046.8564224; square-meter; 1; 1.0; acre
+area; land; GB; 1422722961 / 390625; 3642.17078016; square-meter; 9 / 10; 0.9; acre
+
+concentration; blood-glucose; AG; 662435483600000000000000; 6.624354836E23; item-per-cubic-meter; 11 / 10; 1.1; millimole-per-liter
+concentration; blood-glucose; AG; 602214076000000000000000; 6.02214076E23; item-per-cubic-meter; 1; 1.0; millimole-per-liter
+concentration; blood-glucose; AG; 541992668400000000000000; 5.419926684E23; item-per-cubic-meter; 9 / 10; 0.9; millimole-per-liter
+
+concentration; default; 001; 11 / 10; 1.1; item-per-cubic-meter; 11 / 10; 1.1; item-per-cubic-meter
+concentration; default; 001; 1; 1.0; item-per-cubic-meter; 1; 1.0; item-per-cubic-meter
+concentration; default; 001; 9 / 10; 0.9; item-per-cubic-meter; 9 / 10; 0.9; item-per-cubic-meter
+
+consumption; default; 001; 11 / 1000000000; 1.1E-8; cubic-meter-per-meter; 11 / 10; 1.1; liter-per-100-kilometer
+consumption; default; 001; 1 / 100000000; 1.0E-8; cubic-meter-per-meter; 1; 1.0; liter-per-100-kilometer
+consumption; default; 001; 9 / 1000000000; 9.0E-9; cubic-meter-per-meter; 9 / 10; 0.9; liter-per-100-kilometer
+
+consumption; vehicle-fuel; 001; 11 / 1000000000; 1.1E-8; cubic-meter-per-meter; 11 / 10; 1.1; liter-per-100-kilometer
+consumption; vehicle-fuel; 001; 1 / 100000000; 1.0E-8; cubic-meter-per-meter; 1; 1.0; liter-per-100-kilometer
+consumption; vehicle-fuel; 001; 9 / 1000000000; 9.0E-9; cubic-meter-per-meter; 9 / 10; 0.9; liter-per-100-kilometer
+
+consumption; vehicle-fuel; BR; 11 / 10000000; 1.1E-6; cubic-meter-per-meter; 11 / 10; 1.1; liter-per-kilometer
+consumption; vehicle-fuel; BR; 1 / 1000000; 1.0E-6; cubic-meter-per-meter; 1; 1.0; liter-per-kilometer
+consumption; vehicle-fuel; BR; 9 / 10000000; 9.0E-7; cubic-meter-per-meter; 9 / 10; 0.9; liter-per-kilometer
+
+consumption-inverse; default; 001; 110000000; 1.1E8; meter-per-cubic-meter; 11 / 10; 1.1; kilometer-per-centiliter
+consumption-inverse; default; 001; 100000000; 1.0E8; meter-per-cubic-meter; 1; 1.0; kilometer-per-centiliter
+consumption-inverse; default; 001; 90000000; 9.0E7; meter-per-cubic-meter; 9 / 10; 0.9; kilometer-per-centiliter
+
+consumption-inverse; vehicle-fuel; 001; 110000000; 1.1E8; meter-per-cubic-meter; 11 / 10; 1.1; kilometer-per-centiliter
+consumption-inverse; vehicle-fuel; 001; 100000000; 1.0E8; meter-per-cubic-meter; 1; 1.0; kilometer-per-centiliter
+consumption-inverse; vehicle-fuel; 001; 90000000; 9.0E7; meter-per-cubic-meter; 9 / 10; 0.9; kilometer-per-centiliter
+
+consumption-inverse; vehicle-fuel; US; 52800000000 / 112903; 467658.0781732992; meter-per-cubic-meter; 11 / 10; 1.1; mile-per-gallon
+consumption-inverse; vehicle-fuel; US; 48000000000 / 112903; 425143.707430272; meter-per-cubic-meter; 1; 1.0; mile-per-gallon
+consumption-inverse; vehicle-fuel; US; 43200000000 / 112903; 382629.3366872448; meter-per-cubic-meter; 9 / 10; 0.9; mile-per-gallon
+
+consumption-inverse; vehicle-fuel; CA; 177027840000 / 454609; 389406.8089281118; meter-per-cubic-meter; 11 / 10; 1.1; mile-per-gallon-imperial
+consumption-inverse; vehicle-fuel; CA; 160934400000 / 454609; 354006.1899346471; meter-per-cubic-meter; 1; 1.0; mile-per-gallon-imperial
+consumption-inverse; vehicle-fuel; CA; 144840960000 / 454609; 318605.5709411824; meter-per-cubic-meter; 9 / 10; 0.9; mile-per-gallon-imperial
+
+duration; default; 001; 95040; 95040.0; second; 11 / 10; 1.1; day
+duration; default; 001; 86400; 86400.0; second; 1; 1.0; day
+duration; default; 001; 77760; 77760.0; second; 108 / 5; 21.6; hour
+duration; default; 001; 3600; 3600.0; second; 1; 1.0; hour
+duration; default; 001; 3240; 3240.0; second; 54; 54.0; minute
+duration; default; 001; 60; 60.0; second; 1; 1.0; minute
+duration; default; 001; 54; 54.0; second; 54; 54.0; second
+duration; default; 001; 1; 1.0; second; 1; 1.0; second
+duration; default; 001; 9 / 10; 0.9; second; 900; 900.0; millisecond
+duration; default; 001; 1 / 1000; 0.001; second; 1; 1.0; millisecond
+duration; default; 001; 9 / 10000; 9.0E-4; second; 900; 900.0; microsecond
+duration; default; 001; 1 / 1000000; 1.0E-6; second; 1; 1.0; microsecond
+duration; default; 001; 9 / 10000000; 9.0E-7; second; 900; 900.0; nanosecond
+duration; default; 001; 1 / 1000000000; 1.0E-9; second; 1; 1.0; nanosecond
+duration; default; 001; 9 / 10000000000; 9.0E-10; second; 9 / 10; 0.9; nanosecond
+
+duration; media; 001; 66; 66.0; second; 1; minute; 6; 6.0; second
+duration; media; 001; 60; 60.0; second; 1; minute; 0; 0.0; second
+duration; media; 001; 54; 54.0; second; 54; 54.0; second
+duration; media; 001; 1; 1.0; second; 1; 1.0; second
+duration; media; 001; 9 / 10; 0.9; second; 9 / 10; 0.9; second
+
+energy; default; 001; 3960000; 3960000.0; kilogram-square-meter-per-square-second; 11 / 10; 1.1; kilowatt-hour
+energy; default; 001; 3600000; 3600000.0; kilogram-square-meter-per-square-second; 1; 1.0; kilowatt-hour
+energy; default; 001; 3240000; 3240000.0; kilogram-square-meter-per-square-second; 9 / 10; 0.9; kilowatt-hour
+
+energy; food; US; 23012 / 5; 4602.4; kilogram-square-meter-per-square-second; 11 / 10; 1.1; foodcalorie
+energy; food; US; 4184; 4184.0; kilogram-square-meter-per-square-second; 1; 1.0; foodcalorie
+energy; food; US; 18828 / 5; 3765.6; kilogram-square-meter-per-square-second; 9 / 10; 0.9; foodcalorie
+
+energy; food; 001; 23012 / 5; 4602.4; kilogram-square-meter-per-square-second; 11 / 10; 1.1; kilocalorie
+energy; food; 001; 4184; 4184.0; kilogram-square-meter-per-square-second; 1; 1.0; kilocalorie
+energy; food; 001; 18828 / 5; 3765.6; kilogram-square-meter-per-square-second; 9 / 10; 0.9; kilocalorie
+
+length; default; 001; 1100; 1100.0; meter; 11 / 10; 1.1; kilometer
+length; default; 001; 1000; 1000.0; meter; 1; 1.0; kilometer
+length; default; 001; 900; 900.0; meter; 900; 900.0; meter
+length; default; 001; 1; 1.0; meter; 1; 1.0; meter
+length; default; 001; 9 / 10; 0.9; meter; 90; 90.0; centimeter
+length; default; 001; 1 / 100; 0.01; meter; 1; 1.0; centimeter
+length; default; 001; 9 / 1000; 0.009; meter; 9 / 10; 0.9; centimeter
+
+length; default; GB; 1106424 / 625; 1770.2784; meter; 11 / 10; 1.1; mile
+length; default; GB; 201168 / 125; 1609.344; meter; 1; 1.0; mile
+length; default; GB; 905256 / 625; 1448.4096; meter; 4752; 4752.0; foot
+length; default; GB; 381 / 1250; 0.3048; meter; 1; 1.0; foot
+length; default; GB; 3429 / 12500; 0.27432; meter; 54 / 5; 10.8; inch
+length; default; GB; 127 / 5000; 0.0254; meter; 1; 1.0; inch
+length; default; GB; 1143 / 50000; 0.02286; meter; 9 / 10; 0.9; inch
+
+length; focal-length; 001; 11 / 10000; 0.0011; meter; 11 / 10; 1.1; millimeter
+length; focal-length; 001; 1 / 1000; 0.001; meter; 1; 1.0; millimeter
+length; focal-length; 001; 9 / 10000; 9.0E-4; meter; 9 / 10; 0.9; millimeter
+
+length; person; 001; 11 / 1000; 0.011; meter; 11 / 10; 1.1; centimeter
+length; person; 001; 1 / 100; 0.01; meter; 1; 1.0; centimeter
+length; person; 001; 9 / 1000; 0.009; meter; 9 / 10; 0.9; centimeter
+
+length; person; CA; 1397 / 50000; 0.02794; meter; 11 / 10; 1.1; inch
+length; person; CA; 127 / 5000; 0.0254; meter; 1; 1.0; inch
+length; person; CA; 1143 / 50000; 0.02286; meter; 9 / 10; 0.9; inch
+
+length; person-height; 001; 11 / 1000; 0.011; meter; 11 / 10; 1.1; centimeter
+length; person-height; 001; 1 / 100; 0.01; meter; 1; 1.0; centimeter
+length; person-height; 001; 9 / 1000; 0.009; meter; 9 / 10; 0.9; centimeter
+
+length; person-height; CA; 11811 / 12500; 0.94488; meter; 3; foot; 6 / 5; 1.2; inch
+length; person-height; CA; 1143 / 1250; 0.9144; meter; 3; foot; 0; 0.0; inch
+length; person-height; CA; 11049 / 12500; 0.88392; meter; 174 / 5; 34.8; inch
+length; person-height; CA; 127 / 5000; 0.0254; meter; 1; 1.0; inch
+length; person-height; CA; 1143 / 50000; 0.02286; meter; 9 / 10; 0.9; inch
+
+length; person-height; AT; 11 / 10; 1.1; meter; 1; meter; 10; 10.0; centimeter
+length; person-height; AT; 1; 1.0; meter; 1; meter; 0; 0.0; centimeter
+length; person-height; AT; 9 / 10; 0.9; meter; 0; meter; 90; 90.0; centimeter
+
+length; rainfall; BR; 11 / 1000; 0.011; meter; 11 / 10; 1.1; centimeter
+length; rainfall; BR; 1 / 100; 0.01; meter; 1; 1.0; centimeter
+length; rainfall; BR; 9 / 1000; 0.009; meter; 9 / 10; 0.9; centimeter
+
+length; rainfall; US; 1397 / 50000; 0.02794; meter; 11 / 10; 1.1; inch
+length; rainfall; US; 127 / 5000; 0.0254; meter; 1; 1.0; inch
+length; rainfall; US; 1143 / 50000; 0.02286; meter; 9 / 10; 0.9; inch
+
+length; rainfall; 001; 11 / 10000; 0.0011; meter; 11 / 10; 1.1; millimeter
+length; rainfall; 001; 1 / 1000; 0.001; meter; 1; 1.0; millimeter
+length; rainfall; 001; 9 / 10000; 9.0E-4; meter; 9 / 10; 0.9; millimeter
+
+length; road; 001; 1000; 1000.0; meter; 1; 1.0; kilometer
+length; road; 001; 900; 900.0; meter; 9 / 10; 0.9; kilometer
+length; road; 001; 800; 800.0; meter; 800; 800.0; meter
+length; road; 001; 300; 300.0; meter; 300; 300.0; meter
+length; road; 001; 2999 / 10; 299.9; meter; 2999 / 10; 299.9; meter
+length; road; 001; 1; 1.0; meter; 1; 1.0; meter
+length; road; 001; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
+
+length; road; US; 603504 / 625; 965.6064; meter; 3 / 5; 0.6; mile
+length; road; US; 100584 / 125; 804.672; meter; 1 / 2; 0.5; mile
+length; road; US; 402336 / 625; 643.7376; meter; 2112; 2112.0; foot
+length; road; US; 762 / 25; 30.48; meter; 100; 100.0; foot
+length; road; US; 380619 / 12500; 30.44952; meter; 999 / 10; 99.9; foot
+length; road; US; 381 / 1250; 0.3048; meter; 1; 1.0; foot
+length; road; US; 3429 / 12500; 0.27432; meter; 9 / 10; 0.9; foot
+
+length; road; GB; 603504 / 625; 965.6064; meter; 3 / 5; 0.6; mile
+length; road; GB; 100584 / 125; 804.672; meter; 1 / 2; 0.5; mile
+length; road; GB; 402336 / 625; 643.7376; meter; 704; 704.0; yard
+length; road; GB; 2286 / 25; 91.44; meter; 100; 100.0; yard
+length; road; GB; 1141857 / 12500; 91.34856; meter; 999 / 10; 99.9; yard
+length; road; GB; 1143 / 1250; 0.9144; meter; 1; 1.0; yard
+length; road; GB; 10287 / 12500; 0.82296; meter; 9 / 10; 0.9; yard
+
+length; road; SE; 11000; 11000.0; meter; 11 / 10; 1.1; mile-scandinavian
+length; road; SE; 10000; 10000.0; meter; 1; 1.0; mile-scandinavian
+length; road; SE; 9000; 9000.0; meter; 9; 9.0; kilometer
+length; road; SE; 1000; 1000.0; meter; 1; 1.0; kilometer
+length; road; SE; 900; 900.0; meter; 900; 900.0; meter
+length; road; SE; 300; 300.0; meter; 300; 300.0; meter
+length; road; SE; 2999 / 10; 299.9; meter; 2999 / 10; 299.9; meter
+length; road; SE; 1; 1.0; meter; 1; 1.0; meter
+length; road; SE; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
+
+length; snowfall; 001; 11 / 1000; 0.011; meter; 11 / 10; 1.1; centimeter
+length; snowfall; 001; 1 / 100; 0.01; meter; 1; 1.0; centimeter
+length; snowfall; 001; 9 / 1000; 0.009; meter; 9 / 10; 0.9; centimeter
+
+length; snowfall; US; 1397 / 50000; 0.02794; meter; 11 / 10; 1.1; inch
+length; snowfall; US; 127 / 5000; 0.0254; meter; 1; 1.0; inch
+length; snowfall; US; 1143 / 50000; 0.02286; meter; 9 / 10; 0.9; inch
+
+length; vehicle; GB; 4191 / 12500; 0.33528; meter; 1; foot; 6 / 5; 1.2; inch
+length; vehicle; GB; 381 / 1250; 0.3048; meter; 1; foot; 0; 0.0; inch
+length; vehicle; GB; 3429 / 12500; 0.27432; meter; 0; foot; 54 / 5; 10.8; inch
+
+length; vehicle; 001; 11 / 10; 1.1; meter; 11 / 10; 1.1; meter
+length; vehicle; 001; 1; 1.0; meter; 1; 1.0; meter
+length; vehicle; 001; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
+
+length; vehicle; MX; 11 / 10; 1.1; meter; 1; meter; 10; 10.0; centimeter
+length; vehicle; MX; 1; 1.0; meter; 1; meter; 0; 0.0; centimeter
+length; vehicle; MX; 9 / 10; 0.9; meter; 0; meter; 90; 90.0; centimeter
+
+length; visiblty; 001; 200; 200.0; meter; 1 / 5; 0.2; kilometer
+length; visiblty; 001; 100; 100.0; meter; 1 / 10; 0.1; kilometer
+length; visiblty; 001; 1; 1.0; meter; 1; 1.0; meter
+length; visiblty; 001; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
+length; visiblty; 001; 0; 0.0; meter; 0; 0.0; meter
+
+length; visiblty; DE; 11 / 10; 1.1; meter; 11 / 10; 1.1; meter
+length; visiblty; DE; 1; 1.0; meter; 1; 1.0; meter
+length; visiblty; DE; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
+
+length; visiblty; GB; 1106424 / 625; 1770.2784; meter; 11 / 10; 1.1; mile
+length; visiblty; GB; 201168 / 125; 1609.344; meter; 1; 1.0; mile
+length; visiblty; GB; 905256 / 625; 1448.4096; meter; 4752; 4752.0; foot
+length; visiblty; GB; 381 / 1250; 0.3048; meter; 1; 1.0; foot
+length; visiblty; GB; 3429 / 12500; 0.27432; meter; 9 / 10; 0.9; foot
+
+mass; default; 001; 1100; 1100.0; kilogram; 11 / 10; 1.1; metric-ton
+mass; default; 001; 1000; 1000.0; kilogram; 1; 1.0; metric-ton
+mass; default; 001; 900; 900.0; kilogram; 900; 900.0; kilogram
+mass; default; 001; 1; 1.0; kilogram; 1; 1.0; kilogram
+mass; default; 001; 9 / 10; 0.9; kilogram; 900; 900.0; gram
+mass; default; 001; 1 / 1000; 0.001; kilogram; 1; 1.0; gram
+mass; default; 001; 9 / 10000; 9.0E-4; kilogram; 900; 900.0; milligram
+mass; default; 001; 1 / 1000000; 1.0E-6; kilogram; 1; 1.0; milligram
+mass; default; 001; 9 / 10000000; 9.0E-7; kilogram; 900; 900.0; microgram
+mass; default; 001; 1 / 1000000000; 1.0E-9; kilogram; 1; 1.0; microgram
+mass; default; 001; 9 / 10000000000; 9.0E-10; kilogram; 9 / 10; 0.9; microgram
+
+mass; default; GB; 498951607 / 500000; 997.903214; kilogram; 11 / 10; 1.1; ton
+mass; default; GB; 45359237 / 50000; 907.18474; kilogram; 1; 1.0; ton
+mass; default; GB; 408233133 / 500000; 816.466266; kilogram; 1800; 1800.0; pound
+mass; default; GB; 45359237 / 100000000; 0.45359237; kilogram; 1; 1.0; pound
+mass; default; GB; 408233133 / 1000000000; 0.408233133; kilogram; 72 / 5; 14.4; ounce
+mass; default; GB; 45359237 / 1600000000; 0.028349523125; kilogram; 1; 1.0; ounce
+mass; default; GB; 408233133 / 16000000000; 0.0255145708125; kilogram; 9 / 10; 0.9; ounce
+
+mass; person; 001; 11 / 10; 1.1; kilogram; 11 / 10; 1.1; kilogram
+mass; person; 001; 1; 1.0; kilogram; 1; 1.0; kilogram
+mass; person; 001; 9 / 10; 0.9; kilogram; 900; 900.0; gram
+mass; person; 001; 1 / 1000; 0.001; kilogram; 1; 1.0; gram
+mass; person; 001; 9 / 10000; 9.0E-4; kilogram; 9 / 10; 0.9; gram
+
+mass; person; DZ; 11 / 10; 1.1; kilogram; 1; kilogram; 100; 100.0; gram
+mass; person; DZ; 1; 1.0; kilogram; 1; kilogram; 0; 0.0; gram
+mass; person; DZ; 9 / 10; 0.9; kilogram; 0; kilogram; 900; 900.0; gram
+
+mass; person; US; 498951607 / 1000000000; 0.498951607; kilogram; 11 / 10; 1.1; pound
+mass; person; US; 45359237 / 100000000; 0.45359237; kilogram; 1; 1.0; pound
+mass; person; US; 408233133 / 1000000000; 0.408233133; kilogram; 0; pound; 72 / 5; 14.4; ounce
+
+mass; person; GB; 3492661249 / 500000000; 6.985322498; kilogram; 1; stone; 7 / 5; 1.4; pound
+mass; person; GB; 317514659 / 50000000; 6.35029318; kilogram; 1; stone; 0; 0.0; pound
+mass; person; GB; 2857631931 / 500000000; 5.715263862; kilogram; 12; pound; 48 / 5; 9.6; ounce
+mass; person; GB; 45359237 / 100000000; 0.45359237; kilogram; 1; pound; 0; 0.0; ounce
+mass; person; GB; 408233133 / 1000000000; 0.408233133; kilogram; 0; pound; 72 / 5; 14.4; ounce
+
+mass; person; HK; 498951607 / 1000000000; 0.498951607; kilogram; 1; pound; 8 / 5; 1.6; ounce
+mass; person; HK; 45359237 / 100000000; 0.45359237; kilogram; 1; pound; 0; 0.0; ounce
+mass; person; HK; 408233133 / 1000000000; 0.408233133; kilogram; 0; pound; 72 / 5; 14.4; ounce
+
+mass-density; blood-glucose; 001; 11 / 1000; 0.011; kilogram-per-cubic-meter; 11 / 10; 1.1; milligram-per-deciliter
+mass-density; blood-glucose; 001; 1 / 100; 0.01; kilogram-per-cubic-meter; 1; 1.0; milligram-per-deciliter
+mass-density; blood-glucose; 001; 9 / 1000; 0.009; kilogram-per-cubic-meter; 9 / 10; 0.9; milligram-per-deciliter
+
+mass-density; default; 001; 11 / 10; 1.1; kilogram-per-cubic-meter; 11 / 10; 1.1; kilogram-per-cubic-meter
+mass-density; default; 001; 1; 1.0; kilogram-per-cubic-meter; 1; 1.0; kilogram-per-cubic-meter
+mass-density; default; 001; 9 / 10; 0.9; kilogram-per-cubic-meter; 9 / 10; 0.9; kilogram-per-cubic-meter
+
+power; default; 001; 1100000000; 1.1E9; kilogram-square-meter-per-cubic-second; 11 / 10; 1.1; gigawatt
+power; default; 001; 1000000000; 1.0E9; kilogram-square-meter-per-cubic-second; 1; 1.0; gigawatt
+power; default; 001; 900000000; 9.0E8; kilogram-square-meter-per-cubic-second; 900; 900.0; megawatt
+power; default; 001; 1000000; 1000000.0; kilogram-square-meter-per-cubic-second; 1; 1.0; megawatt
+power; default; 001; 900000; 900000.0; kilogram-square-meter-per-cubic-second; 900; 900.0; kilowatt
+power; default; 001; 1000; 1000.0; kilogram-square-meter-per-cubic-second; 1; 1.0; kilowatt
+power; default; 001; 900; 900.0; kilogram-square-meter-per-cubic-second; 900; 900.0; watt
+power; default; 001; 1; 1.0; kilogram-square-meter-per-cubic-second; 1; 1.0; watt
+power; default; 001; 9 / 10; 0.9; kilogram-square-meter-per-cubic-second; 900; 900.0; milliwatt
+power; default; 001; 1 / 1000; 0.001; kilogram-square-meter-per-cubic-second; 1; 1.0; milliwatt
+power; default; 001; 9 / 10000; 9.0E-4; kilogram-square-meter-per-cubic-second; 9 / 10; 0.9; milliwatt
+
+power; engine; 001; 1100; 1100.0; kilogram-square-meter-per-cubic-second; 11 / 10; 1.1; kilowatt
+power; engine; 001; 1000; 1000.0; kilogram-square-meter-per-cubic-second; 1; 1.0; kilowatt
+power; engine; 001; 900; 900.0; kilogram-square-meter-per-cubic-second; 9 / 10; 0.9; kilowatt
+
+power; engine; GB; 410134929370248621 / 500000000000000; 820.2698587404972; kilogram-square-meter-per-cubic-second; 11 / 10; 1.1; horsepower
+power; engine; GB; 37284993579113511 / 50000000000000; 745.6998715822702; kilogram-square-meter-per-cubic-second; 1; 1.0; horsepower
+power; engine; GB; 335564942212021599 / 500000000000000; 671.1298844240432; kilogram-square-meter-per-cubic-second; 9 / 10; 0.9; horsepower
+
+pressure; baromtrc; 001; 110; 110.0; kilogram-per-meter-square-second; 11 / 10; 1.1; hectopascal
+pressure; baromtrc; 001; 100; 100.0; kilogram-per-meter-square-second; 1; 1.0; hectopascal
+pressure; baromtrc; 001; 90; 90.0; kilogram-per-meter-square-second; 9 / 10; 0.9; hectopascal
+
+pressure; baromtrc; IN; 37250275043751 / 10000000000; 3725.0275043751; kilogram-per-meter-square-second; 11 / 10; 1.1; inch-ofhg
+pressure; baromtrc; IN; 3386388640341 / 1000000000; 3386.388640341; kilogram-per-meter-square-second; 1; 1.0; inch-ofhg
+pressure; baromtrc; IN; 30477497763069 / 10000000000; 3047.7497763069; kilogram-per-meter-square-second; 9 / 10; 0.9; inch-ofhg
+
+pressure; baromtrc; BR; 110; 110.0; kilogram-per-meter-square-second; 11 / 10; 1.1; millibar
+pressure; baromtrc; BR; 100; 100.0; kilogram-per-meter-square-second; 1; 1.0; millibar
+pressure; baromtrc; BR; 90; 90.0; kilogram-per-meter-square-second; 9 / 10; 0.9; millibar
+
+pressure; baromtrc; MX; 293309252313 / 2000000000; 146.6546261565; kilogram-per-meter-square-second; 11 / 10; 1.1; millimeter-ofhg
+pressure; baromtrc; MX; 26664477483 / 200000000; 133.322387415; kilogram-per-meter-square-second; 1; 1.0; millimeter-ofhg
+pressure; baromtrc; MX; 239980297347 / 2000000000; 119.9901486735; kilogram-per-meter-square-second; 9 / 10; 0.9; millimeter-ofhg
+
+pressure; default; 001; 1100000; 1100000.0; kilogram-per-meter-square-second; 11 / 10; 1.1; megapascal
+pressure; default; 001; 1000000; 1000000.0; kilogram-per-meter-square-second; 1; 1.0; megapascal
+pressure; default; 001; 900000; 900000.0; kilogram-per-meter-square-second; 900000; 900000.0; pascal
+pressure; default; 001; 1; 1.0; kilogram-per-meter-square-second; 1; 1.0; pascal
+pressure; default; 001; 9 / 10; 0.9; kilogram-per-meter-square-second; 9 / 10; 0.9; pascal
+
+pressure; default; GB; 97860875535731 / 12903200000; 7584.233022485197; kilogram-per-meter-square-second; 11 / 10; 1.1; pound-force-per-square-inch
+pressure; default; GB; 8896443230521 / 1290320000; 6894.757293168361; kilogram-per-meter-square-second; 1; 1.0; pound-force-per-square-inch
+pressure; default; GB; 80067989074689 / 12903200000; 6205.281563851525; kilogram-per-meter-square-second; 9 / 10; 0.9; pound-force-per-square-inch
+
+speed; default; 001; 11 / 36; 0.3055555555555556; meter-per-second; 11 / 10; 1.1; kilometer-per-hour
+speed; default; 001; 5 / 18; 0.2777777777777778; meter-per-second; 1; 1.0; kilometer-per-hour
+speed; default; 001; 1 / 4; 0.25; meter-per-second; 9 / 10; 0.9; kilometer-per-hour
+
+speed; default; GB; 15367 / 31250; 0.491744; meter-per-second; 11 / 10; 1.1; mile-per-hour
+speed; default; GB; 1397 / 3125; 0.44704; meter-per-second; 1; 1.0; mile-per-hour
+speed; default; GB; 12573 / 31250; 0.402336; meter-per-second; 9 / 10; 0.9; mile-per-hour
+
+speed; wind; 001; 11 / 36; 0.3055555555555556; meter-per-second; 11 / 10; 1.1; kilometer-per-hour
+speed; wind; 001; 5 / 18; 0.2777777777777778; meter-per-second; 1; 1.0; kilometer-per-hour
+speed; wind; 001; 1 / 4; 0.25; meter-per-second; 9 / 10; 0.9; kilometer-per-hour
+
+speed; wind; FI; 11 / 10; 1.1; meter-per-second; 11 / 10; 1.1; meter-per-second
+speed; wind; FI; 1; 1.0; meter-per-second; 1; 1.0; meter-per-second
+speed; wind; FI; 9 / 10; 0.9; meter-per-second; 9 / 10; 0.9; meter-per-second
+
+speed; wind; US; 15367 / 31250; 0.491744; meter-per-second; 11 / 10; 1.1; mile-per-hour
+speed; wind; US; 1397 / 3125; 0.44704; meter-per-second; 1; 1.0; mile-per-hour
+speed; wind; US; 12573 / 31250; 0.402336; meter-per-second; 9 / 10; 0.9; mile-per-hour
+
+temperature; default; 001; 1097 / 4; 274.25; kelvin; 11 / 10; 1.1; celsius
+temperature; default; 001; 5483 / 20; 274.15; kelvin; 1; 1.0; celsius
+temperature; default; 001; 5481 / 20; 274.05; kelvin; 9 / 10; 0.9; celsius
+
+temperature; default; US; 15359 / 60; 255.9833333333333; kelvin; 11 / 10; 1.1; fahrenheit
+temperature; default; US; 46067 / 180; 255.9277777777778; kelvin; 1; 1.0; fahrenheit
+temperature; default; US; 46057 / 180; 255.8722222222222; kelvin; 9 / 10; 0.9; fahrenheit
+
+temperature; weather; 001; 1097 / 4; 274.25; kelvin; 11 / 10; 1.1; celsius
+temperature; weather; 001; 5483 / 20; 274.15; kelvin; 1; 1.0; celsius
+temperature; weather; 001; 5481 / 20; 274.05; kelvin; 9 / 10; 0.9; celsius
+
+temperature; weather; BS; 15359 / 60; 255.9833333333333; kelvin; 11 / 10; 1.1; fahrenheit
+temperature; weather; BS; 46067 / 180; 255.9277777777778; kelvin; 1; 1.0; fahrenheit
+temperature; weather; BS; 46057 / 180; 255.8722222222222; kelvin; 9 / 10; 0.9; fahrenheit
+
+volume; default; 001; 11 / 10; 1.1; cubic-meter; 11 / 10; 1.1; cubic-meter
+volume; default; 001; 1; 1.0; cubic-meter; 1; 1.0; cubic-meter
+volume; default; 001; 9 / 10; 0.9; cubic-meter; 900000; 900000.0; cubic-centimeter
+volume; default; 001; 1 / 1000000; 1.0E-6; cubic-meter; 1; 1.0; cubic-centimeter
+volume; default; 001; 9 / 10000000; 9.0E-7; cubic-meter; 9 / 10; 0.9; cubic-centimeter
+
+volume; default; GB; 608369751 / 19531250000; 0.0311485312512; cubic-meter; 11 / 10; 1.1; cubic-foot
+volume; default; GB; 55306341 / 1953125000; 0.028316846592; cubic-meter; 1; 1.0; cubic-foot
+volume; default; GB; 497757069 / 19531250000; 0.0254851619328; cubic-meter; 7776 / 5; 1555.2; cubic-inch
+volume; default; GB; 2048383 / 125000000000; 1.6387064E-5; cubic-meter; 1; 1.0; cubic-inch
+volume; default; GB; 18435447 / 1250000000000; 1.47483576E-5; cubic-meter; 9 / 10; 0.9; cubic-inch
+
+volume; fluid; 001; 11 / 10000; 0.0011; cubic-meter; 11 / 10; 1.1; liter
+volume; fluid; 001; 1 / 1000; 0.001; cubic-meter; 1; 1.0; liter
+volume; fluid; 001; 9 / 10000; 9.0E-4; cubic-meter; 900; 900.0; milliliter
+volume; fluid; 001; 1 / 1000000; 1.0E-6; cubic-meter; 1; 1.0; milliliter
+volume; fluid; 001; 9 / 10000000; 9.0E-7; cubic-meter; 9 / 10; 0.9; milliliter
+
+volume; fluid; US; 5204941203 / 1250000000000; 0.0041639529624; cubic-meter; 11 / 10; 1.1; gallon
+volume; fluid; US; 473176473 / 125000000000; 0.003785411784; cubic-meter; 1; 1.0; gallon
+volume; fluid; US; 4258588257 / 1250000000000; 0.0034068706056; cubic-meter; 18 / 5; 3.6; quart
+volume; fluid; US; 473176473 / 500000000000; 9.46352946E-4; cubic-meter; 1; 1.0; quart
+volume; fluid; US; 4258588257 / 5000000000000; 8.517176514E-4; cubic-meter; 9 / 5; 1.8; pint
+volume; fluid; US; 473176473 / 1000000000000; 4.73176473E-4; cubic-meter; 1; 1.0; pint
+volume; fluid; US; 4258588257 / 10000000000000; 4.258588257E-4; cubic-meter; 9 / 5; 1.8; cup
+volume; fluid; US; 473176473 / 2000000000000; 2.365882365E-4; cubic-meter; 1; 1.0; cup
+volume; fluid; US; 4258588257 / 20000000000000; 2.1292941285E-4; cubic-meter; 36 / 5; 7.2; fluid-ounce
+volume; fluid; US; 473176473 / 16000000000000; 2.95735295625E-5; cubic-meter; 1; 1.0; fluid-ounce
+volume; fluid; US; 4258588257 / 160000000000000; 2.661617660625E-5; cubic-meter; 9 / 5; 1.8; tablespoon
+volume; fluid; US; 473176473 / 32000000000000; 1.478676478125E-5; cubic-meter; 1; 1.0; tablespoon
+volume; fluid; US; 4258588257 / 320000000000000; 1.3308088303125E-5; cubic-meter; 27 / 10; 2.7; teaspoon
+volume; fluid; US; 157725491 / 32000000000000; 4.92892159375E-6; cubic-meter; 1; 1.0; teaspoon
+volume; fluid; US; 1419529419 / 320000000000000; 4.436029434375E-6; cubic-meter; 9 / 10; 0.9; teaspoon
+
+volume; fluid; GB; 5000699 / 1000000000; 0.005000699; cubic-meter; 11 / 10; 1.1; gallon-imperial
+volume; fluid; GB; 454609 / 100000000; 0.00454609; cubic-meter; 1; 1.0; gallon-imperial
+volume; fluid; GB; 4091481 / 1000000000; 0.004091481; cubic-meter; 144; 144.0; fluid-ounce-imperial
+volume; fluid; GB; 454609 / 16000000000; 2.84130625E-5; cubic-meter; 1; 1.0; fluid-ounce-imperial
+volume; fluid; GB; 4091481 / 160000000000; 2.557175625E-5; cubic-meter; 9 / 10; 0.9; fluid-ounce-imperial
+
+volume; oil; 001; 109303765263 / 625000000000; 0.1748860244208; cubic-meter; 11 / 10; 1.1; barrel
+volume; oil; 001; 9936705933 / 62500000000; 0.158987294928; cubic-meter; 1; 1.0; barrel
+volume; oil; 001; 89430353397 / 625000000000; 0.1430885654352; cubic-meter; 9 / 10; 0.9; barrel
+
+volume; vehicle; US; 5204941203 / 1250000000000; 0.0041639529624; cubic-meter; 11 / 10; 1.1; gallon
+volume; vehicle; US; 473176473 / 125000000000; 0.003785411784; cubic-meter; 1; 1.0; gallon
+volume; vehicle; US; 4258588257 / 1250000000000; 0.0034068706056; cubic-meter; 9 / 10; 0.9; gallon
+
+volume; vehicle; 001; 11 / 10000; 0.0011; cubic-meter; 11 / 10; 1.1; liter
+volume; vehicle; 001; 1 / 1000; 0.001; cubic-meter; 1; 1.0; liter
+volume; vehicle; 001; 9 / 10000; 9.0E-4; cubic-meter; 9 / 10; 0.9; liter
+
+year-duration; default; 001; 11 / 10; 1.1; year; 11 / 10; 1.1; year
+year-duration; default; 001; 1; 1.0; year; 1; 1.0; year
+year-duration; default; 001; 9 / 10; 0.9; year; 54 / 5; 10.8; month
+year-duration; default; 001; 1 / 12; 0.08333333333333333; year; 1; 1.0; month
+year-duration; default; 001; 3 / 40; 0.075; year; 9 / 10; 0.9; month
+
+year-duration; person-age; 001; 13 / 5; 2.6; year; 13 / 5; 2.6; year-person
+year-duration; person-age; 001; 5 / 2; 2.5; year; 5 / 2; 2.5; year-person
+year-duration; person-age; 001; 12 / 5; 2.4; year; 2; year-person; 24 / 5; 4.8; month-person
+year-duration; person-age; 001; 1; 1.0; year; 1; year-person; 0; 0.0; month-person
+year-duration; person-age; 001; 9 / 10; 0.9; year; 54 / 5; 10.8; month-person
+year-duration; person-age; 001; 1 / 12; 0.08333333333333333; year; 1; 1.0; month-person
+year-duration; person-age; 001; 3 / 40; 0.075; year; 9 / 10; 0.9; month-person
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt
new file mode 100644
index 00000000000..d2facefc6ec
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt
@@ -0,0 +1,203 @@
+# Test data for unit conversions
+# Copyright © 1991-2020 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/copyright.html
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
+#
+# Format:
+# Quantity ; x ; y ; conversion to y (rational) ; test: 1000 x ⟹ y
+#
+# Use: convert 1000 x units to the y unit; the result should match the final column,
+# at the given precision. For example, when the last column is 159.1549,
+# round to 4 decimal digits before comparing.
+# Note that certain conversions are approximate, such as degrees to radians
+#
+# Generation: Set GENERATE_TESTS in TestUnits.java, and look at TestParseUnit results.
+
+acceleration ; meter-per-square-second ; meter-per-square-second ; 1 * x ; 1,000.00
+acceleration ; g-force ; meter-per-square-second ; 9.80665 * x ; 9806.65
+angle ; arc-second ; revolution ; 0.0000625/81 * x ; 7.716049E-4
+angle ; arc-minute ; revolution ; 0.00125/27 * x ; 0.0462963
+angle ; degree ; revolution ; 0.025/9 * x ; 2.777778
+angle ; radian ; revolution ; 65,501,488/411,557,987 * x ; 159.1549
+angle ; revolution ; revolution ; 1 * x ; 1,000.00
+area ; square-centimeter ; square-meter ; 0.0001 * x ; 0.1
+area ; square-inch ; square-meter ; 0.00064516 * x ; 0.64516
+area ; square-foot ; square-meter ; 0.09290304 * x ; 92.90304
+area ; square-yard ; square-meter ; 0.83612736 * x ; 836.1274
+area ; square-meter ; square-meter ; 1 * x ; 1,000.00
+area ; dunam ; square-meter ; 1,000 * x ; 1000000.0
+area ; acre ; square-meter ; 4,046.8564224 * x ; 4046856.0
+area ; hectare ; square-meter ; 10,000 * x ; 1.0E7
+area ; square-kilometer ; square-meter ; 1,000,000 * x ; 1.0E9
+area ; square-mile ; square-meter ; 2,589,988.110336 * x ; 2.589988E9
+concentration ; millimole-per-liter ; item-per-cubic-meter ; 602,214,076,000,000,000,000,000 * x ; 6.022141E26
+consumption ; liter-per-100-kilometer ; cubic-meter-per-meter ; 0.00000001 * x ; 1.0E-5
+consumption ; liter-per-kilometer ; cubic-meter-per-meter ; 0.000001 * x ; 0.001
+consumption-inverse ; mile-per-gallon-imperial ; meter-per-cubic-meter ; 160,934,400,000/454,609 * x ; 3.540062E8
+consumption-inverse ; mile-per-gallon ; meter-per-cubic-meter ; 48,000,000,000/112,903 * x ; 4.251437E8
+digital ; bit ; bit ; 1 * x ; 1,000.00
+digital ; byte ; bit ; 8 * x ; 8000.0
+digital ; kilobit ; bit ; 1,000 * x ; 1000000.0
+digital ; kilobyte ; bit ; 8,000 * x ; 8000000.0
+digital ; megabit ; bit ; 1,000,000 * x ; 1.0E9
+digital ; megabyte ; bit ; 8,000,000 * x ; 8.0E9
+digital ; gigabit ; bit ; 1,000,000,000 * x ; 1.0E12
+digital ; gigabyte ; bit ; 8,000,000,000 * x ; 8.0E12
+digital ; terabit ; bit ; 1,000,000,000,000 * x ; 1.0E15
+digital ; terabyte ; bit ; 8,000,000,000,000 * x ; 8.0E15
+digital ; petabyte ; bit ; 8,000,000,000,000,000 * x ; 8.0E18
+duration ; nanosecond ; second ; 0.000000001 * x ; 1.0E-6
+duration ; microsecond ; second ; 0.000001 * x ; 0.001
+duration ; millisecond ; second ; 0.001 * x ; 1.0
+duration ; second ; second ; 1 * x ; 1,000.00
+duration ; minute ; second ; 60 * x ; 60000.0
+duration ; hour ; second ; 3,600 * x ; 3600000.0
+duration ; day ; second ; 86,400 * x ; 8.64E7
+duration ; day-person ; second ; 86,400 * x ; 8.64E7
+duration ; week ; second ; 604,800 * x ; 6.048E8
+duration ; week-person ; second ; 604,800 * x ; 6.048E8
+electric-current ; milliampere ; ampere ; 0.001 * x ; 1.0
+electric-current ; ampere ; ampere ; 1 * x ; 1,000.00
+electric-resistance ; ohm ; kilogram-square-meter-per-cubic-second-square-ampere ; 1 * x ; 1000.0
+energy ; electronvolt ; kilogram-square-meter-per-square-second ; 0.0000000000000000001602177 * x ; 1.602177E-16
+energy ; dalton ; kilogram-square-meter-per-square-second ; 0.00000000014924180856 * x ; 1.492418E-7
+energy ; joule ; kilogram-square-meter-per-square-second ; 1 * x ; 1000.0
+energy ; newton-meter ; kilogram-square-meter-per-square-second ; 1 * x ; 1000.0
+energy ; pound-force-foot ; kilogram-square-meter-per-square-second ; 1.3558179483314004 * x ; 1355.818
+energy ; calorie ; kilogram-square-meter-per-square-second ; 4.184 * x ; 4184.0
+energy ; kilojoule ; kilogram-square-meter-per-square-second ; 1,000 * x ; 1000000.0
+energy ; british-thermal-unit ; kilogram-square-meter-per-square-second ; 9,489.1523804/9 * x ; 1054350.0
+energy ; foodcalorie ; kilogram-square-meter-per-square-second ; 4,184 * x ; 4184000.0
+energy ; kilocalorie ; kilogram-square-meter-per-square-second ; 4,184 * x ; 4184000.0
+energy ; kilowatt-hour ; kilogram-square-meter-second-per-cubic-second ; 3,600,000 * x ; 3.6E9
+energy ; therm-us ; kilogram-square-meter-per-square-second ; 105,480,400 * x ; 1.054804E11
+force ; newton ; kilogram-meter-per-square-second ; 1 * x ; 1000.0
+force ; pound-force ; kilogram-meter-per-square-second ; 4.4482216152605 * x ; 4448.222
+frequency ; hertz ; revolution-per-second ; 1 * x ; 1000.0
+frequency ; kilohertz ; revolution-per-second ; 1,000 * x ; 1000000.0
+frequency ; megahertz ; revolution-per-second ; 1,000,000 * x ; 1.0E9
+frequency ; gigahertz ; revolution-per-second ; 1,000,000,000 * x ; 1.0E12
+graphics ; dot ; pixel ; 1 * x ; 1000.0
+graphics ; pixel ; pixel ; 1 * x ; 1,000.00
+graphics ; megapixel ; pixel ; 1,000,000 * x ; 1.0E9
+illuminance ; lux ; candela-per-square-meter ; 1 * x ; 1000.0
+length ; picometer ; meter ; 0.000000000001 * x ; 1.0E-9
+length ; nanometer ; meter ; 0.000000001 * x ; 1.0E-6
+length ; micrometer ; meter ; 0.000001 * x ; 0.001
+length ; point ; meter ; 0.003175/9 * x ; 0.3527778
+length ; millimeter ; meter ; 0.001 * x ; 1.0
+length ; centimeter ; meter ; 0.01 * x ; 10.0
+length ; inch ; meter ; 0.0254 * x ; 25.4
+length ; decimeter ; meter ; 0.1 * x ; 100.0
+length ; foot ; meter ; 0.3048 * x ; 304.8
+length ; yard ; meter ; 0.9144 * x ; 914.4
+length ; meter ; meter ; 1 * x ; 1,000.00
+length ; fathom ; meter ; 1.8288 * x ; 1828.8
+length ; furlong ; meter ; 201.168 * x ; 201168.0
+length ; kilometer ; meter ; 1,000 * x ; 1000000.0
+length ; mile ; meter ; 1,609.344 * x ; 1609344.0
+length ; nautical-mile ; meter ; 1,852 * x ; 1852000.0
+length ; mile-scandinavian ; meter ; 10,000 * x ; 1.0E7
+length ; 100-kilometer ; meter ; 100,000 * x ; 1.0E8
+length ; earth-radius ; meter ; 6,378,100 * x ; 6.3781E9
+length ; solar-radius ; meter ; 695,700,000 * x ; 6.957E11
+length ; astronomical-unit ; meter ; 149,597,900,000 * x ; 1.495979E14
+length ; light-year ; meter ; 9,460,730,000,000,000 * x ; 9.46073E18
+length ; parsec ; meter ; 30,856,780,000,000,000 * x ; 3.085678E19
+luminous-flux ; lumen ; candela-square-meter-per-square-meter ; 1 * x ; 1000.0
+luminous-intensity ; candela ; candela ; 1 * x ; 1,000.00
+mass ; microgram ; kilogram ; 0.000000001 * x ; 1.0E-6
+mass ; milligram ; kilogram ; 0.000001 * x ; 0.001
+mass ; grain ; kilogram ; 0.00006479891 * x ; 0.06479891
+mass ; carat ; kilogram ; 0.0002 * x ; 0.2
+mass ; gram ; kilogram ; 0.001 * x ; 1.0
+mass ; ounce ; kilogram ; 0.028349523125 * x ; 28.34952
+mass ; ounce-troy ; kilogram ; 0.03110348 * x ; 31.10348
+mass ; pound ; kilogram ; 0.45359237 * x ; 453.5924
+mass ; kilogram ; kilogram ; 1 * x ; 1,000.00
+mass ; stone ; kilogram ; 6.35029318 * x ; 6350.293
+mass ; ton ; kilogram ; 907.18474 * x ; 907184.7
+mass ; metric-ton ; kilogram ; 1,000 * x ; 1000000.0
+mass ; earth-mass ; kilogram ; 5,972,200,000,000,000,000,000,000 * x ; 5.9722E27
+mass ; solar-mass ; kilogram ; 1,988,470,000,000,000,000,000,000,000,000 * x ; 1.98847E33
+mass-density ; milligram-per-deciliter ; kilogram-per-cubic-meter ; 0.01 * x ; 10.0
+portion ; permillion ; portion ; 0.000001 * x ; 0.001
+portion ; permyriad ; portion ; 0.0001 * x ; 0.1
+portion ; permille ; portion ; 0.001 * x ; 1.0
+portion ; percent ; portion ; 0.01 * x ; 10.0
+portion ; karat ; portion ; 0.125/3 * x ; 41.66667
+portion ; portion ; portion ; 1 * x ; 1,000.00
+power ; milliwatt ; kilogram-square-meter-per-cubic-second ; 0.001 * x ; 1.0
+power ; watt ; kilogram-square-meter-per-cubic-second ; 1 * x ; 1000.0
+power ; horsepower ; kilogram-square-meter-per-cubic-second ; 745.69987158227022 * x ; 745699.9
+power ; kilowatt ; kilogram-square-meter-per-cubic-second ; 1,000 * x ; 1000000.0
+power ; megawatt ; kilogram-square-meter-per-cubic-second ; 1,000,000 * x ; 1.0E9
+power ; gigawatt ; kilogram-square-meter-per-cubic-second ; 1,000,000,000 * x ; 1.0E12
+power ; solar-luminosity ; kilogram-square-meter-per-cubic-second ; 382,800,000,000,000,000,000,000,000 * x ; 3.828E29
+pressure ; pascal ; kilogram-per-meter-square-second ; 1 * x ; 1000.0
+pressure ; hectopascal ; kilogram-per-meter-square-second ; 100 * x ; 100000.0
+pressure ; millibar ; kilogram-per-meter-square-second ; 100 * x ; 100000.0
+pressure ; millimeter-ofhg ; kilogram-meter-per-square-meter-square-second ; 133.322387415 * x ; 133322.4
+pressure ; kilopascal ; kilogram-per-meter-square-second ; 1,000 * x ; 1000000.0
+pressure ; inch-ofhg ; kilogram-meter-per-square-meter-square-second ; 3,386.388640341 * x ; 3386389.0
+pressure ; pound-force-per-square-inch ; kilogram-meter-per-square-meter-square-second ; 111,205,540.3815125/16,129 * x ; 6894757.0
+pressure ; bar ; kilogram-per-meter-square-second ; 100,000 * x ; 1.0E8
+pressure ; atmosphere ; kilogram-per-meter-square-second ; 101,325 * x ; 1.01325E8
+pressure ; megapascal ; kilogram-per-meter-square-second ; 1,000,000 * x ; 1.0E9
+pressure-per-length ; ofhg ; kilogram-per-square-meter-square-second ; 133,322.387415 * x ; 1.333224E8
+resolution ; dot-per-inch ; pixel-per-meter ; 5,000/127 * x ; 39370.08
+resolution ; pixel-per-inch ; pixel-per-meter ; 5,000/127 * x ; 39370.08
+resolution ; dot-per-centimeter ; pixel-per-meter ; 100 * x ; 100000.0
+resolution ; pixel-per-centimeter ; pixel-per-meter ; 100 * x ; 100000.0
+speed ; kilometer-per-hour ; meter-per-second ; 2.5/9 * x ; 277.7778
+speed ; mile-per-hour ; meter-per-second ; 0.44704 * x ; 447.04
+speed ; knot ; meter-per-second ; 4.63/9 * x ; 514.4444
+speed ; meter-per-second ; meter-per-second ; 1 * x ; 1,000.00
+substance-amount ; item ; item ; 1 * x ; 1,000.00
+substance-amount ; mole ; item ; 602,214,076,000,000,000,000,000 * x ; 6.022141E26
+temperature ; fahrenheit ; kelvin ; 5/9 * x - 2,298.35/9 ; 810.9278
+temperature ; kelvin ; kelvin ; 1 * x ; 1,000.00
+temperature ; celsius ; kelvin ; 1 * x - 273.15 ; 1273.15
+typewidth ; em ; em ; 1 * x ; 1,000.00
+voltage ; volt ; kilogram-square-meter-per-cubic-second-ampere ; 1 * x ; 1000.0
+volume ; drop ; cubic-meter ; 0.0000001540287998046875/3 * x ; 5.134293E-5
+volume ; pinch ; cubic-meter ; 0.00000023104319970703125 * x ; 2.310432E-4
+volume ; cubic-centimeter ; cubic-meter ; 0.000001 * x ; 0.001
+volume ; milliliter ; cubic-meter ; 0.000001 * x ; 0.001
+volume ; dessert-spoon ; cubic-meter ; 0.00000184834559765625 * x ; 0.001848346
+volume ; dessert-spoon-imperial ; cubic-meter ; 0.0000022197705078125 * x ; 0.002219771
+volume ; dram ; cubic-meter ; 0.0000036966911953125 * x ; 0.003696691
+volume ; teaspoon ; cubic-meter ; 0.00000492892159375 * x ; 0.004928922
+volume ; centiliter ; cubic-meter ; 0.00001 * x ; 0.01
+volume ; tablespoon ; cubic-meter ; 0.00001478676478125 * x ; 0.01478676
+volume ; cubic-inch ; cubic-meter ; 0.000016387064 * x ; 0.01638706
+volume ; fluid-ounce-imperial ; cubic-meter ; 0.0000284130625 * x ; 0.02841306
+volume ; fluid-ounce ; cubic-meter ; 0.0000295735295625 * x ; 0.02957353
+volume ; jigger ; cubic-meter ; 0.00004436029434375 * x ; 0.04436029
+volume ; deciliter ; cubic-meter ; 0.0001 * x ; 0.1
+volume ; cup ; cubic-meter ; 0.0002365882365 * x ; 0.2365882
+volume ; cup-metric ; cubic-meter ; 0.00025 * x ; 0.25
+volume ; pint ; cubic-meter ; 0.000473176473 * x ; 0.4731765
+volume ; pint-metric ; cubic-meter ; 0.0005 * x ; 0.5
+volume ; quart ; cubic-meter ; 0.000946352946 * x ; 0.9463529
+volume ; liter ; cubic-meter ; 0.001 * x ; 1.0
+volume ; quart-imperial ; cubic-meter ; 0.0011365225 * x ; 1.136522
+volume ; gallon ; cubic-meter ; 0.003785411784 * x ; 3.785412
+volume ; gallon-imperial ; cubic-meter ; 0.00454609 * x ; 4.54609
+volume ; cubic-foot ; cubic-meter ; 0.028316846592 * x ; 28.31685
+volume ; bushel ; cubic-meter ; 0.03523907016688 * x ; 35.23907
+volume ; hectoliter ; cubic-meter ; 0.1 * x ; 100.0
+volume ; barrel ; cubic-meter ; 0.158987294928 * x ; 158.9873
+volume ; cubic-yard ; cubic-meter ; 0.764554857984 * x ; 764.5549
+volume ; cubic-meter ; cubic-meter ; 1 * x ; 1,000.00
+volume ; megaliter ; cubic-meter ; 1,000 * x ; 1000000.0
+volume ; acre-foot ; cubic-meter ; 1,233.48183754752 * x ; 1233482.0
+volume ; cubic-kilometer ; cubic-meter ; 1,000,000,000 * x ; 1.0E12
+volume ; cubic-mile ; cubic-meter ; 4,168,181,825.440579584 * x ; 4.168182E12
+year-duration ; month ; year ; 0.25/3 * x ; 83.33333
+year-duration ; month-person ; year ; 0.25/3 * x ; 83.33333
+year-duration ; year ; year ; 1 * x ; 1,000.00
+year-duration ; year-person ; year ; 1 * x ; 1000.0
+year-duration ; decade ; year ; 10 * x ; 10000.0
+year-duration ; century ; year ; 100 * x ; 100000.0 \ No newline at end of file
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/collationtest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/collationtest.txt
index 90fb7cb9a73..abda337e545 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/collationtest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/collationtest.txt
@@ -2540,3 +2540,46 @@
# Before ICU 55, the following reordered together with Gothic.
<1 ðŒˆ # Old Italic
<1 ð‘ # Shavian
+
+# Check for presence of certain chars 乛冂刂åœåˆå°å½‘艹日月爫牛辶 in
+# zh pinyin and stroke, ICU-13790
+# (bracket pinyin test with å¬..作, stroke test with 一..ä¹¾)
+
+** test: DataDrivenCollationTest/VerifyCertainCharsInPinyin
+@ locale zh-u-co-pinyin
+* compare
+< å¬
+< åœ
+< 艹
+< 辶
+< 刂
+< 彑
+< 冂
+< 牛
+< æ—¥
+< å°
+< ä¹›
+< åˆ
+< 月
+< 爫
+< 作
+
+** test: DataDrivenCollationTest/VerifyCertainCharsInStroke
+@ locale zh-u-co-stroke
+* compare
+< 一
+< ä¹›
+< 冂
+< 刂
+< åœ
+< åˆ
+< å°
+< 彑
+< 艹
+< æ—¥
+< 月
+< 爫
+< 牛
+< 辶
+< ä¹¾
+
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/encoded.utf16be b/Build/source/libs/icu/icu-src/source/test/testdata/encoded.utf16be
index dd287c18424..4609469c032 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/encoded.utf16be
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/encoded.utf16be
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt b/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt
new file mode 100644
index 00000000000..e41eaac05a7
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt
@@ -0,0 +1,1648 @@
+# File copied from cldr common/testData/localeIdentifiers/localeCanonicalization.txt
+# Test data for locale identifier canonicalization
+# Copyright © 1991-2020 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/copyright.html
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
+#
+# Format:
+# <source locale identifier> ; <expected canonicalized locale identifier>
+#
+# The data lines are divided into 4 sets:
+# explicit: a short list of explicit test cases.
+# fromAliases: test cases generated from the alias data.
+# decanonicalized: test cases generated by reversing the normalization process.
+# withIrrelevants: test cases generated from the others by adding irrelevant fields where possible,
+# to ensure that the canonicalization implementation is not sensitive to irrelevant fields. These include:
+# Language: aaa
+# Script: Adlm
+# Region: AC
+# Variant: fonipa
+######
+
+
+
+# explicit
+
+art_lojban ; jbo
+en_US_aaland ; en_US
+en_US_heploc ; en_US_alalc97
+en_US_polytoni ; en_US_polyton
+en_aaland ; en_AX
+en_arevela ; en
+en_arevmda_arevela ; en
+en_lojban ; en
+hy_arevela ; hy
+hy_arevmda ; hyw
+hy_arevmda_arevela ; hyw
+hye_arevmda ; hyw
+no_bokmal_nynorsk ; nb
+no_nynorsk_bokmal ; nb
+zh_guoyu_hakka_xiang ; hak
+zh_hakka_xiang ; hak
+
+# fromAliases
+
+aa_saaho ; ssy
+aam ; aas
+aar ; aa
+abk ; ab
+adp ; dz
+afr ; af
+aju ; jrb
+aka ; ak
+alb ; sq
+als ; sq
+amh ; am
+ara ; ar
+arb ; ar
+arg ; an
+arm ; hy
+asd ; snz
+asm ; as
+aue ; ktz
+ava ; av
+ave ; ae
+aym ; ay
+ayr ; ay
+ayx ; nun
+aze ; az
+azj ; az
+bak ; ba
+bam ; bm
+baq ; eu
+bcc ; bal
+bcl ; bik
+bel ; be
+ben ; bn
+bgm ; bcg
+bh ; bho
+bih ; bho
+bis ; bi
+bjd ; drl
+bod ; bo
+bos ; bs
+bre ; br
+bul ; bg
+bur ; my
+bxk ; luy
+bxr ; bua
+cat ; ca
+ccq ; rki
+cel_gaulish ; xtg
+ces ; cs
+cha ; ch
+che ; ce
+chi ; zh
+chu ; cu
+chv ; cv
+cjr ; mom
+cka ; cmr
+cld ; syr
+cmk ; xch
+cmn ; zh
+cnr ; sr_ME
+cor ; kw
+cos ; co
+coy ; pij
+cqu ; quh
+cre ; cr
+cwd ; cr
+cym ; cy
+cze ; cs
+dan ; da
+deu ; de
+dgo ; doi
+dhd ; mwr
+dik ; din
+diq ; zza
+dit ; dif
+div ; dv
+drh ; mn
+drw ; fa_AF
+dut ; nl
+dzo ; dz
+ekk ; et
+ell ; el
+emk ; man
+eng ; en
+epo ; eo
+esk ; ik
+est ; et
+eus ; eu
+ewe ; ee
+fao ; fo
+fas ; fa
+fat ; ak
+fij ; fj
+fin ; fi
+fra ; fr
+fre ; fr
+fry ; fy
+fuc ; ff
+ful ; ff
+gav ; dev
+gaz ; om
+gbo ; grb
+geo ; ka
+ger ; de
+gfx ; vaj
+ggn ; gvr
+gla ; gd
+gle ; ga
+glg ; gl
+glv ; gv
+gno ; gon
+gre ; el
+grn ; gn
+gti ; nyc
+gug ; gn
+guj ; gu
+guv ; duz
+gya ; gba
+hat ; ht
+hau ; ha
+hbs ; sr_Latn
+hdn ; hai
+hea ; hmn
+heb ; he
+her ; hz
+him ; srx
+hin ; hi
+hmo ; ho
+hrr ; jal
+hrv ; hr
+hun ; hu
+hye ; hy
+ibi ; opa
+ibo ; ig
+ice ; is
+ido ; io
+iii ; ii
+ike ; iu
+iku ; iu
+ile ; ie
+ilw ; gal
+in ; id
+ina ; ia
+ind ; id
+ipk ; ik
+isl ; is
+ita ; it
+iw ; he
+jav ; jv
+jeg ; oyb
+ji ; yi
+jpn ; ja
+jw ; jv
+kal ; kl
+kan ; kn
+kas ; ks
+kat ; ka
+kau ; kr
+kaz ; kk
+kgc ; tdf
+kgh ; kml
+khk ; mn
+khm ; km
+kik ; ki
+kin ; rw
+kir ; ky
+kmr ; ku
+knc ; kr
+kng ; kg
+knn ; kok
+koj ; kwv
+kom ; kv
+kon ; kg
+kor ; ko
+kpv ; kv
+krm ; bmf
+ktr ; dtp
+kua ; kj
+kur ; ku
+kvs ; gdj
+kwq ; yam
+kxe ; tvd
+kzj ; dtp
+kzt ; dtp
+lao ; lo
+lat ; la
+lav ; lv
+lbk ; bnc
+lii ; raq
+lim ; li
+lin ; ln
+lit ; lt
+llo ; ngt
+lmm ; rmx
+ltz ; lb
+lub ; lu
+lug ; lg
+lvs ; lv
+mac ; mk
+mah ; mh
+mal ; ml
+mao ; mi
+mar ; mr
+may ; ms
+meg ; cir
+mhr ; chm
+mkd ; mk
+mlg ; mg
+mlt ; mt
+mnk ; man
+mo ; ro
+mol ; ro
+mon ; mn
+mri ; mi
+msa ; ms
+mst ; mry
+mup ; raj
+mwj ; vaj
+mya ; my
+myd ; aog
+myt ; mry
+nad ; xny
+nau ; na
+nav ; nv
+nbl ; nr
+ncp ; kdz
+nde ; nd
+ndo ; ng
+nep ; ne
+nld ; nl
+nno ; nn
+nns ; nbr
+nnx ; ngv
+no ; nb
+no_bokmal ; nb
+no_nynorsk ; nn
+nob ; nb
+nor ; nb
+npi ; ne
+nts ; pij
+nya ; ny
+oci ; oc
+ojg ; oj
+oji ; oj
+ori ; or
+orm ; om
+ory ; or
+oss ; os
+oun ; vaj
+pan ; pa
+pbu ; ps
+pcr ; adx
+per ; fa
+pes ; fa
+pli ; pi
+plt ; mg
+pmc ; huw
+pmu ; phr
+pnb ; lah
+pol ; pl
+por ; pt
+ppa ; bfy
+ppr ; lcq
+prs ; fa_AF
+pry ; prt
+pus ; ps
+puz ; pub
+que ; qu
+quz ; qu
+rmy ; rom
+roh ; rm
+ron ; ro
+rum ; ro
+run ; rn
+rus ; ru
+sag ; sg
+san ; sa
+sca ; hle
+scc ; sr
+scr ; hr
+sgn_BR ; bzs
+sgn_CO ; csn
+sgn_DE ; gsg
+sgn_DK ; dsl
+sgn_FR ; fsl
+sgn_GB ; bfi
+sgn_GR ; gss
+sgn_IE ; isg
+sgn_IT ; ise
+sgn_JP ; jsl
+sgn_MX ; mfs
+sgn_NI ; ncs
+sgn_NL ; dse
+sgn_NO ; nsi
+sgn_PT ; psr
+sgn_SE ; swl
+sgn_US ; ase
+sgn_ZA ; sfs
+sh ; sr_Latn
+sin ; si
+skk ; oyb
+slk ; sk
+slo ; sk
+slv ; sl
+sme ; se
+smo ; sm
+sna ; sn
+snd ; sd
+som ; so
+sot ; st
+spa ; es
+spy ; kln
+sqi ; sq
+src ; sc
+srd ; sc
+srp ; sr
+ssw ; ss
+sun ; su
+swa ; sw
+swc ; sw_CD
+swe ; sv
+swh ; sw
+tah ; ty
+tam ; ta
+tat ; tt
+tdu ; dtp
+tel ; te
+tgk ; tg
+tgl ; fil
+tha ; th
+thc ; tpo
+thx ; oyb
+tib ; bo
+tie ; ras
+tir ; ti
+tkk ; twm
+tl ; fil
+tlw ; weo
+tmp ; tyj
+tne ; kak
+tnf ; fa_AF
+ton ; to
+tsf ; taj
+tsn ; tn
+tso ; ts
+ttq ; tmh
+tuk ; tk
+tur ; tr
+tw ; ak
+twi ; ak
+uig ; ug
+ukr ; uk
+umu ; del
+und_004 ; und_AF
+und_008 ; und_AL
+und_010 ; und_AQ
+und_012 ; und_DZ
+und_016 ; und_AS
+und_020 ; und_AD
+und_024 ; und_AO
+und_028 ; und_AG
+und_031 ; und_AZ
+und_032 ; und_AR
+und_036 ; und_AU
+und_040 ; und_AT
+und_044 ; und_BS
+und_048 ; und_BH
+und_050 ; und_BD
+und_051 ; und_AM
+und_052 ; und_BB
+und_056 ; und_BE
+und_060 ; und_BM
+und_062 ; und_034
+und_064 ; und_BT
+und_068 ; und_BO
+und_070 ; und_BA
+und_072 ; und_BW
+und_074 ; und_BV
+und_076 ; und_BR
+und_084 ; und_BZ
+und_086 ; und_IO
+und_090 ; und_SB
+und_092 ; und_VG
+und_096 ; und_BN
+und_100 ; und_BG
+und_104 ; und_MM
+und_108 ; und_BI
+und_112 ; und_BY
+und_116 ; und_KH
+und_120 ; und_CM
+und_124 ; und_CA
+und_132 ; und_CV
+und_136 ; und_KY
+und_140 ; und_CF
+und_144 ; und_LK
+und_148 ; und_TD
+und_152 ; und_CL
+und_156 ; und_CN
+und_158 ; und_TW
+und_162 ; und_CX
+und_166 ; und_CC
+und_170 ; und_CO
+und_172 ; und_RU
+und_174 ; und_KM
+und_175 ; und_YT
+und_178 ; und_CG
+und_180 ; und_CD
+und_184 ; und_CK
+und_188 ; und_CR
+und_191 ; und_HR
+und_192 ; und_CU
+und_196 ; und_CY
+und_200 ; und_CZ
+und_203 ; und_CZ
+und_204 ; und_BJ
+und_208 ; und_DK
+und_212 ; und_DM
+und_214 ; und_DO
+und_218 ; und_EC
+und_222 ; und_SV
+und_226 ; und_GQ
+und_230 ; und_ET
+und_231 ; und_ET
+und_232 ; und_ER
+und_233 ; und_EE
+und_234 ; und_FO
+und_238 ; und_FK
+und_239 ; und_GS
+und_242 ; und_FJ
+und_246 ; und_FI
+und_248 ; und_AX
+und_249 ; und_FR
+und_250 ; und_FR
+und_254 ; und_GF
+und_258 ; und_PF
+und_260 ; und_TF
+und_262 ; und_DJ
+und_266 ; und_GA
+und_268 ; und_GE
+und_270 ; und_GM
+und_275 ; und_PS
+und_276 ; und_DE
+und_278 ; und_DE
+und_280 ; und_DE
+und_288 ; und_GH
+und_292 ; und_GI
+und_296 ; und_KI
+und_300 ; und_GR
+und_304 ; und_GL
+und_308 ; und_GD
+und_312 ; und_GP
+und_316 ; und_GU
+und_320 ; und_GT
+und_324 ; und_GN
+und_328 ; und_GY
+und_332 ; und_HT
+und_334 ; und_HM
+und_336 ; und_VA
+und_340 ; und_HN
+und_344 ; und_HK
+und_348 ; und_HU
+und_352 ; und_IS
+und_356 ; und_IN
+und_360 ; und_ID
+und_364 ; und_IR
+und_368 ; und_IQ
+und_372 ; und_IE
+und_376 ; und_IL
+und_380 ; und_IT
+und_384 ; und_CI
+und_388 ; und_JM
+und_392 ; und_JP
+und_398 ; und_KZ
+und_400 ; und_JO
+und_404 ; und_KE
+und_408 ; und_KP
+und_410 ; und_KR
+und_414 ; und_KW
+und_417 ; und_KG
+und_418 ; und_LA
+und_422 ; und_LB
+und_426 ; und_LS
+und_428 ; und_LV
+und_430 ; und_LR
+und_434 ; und_LY
+und_438 ; und_LI
+und_440 ; und_LT
+und_442 ; und_LU
+und_446 ; und_MO
+und_450 ; und_MG
+und_454 ; und_MW
+und_458 ; und_MY
+und_462 ; und_MV
+und_466 ; und_ML
+und_470 ; und_MT
+und_474 ; und_MQ
+und_478 ; und_MR
+und_480 ; und_MU
+und_484 ; und_MX
+und_492 ; und_MC
+und_496 ; und_MN
+und_498 ; und_MD
+und_499 ; und_ME
+und_500 ; und_MS
+und_504 ; und_MA
+und_508 ; und_MZ
+und_512 ; und_OM
+und_516 ; und_NA
+und_520 ; und_NR
+und_524 ; und_NP
+und_528 ; und_NL
+und_530 ; und_CW
+und_531 ; und_CW
+und_532 ; und_CW
+und_533 ; und_AW
+und_534 ; und_SX
+und_535 ; und_BQ
+und_536 ; und_SA
+und_540 ; und_NC
+und_548 ; und_VU
+und_554 ; und_NZ
+und_558 ; und_NI
+und_562 ; und_NE
+und_566 ; und_NG
+und_570 ; und_NU
+und_574 ; und_NF
+und_578 ; und_NO
+und_580 ; und_MP
+und_581 ; und_UM
+und_582 ; und_FM
+und_583 ; und_FM
+und_584 ; und_MH
+und_585 ; und_PW
+und_586 ; und_PK
+und_591 ; und_PA
+und_598 ; und_PG
+und_600 ; und_PY
+und_604 ; und_PE
+und_608 ; und_PH
+und_612 ; und_PN
+und_616 ; und_PL
+und_620 ; und_PT
+und_624 ; und_GW
+und_626 ; und_TL
+und_630 ; und_PR
+und_634 ; und_QA
+und_638 ; und_RE
+und_642 ; und_RO
+und_643 ; und_RU
+und_646 ; und_RW
+und_652 ; und_BL
+und_654 ; und_SH
+und_659 ; und_KN
+und_660 ; und_AI
+und_662 ; und_LC
+und_663 ; und_MF
+und_666 ; und_PM
+und_670 ; und_VC
+und_674 ; und_SM
+und_678 ; und_ST
+und_682 ; und_SA
+und_686 ; und_SN
+und_688 ; und_RS
+und_690 ; und_SC
+und_694 ; und_SL
+und_702 ; und_SG
+und_703 ; und_SK
+und_704 ; und_VN
+und_705 ; und_SI
+und_706 ; und_SO
+und_710 ; und_ZA
+und_716 ; und_ZW
+und_720 ; und_YE
+und_724 ; und_ES
+und_728 ; und_SS
+und_729 ; und_SD
+und_732 ; und_EH
+und_736 ; und_SD
+und_740 ; und_SR
+und_744 ; und_SJ
+und_748 ; und_SZ
+und_752 ; und_SE
+und_756 ; und_CH
+und_760 ; und_SY
+und_762 ; und_TJ
+und_764 ; und_TH
+und_768 ; und_TG
+und_772 ; und_TK
+und_776 ; und_TO
+und_780 ; und_TT
+und_784 ; und_AE
+und_788 ; und_TN
+und_792 ; und_TR
+und_795 ; und_TM
+und_796 ; und_TC
+und_798 ; und_TV
+und_800 ; und_UG
+und_804 ; und_UA
+und_807 ; und_MK
+und_810 ; und_RU
+und_818 ; und_EG
+und_826 ; und_GB
+und_830 ; und_JE
+und_831 ; und_GG
+und_832 ; und_JE
+und_833 ; und_IM
+und_834 ; und_TZ
+und_840 ; und_US
+und_850 ; und_VI
+und_854 ; und_BF
+und_858 ; und_UY
+und_860 ; und_UZ
+und_862 ; und_VE
+und_876 ; und_WF
+und_882 ; und_WS
+und_886 ; und_YE
+und_887 ; und_YE
+und_890 ; und_RS
+und_891 ; und_RS
+und_894 ; und_ZM
+und_958 ; und_AA
+und_959 ; und_QM
+und_960 ; und_QN
+und_962 ; und_QP
+und_963 ; und_QQ
+und_964 ; und_QR
+und_965 ; und_QS
+und_966 ; und_QT
+und_967 ; und_EU
+und_968 ; und_QV
+und_969 ; und_QW
+und_970 ; und_QX
+und_971 ; und_QY
+und_972 ; und_QZ
+und_973 ; und_XA
+und_974 ; und_XB
+und_975 ; und_XC
+und_976 ; und_XD
+und_977 ; und_XE
+und_978 ; und_XF
+und_979 ; und_XG
+und_980 ; und_XH
+und_981 ; und_XI
+und_982 ; und_XJ
+und_983 ; und_XK
+und_984 ; und_XL
+und_985 ; und_XM
+und_986 ; und_XN
+und_987 ; und_XO
+und_988 ; und_XP
+und_989 ; und_XQ
+und_990 ; und_XR
+und_991 ; und_XS
+und_992 ; und_XT
+und_993 ; und_XU
+und_994 ; und_XV
+und_995 ; und_XW
+und_996 ; und_XX
+und_997 ; und_XY
+und_998 ; und_XZ
+und_999 ; und_ZZ
+und_AN ; und_CW
+und_BU ; und_MM
+und_CS ; und_RS
+und_CT ; und_KI
+und_DD ; und_DE
+und_DY ; und_BJ
+und_FQ ; und_AQ
+und_FX ; und_FR
+und_HV ; und_BF
+und_JT ; und_UM
+und_MI ; und_UM
+und_NH ; und_VU
+und_NQ ; und_AQ
+und_NT ; und_SA
+und_PC ; und_FM
+und_PU ; und_UM
+und_PZ ; und_PA
+und_QU ; und_EU
+und_Qaai ; und_Zinh
+und_RH ; und_ZW
+und_SU ; und_RU
+und_TP ; und_TL
+und_UK ; und_GB
+und_VD ; und_VN
+und_WK ; und_UM
+und_YD ; und_YE
+und_YU ; und_RS
+und_ZR ; und_CD
+und_aaland ; und_AX
+und_arevela ; und
+und_arevmda ; und
+und_bokmal ; und
+und_hakka ; und
+und_heploc ; und_alalc97
+und_lojban ; und
+und_nynorsk ; und
+und_polytoni ; und_polyton
+und_saaho ; und
+und_xiang ; und
+uok ; ema
+urd ; ur
+uzb ; uz
+uzn ; uz
+ven ; ve
+vie ; vi
+vol ; vo
+wel ; cy
+wln ; wa
+wol ; wo
+xba ; cax
+xho ; xh
+xia ; acn
+xkh ; waw
+xpe ; kpe
+xsj ; suj
+xsl ; den
+ybd ; rki
+ydd ; yi
+yid ; yi
+yma ; lrr
+ymt ; mtm
+yor ; yo
+yos ; zom
+yuu ; yug
+zai ; zap
+zh_guoyu ; zh
+zh_hakka ; hak
+zh_xiang ; hsn
+zha ; za
+zho ; zh
+zsm ; ms
+zul ; zu
+zyb ; za
+
+# decanonicalized
+
+aar_saaho ; ssy
+arm_arevela ; hy
+arm_arevela_arevmda ; hyw
+arm_arevmda ; hyw
+chi_guoyu ; zh
+chi_guoyu_hakka_xiang ; hak
+chi_hakka ; hak
+chi_hakka_xiang ; hak
+chi_xiang ; hsn
+cmn_guoyu ; zh
+cmn_guoyu_hakka_xiang ; hak
+cmn_hakka ; hak
+cmn_hakka_xiang ; hak
+cmn_xiang ; hsn
+en_840_aaland ; en_US
+en_840_heploc ; en_US_alalc97
+en_840_polytoni ; en_US_polyton
+eng_840_aaland ; en_US
+eng_840_heploc ; en_US_alalc97
+eng_840_polytoni ; en_US_polyton
+eng_US_aaland ; en_US
+eng_US_heploc ; en_US_alalc97
+eng_US_polytoni ; en_US_polyton
+eng_aaland ; en_AX
+eng_arevela ; en
+eng_arevela_arevmda ; en
+eng_lojban ; en
+hye_arevela ; hy
+hye_arevela_arevmda ; hyw
+sgn_076 ; bzs
+sgn_170 ; csn
+sgn_208 ; dsl
+sgn_249 ; fsl
+sgn_250 ; fsl
+sgn_276 ; gsg
+sgn_278 ; gsg
+sgn_280 ; gsg
+sgn_300 ; gss
+sgn_372 ; isg
+sgn_380 ; ise
+sgn_392 ; jsl
+sgn_484 ; mfs
+sgn_528 ; dse
+sgn_558 ; ncs
+sgn_578 ; nsi
+sgn_620 ; psr
+sgn_710 ; sfs
+sgn_752 ; swl
+sgn_826 ; bfi
+sgn_840 ; ase
+sgn_DD ; gsg
+sgn_FX ; fsl
+sgn_UK ; bfi
+zho_guoyu ; zh
+zho_guoyu_hakka_xiang ; hak
+zho_hakka ; hak
+zho_hakka_xiang ; hak
+zho_xiang ; hsn
+
+# withIrrelevants
+
+aa_Adlm_AC_fonipa_saaho ; ssy_Adlm_AC_fonipa
+aaa_Adlm_004_fonipa ; aaa_Adlm_AF_fonipa
+aaa_Adlm_008_fonipa ; aaa_Adlm_AL_fonipa
+aaa_Adlm_010_fonipa ; aaa_Adlm_AQ_fonipa
+aaa_Adlm_012_fonipa ; aaa_Adlm_DZ_fonipa
+aaa_Adlm_016_fonipa ; aaa_Adlm_AS_fonipa
+aaa_Adlm_020_fonipa ; aaa_Adlm_AD_fonipa
+aaa_Adlm_024_fonipa ; aaa_Adlm_AO_fonipa
+aaa_Adlm_028_fonipa ; aaa_Adlm_AG_fonipa
+aaa_Adlm_031_fonipa ; aaa_Adlm_AZ_fonipa
+aaa_Adlm_032_fonipa ; aaa_Adlm_AR_fonipa
+aaa_Adlm_036_fonipa ; aaa_Adlm_AU_fonipa
+aaa_Adlm_040_fonipa ; aaa_Adlm_AT_fonipa
+aaa_Adlm_044_fonipa ; aaa_Adlm_BS_fonipa
+aaa_Adlm_048_fonipa ; aaa_Adlm_BH_fonipa
+aaa_Adlm_050_fonipa ; aaa_Adlm_BD_fonipa
+aaa_Adlm_051_fonipa ; aaa_Adlm_AM_fonipa
+aaa_Adlm_052_fonipa ; aaa_Adlm_BB_fonipa
+aaa_Adlm_056_fonipa ; aaa_Adlm_BE_fonipa
+aaa_Adlm_060_fonipa ; aaa_Adlm_BM_fonipa
+aaa_Adlm_062_fonipa ; aaa_Adlm_034_fonipa
+aaa_Adlm_064_fonipa ; aaa_Adlm_BT_fonipa
+aaa_Adlm_068_fonipa ; aaa_Adlm_BO_fonipa
+aaa_Adlm_070_fonipa ; aaa_Adlm_BA_fonipa
+aaa_Adlm_072_fonipa ; aaa_Adlm_BW_fonipa
+aaa_Adlm_074_fonipa ; aaa_Adlm_BV_fonipa
+aaa_Adlm_076_fonipa ; aaa_Adlm_BR_fonipa
+aaa_Adlm_084_fonipa ; aaa_Adlm_BZ_fonipa
+aaa_Adlm_086_fonipa ; aaa_Adlm_IO_fonipa
+aaa_Adlm_090_fonipa ; aaa_Adlm_SB_fonipa
+aaa_Adlm_092_fonipa ; aaa_Adlm_VG_fonipa
+aaa_Adlm_096_fonipa ; aaa_Adlm_BN_fonipa
+aaa_Adlm_100_fonipa ; aaa_Adlm_BG_fonipa
+aaa_Adlm_104_fonipa ; aaa_Adlm_MM_fonipa
+aaa_Adlm_108_fonipa ; aaa_Adlm_BI_fonipa
+aaa_Adlm_112_fonipa ; aaa_Adlm_BY_fonipa
+aaa_Adlm_116_fonipa ; aaa_Adlm_KH_fonipa
+aaa_Adlm_120_fonipa ; aaa_Adlm_CM_fonipa
+aaa_Adlm_124_fonipa ; aaa_Adlm_CA_fonipa
+aaa_Adlm_132_fonipa ; aaa_Adlm_CV_fonipa
+aaa_Adlm_136_fonipa ; aaa_Adlm_KY_fonipa
+aaa_Adlm_140_fonipa ; aaa_Adlm_CF_fonipa
+aaa_Adlm_144_fonipa ; aaa_Adlm_LK_fonipa
+aaa_Adlm_148_fonipa ; aaa_Adlm_TD_fonipa
+aaa_Adlm_152_fonipa ; aaa_Adlm_CL_fonipa
+aaa_Adlm_156_fonipa ; aaa_Adlm_CN_fonipa
+aaa_Adlm_158_fonipa ; aaa_Adlm_TW_fonipa
+aaa_Adlm_162_fonipa ; aaa_Adlm_CX_fonipa
+aaa_Adlm_166_fonipa ; aaa_Adlm_CC_fonipa
+aaa_Adlm_170_fonipa ; aaa_Adlm_CO_fonipa
+aaa_Adlm_172_fonipa ; aaa_Adlm_RU_fonipa
+aaa_Adlm_174_fonipa ; aaa_Adlm_KM_fonipa
+aaa_Adlm_175_fonipa ; aaa_Adlm_YT_fonipa
+aaa_Adlm_178_fonipa ; aaa_Adlm_CG_fonipa
+aaa_Adlm_180_fonipa ; aaa_Adlm_CD_fonipa
+aaa_Adlm_184_fonipa ; aaa_Adlm_CK_fonipa
+aaa_Adlm_188_fonipa ; aaa_Adlm_CR_fonipa
+aaa_Adlm_191_fonipa ; aaa_Adlm_HR_fonipa
+aaa_Adlm_192_fonipa ; aaa_Adlm_CU_fonipa
+aaa_Adlm_196_fonipa ; aaa_Adlm_CY_fonipa
+aaa_Adlm_200_fonipa ; aaa_Adlm_CZ_fonipa
+aaa_Adlm_203_fonipa ; aaa_Adlm_CZ_fonipa
+aaa_Adlm_204_fonipa ; aaa_Adlm_BJ_fonipa
+aaa_Adlm_208_fonipa ; aaa_Adlm_DK_fonipa
+aaa_Adlm_212_fonipa ; aaa_Adlm_DM_fonipa
+aaa_Adlm_214_fonipa ; aaa_Adlm_DO_fonipa
+aaa_Adlm_218_fonipa ; aaa_Adlm_EC_fonipa
+aaa_Adlm_222_fonipa ; aaa_Adlm_SV_fonipa
+aaa_Adlm_226_fonipa ; aaa_Adlm_GQ_fonipa
+aaa_Adlm_230_fonipa ; aaa_Adlm_ET_fonipa
+aaa_Adlm_231_fonipa ; aaa_Adlm_ET_fonipa
+aaa_Adlm_232_fonipa ; aaa_Adlm_ER_fonipa
+aaa_Adlm_233_fonipa ; aaa_Adlm_EE_fonipa
+aaa_Adlm_234_fonipa ; aaa_Adlm_FO_fonipa
+aaa_Adlm_238_fonipa ; aaa_Adlm_FK_fonipa
+aaa_Adlm_239_fonipa ; aaa_Adlm_GS_fonipa
+aaa_Adlm_242_fonipa ; aaa_Adlm_FJ_fonipa
+aaa_Adlm_246_fonipa ; aaa_Adlm_FI_fonipa
+aaa_Adlm_248_fonipa ; aaa_Adlm_AX_fonipa
+aaa_Adlm_249_fonipa ; aaa_Adlm_FR_fonipa
+aaa_Adlm_250_fonipa ; aaa_Adlm_FR_fonipa
+aaa_Adlm_254_fonipa ; aaa_Adlm_GF_fonipa
+aaa_Adlm_258_fonipa ; aaa_Adlm_PF_fonipa
+aaa_Adlm_260_fonipa ; aaa_Adlm_TF_fonipa
+aaa_Adlm_262_fonipa ; aaa_Adlm_DJ_fonipa
+aaa_Adlm_266_fonipa ; aaa_Adlm_GA_fonipa
+aaa_Adlm_268_fonipa ; aaa_Adlm_GE_fonipa
+aaa_Adlm_270_fonipa ; aaa_Adlm_GM_fonipa
+aaa_Adlm_275_fonipa ; aaa_Adlm_PS_fonipa
+aaa_Adlm_276_fonipa ; aaa_Adlm_DE_fonipa
+aaa_Adlm_278_fonipa ; aaa_Adlm_DE_fonipa
+aaa_Adlm_280_fonipa ; aaa_Adlm_DE_fonipa
+aaa_Adlm_288_fonipa ; aaa_Adlm_GH_fonipa
+aaa_Adlm_292_fonipa ; aaa_Adlm_GI_fonipa
+aaa_Adlm_296_fonipa ; aaa_Adlm_KI_fonipa
+aaa_Adlm_300_fonipa ; aaa_Adlm_GR_fonipa
+aaa_Adlm_304_fonipa ; aaa_Adlm_GL_fonipa
+aaa_Adlm_308_fonipa ; aaa_Adlm_GD_fonipa
+aaa_Adlm_312_fonipa ; aaa_Adlm_GP_fonipa
+aaa_Adlm_316_fonipa ; aaa_Adlm_GU_fonipa
+aaa_Adlm_320_fonipa ; aaa_Adlm_GT_fonipa
+aaa_Adlm_324_fonipa ; aaa_Adlm_GN_fonipa
+aaa_Adlm_328_fonipa ; aaa_Adlm_GY_fonipa
+aaa_Adlm_332_fonipa ; aaa_Adlm_HT_fonipa
+aaa_Adlm_334_fonipa ; aaa_Adlm_HM_fonipa
+aaa_Adlm_336_fonipa ; aaa_Adlm_VA_fonipa
+aaa_Adlm_340_fonipa ; aaa_Adlm_HN_fonipa
+aaa_Adlm_344_fonipa ; aaa_Adlm_HK_fonipa
+aaa_Adlm_348_fonipa ; aaa_Adlm_HU_fonipa
+aaa_Adlm_352_fonipa ; aaa_Adlm_IS_fonipa
+aaa_Adlm_356_fonipa ; aaa_Adlm_IN_fonipa
+aaa_Adlm_360_fonipa ; aaa_Adlm_ID_fonipa
+aaa_Adlm_364_fonipa ; aaa_Adlm_IR_fonipa
+aaa_Adlm_368_fonipa ; aaa_Adlm_IQ_fonipa
+aaa_Adlm_372_fonipa ; aaa_Adlm_IE_fonipa
+aaa_Adlm_376_fonipa ; aaa_Adlm_IL_fonipa
+aaa_Adlm_380_fonipa ; aaa_Adlm_IT_fonipa
+aaa_Adlm_384_fonipa ; aaa_Adlm_CI_fonipa
+aaa_Adlm_388_fonipa ; aaa_Adlm_JM_fonipa
+aaa_Adlm_392_fonipa ; aaa_Adlm_JP_fonipa
+aaa_Adlm_398_fonipa ; aaa_Adlm_KZ_fonipa
+aaa_Adlm_400_fonipa ; aaa_Adlm_JO_fonipa
+aaa_Adlm_404_fonipa ; aaa_Adlm_KE_fonipa
+aaa_Adlm_408_fonipa ; aaa_Adlm_KP_fonipa
+aaa_Adlm_410_fonipa ; aaa_Adlm_KR_fonipa
+aaa_Adlm_414_fonipa ; aaa_Adlm_KW_fonipa
+aaa_Adlm_417_fonipa ; aaa_Adlm_KG_fonipa
+aaa_Adlm_418_fonipa ; aaa_Adlm_LA_fonipa
+aaa_Adlm_422_fonipa ; aaa_Adlm_LB_fonipa
+aaa_Adlm_426_fonipa ; aaa_Adlm_LS_fonipa
+aaa_Adlm_428_fonipa ; aaa_Adlm_LV_fonipa
+aaa_Adlm_430_fonipa ; aaa_Adlm_LR_fonipa
+aaa_Adlm_434_fonipa ; aaa_Adlm_LY_fonipa
+aaa_Adlm_438_fonipa ; aaa_Adlm_LI_fonipa
+aaa_Adlm_440_fonipa ; aaa_Adlm_LT_fonipa
+aaa_Adlm_442_fonipa ; aaa_Adlm_LU_fonipa
+aaa_Adlm_446_fonipa ; aaa_Adlm_MO_fonipa
+aaa_Adlm_450_fonipa ; aaa_Adlm_MG_fonipa
+aaa_Adlm_454_fonipa ; aaa_Adlm_MW_fonipa
+aaa_Adlm_458_fonipa ; aaa_Adlm_MY_fonipa
+aaa_Adlm_462_fonipa ; aaa_Adlm_MV_fonipa
+aaa_Adlm_466_fonipa ; aaa_Adlm_ML_fonipa
+aaa_Adlm_470_fonipa ; aaa_Adlm_MT_fonipa
+aaa_Adlm_474_fonipa ; aaa_Adlm_MQ_fonipa
+aaa_Adlm_478_fonipa ; aaa_Adlm_MR_fonipa
+aaa_Adlm_480_fonipa ; aaa_Adlm_MU_fonipa
+aaa_Adlm_484_fonipa ; aaa_Adlm_MX_fonipa
+aaa_Adlm_492_fonipa ; aaa_Adlm_MC_fonipa
+aaa_Adlm_496_fonipa ; aaa_Adlm_MN_fonipa
+aaa_Adlm_498_fonipa ; aaa_Adlm_MD_fonipa
+aaa_Adlm_499_fonipa ; aaa_Adlm_ME_fonipa
+aaa_Adlm_500_fonipa ; aaa_Adlm_MS_fonipa
+aaa_Adlm_504_fonipa ; aaa_Adlm_MA_fonipa
+aaa_Adlm_508_fonipa ; aaa_Adlm_MZ_fonipa
+aaa_Adlm_512_fonipa ; aaa_Adlm_OM_fonipa
+aaa_Adlm_516_fonipa ; aaa_Adlm_NA_fonipa
+aaa_Adlm_520_fonipa ; aaa_Adlm_NR_fonipa
+aaa_Adlm_524_fonipa ; aaa_Adlm_NP_fonipa
+aaa_Adlm_528_fonipa ; aaa_Adlm_NL_fonipa
+aaa_Adlm_530_fonipa ; aaa_Adlm_CW_fonipa
+aaa_Adlm_531_fonipa ; aaa_Adlm_CW_fonipa
+aaa_Adlm_532_fonipa ; aaa_Adlm_CW_fonipa
+aaa_Adlm_533_fonipa ; aaa_Adlm_AW_fonipa
+aaa_Adlm_534_fonipa ; aaa_Adlm_SX_fonipa
+aaa_Adlm_535_fonipa ; aaa_Adlm_BQ_fonipa
+aaa_Adlm_536_fonipa ; aaa_Adlm_SA_fonipa
+aaa_Adlm_540_fonipa ; aaa_Adlm_NC_fonipa
+aaa_Adlm_548_fonipa ; aaa_Adlm_VU_fonipa
+aaa_Adlm_554_fonipa ; aaa_Adlm_NZ_fonipa
+aaa_Adlm_558_fonipa ; aaa_Adlm_NI_fonipa
+aaa_Adlm_562_fonipa ; aaa_Adlm_NE_fonipa
+aaa_Adlm_566_fonipa ; aaa_Adlm_NG_fonipa
+aaa_Adlm_570_fonipa ; aaa_Adlm_NU_fonipa
+aaa_Adlm_574_fonipa ; aaa_Adlm_NF_fonipa
+aaa_Adlm_578_fonipa ; aaa_Adlm_NO_fonipa
+aaa_Adlm_580_fonipa ; aaa_Adlm_MP_fonipa
+aaa_Adlm_581_fonipa ; aaa_Adlm_UM_fonipa
+aaa_Adlm_582_fonipa ; aaa_Adlm_FM_fonipa
+aaa_Adlm_583_fonipa ; aaa_Adlm_FM_fonipa
+aaa_Adlm_584_fonipa ; aaa_Adlm_MH_fonipa
+aaa_Adlm_585_fonipa ; aaa_Adlm_PW_fonipa
+aaa_Adlm_586_fonipa ; aaa_Adlm_PK_fonipa
+aaa_Adlm_591_fonipa ; aaa_Adlm_PA_fonipa
+aaa_Adlm_598_fonipa ; aaa_Adlm_PG_fonipa
+aaa_Adlm_600_fonipa ; aaa_Adlm_PY_fonipa
+aaa_Adlm_604_fonipa ; aaa_Adlm_PE_fonipa
+aaa_Adlm_608_fonipa ; aaa_Adlm_PH_fonipa
+aaa_Adlm_612_fonipa ; aaa_Adlm_PN_fonipa
+aaa_Adlm_616_fonipa ; aaa_Adlm_PL_fonipa
+aaa_Adlm_620_fonipa ; aaa_Adlm_PT_fonipa
+aaa_Adlm_624_fonipa ; aaa_Adlm_GW_fonipa
+aaa_Adlm_626_fonipa ; aaa_Adlm_TL_fonipa
+aaa_Adlm_630_fonipa ; aaa_Adlm_PR_fonipa
+aaa_Adlm_634_fonipa ; aaa_Adlm_QA_fonipa
+aaa_Adlm_638_fonipa ; aaa_Adlm_RE_fonipa
+aaa_Adlm_642_fonipa ; aaa_Adlm_RO_fonipa
+aaa_Adlm_643_fonipa ; aaa_Adlm_RU_fonipa
+aaa_Adlm_646_fonipa ; aaa_Adlm_RW_fonipa
+aaa_Adlm_652_fonipa ; aaa_Adlm_BL_fonipa
+aaa_Adlm_654_fonipa ; aaa_Adlm_SH_fonipa
+aaa_Adlm_659_fonipa ; aaa_Adlm_KN_fonipa
+aaa_Adlm_660_fonipa ; aaa_Adlm_AI_fonipa
+aaa_Adlm_662_fonipa ; aaa_Adlm_LC_fonipa
+aaa_Adlm_663_fonipa ; aaa_Adlm_MF_fonipa
+aaa_Adlm_666_fonipa ; aaa_Adlm_PM_fonipa
+aaa_Adlm_670_fonipa ; aaa_Adlm_VC_fonipa
+aaa_Adlm_674_fonipa ; aaa_Adlm_SM_fonipa
+aaa_Adlm_678_fonipa ; aaa_Adlm_ST_fonipa
+aaa_Adlm_682_fonipa ; aaa_Adlm_SA_fonipa
+aaa_Adlm_686_fonipa ; aaa_Adlm_SN_fonipa
+aaa_Adlm_688_fonipa ; aaa_Adlm_RS_fonipa
+aaa_Adlm_690_fonipa ; aaa_Adlm_SC_fonipa
+aaa_Adlm_694_fonipa ; aaa_Adlm_SL_fonipa
+aaa_Adlm_702_fonipa ; aaa_Adlm_SG_fonipa
+aaa_Adlm_703_fonipa ; aaa_Adlm_SK_fonipa
+aaa_Adlm_704_fonipa ; aaa_Adlm_VN_fonipa
+aaa_Adlm_705_fonipa ; aaa_Adlm_SI_fonipa
+aaa_Adlm_706_fonipa ; aaa_Adlm_SO_fonipa
+aaa_Adlm_710_fonipa ; aaa_Adlm_ZA_fonipa
+aaa_Adlm_716_fonipa ; aaa_Adlm_ZW_fonipa
+aaa_Adlm_720_fonipa ; aaa_Adlm_YE_fonipa
+aaa_Adlm_724_fonipa ; aaa_Adlm_ES_fonipa
+aaa_Adlm_728_fonipa ; aaa_Adlm_SS_fonipa
+aaa_Adlm_729_fonipa ; aaa_Adlm_SD_fonipa
+aaa_Adlm_732_fonipa ; aaa_Adlm_EH_fonipa
+aaa_Adlm_736_fonipa ; aaa_Adlm_SD_fonipa
+aaa_Adlm_740_fonipa ; aaa_Adlm_SR_fonipa
+aaa_Adlm_744_fonipa ; aaa_Adlm_SJ_fonipa
+aaa_Adlm_748_fonipa ; aaa_Adlm_SZ_fonipa
+aaa_Adlm_752_fonipa ; aaa_Adlm_SE_fonipa
+aaa_Adlm_756_fonipa ; aaa_Adlm_CH_fonipa
+aaa_Adlm_760_fonipa ; aaa_Adlm_SY_fonipa
+aaa_Adlm_762_fonipa ; aaa_Adlm_TJ_fonipa
+aaa_Adlm_764_fonipa ; aaa_Adlm_TH_fonipa
+aaa_Adlm_768_fonipa ; aaa_Adlm_TG_fonipa
+aaa_Adlm_772_fonipa ; aaa_Adlm_TK_fonipa
+aaa_Adlm_776_fonipa ; aaa_Adlm_TO_fonipa
+aaa_Adlm_780_fonipa ; aaa_Adlm_TT_fonipa
+aaa_Adlm_784_fonipa ; aaa_Adlm_AE_fonipa
+aaa_Adlm_788_fonipa ; aaa_Adlm_TN_fonipa
+aaa_Adlm_792_fonipa ; aaa_Adlm_TR_fonipa
+aaa_Adlm_795_fonipa ; aaa_Adlm_TM_fonipa
+aaa_Adlm_796_fonipa ; aaa_Adlm_TC_fonipa
+aaa_Adlm_798_fonipa ; aaa_Adlm_TV_fonipa
+aaa_Adlm_800_fonipa ; aaa_Adlm_UG_fonipa
+aaa_Adlm_804_fonipa ; aaa_Adlm_UA_fonipa
+aaa_Adlm_807_fonipa ; aaa_Adlm_MK_fonipa
+aaa_Adlm_810_fonipa ; aaa_Adlm_RU_fonipa
+aaa_Adlm_818_fonipa ; aaa_Adlm_EG_fonipa
+aaa_Adlm_826_fonipa ; aaa_Adlm_GB_fonipa
+aaa_Adlm_830_fonipa ; aaa_Adlm_JE_fonipa
+aaa_Adlm_831_fonipa ; aaa_Adlm_GG_fonipa
+aaa_Adlm_832_fonipa ; aaa_Adlm_JE_fonipa
+aaa_Adlm_833_fonipa ; aaa_Adlm_IM_fonipa
+aaa_Adlm_834_fonipa ; aaa_Adlm_TZ_fonipa
+aaa_Adlm_840_fonipa ; aaa_Adlm_US_fonipa
+aaa_Adlm_850_fonipa ; aaa_Adlm_VI_fonipa
+aaa_Adlm_854_fonipa ; aaa_Adlm_BF_fonipa
+aaa_Adlm_858_fonipa ; aaa_Adlm_UY_fonipa
+aaa_Adlm_860_fonipa ; aaa_Adlm_UZ_fonipa
+aaa_Adlm_862_fonipa ; aaa_Adlm_VE_fonipa
+aaa_Adlm_876_fonipa ; aaa_Adlm_WF_fonipa
+aaa_Adlm_882_fonipa ; aaa_Adlm_WS_fonipa
+aaa_Adlm_886_fonipa ; aaa_Adlm_YE_fonipa
+aaa_Adlm_887_fonipa ; aaa_Adlm_YE_fonipa
+aaa_Adlm_890_fonipa ; aaa_Adlm_RS_fonipa
+aaa_Adlm_891_fonipa ; aaa_Adlm_RS_fonipa
+aaa_Adlm_894_fonipa ; aaa_Adlm_ZM_fonipa
+aaa_Adlm_958_fonipa ; aaa_Adlm_AA_fonipa
+aaa_Adlm_959_fonipa ; aaa_Adlm_QM_fonipa
+aaa_Adlm_960_fonipa ; aaa_Adlm_QN_fonipa
+aaa_Adlm_962_fonipa ; aaa_Adlm_QP_fonipa
+aaa_Adlm_963_fonipa ; aaa_Adlm_QQ_fonipa
+aaa_Adlm_964_fonipa ; aaa_Adlm_QR_fonipa
+aaa_Adlm_965_fonipa ; aaa_Adlm_QS_fonipa
+aaa_Adlm_966_fonipa ; aaa_Adlm_QT_fonipa
+aaa_Adlm_967_fonipa ; aaa_Adlm_EU_fonipa
+aaa_Adlm_968_fonipa ; aaa_Adlm_QV_fonipa
+aaa_Adlm_969_fonipa ; aaa_Adlm_QW_fonipa
+aaa_Adlm_970_fonipa ; aaa_Adlm_QX_fonipa
+aaa_Adlm_971_fonipa ; aaa_Adlm_QY_fonipa
+aaa_Adlm_972_fonipa ; aaa_Adlm_QZ_fonipa
+aaa_Adlm_973_fonipa ; aaa_Adlm_XA_fonipa
+aaa_Adlm_974_fonipa ; aaa_Adlm_XB_fonipa
+aaa_Adlm_975_fonipa ; aaa_Adlm_XC_fonipa
+aaa_Adlm_976_fonipa ; aaa_Adlm_XD_fonipa
+aaa_Adlm_977_fonipa ; aaa_Adlm_XE_fonipa
+aaa_Adlm_978_fonipa ; aaa_Adlm_XF_fonipa
+aaa_Adlm_979_fonipa ; aaa_Adlm_XG_fonipa
+aaa_Adlm_980_fonipa ; aaa_Adlm_XH_fonipa
+aaa_Adlm_981_fonipa ; aaa_Adlm_XI_fonipa
+aaa_Adlm_982_fonipa ; aaa_Adlm_XJ_fonipa
+aaa_Adlm_983_fonipa ; aaa_Adlm_XK_fonipa
+aaa_Adlm_984_fonipa ; aaa_Adlm_XL_fonipa
+aaa_Adlm_985_fonipa ; aaa_Adlm_XM_fonipa
+aaa_Adlm_986_fonipa ; aaa_Adlm_XN_fonipa
+aaa_Adlm_987_fonipa ; aaa_Adlm_XO_fonipa
+aaa_Adlm_988_fonipa ; aaa_Adlm_XP_fonipa
+aaa_Adlm_989_fonipa ; aaa_Adlm_XQ_fonipa
+aaa_Adlm_990_fonipa ; aaa_Adlm_XR_fonipa
+aaa_Adlm_991_fonipa ; aaa_Adlm_XS_fonipa
+aaa_Adlm_992_fonipa ; aaa_Adlm_XT_fonipa
+aaa_Adlm_993_fonipa ; aaa_Adlm_XU_fonipa
+aaa_Adlm_994_fonipa ; aaa_Adlm_XV_fonipa
+aaa_Adlm_995_fonipa ; aaa_Adlm_XW_fonipa
+aaa_Adlm_996_fonipa ; aaa_Adlm_XX_fonipa
+aaa_Adlm_997_fonipa ; aaa_Adlm_XY_fonipa
+aaa_Adlm_998_fonipa ; aaa_Adlm_XZ_fonipa
+aaa_Adlm_999_fonipa ; aaa_Adlm_ZZ_fonipa
+aaa_Adlm_AC_aaland_fonipa ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_arevela_fonipa ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_arevmda_fonipa ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_bokmal_fonipa ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_fonipa_hakka ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_fonipa_heploc ; aaa_Adlm_AC_alalc97_fonipa
+aaa_Adlm_AC_fonipa_lojban ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_fonipa_nynorsk ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_fonipa_polytoni ; aaa_Adlm_AC_fonipa_polyton
+aaa_Adlm_AC_fonipa_saaho ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AC_fonipa_xiang ; aaa_Adlm_AC_fonipa
+aaa_Adlm_AN_fonipa ; aaa_Adlm_CW_fonipa
+aaa_Adlm_BU_fonipa ; aaa_Adlm_MM_fonipa
+aaa_Adlm_CS_fonipa ; aaa_Adlm_RS_fonipa
+aaa_Adlm_CT_fonipa ; aaa_Adlm_KI_fonipa
+aaa_Adlm_DD_fonipa ; aaa_Adlm_DE_fonipa
+aaa_Adlm_DY_fonipa ; aaa_Adlm_BJ_fonipa
+aaa_Adlm_FQ_fonipa ; aaa_Adlm_AQ_fonipa
+aaa_Adlm_FX_fonipa ; aaa_Adlm_FR_fonipa
+aaa_Adlm_HV_fonipa ; aaa_Adlm_BF_fonipa
+aaa_Adlm_JT_fonipa ; aaa_Adlm_UM_fonipa
+aaa_Adlm_MI_fonipa ; aaa_Adlm_UM_fonipa
+aaa_Adlm_NH_fonipa ; aaa_Adlm_VU_fonipa
+aaa_Adlm_NQ_fonipa ; aaa_Adlm_AQ_fonipa
+aaa_Adlm_NT_fonipa ; aaa_Adlm_SA_fonipa
+aaa_Adlm_PC_fonipa ; aaa_Adlm_FM_fonipa
+aaa_Adlm_PU_fonipa ; aaa_Adlm_UM_fonipa
+aaa_Adlm_PZ_fonipa ; aaa_Adlm_PA_fonipa
+aaa_Adlm_QU_fonipa ; aaa_Adlm_EU_fonipa
+aaa_Adlm_RH_fonipa ; aaa_Adlm_ZW_fonipa
+aaa_Adlm_SU_fonipa ; aaa_Adlm_RU_fonipa
+aaa_Adlm_TP_fonipa ; aaa_Adlm_TL_fonipa
+aaa_Adlm_UK_fonipa ; aaa_Adlm_GB_fonipa
+aaa_Adlm_VD_fonipa ; aaa_Adlm_VN_fonipa
+aaa_Adlm_WK_fonipa ; aaa_Adlm_UM_fonipa
+aaa_Adlm_YD_fonipa ; aaa_Adlm_YE_fonipa
+aaa_Adlm_YU_fonipa ; aaa_Adlm_RS_fonipa
+aaa_Adlm_ZR_fonipa ; aaa_Adlm_CD_fonipa
+aaa_Qaai_AC_fonipa ; aaa_Zinh_AC_fonipa
+aam_Adlm_AC_fonipa ; aas_Adlm_AC_fonipa
+aar_Adlm_AC_fonipa ; aa_Adlm_AC_fonipa
+aar_Adlm_AC_fonipa_saaho ; ssy_Adlm_AC_fonipa
+abk_Adlm_AC_fonipa ; ab_Adlm_AC_fonipa
+adp_Adlm_AC_fonipa ; dz_Adlm_AC_fonipa
+afr_Adlm_AC_fonipa ; af_Adlm_AC_fonipa
+aju_Adlm_AC_fonipa ; jrb_Adlm_AC_fonipa
+aka_Adlm_AC_fonipa ; ak_Adlm_AC_fonipa
+alb_Adlm_AC_fonipa ; sq_Adlm_AC_fonipa
+als_Adlm_AC_fonipa ; sq_Adlm_AC_fonipa
+amh_Adlm_AC_fonipa ; am_Adlm_AC_fonipa
+ara_Adlm_AC_fonipa ; ar_Adlm_AC_fonipa
+arb_Adlm_AC_fonipa ; ar_Adlm_AC_fonipa
+arg_Adlm_AC_fonipa ; an_Adlm_AC_fonipa
+arm_Adlm_AC_arevela_arevmda_fonipa ; hyw_Adlm_AC_fonipa
+arm_Adlm_AC_arevela_fonipa ; hy_Adlm_AC_fonipa
+arm_Adlm_AC_arevmda_fonipa ; hyw_Adlm_AC_fonipa
+arm_Adlm_AC_fonipa ; hy_Adlm_AC_fonipa
+art_Adlm_AC_fonipa_lojban ; jbo_Adlm_AC_fonipa
+asd_Adlm_AC_fonipa ; snz_Adlm_AC_fonipa
+asm_Adlm_AC_fonipa ; as_Adlm_AC_fonipa
+aue_Adlm_AC_fonipa ; ktz_Adlm_AC_fonipa
+ava_Adlm_AC_fonipa ; av_Adlm_AC_fonipa
+ave_Adlm_AC_fonipa ; ae_Adlm_AC_fonipa
+aym_Adlm_AC_fonipa ; ay_Adlm_AC_fonipa
+ayr_Adlm_AC_fonipa ; ay_Adlm_AC_fonipa
+ayx_Adlm_AC_fonipa ; nun_Adlm_AC_fonipa
+aze_Adlm_AC_fonipa ; az_Adlm_AC_fonipa
+azj_Adlm_AC_fonipa ; az_Adlm_AC_fonipa
+bak_Adlm_AC_fonipa ; ba_Adlm_AC_fonipa
+bam_Adlm_AC_fonipa ; bm_Adlm_AC_fonipa
+baq_Adlm_AC_fonipa ; eu_Adlm_AC_fonipa
+bcc_Adlm_AC_fonipa ; bal_Adlm_AC_fonipa
+bcl_Adlm_AC_fonipa ; bik_Adlm_AC_fonipa
+bel_Adlm_AC_fonipa ; be_Adlm_AC_fonipa
+ben_Adlm_AC_fonipa ; bn_Adlm_AC_fonipa
+bgm_Adlm_AC_fonipa ; bcg_Adlm_AC_fonipa
+bh_Adlm_AC_fonipa ; bho_Adlm_AC_fonipa
+bih_Adlm_AC_fonipa ; bho_Adlm_AC_fonipa
+bis_Adlm_AC_fonipa ; bi_Adlm_AC_fonipa
+bjd_Adlm_AC_fonipa ; drl_Adlm_AC_fonipa
+bod_Adlm_AC_fonipa ; bo_Adlm_AC_fonipa
+bos_Adlm_AC_fonipa ; bs_Adlm_AC_fonipa
+bre_Adlm_AC_fonipa ; br_Adlm_AC_fonipa
+bul_Adlm_AC_fonipa ; bg_Adlm_AC_fonipa
+bur_Adlm_AC_fonipa ; my_Adlm_AC_fonipa
+bxk_Adlm_AC_fonipa ; luy_Adlm_AC_fonipa
+bxr_Adlm_AC_fonipa ; bua_Adlm_AC_fonipa
+cat_Adlm_AC_fonipa ; ca_Adlm_AC_fonipa
+ccq_Adlm_AC_fonipa ; rki_Adlm_AC_fonipa
+cel_Adlm_AC_fonipa_gaulish ; xtg_Adlm_AC_fonipa
+ces_Adlm_AC_fonipa ; cs_Adlm_AC_fonipa
+cha_Adlm_AC_fonipa ; ch_Adlm_AC_fonipa
+che_Adlm_AC_fonipa ; ce_Adlm_AC_fonipa
+chi_Adlm_AC_fonipa ; zh_Adlm_AC_fonipa
+chi_Adlm_AC_fonipa_guoyu ; zh_Adlm_AC_fonipa
+chi_Adlm_AC_fonipa_guoyu_hakka_xiang ; hak_Adlm_AC_fonipa
+chi_Adlm_AC_fonipa_hakka ; hak_Adlm_AC_fonipa
+chi_Adlm_AC_fonipa_hakka_xiang ; hak_Adlm_AC_fonipa
+chi_Adlm_AC_fonipa_xiang ; hsn_Adlm_AC_fonipa
+chu_Adlm_AC_fonipa ; cu_Adlm_AC_fonipa
+chv_Adlm_AC_fonipa ; cv_Adlm_AC_fonipa
+cjr_Adlm_AC_fonipa ; mom_Adlm_AC_fonipa
+cka_Adlm_AC_fonipa ; cmr_Adlm_AC_fonipa
+cld_Adlm_AC_fonipa ; syr_Adlm_AC_fonipa
+cmk_Adlm_AC_fonipa ; xch_Adlm_AC_fonipa
+cmn_Adlm_AC_fonipa ; zh_Adlm_AC_fonipa
+cmn_Adlm_AC_fonipa_guoyu ; zh_Adlm_AC_fonipa
+cmn_Adlm_AC_fonipa_guoyu_hakka_xiang ; hak_Adlm_AC_fonipa
+cmn_Adlm_AC_fonipa_hakka ; hak_Adlm_AC_fonipa
+cmn_Adlm_AC_fonipa_hakka_xiang ; hak_Adlm_AC_fonipa
+cmn_Adlm_AC_fonipa_xiang ; hsn_Adlm_AC_fonipa
+cnr_Adlm_AC_fonipa ; sr_Adlm_AC_fonipa
+cor_Adlm_AC_fonipa ; kw_Adlm_AC_fonipa
+cos_Adlm_AC_fonipa ; co_Adlm_AC_fonipa
+coy_Adlm_AC_fonipa ; pij_Adlm_AC_fonipa
+cqu_Adlm_AC_fonipa ; quh_Adlm_AC_fonipa
+cre_Adlm_AC_fonipa ; cr_Adlm_AC_fonipa
+cwd_Adlm_AC_fonipa ; cr_Adlm_AC_fonipa
+cym_Adlm_AC_fonipa ; cy_Adlm_AC_fonipa
+cze_Adlm_AC_fonipa ; cs_Adlm_AC_fonipa
+dan_Adlm_AC_fonipa ; da_Adlm_AC_fonipa
+deu_Adlm_AC_fonipa ; de_Adlm_AC_fonipa
+dgo_Adlm_AC_fonipa ; doi_Adlm_AC_fonipa
+dhd_Adlm_AC_fonipa ; mwr_Adlm_AC_fonipa
+dik_Adlm_AC_fonipa ; din_Adlm_AC_fonipa
+diq_Adlm_AC_fonipa ; zza_Adlm_AC_fonipa
+dit_Adlm_AC_fonipa ; dif_Adlm_AC_fonipa
+div_Adlm_AC_fonipa ; dv_Adlm_AC_fonipa
+drh_Adlm_AC_fonipa ; mn_Adlm_AC_fonipa
+drw_Adlm_AC_fonipa ; fa_Adlm_AC_fonipa
+dut_Adlm_AC_fonipa ; nl_Adlm_AC_fonipa
+dzo_Adlm_AC_fonipa ; dz_Adlm_AC_fonipa
+ekk_Adlm_AC_fonipa ; et_Adlm_AC_fonipa
+ell_Adlm_AC_fonipa ; el_Adlm_AC_fonipa
+emk_Adlm_AC_fonipa ; man_Adlm_AC_fonipa
+en_Adlm_840_aaland_fonipa ; en_Adlm_US_fonipa
+en_Adlm_840_fonipa_heploc ; en_Adlm_US_alalc97_fonipa
+en_Adlm_840_fonipa_polytoni ; en_Adlm_US_fonipa_polyton
+en_Adlm_AC_aaland_fonipa ; en_Adlm_AC_fonipa
+en_Adlm_AC_arevela_arevmda_fonipa ; en_Adlm_AC_fonipa
+en_Adlm_AC_arevela_fonipa ; en_Adlm_AC_fonipa
+en_Adlm_AC_fonipa_lojban ; en_Adlm_AC_fonipa
+en_Adlm_US_aaland_fonipa ; en_Adlm_US_fonipa
+en_Adlm_US_fonipa_heploc ; en_Adlm_US_alalc97_fonipa
+en_Adlm_US_fonipa_polytoni ; en_Adlm_US_fonipa_polyton
+eng_Adlm_840_aaland_fonipa ; en_Adlm_US_fonipa
+eng_Adlm_840_fonipa_heploc ; en_Adlm_US_alalc97_fonipa
+eng_Adlm_840_fonipa_polytoni ; en_Adlm_US_fonipa_polyton
+eng_Adlm_AC_aaland_fonipa ; en_Adlm_AC_fonipa
+eng_Adlm_AC_arevela_arevmda_fonipa ; en_Adlm_AC_fonipa
+eng_Adlm_AC_arevela_fonipa ; en_Adlm_AC_fonipa
+eng_Adlm_AC_fonipa ; en_Adlm_AC_fonipa
+eng_Adlm_AC_fonipa_lojban ; en_Adlm_AC_fonipa
+eng_Adlm_US_aaland_fonipa ; en_Adlm_US_fonipa
+eng_Adlm_US_fonipa_heploc ; en_Adlm_US_alalc97_fonipa
+eng_Adlm_US_fonipa_polytoni ; en_Adlm_US_fonipa_polyton
+epo_Adlm_AC_fonipa ; eo_Adlm_AC_fonipa
+esk_Adlm_AC_fonipa ; ik_Adlm_AC_fonipa
+est_Adlm_AC_fonipa ; et_Adlm_AC_fonipa
+eus_Adlm_AC_fonipa ; eu_Adlm_AC_fonipa
+ewe_Adlm_AC_fonipa ; ee_Adlm_AC_fonipa
+fao_Adlm_AC_fonipa ; fo_Adlm_AC_fonipa
+fas_Adlm_AC_fonipa ; fa_Adlm_AC_fonipa
+fat_Adlm_AC_fonipa ; ak_Adlm_AC_fonipa
+fij_Adlm_AC_fonipa ; fj_Adlm_AC_fonipa
+fin_Adlm_AC_fonipa ; fi_Adlm_AC_fonipa
+fra_Adlm_AC_fonipa ; fr_Adlm_AC_fonipa
+fre_Adlm_AC_fonipa ; fr_Adlm_AC_fonipa
+fry_Adlm_AC_fonipa ; fy_Adlm_AC_fonipa
+fuc_Adlm_AC_fonipa ; ff_Adlm_AC_fonipa
+ful_Adlm_AC_fonipa ; ff_Adlm_AC_fonipa
+gav_Adlm_AC_fonipa ; dev_Adlm_AC_fonipa
+gaz_Adlm_AC_fonipa ; om_Adlm_AC_fonipa
+gbo_Adlm_AC_fonipa ; grb_Adlm_AC_fonipa
+geo_Adlm_AC_fonipa ; ka_Adlm_AC_fonipa
+ger_Adlm_AC_fonipa ; de_Adlm_AC_fonipa
+gfx_Adlm_AC_fonipa ; vaj_Adlm_AC_fonipa
+ggn_Adlm_AC_fonipa ; gvr_Adlm_AC_fonipa
+gla_Adlm_AC_fonipa ; gd_Adlm_AC_fonipa
+gle_Adlm_AC_fonipa ; ga_Adlm_AC_fonipa
+glg_Adlm_AC_fonipa ; gl_Adlm_AC_fonipa
+glv_Adlm_AC_fonipa ; gv_Adlm_AC_fonipa
+gno_Adlm_AC_fonipa ; gon_Adlm_AC_fonipa
+gre_Adlm_AC_fonipa ; el_Adlm_AC_fonipa
+grn_Adlm_AC_fonipa ; gn_Adlm_AC_fonipa
+gti_Adlm_AC_fonipa ; nyc_Adlm_AC_fonipa
+gug_Adlm_AC_fonipa ; gn_Adlm_AC_fonipa
+guj_Adlm_AC_fonipa ; gu_Adlm_AC_fonipa
+guv_Adlm_AC_fonipa ; duz_Adlm_AC_fonipa
+gya_Adlm_AC_fonipa ; gba_Adlm_AC_fonipa
+hat_Adlm_AC_fonipa ; ht_Adlm_AC_fonipa
+hau_Adlm_AC_fonipa ; ha_Adlm_AC_fonipa
+hbs_Adlm_AC_fonipa ; sr_Adlm_AC_fonipa
+hdn_Adlm_AC_fonipa ; hai_Adlm_AC_fonipa
+hea_Adlm_AC_fonipa ; hmn_Adlm_AC_fonipa
+heb_Adlm_AC_fonipa ; he_Adlm_AC_fonipa
+her_Adlm_AC_fonipa ; hz_Adlm_AC_fonipa
+him_Adlm_AC_fonipa ; srx_Adlm_AC_fonipa
+hin_Adlm_AC_fonipa ; hi_Adlm_AC_fonipa
+hmo_Adlm_AC_fonipa ; ho_Adlm_AC_fonipa
+hrr_Adlm_AC_fonipa ; jal_Adlm_AC_fonipa
+hrv_Adlm_AC_fonipa ; hr_Adlm_AC_fonipa
+hun_Adlm_AC_fonipa ; hu_Adlm_AC_fonipa
+hy_Adlm_AC_arevela_arevmda_fonipa ; hyw_Adlm_AC_fonipa
+hy_Adlm_AC_arevela_fonipa ; hy_Adlm_AC_fonipa
+hy_Adlm_AC_arevmda_fonipa ; hyw_Adlm_AC_fonipa
+hye_Adlm_AC_arevela_arevmda_fonipa ; hyw_Adlm_AC_fonipa
+hye_Adlm_AC_arevela_fonipa ; hy_Adlm_AC_fonipa
+hye_Adlm_AC_arevmda_fonipa ; hyw_Adlm_AC_fonipa
+hye_Adlm_AC_fonipa ; hy_Adlm_AC_fonipa
+ibi_Adlm_AC_fonipa ; opa_Adlm_AC_fonipa
+ibo_Adlm_AC_fonipa ; ig_Adlm_AC_fonipa
+ice_Adlm_AC_fonipa ; is_Adlm_AC_fonipa
+ido_Adlm_AC_fonipa ; io_Adlm_AC_fonipa
+iii_Adlm_AC_fonipa ; ii_Adlm_AC_fonipa
+ike_Adlm_AC_fonipa ; iu_Adlm_AC_fonipa
+iku_Adlm_AC_fonipa ; iu_Adlm_AC_fonipa
+ile_Adlm_AC_fonipa ; ie_Adlm_AC_fonipa
+ilw_Adlm_AC_fonipa ; gal_Adlm_AC_fonipa
+in_Adlm_AC_fonipa ; id_Adlm_AC_fonipa
+ina_Adlm_AC_fonipa ; ia_Adlm_AC_fonipa
+ind_Adlm_AC_fonipa ; id_Adlm_AC_fonipa
+ipk_Adlm_AC_fonipa ; ik_Adlm_AC_fonipa
+isl_Adlm_AC_fonipa ; is_Adlm_AC_fonipa
+ita_Adlm_AC_fonipa ; it_Adlm_AC_fonipa
+iw_Adlm_AC_fonipa ; he_Adlm_AC_fonipa
+jav_Adlm_AC_fonipa ; jv_Adlm_AC_fonipa
+jeg_Adlm_AC_fonipa ; oyb_Adlm_AC_fonipa
+ji_Adlm_AC_fonipa ; yi_Adlm_AC_fonipa
+jpn_Adlm_AC_fonipa ; ja_Adlm_AC_fonipa
+jw_Adlm_AC_fonipa ; jv_Adlm_AC_fonipa
+kal_Adlm_AC_fonipa ; kl_Adlm_AC_fonipa
+kan_Adlm_AC_fonipa ; kn_Adlm_AC_fonipa
+kas_Adlm_AC_fonipa ; ks_Adlm_AC_fonipa
+kat_Adlm_AC_fonipa ; ka_Adlm_AC_fonipa
+kau_Adlm_AC_fonipa ; kr_Adlm_AC_fonipa
+kaz_Adlm_AC_fonipa ; kk_Adlm_AC_fonipa
+kgc_Adlm_AC_fonipa ; tdf_Adlm_AC_fonipa
+kgh_Adlm_AC_fonipa ; kml_Adlm_AC_fonipa
+khk_Adlm_AC_fonipa ; mn_Adlm_AC_fonipa
+khm_Adlm_AC_fonipa ; km_Adlm_AC_fonipa
+kik_Adlm_AC_fonipa ; ki_Adlm_AC_fonipa
+kin_Adlm_AC_fonipa ; rw_Adlm_AC_fonipa
+kir_Adlm_AC_fonipa ; ky_Adlm_AC_fonipa
+kmr_Adlm_AC_fonipa ; ku_Adlm_AC_fonipa
+knc_Adlm_AC_fonipa ; kr_Adlm_AC_fonipa
+kng_Adlm_AC_fonipa ; kg_Adlm_AC_fonipa
+knn_Adlm_AC_fonipa ; kok_Adlm_AC_fonipa
+koj_Adlm_AC_fonipa ; kwv_Adlm_AC_fonipa
+kom_Adlm_AC_fonipa ; kv_Adlm_AC_fonipa
+kon_Adlm_AC_fonipa ; kg_Adlm_AC_fonipa
+kor_Adlm_AC_fonipa ; ko_Adlm_AC_fonipa
+kpv_Adlm_AC_fonipa ; kv_Adlm_AC_fonipa
+krm_Adlm_AC_fonipa ; bmf_Adlm_AC_fonipa
+ktr_Adlm_AC_fonipa ; dtp_Adlm_AC_fonipa
+kua_Adlm_AC_fonipa ; kj_Adlm_AC_fonipa
+kur_Adlm_AC_fonipa ; ku_Adlm_AC_fonipa
+kvs_Adlm_AC_fonipa ; gdj_Adlm_AC_fonipa
+kwq_Adlm_AC_fonipa ; yam_Adlm_AC_fonipa
+kxe_Adlm_AC_fonipa ; tvd_Adlm_AC_fonipa
+kzj_Adlm_AC_fonipa ; dtp_Adlm_AC_fonipa
+kzt_Adlm_AC_fonipa ; dtp_Adlm_AC_fonipa
+lao_Adlm_AC_fonipa ; lo_Adlm_AC_fonipa
+lat_Adlm_AC_fonipa ; la_Adlm_AC_fonipa
+lav_Adlm_AC_fonipa ; lv_Adlm_AC_fonipa
+lbk_Adlm_AC_fonipa ; bnc_Adlm_AC_fonipa
+lii_Adlm_AC_fonipa ; raq_Adlm_AC_fonipa
+lim_Adlm_AC_fonipa ; li_Adlm_AC_fonipa
+lin_Adlm_AC_fonipa ; ln_Adlm_AC_fonipa
+lit_Adlm_AC_fonipa ; lt_Adlm_AC_fonipa
+llo_Adlm_AC_fonipa ; ngt_Adlm_AC_fonipa
+lmm_Adlm_AC_fonipa ; rmx_Adlm_AC_fonipa
+ltz_Adlm_AC_fonipa ; lb_Adlm_AC_fonipa
+lub_Adlm_AC_fonipa ; lu_Adlm_AC_fonipa
+lug_Adlm_AC_fonipa ; lg_Adlm_AC_fonipa
+lvs_Adlm_AC_fonipa ; lv_Adlm_AC_fonipa
+mac_Adlm_AC_fonipa ; mk_Adlm_AC_fonipa
+mah_Adlm_AC_fonipa ; mh_Adlm_AC_fonipa
+mal_Adlm_AC_fonipa ; ml_Adlm_AC_fonipa
+mao_Adlm_AC_fonipa ; mi_Adlm_AC_fonipa
+mar_Adlm_AC_fonipa ; mr_Adlm_AC_fonipa
+may_Adlm_AC_fonipa ; ms_Adlm_AC_fonipa
+meg_Adlm_AC_fonipa ; cir_Adlm_AC_fonipa
+mhr_Adlm_AC_fonipa ; chm_Adlm_AC_fonipa
+mkd_Adlm_AC_fonipa ; mk_Adlm_AC_fonipa
+mlg_Adlm_AC_fonipa ; mg_Adlm_AC_fonipa
+mlt_Adlm_AC_fonipa ; mt_Adlm_AC_fonipa
+mnk_Adlm_AC_fonipa ; man_Adlm_AC_fonipa
+mo_Adlm_AC_fonipa ; ro_Adlm_AC_fonipa
+mol_Adlm_AC_fonipa ; ro_Adlm_AC_fonipa
+mon_Adlm_AC_fonipa ; mn_Adlm_AC_fonipa
+mri_Adlm_AC_fonipa ; mi_Adlm_AC_fonipa
+msa_Adlm_AC_fonipa ; ms_Adlm_AC_fonipa
+mst_Adlm_AC_fonipa ; mry_Adlm_AC_fonipa
+mup_Adlm_AC_fonipa ; raj_Adlm_AC_fonipa
+mwj_Adlm_AC_fonipa ; vaj_Adlm_AC_fonipa
+mya_Adlm_AC_fonipa ; my_Adlm_AC_fonipa
+myd_Adlm_AC_fonipa ; aog_Adlm_AC_fonipa
+myt_Adlm_AC_fonipa ; mry_Adlm_AC_fonipa
+nad_Adlm_AC_fonipa ; xny_Adlm_AC_fonipa
+nau_Adlm_AC_fonipa ; na_Adlm_AC_fonipa
+nav_Adlm_AC_fonipa ; nv_Adlm_AC_fonipa
+nbl_Adlm_AC_fonipa ; nr_Adlm_AC_fonipa
+ncp_Adlm_AC_fonipa ; kdz_Adlm_AC_fonipa
+nde_Adlm_AC_fonipa ; nd_Adlm_AC_fonipa
+ndo_Adlm_AC_fonipa ; ng_Adlm_AC_fonipa
+nep_Adlm_AC_fonipa ; ne_Adlm_AC_fonipa
+nld_Adlm_AC_fonipa ; nl_Adlm_AC_fonipa
+nno_Adlm_AC_fonipa ; nn_Adlm_AC_fonipa
+nns_Adlm_AC_fonipa ; nbr_Adlm_AC_fonipa
+nnx_Adlm_AC_fonipa ; ngv_Adlm_AC_fonipa
+no_Adlm_AC_bokmal_fonipa ; nb_Adlm_AC_fonipa
+no_Adlm_AC_bokmal_fonipa_nynorsk ; nb_Adlm_AC_fonipa
+no_Adlm_AC_fonipa ; nb_Adlm_AC_fonipa
+no_Adlm_AC_fonipa_nynorsk ; nn_Adlm_AC_fonipa
+nob_Adlm_AC_fonipa ; nb_Adlm_AC_fonipa
+nor_Adlm_AC_fonipa ; nb_Adlm_AC_fonipa
+npi_Adlm_AC_fonipa ; ne_Adlm_AC_fonipa
+nts_Adlm_AC_fonipa ; pij_Adlm_AC_fonipa
+nya_Adlm_AC_fonipa ; ny_Adlm_AC_fonipa
+oci_Adlm_AC_fonipa ; oc_Adlm_AC_fonipa
+ojg_Adlm_AC_fonipa ; oj_Adlm_AC_fonipa
+oji_Adlm_AC_fonipa ; oj_Adlm_AC_fonipa
+ori_Adlm_AC_fonipa ; or_Adlm_AC_fonipa
+orm_Adlm_AC_fonipa ; om_Adlm_AC_fonipa
+ory_Adlm_AC_fonipa ; or_Adlm_AC_fonipa
+oss_Adlm_AC_fonipa ; os_Adlm_AC_fonipa
+oun_Adlm_AC_fonipa ; vaj_Adlm_AC_fonipa
+pan_Adlm_AC_fonipa ; pa_Adlm_AC_fonipa
+pbu_Adlm_AC_fonipa ; ps_Adlm_AC_fonipa
+pcr_Adlm_AC_fonipa ; adx_Adlm_AC_fonipa
+per_Adlm_AC_fonipa ; fa_Adlm_AC_fonipa
+pes_Adlm_AC_fonipa ; fa_Adlm_AC_fonipa
+pli_Adlm_AC_fonipa ; pi_Adlm_AC_fonipa
+plt_Adlm_AC_fonipa ; mg_Adlm_AC_fonipa
+pmc_Adlm_AC_fonipa ; huw_Adlm_AC_fonipa
+pmu_Adlm_AC_fonipa ; phr_Adlm_AC_fonipa
+pnb_Adlm_AC_fonipa ; lah_Adlm_AC_fonipa
+pol_Adlm_AC_fonipa ; pl_Adlm_AC_fonipa
+por_Adlm_AC_fonipa ; pt_Adlm_AC_fonipa
+ppa_Adlm_AC_fonipa ; bfy_Adlm_AC_fonipa
+ppr_Adlm_AC_fonipa ; lcq_Adlm_AC_fonipa
+prs_Adlm_AC_fonipa ; fa_Adlm_AC_fonipa
+pry_Adlm_AC_fonipa ; prt_Adlm_AC_fonipa
+pus_Adlm_AC_fonipa ; ps_Adlm_AC_fonipa
+puz_Adlm_AC_fonipa ; pub_Adlm_AC_fonipa
+que_Adlm_AC_fonipa ; qu_Adlm_AC_fonipa
+quz_Adlm_AC_fonipa ; qu_Adlm_AC_fonipa
+rmy_Adlm_AC_fonipa ; rom_Adlm_AC_fonipa
+roh_Adlm_AC_fonipa ; rm_Adlm_AC_fonipa
+ron_Adlm_AC_fonipa ; ro_Adlm_AC_fonipa
+rum_Adlm_AC_fonipa ; ro_Adlm_AC_fonipa
+run_Adlm_AC_fonipa ; rn_Adlm_AC_fonipa
+rus_Adlm_AC_fonipa ; ru_Adlm_AC_fonipa
+sag_Adlm_AC_fonipa ; sg_Adlm_AC_fonipa
+san_Adlm_AC_fonipa ; sa_Adlm_AC_fonipa
+sca_Adlm_AC_fonipa ; hle_Adlm_AC_fonipa
+scc_Adlm_AC_fonipa ; sr_Adlm_AC_fonipa
+scr_Adlm_AC_fonipa ; hr_Adlm_AC_fonipa
+sgn_Adlm_076_fonipa ; bzs_Adlm_fonipa
+sgn_Adlm_170_fonipa ; csn_Adlm_fonipa
+sgn_Adlm_208_fonipa ; dsl_Adlm_fonipa
+sgn_Adlm_249_fonipa ; fsl_Adlm_fonipa
+sgn_Adlm_250_fonipa ; fsl_Adlm_fonipa
+sgn_Adlm_276_fonipa ; gsg_Adlm_fonipa
+sgn_Adlm_278_fonipa ; gsg_Adlm_fonipa
+sgn_Adlm_280_fonipa ; gsg_Adlm_fonipa
+sgn_Adlm_300_fonipa ; gss_Adlm_fonipa
+sgn_Adlm_372_fonipa ; isg_Adlm_fonipa
+sgn_Adlm_380_fonipa ; ise_Adlm_fonipa
+sgn_Adlm_392_fonipa ; jsl_Adlm_fonipa
+sgn_Adlm_484_fonipa ; mfs_Adlm_fonipa
+sgn_Adlm_528_fonipa ; dse_Adlm_fonipa
+sgn_Adlm_558_fonipa ; ncs_Adlm_fonipa
+sgn_Adlm_578_fonipa ; nsi_Adlm_fonipa
+sgn_Adlm_620_fonipa ; psr_Adlm_fonipa
+sgn_Adlm_710_fonipa ; sfs_Adlm_fonipa
+sgn_Adlm_752_fonipa ; swl_Adlm_fonipa
+sgn_Adlm_826_fonipa ; bfi_Adlm_fonipa
+sgn_Adlm_840_fonipa ; ase_Adlm_fonipa
+sgn_Adlm_BR_fonipa ; bzs_Adlm_fonipa
+sgn_Adlm_CO_fonipa ; csn_Adlm_fonipa
+sgn_Adlm_DD_fonipa ; gsg_Adlm_fonipa
+sgn_Adlm_DE_fonipa ; gsg_Adlm_fonipa
+sgn_Adlm_DK_fonipa ; dsl_Adlm_fonipa
+sgn_Adlm_FR_fonipa ; fsl_Adlm_fonipa
+sgn_Adlm_FX_fonipa ; fsl_Adlm_fonipa
+sgn_Adlm_GB_fonipa ; bfi_Adlm_fonipa
+sgn_Adlm_GR_fonipa ; gss_Adlm_fonipa
+sgn_Adlm_IE_fonipa ; isg_Adlm_fonipa
+sgn_Adlm_IT_fonipa ; ise_Adlm_fonipa
+sgn_Adlm_JP_fonipa ; jsl_Adlm_fonipa
+sgn_Adlm_MX_fonipa ; mfs_Adlm_fonipa
+sgn_Adlm_NI_fonipa ; ncs_Adlm_fonipa
+sgn_Adlm_NL_fonipa ; dse_Adlm_fonipa
+sgn_Adlm_NO_fonipa ; nsi_Adlm_fonipa
+sgn_Adlm_PT_fonipa ; psr_Adlm_fonipa
+sgn_Adlm_SE_fonipa ; swl_Adlm_fonipa
+sgn_Adlm_UK_fonipa ; bfi_Adlm_fonipa
+sgn_Adlm_US_fonipa ; ase_Adlm_fonipa
+sgn_Adlm_ZA_fonipa ; sfs_Adlm_fonipa
+sh_Adlm_AC_fonipa ; sr_Adlm_AC_fonipa
+sin_Adlm_AC_fonipa ; si_Adlm_AC_fonipa
+skk_Adlm_AC_fonipa ; oyb_Adlm_AC_fonipa
+slk_Adlm_AC_fonipa ; sk_Adlm_AC_fonipa
+slo_Adlm_AC_fonipa ; sk_Adlm_AC_fonipa
+slv_Adlm_AC_fonipa ; sl_Adlm_AC_fonipa
+sme_Adlm_AC_fonipa ; se_Adlm_AC_fonipa
+smo_Adlm_AC_fonipa ; sm_Adlm_AC_fonipa
+sna_Adlm_AC_fonipa ; sn_Adlm_AC_fonipa
+snd_Adlm_AC_fonipa ; sd_Adlm_AC_fonipa
+som_Adlm_AC_fonipa ; so_Adlm_AC_fonipa
+sot_Adlm_AC_fonipa ; st_Adlm_AC_fonipa
+spa_Adlm_AC_fonipa ; es_Adlm_AC_fonipa
+spy_Adlm_AC_fonipa ; kln_Adlm_AC_fonipa
+sqi_Adlm_AC_fonipa ; sq_Adlm_AC_fonipa
+src_Adlm_AC_fonipa ; sc_Adlm_AC_fonipa
+srd_Adlm_AC_fonipa ; sc_Adlm_AC_fonipa
+srp_Adlm_AC_fonipa ; sr_Adlm_AC_fonipa
+ssw_Adlm_AC_fonipa ; ss_Adlm_AC_fonipa
+sun_Adlm_AC_fonipa ; su_Adlm_AC_fonipa
+swa_Adlm_AC_fonipa ; sw_Adlm_AC_fonipa
+swc_Adlm_AC_fonipa ; sw_Adlm_AC_fonipa
+swe_Adlm_AC_fonipa ; sv_Adlm_AC_fonipa
+swh_Adlm_AC_fonipa ; sw_Adlm_AC_fonipa
+tah_Adlm_AC_fonipa ; ty_Adlm_AC_fonipa
+tam_Adlm_AC_fonipa ; ta_Adlm_AC_fonipa
+tat_Adlm_AC_fonipa ; tt_Adlm_AC_fonipa
+tdu_Adlm_AC_fonipa ; dtp_Adlm_AC_fonipa
+tel_Adlm_AC_fonipa ; te_Adlm_AC_fonipa
+tgk_Adlm_AC_fonipa ; tg_Adlm_AC_fonipa
+tgl_Adlm_AC_fonipa ; fil_Adlm_AC_fonipa
+tha_Adlm_AC_fonipa ; th_Adlm_AC_fonipa
+thc_Adlm_AC_fonipa ; tpo_Adlm_AC_fonipa
+thx_Adlm_AC_fonipa ; oyb_Adlm_AC_fonipa
+tib_Adlm_AC_fonipa ; bo_Adlm_AC_fonipa
+tie_Adlm_AC_fonipa ; ras_Adlm_AC_fonipa
+tir_Adlm_AC_fonipa ; ti_Adlm_AC_fonipa
+tkk_Adlm_AC_fonipa ; twm_Adlm_AC_fonipa
+tl_Adlm_AC_fonipa ; fil_Adlm_AC_fonipa
+tlw_Adlm_AC_fonipa ; weo_Adlm_AC_fonipa
+tmp_Adlm_AC_fonipa ; tyj_Adlm_AC_fonipa
+tne_Adlm_AC_fonipa ; kak_Adlm_AC_fonipa
+tnf_Adlm_AC_fonipa ; fa_Adlm_AC_fonipa
+ton_Adlm_AC_fonipa ; to_Adlm_AC_fonipa
+tsf_Adlm_AC_fonipa ; taj_Adlm_AC_fonipa
+tsn_Adlm_AC_fonipa ; tn_Adlm_AC_fonipa
+tso_Adlm_AC_fonipa ; ts_Adlm_AC_fonipa
+ttq_Adlm_AC_fonipa ; tmh_Adlm_AC_fonipa
+tuk_Adlm_AC_fonipa ; tk_Adlm_AC_fonipa
+tur_Adlm_AC_fonipa ; tr_Adlm_AC_fonipa
+tw_Adlm_AC_fonipa ; ak_Adlm_AC_fonipa
+twi_Adlm_AC_fonipa ; ak_Adlm_AC_fonipa
+uig_Adlm_AC_fonipa ; ug_Adlm_AC_fonipa
+ukr_Adlm_AC_fonipa ; uk_Adlm_AC_fonipa
+umu_Adlm_AC_fonipa ; del_Adlm_AC_fonipa
+uok_Adlm_AC_fonipa ; ema_Adlm_AC_fonipa
+urd_Adlm_AC_fonipa ; ur_Adlm_AC_fonipa
+uzb_Adlm_AC_fonipa ; uz_Adlm_AC_fonipa
+uzn_Adlm_AC_fonipa ; uz_Adlm_AC_fonipa
+ven_Adlm_AC_fonipa ; ve_Adlm_AC_fonipa
+vie_Adlm_AC_fonipa ; vi_Adlm_AC_fonipa
+vol_Adlm_AC_fonipa ; vo_Adlm_AC_fonipa
+wel_Adlm_AC_fonipa ; cy_Adlm_AC_fonipa
+wln_Adlm_AC_fonipa ; wa_Adlm_AC_fonipa
+wol_Adlm_AC_fonipa ; wo_Adlm_AC_fonipa
+xba_Adlm_AC_fonipa ; cax_Adlm_AC_fonipa
+xho_Adlm_AC_fonipa ; xh_Adlm_AC_fonipa
+xia_Adlm_AC_fonipa ; acn_Adlm_AC_fonipa
+xkh_Adlm_AC_fonipa ; waw_Adlm_AC_fonipa
+xpe_Adlm_AC_fonipa ; kpe_Adlm_AC_fonipa
+xsj_Adlm_AC_fonipa ; suj_Adlm_AC_fonipa
+xsl_Adlm_AC_fonipa ; den_Adlm_AC_fonipa
+ybd_Adlm_AC_fonipa ; rki_Adlm_AC_fonipa
+ydd_Adlm_AC_fonipa ; yi_Adlm_AC_fonipa
+yid_Adlm_AC_fonipa ; yi_Adlm_AC_fonipa
+yma_Adlm_AC_fonipa ; lrr_Adlm_AC_fonipa
+ymt_Adlm_AC_fonipa ; mtm_Adlm_AC_fonipa
+yor_Adlm_AC_fonipa ; yo_Adlm_AC_fonipa
+yos_Adlm_AC_fonipa ; zom_Adlm_AC_fonipa
+yuu_Adlm_AC_fonipa ; yug_Adlm_AC_fonipa
+zai_Adlm_AC_fonipa ; zap_Adlm_AC_fonipa
+zh_Adlm_AC_fonipa_guoyu ; zh_Adlm_AC_fonipa
+zh_Adlm_AC_fonipa_guoyu_hakka_xiang ; hak_Adlm_AC_fonipa
+zh_Adlm_AC_fonipa_hakka ; hak_Adlm_AC_fonipa
+zh_Adlm_AC_fonipa_hakka_xiang ; hak_Adlm_AC_fonipa
+zh_Adlm_AC_fonipa_xiang ; hsn_Adlm_AC_fonipa
+zha_Adlm_AC_fonipa ; za_Adlm_AC_fonipa
+zho_Adlm_AC_fonipa ; zh_Adlm_AC_fonipa
+zho_Adlm_AC_fonipa_guoyu ; zh_Adlm_AC_fonipa
+zho_Adlm_AC_fonipa_guoyu_hakka_xiang ; hak_Adlm_AC_fonipa
+zho_Adlm_AC_fonipa_hakka ; hak_Adlm_AC_fonipa
+zho_Adlm_AC_fonipa_hakka_xiang ; hak_Adlm_AC_fonipa
+zho_Adlm_AC_fonipa_xiang ; hsn_Adlm_AC_fonipa
+zsm_Adlm_AC_fonipa ; ms_Adlm_AC_fonipa
+zul_Adlm_AC_fonipa ; zu_Adlm_AC_fonipa
+zyb_Adlm_AC_fonipa ; za_Adlm_AC_fonipa
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt
index 21c9b601410..6d21303fe2d 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt
@@ -1,5 +1,5 @@
# © 2017 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html#License
+# License & terms of use: http://www.unicode.org/copyright.html
#
# Data-driven test for the language/locale matcher.
# Format:
@@ -279,7 +279,7 @@ und-TW >> zh-Hant
zh-Hant >> und-TW
zh >> und-TW
-** test: testMatchGrandfatheredCode
+** test: testMatchLegacyCode
@supported=fr, i-klingon, en-Latn-US
en-GB-oed >> en-Latn-US
@@ -733,7 +733,7 @@ ja >> fr
@favor=script
en-GB >> en-GB
en-US >> en
-fr >> en-GB
+fr >> en
ja >> fr
** test: testEmptyWithDefault
@@ -761,8 +761,8 @@ en-GB >> en-GB
en-US >> en
fr-FR >> fr
ja-JP >> fr
+zu >> en
# For a language that doesn't match anything, return the default.
-zu >> en-GB
zxx >> fr
@favor=script
@@ -770,7 +770,7 @@ en-GB >> en-GB
en-US >> en
fr-FR >> fr
ja-JP >> fr
-zu >> en-GB
+zu >> en
zxx >> en
** test: TestExactMatch
@@ -984,7 +984,7 @@ x-bork >> x-bork
x-piglatin >> x-bork
x-bork >> x-bork
-** test: MatchGrandfatheredCode
+** test: MatchLegacyCode
@supported=fr, i-klingon, en-Latn-US
en-GB-oed >> en-Latn-US
i-klingon >> tlh
@@ -1052,9 +1052,9 @@ en >> en-DE
ar-EG >> ar-SY
pt-BR >> pt
ar-XB >> ar-XB
-ar-PSBIDI >> ar-XB # These are equivalent.
+ar-PSBIDI >> ar-PSBIDI
en-XA >> en-XA
-en-PSACCENT >> en-XA # These are equivalent.
+en-PSACCENT >> en-PSACCENT
ar-PSCRACK >> ar-PSCRACK
@favor=script
@@ -1063,9 +1063,9 @@ en >> en-DE
ar-EG >> ar-SY
pt-BR >> pt
ar-XB >> ar-XB
-ar-PSBIDI >> ar-XB # These are equivalent.
+ar-PSBIDI >> ar-PSBIDI
en-XA >> en-XA
-en-PSACCENT >> en-XA # These are equivalent.
+en-PSACCENT >> en-PSACCENT
ar-PSCRACK >> ar-PSCRACK
** test: BestMatchForTraditionalChinese
@@ -1322,7 +1322,7 @@ en >> en-US
@favor=script
und >> und
ja >> und
-fr-CA >> en-GB
+fr-CA >> en-US
en-AU >> en-GB
en-BZ >> en-GB
en-CA >> en-GB
@@ -1359,8 +1359,8 @@ fr >> und
@supported=en-GB, en-US, en, en-AU
und >> und
ja >> und
-fr-CA >> en-GB
-fr >> en-GB
+fr-CA >> en-US
+fr >> en-US
@supported=en-AU, ja, ca
fr >> en-AU
@supported=pl, ja, ca
@@ -1464,10 +1464,10 @@ da >> no
@supported=en, nb
da >> nb
-** test: prefer matching languages over language variants.
+** test: prefer matching languages over language variants. Get en-GB, should get nn?
@supported=nn, en-GB
-no, en-US >> nn
-nb, en-US >> nn
+no, en-US >> en-GB
+nb, en-US >> en-GB
@favor=script
no, en-US >> nn
@@ -1525,7 +1525,7 @@ en >> null
x-piglatin >> fr
x-bork >> x-bork
-** test: grandfathered codes
+** test: legacy codes
@supported=fr, i-klingon, en-Latn-US
en-GB-oed >> en-Latn-US
i-klingon >> tlh
@@ -1544,50 +1544,44 @@ zh-TW, en >> en-US
zh-Hant-CN, en >> en-US
zh-Hans, en >> zh-Hans-CN
-** test: return first among likely-subtags equivalent locales
-# Was: more specific script should win in case regions are identical
-# with some different results.
+** test: return most originally similar among likely-subtags equivalent locales
@supported=af, af-Latn, af-Arab
af >> af
af-ZA >> af
-af-Latn-ZA >> af
-af-Latn >> af
+af-Latn-ZA >> af-Latn
+af-Latn >> af-Latn
@favor=script
af >> af
af-ZA >> af
-af-Latn-ZA >> af
-af-Latn >> af
+af-Latn-ZA >> af-Latn
+af-Latn >> af-Latn
-# Was: more specific region should win
-# with some different results.
@supported=nl, nl-NL, nl-BE
@favor=
nl >> nl
nl-Latn >> nl
-nl-Latn-NL >> nl
-nl-NL >> nl
+nl-Latn-NL >> nl-NL
+nl-NL >> nl-NL
@favor=script
nl >> nl
nl-Latn >> nl
-nl-Latn-NL >> nl
-nl-NL >> nl
+nl-Latn-NL >> nl-NL
+nl-NL >> nl-NL
-# Was: more specific region wins over more specific script
-# with some different results.
@supported=nl, nl-Latn, nl-NL, nl-BE
@favor=
nl >> nl
-nl-Latn >> nl
-nl-NL >> nl
-nl-Latn-NL >> nl
+nl-Latn >> nl-Latn
+nl-NL >> nl-NL
+nl-Latn-NL >> nl-Latn
@favor=script
nl >> nl
-nl-Latn >> nl
-nl-NL >> nl
-nl-Latn-NL >> nl
+nl-Latn >> nl-Latn
+nl-NL >> nl-NL
+nl-Latn-NL >> nl-Latn
** test: region may replace matched if matched is enclosing
@supported=es-419, es
@@ -1670,22 +1664,22 @@ ja-Jpan-JP, en-GB >> ja
** test: pick best maximized tag
@supported=ja, ja-Jpan-US, ja-JP, en, ru
ja-Jpan, ru >> ja
-ja-JP, ru >> ja
+ja-JP, ru >> ja-JP
ja-US, ru >> ja-Jpan-US
@favor=script
ja-Jpan, ru >> ja
-ja-JP, ru >> ja
+ja-JP, ru >> ja-JP
ja-US, ru >> ja-Jpan-US
** test: termination: pick best maximized match
@supported=ja, ja-Jpan, ja-JP, en, ru
-ja-Jpan-JP, ru >> ja
-ja-Jpan, ru >> ja
+ja-Jpan-JP, ru >> ja-Jpan
+ja-Jpan, ru >> ja-Jpan
@favor=script
-ja-Jpan-JP, ru >> ja
-ja-Jpan, ru >> ja
+ja-Jpan-JP, ru >> ja-Jpan
+ja-Jpan, ru >> ja-Jpan
** test: same language over exact, but distinguish when user is explicit
@supported=fr, en-GB, ja, es-ES, es-MX
@@ -1900,14 +1894,14 @@ zh-TW >> zh
** test: testGetBestMatchWithMinMatchScore
@supported=fr-FR, fr, fr-CA, en
@default=und
-fr >> fr-FR # First likely-subtags equivalent match is chosen.
+fr >> fr
@supported=en, fr, fr-CA
fr-FR >> fr # Parent match is chosen.
@supported=en, fr-CA
fr-FR >> fr-CA # Sibling match is chosen.
@supported=fr-CA, fr-FR
fr >> fr-FR # Inferred region match is chosen.
-fr-SN >> fr-CA
+fr-SN >> fr-FR
@supported=en, fr-FR
fr >> fr-FR # Child match is chosen.
@supported=de, en, it
@@ -1930,14 +1924,14 @@ ru >> und
@favor=script
@supported=fr-FR, fr, fr-CA, en
-fr >> fr-FR
+fr >> fr
@supported=en, fr, fr-CA
fr-FR >> fr
@supported=en, fr-CA
fr-FR >> fr-CA
@supported=fr-CA, fr-FR
fr >> fr-FR
-fr-SN >> fr-CA
+fr-SN >> fr-FR
@supported=en, fr-FR
fr >> fr-FR
@supported=de, en, it
@@ -1957,3 +1951,10 @@ ru >> uk
zh-CN >> zh-TW
@supported=ja
ru >> und
+
+** test: favor a more-default locale among equally imperfect matches
+@supported=fr-CA, fr-CH, fr-FR, fr-GB
+fr-SN >> fr-FR
+@supported=sr-Latn, sr-Cyrl, sr-Grek
+@threshold=60
+sr-Thai >> sr-Cyrl
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt
index b9c8558d1e6..9767baa8f8f 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt
@@ -3,31 +3,31 @@
compact-short percent unit-width-narrow
es-MX
- 0 %
- 92 k
- -0.22 %
+ 0%
+ 92 k%
+ -0.22%
zh-TW
0%
- 9.2è¬
+ 9.2è¬%
-0.22%
bn-BD
০%
- ৯২ হা
+ ৯২ হা%
-০.২২%
compact-short percent unit-width-full-name
es-MX
- 0 %
- 92 k
- -0.22 %
+ 0 por ciento
+ 92 k por ciento
+ -0.22 por ciento
zh-TW
0%
- 9.2è¬
+ 9.2è¬%
-0.22%
bn-BD
- ০%
- ৯২ হা
- -০.২২%
+ ০শতাংশ
+ ৯২ হাশতাংশ
+ -০.২২শতাংশ
compact-short currency/EUR unit-width-narrow
es-MX
@@ -73,9 +73,9 @@ compact-short measure-unit/length-furlong unit-width-narrow
compact-short measure-unit/length-furlong unit-width-full-name
es-MX
- 0 fur
- 92 k fur
- -0.22 fur
+ 0 furlongs
+ 92 k furlongs
+ -0.22 furlongs
zh-TW
0 化朗
9.2è¬ åŒ–æœ—
@@ -101,17 +101,17 @@ scientific/+ee/sign-always percent unit-width-narrow
scientific/+ee/sign-always percent unit-width-full-name
es-MX
- 0E+00 %
- 9.182736E+04 %
- -2.2222E-01 %
+ 0E+00 por ciento
+ 9.182736E+04 por ciento
+ -2.2222E-01 por ciento
zh-TW
0E+00%
9.182736E+04%
-2.2222E-01%
bn-BD
- ০E+০০%
- ৯.১৮২৭৩৬E+০৪%
- -২.২২২২E-০১%
+ ০E+০০শতাংশ
+ ৯.১৮২৭৩৬E+০৪শতাংশ
+ -২.২২২২E-০১শতাংশ
scientific/+ee/sign-always currency/EUR unit-width-narrow
es-MX
@@ -157,9 +157,9 @@ scientific/+ee/sign-always measure-unit/length-furlong unit-width-narrow
scientific/+ee/sign-always measure-unit/length-furlong unit-width-full-name
es-MX
- 0E+00 fur
- 9.182736E+04 fur
- -2.2222E-01 fur
+ 0E+00 furlongs
+ 9.182736E+04 furlongs
+ -2.2222E-01 furlongs
zh-TW
0E+00 化朗
9.182736E+04 化朗
@@ -172,57 +172,57 @@ scientific/+ee/sign-always measure-unit/length-furlong unit-width-full-name
compact-short percent precision-integer
es-MX
0 %
- 92 k
+ 92 k %
-0 %
zh-TW
0%
- 9è¬
+ 9è¬%
-0%
bn-BD
০%
- ৯২ হা
+ ৯২ হা%
-০%
compact-short percent .000
es-MX
0.000 %
- 91.827 k
+ 91.827 k %
-0.222 %
zh-TW
0.000%
- 9.183è¬
+ 9.183è¬%
-0.222%
bn-BD
০.০০০%
- ৯১.৮২৭ হা
+ ৯১.৮২৭ হা%
-০.২২২%
compact-short percent .##/@@@+
es-MX
0 %
- 91.83 k
+ 91.83 k %
-0.222 %
zh-TW
0%
- 9.18è¬
+ 9.18è¬%
-0.222%
bn-BD
০%
- ৯১.৮৩ হা
+ ৯১.৮৩ হা%
-০.২২২%
compact-short percent @@
es-MX
0.0 %
- 92 k
+ 92 k %
-0.22 %
zh-TW
0.0%
- 9.2è¬
+ 9.2è¬%
-0.22%
bn-BD
০.০%
- ৯২ হা
+ ৯২ হা%
-০.২২%
compact-short currency/EUR precision-integer
@@ -508,15 +508,15 @@ scientific/+ee/sign-always measure-unit/length-furlong @@
compact-short percent rounding-mode-floor
es-MX
0 %
- 91 k
+ 91 k %
-0.23 %
zh-TW
0%
- 9.1è¬
+ 9.1è¬%
-0.23%
bn-BD
০%
- ৯১ হা
+ ৯১ হা%
-০.২৩%
compact-short currency/EUR rounding-mode-floor
@@ -592,15 +592,15 @@ scientific/+ee/sign-always measure-unit/length-furlong rounding-mode-floor
compact-short percent integer-width/##00
es-MX
00 %
- 92 k
+ 92 k %
-00.22 %
zh-TW
00%
- 09.2è¬
+ 09.2è¬%
-00.22%
bn-BD
০০%
- ৯২ হা
+ ৯২ হা%
-০০.২২%
compact-short currency/EUR integer-width/##00
@@ -676,15 +676,15 @@ scientific/+ee/sign-always measure-unit/length-furlong integer-width/##00
compact-short percent scale/0.5
es-MX
0 %
- 46 k
+ 46 k %
-0.11 %
zh-TW
0%
- 4.6è¬
+ 4.6è¬%
-0.11%
bn-BD
০%
- ৪৬ হা
+ ৪৬ হা%
-০.১১%
compact-short currency/EUR scale/0.5
@@ -760,15 +760,15 @@ scientific/+ee/sign-always measure-unit/length-furlong scale/0.5
compact-short percent group-on-aligned
es-MX
0 %
- 92 k
+ 92 k %
-0.22 %
zh-TW
0%
- 9.2è¬
+ 9.2è¬%
-0.22%
bn-BD
০%
- ৯২ হা
+ ৯২ হা%
-০.২২%
compact-short currency/EUR group-on-aligned
@@ -844,15 +844,15 @@ scientific/+ee/sign-always measure-unit/length-furlong group-on-aligned
compact-short percent latin
es-MX
0 %
- 92 k
+ 92 k %
-0.22 %
zh-TW
0%
- 9.2è¬
+ 9.2è¬%
-0.22%
bn-BD
0%
- 92 হা
+ 92 হা%
-0.22%
compact-short currency/EUR latin
@@ -928,15 +928,15 @@ scientific/+ee/sign-always measure-unit/length-furlong latin
compact-short percent sign-accounting-except-zero
es-MX
0 %
- +92 k
+ +92 k %
-0.22 %
zh-TW
0%
- +9.2è¬
+ +9.2è¬%
-0.22%
bn-BD
০%
- +৯২ হা
+ +৯২ হা%
-০.২২%
compact-short currency/EUR sign-accounting-except-zero
@@ -951,7 +951,7 @@ compact-short currency/EUR sign-accounting-except-zero
bn-BD
০€
+৯২ হা€
- (০.২২ €)
+ (০.২২€)
compact-short measure-unit/length-furlong sign-accounting-except-zero
es-MX
@@ -993,7 +993,7 @@ scientific/+ee/sign-always currency/EUR sign-accounting-except-zero
bn-BD
০.০০E+০০€
+৯.১৮E+০৪€
- (২.২২E-০১ €)
+ (২.২২E-০১€)
scientific/+ee/sign-always measure-unit/length-furlong sign-accounting-except-zero
es-MX
@@ -1012,15 +1012,15 @@ scientific/+ee/sign-always measure-unit/length-furlong sign-accounting-except-ze
compact-short percent decimal-always
es-MX
0. %
- 92. k
+ 92. k %
-0.22 %
zh-TW
0.%
- 9.2è¬
+ 9.2è¬%
-0.22%
bn-BD
০.%
- ৯২. হা
+ ৯২. হা%
-০.২২%
compact-short currency/EUR decimal-always
@@ -2273,15 +2273,15 @@ compact-short precision-integer sign-accounting-except-zero
es-MX
0
+92 k
- -0
+ 0
zh-TW
0
+9è¬
- -0
+ 0
bn-BD
০
+৯২ হা
- -০
+ ০
compact-short .000 sign-accounting-except-zero
es-MX
@@ -3139,59 +3139,59 @@ percent unit-width-narrow @@
percent unit-width-full-name precision-integer
es-MX
- 0 %
- 91,827 %
- -0 %
+ 0 por ciento
+ 91,827 por ciento
+ -0 por ciento
zh-TW
0%
91,827%
-0%
bn-BD
- ০%
- ৯১,৮২৭%
- -০%
+ ০শতাংশ
+ ৯১,৮২৭শতাংশ
+ -০শতাংশ
percent unit-width-full-name .000
es-MX
- 0.000 %
- 91,827.364 %
- -0.222 %
+ 0.000 por ciento
+ 91,827.364 por ciento
+ -0.222 por ciento
zh-TW
0.000%
91,827.364%
-0.222%
bn-BD
- ০.০০০%
- ৯১,৮২৭.৩৬৪%
- -০.২২২%
+ ০.০০০শতাংশ
+ ৯১,৮২৭.৩৬৪শতাংশ
+ -০.২২২শতাংশ
percent unit-width-full-name .##/@@@+
es-MX
- 0 %
- 91,827.36 %
- -0.222 %
+ 0 por ciento
+ 91,827.36 por ciento
+ -0.222 por ciento
zh-TW
0%
91,827.36%
-0.222%
bn-BD
- ০%
- ৯১,৮২৭.৩৬%
- -০.২২২%
+ ০শতাংশ
+ ৯১,৮২৭.৩৬শতাংশ
+ -০.২২২শতাংশ
percent unit-width-full-name @@
es-MX
- 0.0 %
- 92,000 %
- -0.22 %
+ 0.0 por ciento
+ 92,000 por ciento
+ -0.22 por ciento
zh-TW
0.0%
92,000%
-0.22%
bn-BD
- ০.০%
- ৯২,০০০%
- -০.২২%
+ ০.০শতাংশ
+ ৯২,০০০শতাংশ
+ -০.২২শতাংশ
currency/EUR unit-width-narrow precision-integer
es-MX
@@ -3363,9 +3363,9 @@ measure-unit/length-furlong unit-width-narrow @@
measure-unit/length-furlong unit-width-full-name precision-integer
es-MX
- 0 fur
- 91,827 fur
- -0 fur
+ 0 furlongs
+ 91,827 furlongs
+ -0 furlongs
zh-TW
0 化朗
91,827 化朗
@@ -3377,9 +3377,9 @@ measure-unit/length-furlong unit-width-full-name precision-integer
measure-unit/length-furlong unit-width-full-name .000
es-MX
- 0.000 fur
- 91,827.364 fur
- -0.222 fur
+ 0.000 furlongs
+ 91,827.364 furlongs
+ -0.222 furlongs
zh-TW
0.000 化朗
91,827.364 化朗
@@ -3391,9 +3391,9 @@ measure-unit/length-furlong unit-width-full-name .000
measure-unit/length-furlong unit-width-full-name .##/@@@+
es-MX
- 0 fur
- 91,827.36 fur
- -0.222 fur
+ 0 furlongs
+ 91,827.36 furlongs
+ -0.222 furlongs
zh-TW
0 化朗
91,827.36 化朗
@@ -3405,9 +3405,9 @@ measure-unit/length-furlong unit-width-full-name .##/@@@+
measure-unit/length-furlong unit-width-full-name @@
es-MX
- 0.0 fur
- 92,000 fur
- -0.22 fur
+ 0.0 furlongs
+ 92,000 furlongs
+ -0.22 furlongs
zh-TW
0.0 化朗
92,000 化朗
@@ -3433,17 +3433,17 @@ percent unit-width-narrow rounding-mode-floor
percent unit-width-full-name rounding-mode-floor
es-MX
- 0 %
- 91,827.3645 %
- -0.22222 %
+ 0 por ciento
+ 91,827.3645 por ciento
+ -0.22222 por ciento
zh-TW
0%
91,827.3645%
-0.22222%
bn-BD
- ০%
- ৯১,৮২৭.৩৬৪৫%
- -০.২২২২২%
+ ০শতাংশ
+ ৯১,৮২৭.৩৬৪৫শতাংশ
+ -০.২২২২২শতাংশ
currency/EUR unit-width-narrow rounding-mode-floor
es-MX
@@ -3489,9 +3489,9 @@ measure-unit/length-furlong unit-width-narrow rounding-mode-floor
measure-unit/length-furlong unit-width-full-name rounding-mode-floor
es-MX
- 0 fur
- 91,827.3645 fur
- -0.22222 fur
+ 0 furlongs
+ 91,827.3645 furlongs
+ -0.22222 furlongs
zh-TW
0 化朗
91,827.3645 化朗
@@ -3517,17 +3517,17 @@ percent unit-width-narrow integer-width/##00
percent unit-width-full-name integer-width/##00
es-MX
- 00 %
- 1827.3645 %
- -00.22222 %
+ 00 por ciento
+ 1827.3645 por ciento
+ -00.22222 por ciento
zh-TW
00%
1,827.3645%
-00.22222%
bn-BD
- ০০%
- ১,৮২৭.৩৬৪৫%
- -০০.২২২২২%
+ ০০শতাংশ
+ ১,৮২৭.৩৬৪৫শতাংশ
+ -০০.২২২২২শতাংশ
currency/EUR unit-width-narrow integer-width/##00
es-MX
@@ -3573,9 +3573,9 @@ measure-unit/length-furlong unit-width-narrow integer-width/##00
measure-unit/length-furlong unit-width-full-name integer-width/##00
es-MX
- 00 fur
- 1827.3645 fur
- -00.22222 fur
+ 00 furlongs
+ 1827.3645 furlongs
+ -00.22222 furlongs
zh-TW
00 化朗
1,827.3645 化朗
@@ -3601,17 +3601,17 @@ percent unit-width-narrow scale/0.5
percent unit-width-full-name scale/0.5
es-MX
- 0 %
- 45,913.68225 %
- -0.11111 %
+ 0 por ciento
+ 45,913.68225 por ciento
+ -0.11111 por ciento
zh-TW
0%
45,913.68225%
-0.11111%
bn-BD
- ০%
- ৪৫,৯১৩.৬৮২২৫%
- -০.১১১১১%
+ ০শতাংশ
+ ৪৫,৯১৩.৬৮২২৫শতাংশ
+ -০.১১১১১শতাংশ
currency/EUR unit-width-narrow scale/0.5
es-MX
@@ -3657,9 +3657,9 @@ measure-unit/length-furlong unit-width-narrow scale/0.5
measure-unit/length-furlong unit-width-full-name scale/0.5
es-MX
- 0 fur
- 45,913.68225 fur
- -0.11111 fur
+ 0 furlongs
+ 45,913.68225 furlongs
+ -0.11111 furlongs
zh-TW
0 化朗
45,913.68225 化朗
@@ -3685,17 +3685,17 @@ percent unit-width-narrow group-on-aligned
percent unit-width-full-name group-on-aligned
es-MX
- 0 %
- 91,827.3645 %
- -0.22222 %
+ 0 por ciento
+ 91,827.3645 por ciento
+ -0.22222 por ciento
zh-TW
0%
91,827.3645%
-0.22222%
bn-BD
- ০%
- ৯১,৮২৭.৩৬৪৫%
- -০.২২২২২%
+ ০শতাংশ
+ ৯১,৮২৭.৩৬৪৫শতাংশ
+ -০.২২২২২শতাংশ
currency/EUR unit-width-narrow group-on-aligned
es-MX
@@ -3741,9 +3741,9 @@ measure-unit/length-furlong unit-width-narrow group-on-aligned
measure-unit/length-furlong unit-width-full-name group-on-aligned
es-MX
- 0 fur
- 91,827.3645 fur
- -0.22222 fur
+ 0 furlongs
+ 91,827.3645 furlongs
+ -0.22222 furlongs
zh-TW
0 化朗
91,827.3645 化朗
@@ -3769,17 +3769,17 @@ percent unit-width-narrow latin
percent unit-width-full-name latin
es-MX
- 0 %
- 91,827.3645 %
- -0.22222 %
+ 0 por ciento
+ 91,827.3645 por ciento
+ -0.22222 por ciento
zh-TW
0%
91,827.3645%
-0.22222%
bn-BD
- 0%
- 91,827.3645%
- -0.22222%
+ 0শতাংশ
+ 91,827.3645শতাংশ
+ -0.22222শতাংশ
currency/EUR unit-width-narrow latin
es-MX
@@ -3825,9 +3825,9 @@ measure-unit/length-furlong unit-width-narrow latin
measure-unit/length-furlong unit-width-full-name latin
es-MX
- 0 fur
- 91,827.3645 fur
- -0.22222 fur
+ 0 furlongs
+ 91,827.3645 furlongs
+ -0.22222 furlongs
zh-TW
0 化朗
91,827.3645 化朗
@@ -3853,17 +3853,17 @@ percent unit-width-narrow sign-accounting-except-zero
percent unit-width-full-name sign-accounting-except-zero
es-MX
- 0 %
- +91,827.3645 %
- -0.22222 %
+ 0 por ciento
+ +91,827.3645 por ciento
+ -0.22222 por ciento
zh-TW
0%
+91,827.3645%
-0.22222%
bn-BD
- ০%
- +৯১,৮২৭.৩৬৪৫%
- -০.২২২২২%
+ ০শতাংশ
+ +৯১,৮২৭.৩৬৪৫শতাংশ
+ -০.২২২২২শতাংশ
currency/EUR unit-width-narrow sign-accounting-except-zero
es-MX
@@ -3877,7 +3877,7 @@ currency/EUR unit-width-narrow sign-accounting-except-zero
bn-BD
০.০০€
+৯১,৮২৭.৩৬€
- (০.২২ €)
+ (০.২২€)
currency/EUR unit-width-full-name sign-accounting-except-zero
es-MX
@@ -3909,9 +3909,9 @@ measure-unit/length-furlong unit-width-narrow sign-accounting-except-zero
measure-unit/length-furlong unit-width-full-name sign-accounting-except-zero
es-MX
- 0 fur
- +91,827.3645 fur
- -0.22222 fur
+ 0 furlongs
+ +91,827.3645 furlongs
+ -0.22222 furlongs
zh-TW
0 化朗
+91,827.3645 化朗
@@ -3937,17 +3937,17 @@ percent unit-width-narrow decimal-always
percent unit-width-full-name decimal-always
es-MX
- 0. %
- 91,827.3645 %
- -0.22222 %
+ 0. por ciento
+ 91,827.3645 por ciento
+ -0.22222 por ciento
zh-TW
0.%
91,827.3645%
-0.22222%
bn-BD
- ০.%
- ৯১,৮২৭.৩৬৪৫%
- -০.২২২২২%
+ ০.শতাংশ
+ ৯১,৮২৭.৩৬৪৫শতাংশ
+ -০.২২২২২শতাংশ
currency/EUR unit-width-narrow decimal-always
es-MX
@@ -3993,9 +3993,9 @@ measure-unit/length-furlong unit-width-narrow decimal-always
measure-unit/length-furlong unit-width-full-name decimal-always
es-MX
- 0. fur
- 91,827.3645 fur
- -0.22222 fur
+ 0. furlongs
+ 91,827.3645 furlongs
+ -0.22222 furlongs
zh-TW
0. 化朗
91,827.3645 化朗
@@ -4849,15 +4849,15 @@ percent precision-integer sign-accounting-except-zero
es-MX
0 %
+91,827 %
- -0 %
+ 0 %
zh-TW
0%
+91,827%
- -0%
+ 0%
bn-BD
০%
+৯১,৮২৭%
- -০%
+ ০%
percent .000 sign-accounting-except-zero
es-MX
@@ -4905,15 +4905,15 @@ currency/EUR precision-integer sign-accounting-except-zero
es-MX
EUR 0
+EUR 91,827
- -EUR 0
+ EUR 0
zh-TW
€0
+€91,827
- (€0)
+ €0
bn-BD
০€
+৯১,৮২৭€
- (০ €)
+ ০€
currency/EUR .000 sign-accounting-except-zero
es-MX
@@ -4927,7 +4927,7 @@ currency/EUR .000 sign-accounting-except-zero
bn-BD
০.০০০€
+৯১,৮২৭.৩৬৪€
- (০.২২২ €)
+ (০.২২২€)
currency/EUR .##/@@@+ sign-accounting-except-zero
es-MX
@@ -4941,7 +4941,7 @@ currency/EUR .##/@@@+ sign-accounting-except-zero
bn-BD
০€
+৯১,৮২৭.৩৬€
- (০.২২২ €)
+ (০.২২২€)
currency/EUR @@ sign-accounting-except-zero
es-MX
@@ -4955,21 +4955,21 @@ currency/EUR @@ sign-accounting-except-zero
bn-BD
০.০€
+৯২,০০০€
- (০.২২ €)
+ (০.২২€)
measure-unit/length-furlong precision-integer sign-accounting-except-zero
es-MX
0 fur
+91,827 fur
- -0 fur
+ 0 fur
zh-TW
0 化朗
+91,827 化朗
- -0 化朗
+ 0 化朗
bn-BD
০ ফারà§à¦²à¦‚
+৯১,৮২৭ ফারà§à¦²à¦‚
- -০ ফারà§à¦²à¦‚
+ ০ ফারà§à¦²à¦‚
measure-unit/length-furlong .000 sign-accounting-except-zero
es-MX
@@ -5375,7 +5375,7 @@ currency/EUR rounding-mode-floor sign-accounting-except-zero
bn-BD
০.০০€
+৯১,৮২৭.৩৬€
- (০.২৩ €)
+ (০.২৩€)
measure-unit/length-furlong rounding-mode-floor sign-accounting-except-zero
es-MX
@@ -5585,7 +5585,7 @@ currency/EUR integer-width/##00 sign-accounting-except-zero
bn-BD
০০.০০€
+১,৮২৭.৩৬€
- (০০.২২ €)
+ (০০.২২€)
measure-unit/length-furlong integer-width/##00 sign-accounting-except-zero
es-MX
@@ -5753,7 +5753,7 @@ currency/EUR scale/0.5 sign-accounting-except-zero
bn-BD
০.০০€
+৪৫,৯১৩.৬৮€
- (০.১১ €)
+ (০.১১€)
measure-unit/length-furlong scale/0.5 sign-accounting-except-zero
es-MX
@@ -5879,7 +5879,7 @@ currency/EUR group-on-aligned sign-accounting-except-zero
bn-BD
০.০০€
+৯১,৮২৭.৩৬€
- (০.২২ €)
+ (০.২২€)
measure-unit/length-furlong group-on-aligned sign-accounting-except-zero
es-MX
@@ -5963,7 +5963,7 @@ currency/EUR latin sign-accounting-except-zero
bn-BD
0.00€
+91,827.36€
- (0.22 €)
+ (0.22€)
measure-unit/length-furlong latin sign-accounting-except-zero
es-MX
@@ -6047,7 +6047,7 @@ currency/EUR sign-accounting-except-zero decimal-always
bn-BD
০.০০€
+৯১,৮২৭.৩৬€
- (০.২২ €)
+ (০.২২€)
measure-unit/length-furlong sign-accounting-except-zero decimal-always
es-MX
@@ -6627,15 +6627,15 @@ unit-width-narrow precision-integer sign-accounting-except-zero
es-MX
0
+91,827
- -0
+ 0
zh-TW
0
+91,827
- -0
+ 0
bn-BD
০
+৯১,৮২৭
- -০
+ ০
unit-width-narrow .000 sign-accounting-except-zero
es-MX
@@ -6683,15 +6683,15 @@ unit-width-full-name precision-integer sign-accounting-except-zero
es-MX
0
+91,827
- -0
+ 0
zh-TW
0
+91,827
- -0
+ 0
bn-BD
০
+৯১,৮২৭
- -০
+ ০
unit-width-full-name .000 sign-accounting-except-zero
es-MX
@@ -7943,15 +7943,15 @@ precision-integer integer-width/##00 sign-accounting-except-zero
es-MX
00
+1827
- -00
+ 00
zh-TW
00
+1,827
- -00
+ 00
bn-BD
০০
+১,৮২৭
- -০০
+ ০০
.000 integer-width/##00 sign-accounting-except-zero
es-MX
@@ -8167,15 +8167,15 @@ precision-integer scale/0.5 sign-accounting-except-zero
es-MX
0
+45,914
- -0
+ 0
zh-TW
0
+45,914
- -0
+ 0
bn-BD
০
+৪৫,৯১৪
- -০
+ ০
.000 scale/0.5 sign-accounting-except-zero
es-MX
@@ -8335,15 +8335,15 @@ precision-integer group-on-aligned sign-accounting-except-zero
es-MX
0
+91,827
- -0
+ 0
zh-TW
0
+91,827
- -0
+ 0
bn-BD
০
+৯১,৮২৭
- -০
+ ০
.000 group-on-aligned sign-accounting-except-zero
es-MX
@@ -8447,15 +8447,15 @@ precision-integer latin sign-accounting-except-zero
es-MX
0
+91,827
- -0
+ 0
zh-TW
0
+91,827
- -0
+ 0
bn-BD
0
+91,827
- -0
+ 0
.000 latin sign-accounting-except-zero
es-MX
@@ -8559,15 +8559,15 @@ precision-integer sign-accounting-except-zero decimal-always
es-MX
0.
+91,827.
- -0.
+ 0.
zh-TW
0.
+91,827.
- -0.
+ 0.
bn-BD
০.
+৯১,৮২৭.
- -০.
+ ০.
.000 sign-accounting-except-zero decimal-always
es-MX
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt b/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
index d0533c02b1e..3fae72cba95 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
@@ -32,7 +32,7 @@
# [ICU4C] source/test/testdata/rbbitst.txt
# [ICU4J] main/tests/core/src/com/ibm/icu/dev/test/rbbi/rbbitst.txt
#
-# ICU4C's copy is the master. If any changes are made to ICU4J's copy, make sure they
+# ICU4C's copy is the primary one. If any changes are made to ICU4J's copy, make sure they
# are merged back into ICU4C's copy of the file, lest they get overwritten later.
# TODO: figure out how to have a single copy of the file for use by both C and Java.
@@ -289,7 +289,7 @@
# वृदà¥à¤§à¤¿à¤¸à¤à¤— ;
<data>•वृ•दà¥à¤§à¤¿â€¢à¤¸à¤â€¢à¤—•</data>
# अंतःजà¥à¤žà¤¾à¤¨à¥€ ;
-<data>•अं•तः•जà¥à¤žà¤¾â€¢à¤¨à¥€â€¢â€¢</data>
+<data>•अं•तः•जà¥à¤žà¤¾â€¢à¤¨à¥€â€¢ •</data>
# गनà¥à¤¨à¤¦à¥€à¥‘धिम ;
<data>•ग•नà¥à¤¨â€¢à¤¦à¥€à¥‘•धि•म•</data>
# पà¥à¤ªà¥à¤°à¤ªà¥‘दà¥à¤¯à¥‡à¥’ ;
@@ -319,7 +319,7 @@
# भरà¥à¤¤à¥à¤°à¥à¤­à¥‹à¤—ः ;
<data>•भ•रà¥à¤¤à¥â€¢à¤°à¥à¤­à¥‹â€¢à¤—ः•</data>
# शॆतà¥à¤¯à¥à¤² ;
-<data>•शॆ•तà¥à¤¯à¥â€¢à¤²â€¢â€¢</data>
+<data>•शॆ•तà¥à¤¯à¥â€¢à¤²â€¢ •</data>
# महारॆनà¥à¤¯ ;
<data>•म•हा•रॆ•नà¥à¤¯â€¢</data>
# सॆकà¥à¤¯à¥à¤² ;
@@ -1234,9 +1234,9 @@ Calls to xxx will return an implementor of this interface. \u2029•</data>
# Monkey test failure lines can, with slight reformatting, be copied into this section
# as test cases. The error display from here is more informative.
#
-<data>•\ufffc•\u30e3\u000c<100>\u1b39\u300a\u002f\u203a\u200b•\ufffc•\uaf64•\udcfb•</data>
+<data>•\ufffc•\u30e3\u000c<100>\u1b39•\u300a\u002f\u203a\u200b•\ufffc•\uaf64•\udcfb•</data>
<data>•\u114d\u31f3•\ube44\u002d•\u0362\u24e2\u276e\u2014\u205f\ufe16•\uc877•\u0fd0\u000a<100>\u20a3•</data>
-<data>•\u080a\u215b\U0001d7d3\u002c•\u2025\U000e012e•\u02df\u118d\u0029\ua8d6\u0085<100>\u6cc4\u2024\u202f\ufffc•</data>
+<data>•\u080a\u215b\U0001d7d3\u002c\u2025\U000e012e•\u02df\u118d\u0029\ua8d6\u0085<100>\u6cc4\u2024\u202f\ufffc•</data>
# Test for #10176 (in root)
<line>
@@ -1991,3 +1991,23 @@ Bangkok)•</data>
•
•より<400>詳ã—ã„<400>ã“ã¨<400>ã‚’<400>ãŠ<400>知<400>ã‚Š<400>ã«<400>ãªã‚Š<400>ãŸã„<400>æ–¹<400>ã¯<400>ã€â€¢Glossary<200>,• •Technical<200> •Introduction<200> •ãŠã‚ˆã³<400> •Useful<200> •Resources<200>ã‚’<400>ã”<400>å‚ç…§<400>ãã <400>ã•ã„<400>。•
•</data>
+
+
+#
+# Bug 20303 Multiple Look-ahead rules with similar contexts.
+# Check that samples of such rules are being handled correctly.
+#
+
+<rules>
+!!forward;
+!!quoted_literals_only;
+!!chain;
+[a] [b] / [c] [d];
+[a] [b] / [c] [d] {100};
+[a] [b] / [e] [f] {200};
+[a] [b] / [e] [g] {300};
+[a] [b] [c] [h] {400};
+[x] [a] [b] / [c] [d] {500};
+[y] [a] [b] [c] [d] {600};
+</rules>
+<data>•ab<100>c•d•ab<200>e•f•ab<300>e•g•abch<400>xab<500>c•d•yabcd<600></data>
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt b/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
index 91356123c5b..4609ee98f9a 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
@@ -317,11 +317,21 @@
"(\S+).*?(\S+).*" "<0><1>Not-spaces</1> <2>more-non-spaces</2> </0>"
# \X consume one Grapheme Cluster.
-"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" "<0><1>A</1><2>B</2><3> </3><4>\r\n</4></0>"
-"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" "<0><1>A\u0301</1><2>\n</2><3>\u0305</3><4>a\u0302\u0303\u0304</4></0>"
-"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" "<0><1>\u1100\u1161\u11a8</1><2>\u115f\u11a2\u11f9</2></0>"
-"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" "<0><1>\u1100\uac01</1><2>\uac02</2><3>\uac03\u11b0</3></0>"
-"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" "<0><1>\u1100\u1101\uac02\u0301</1><2>\u1100</2></0>"
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>A</1><2>B</2><3> </3><4>\r\n</4></0>"
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>A\u0301</1><2>\n</2><3>\u0305</3><4>a\u0302\u0303\u0304</4></0>"
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>\u1100\u1161\u11a8</1><2>\u115f\u11a2\u11f9</2></0>"
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>\u1100\uac01</1><2>\uac02</2><3>\uac03\u11b0</3></0>"
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>\u1100\u1101\uac02\u0301</1><2>\u1100</2></0>"
+# Regional indicator pairs are grapheme clusters
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>\U0001f1e6\U0001f1e8</1><2>\U0001f1ea\U0001f1ff</2></0>"
+# Grapheme Break rule 9b: Prepend x
+"(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?(\X)?" v "<0><1>\U000111C2x</1></0>"
+
+# Grapheme clusters that straddle a match region. Matching is pinned to the region limits,
+# giving boundaries inside grapheme clusters
+"(\X)?(\X)?(\X)?" v "a\u0301<r><0><1>\u0301\u0301</1><2>z\u0302</2></0></r>\u0302\u0302"
+# Same as previous test case, but without the region limits.
+"(\X)?(\X)?(\X)?" v "<0><1>a\u0301\u0301\u0301</1><2>z\u0302\u0302\u0302</2></0>"
# ^ matches only at beginning of line
".*^(Hello)" "<0><1>Hello</1></0> Hello Hello Hello Goodbye"
@@ -1482,6 +1492,10 @@
#
"(?<=(?<=b?(?=a)))" "hello, world."
+# Bug ICU-20939
+# Incorrect word \b boundaries w UTF-8 input and non-ASCII text
+#
+"(?w)\b" v2 "äää<0></0> äää"
# Random debugging, Temporary
#
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/root.txt b/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
index 7fd5b2a8ac8..ff0f517046b 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
@@ -13,8 +13,8 @@
root
{
Version { 44.0 }
- ExpectCLDRVersionAtLeast { 36.0 } // 'base' cldr version. Allow up to version =.=.* of this
- CurrentCLDRVersion { 36.0 } // Current CLDR version as of the test update. Warn if not an exact match.
+ ExpectCLDRVersionAtLeast { 38.1 } // 'base' cldr version. Allow up to version =.=.* of this
+ CurrentCLDRVersion { 38.1 } // Current CLDR version as of the test update. Warn if not an exact match.
ShortLanguage { xxx }
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt b/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
index 601be7dc010..3cae998ed87 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
@@ -5869,6 +5869,7 @@ structLocale:table(nofallback){
pap{""}
pau{""}
pcd{""}
+ pcm{""}
pdc{""}
pdt{""}
peo{""}
@@ -6087,6 +6088,337 @@ structLocale:table(nofallback){
MeasurementSystem:int{0}
MoreInformation{""}
NumberElements{
+ adlm{
+ miscPatterns{
+ approximately{""}
+ atLeast{""}
+ atMost{""}
+ range{""}
+ }
+ patterns{
+ accountingFormat{""}
+ currencyFormat{""}
+ decimalFormat{""}
+ percentFormat{""}
+ scientificFormat{""}
+ }
+ patternsLong{
+ decimalFormat{
+ 1000{
+ 1{""}
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ }
+ }
+ patternsShort{
+ currencyFormat{
+ 1000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ }
+ decimalFormat{
+ 1000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ }
+ }
+ symbols{
+ approximatelySign{""}
+ decimal{""}
+ exponential{""}
+ group{""}
+ infinity{""}
+ list{""}
+ minusSign{""}
+ nan{""}
+ perMille{""}
+ percentSign{""}
+ plusSign{""}
+ currencyDecimal{""}
+ currencyGroup{""}
+ superscriptingExponent{""}
+ timeSeparator{""}
+ }
+ }
arab{
miscPatterns{
approximately{""}
@@ -6104,6 +6436,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -6400,6 +6733,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -6433,6 +6767,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -6729,6 +7064,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -6762,6 +7098,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -7058,6 +7395,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -7091,6 +7429,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -7387,6 +7726,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -7420,6 +7760,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -7716,6 +8057,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -7749,6 +8091,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -8045,6 +8388,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -8078,6 +8422,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -8374,6 +8719,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -8409,6 +8755,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -8705,6 +9052,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -8739,6 +9087,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -9035,6 +9384,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -9068,6 +9418,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -9364,6 +9715,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -9397,6 +9749,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -9693,6 +10046,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -9726,6 +10080,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -10022,6 +10377,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -10055,6 +10411,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -10351,6 +10708,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -10384,6 +10742,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -10680,6 +11039,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -10713,6 +11073,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -11009,6 +11370,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -11042,6 +11404,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -11338,6 +11701,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -11371,6 +11735,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -11667,6 +12032,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -11700,6 +12066,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -11996,6 +12363,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -12029,6 +12397,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -12325,6 +12694,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -12358,6 +12728,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -12654,6 +13025,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -12687,6 +13059,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -12983,6 +13356,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -13016,6 +13390,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -13312,6 +13687,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -13345,6 +13721,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -13641,6 +14018,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -13674,6 +14052,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -13970,6 +14349,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -14021,6 +14401,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -14317,6 +14698,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -14350,6 +14732,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -14646,6 +15029,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -14679,6 +15063,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -14975,6 +15360,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -15008,6 +15394,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -15304,6 +15691,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -15337,6 +15725,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -15633,6 +16022,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -15668,6 +16058,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -15964,6 +16355,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -15997,6 +16389,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -16293,6 +16686,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -16326,6 +16720,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -16622,6 +17017,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -16655,6 +17051,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -16951,6 +17348,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -16984,6 +17382,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -17280,6 +17679,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -17313,6 +17713,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -17609,6 +18010,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -17642,6 +18044,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -17938,6 +18341,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -17971,6 +18375,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -18267,6 +18672,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -18300,6 +18706,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -18596,6 +19003,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -18629,6 +19037,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -18925,6 +19334,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -18958,6 +19368,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -19254,6 +19665,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -19287,6 +19699,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -19583,6 +19996,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -19616,6 +20030,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -19912,6 +20327,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -19945,6 +20361,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -20241,6 +20658,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -20274,6 +20692,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -20570,6 +20989,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -20604,6 +21024,7 @@ structLocale:table(nofallback){
patternsLong{
decimalFormat{
1000{
+ 1{""}
zero{""}
one{""}
two{""}
@@ -20900,6 +21321,7 @@ structLocale:table(nofallback){
}
}
symbols{
+ approximatelySign{""}
decimal{""}
exponential{""}
group{""}
@@ -24705,6 +25127,23 @@ structLocale:table(nofallback){
d{""}
y{""}
}
+ GyMMMM{
+ G{""}
+ M{""}
+ y{""}
+ }
+ GyMMMMEd{
+ G{""}
+ M{""}
+ d{""}
+ y{""}
+ }
+ GyMMMMd{
+ G{""}
+ M{""}
+ d{""}
+ y{""}
+ }
GyMMMd{
G{""}
M{""}
@@ -25154,6 +25593,23 @@ structLocale:table(nofallback){
d{""}
y{""}
}
+ GyMMMM{
+ G{""}
+ M{""}
+ y{""}
+ }
+ GyMMMMEd{
+ G{""}
+ M{""}
+ d{""}
+ y{""}
+ }
+ GyMMMMd{
+ G{""}
+ M{""}
+ d{""}
+ y{""}
+ }
GyMMMd{
G{""}
M{""}
@@ -28046,7 +28502,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- meter-per-second-squared{
+ meter-per-square-second{
dnam{""}
zero{""}
one{""}
@@ -28986,7 +29442,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- inch-hg{
+ inch-ofhg{
dnam{""}
zero{""}
one{""}
@@ -29004,7 +29460,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- millimeter-of-mercury{
+ millimeter-ofhg{
dnam{""}
zero{""}
one{""}
@@ -29013,7 +29469,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- pound-per-square-inch{
+ pound-force-per-square-inch{
dnam{""}
zero{""}
one{""}
@@ -29304,7 +29760,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- meter-per-second-squared{
+ meter-per-square-second{
dnam{""}
zero{""}
one{""}
@@ -30244,7 +30700,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- inch-hg{
+ inch-ofhg{
dnam{""}
zero{""}
one{""}
@@ -30262,7 +30718,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- millimeter-of-mercury{
+ millimeter-ofhg{
dnam{""}
zero{""}
one{""}
@@ -30271,7 +30727,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- pound-per-square-inch{
+ pound-force-per-square-inch{
dnam{""}
zero{""}
one{""}
@@ -30562,7 +31018,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- meter-per-second-squared{
+ meter-per-square-second{
dnam{""}
zero{""}
one{""}
@@ -31502,7 +31958,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- inch-hg{
+ inch-ofhg{
dnam{""}
zero{""}
one{""}
@@ -31520,7 +31976,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- millimeter-of-mercury{
+ millimeter-ofhg{
dnam{""}
zero{""}
one{""}
@@ -31529,7 +31985,7 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- pound-per-square-inch{
+ pound-force-per-square-inch{
dnam{""}
zero{""}
one{""}
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/ctestfw/Makefile.in
index 25600923267..2ad1fbe5793 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/Makefile.in
@@ -50,7 +50,8 @@ DEFS += -DT_CTEST_IMPLEMENTATION
LDFLAGS += $(LDFLAGSCTESTFW)
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS)
-OBJECTS = ctest.o tstdtmod.o testdata.o datamap.o uperf.o ucln_ct.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o, $(SOURCES)))
STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
@@ -83,6 +84,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -90,6 +96,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
index f0f665428e4..dc9a4b0f569 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
@@ -709,9 +709,9 @@ static UBool vlog_knownIssue(const char *ticket, const char *pattern, va_list ap
&firstForTicket, &firstForWhere);
if(firstForTicket || firstForWhere) {
- log_info("(Known issue #%s) %s\n", ticket, buf);
+ log_info("(Known issue %s) %s\n", ticket, buf);
} else {
- log_verbose("(Known issue #%s) %s\n", ticket, buf);
+ log_verbose("(Known issue %s) %s\n", ticket, buf);
}
return TRUE;
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
index b3b1895e7de..744d7739a51 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -69,7 +53,7 @@
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
<Link>
- <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest65d.exe</OutputFile>
+ <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest68d.exe</OutputFile>
<ProgramDatabaseFile>.\..\..\..\$(IcuLibOutputDir)\icutestd.pdb</ProgramDatabaseFile>
<ImportLibrary>.\..\..\..\$(IcuLibOutputDir)\icutestd.lib</ImportLibrary>
<AdditionalDependencies>icuucd.lib;icutud.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -82,7 +66,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile>
<Link>
- <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest65.exe</OutputFile>
+ <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest68.exe</OutputFile>
<ProgramDatabaseFile>.\..\..\..\$(IcuLibOutputDir)\icutest.pdb</ProgramDatabaseFile>
<ImportLibrary>.\..\..\..\$(IcuLibOutputDir)\icutest.lib</ImportLibrary>
<AdditionalDependencies>icuuc.lib;icutu.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/sources.txt b/Build/source/libs/icu/icu-src/source/tools/ctestfw/sources.txt
new file mode 100644
index 00000000000..30103db4a19
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/sources.txt
@@ -0,0 +1,6 @@
+ctest.c
+datamap.cpp
+testdata.cpp
+tstdtmod.cpp
+ucln_ct.c
+uperf.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
index c950bade694..6a29621127f 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
@@ -228,7 +228,7 @@ log_data_err(const char *pattern, ...);
/**
* Log a known issue.
- * @param ticket ticket number such as "12345" for ICU tickets or "cldrbug:6636" for CLDR tickets.
+ * @param ticket ticket number such as "ICU-12345" for ICU tickets or "CLDR-6636" for CLDR tickets.
* @param fmt ... sprintf-style format, optional message. can be NULL.
* @return TRUE if known issue test should be skipped, FALSE if it should be run
*/
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h
index 7849a6da540..0a0228e96ff 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h
@@ -39,3 +39,9 @@
#define T_CTEST_EXPORT_API T_CTEST_IMPORT
#endif
+#ifndef TRUE
+# define TRUE 1
+#endif
+#ifndef FALSE
+# define FALSE 0
+#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
index 51b7f2652d5..7b0d7538d74 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
@@ -207,7 +207,7 @@ static double uprv_delta(UTimer* timer1, UTimer* timer2){
return (t2-t1);
}
static UBool uprv_compareFrequency(UTimer* /*timer1*/, UTimer* /*timer2*/){
- return TRUE;
+ return true;
}
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/genbrk/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/genbrk/Makefile.in
index cb7fcd8d5d5..bcb684eed79 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genbrk/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/genbrk/Makefile.in
@@ -31,7 +31,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = genbrk.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp b/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp
index 38df3ee969c..cc0133b439f 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp
@@ -282,7 +282,7 @@ int main(int argc, char **argv) {
//
// Put the source rules into a UnicodeString
//
- UnicodeString ruleSourceS(FALSE, ruleSourceU, destCap);
+ UnicodeString ruleSourceS(false, ruleSourceU, destCap);
//
// Create the break iterator from the rules
diff --git a/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj b/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj
index dff44bc5e27..44cb00ed8f0 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/genbrk/sources.txt b/Build/source/libs/icu/icu-src/source/tools/genbrk/sources.txt
new file mode 100644
index 00000000000..a750aebb352
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/genbrk/sources.txt
@@ -0,0 +1 @@
+genbrk.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/genccode/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/genccode/Makefile.in
index 948fd00444a..6a1bab571be 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genccode/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/genccode/Makefile.in
@@ -32,7 +32,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = genccode.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.c=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c b/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c
index 91e94d7f518..c5bbdf60d7d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c
+++ b/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c
@@ -69,6 +69,7 @@ enum {
#ifdef CAN_GENERATE_OBJECTS
kOptObject,
kOptMatchArch,
+ kOptSkipDllExport,
#endif
kOptFilename,
kOptAssembly
@@ -82,8 +83,9 @@ static UOption options[]={
UOPTION_DEF("name", 'n', UOPT_REQUIRES_ARG),
UOPTION_DEF("entrypoint", 'e', UOPT_REQUIRES_ARG),
#ifdef CAN_GENERATE_OBJECTS
-/*5*/UOPTION_DEF("object", 'o', UOPT_NO_ARG),
+/*6*/UOPTION_DEF("object", 'o', UOPT_NO_ARG),
UOPTION_DEF("match-arch", 'm', UOPT_REQUIRES_ARG),
+ UOPTION_DEF("skip-dll-export", '\0', UOPT_NO_ARG),
#endif
UOPTION_DEF("filename", 'f', UOPT_REQUIRES_ARG),
UOPTION_DEF("assembly", 'a', UOPT_REQUIRES_ARG)
@@ -127,7 +129,8 @@ main(int argc, char* argv[]) {
fprintf(stderr,
"\t-o or --object write a .obj file instead of .c\n"
"\t-m or --match-arch file.o match the architecture (CPU, 32/64 bits) of the specified .o\n"
- "\t ELF format defaults to i386. Windows defaults to the native platform.\n");
+ "\t ELF format defaults to i386. Windows defaults to the native platform.\n"
+ "\t--skip-dll-export Don't export the ICU data entry point symbol (for use when statically linking)\n");
#endif
fprintf(stderr,
"\t-f or --filename Specify an alternate base filename. (default: symbolname_typ)\n"
@@ -193,7 +196,8 @@ main(int argc, char* argv[]) {
options[kOptMatchArch].doesOccur ? options[kOptMatchArch].value : NULL,
options[kOptFilename].doesOccur ? options[kOptFilename].value : NULL,
NULL,
- 0);
+ 0,
+ !options[kOptSkipDllExport].doesOccur);
break;
#endif
default:
diff --git a/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj b/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj
index f3195147b15..aad028f8c71 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/genccode/sources.txt b/Build/source/libs/icu/icu-src/source/tools/genccode/sources.txt
new file mode 100644
index 00000000000..d5eb02587ec
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/genccode/sources.txt
@@ -0,0 +1 @@
+genccode.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencfu/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gencfu/Makefile.in
index 05631417e86..6cd8e418db0 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencfu/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gencfu/Makefile.in
@@ -31,7 +31,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gencfu.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp b/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
index 9bc62bdc8e9..541b78e708b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
@@ -179,9 +179,9 @@ int main(int argc, char **argv) {
copyright = U_COPYRIGHT_STRING;
}
- UBool quiet = FALSE;
+ UBool quiet = false;
if (options[9].doesOccur) {
- quiet = TRUE;
+ quiet = true;
}
#if UCONFIG_NO_REGULAR_EXPRESSIONS || UCONFIG_NO_NORMALIZATION || UCONFIG_NO_FILE_IO
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj b/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj
index 0627f02210d..4018d5078da 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencfu/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gencfu/sources.txt
new file mode 100644
index 00000000000..e5a05f84511
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gencfu/sources.txt
@@ -0,0 +1 @@
+gencfu.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencmn/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gencmn/Makefile.in
index dd33fcd1d7b..bb7fc4e7b46 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencmn/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gencmn/Makefile.in
@@ -32,7 +32,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gencmn.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.c=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj b/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj
index dffc4199932..94c18b6ac52 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencmn/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gencmn/sources.txt
new file mode 100644
index 00000000000..6ffa7777aaf
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gencmn/sources.txt
@@ -0,0 +1 @@
+gencmn.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencnval/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gencnval/Makefile.in
index 4e0ab25e37f..b808b0f9e4b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencnval/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gencnval/Makefile.in
@@ -32,7 +32,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gencnval.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.c=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c b/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
index 82cf65d6a3a..83b5863cba5 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
+++ b/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
@@ -32,6 +32,7 @@
#include "cstring.h"
#include "uinvchar.h"
#include "filestrm.h"
+#include "toolutil.h"
#include "unicode/uclean.h"
#include "unewdata.h"
#include "uoptions.h"
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj b/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj
index 57b5f95f881..8e3b7bab4fb 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencnval/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gencnval/sources.txt
new file mode 100644
index 00000000000..9206d402d94
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gencnval/sources.txt
@@ -0,0 +1 @@
+gencnval.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/gendict/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gendict/Makefile.in
index 03eb07ea13b..d2cdb1c3c3d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gendict/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gendict/Makefile.in
@@ -31,7 +31,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gendict.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj b/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj
index 4f369567ba1..42c1ba7869a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/gendict/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gendict/sources.txt
new file mode 100644
index 00000000000..6647c5c2c81
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gendict/sources.txt
@@ -0,0 +1 @@
+gendict.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in
index afc3f9b00e6..84f5830e671 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in
@@ -27,7 +27,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gennorm2.o n2builder.o extradata.o norms.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp b/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp
index bce5336be62..723e912b916 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp
@@ -104,7 +104,7 @@ main(int argc, char* argv[]) {
"Reads the infiles with normalization data and\n"
"creates a binary file, or a C source file (--csource), with the data,\n"
"or writes a data file with the combined data (--combined).\n"
- "See http://userguide.icu-project.org/transforms/normalization#TOC-Data-File-Syntax\n"
+ "See https://unicode-org.github.io/icu/userguide/transforms/normalization#data-file-syntax\n"
"\n"
"Alternate usage: %s [-options] a.txt b.txt minus p.txt q.txt -o outputfilename\n"
"\n"
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gennorm2/sources.txt
new file mode 100644
index 00000000000..76452d26ea9
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/sources.txt
@@ -0,0 +1,4 @@
+extradata.cpp
+gennorm2.cpp
+n2builder.cpp
+norms.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in
index 5e75725ec24..336d839448b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in
@@ -37,9 +37,10 @@ CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/
CPPFLAGS += -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = errmsg.o genrb.o parse.o read.o reslist.o ustr.o rbutil.o \
-wrtjava.o rle.o wrtxml.o prscmnts.o filterrb.o
-DERB_OBJ = derb.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o, $(SOURCES)))
+DERB_SOURCES = derb.cpp
+DERB_OBJ = $(DERB_SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
DERB_DEPS = $(DERB_OBJ:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj b/Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj
index 43edf4c96ef..f5ba9bf22f3 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c b/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c
index 603f26a174c..91dfd3265e1 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c
@@ -21,6 +21,7 @@
#include <stdio.h>
#include "cstring.h"
#include "errmsg.h"
+#include "toolutil.h"
U_CFUNC void error(uint32_t linenumber, const char *msg, ...)
{
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj b/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj
index 166ce733b94..66651c11d03 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/read.c b/Build/source/libs/icu/icu-src/source/tools/genrb/read.c
index 9135da24877..7314f6b742f 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/read.c
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/read.c
@@ -20,6 +20,7 @@
#include "read.h"
#include "errmsg.h"
+#include "toolutil.h"
#include "unicode/ustring.h"
#include "unicode/utf16.h"
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
index 3186c781e93..4bc6adc128e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
@@ -39,6 +39,7 @@
#include "unicode/putil.h"
#include "errmsg.h"
#include "filterrb.h"
+#include "toolutil.h"
#include "uarrsort.h"
#include "uelement.h"
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
index 07874fdbaa8..77140b2140f 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
@@ -355,7 +355,7 @@ public:
fNumCopies(0), fNumUnitsSaved(0), fNumCharsForLength(numCharsForLength) {
// v3 pool string encoded as string-v2 with low offset
fRes = URES_MAKE_RESOURCE(URES_STRING_V2, poolStringIndex);
- fWritten = TRUE;
+ fWritten = true;
}
virtual ~StringResource();
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/rle.c b/Build/source/libs/icu/icu-src/source/tools/genrb/rle.c
index 279684aad03..f737c454914 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/rle.c
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/rle.c
@@ -16,6 +16,7 @@
* 01/11/02 Ram Creation.
*******************************************************************************
*/
+#include <stdbool.h>
#include "rle.h"
/**
* The ESCAPE character is used during run-length encoding. It signals
@@ -297,7 +298,7 @@ int32_t
rleStringToByteArray(uint16_t* src, int32_t srcLen, uint8_t* target, int32_t tgtLen, UErrorCode* status) {
int32_t length = 0;
- UBool nextChar = TRUE;
+ UBool nextChar = true;
uint16_t c = 0;
int32_t node = 0;
int32_t runLength = 0;
@@ -334,11 +335,11 @@ rleStringToByteArray(uint16_t* src, int32_t srcLen, uint8_t* target, int32_t tgt
if (nextChar) {
c = src[i++];
b = (uint8_t) (c >> 8);
- nextChar = FALSE;
+ nextChar = false;
}
else {
b = (uint8_t) (c & 0xFF);
- nextChar = TRUE;
+ nextChar = true;
}
/* This part of the loop is a tiny state machine which handles
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/sources.txt b/Build/source/libs/icu/icu-src/source/tools/genrb/sources.txt
new file mode 100644
index 00000000000..0128e2094f3
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/sources.txt
@@ -0,0 +1,12 @@
+errmsg.c
+filterrb.cpp
+genrb.cpp
+parse.cpp
+prscmnts.cpp
+rbutil.c
+read.c
+reslist.cpp
+rle.c
+ustr.c
+wrtjava.cpp
+wrtxml.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/genren/Makefile b/Build/source/libs/icu/icu-src/source/tools/genren/Makefile
index 082c74fab17..f0ab6669996 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genren/Makefile
+++ b/Build/source/libs/icu/icu-src/source/tools/genren/Makefile
@@ -32,11 +32,18 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
include $(BUILDDIR)/icudefs.mk
endif
-COM=$(ICUDIR)/lib/libicuuc.$(SO)
-I18=$(ICUDIR)/lib/libicui18n.$(SO)
-LEX=$(ICUDIR)/lib/libiculx.$(SO)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+installdir = bin
+else
+installdir = lib
+endif
+
+COM=$(ICUDIR)/$(installdir)/libicuuc.$(SO)
+I18=$(ICUDIR)/$(installdir)/libicui18n.$(SO)
+LEX=$(ICUDIR)/$(installdir)/libiculx.$(SO)
DAT=$(ICUDIR)/stubdata/libicudata.$(SO)
-UIO=$(ICUDIR)/lib/libicuio.$(SO)
+UIO=$(ICUDIR)/$(installdir)/libicuio.$(SO)
LIBS=$(COM) $(I18) $(LEX) $(UIO)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gensprep/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gensprep/Makefile.in
index 3ed8cd123b0..7f475aeb56d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gensprep/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gensprep/Makefile.in
@@ -32,7 +32,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gensprep.o store.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.c=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c b/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c
index a78a5f3e566..ec931c86d9e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c
+++ b/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c
@@ -28,6 +28,7 @@
#include "cmemory.h"
#include "cstring.h"
+#include "toolutil.h"
#include "unewdata.h"
#include "uoptions.h"
#include "uparse.h"
diff --git a/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj b/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj
index c771a4162a4..c6f7bbd861c 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/gensprep/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gensprep/sources.txt
new file mode 100644
index 00000000000..c369456cb34
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gensprep/sources.txt
@@ -0,0 +1,2 @@
+gensprep.c
+store.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c b/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
index 3d75a39cc8c..b526e59454d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
+++ b/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
@@ -23,6 +23,7 @@
#include "cmemory.h"
#include "cstring.h"
#include "filestrm.h"
+#include "toolutil.h"
#include "unicode/udata.h"
#include "unicode/utf16.h"
#include "utrie.h"
@@ -34,76 +35,76 @@
#define DO_DEBUG_OUT 0
-/*
+/*
* StringPrep profile file format ------------------------------------
- *
+ *
* The file format prepared and written here contains a 16-bit trie and a mapping table.
- *
+ *
* Before the data contents described below, there are the headers required by
* the udata API for loading ICU data. Especially, a UDataInfo structure
* precedes the actual data. It contains platform properties values and the
* file format version.
- *
+ *
* The following is a description of format version 2.
- *
+ *
* Data contents:
- *
+ *
* The contents is a parsed, binary form of RFC3454 and possibly
* NormalizationCorrections.txt depending on the options specified on the profile.
- *
+ *
* Any Unicode code point from 0 to 0x10ffff can be looked up to get
* the trie-word, if any, for that code point. This means that the input
* to the lookup are 21-bit unsigned integers, with not all of the
* 21-bit range used.
- *
+ *
* *.spp files customarily begin with a UDataInfo structure, see udata.h and .c.
* After that there are the following structures:
*
* int32_t indexes[_SPREP_INDEX_TOP]; -- _SPREP_INDEX_TOP=16, see enum in sprpimpl.h file
*
* UTrie stringPrepTrie; -- size in bytes=indexes[_SPREP_INDEX_TRIE_SIZE]
- *
- * uint16_t mappingTable[]; -- Contains the sequecence of code units that the code point maps to
+ *
+ * uint16_t mappingTable[]; -- Contains the sequecence of code units that the code point maps to
* size in bytes = indexes[_SPREP_INDEX_MAPPING_DATA_SIZE]
*
* The indexes array contains the following values:
* indexes[_SPREP_INDEX_TRIE_SIZE] -- The size of the StringPrep trie in bytes
- * indexes[_SPREP_INDEX_MAPPING_DATA_SIZE] -- The size of the mappingTable in bytes
- * indexes[_SPREP_NORM_CORRECTNS_LAST_UNI_VERSION] -- The index of Unicode version of last entry in NormalizationCorrections.txt
- * indexes[_SPREP_ONE_UCHAR_MAPPING_INDEX_START] -- The starting index of 1 UChar mapping index in the mapping table
+ * indexes[_SPREP_INDEX_MAPPING_DATA_SIZE] -- The size of the mappingTable in bytes
+ * indexes[_SPREP_NORM_CORRECTNS_LAST_UNI_VERSION] -- The index of Unicode version of last entry in NormalizationCorrections.txt
+ * indexes[_SPREP_ONE_UCHAR_MAPPING_INDEX_START] -- The starting index of 1 UChar mapping index in the mapping table
* indexes[_SPREP_TWO_UCHARS_MAPPING_INDEX_START] -- The starting index of 2 UChars mapping index in the mapping table
* indexes[_SPREP_THREE_UCHARS_MAPPING_INDEX_START] -- The starting index of 3 UChars mapping index in the mapping table
* indexes[_SPREP_FOUR_UCHARS_MAPPING_INDEX_START] -- The starting index of 4 UChars mapping index in the mapping table
* indexes[_SPREP_OPTIONS] -- Bit set of options to turn on in the profile, e.g: USPREP_NORMALIZATION_ON, USPREP_CHECK_BIDI_ON
- *
+ *
*
* StringPrep Trie :
*
- * The StringPrep tries is a 16-bit trie that contains data for the profile.
+ * The StringPrep tries is a 16-bit trie that contains data for the profile.
* Each code point is associated with a value (trie-word) in the trie.
*
* - structure of data words from the trie
- *
- * i) A value greater than or equal to _SPREP_TYPE_THRESHOLD (0xFFF0)
+ *
+ * i) A value greater than or equal to _SPREP_TYPE_THRESHOLD (0xFFF0)
* represents the type associated with the code point
* if(trieWord >= _SPREP_TYPE_THRESHOLD){
* type = trieWord - 0xFFF0;
* }
* The type can be :
- * USPREP_UNASSIGNED
- * USPREP_PROHIBITED
- * USPREP_DELETE
- *
+ * USPREP_UNASSIGNED
+ * USPREP_PROHIBITED
+ * USPREP_DELETE
+ *
* ii) A value less than _SPREP_TYPE_THRESHOLD means the type is USPREP_MAP and
* contains distribution described below
- *
+ *
* 0 - ON : The code point is prohibited (USPREP_PROHIBITED). This is to allow for codepoint that are both prohibited and mapped.
* 1 - ON : The value in the next 14 bits is an index into the mapping table
* OFF: The value in the next 14 bits is an delta value from the code point
- * 2..15 - Contains data as described by bit 1. If all bits are set
+ * 2..15 - Contains data as described by bit 1. If all bits are set
* (value = _SPREP_MAX_INDEX_VALUE) then the type is USPREP_DELETE
*
- *
+ *
* Mapping Table:
* The data in mapping table is sorted according to the length of the mapping sequence.
* If the type of the code point is USPREP_MAP and value in trie word is an index, the index
@@ -120,10 +121,10 @@
* index < indexes[_SPREP_FOUR_UCHARS_MAPPING_INDEX_START]){
* length = 3;
* }else{
- * // The first position in the mapping table contains the length
+ * // The first position in the mapping table contains the length
* // of the sequence
* length = mappingTable[index++];
- *
+ *
* }
*
*/
@@ -192,7 +193,7 @@ static UNewTrie *sprepTrie;
#define MAX_DATA_LENGTH 11500
-#define SPREP_DELTA_RANGE_POSITIVE_LIMIT 8191
+#define SPREP_DELTA_RANGE_POSITIVE_LIMIT 8191
#define SPREP_DELTA_RANGE_NEGATIVE_LIMIT -8192
@@ -235,8 +236,8 @@ static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) {
}
-static void
-storeMappingData(){
+static void
+storeMappingData(void){
int32_t pos = UHASH_FIRST;
const UHashElement* element = NULL;
@@ -260,10 +261,10 @@ storeMappingData(){
while(writtenElementCount < elementCount){
while( (element = uhash_nextElement(hashTable, &pos))!=NULL){
-
+
codepoint = element->key.integer;
value = (ValueStruct*)element->value.pointer;
-
+
/* store the start of indexes */
if(oldMappingLength != mappingLength){
/* Assume that index[] is used according to the enums defined */
@@ -272,9 +273,9 @@ storeMappingData(){
}
if(oldMappingLength <= _SPREP_MAX_INDEX_TOP_LENGTH &&
mappingLength == _SPREP_MAX_INDEX_TOP_LENGTH +1){
-
+
limitIndex = currentIndex;
-
+
}
oldMappingLength = mappingLength;
}
@@ -284,7 +285,7 @@ storeMappingData(){
trieWord = currentIndex << 2;
/* turn on the 2nd bit to signal that the following bits contain an index */
trieWord += 0x02;
-
+
if(trieWord > _SPREP_TYPE_THRESHOLD){
fprintf(stderr,"trieWord cannot contain value greater than 0x%04X.\n",_SPREP_TYPE_THRESHOLD);
exit(U_ILLEGAL_CHAR_FOUND);
@@ -296,19 +297,19 @@ storeMappingData(){
/* turn on the first bit in trie word */
trieWord += 0x01;
}else{
- /*
+ /*
* the codepoint has value something other than prohibited
- * and a mapping .. error!
+ * and a mapping .. error!
*/
fprintf(stderr,"Type for codepoint \\U%08X already set!.\n", (int)codepoint);
- exit(U_ILLEGAL_ARGUMENT_ERROR);
- }
- }
-
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
+ }
+ }
+
/* now set the value in the trie */
if(!utrie_set32(sprepTrie,codepoint,trieWord)){
fprintf(stderr,"Could not set the value for code point.\n");
- exit(U_ILLEGAL_ARGUMENT_ERROR);
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
}
/* written the trie word for the codepoint... increment the count*/
@@ -316,7 +317,7 @@ storeMappingData(){
/* sanity check are we exceeding the max number allowed */
if(currentIndex+value->length+1 > _SPREP_MAX_INDEX_VALUE){
- fprintf(stderr, "Too many entries in the mapping table %i. Maximum allowed is %i\n",
+ fprintf(stderr, "Too many entries in the mapping table %i. Maximum allowed is %i\n",
currentIndex+value->length, _SPREP_MAX_INDEX_VALUE);
exit(U_INDEX_OUTOFBOUNDS_ERROR);
}
@@ -346,7 +347,7 @@ storeMappingData(){
}else{
indexes[_SPREP_FOUR_UCHARS_MAPPING_INDEX_START] = limitIndex;
}
-
+
}
extern void setOptions(int32_t options){
@@ -355,8 +356,8 @@ extern void setOptions(int32_t options){
extern void
storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
UStringPrepType type, UErrorCode* status){
-
-
+
+
UChar* map = NULL;
int16_t adjustedLen=0, i, j;
uint16_t trieWord = 0;
@@ -368,7 +369,7 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
hashTable = uhash_open(hashEntry, compareEntries, NULL, status);
uhash_setValueDeleter(hashTable, valueDeleter);
}
-
+
/* figure out if the code point has type already stored */
savedTrieWord= utrie_get32(sprepTrie,codepoint,NULL);
if(savedTrieWord!=0){
@@ -376,16 +377,16 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
/* turn on the first bit in trie word */
trieWord += 0x01;
}else{
- /*
+ /*
* the codepoint has value something other than prohibited
- * and a mapping .. error!
+ * and a mapping .. error!
*/
fprintf(stderr,"Type for codepoint \\U%08X already set!.\n", (int)codepoint);
- exit(U_ILLEGAL_ARGUMENT_ERROR);
- }
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
+ }
}
- /* figure out the real length */
+ /* figure out the real length */
for(i=0; i<length; i++){
adjustedLen += U16_LENGTH(mapping[i]);
}
@@ -393,11 +394,11 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
if(adjustedLen == 0){
trieWord = (uint16_t)(_SPREP_MAX_INDEX_VALUE << 2);
/* make sure that the value of trieWord is less than the threshold */
- if(trieWord < _SPREP_TYPE_THRESHOLD){
+ if(trieWord < _SPREP_TYPE_THRESHOLD){
/* now set the value in the trie */
if(!utrie_set32(sprepTrie,codepoint,trieWord)){
fprintf(stderr,"Could not set the value for code point.\n");
- exit(U_ILLEGAL_ARGUMENT_ERROR);
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
}
/* value is set so just return */
return;
@@ -412,7 +413,8 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
int16_t delta = (int16_t)((int32_t)codepoint - (int16_t) mapping[0]);
if(delta >= SPREP_DELTA_RANGE_NEGATIVE_LIMIT && delta <= SPREP_DELTA_RANGE_POSITIVE_LIMIT){
- trieWord = delta << 2;
+ trieWord = delta;
+ trieWord <<= 2;
/* make sure that the second bit is OFF */
@@ -421,28 +423,28 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
exit(U_INTERNAL_PROGRAM_ERROR);
}
/* make sure that the value of trieWord is less than the threshold */
- if(trieWord < _SPREP_TYPE_THRESHOLD){
+ if(trieWord < _SPREP_TYPE_THRESHOLD){
/* now set the value in the trie */
if(!utrie_set32(sprepTrie,codepoint,trieWord)){
fprintf(stderr,"Could not set the value for code point.\n");
- exit(U_ILLEGAL_ARGUMENT_ERROR);
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
}
/* value is set so just return */
return;
}
}
- /*
+ /*
* if the delta is not in the given range or if the trieWord is larger than the threshold
* just fall through for storing the mapping in the mapping table
*/
}
map = (UChar*) uprv_calloc(adjustedLen + 1, U_SIZEOF_UCHAR);
-
+
for (i=0, j=0; i<length; i++) {
U16_APPEND_UNSAFE(map, j, mapping[i]);
}
-
+
value = (ValueStruct*) uprv_malloc(sizeof(ValueStruct));
value->mapping = map;
value->type = type;
@@ -477,9 +479,9 @@ storeRange(uint32_t start, uint32_t end, UStringPrepType type, UErrorCode* statu
uint32_t savedTrieWord = utrie_get32(sprepTrie, start, NULL);
if(savedTrieWord>0){
if(savedTrieWord < _SPREP_TYPE_THRESHOLD && type == USPREP_PROHIBITED){
- /*
- * A mapping is stored in the trie word
- * and the only other possible type that a
+ /*
+ * A mapping is stored in the trie word
+ * and the only other possible type that a
* code point can have is USPREP_PROHIBITED
*
*/
@@ -491,11 +493,11 @@ storeRange(uint32_t start, uint32_t end, UStringPrepType type, UErrorCode* statu
trieWord = (uint16_t)savedTrieWord;
/* make sure that the value of trieWord is less than the threshold */
- if(trieWord < _SPREP_TYPE_THRESHOLD){
+ if(trieWord < _SPREP_TYPE_THRESHOLD){
/* now set the value in the trie */
if(!utrie_set32(sprepTrie,start,trieWord)){
fprintf(stderr,"Could not set the value for code point.\n");
- exit(U_ILLEGAL_ARGUMENT_ERROR);
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
}
/* value is set so just return */
return;
@@ -503,7 +505,7 @@ storeRange(uint32_t start, uint32_t end, UStringPrepType type, UErrorCode* statu
fprintf(stderr,"trieWord cannot contain value greater than threshold 0x%04X.\n",_SPREP_TYPE_THRESHOLD);
exit(U_ILLEGAL_CHAR_FOUND);
}
-
+
}else if(savedTrieWord != trieWord){
fprintf(stderr,"Value for codepoint \\U%08X already set!.\n", (int)start);
exit(U_ILLEGAL_ARGUMENT_ERROR);
@@ -512,12 +514,12 @@ storeRange(uint32_t start, uint32_t end, UStringPrepType type, UErrorCode* statu
}
if(!utrie_set32(sprepTrie,start,trieWord)){
fprintf(stderr,"Could not set the value for code point \\U%08X.\n", (int)start);
- exit(U_ILLEGAL_ARGUMENT_ERROR);
+ exit(U_ILLEGAL_ARGUMENT_ERROR);
}
}else{
if(!utrie_setRange32(sprepTrie, start, end+1, trieWord, FALSE)){
fprintf(stderr,"Value for certain codepoint already set.\n");
- exit(U_ILLEGAL_CHAR_FOUND);
+ exit(U_ILLEGAL_CHAR_FOUND);
}
}
@@ -566,13 +568,13 @@ generateData(const char *dataDir, const char* bundleName) {
/* sort and add mapping data */
storeMappingData();
-
+
sprepTrieSize=utrie_serialize(sprepTrie, sprepTrieBlock, sizeof(sprepTrieBlock), getFoldedValue, TRUE, &errorCode);
if(U_FAILURE(errorCode)) {
fprintf(stderr, "error: utrie_serialize(sprep trie) failed, %s\n", u_errorName(errorCode));
exit(errorCode);
}
-
+
size = sprepTrieSize + mappingDataCapacity*U_SIZEOF_UCHAR + sizeof(indexes);
if(beVerbose) {
printf("size of sprep trie %5u bytes\n", (int)sprepTrieSize);
@@ -598,11 +600,11 @@ generateData(const char *dataDir, const char* bundleName) {
indexes[_SPREP_INDEX_TRIE_SIZE]=sprepTrieSize;
indexes[_SPREP_INDEX_MAPPING_DATA_SIZE]=mappingDataCapacity*U_SIZEOF_UCHAR;
-
+
udata_writeBlock(pData, indexes, sizeof(indexes));
udata_writeBlock(pData, sprepTrieBlock, sprepTrieSize);
udata_writeBlock(pData, mappingData, indexes[_SPREP_INDEX_MAPPING_DATA_SIZE]);
-
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/gentest/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/gentest/Makefile.in
index 5f6d9e8af0c..4aba2b6edd9 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gentest/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/gentest/Makefile.in
@@ -26,7 +26,8 @@ CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil -I$(top_srcdir)/tools
CPPFLAGS+= -I$(top_srcdir)/i18n
LIBS = $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = gentest.o genres32.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.c=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj b/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj
index 2c6c7685dde..79155c11aa1 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj
@@ -15,22 +15,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/gentest/sources.txt b/Build/source/libs/icu/icu-src/source/tools/gentest/sources.txt
new file mode 100644
index 00000000000..b6810849d08
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gentest/sources.txt
@@ -0,0 +1,2 @@
+genres32.c
+gentest.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/icu-file-utf8-check.py b/Build/source/libs/icu/icu-src/source/tools/icu-file-utf8-check.py
deleted file mode 100755
index 86de259e883..00000000000
--- a/Build/source/libs/icu/icu-src/source/tools/icu-file-utf8-check.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#! /usr/bin/python -B
-
-# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html
-
-# Copyright (C) 2009-2011, International Business Machines Corporation, Google and Others.
-# All rights reserved.
-
-#
-# Script to check that ICU source files contain only valid UTF-8 encoded text,
-# and that all files except '.txt' files do not contain a Byte Order Mark (BOM).
-#
-# THIS SCRIPT DOES NOT WORK ON WINDOWS
-# It only works correctly on platforms where the native line ending is a plain \n
-#
-# usage:
-# icu-file-utf8-check.py [options]
-#
-# options:
-# -h | --help Print a usage line and exit.
-#
-# The tool operates recursively on the directory from which it is run.
-# Only files from the ICU github repository are checked.
-# No changes are made to the repository; only the working copy will be altered.
-
-from __future__ import print_function
-
-import sys
-import os
-import os.path
-import re
-import getopt
-
-
-def runCommand(cmd):
- output_file = os.popen(cmd);
- output_text = output_file.read();
- exit_status = output_file.close();
- if exit_status:
- print('"', cmd, '" failed. Exiting.', file=sys.stderr)
- sys.exit(exit_status)
- return output_text
-
-
-def usage():
- print("usage: " + sys.argv[0] + " [-h | --help]")
-
-
-#
-# File check. Check source code files for UTF-8 and all except text files for not containing a BOM
-# file_name: name of a text file.
-# is_source: Flag, set to True if file is a source code file (.c, .cpp, .h, .java).
-#
-def check_file(file_name, is_source):
- f = open(file_name, 'rb')
- bytes = f.read()
- f.close()
-
- if is_source:
- try:
- bytes.decode("UTF-8")
- except UnicodeDecodeError:
- print("Error: %s is a source code file but contains non-utf-8 bytes." % file_name)
-
- if bytes[0] == 0xef:
- if not (file_name.endswith(".txt") or file_name.endswith(".sln")
- or file_name.endswith(".targets")
- or ".vcxproj" in file_name):
- print("Warning: file %s contains a UTF-8 BOM: " % file_name)
-
- return
-
-def main(argv):
- try:
- opts, args = getopt.getopt(argv, "h", ("help"))
- except getopt.GetoptError:
- print("unrecognized option: " + argv[0])
- usage()
- sys.exit(2)
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit()
- if args:
- print("unexpected command line argument")
- usage()
- sys.exit()
-
- output = runCommand("git ls-files ");
- file_list = output.splitlines()
-
- source_file_re = re.compile(".*((?:\\.c$)|(?:\\.cpp$)|(?:\\.h$)|(?:\\.java$))")
-
- for f in file_list:
- if os.path.isdir(f):
- print("Skipping dir " + f)
- continue
- if not os.path.isfile(f):
- print("Repository file not in working copy: " + f)
- continue;
-
- source_file = source_file_re.match(f)
- check_file(f, source_file)
-
-if __name__ == "__main__":
- main(sys.argv[1:])
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/icuinfo/Makefile.in
index ddbb2ee88fb..68eeb084bf9 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuinfo/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/Makefile.in
@@ -26,8 +26,10 @@ CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil -I$(top_srcdir)/tools
CPPFLAGS+= -I$(top_srcdir)/i18n
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = icuinfo.o
-@PLUGINS_TRUE@PLUGIN_OBJECTS = testplug.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
+@PLUGINS_TRUE@PLUGIN_SOURCES = $(shell cat $(srcdir)/plugin_sources.txt)
+@PLUGINS_TRUE@PLUGIN_OBJECTS = $(@PLUGINS_TRUE@PLUGIN_SOURCES:.c=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp b/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
index fee17cf685c..934825924f5 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
@@ -58,6 +58,12 @@ static void do_init() {
}
}
+static void do_cleanup() {
+ if (icuInitted) {
+ u_cleanup();
+ icuInitted = FALSE;
+ }
+}
void cmd_millis()
{
@@ -295,5 +301,7 @@ main(int argc, char* argv[]) {
cmd_version(FALSE, errorCode); /* at least print the version # */
}
+ do_cleanup();
+
return U_FAILURE(errorCode);
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj b/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj
index 78ac7fa1ef8..ac8bfa88eb9 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/plugin_sources.txt b/Build/source/libs/icu/icu-src/source/tools/icuinfo/plugin_sources.txt
new file mode 100644
index 00000000000..7d5e6633829
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/plugin_sources.txt
@@ -0,0 +1 @@
+testplug.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/sources.txt b/Build/source/libs/icu/icu-src/source/tools/icuinfo/sources.txt
new file mode 100644
index 00000000000..67b9aa2df89
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/sources.txt
@@ -0,0 +1 @@
+icuinfo.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj b/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj
index ca81f1a7698..dac99beb4e5 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/icupkg/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/icupkg/Makefile.in
index 6a5a77313c9..45f0b33f83a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icupkg/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/icupkg/Makefile.in
@@ -31,7 +31,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = icupkg.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp b/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp
index ea7be4a9092..39707946b09 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp
@@ -59,6 +59,7 @@ printUsage(const char *pname, UBool isHelp) {
"%csage: %s [-h|-?|--help ] [-tl|-tb|-te] [-c] [-C comment]\n"
"\t[-a list] [-r list] [-x list] [-l [-o outputListFileName]]\n"
"\t[-s path] [-d path] [-w] [-m mode]\n"
+ "\t[--ignore-deps]\n"
"\t[--auto_toc_prefix] [--auto_toc_prefix_with_type] [--toc_prefix]\n"
"\tinfilename [outfilename]\n",
isHelp ? 'U' : 'u', pname);
@@ -121,6 +122,10 @@ printUsage(const char *pname, UBool isHelp) {
"\t noslash: the '*' wildcard does not match the '/' tree separator\n");
fprintf(where,
"\n"
+ "\t--ignore-deps Do not fail if not all resource dependencies are met. Use this\n"
+ "\t option if the missing resources come from another source.");
+ fprintf(where,
+ "\n"
"\tIn the .dat package, the Table of Contents (ToC) contains an entry\n"
"\tfor each item of the form prefix/tree/itemname .\n"
"\tThe prefix normally matches the package basename, and icupkg checks that,\n"
@@ -198,6 +203,8 @@ static UOption options[]={
UOPTION_DEF("matchmode", 'm', UOPT_REQUIRES_ARG),
+ UOPTION_DEF("ignore-deps", '\1', UOPT_NO_ARG),
+
UOPTION_DEF("add", 'a', UOPT_REQUIRES_ARG),
UOPTION_DEF("remove", 'r', UOPT_REQUIRES_ARG),
UOPTION_DEF("extract", 'x', UOPT_REQUIRES_ARG),
@@ -225,6 +232,8 @@ enum {
OPT_MATCHMODE,
+ OPT_IGNORE_DEPS,
+
OPT_ADD_LIST,
OPT_REMOVE_LIST,
OPT_EXTRACT_LIST,
@@ -501,7 +510,7 @@ main(int argc, char *argv[]) {
}
/* check dependencies between items */
- if(!pkg->checkDependencies()) {
+ if(!options[OPT_IGNORE_DEPS].doesOccur && !pkg->checkDependencies()) {
/* some dependencies are not fulfilled */
return U_MISSING_RESOURCE_ERROR;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj b/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj
index 1af31e079c4..7b9cf58491a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/icupkg/sources.txt b/Build/source/libs/icu/icu-src/source/tools/icupkg/sources.txt
new file mode 100644
index 00000000000..b4406e62261
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icupkg/sources.txt
@@ -0,0 +1 @@
+icupkg.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuswap/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/icuswap/Makefile.in
index f2f7978758d..18b04e8b3cd 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuswap/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/icuswap/Makefile.in
@@ -31,7 +31,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = icuswap.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj b/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj
index 78e29470313..3c60511b42e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj
@@ -46,22 +46,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuswap/sources.txt b/Build/source/libs/icu/icu-src/source/tools/icuswap/sources.txt
new file mode 100644
index 00000000000..6e73ffbf1ea
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuswap/sources.txt
@@ -0,0 +1 @@
+icuswap.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in
index 64472838a59..061d54c4881 100644
--- a/Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in
@@ -31,7 +31,8 @@ TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = makeconv.o ucnvstat.o genmbcs.o gencnvex.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o, $(SOURCES)))
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp b/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp
index 79f185fe0e0..488af477da0 100644
--- a/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp
@@ -26,6 +26,7 @@
#include "ucm.h"
#include "makeconv.h"
#include "genmbcs.h"
+#include "toolutil.h"
/*
* TODO: Split this file into toUnicode, SBCSFromUnicode and MBCSFromUnicode files.
diff --git a/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj b/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj
index 73c94a7c289..1ec8ec709ee 100644
--- a/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/makeconv/sources.txt b/Build/source/libs/icu/icu-src/source/tools/makeconv/sources.txt
new file mode 100644
index 00000000000..4283ea9c498
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/makeconv/sources.txt
@@ -0,0 +1,4 @@
+gencnvex.c
+genmbcs.cpp
+makeconv.cpp
+ucnvstat.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c b/Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c
index c04a025b385..05d8bffc8f6 100644
--- a/Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c
+++ b/Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c
@@ -15,6 +15,7 @@
#include "unicode/utypes.h"
#include "unicode/ucnv.h"
+#include "toolutil.h"
#include "ucnv_bld.h"
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in
index 13e12897e4b..4777998852d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in
@@ -36,7 +36,8 @@ CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common -I$(srcdir)/../toolutil
DEFS += -DUDATA_SO_SUFFIX=\".$(SO)\" -DSTATIC_O=\"$(STATIC_O)\"
LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
-OBJECTS = pkgdata.o pkgtypes.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o, $(SOURCES)))
DEPS = $(OBJECTS:.o=.d)
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
index 1f318ac0f3a..5ab682e4df8 100644
--- a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
@@ -46,6 +46,7 @@
#include "flagparser.h"
#include "filetools.h"
#include "charstr.h"
+#include "uassert.h"
#if U_HAVE_POPEN
# include <unistd.h>
@@ -66,6 +67,8 @@ U_DEFINE_LOCAL_OPEN_POINTER(LocalPipeFilePointer, FILE, pclose);
#endif
+using icu::LocalMemory;
+
static void loadLists(UPKGOptions *o, UErrorCode *status);
static int32_t pkg_executeOptions(UPKGOptions *o);
@@ -93,7 +96,7 @@ static int32_t pkg_archiveLibrary(const char *targetDir, const char *version, UB
static void createFileNames(UPKGOptions *o, const char mode, const char *version_major, const char *version, const char *libName, const UBool reverseExt, UBool noVersion);
static int32_t initializePkgDataFlags(UPKGOptions *o);
-static int32_t pkg_getOptionsFromICUConfig(UBool verbose, UOption *option);
+static int32_t pkg_getPkgDataPath(UBool verbose, UOption *option);
static int runCommand(const char* command, UBool specialHandling=FALSE);
#define IN_COMMON_MODE(mode) (mode == 'a' || mode == 'c')
@@ -307,7 +310,7 @@ main(int argc, char* argv[]) {
#if !defined(WINDOWS_WITH_MSVC) || defined(USING_CYGWIN)
if(!options[BLDOPT].doesOccur && uprv_strcmp(options[MODE].value, "common") != 0) {
- if (pkg_getOptionsFromICUConfig(options[VERBOSE].doesOccur, &options[BLDOPT]) != 0) {
+ if (pkg_getPkgDataPath(options[VERBOSE].doesOccur, &options[BLDOPT]) != 0) {
fprintf(stderr, " required parameter is missing: -O is required for static and shared builds.\n");
fprintf(stderr, "Run '%s --help' for help.\n", progname);
return 1;
@@ -773,7 +776,8 @@ static int32_t pkg_executeOptions(UPKGOptions *o) {
(optMatchArch[0] == 0 ? NULL : optMatchArch),
NULL,
gencFilePath,
- sizeof(gencFilePath));
+ sizeof(gencFilePath),
+ TRUE);
pkg_destroyOptMatchArch(optMatchArch);
#if U_PLATFORM_IS_LINUX_BASED
result = pkg_generateLibraryFile(targetDir, mode, gencFilePath);
@@ -1129,12 +1133,15 @@ static int32_t pkg_installLibrary(const char *installDir, const char *targetDir,
int32_t result = 0;
char cmd[SMALL_BUFFER_MAX_SIZE];
- sprintf(cmd, "cd %s && %s %s %s%s%s",
+ auto ret = snprintf(cmd,
+ SMALL_BUFFER_MAX_SIZE,
+ "cd %s && %s %s %s%s%s",
targetDir,
pkgDataFlags[INSTALL_CMD],
libFileNames[LIB_FILE_VERSION],
- installDir, PKGDATA_FILE_SEP_STRING, libFileNames[LIB_FILE_VERSION]
- );
+ installDir, PKGDATA_FILE_SEP_STRING, libFileNames[LIB_FILE_VERSION]);
+ (void)ret;
+ U_ASSERT(0 <= ret && ret < SMALL_BUFFER_MAX_SIZE);
result = runCommand(cmd);
@@ -1252,10 +1259,14 @@ static int32_t pkg_installFileMode(const char *installDir, const char *srcDir, c
buffer[bufferLength-1] = 0;
}
- sprintf(cmd, "%s %s%s%s %s%s%s",
+ auto ret = snprintf(cmd,
+ SMALL_BUFFER_MAX_SIZE,
+ "%s %s%s%s %s%s%s",
pkgDataFlags[INSTALL_CMD],
srcDir, PKGDATA_FILE_SEP_STRING, buffer,
installDir, PKGDATA_FILE_SEP_STRING, buffer);
+ (void)ret;
+ U_ASSERT(0 <= ret && ret < SMALL_BUFFER_MAX_SIZE);
result = runCommand(cmd);
if (result != 0) {
@@ -1527,9 +1538,7 @@ static int32_t pkg_generateLibraryFile(const char *targetDir, const char mode, c
static int32_t pkg_createWithAssemblyCode(const char *targetDir, const char mode, const char *gencFilePath) {
char tempObjectFile[SMALL_BUFFER_MAX_SIZE] = "";
- char *cmd;
int32_t result = 0;
-
int32_t length = 0;
/* Remove the ending .s and replace it with .o for the new object file. */
@@ -1539,22 +1548,22 @@ static int32_t pkg_createWithAssemblyCode(const char *targetDir, const char mode
length = static_cast<int32_t>(uprv_strlen(pkgDataFlags[COMPILER]) + uprv_strlen(pkgDataFlags[LIBFLAGS])
+ uprv_strlen(tempObjectFile) + uprv_strlen(gencFilePath) + BUFFER_PADDING_SIZE);
- cmd = (char *)uprv_malloc(sizeof(char) * length);
- if (cmd == NULL) {
+ LocalMemory<char> cmd((char *)uprv_malloc(sizeof(char) * length));
+ if (cmd.isNull()) {
return -1;
}
/* Generate the object file. */
- sprintf(cmd, "%s %s -o %s %s",
+ sprintf(cmd.getAlias(), "%s %s -o %s %s",
pkgDataFlags[COMPILER],
pkgDataFlags[LIBFLAGS],
tempObjectFile,
gencFilePath);
- result = runCommand(cmd);
- uprv_free(cmd);
+ result = runCommand(cmd.getAlias());
+
if (result != 0) {
- fprintf(stderr, "Error creating with assembly code. Failed command: %s\n", cmd);
+ fprintf(stderr, "Error creating with assembly code. Failed command: %s\n", cmd.getAlias());
return result;
}
@@ -1689,12 +1698,20 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD
break;
}
}
- sprintf(newName, "%s_%s",
+ auto ret = snprintf(newName,
+ SMALL_BUFFER_MAX_SIZE,
+ "%s_%s",
DATA_PREFIX[n],
newNameTmp);
- sprintf(dataName, "%s_%s",
+ (void)ret;
+ U_ASSERT(0 <= ret && ret < SMALL_BUFFER_MAX_SIZE);
+ ret = snprintf(dataName,
+ SMALL_BUFFER_MAX_SIZE,
+ "%s_%s",
o->shortName,
DATA_PREFIX[n]);
+ (void)ret;
+ U_ASSERT(0 <= ret && ret < SMALL_BUFFER_MAX_SIZE);
}
if (newName[0] != 0) {
break;
@@ -2158,41 +2175,46 @@ static void loadLists(UPKGOptions *o, UErrorCode *status)
} /* for each file list file */
}
-/* Try calling icu-config directly to get the option file. */
- static int32_t pkg_getOptionsFromICUConfig(UBool verbose, UOption *option) {
+/* Helper for pkg_getPkgDataPath() */
#if U_HAVE_POPEN
- LocalPipeFilePointer p;
- size_t n;
- static char buf[512] = "";
+static UBool getPkgDataPath(const char *cmd, UBool verbose, char *buf, size_t items) {
icu::CharString cmdBuf;
UErrorCode status = U_ZERO_ERROR;
- const char cmd[] = "icu-config --incpkgdatafile";
- char dirBuf[1024] = "";
- /* #1 try the same path where pkgdata was called from. */
- findDirname(progname, dirBuf, UPRV_LENGTHOF(dirBuf), &status);
- if(U_SUCCESS(status)) {
- cmdBuf.append(dirBuf, status);
- if (cmdBuf[0] != 0) {
- cmdBuf.append( U_FILE_SEP_STRING, status );
- }
- cmdBuf.append( cmd, status );
-
- if(verbose) {
- fprintf(stdout, "# Calling icu-config: %s\n", cmdBuf.data());
- }
- p.adoptInstead(popen(cmdBuf.data(), "r"));
- }
-
- if(p.isNull() || (n = fread(buf, 1, UPRV_LENGTHOF(buf)-1, p.getAlias())) <= 0) {
- if(verbose) {
- fprintf(stdout, "# Calling icu-config: %s\n", cmd);
- }
+ LocalPipeFilePointer p;
+ size_t n;
- p.adoptInstead(popen(cmd, "r"));
- if(p.isNull() || (n = fread(buf, 1, UPRV_LENGTHOF(buf)-1, p.getAlias())) <= 0) {
- fprintf(stderr, "%s: icu-config: No icu-config found. (fix PATH or use -O option)\n", progname);
+ cmdBuf.append(cmd, status);
+ if (verbose) {
+ fprintf(stdout, "# Calling: %s\n", cmdBuf.data());
+ }
+ p.adoptInstead( popen(cmdBuf.data(), "r") );
+
+ if (p.isNull() || (n = fread(buf, 1, items-1, p.getAlias())) <= 0) {
+ fprintf(stderr, "%s: Error calling '%s'\n", progname, cmd);
+ *buf = 0;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+#endif
+
+/* Get path to pkgdata.inc. Try pkg-config first, falling back to icu-config. */
+static int32_t pkg_getPkgDataPath(UBool verbose, UOption *option) {
+#if U_HAVE_POPEN
+ static char buf[512] = "";
+ UBool pkgconfigIsValid = TRUE;
+ const char *pkgconfigCmd = "pkg-config --variable=pkglibdir icu-uc";
+ const char *icuconfigCmd = "icu-config --incpkgdatafile";
+ const char *pkgdata = "pkgdata.inc";
+
+ if (!getPkgDataPath(pkgconfigCmd, verbose, buf, UPRV_LENGTHOF(buf))) {
+ if (!getPkgDataPath(icuconfigCmd, verbose, buf, UPRV_LENGTHOF(buf))) {
+ fprintf(stderr, "%s: icu-config not found. Fix PATH or specify -O option\n", progname);
return -1;
}
+
+ pkgconfigIsValid = FALSE;
}
for (int32_t length = strlen(buf) - 1; length >= 0; length--) {
@@ -2203,21 +2225,18 @@ static void loadLists(UPKGOptions *o, UErrorCode *status)
}
}
- if(buf[strlen(buf)-1]=='\n')
- {
- buf[strlen(buf)-1]=0;
- }
-
- if(buf[0] == 0)
- {
- fprintf(stderr, "%s: icu-config: invalid response from icu-config (fix PATH or use -O option)\n", progname);
+ if (!*buf) {
+ fprintf(stderr, "%s: Unable to locate pkgdata.inc. Unable to parse the results of '%s'. Check paths or use the -O option to specify the path to pkgdata.inc.\n", progname, pkgconfigIsValid ? pkgconfigCmd : icuconfigCmd);
return -1;
}
- if(verbose) {
- fprintf(stdout, "# icu-config said: %s\n", buf);
+ if (pkgconfigIsValid) {
+ uprv_strcat(buf, U_FILE_SEP_STRING);
+ uprv_strcat(buf, pkgdata);
}
+ buf[strlen(buf)] = 0;
+
option->value = buf;
option->doesOccur = TRUE;
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj
index f2efdbd6b8f..0975456bda4 100644
--- a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c
index 43ee3dfb5e2..26bd945df73 100644
--- a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c
@@ -17,6 +17,7 @@
* common types for pkgdata
*/
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "unicode/utypes.h"
@@ -294,9 +295,9 @@ UBool pkg_listContains(CharList *l, const char *str)
{
for(;l;l=l->next){
if(!uprv_strcmp(l->str, str)) {
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/sources.txt b/Build/source/libs/icu/icu-src/source/tools/pkgdata/sources.txt
new file mode 100644
index 00000000000..8a5b202fa9d
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/sources.txt
@@ -0,0 +1,2 @@
+pkgdata.cpp
+pkgtypes.c
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in
index 82ca0d8a395..c9fd89b0f0c 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in
@@ -55,12 +55,8 @@ DEFS += -DU_TOOLUTIL_IMPLEMENTATION
LDFLAGS += $(LDFLAGSICUTOOLUTIL)
LIBS = $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS)
-OBJECTS = filestrm.o package.o pkgitems.o swapimpl.o toolutil.o unewdata.o \
-collationinfo.o denseranges.o \
-ucm.o ucmstate.o uoptions.o uparse.o \
-ucbuf.o xmlparser.o writesrc.o \
-pkg_icu.o pkg_genc.o pkg_gencmn.o ppucd.o flagparser.o filetools.o \
-udbgutil.o dbgutil.o ucln_tu.o
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(SOURCES:.cpp=.o)
STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
@@ -94,6 +90,11 @@ ifneq ($(ENABLE_STATIC),)
$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
endif
ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -101,6 +102,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
endif
endif
+endif
ifneq ($(IMPORT_LIB_EXT),)
$(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp
index a5a3f518bb6..399ec6d16c0 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp
@@ -29,7 +29,7 @@ static const UnicodeString& _fieldString(UDebugEnumType type, int32_t field, Un
if(str == NULL) {
return fillin.remove();
} else {
- return fillin = UnicodeString(str, ""); // optimize?
+ return fillin = UnicodeString(str, -1, US_INV);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h
index 6a25c3601c0..40a606a7d49 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h
@@ -26,7 +26,7 @@
#include "unicode/utypes.h"
U_CAPI UBool U_EXPORT2
-isFileModTimeLater(const char *filePath, const char *checkAgainst, UBool isDir=FALSE);
+isFileModTimeLater(const char *filePath, const char *checkAgainst, UBool isDir=false);
U_CAPI void U_EXPORT2
swapFileSepChar(char *filePath, const char oldFileSepChar, const char newFileSepChar);
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/package.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/package.h
index 2c5bd169093..ea60c13a74a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/package.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/package.h
@@ -57,13 +57,13 @@ public:
* Uses the prefix of the first entry of the package in readPackage(),
* rather than the package basename.
*/
- void setAutoPrefix() { doAutoPrefix=TRUE; }
+ void setAutoPrefix() { doAutoPrefix=true; }
/**
* Same as setAutoPrefix(), plus the prefix must end with the platform type letter.
*/
void setAutoPrefixWithType() {
- doAutoPrefix=TRUE;
- prefixEndsWithType=TRUE;
+ doAutoPrefix=true;
+ prefixEndsWithType=true;
}
void setPrefix(const char *p);
@@ -128,7 +128,7 @@ public:
const Item *getItem(int32_t idx) const;
/*
- * Check dependencies and return TRUE if all dependencies are fulfilled.
+ * Check dependencies and return true if all dependencies are fulfilled.
*/
UBool checkDependencies();
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp
index 3f71e00cb64..17347bac5d7 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp
@@ -131,6 +131,9 @@ static const struct AssemblyType {
{"gcc",
".globl %s\n"
"\t.section .note.GNU-stack,\"\",%%progbits\n"
+ "#ifdef __CET__\n"
+ "# include <cet.h>\n"
+ "#endif\n"
"\t.section .rodata\n"
"\t.balign 16\n"
"#ifdef U_HIDE_DATA_SYMBOL\n"
@@ -418,9 +421,9 @@ writeCCode(
filename,
destdir,
buffer,
- sizeof(buffer),
+ static_cast<int32_t>(sizeof(buffer)),
entry + uprv_strlen(entry),
- sizeof(entry) - uprv_strlen(entry),
+ static_cast<int32_t>(sizeof(entry) - uprv_strlen(entry)),
".c",
optFilename);
@@ -679,7 +682,7 @@ getOutFilename(
outFilenameBuilder.append(destdir, status);
outFilenameBuilder.ensureEndsWithFileSeparator(status);
} else {
- outFilenameBuilder.append(inFilename, basename - inFilename, status);
+ outFilenameBuilder.append(inFilename, static_cast<int32_t>(basename - inFilename), status);
}
inFilename=basename;
@@ -735,8 +738,8 @@ getOutFilename(
exit(U_ILLEGAL_ARGUMENT_ERROR);
}
- uprv_strcpy(outFilename, outFilenameBuilder.data());
- uprv_strcpy(entryName, entryNameBuilder.data());
+ outFilenameBuilder.extract(outFilename, outFilenameCapacity, status);
+ entryNameBuilder.extract(entryName, entryNameCapacity, status);
}
#ifdef CAN_GENERATE_OBJECTS
@@ -878,7 +881,8 @@ writeObjectCode(
const char *optMatchArch,
const char *optFilename,
char *outFilePath,
- size_t outFilePathCapacity) {
+ size_t outFilePathCapacity,
+ UBool optWinDllExport) {
/* common variables */
char buffer[4096], entry[96]={ 0 };
FileStream *in, *out;
@@ -888,6 +892,8 @@ writeObjectCode(
uint16_t cpu, bits;
UBool makeBigEndian;
+ (void)optWinDllExport; /* unused except Windows */
+
/* platform-specific variables and initialization code */
#ifdef U_ELF
/* 32-bit Elf file header */
@@ -1254,12 +1260,17 @@ writeObjectCode(
uprv_memset(&symbolNames, 0, sizeof(symbolNames));
/* write the linker export directive */
- uprv_strcpy(objHeader.linkerOptions, "-export:");
- length=8;
- uprv_strcpy(objHeader.linkerOptions+length, entry);
- length+=entryLength;
- uprv_strcpy(objHeader.linkerOptions+length, ",data ");
- length+=6;
+ if (optWinDllExport) {
+ uprv_strcpy(objHeader.linkerOptions, "-export:");
+ length=8;
+ uprv_strcpy(objHeader.linkerOptions+length, entry);
+ length+=entryLength;
+ uprv_strcpy(objHeader.linkerOptions+length, ",data ");
+ length+=6;
+ }
+ else {
+ length=0;
+ }
/* set the file header */
objHeader.fileHeader.Machine=cpu;
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h
index 47e8304a689..72d96870355 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h
@@ -68,13 +68,13 @@
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
printAssemblyHeadersToStdErr(void);
-U_INTERNAL UBool U_EXPORT2
+U_CAPI UBool U_EXPORT2
checkAssemblyHeaderName(const char* optAssembly);
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
writeCCode(
const char *filename,
const char *destdir,
@@ -83,7 +83,7 @@ writeCCode(
char *outFilePath,
size_t outFilePathCapacity);
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
writeAssemblyCode(
const char *filename,
const char *destdir,
@@ -92,7 +92,7 @@ writeAssemblyCode(
char *outFilePath,
size_t outFilePathCapacity);
-U_INTERNAL void U_EXPORT2
+U_CAPI void U_EXPORT2
writeObjectCode(
const char *filename,
const char *destdir,
@@ -100,6 +100,7 @@ writeObjectCode(
const char *optMatchArch,
const char *optFilename,
char *outFilePath,
- size_t outFilePathCapacity);
+ size_t outFilePathCapacity,
+ UBool optWinDllExport);
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
index 7b86c55fa42..1d4542f2e30 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
@@ -441,6 +441,7 @@ ures_enumDependencies(const char *itemName, const UDataInfo *pInfo,
// get dependencies from conversion tables --------------------------------- ***
+#if !UCONFIG_NO_CONVERSION
/* code adapted from ucnv_swap() */
static void
ucnv_enumDependencies(const UDataSwapper *ds,
@@ -631,5 +632,6 @@ Package::enumDependencies(Item *pItem, void *context, CheckDependency check) {
}
}
}
+#endif /* UCONFIG_NO_CONVERSION */
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/sources.txt b/Build/source/libs/icu/icu-src/source/tools/toolutil/sources.txt
new file mode 100644
index 00000000000..d3288997e21
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/sources.txt
@@ -0,0 +1,24 @@
+collationinfo.cpp
+dbgutil.cpp
+denseranges.cpp
+filestrm.cpp
+filetools.cpp
+flagparser.cpp
+package.cpp
+pkg_genc.cpp
+pkg_gencmn.cpp
+pkg_icu.cpp
+pkgitems.cpp
+ppucd.cpp
+swapimpl.cpp
+toolutil.cpp
+ucbuf.cpp
+ucln_tu.cpp
+ucm.cpp
+ucmstate.cpp
+udbgutil.cpp
+unewdata.cpp
+uoptions.cpp
+uparse.cpp
+writesrc.cpp
+xmlparser.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
index a035f2326a6..444f8497a74 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
@@ -33,7 +33,7 @@
#include "unicode/utypes.h"
#ifndef U_TOOLUTIL_IMPLEMENTATION
-#error U_TOOLUTIL_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see http://userguide.icu-project.org/howtouseicu
+#error U_TOOLUTIL_IMPLEMENTATION not set - must be set for all ICU source files in common/ - see https://unicode-org.github.io/icu/userguide/howtouseicu
#endif
#if U_PLATFORM_USES_ONLY_WIN32_API
@@ -60,6 +60,8 @@
#include <errno.h>
+#include <cstddef>
+
#include "unicode/errorcode.h"
#include "unicode/putil.h"
#include "cmemory.h"
@@ -164,14 +166,11 @@ findBasename(const char *filename) {
const char *basename=uprv_strrchr(filename, U_FILE_SEP_CHAR);
#if U_FILE_ALT_SEP_CHAR!=U_FILE_SEP_CHAR
-#if !(U_PLATFORM == U_PF_CYGWIN && U_PLATFORM_USES_ONLY_WIN32_API)
- if(basename==NULL)
-#endif
- {
- /* Use lenient matching on Windows, which can accept either \ or /
- This is useful for environments like Win32+CygWin which have both.
- */
- basename=uprv_strrchr(filename, U_FILE_ALT_SEP_CHAR);
+ //be lenient about pathname separators on Windows, like official implementation of C++17 std::filesystem in MSVC
+ //would be convenient to merge this loop with the one above, but alas, there is no such solution in the standard library
+ const char *alt_basename=uprv_strrchr(filename, U_FILE_ALT_SEP_CHAR);
+ if(alt_basename>basename) {
+ basename=alt_basename;
}
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
index 7ab665cf506..e6be0a2adfe 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
@@ -23,6 +23,12 @@
#include "unicode/utypes.h"
+#ifndef TRUE
+# define TRUE 1
+#endif
+#ifndef FALSE
+# define FALSE 0
+#endif
#ifdef __cplusplus
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
index d6ab1042e4c..5fe0035a124 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
@@ -14,22 +14,6 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
- </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
@@ -90,7 +74,7 @@
<TypeLibraryName>.\..\..\..\lib\icutu.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\bin\icutu65.dll</OutputFile>
+ <OutputFile>..\..\..\bin\icutu68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib\icutu.pdb</ProgramDatabaseFile>
<DataExecutionPrevention>
</DataExecutionPrevention>
@@ -102,7 +86,7 @@
<TypeLibraryName>.\..\..\..\lib\icutud.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\bin\icutu65d.dll</OutputFile>
+ <OutputFile>..\..\..\bin\icutu68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib\icutud.pdb</ProgramDatabaseFile>
<DataExecutionPrevention>
</DataExecutionPrevention>
@@ -129,7 +113,7 @@
<WholeProgramOptimization>true</WholeProgramOptimization>
</ClCompile>
<Link>
- <OutputFile>..\..\..\bin64\icutu65.dll</OutputFile>
+ <OutputFile>..\..\..\bin64\icutu68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib64\icutu.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\lib64\icutu.lib</ImportLibrary>
</Link>
@@ -139,7 +123,7 @@
<TypeLibraryName>.\..\..\..\lib64\icutud.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\bin64\icutu65d.dll</OutputFile>
+ <OutputFile>..\..\..\bin64\icutu68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib64\icutud.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\lib64\icutud.lib</ImportLibrary>
</Link>
@@ -160,7 +144,7 @@
<TypeLibraryName>..\..\..\libARM\icutu.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\binARM\icutu65.dll</OutputFile>
+ <OutputFile>..\..\..\binARM\icutu68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM\icutu.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM\icutu.lib</ImportLibrary>
</Link>
@@ -173,7 +157,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
- <OutputFile>..\..\..\binARM\icutu65d.dll</OutputFile>
+ <OutputFile>..\..\..\binARM\icutu68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM\icutud.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM\icutud.lib</ImportLibrary>
</Link>
@@ -194,7 +178,7 @@
<TypeLibraryName>.\..\..\..\libARM64\icutu.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\binARM64\icutu65.dll</OutputFile>
+ <OutputFile>..\..\..\binARM64\icutu68.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM64\icutu.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM64\icutu.lib</ImportLibrary>
</Link>
@@ -207,7 +191,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
- <OutputFile>..\..\..\binARM64\icutu65d.dll</OutputFile>
+ <OutputFile>..\..\..\binARM64\icutu68d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM64\icutud.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM64\icutud.lib</ImportLibrary>
</Link>
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp
index 285f68a0ec6..993694546f4 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp
@@ -594,24 +594,11 @@ U_CAPI void udbg_writeIcuInfo(FILE *out) {
fprintf(out, " </icuSystemParams>\n");
}
-#define ICU_TRAC_URL "http://bugs.icu-project.org/trac/ticket/"
-#define CLDR_TRAC_URL "http://unicode.org/cldr/trac/ticket/"
-#define CLDR_TICKET_PREFIX "cldrbug:"
+#define UNICODE_BUG_URL "https://unicode-org.atlassian.net/browse/"
+#define OLD_CLDR_PREFIX "cldrbug:"
+#define CLDR_BUG_PREFIX "CLDR-"
+#define ICU_BUG_PREFIX "ICU-"
-U_CAPI char *udbg_knownIssueURLFrom(const char *ticket, char *buf) {
- if( ticket==NULL ) {
- return NULL;
- }
-
- if( !strncmp(ticket, CLDR_TICKET_PREFIX, strlen(CLDR_TICKET_PREFIX)) ) {
- strcpy( buf, CLDR_TRAC_URL );
- strcat( buf, ticket+strlen(CLDR_TICKET_PREFIX) );
- } else {
- strcpy( buf, ICU_TRAC_URL );
- strcat( buf, ticket );
- }
- return buf;
-}
#include <set>
@@ -641,8 +628,27 @@ KnownIssues::~KnownIssues()
{
}
-void KnownIssues::add(const char *ticket, const char *where, const UChar *msg, UBool *firstForTicket, UBool *firstForWhere)
+/**
+ * Map cldr:1234 to CLDR-1234
+ * Map 1234 to ICU-1234
+ */
+static std::string mapTicketId(const char *ticketStr) {
+ std::string ticket(ticketStr);
+ // TODO: Can remove this function once all logKnownIssue calls are switched over
+ // to the ICU-1234 and CLDR-1234 format.
+ if(ticket.rfind(OLD_CLDR_PREFIX) == 0) {
+ // map cldrbug:1234 to CLDR-1234
+ ticket.replace(0, uprv_strlen(OLD_CLDR_PREFIX), CLDR_BUG_PREFIX);
+ } else if(::isdigit(ticket[0])) {
+ // map 1234 to ICU-1234
+ ticket.insert(0, ICU_BUG_PREFIX);
+ }
+ return ticket;
+}
+
+void KnownIssues::add(const char *ticketStr, const char *where, const UChar *msg, UBool *firstForTicket, UBool *firstForWhere)
{
+ const std::string ticket = mapTicketId(ticketStr);
if(fTable.find(ticket) == fTable.end()) {
if(firstForTicket!=NULL) *firstForTicket = TRUE;
fTable[ticket] = std::map < std::string, std::set < std::string > >();
@@ -664,8 +670,9 @@ void KnownIssues::add(const char *ticket, const char *where, const UChar *msg, U
fTable[ticket][where].insert(std::string(icu::CStr(ustr)()));
}
-void KnownIssues::add(const char *ticket, const char *where, const char *msg, UBool *firstForTicket, UBool *firstForWhere)
+void KnownIssues::add(const char *ticketStr, const char *where, const char *msg, UBool *firstForTicket, UBool *firstForWhere)
{
+ const std::string ticket = mapTicketId(ticketStr);
if(fTable.find(ticket) == fTable.end()) {
if(firstForTicket!=NULL) *firstForTicket = TRUE;
fTable[ticket] = std::map < std::string, std::set < std::string > >();
@@ -697,8 +704,13 @@ UBool KnownIssues::print()
std::map < std::string, std::set < std::string > > >::iterator i = fTable.begin();
i != fTable.end();
i++ ) {
- char URL[1024];
- std::cout << '#' << (*i).first << " <" << udbg_knownIssueURLFrom( (*i).first.c_str(), URL ) << ">" << std::endl;
+ const std::string ticketid = (*i).first;
+ std::cout << "[" << ticketid << "] ";
+ if(ticketid.rfind(ICU_BUG_PREFIX) == 0 || ticketid.rfind(CLDR_BUG_PREFIX) == 0) {
+ // If it's a unicode.org bug.
+ std::cout << UNICODE_BUG_URL << ticketid;
+ } // Else: some other kind of bug. Allow this, but without a URL.
+ std::cout << std::endl;
for( std::map< std::string, std::set < std::string > >::iterator ii = (*i).second.begin();
ii != (*i).second.end();
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h
index 2f186e6ed87..b9af132da5b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h
@@ -114,14 +114,6 @@ U_CAPI void udbg_writeIcuInfo(FILE *f);
#define UDBG_KNOWNISSUE_LEN 255
/**
- * Convert a "known issue" string into a URL
- * @param ticket ticket string such as "10245" or "cldrbug:5013"
- * @param buf output buffer - must be UDBG_KNOWNISSUE_LEN in size
- * @return pointer to output buffer, or NULL on err
- */
-U_CAPI char *udbg_knownIssueURLFrom(const char *ticket, char *buf);
-
-/**
* Open (or reopen) a 'known issue' table.
* @param ptr pointer to 'table'. Opaque.
* @return new or existing ptr
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp
index 32b615c39b8..43ff16b6eec 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp
@@ -56,15 +56,25 @@ udata_create(const char *dir, const char *type, const char *name,
*pErrorCode=U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
-
+
+ char dirSepChar = U_FILE_SEP_CHAR;
+#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
+ // We may need to append a different directory separator when building for Cygwin or MSYS2.
+ if(dir && *dir) {
+ if(!uprv_strchr(dir, U_FILE_SEP_CHAR) && uprv_strchr(dir, U_FILE_ALT_SEP_CHAR)) {
+ dirSepChar = U_FILE_ALT_SEP_CHAR;
+ }
+ }
+#endif
+
/* Check that the full path won't be too long */
length = 0; /* Start with nothing */
if(dir != NULL && *dir !=0) /* Add directory length if one was given */
{
length += static_cast<int32_t>(strlen(dir));
-
+
/* Add 1 if dir doesn't end with path sep */
- if (dir[strlen(dir) - 1]!= U_FILE_SEP_CHAR) {
+ if (dir[strlen(dir) - 1]!= dirSepChar) {
length++;
}
}
@@ -74,7 +84,7 @@ udata_create(const char *dir, const char *type, const char *name,
length += static_cast<int32_t>(strlen(type));
}
-
+
/* LDH buffer Length error check */
if(length > ((int32_t)sizeof(filename) - 1))
{
@@ -82,13 +92,13 @@ udata_create(const char *dir, const char *type, const char *name,
uprv_free(pData);
return NULL;
}
-
+
/* open the output file */
if(dir!=NULL && *dir!=0) { /* if dir has a value, we prepend it to the filename */
char *p=filename+strlen(dir);
uprv_strcpy(filename, dir);
- if (*(p-1)!=U_FILE_SEP_CHAR) {
- *p++=U_FILE_SEP_CHAR;
+ if (*(p-1)!=dirSepChar) {
+ *p++=dirSepChar;
*p=0;
}
} else { /* otherwise, we'll output to the current dir */
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in
index 80139f79930..4ba969f42ef 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in
@@ -19,14 +19,11 @@ TZCODE = $(firstword $(wildcard ./tzcode*.tar.gz) $(wildcard $(srcdir)/tzcode*.t
endif
-PRIMARY_YDATA= africa antarctica asia australasia \
- europe northamerica southamerica
-YDATA= $(PRIMARY_YDATA) pacificnew etcetera factory backward
-NDATA= systemv
-SDATA= solar87 solar88 solar89
-#TDATA= $(YDATA) $(NDATA) $(SDATA)
-TDATA= $(YDATA) $(NDATA)
-YEARISTYPE= ./yearistype
+PRIMARY_DATA = africa antarctica asia australasia europe northamerica southamerica
+SUPPLEMENTAL_DATA = etcetera factory backward
+#DEPRECATED_DATA = pacificnew systemv solar87 solar88 solar89
+#TDATA = $(PRIMARY_DATA) $(SUPPLEMENTAL_DATA) $(DEPRECATED_DATA)
+TDATA = $(PRIMARY_DATA) $(SUPPLEMENTAL_DATA)
TZDIR=zoneinfo
@@ -34,7 +31,7 @@ CFLAGS+=-D_POSIX_C_SOURCE
CPPFLAGS+= -DTZDIR=\"$(TZDIR)\"
# more data
-XDATA=zone.tab yearistype.sh leapseconds iso3166.tab
+XDATA=zone.tab leapseconds iso3166.tab
ICUDATA=ZoneMetaData.java icu_zone.txt tz2icu zoneinfo64.txt zoneinfo.txt
VANGUARD_DIR= ./vanguard
@@ -102,8 +99,8 @@ tzorig: $(TZCODE) $(TZDATA)
cat $(TZORIG)/factory.orig $(srcdir)/icuzones > $(TZORIG)/factory
-mv $(TZORIG)/zishrink.awk $(TZORIG)/zishrink.awk.orig
sed -e '/if (line ~ \/^R SystemV \/) return/s/^/#/' $(TZORIG)/zishrink.awk.orig > $(TZORIG)/zishrink.awk
- -mv $(TZORIG)/Makefile $(TZORIG)/Makefile.orig
- sed -e "s/^BACKWARD=.*/BACKWARD= backward pacificnew/" $(TZORIG)/Makefile.orig > $(TZORIG)/Makefile
+# -mv $(TZORIG)/Makefile $(TZORIG)/Makefile.orig
+# sed -e "s/^BACKWARD=.*/BACKWARD= backward pacificnew/" $(TZORIG)/Makefile.orig > $(TZORIG)/Makefile
$(MAKE) -C $@ $(TZORIG_OPTS) zdump zones
$(ZDUMPOUT): tzorig
@@ -129,7 +126,7 @@ $(ICUZDUMPOUT): $(ICUZDUMPEXEC)
#
-$(ZICTARG): $(OBJECTS) $(TDATA) yearistype $(srcdir)/tz2icu.h
+$(ZICTARG): $(OBJECTS) $(TDATA) $(srcdir)/tz2icu.h
$(CC) $(CFLAGS) $(TZORIG_EXTRA_CFLAGS) $(LFLAGS) -I$(srcdir) $(OBJECTS) $(LDLIBS) -o $@
$(TZ2ICUTARG): $(srcdir)/tz2icu.cpp $(srcdir)/tz2icu.h
@@ -150,12 +147,8 @@ tdatamarker: $(TZDATA)
done
touch $@
-yearistype: yearistype.sh
- cp yearistype.sh yearistype
- chmod +x yearistype
-
posix_only: $(ZICEXEC) $(TDATA) $(srcdir)/icuzones
- $(ZICEXEC) -y $(YEARISTYPE) -d $(TZDIR) -L /dev/null $(TDATA) $(srcdir)/icuzones
+ $(ZICEXEC) -d $(TZDIR) -L /dev/null $(TDATA) $(srcdir)/icuzones
icu_data: $(TZ2ICUEXEC) posix_only
@@ -163,7 +156,7 @@ icu_data: $(TZ2ICUEXEC) posix_only
$(TZ2ICUEXEC) $(TZDIR) zone.tab `echo $(TZDATA) | sed -e "s/.*\/tzdata//;s/\.tar\.gz$$//"` --old
clean:
- -rm -f core *.o *.out zdump${EXEEXT} $(ZICTARG) yearistype date $(TZ2ICUTARG)
+ -rm -f core *.o *.out zdump${EXEEXT} $(ZICTARG) date $(TZ2ICUTARG)
@echo ICU specific cleanup:
-rm -f $(ICUDATA)
-rm -rf $(TZDIR)
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
index 71551ed8d9a..783f63d22b3 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
@@ -137,12 +137,12 @@ public:
getCutOverTimes(cutlo, cuthi);
t = cutlo;
- timezone->getOffset(t, FALSE, rawOffset, dstOffset, status);
+ timezone->getOffset(t, false, rawOffset, dstOffset, status);
while (t < cuthi) {
int32_t newRawOffset, newDstOffset;
UDate newt = t + SEARCH_INCREMENT;
- timezone->getOffset(newt, FALSE, newRawOffset, newDstOffset, status);
+ timezone->getOffset(newt, false, newRawOffset, newDstOffset, status);
UBool bSameOffset = (rawOffset + dstOffset) == (newRawOffset + newDstOffset);
UBool bSameDst = ((dstOffset != 0) && (newDstOffset != 0)) || ((dstOffset == 0) && (newDstOffset == 0));
@@ -158,7 +158,7 @@ public:
}
UDate medt = lot + ((diff / 2) / tick) * tick;
int32_t medRawOffset, medDstOffset;
- timezone->getOffset(medt, FALSE, medRawOffset, medDstOffset, status);
+ timezone->getOffset(medt, false, medRawOffset, medDstOffset, status);
bSameOffset = (rawOffset + dstOffset) == (medRawOffset + medDstOffset);
bSameDst = ((dstOffset != 0) && (medDstOffset != 0)) || ((dstOffset == 0) && (medDstOffset == 0));
@@ -171,10 +171,10 @@ public:
}
// write out the boundary
str.remove();
- formatter->format(lot, rawOffset + dstOffset, (dstOffset == 0 ? FALSE : TRUE), str);
+ formatter->format(lot, rawOffset + dstOffset, (dstOffset == 0 ? false : true), str);
out << str << " > ";
str.remove();
- formatter->format(hit, newRawOffset + newDstOffset, (newDstOffset == 0 ? FALSE : TRUE), str);
+ formatter->format(hit, newRawOffset + newDstOffset, (newDstOffset == 0 ? false : true), str);
out << str;
if (linesep != NULL) {
out << linesep;
@@ -211,7 +211,7 @@ private:
class ZoneIterator {
public:
- ZoneIterator(UBool bAll = FALSE) {
+ ZoneIterator(UBool bAll = false) {
if (bAll) {
zenum = TimeZone::createEnumeration();
}
@@ -288,7 +288,7 @@ extern int
main(int argc, char *argv[]) {
int32_t low = 1902;
int32_t high = 2038;
- UBool bAll = FALSE;
+ UBool bAll = false;
const char *dir = NULL;
const char *linesep = NULL;
@@ -355,7 +355,7 @@ main(int argc, char *argv[]) {
ZoneIterator* zit;
if (bAll) {
- zit = new ZoneIterator(TRUE);
+ zit = new ZoneIterator(true);
} else {
if (argc <= 1) {
zit = new ZoneIterator();
@@ -402,7 +402,7 @@ main(int argc, char *argv[]) {
} else {
// stdout
- UBool bFirst = TRUE;
+ UBool bFirst = true;
for (;;) {
TimeZone* tz = zit->next();
if (tz == NULL) {
@@ -411,7 +411,7 @@ main(int argc, char *argv[]) {
dumper.setTimeZone(tz);
tz->getID(id);
if (bFirst) {
- bFirst = FALSE;
+ bFirst = false;
} else {
cout << endl;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones
index 77cf71945b5..52f5698cd7b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones
@@ -17,7 +17,19 @@
Zone Etc/Unknown 0 - Unknown
# SystemV time zones.
-# The Olson systemv file has these commented out.
+# IANA tzdb file 'systemv' file has these SystemV/* zones commented out up to 2020a.
+# 'systemv' file was removed in 2020b. We keep them in this supplemental zone data
+# file for compatibility purpose.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
+Rule SystemV min 1973 - Oct lastSun 2:00 0 S
+Rule SystemV 1974 only - Jan 6 2:00 1:00 D
+Rule SystemV 1974 only - Nov lastSun 2:00 0 S
+Rule SystemV 1975 only - Feb 23 2:00 1:00 D
+Rule SystemV 1975 only - Oct lastSun 2:00 0 S
+Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
+Rule SystemV 1976 max - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
Zone SystemV/AST4ADT -4:00 SystemV A%sT
@@ -34,6 +46,11 @@ Zone SystemV/PST8 -8:00 - PST
Zone SystemV/YST9 -9:00 - YST
Zone SystemV/HST10 -10:00 - HST
+# pacificnew
+# IANA tzdb file 'pacificnew' used to contain a Link for US/Pacific-New.
+# 'pacificnew' file was removed in 2020b. We keep the Link here for compatibility.
+Link America/Los_Angeles US/Pacific-New
+
# The list below is for supporting legacy ICU zone aliases.
# These definitions were originally defined in tz.alias.
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp b/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
index b946ffb2c9d..dcdbf65ceab 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
@@ -51,7 +51,7 @@
using namespace std;
-bool ICU44PLUS = TRUE;
+bool ICU44PLUS = true;
string TZ_RESOURCE_NAME = ICU_TZ_RESOURCE;
//--------------------------------------------------------------------
@@ -1431,19 +1431,19 @@ void FinalRule::print(ostream& os) const {
int main(int argc, char *argv[]) {
string rootpath, zonetab, version;
- bool validArgs = FALSE;
+ bool validArgs = false;
if (argc == 4 || argc == 5) {
- validArgs = TRUE;
+ validArgs = true;
rootpath = argv[1];
zonetab = argv[2];
version = argv[3];
if (argc == 5) {
if (strcmp(argv[4], "--old") == 0) {
- ICU44PLUS = FALSE;
+ ICU44PLUS = false;
TZ_RESOURCE_NAME = ICU_TZ_RESOURCE_OLD;
} else {
- validArgs = FALSE;
+ validArgs = false;
}
}
}
@@ -1781,7 +1781,6 @@ int main(int argc, char *argv[]) {
time_t sec;
time(&sec);
struct tm* now = localtime(&sec);
- int32_t thisYear = now->tm_year + 1900;
string filename = TZ_RESOURCE_NAME + ".txt";
// Write out a resource-bundle source file containing data for
@@ -1790,7 +1789,7 @@ int main(int argc, char *argv[]) {
if (file) {
file << "//---------------------------------------------------------" << endl
<< "// Copyright (C) 2016 and later: Unicode, Inc. and others." << endl
- << "// License & terms of use: http://www.unicode.org/copyright.html#License" << endl
+ << "// License & terms of use: http://www.unicode.org/copyright.html" << endl
<< "//---------------------------------------------------------" << endl
<< "// Build tool: tz2icu" << endl
<< "// Build date: " << asctime(now) /* << endl -- asctime emits CR */
diff --git a/Build/source/libs/icu/version.ac b/Build/source/libs/icu/version.ac
index 54832fb928f..a102de17fdc 100644
--- a/Build/source/libs/icu/version.ac
+++ b/Build/source/libs/icu/version.ac
@@ -1,4 +1,5 @@
-dnl Copyright 2016-2019 Karl Berry <tex-live@tug.org>
+dnl $Id$
+dnl Copyright 2016-2021 Karl Berry <tex-live@tug.org>
dnl Copyright 2011-2015 Peter Breitenlohner <tex-live@tug.org>
dnl
dnl This file is free software; the copyright holder
@@ -6,4 +7,4 @@ dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl
dnl m4-include this file to define the current ICU version as icu_version.
-m4_define([icu_version], [65.1])
+m4_define([icu_version], [68.2])